X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a3bf7524f394af039efe196a186f7969cbabcc19..cb98e78b1e363e70d07360728c49b6dd21f36f7c:/src/common/layout.cpp diff --git a/src/common/layout.cpp b/src/common/layout.cpp index 170ba303a0..d479f3476e 100644 --- a/src/common/layout.cpp +++ b/src/common/layout.cpp @@ -1,12 +1,12 @@ ///////////////////////////////////////////////////////////////////////////// -// 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: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================= @@ -17,35 +17,53 @@ // 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() @@ -56,12 +74,8 @@ wxIndividualLayoutConstraint::wxIndividualLayoutConstraint() value = 0; percent = 0; otherEdge = wxTop; - done = FALSE; - otherWin = (wxWindowBase *) NULL; -} - -wxIndividualLayoutConstraint::~wxIndividualLayoutConstraint() -{ + done = false; + otherWin = NULL; } void wxIndividualLayoutConstraint::Set(wxRelationship rel, wxWindowBase *otherW, wxEdge otherE, int val, int marg) @@ -144,11 +158,11 @@ bool wxIndividualLayoutConstraint::ResetIfWin(wxWindowBase *otherW) value = 0; percent = 0; otherEdge = wxTop; - otherWin = (wxWindowBase *) NULL; - return TRUE; + otherWin = NULL; + return true; } - return FALSE; + return false; } // Try to satisfy constraint @@ -156,8 +170,8 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr { if (relationship == wxAbsolute) { - done = TRUE; - return TRUE; + done = true; + return true; } switch (myEdge) @@ -175,11 +189,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr if (edgePos != -1) { value = edgePos - margin; - done = TRUE; - return TRUE; + done = true; + return true; } else - return FALSE; + return false; } case wxRightOf: { @@ -187,11 +201,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr if (edgePos != -1) { value = edgePos + margin; - done = TRUE; - return TRUE; + done = true; + return true; } else - return FALSE; + return false; } case wxPercentOf: { @@ -199,11 +213,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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: { @@ -213,24 +227,24 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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; @@ -250,11 +264,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr if (edgePos != -1) { value = edgePos - margin; - done = TRUE; - return TRUE; + done = true; + return true; } else - return FALSE; + return false; } case wxRightOf: { @@ -262,11 +276,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr if (edgePos != -1) { value = edgePos + margin; - done = TRUE; - return TRUE; + done = true; + return true; } else - return FALSE; + return false; } case wxPercentOf: { @@ -274,11 +288,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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: { @@ -288,27 +302,27 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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; @@ -328,11 +342,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr if (edgePos != -1) { value = edgePos - margin; - done = TRUE; - return TRUE; + done = true; + return true; } else - return FALSE; + return false; } case wxBelow: { @@ -340,11 +354,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr if (edgePos != -1) { value = edgePos + margin; - done = TRUE; - return TRUE; + done = true; + return true; } else - return FALSE; + return false; } case wxPercentOf: { @@ -352,11 +366,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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: { @@ -366,24 +380,24 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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; @@ -403,11 +417,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr if (edgePos != -1) { value = edgePos + margin; - done = TRUE; - return TRUE; + done = true; + return true; } else - return FALSE; + return false; } case wxBelow: { @@ -415,11 +429,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr if (edgePos != -1) { value = edgePos - margin; - done = TRUE; - return TRUE; + done = true; + return true; } else - return FALSE; + return false; } case wxPercentOf: { @@ -427,11 +441,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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: { @@ -441,27 +455,27 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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; @@ -481,11 +495,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr if (edgePos != -1) { value = edgePos - margin; - done = TRUE; - return TRUE; + done = true; + return true; } else - return FALSE; + return false; } case wxRightOf: { @@ -493,11 +507,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr if (edgePos != -1) { value = edgePos + margin; - done = TRUE; - return TRUE; + done = true; + return true; } else - return FALSE; + return false; } case wxPercentOf: { @@ -505,11 +519,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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: { @@ -519,17 +533,17 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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; @@ -549,11 +563,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr if (edgePos != -1) { value = edgePos - margin; - done = TRUE; - return TRUE; + done = true; + return true; } else - return FALSE; + return false; } case wxBelow: { @@ -561,11 +575,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr if (edgePos != -1) { value = edgePos + margin; - done = TRUE; - return TRUE; + done = true; + return true; } else - return FALSE; + return false; } case wxPercentOf: { @@ -573,11 +587,11 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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: { @@ -587,17 +601,17 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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; @@ -614,22 +628,22 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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: { @@ -639,23 +653,23 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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; @@ -672,22 +686,22 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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: { @@ -697,23 +711,23 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr 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; @@ -723,7 +737,7 @@ bool wxIndividualLayoutConstraint::SatisfyConstraint(wxLayoutConstraints *constr default: break; } - return FALSE; + return false; } // Get the value of this edge or dimension, or if this is not determinable, -1. @@ -960,51 +974,47 @@ wxLayoutConstraints::wxLayoutConstraints() 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 ++;