X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e39af974ef7846e26686ae39d74e4696c1fef0c3..2d34a3036ee7d4f1d2b6caf8a1e47f67930a430a:/src/common/wincmn.cpp diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index d7492c0a39..be19ab6146 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -114,7 +114,6 @@ void wxWindowBase::InitBase() // no window yet, no parent nor children m_parent = (wxWindow *)NULL; m_windowId = -1; - m_children.DeleteContents( FALSE ); // don't auto delete node data // no constraints on the minimal window size m_minWidth = @@ -263,7 +262,7 @@ wxWindowBase::~wxWindowBase() // Just in case we've loaded a top-level window via LoadNativeDialog but // we weren't a dialog class - wxTopLevelWindows.DeleteObject(this); + wxTopLevelWindows.DeleteObject((wxWindow*)this); wxASSERT_MSG( GetChildren().GetCount() == 0, wxT("children not destroyed") ); @@ -344,7 +343,7 @@ bool wxWindowBase::Close(bool force) bool wxWindowBase::DestroyChildren() { - wxWindowList::Node *node; + wxWindowList::compatibility_iterator node; for ( ;; ) { // we iterate until the list becomes empty @@ -520,7 +519,7 @@ wxSize wxWindowBase::DoGetBestSize() const int maxX = 0, maxY = 0; - for ( wxWindowList::Node *node = GetChildren().GetFirst(); + for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); node; node = node->GetNext() ) { @@ -554,7 +553,7 @@ wxSize wxWindowBase::DoGetBestSize() const int maxX = 0, maxY = 0; - for ( wxWindowList::Node *node = GetChildren().GetFirst(); + for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); node; node = node->GetNext() ) { @@ -708,9 +707,9 @@ void wxWindowBase::AddChild(wxWindowBase *child) // this should never happen and it will lead to a crash later if it does // because RemoveChild() will remove only one node from the children list // and the other(s) one(s) will be left with dangling pointers in them - wxASSERT_MSG( !GetChildren().Find(child), _T("AddChild() called twice") ); + wxASSERT_MSG( !GetChildren().Find((wxWindow*)child), _T("AddChild() called twice") ); - GetChildren().Append(child); + GetChildren().Append((wxWindow*)child); child->SetParent(this); } @@ -718,8 +717,8 @@ void wxWindowBase::RemoveChild(wxWindowBase *child) { wxCHECK_RET( child, wxT("can't remove a NULL child") ); - GetChildren().DeleteObject(child); - child->SetParent((wxWindow *)NULL); + GetChildren().DeleteObject((wxWindow *)child); + child->SetParent(NULL); } bool wxWindowBase::Reparent(wxWindowBase *newParent) @@ -738,7 +737,7 @@ bool wxWindowBase::Reparent(wxWindowBase *newParent) } else { - wxTopLevelWindows.DeleteObject(this); + wxTopLevelWindows.DeleteObject((wxWindow *)this); } // add it to the new one @@ -748,7 +747,7 @@ bool wxWindowBase::Reparent(wxWindowBase *newParent) } else { - wxTopLevelWindows.Append(this); + wxTopLevelWindows.Append((wxWindow *)this); } return TRUE; @@ -988,7 +987,7 @@ wxWindow *wxWindowBase::FindWindow( long id ) return (wxWindow *)this; wxWindowBase *res = (wxWindow *)NULL; - wxWindowList::Node *node; + wxWindowList::compatibility_iterator node; for ( node = m_children.GetFirst(); node && !res; node = node->GetNext() ) { wxWindowBase *child = node->GetData(); @@ -1004,7 +1003,7 @@ wxWindow *wxWindowBase::FindWindow( const wxString& name ) return (wxWindow *)this; wxWindowBase *res = (wxWindow *)NULL; - wxWindowList::Node *node; + wxWindowList::compatibility_iterator node; for ( node = m_children.GetFirst(); node && !res; node = node->GetNext() ) { wxWindow *child = node->GetData(); @@ -1060,7 +1059,7 @@ wxWindow *wxFindWindowRecursively(const wxWindow *parent, return (wxWindow *)parent; // It wasn't, so check all its children - for ( wxWindowList::Node * node = parent->GetChildren().GetFirst(); + for ( wxWindowList::compatibility_iterator node = parent->GetChildren().GetFirst(); node; node = node->GetNext() ) { @@ -1090,7 +1089,7 @@ wxWindow *wxFindWindowHelper(const wxWindow *parent, } // start at very top of wx's windows - for ( wxWindowList::Node * node = wxTopLevelWindows.GetFirst(); + for ( wxWindowList::compatibility_iterator node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() ) { @@ -1142,7 +1141,7 @@ void wxWindowBase::MakeModal(bool modal) // Disable all other windows if ( IsTopLevel() ) { - wxWindowList::Node *node = wxTopLevelWindows.GetFirst(); + wxWindowList::compatibility_iterator node = wxTopLevelWindows.GetFirst(); while (node) { wxWindow *win = node->GetData(); @@ -1159,7 +1158,7 @@ bool wxWindowBase::Validate() #if wxUSE_VALIDATORS bool recurse = (GetExtraStyle() & wxWS_EX_VALIDATE_RECURSIVELY) != 0; - wxWindowList::Node *node; + wxWindowList::compatibility_iterator node; for ( node = m_children.GetFirst(); node; node = node->GetNext() ) { wxWindowBase *child = node->GetData(); @@ -1184,7 +1183,7 @@ bool wxWindowBase::TransferDataToWindow() #if wxUSE_VALIDATORS bool recurse = (GetExtraStyle() & wxWS_EX_VALIDATE_RECURSIVELY) != 0; - wxWindowList::Node *node; + wxWindowList::compatibility_iterator node; for ( node = m_children.GetFirst(); node; node = node->GetNext() ) { wxWindowBase *child = node->GetData(); @@ -1218,7 +1217,7 @@ bool wxWindowBase::TransferDataFromWindow() #if wxUSE_VALIDATORS bool recurse = (GetExtraStyle() & wxWS_EX_VALIDATE_RECURSIVELY) != 0; - wxWindowList::Node *node; + wxWindowList::compatibility_iterator node; for ( node = m_children.GetFirst(); node; node = node->GetNext() ) { wxWindow *child = node->GetData(); @@ -1409,15 +1408,15 @@ void wxWindowBase::AddConstraintReference(wxWindowBase *otherWin) { if ( !m_constraintsInvolvedIn ) m_constraintsInvolvedIn = new wxWindowList; - if ( !m_constraintsInvolvedIn->Find(otherWin) ) - m_constraintsInvolvedIn->Append(otherWin); + if ( !m_constraintsInvolvedIn->Find((wxWindow *)otherWin) ) + m_constraintsInvolvedIn->Append((wxWindow *)otherWin); } // REMOVE back-pointer to other windows we're involved with. void wxWindowBase::RemoveConstraintReference(wxWindowBase *otherWin) { if ( m_constraintsInvolvedIn ) - m_constraintsInvolvedIn->DeleteObject(otherWin); + m_constraintsInvolvedIn->DeleteObject((wxWindow *)otherWin); } // Reset any constraints that mention this window @@ -1425,7 +1424,7 @@ void wxWindowBase::DeleteRelatedConstraints() { if ( m_constraintsInvolvedIn ) { - wxWindowList::Node *node = m_constraintsInvolvedIn->GetFirst(); + wxWindowList::compatibility_iterator node = m_constraintsInvolvedIn->GetFirst(); while (node) { wxWindow *win = node->GetData(); @@ -1444,8 +1443,8 @@ void wxWindowBase::DeleteRelatedConstraints() constr->centreY.ResetIfWin(this); } - wxWindowList::Node *next = node->GetNext(); - delete node; + wxWindowList::compatibility_iterator next = node->GetNext(); + m_constraintsInvolvedIn->Erase(node); node = next; } @@ -1559,7 +1558,7 @@ bool wxWindowBase::DoPhase(int phase) int noChanges = 0; // loop over all children setting their constraints - for ( wxWindowList::Node *node = GetChildren().GetFirst(); + for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); node; node = node->GetNext() ) { @@ -1612,7 +1611,7 @@ void wxWindowBase::ResetConstraints() constr->centreY.SetDone(FALSE); } - wxWindowList::Node *node = GetChildren().GetFirst(); + wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); while (node) { wxWindow *win = node->GetData(); @@ -1654,7 +1653,7 @@ void wxWindowBase::SetConstraintSizes(bool recurse) if ( recurse ) { - wxWindowList::Node *node = GetChildren().GetFirst(); + wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); while (node) { wxWindow *win = node->GetData(); @@ -1782,7 +1781,7 @@ void wxWindowBase::UpdateWindowUI(long flags) if (flags & wxUPDATE_UI_RECURSE) { - wxWindowList::Node* node = GetChildren().GetFirst(); + wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); while (node) { wxWindow* child = (wxWindow*) node->GetData(); @@ -1831,12 +1830,14 @@ void wxWindowBase::DoUpdateWindowUI(wxUpdateUIEvent& event) #endif } +#if 0 // call internal idle recursively +// may be obsolete (wait until OnIdle scheme stabilises) void wxWindowBase::ProcessInternalIdle() { OnInternalIdle(); - wxWindowList::Node *node = GetChildren().GetFirst(); + wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); while (node) { wxWindow *child = node->GetData(); @@ -1844,6 +1845,7 @@ void wxWindowBase::ProcessInternalIdle() node = node->GetNext(); } } +#endif // ---------------------------------------------------------------------------- // dialog units translations @@ -1882,7 +1884,7 @@ wxPoint wxWindowBase::ConvertDialogToPixels(const wxPoint& pt) // propagate the colour change event to the subwindows void wxWindowBase::OnSysColourChanged(wxSysColourChangedEvent& event) { - wxWindowList::Node *node = GetChildren().GetFirst(); + wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); while ( node ) { // Only propagate to non-top-level windows @@ -2004,6 +2006,7 @@ wxAccessible* wxWindowBase::CreateAccessible() #endif +#if !wxUSE_STL // ---------------------------------------------------------------------------- // list classes implementation // ---------------------------------------------------------------------------- @@ -2012,6 +2015,7 @@ void wxWindowListNode::DeleteData() { delete (wxWindow *)GetData(); } +#endif // ---------------------------------------------------------------------------- // borders @@ -2106,6 +2110,24 @@ void wxWindowBase::ReleaseMouse() GetCapture()); } +#if wxUSE_HOTKEY + +bool +wxWindowBase::RegisterHotKey(int WXUNUSED(hotkeyId), + int WXUNUSED(modifiers), + int WXUNUSED(keycode)) +{ + // not implemented + return false; +} + +bool wxWindowBase::UnregisterHotKey(int WXUNUSED(hotkeyId)) +{ + // not implemented + return false; +} + +#endif // wxUSE_HOTKEY void wxWindowBase::SendDestroyEvent() { @@ -2141,10 +2163,9 @@ bool wxWindowBase::TryValidator(wxEvent& event) bool wxWindowBase::TryParent(wxEvent& event) { - // Carry on up the parent-child hierarchy, but only if event is a command - // event: it wouldn't make sense for a parent to receive a child's size - // event, for example - if ( event.IsCommandEvent() ) + // carry on up the parent-child hierarchy if the propgation count hasn't + // reached zero yet + if ( event.ShouldPropagate() ) { // honour the requests to stop propagation at this window: this is // used by the dialogs, for example, to prevent processing the events @@ -2154,7 +2175,11 @@ bool wxWindowBase::TryParent(wxEvent& event) { wxWindow *parent = GetParent(); if ( parent && !parent->IsBeingDeleted() ) + { + wxPropagateOnce propagateOnce(event); + return parent->GetEventHandler()->ProcessEvent(event); + } } } @@ -2205,7 +2230,7 @@ wxAccStatus wxWindowAccessible::GetLocation(wxRect& rect, int elementId) { if (elementId <= (int) GetWindow()->GetChildren().GetCount()) { - win = (wxWindow*) GetWindow()->GetChildren().Nth(elementId-1)->GetData(); + win = GetWindow()->GetChildren().Item(elementId-1)->GetData(); } else return wxACC_FAIL; @@ -2253,7 +2278,8 @@ wxAccStatus wxWindowAccessible::Navigate(wxNavDir navDir, int fromId, case wxNAVDIR_DOWN: case wxNAVDIR_NEXT: { - wxWindowList::Node *node = NULL; + wxWindowList::compatibility_iterator node = + wxWindowList::compatibility_iterator(); if (fromId == 0) { // Can't navigate to sibling of this window @@ -2266,12 +2292,12 @@ wxAccStatus wxWindowAccessible::Navigate(wxNavDir navDir, int fromId, else { if (fromId <= (int) GetWindow()->GetChildren().GetCount()) - node = (wxWindowList::Node*) GetWindow()->GetChildren().Nth(fromId-1); + node = GetWindow()->GetChildren().Item(fromId-1); } if (node && node->GetNext()) { - wxWindow* nextWindow = (wxWindow*) node->GetNext()->Data(); + wxWindow* nextWindow = node->GetNext()->GetData(); *toObject = nextWindow->GetOrCreateAccessible(); return wxACC_OK; } @@ -2282,7 +2308,8 @@ wxAccStatus wxWindowAccessible::Navigate(wxNavDir navDir, int fromId, case wxNAVDIR_UP: case wxNAVDIR_PREVIOUS: { - wxWindowList::Node *node = NULL; + wxWindowList::compatibility_iterator node = + wxWindowList::compatibility_iterator(); if (fromId == 0) { // Can't navigate to sibling of this window @@ -2295,12 +2322,12 @@ wxAccStatus wxWindowAccessible::Navigate(wxNavDir navDir, int fromId, else { if (fromId <= (int) GetWindow()->GetChildren().GetCount()) - node = (wxWindowList::Node*) GetWindow()->GetChildren().Nth(fromId-1); + node = GetWindow()->GetChildren().Item(fromId-1); } if (node && node->GetPrevious()) { - wxWindow* previousWindow = (wxWindow*) node->GetPrevious()->Data(); + wxWindow* previousWindow = node->GetPrevious()->GetData(); *toObject = previousWindow->GetOrCreateAccessible(); return wxACC_OK; } @@ -2373,7 +2400,7 @@ wxAccStatus wxWindowAccessible::GetChild(int childId, wxAccessible** child) if (childId > (int) GetWindow()->GetChildren().GetCount()) return wxACC_FAIL; - wxWindow* childWindow = (wxWindow*) GetWindow()->GetChildren().Nth(childId-1)->GetData(); + wxWindow* childWindow = GetWindow()->GetChildren().Item(childId-1)->GetData(); *child = childWindow->GetOrCreateAccessible(); if (*child) return wxACC_OK;