X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/58654ed0f2b9f7888c80840ce3d526c98a9bf05f..29f7914424a7941e9374a5445f95574f2f041659:/src/common/wincmn.cpp diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index 66390ee06f..12e2f11fef 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -53,11 +53,15 @@ #include "wx/tooltip.h" #endif // wxUSE_TOOLTIPS +#if wxUSE_CARET + #include "wx/caret.h" +#endif // wxUSE_CARET + // ---------------------------------------------------------------------------- // static data // ---------------------------------------------------------------------------- -int wxWindowBase::ms_lastControlId = 0; +int wxWindowBase::ms_lastControlId = -200; IMPLEMENT_ABSTRACT_CLASS(wxWindowBase, wxEvtHandler) @@ -136,6 +140,10 @@ void wxWindowBase::InitBase() #if wxUSE_TOOLTIPS m_tooltip = (wxToolTip *)NULL; #endif // wxUSE_TOOLTIPS + +#if wxUSE_CARET + m_caret = (wxCaret *)NULL; +#endif // wxUSE_CARET } // common part of window creation process @@ -179,7 +187,12 @@ wxWindowBase::~wxWindowBase() // we weren't a dialog class wxTopLevelWindows.DeleteObject(this); - DestroyChildren(); + wxASSERT_MSG( GetChildren().GetCount() == 0, _T("children not destroyed") ); + +#if wxUSE_CARET + if ( m_caret ) + delete m_caret; +#endif // wxUSE_CARET if ( m_windowValidator ) delete m_windowValidator; @@ -244,13 +257,21 @@ bool wxWindowBase::Close(bool force) bool wxWindowBase::DestroyChildren() { wxWindowList::Node *node; - for ( node = GetChildren().GetFirst(); node; node = node->GetNext() ) + for ( ;; ) { + // we iterate until the list becomes empty + node = GetChildren().GetFirst(); + if ( !node ) + break; + wxWindow *child = node->GetData(); - if ( child ) - { - delete child; - } + + wxASSERT_MSG( child, _T("children list contains empty nodes") ); + + delete child; + + wxASSERT_MSG( !GetChildren().Find(child), + _T("child didn't remove itself using RemoveChild()") ); } return TRUE; @@ -301,6 +322,14 @@ void wxWindowBase::Fit() while ( node ) { wxWindow *win = node->GetData(); + if ( win->IsKindOf(CLASSINFO(wxFrame)) || + win->IsKindOf(CLASSINFO(wxDialog)) ) + { + // dialogs and frames line 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); @@ -496,6 +525,24 @@ bool wxWindowBase::SetFont(const wxFont& font) return TRUE; } +#if wxUSE_CARET +void wxWindowBase::SetCaret(wxCaret *caret) +{ + if ( m_caret ) + { + delete m_caret; + } + + m_caret = caret; + + if ( m_caret ) + { + wxASSERT_MSG( m_caret->GetWindow() == this, + "caret should be created associated to this window" ); + } +} +#endif // wxUSE_CARET + // ---------------------------------------------------------------------------- // validators // ---------------------------------------------------------------------------- @@ -567,7 +614,7 @@ wxWindow *wxWindowBase::FindWindow( const wxString& name ) void wxWindowBase::MakeModal(bool WXUNUSED(modal)) { - wxFAIL_MSG("TODO"); + wxFAIL_MSG(_T("TODO")); } bool wxWindowBase::Validate() @@ -577,7 +624,7 @@ bool wxWindowBase::Validate() { wxWindowBase *child = node->GetData(); wxValidator *validator = child->GetValidator(); - if ( validator && validator->Validate(this) ) + if ( validator && !validator->Validate((wxWindow *)this) ) { return FALSE; } @@ -1108,14 +1155,11 @@ void wxWindowBase::UpdateWindowUI() if ( event.GetSetChecked() ) ((wxCheckBox *)this)->SetValue(event.GetChecked()); } - // TODO No radio buttons in wxGTK yet -#ifndef __WXGTK__ else if ( IsKindOf(CLASSINFO(wxRadioButton)) ) { if ( event.GetSetChecked() ) ((wxRadioButton *) this)->SetValue(event.GetChecked()); } -#endif // !wxGTK } } }