/////////////////////////////////////////////////////////////////////////////
-// Name: layout.cpp
+// Name: src/common/layout.cpp
// Purpose: Constraint layout system classes
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence: wxWidgets licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// =============================================================================
// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "layout.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
- #pragma hdrstop
+ #pragma hdrstop
#endif
+#if wxUSE_CONSTRAINTS
+
+#include "wx/layout.h"
+
#ifndef WX_PRECOMP
- #include "wx/defs.h"
+ #include "wx/window.h"
+ #include "wx/utils.h"
+ #include "wx/dialog.h"
+ #include "wx/msgdlg.h"
+ #include "wx/intl.h"
#endif
-#if wxUSE_CONSTRAINTS
-#ifndef WX_PRECOMP
- #include "wx/window.h"
- #include "wx/utils.h"
- #include "wx/dialog.h"
- #include "wx/msgdlg.h"
- #include "wx/intl.h"
+IMPLEMENT_DYNAMIC_CLASS(wxIndividualLayoutConstraint, wxObject)
+IMPLEMENT_DYNAMIC_CLASS(wxLayoutConstraints, wxObject)
+
+
+inline void wxGetAsIs(wxWindowBase* win, int* w, int* h)
+{
+#if 1
+ // The old way. Works for me.
+ win->GetSize(w, h);
#endif
-#include "wx/layout.h"
+#if 0
+ // Vadim's change. Breaks wxPython's LayoutAnchors
+ win->GetBestSize(w, h);
+#endif
- IMPLEMENT_DYNAMIC_CLASS(wxIndividualLayoutConstraint, wxObject)
- IMPLEMENT_DYNAMIC_CLASS(wxLayoutConstraints, wxObject)
+#if 0
+ // Proposed compromise. Doesn't work.
+ int sw, sh, bw, bh;
+ win->GetSize(&sw, &sh);
+ win->GetBestSize(&bw, &bh);
+ if (w)
+ *w = wxMax(sw, bw);
+ if (h)
+ *h = wxMax(sh, bh);
+#endif
+}
wxIndividualLayoutConstraint::wxIndividualLayoutConstraint()
value = 0;
percent = 0;
otherEdge = wxTop;
- done = FALSE;
+ done = false;
otherWin = (wxWindowBase *) NULL;
}
-wxIndividualLayoutConstraint::~wxIndividualLayoutConstraint()
-{
-}
-
void wxIndividualLayoutConstraint::Set(wxRelationship rel, wxWindowBase *otherW, wxEdge otherE, int val, int marg)
{
if (rel == wxSameAs)
percent = 0;
otherEdge = wxTop;
otherWin = (wxWindowBase *) NULL;
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
// Try to satisfy constraint
{
if (relationship == wxAbsolute)
{
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
switch (myEdge)
if (edgePos != -1)
{
value = edgePos - margin;
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxRightOf:
{
if (edgePos != -1)
{
value = edgePos + margin;
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxPercentOf:
{
if (edgePos != -1)
{
value = (int)(edgePos*(((float)percent)*0.01) + margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxUnconstrained:
{
if (constraints->right.GetDone() && constraints->width.GetDone())
{
value = (constraints->right.GetValue() - constraints->width.GetValue() + margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else if (constraints->centreX.GetDone() && constraints->width.GetDone())
{
value = (int)(constraints->centreX.GetValue() - (constraints->width.GetValue()/2) + margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxAsIs:
{
int y;
win->GetPosition(&value, &y);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
default:
break;
if (edgePos != -1)
{
value = edgePos - margin;
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxRightOf:
{
if (edgePos != -1)
{
value = edgePos + margin;
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxPercentOf:
{
if (edgePos != -1)
{
value = (int)(edgePos*(((float)percent)*0.01) - margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxUnconstrained:
{
if (constraints->left.GetDone() && constraints->width.GetDone())
{
value = (constraints->left.GetValue() + constraints->width.GetValue() - margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else if (constraints->centreX.GetDone() && constraints->width.GetDone())
{
value = (int)(constraints->centreX.GetValue() + (constraints->width.GetValue()/2) - margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxAsIs:
{
int x, y;
int w, h;
- win->GetSize(&w, &h);
+ wxGetAsIs(win, &w, &h);
win->GetPosition(&x, &y);
value = x + w;
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
default:
break;
if (edgePos != -1)
{
value = edgePos - margin;
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxBelow:
{
if (edgePos != -1)
{
value = edgePos + margin;
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxPercentOf:
{
if (edgePos != -1)
{
value = (int)(edgePos*(((float)percent)*0.01) + margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxUnconstrained:
{
if (constraints->bottom.GetDone() && constraints->height.GetDone())
{
value = (constraints->bottom.GetValue() - constraints->height.GetValue() + margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else if (constraints->centreY.GetDone() && constraints->height.GetDone())
{
value = (constraints->centreY.GetValue() - (constraints->height.GetValue()/2) + margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxAsIs:
{
int x;
win->GetPosition(&x, &value);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
default:
break;
if (edgePos != -1)
{
value = edgePos + margin;
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxBelow:
{
if (edgePos != -1)
{
value = edgePos - margin;
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxPercentOf:
{
if (edgePos != -1)
{
value = (int)(edgePos*(((float)percent)*0.01) - margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxUnconstrained:
{
if (constraints->top.GetDone() && constraints->height.GetDone())
{
value = (constraints->top.GetValue() + constraints->height.GetValue() - margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else if (constraints->centreY.GetDone() && constraints->height.GetDone())
{
value = (constraints->centreY.GetValue() + (constraints->height.GetValue()/2) - margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxAsIs:
{
int x, y;
int w, h;
- win->GetSize(&w, &h);
+ wxGetAsIs(win, &w, &h);
win->GetPosition(&x, &y);
value = h + y;
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
default:
break;
if (edgePos != -1)
{
value = edgePos - margin;
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxRightOf:
{
if (edgePos != -1)
{
value = edgePos + margin;
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxPercentOf:
{
if (edgePos != -1)
{
value = (int)(edgePos*(((float)percent)*0.01) + margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxUnconstrained:
{
if (constraints->left.GetDone() && constraints->width.GetDone())
{
value = (int)(constraints->left.GetValue() + (constraints->width.GetValue()/2) + margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else if (constraints->right.GetDone() && constraints->width.GetDone())
{
value = (int)(constraints->left.GetValue() - (constraints->width.GetValue()/2) + margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
default:
break;
if (edgePos != -1)
{
value = edgePos - margin;
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxBelow:
{
if (edgePos != -1)
{
value = edgePos + margin;
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxPercentOf:
{
if (edgePos != -1)
{
value = (int)(edgePos*(((float)percent)*0.01) + margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxUnconstrained:
{
if (constraints->bottom.GetDone() && constraints->height.GetDone())
{
value = (int)(constraints->bottom.GetValue() - (constraints->height.GetValue()/2) + margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else if (constraints->top.GetDone() && constraints->height.GetDone())
{
value = (int)(constraints->top.GetValue() + (constraints->height.GetValue()/2) + margin);
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
default:
break;
if (edgePos != -1)
{
value = (int)(edgePos*(((float)percent)*0.01));
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxAsIs:
{
if (win)
{
int h;
- win->GetSize(&value, &h);
- done = TRUE;
- return TRUE;
+ wxGetAsIs(win, &value, &h);
+ done = true;
+ return true;
}
- else return FALSE;
+ else return false;
}
case wxUnconstrained:
{
if (constraints->left.GetDone() && constraints->right.GetDone())
{
value = constraints->right.GetValue() - constraints->left.GetValue();
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else if (constraints->centreX.GetDone() && constraints->left.GetDone())
{
value = (int)(2*(constraints->centreX.GetValue() - constraints->left.GetValue()));
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else if (constraints->centreX.GetDone() && constraints->right.GetDone())
{
value = (int)(2*(constraints->right.GetValue() - constraints->centreX.GetValue()));
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
default:
break;
if (edgePos != -1)
{
value = (int)(edgePos*(((float)percent)*0.01));
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
case wxAsIs:
{
if (win)
{
int w;
- win->GetSize(&w, &value);
- done = TRUE;
- return TRUE;
+ wxGetAsIs(win, &w, &value);
+ done = true;
+ return true;
}
- else return FALSE;
+ else return false;
}
case wxUnconstrained:
{
if (constraints->top.GetDone() && constraints->bottom.GetDone())
{
value = constraints->bottom.GetValue() - constraints->top.GetValue();
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else if (constraints->top.GetDone() && constraints->centreY.GetDone())
{
value = (int)(2*(constraints->centreY.GetValue() - constraints->top.GetValue()));
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else if (constraints->bottom.GetDone() && constraints->centreY.GetDone())
{
value = (int)(2*(constraints->bottom.GetValue() - constraints->centreY.GetValue()));
- done = TRUE;
- return TRUE;
+ done = true;
+ return true;
}
else
- return FALSE;
+ return false;
}
default:
break;
default:
break;
}
- return FALSE;
+ return false;
}
// Get the value of this edge or dimension, or if this is not determinable, -1.
height.SetEdge(wxHeight);
}
-wxLayoutConstraints::~wxLayoutConstraints()
-{
-}
-
bool wxLayoutConstraints::SatisfyConstraints(wxWindowBase *win, int *nChanges)
{
int noChanges = 0;
bool done = width.GetDone();
- bool newDone = (done ? TRUE : width.SatisfyConstraint(this, win));
+ bool newDone = (done ? true : width.SatisfyConstraint(this, win));
if (newDone != done)
noChanges ++;
done = height.GetDone();
- newDone = (done ? TRUE : height.SatisfyConstraint(this, win));
+ newDone = (done ? true : height.SatisfyConstraint(this, win));
if (newDone != done)
noChanges ++;
done = left.GetDone();
- newDone = (done ? TRUE : left.SatisfyConstraint(this, win));
+ newDone = (done ? true : left.SatisfyConstraint(this, win));
if (newDone != done)
noChanges ++;
done = top.GetDone();
- newDone = (done ? TRUE : top.SatisfyConstraint(this, win));
+ newDone = (done ? true : top.SatisfyConstraint(this, win));
if (newDone != done)
noChanges ++;
done = right.GetDone();
- newDone = (done ? TRUE : right.SatisfyConstraint(this, win));
+ newDone = (done ? true : right.SatisfyConstraint(this, win));
if (newDone != done)
noChanges ++;
done = bottom.GetDone();
- newDone = (done ? TRUE : bottom.SatisfyConstraint(this, win));
+ newDone = (done ? true : bottom.SatisfyConstraint(this, win));
if (newDone != done)
noChanges ++;
done = centreX.GetDone();
- newDone = (done ? TRUE : centreX.SatisfyConstraint(this, win));
+ newDone = (done ? true : centreX.SatisfyConstraint(this, win));
if (newDone != done)
noChanges ++;
done = centreY.GetDone();
- newDone = (done ? TRUE : centreY.SatisfyConstraint(this, win));
+ newDone = (done ? true : centreY.SatisfyConstraint(this, win));
if (newDone != done)
noChanges ++;