X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5d4b632ba3c0e5e5c43412d2d7a2b485b8fcebf2..ba5b8263f3bf5393eafcf185f5948f1554034ee1:/src/common/wincmn.cpp diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index 5f7b55bbeb..dd3822251d 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -37,6 +37,7 @@ #include "wx/window.h" #include "wx/checkbox.h" #include "wx/radiobut.h" + #include "wx/textctrl.h" #include "wx/settings.h" #include "wx/dialog.h" #endif //WX_PRECOMP @@ -118,8 +119,11 @@ void wxWindowBase::InitBase() m_backgroundColour = settings.GetSystemColour(wxSYS_COLOUR_BTNFACE); m_foregroundColour = *wxBLACK; // TODO take this from sys settings too? +#ifndef __WXMAC__ m_font = *wxSWISS_FONT; // and this? - +#else + m_font = settings.GetSystemFont(wxSYS_DEFAULT_GUI_FONT); +#endif // no style bits m_windowStyle = 0; @@ -155,11 +159,7 @@ bool wxWindowBase::CreateBase(wxWindowBase *parent, const wxSize& WXUNUSED(size), long style, #if wxUSE_VALIDATORS -# if defined(__VISAGECPP__) - const wxValidator* validator, -# else const wxValidator& validator, -# endif #endif const wxString& name) { @@ -298,7 +298,7 @@ bool wxWindowBase::DestroyChildren() } // ---------------------------------------------------------------------------- -// centre/fit the window +// size/position related methods // ---------------------------------------------------------------------------- // centre the window with respect to its parent in either (or both) directions @@ -350,42 +350,62 @@ void wxWindowBase::Centre(int direction) yNew += posParent.y; } + // move the centre of this window to this position Move(xNew, yNew); } // fits the window around the children void wxWindowBase::Fit() { - int maxX = 0, - maxY = 0; + if ( GetChildren().GetCount() > 0 ) + { + SetClientSize(DoGetBestSize()); + } + //else: do nothing if we have no children +} - for ( wxWindowList::Node *node = GetChildren().GetFirst(); - node; - node = node->GetNext() ) +// return the size best suited for the current window +wxSize wxWindowBase::DoGetBestSize() const +{ + if ( GetChildren().GetCount() > 0 ) { - wxWindow *win = node->GetData(); - if ( win->IsTopLevel() ) + // our minimal acceptable size is such that all our windows fit inside + int maxX = 0, + maxY = 0; + + for ( wxWindowList::Node *node = GetChildren().GetFirst(); + node; + node = node->GetNext() ) { - // dialogs and frames lie in different top level windows - don't - // deal with them here - continue; + wxWindow *win = node->GetData(); + if ( win->IsTopLevel() ) + { + // dialogs and frames lie in different top level windows - + // don't deal with them here + continue; + } + + int wx, wy, ww, wh; + win->GetPosition(&wx, &wy); + win->GetSize(&ww, &wh); + if ( wx + ww > maxX ) + maxX = wx + ww; + if ( wy + wh > maxY ) + maxY = wy + wh; } - int wx, wy, ww, wh; - win->GetPosition(&wx, &wy); - win->GetSize(&ww, &wh); - if ( wx + ww > maxX ) - maxX = wx + ww; - if ( wy + wh > maxY ) - maxY = wy + wh; + // leave a margin + return wxSize(maxX + 7, maxY + 14); + } + else + { + // for a generic window there is no natural best size - just use the + // current one + return GetSize(); } - - // leave a margin - SetClientSize(maxX + 7, maxY + 14); } // set the min/max size of the window - void wxWindowBase::SetSizeHints(int minW, int minH, int maxW, int maxH, int WXUNUSED(incW), int WXUNUSED(incH)) @@ -595,18 +615,6 @@ void wxWindowBase::SetCaret(wxCaret *caret) // validators // ---------------------------------------------------------------------------- -# if defined(__VISAGECPP__) -void wxWindowBase::SetValidator(const wxValidator* validator) -{ - if ( m_windowValidator ) - delete m_windowValidator; - - m_windowValidator = (wxValidator *)validator->Clone(); - - if ( m_windowValidator ) - m_windowValidator->SetWindow(this) ; -} -# else void wxWindowBase::SetValidator(const wxValidator& validator) { if ( m_windowValidator ) @@ -617,7 +625,6 @@ void wxWindowBase::SetValidator(const wxValidator& validator) if ( m_windowValidator ) m_windowValidator->SetWindow(this) ; } -# endif // __VISAGECPP__ #endif // wxUSE_VALIDATORS // ---------------------------------------------------------------------------- @@ -1179,42 +1186,44 @@ void wxWindowBase::GetPositionConstraint(int *x, int *y) const // of control classes. void wxWindowBase::UpdateWindowUI() { - wxWindowID id = GetId(); - if ( id > 0 ) + wxUpdateUIEvent event(GetId()); + event.m_eventObject = this; + + if ( GetEventHandler()->ProcessEvent(event) ) { - wxUpdateUIEvent event(id); - event.m_eventObject = this; + if ( event.GetSetEnabled() ) + Enable(event.GetEnabled()); - if ( GetEventHandler()->ProcessEvent(event) ) + if ( event.GetSetText() ) { - if ( event.GetSetEnabled() ) - Enable(event.GetEnabled()); - - if ( event.GetSetText() ) + wxControl *control = wxDynamicCast(this, wxControl); + if ( control ) { - wxControl *control = wxDynamicCast(this, wxControl); - if ( control ) + wxTextCtrl *text = wxDynamicCast(control, wxTextCtrl); + if ( text ) + text->SetValue(event.GetText()); + else control->SetLabel(event.GetText()); } + } #if wxUSE_CHECKBOX - wxCheckBox *checkbox = wxDynamicCast(this, wxCheckBox); - if ( checkbox ) - { - if ( event.GetSetChecked() ) - checkbox->SetValue(event.GetChecked()); - } + wxCheckBox *checkbox = wxDynamicCast(this, wxCheckBox); + if ( checkbox ) + { + if ( event.GetSetChecked() ) + checkbox->SetValue(event.GetChecked()); + } #endif // wxUSE_CHECKBOX #if wxUSE_RADIOBUTTON - wxRadioButton *radiobtn = wxDynamicCast(this, wxRadioButton); - if ( radiobtn ) - { - if ( event.GetSetChecked() ) - radiobtn->SetValue(event.GetChecked()); - } -#endif // wxUSE_RADIOBUTTON + wxRadioButton *radiobtn = wxDynamicCast(this, wxRadioButton); + if ( radiobtn ) + { + if ( event.GetSetChecked() ) + radiobtn->SetValue(event.GetChecked()); } +#endif // wxUSE_RADIOBUTTON } }