\item {\bf centreY:} represents the vertical centre point of the window
\end{itemize}
-Most constraints are initially set to have the relationship wxUnconstrained,
+The constraints are initially set to have the relationship wxUnconstrained,
which means that their values should be calculated by looking at known constraints.
-The exceptions are {\it width} and {\it height}, which are set to wxAsIs to
-ensure that if the user does not specify a constraint, the existing
-width and height will be used, to be compatible with panel items which often
-have take a default size. If the constraint is wxAsIs, the dimension will
-not be changed.
-
-To call the \helpref{wxWindow::Layout}{wxwindowlayout} function which evaluates
-constraints, you can either call wxWindow::SetAutoLayout to tell
-default OnSize handlers to call Layout, or override OnSize and call Layout yourself.
+To calculate the position and size of the control, the layout algorithm needs to
+know exactly 4 constraints (as it has 4 numbers to calculate from them), so you
+should always set exactly 4 of the constraints from the above table.
+
+If you want the controls height or width to have the default value, you may use
+a special value for the constraint: wxAsIs. If the constraint is wxAsIs, the
+dimension will not be changed which is useful for the dialog controls which
+often have the default size (e.g. the buttons whose size is determined by their
+label).
+
+The constrains calculation is done in \helpref{wxWindow::Layout}{wxwindowlayout}
+function which evaluates constraints. To call it you can either call
+wxWindow::SetAutoLayout to tell default OnSize handlers to call Layout
+automatically whenever the window size changes, or override OnSize and call Layout
+yourself.
\subsection{Constraint layout: more detail}
By default, windows do not have a wxLayoutConstraints object. In this case, much layout
must be done explicitly, by performing calculations in OnSize members, except
-for the case of frames that have one subwindow, where wxFrame::OnSize takes care
-of resizing the child.
+for the case of frames that have exactly one subwindow (not counting toolbar and
+statusbar which are also positioned by the frame automatically), where wxFrame::OnSize
+takes care of resizing the child to always fill the frame.
To avoid the need for these rather awkward calculations, the user can create
a wxLayoutConstraints object and associate it with a window with wxWindow::SetConstraints.
It then sets all the window positions and sizes according to the values it has found.
Because the algorithm is iterative, the order in which constraints are considered is
-irrelevant.
+irrelevant, however you may reduce the number of iterations (and thus speed up
+the layout calculations) by creating the controls in such order that as many
+constraints as possible can be calculated during the first iteration. For example, if
+you have 2 buttons which you'd like to position in the lower right corner, it is
+slighty more efficient to first create the second button and specify that its
+right border IsSameAs(parent, wxRight) and then create the first one by
+specifying that it should be LeftOf() the second one than to do in a more
+natural left-to-right order.
\subsection{Window layout examples}\label{layoutexamples}
\subsubsection{Example 1: subwindow layout}
This example specifies a panel and a window side by side,
-with a text subwindow below it.
+with a text subwindow below it.
\begin{verbatim}
frame->panel = new wxPanel(frame, -1, wxPoint(0, 0), wxSize(1000, 500), 0);
wxTextCtrl *mtext = new wxTextCtrl(frame->panel, -1, "Multiline text", "Some text",
wxPoint(-1, -1), wxSize(150, 100), wxTE_MULTILINE);
-
+
wxLayoutConstraints *b3 = new wxLayoutConstraints;
b3->top.Below (btn1, 5);
b3->left.RightOf (list, 5);