]> git.saurik.com Git - wxWidgets.git/blobdiff - docs/latex/wx/tsizer.tex
wxRichTextAttr does not exist anymore - document instead wxTextAttr
[wxWidgets.git] / docs / latex / wx / tsizer.tex
index 766d8189228fc6fc33d4879b77c995426037e6c0..815b7e4357f45513e51abd8e79ac3a4b7855670b 100644 (file)
@@ -3,7 +3,6 @@
 Classes: \helpref{wxSizer}{wxsizer}, \helpref{wxGridSizer}{wxgridsizer}, 
 \helpref{wxFlexGridSizer}{wxflexgridsizer}, \helpref{wxBoxSizer}{wxboxsizer}, 
 \helpref{wxStaticBoxSizer}{wxstaticboxsizer}, 
-\helpref{wxNotebookSizer}{wxnotebooksizer},
 \helpref{CreateButtonSizer}{createbuttonsizer}
 
 Sizers, as represented by the wxSizer class and its descendants in
@@ -12,7 +11,7 @@ define the layout of controls in dialogs in wxWidgets because of
 their ability to create visually appealing dialogs independent of the
 platform, taking into account the differences in size and style of
 the individual controls. Unlike the original wxWidgets Dialog Editor,
-editors such as wxDesigner, DialogBlocks, wxrcedit, XRCed and wxWorkshop create dialogs based exclusively on sizers,
+editors such as wxDesigner, DialogBlocks, XRCed and wxWorkshop create dialogs based exclusively on sizers,
 practically forcing the user to create platform independent layouts without compromises.
 
 The next section describes and shows what can be done with sizers.
@@ -42,7 +41,7 @@ the standard font as well as the overall design of Linux/GTK widgets requires mo
 on Windows, the initial dialog size will automatically be bigger on Linux/GTK than on Windows.
 
 There are currently five different kinds of sizers available in wxWidgets. Each represents
-either a certain way to lay out dialog items in a dialog or it fulfils a special task
+either a certain way to lay out dialog items in a dialog or it fulfills a special task
 such as wrapping a static box around a dialog item (or another sizer). These sizers will
 be discussed one by one in the text below. For more detailed information on how to use sizers
 programmatically, please refer to the section \helpref{Programming with Sizers}{boxsizerprogramming}.
@@ -172,24 +171,16 @@ For programming information, see \helpref{wxGridSizer}{wxgridsizer}.
 
 Another two-dimensional sizer derived from
 wxGridSizer. The width of each column and the height of each row
-are calculated individually according the minimal requirements
+are calculated individually according to the minimal requirements
 from the respectively biggest child. Additionally, columns and
 rows can be declared to be stretchable if the sizer is assigned
-a size different from that which it requested. The following sample shows
+a size different from the one it requested. The following sample shows
 the same dialog as the one above, but using a flex grid sizer:
 
 \begin{center}
 \myimage{sizer11.eps}
 \end{center}
 
-\wxheading{wxNotebookSizer}
-
-\helpref{wxNotebookSizer}{wxnotebooksizer} can be used
-with notebooks. It calculates the size of each
-notebook page and sets the size of the notebook to the size
-of the biggest page plus some extra space required for the
-notebook tabs and decorations.
-
 \subsection{Programming with wxBoxSizer}\label{boxsizerprogramming}
 
 The basic idea behind a \helpref{wxBoxSizer}{wxboxsizer} is that windows will most often be laid out in rather
@@ -224,7 +215,7 @@ wxALIGN\_BOTTOM, wxALIGN\_CENTER\_HORIZONTAL and wxALIGN\_CENTER\_VERTICAL do wh
 wxALIGN\_CENTRE (same as wxALIGN\_CENTER) is defined as (wxALIGN\_CENTER\_HORIZONTAL |
 wxALIGN\_CENTER\_VERTICAL).  Default alignment is wxALIGN\_LEFT | wxALIGN\_TOP.
 
-As mentioned above, any window belonging to a sizer may have border, and it can be specified
+As mentioned above, any window belonging to a sizer may have border, and it can be specified
 which of the four sides may have this border, using the wxTOP, wxLEFT, wxRIGHT and wxBOTTOM
 constants or wxALL for all directions (and you may also use wxNORTH, wxWEST etc instead). These
 flags can be used in combination with the alignment flags above as the second parameter of the
@@ -274,6 +265,50 @@ MyDialog::MyDialog(wxFrame *parent, wxWindowID id, const wxString &title )
 }
 \end{verbatim}
 
+Note that the new way of specifying flags to wxSizer is via \helpref{wxSizerFlags}{wxsizerflags}.  This class greatly eases the burden of passing flags to a wxSizer.
+
+Here's how you'd do the previous example with wxSizerFlags:
+
+\begin{verbatim}
+// we want to get a dialog that is stretchable because it
+// has a text ctrl at the top and two buttons at the bottom
+
+MyDialog::MyDialog(wxFrame *parent, wxWindowID id, const wxString &title )
+        : wxDialog(parent, id, title, wxDefaultPosition, wxDefaultSize,
+                   wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
+{
+  wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
+
+  // create text ctrl with minimal size 100x60 that is horizontally and 
+  // vertically stretchable with a border width of 10
+  topsizer->Add(
+    new wxTextCtrl( this, -1, "My text.", wxDefaultPosition, wxSize(100,60), wxTE_MULTILINE),
+    wxSizerFlags(1).Align().Expand().Border(wxALL, 10));
+
+  wxBoxSizer *button_sizer = new wxBoxSizer( wxHORIZONTAL );
+
+  //create two buttons that are horizontally unstretchable, 
+  // with an all-around border with a width of 10 and implicit top alignment
+  button_sizer->Add(
+     new wxButton( this, wxID_OK, "OK" ),
+     wxSizerFlags(0).Align().Border(wxALL, 10));       
+
+  button_sizer->Add(
+     new wxButton( this, wxID_CANCEL, "Cancel" ),
+     wxSizerFlags(0).Align().Border(wxALL, 10));    
+
+  //create a sizer with no border and centered horizontally
+  topsizer->Add(
+     button_sizer,
+     wxSizerFlags(0).Center() ); 
+
+  SetSizer( topsizer );      // use the sizer for layout
+
+  topsizer->SetSizeHints( this );   // set size hints to honour minimum size
+}
+\end{verbatim}
+
+
 \subsection{Programming with wxGridSizer}\label{gridsizerprogramming}
 
 \helpref{wxGridSizer}{wxgridsizer} is a sizer which lays out its children in a two-dimensional
@@ -289,39 +324,6 @@ height and all fields in one column having the same width, but all
 rows or all columns are not necessarily the same height or width as in
 the \helpref{wxGridSizer}{wxgridsizer}.
 
-\subsection{Programming with wxNotebookSizer}\label{notebooksizerprogramming}
-
-\helpref{wxNotebookSizer}{wxnotebooksizer} is a specialized sizer to make sizers work in connection
-with using notebooks. This sizer is different from any other sizer as 
-you must not add any children to it - instead, it queries the notebook class itself.
-The only thing this sizer does is to determine the size of the biggest
-page of the notebook and report an adjusted minimal size to a more toplevel
-sizer.
-
-In order to query the size of notebook page, this page needs to have its
-own sizer, otherwise the wxNotebookSizer will ignore it. Notebook pages
-get their sizer by assigning one to them using \helpref{wxWindow::SetSizer}{wxwindowsetsizer} 
-and setting the auto-layout option to true using 
-\helpref{wxWindow::SetAutoLayout}{wxwindowsetautolayout}. Here is one
-example showing how to add a notebook page that the notebook sizer is
-aware of:
-
-\begin{verbatim}
-    wxNotebook *notebook = new wxNotebook( &dialog, -1 );
-    wxNotebookSizer *nbs = new wxNotebookSizer( notebook );
-
-    // Add panel as notebook page
-    wxPanel *panel = new wxPanel( notebook, -1 );
-    notebook->AddPage( panel, "My Notebook Page" );
-
-    wxBoxSizer *panelsizer = new wxBoxSizer( wxVERTICAL );
-
-    // Add controls to panel and panelsizer here...
-
-    panel->SetAutoLayout( true );
-    panel->SetSizer( panelsizer );
-\end{verbatim}
-
 \subsection{Programming with wxStaticBoxSizer}\label{staticboxsizerprogramming}
 
 \helpref{wxStaticBoxSizer}{wxstaticboxsizer} is a sizer derived from wxBoxSizer but adds a static