void Menu::CalculateMenuSelectorCubePosition() { SetSelectItemY(GetMenuItems()[GetCurrentSelection()]->GetMenuItemY() + 7); SetSelectItemX(GetMenuX() + GetMenuWidth() - 25); SetSelectItemHeight(Constants::TileSize()); SetSelectItemWidth(Constants::TileSize()); }
wxMenuItem *wxMenu::DoRemove(wxMenuItem *item) { // Update indices of radio groups. if ( m_radioData ) { int pos = GetMenuItems().IndexOf(item); if ( m_radioData->UpdateOnRemoveItem(pos) ) { wxASSERT_MSG( item->IsRadio(), wxS("Removing non radio button from radio group?") ); } //else: item being removed is not in a radio group } /* // we need to find the items position in the child list size_t pos; wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); for ( pos = 0; node; pos++ ) { if ( node->GetData() == item ) break; node = node->GetNext(); } // DoRemove() (unlike Remove) can only be called for existing item! wxCHECK_MSG( node, NULL, wxT("bug in wxMenu::Remove logic") ); wxOSXMenuRemoveItem(m_hMenu , pos ); */ GetPeer()->Remove( item ); // and from internal data structures return wxMenuBase::DoRemove(item); }
wxMenuItem *wxMenu::DoRemove(wxMenuItem *item) { if ( m_startRadioGroup != -1 ) { // Check if we're removing the item starting the radio group if ( GetMenuItems().Item(m_startRadioGroup)->GetData() == item ) { // Yes, we do, so reset its index as the next item added shouldn't // count as part of the same radio group anyhow. m_startRadioGroup = -1; } } /* // we need to find the items position in the child list size_t pos; wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); for ( pos = 0; node; pos++ ) { if ( node->GetData() == item ) break; node = node->GetNext(); } // DoRemove() (unlike Remove) can only be called for existing item! wxCHECK_MSG( node, NULL, wxT("bug in wxMenu::Remove logic") ); wxOSXMenuRemoveItem(m_hMenu , pos ); */ GetPeer()->Remove( item ); // and from internal data structures return wxMenuBase::DoRemove(item); }
wxMenuItem *wxMenu::DoRemove(wxMenuItem *item) { // we need to find the items position in the child list size_t pos; wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); for ( pos = 0; node; pos++ ) { if ( node->GetData() == item ) break; node = node->GetNext(); } // DoRemove() (unlike Remove) can only be called for existing item! wxCHECK_MSG( node, NULL, wxT("bug in wxMenu::Remove logic") ); ::DeleteMenuItem(MAC_WXHMENU(m_hMenu) , pos + 1); if ( IsAttached() && GetMenuBar()->IsAttached() ) // otherwise, the change won't be visible GetMenuBar()->Refresh(); // and from internal data structures return wxMenuBase::DoRemove(item); }
void wxMenu::SetForegroundColour(const wxColour& col) { m_foregroundColour = col; if (!col.IsOk()) return; if (m_menuWidget) wxDoChangeForegroundColour(m_menuWidget, (wxColour&) col); if (m_buttonWidget) wxDoChangeForegroundColour(m_buttonWidget, (wxColour&) col); #if defined(__INTEL_COMPILER) && 1 /* VDM auto patch */ # pragma ivdep # pragma swp # pragma unroll # pragma prefetch # if 0 # pragma simd noassert # endif #endif /* VDM auto patch */ for ( wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); node; node = node->GetNext() ) { wxMenuItem* item = node->GetData(); if (item->GetButtonWidget()) { // This crashes because it uses gadgets // wxDoChangeForegroundColour(item->GetButtonWidget(), (wxColour&) col); } if (item->GetSubMenu()) item->GetSubMenu()->SetForegroundColour((wxColour&) col); } }
// non recursive search wxMenuItem *wxMenuBase::FindChildItem(int id, size_t *ppos) const { wxMenuItem *item = (wxMenuItem *)NULL; wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); size_t pos; for ( pos = 0; node; pos++ ) { if ( node->GetData()->GetId() == id ) { item = node->GetData(); break; } node = node->GetNext(); } if ( ppos ) { *ppos = item ? pos : (size_t)wxNOT_FOUND; } return item; }
wxMenuItem *wxMenu::DoRemove(wxMenuItem *item) { // we need to find the items position in the child list size_t pos; wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); for ( pos = 0; node; pos++ ) { if ( node->GetData() == item ) break; node = node->GetNext(); } // DoRemove() (unlike Remove) can only be called for existing item! wxCHECK_MSG( node, NULL, wxT("bug in wxMenu::Remove logic") ); // remove the item from the menu wxMenuItem *ret=wxMenuBase::DoRemove(item); if ( IsAttached() && GetMenuBar()->IsAttached() ) { // Regenerate the menu resource GetMenuBar()->Refresh(); } return ret; }
// Destroys the Motif implementation of the menu, // but maintains the wxWidgets data structures so we can // do a CreateMenu again. void wxMenu::DestroyMenu (bool full) { for ( wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); node; node = node->GetNext() ) { wxMenuItem *item = node->GetData(); item->SetMenuBar(NULL); item->DestroyItem(full); } if (m_buttonWidget) { if (full) { XtVaSetValues((Widget) m_buttonWidget, XmNsubMenuId, NULL, NULL); XtDestroyWidget ((Widget) m_buttonWidget); m_buttonWidget = (WXWidget) 0; } } if (m_menuWidget && full) { XtDestroyWidget((Widget) m_menuWidget); m_menuWidget = (WXWidget) NULL; } }
WXWidget wxMenu::FindMenuItem (int id, wxMenuItem ** it) const { if (id == m_menuId) { if (it) *it = NULL; return m_buttonWidget; } for ( wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); node; node = node->GetNext() ) { wxMenuItem *item = node->GetData (); if (item->GetId() == id) { if (it) *it = item; return item->GetButtonWidget(); } if (item->GetSubMenu()) { WXWidget w = item->GetSubMenu()->FindMenuItem (id, it); if (w) { return w; } } } if (it) *it = NULL; return (WXWidget) NULL; }
/*virtual*/ void CWndToolBar::ChangeFocus(ui8 oldFocus) { const CWndToolBar::CBarItem* pItems = GetMenuItems(); SendMessage( GetParent(), ToWord('L', 'D'), (NATIVEPTR)pItems[oldFocus].m_pWndMenu ); SendMessage( GetParent(), ToWord('L', 'E'), (NATIVEPTR)pItems[m_nFocus].m_pWndMenu ); SendMessage( GetParent(), ToWord('L', 'R'), 0 ); Settings.Runtime.m_nMenuItem = m_nFocus; }
/*virtual*/ void CWndToolBar::OnKey(ui16 nKey) { const CWndToolBar::CBarItem* pItems = GetMenuItems(); ui8 oldFocus = m_nFocus; if ( nKey & BIOS::KEY::KeyLeft) { if ( pItems[m_nFocus].m_eType == CBarItem::IMain ) { m_nFocus++; while((pItems[m_nFocus].m_eType != CBarItem::IMain)&&(pItems[m_nFocus].m_eType != CBarItem::IEnd)) { // Find the last item m_nFocus++; } m_nFocus--; } else { m_nFocus--; } CWndToolBar::ChangeFocus(oldFocus); } if ( nKey & BIOS::KEY::KeyRight) { if ((pItems[m_nFocus+1].m_eType == CBarItem::IMain)||((pItems[m_nFocus+1].m_eType == CBarItem::IEnd))) { m_nFocus--; while(pItems[m_nFocus].m_eType != CBarItem::IMain) { // Find the first item m_nFocus--; } } else { m_nFocus++; } CWndToolBar::ChangeFocus(oldFocus); } if( nKey & BIOS::KEY::KeyEnter ) { CWnd::OnKey( BIOS::KEY::KeyDown ); } if( nKey & BIOS::KEY::KeyEscape ) { // Focus on first item if (pItems[m_nFocus].m_eType != CBarItem::IMain) { m_nFocus--; while(pItems[m_nFocus].m_eType != CBarItem::IMain) { // Find the first item m_nFocus--; } CWndToolBar::ChangeFocus(oldFocus); } } CWnd::OnKey( nKey ); }
wxMenuItem* wxMenu::DoRemove( wxMenuItem* pItem ) { // // We need to find the items position in the child list // size_t nPos; wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); for (nPos = 0; node; nPos++) { if (node->GetData() == pItem) break; node = node->GetNext(); } // // DoRemove() (unlike Remove) can only be called for existing item! // wxCHECK_MSG(node, NULL, wxT("bug in wxMenu::Remove logic")); #if wxUSE_ACCEL // // Remove the corresponding accel from the accel table // int n = FindAccel(pItem->GetId()); if (n != wxNOT_FOUND) { delete m_vAccels[n]; m_vAccels.RemoveAt(n); } #endif // wxUSE_ACCEL // // Remove the item from the menu // ::WinSendMsg( GetHmenu() ,MM_REMOVEITEM ,MPFROM2SHORT(pItem->GetId(), TRUE) ,(MPARAM)0 ); if (IsAttached() && GetMenuBar()->IsAttached()) { // // Otherwise, the chane won't be visible // GetMenuBar()->Refresh(); } // // And from internal data structures // return wxMenuBase::DoRemove(pItem); } // end of wxMenu::DoRemove
void SuggestionsSidebarBlock::ClearSuggestionsMenu() { auto m = m_suggestionsMenu; auto menuItems = m->GetMenuItems(); for (auto i: menuItems) { if (std::find(m_suggestionMenuItems.begin(), m_suggestionMenuItems.end(), i) != m_suggestionMenuItems.end()) m->Remove(i); } }
void Menu::SetCurrentSelection() { auto i = 0; currentSelection_ = i; while (GetMenuItems()[i]->GetMenuItemTargetable() == false) { i++; currentSelection_ = i; } }
wxMenuItem *wxMenu::DoRemove(wxMenuItem *item) { if ( item->IsRadio() ) { // Check if we're removing the item starting the radio group if ( item->IsRadioGroupStart() ) { // Yes, we do, update the next radio group item, if any, to be the // start one now. const int endGroup = item->GetRadioGroupEnd(); wxMenuItemList::compatibility_iterator node = GetMenuItems().Item(endGroup); wxASSERT_MSG( node, wxS("Should have valid radio group end") ); while ( node->GetData() != item ) { const wxMenuItemList::compatibility_iterator prevNode = node->GetPrevious(); wxMenuItem* const prevItem = prevNode->GetData(); if ( prevItem == item ) { prevItem->SetAsRadioGroupStart(); prevItem->SetRadioGroupEnd(endGroup); break; } node = prevNode; } } } /* // we need to find the items position in the child list size_t pos; wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); for ( pos = 0; node; pos++ ) { if ( node->GetData() == item ) break; node = node->GetNext(); } // DoRemove() (unlike Remove) can only be called for existing item! wxCHECK_MSG( node, NULL, wxT("bug in wxMenu::Remove logic") ); wxOSXMenuRemoveItem(m_hMenu , pos ); */ GetPeer()->Remove( item ); // and from internal data structures return wxMenuBase::DoRemove(item); }
wxMenuItem *wxMenu::DoRemove(wxMenuItem *item) { // we need to find the item's position in the child list size_t pos; wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); for ( pos = 0; node; pos++ ) { if ( node->GetData() == item ) break; node = node->GetNext(); } #if wxUSE_ACCEL // remove the corresponding accel from the accel table int n = FindAccel(item->GetId()); if ( n != wxNOT_FOUND ) { delete m_accels[n]; m_accels.RemoveAt(n); #if wxUSE_OWNER_DRAWN ResetMaxAccelWidth(); #endif } //else: this item doesn't have an accel, nothing to do #endif // wxUSE_ACCEL // Update indices of radio groups. if ( m_radioData ) { bool inExistingGroup = m_radioData->UpdateOnRemoveItem(pos); wxASSERT_MSG( !inExistingGroup || item->GetKind() == wxITEM_RADIO, wxT("Removing non radio button from radio group?") ); } // remove the item from the menu if ( !::RemoveMenu(GetHmenu(), (UINT)pos, MF_BYPOSITION) ) { wxLogLastError(wxT("RemoveMenu")); } if ( IsAttached() && GetMenuBar()->IsAttached() ) { // otherwise, the change won't be visible GetMenuBar()->Refresh(); } // and from internal data structures return wxMenuBase::DoRemove(item); }
wxMenuItem* wxMenu::DoAppend(wxMenuItem *item) { wxCHECK_MSG( item, NULL, wxT("NULL item in wxMenu::DoAppend") ); bool check = false; if ( item->GetKind() == wxITEM_RADIO ) { int count = GetMenuItemCount(); if ( m_startRadioGroup == -1 ) { // start a new radio group m_startRadioGroup = count; // for now it has just one element item->SetAsRadioGroupStart(); item->SetRadioGroupEnd(m_startRadioGroup); // ensure that we have a checked item in the radio group check = true; } else // extend the current radio group { // we need to update its end item item->SetRadioGroupStart(m_startRadioGroup); wxMenuItemList::compatibility_iterator node = GetMenuItems().Item(m_startRadioGroup); if ( node ) { node->GetData()->SetRadioGroupEnd(count); } else { wxFAIL_MSG( wxT("where is the radio group start item?") ); } } } else // not a radio item { EndRadioGroup(); } if ( !wxMenuBase::DoAppend(item) || !DoInsertOrAppend(item) ) return NULL; if ( check ) // check the item initially item->Check(true); return item; }
int CWndToolBar::Find(const char* strId) { const CBarItem *pItems = GetMenuItems(); for (int i=0; pItems[i].m_eType != CBarItem::IEnd; i++ ) { if ( /*pItems[i].m_eType == CBarItem::IMain &&*/ strcmp(pItems[i].m_pName, strId) == 0 ) { return i; } } _ASSERT( 0 ); return -1; }
void Menu::DrawMenu() { al_draw_filled_rectangle(menuHeaderX_, menuHeaderY_, menuHeaderX_ + menuHeaderWidth_, menuHeaderY_ + menuHeaderHeight_, al_map_rgb(0, 125, 255)); al_draw_rectangle(menuHeaderX_, menuHeaderY_, menuHeaderX_ + menuHeaderWidth_, menuHeaderY_ + menuHeaderHeight_, al_map_rgb(255, 255, 255), 1); al_draw_text(font30_, al_map_rgb(255, 255, 255), menuHeaderX_ + (menuHeaderWidth_ / 2), menuHeaderY_ + 10, ALLEGRO_ALIGN_CENTRE, menuHeader_);//change the 10 into a value eg: (menuheaderheight-fontsize)/2 that will work //menu drawing rectangle al_draw_filled_rectangle(menuX_, menuY_, menuX_ + menuWidth_, menuY_ + menuHeight_, al_map_rgb(125, 0, 255)); al_draw_rectangle(menuX_, menuY_, menuX_ + menuWidth_, menuY_ + menuHeight_, al_map_rgb(255, 255, 255), 1); for (int i = 0; i < menuItems_.size(); i++) { GetMenuItems()[i]->DrawMenuItem(); } }
// Update a menu and all submenus recursively. source is the object that has // the update event handlers defined for it. If NULL, the menu or associated // window will be used. void wxMenuBase::UpdateUI(wxEvtHandler* source) { if (GetInvokingWindow()) { // Don't update menus if the parent // frame is about to get deleted wxWindow *tlw = wxGetTopLevelParent( GetInvokingWindow() ); if (tlw && wxPendingDelete.Member(tlw)) return; } if ( !source && GetInvokingWindow() ) source = GetInvokingWindow()->GetEventHandler(); if ( !source ) source = GetEventHandler(); if ( !source ) source = this; wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); while ( node ) { wxMenuItem* item = node->GetData(); if ( !item->IsSeparator() ) { wxWindowID id = item->GetId(); wxUpdateUIEvent event(id); event.SetEventObject( source ); if ( source->ProcessEvent(event) ) { // if anything changed, update the changed attribute if (event.GetSetText()) SetLabel(id, event.GetText()); if (event.GetSetChecked()) Check(id, event.GetChecked()); if (event.GetSetEnabled()) Enable(id, event.GetEnabled()); } // recurse to the submenus if ( item->GetSubMenu() ) item->GetSubMenu()->UpdateUI(source); } //else: item is a separator (which doesn't process update UI events) node = node->GetNext(); } }
int CWndToolBar::_FindItemByPoint( int mx ) { const CWndToolBar::CBarItem* pItems = GetMenuItems(); int nFocus = m_nFocus; int nMenu = nFocus; while ( pItems[nMenu].m_eType == CBarItem::ISub && nMenu > 0 ) nMenu--; _ASSERT( pItems[nMenu].m_eType == CBarItem::IMain ); int x = m_rcClient.left; x += 9; x += strlen(pItems[nMenu].m_pName)*8; x += 9; if ( x >= mx ) return nMenu; x += 10; int nIgnoreFirst = 1; // 1 -> first sub menu // calculate how many items we need to hide from left to reach the selected one int nRequired = 0; int nAvailable = BIOS::LCD::LcdWidth - 16 - x; // 16px reserved for arrows for ( int i = nFocus; i > 0 && pItems[i].m_eType != CBarItem::IMain; i-- ) { nRequired += strlen(pItems[i].m_pName)*8 + 16; if ( nRequired > nAvailable ) nIgnoreFirst++; } if ( nIgnoreFirst > 1 ) x += 8; for ( int i = nMenu+nIgnoreFirst; pItems[i].m_eType == CBarItem::ISub; i++ ) { ui8 bSelected = (i==nFocus); if ( x + 16 + strlen(pItems[i].m_pName)*8 >= BIOS::LCD::LcdWidth ) { x += 8; break; } x += bSelected ? 9 : 8; x += strlen(pItems[i].m_pName)*8; x += bSelected ? 9 : 8; if ( x >= mx ) return i; } return -1; }
wxMenuItem *wxMenu::DoRemove(wxMenuItem *item) { // we need to find the item's position in the child list size_t pos; wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); for ( pos = 0; node; pos++ ) { if ( node->GetData() == item ) break; node = node->GetNext(); } // DoRemove() (unlike Remove) can only be called for an existing item! wxCHECK_MSG( node, NULL, wxT("bug in wxMenu::Remove logic") ); #if wxUSE_ACCEL // remove the corresponding accel from the accel table int n = FindAccel(item->GetId()); if ( n != wxNOT_FOUND ) { delete m_accels[n]; m_accels.RemoveAt(n); #if wxUSE_OWNER_DRAWN ResetMaxAccelWidth(); #endif } //else: this item doesn't have an accel, nothing to do #endif // wxUSE_ACCEL // remove the item from the menu if ( !::RemoveMenu(GetHmenu(), (UINT)pos, MF_BYPOSITION) ) { wxLogLastError(wxT("RemoveMenu")); } if ( IsAttached() && GetMenuBar()->IsAttached() ) { // otherwise, the change won't be visible GetMenuBar()->Refresh(); } // and from internal data structures return wxMenuBase::DoRemove(item); }
void wxMenu::ChangeFont(bool keepOriginalSize) { // Lesstif 0.87 hangs here, but 0.93 does not; MBN: sometimes it does #if !wxCHECK_LESSTIF() // || wxCHECK_LESSTIF_VERSION( 0, 93 ) if (!m_font.IsOk() || !m_menuWidget) return; Display* dpy = XtDisplay((Widget) m_menuWidget); XtVaSetValues ((Widget) m_menuWidget, wxFont::GetFontTag(), m_font.GetFontTypeC(dpy), NULL); if (m_buttonWidget) { XtVaSetValues ((Widget) m_buttonWidget, wxFont::GetFontTag(), m_font.GetFontTypeC(dpy), NULL); } #if defined(__INTEL_COMPILER) && 1 /* VDM auto patch */ # pragma ivdep # pragma swp # pragma unroll # pragma prefetch # if 0 # pragma simd noassert # endif #endif /* VDM auto patch */ for ( wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); node; node = node->GetNext() ) { wxMenuItem* item = node->GetData(); if (m_menuWidget && item->GetButtonWidget() && m_font.IsOk()) { XtVaSetValues ((Widget) item->GetButtonWidget(), wxFont::GetFontTag(), m_font.GetFontTypeC(dpy), NULL); } if (item->GetSubMenu()) item->GetSubMenu()->ChangeFont(keepOriginalSize); } #else wxUnusedVar(keepOriginalSize); #endif }
int wxMenu::MacGetIndexFromItem( wxMenuItem *pItem ) { size_t pos; wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); for ( pos = 0; node; pos++ ) { if ( node->GetData() == pItem ) break; node = node->GetNext(); } if (!node) return 0; return pos + 1 ; }
void wxMenu::SetTitle(const wxString& label) { m_title = label; wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); if ( !node ) return; wxMenuItem *item = node->GetData (); Widget widget = (Widget) item->GetButtonWidget(); if ( !widget ) return; wxXmString title_str(label); XtVaSetValues(widget, XmNlabelString, title_str(), NULL); }
WXWidget wxMenu::FindMenuItem (int id, wxMenuItem ** it) const { if (id == m_menuId) { if (it) *it = NULL; return m_buttonWidget; } #if defined(__INTEL_COMPILER) && 1 /* VDM auto patch */ # pragma ivdep # pragma swp # pragma unroll # pragma prefetch # if 0 # pragma simd noassert # endif #endif /* VDM auto patch */ for ( wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); node; node = node->GetNext() ) { wxMenuItem *item = node->GetData (); if (item->GetId() == id) { if (it) *it = item; return item->GetButtonWidget(); } if (item->GetSubMenu()) { WXWidget w = item->GetSubMenu()->FindMenuItem (id, it); if (w) { return w; } } } if (it) *it = NULL; return (WXWidget) NULL; }
wxMenuItem *wxMenu::DoRemove(wxMenuItem *item) { // we need to find the item's position in the child list size_t pos; wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); for ( pos = 0; node; pos++ ) { if ( node->GetData() == item ) break; node = node->GetNext(); } #if wxUSE_ACCEL RemoveAccel(item); #endif // wxUSE_ACCEL // Update indices of radio groups. if ( m_radioData ) { if ( m_radioData->UpdateOnRemoveItem(pos) ) { wxASSERT_MSG( item->IsRadio(), wxT("Removing non radio button from radio group?") ); } //else: item being removed is not in a radio group } // remove the item from the menu if ( !::RemoveMenu(GetHmenu(), (UINT)pos, MF_BYPOSITION) ) { wxLogLastError(wxT("RemoveMenu")); } if ( IsAttached() && GetMenuBar()->IsAttached() ) { // otherwise, the change won't be visible GetMenuBar()->Refresh(); } // and from internal data structures return wxMenuBase::DoRemove(item); }
void wxMenu::CalculateMaxAccelWidth() { wxASSERT_MSG( m_maxAccelWidth == -1, wxT("it's really needed?") ); wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); while (node) { wxMenuItem* item = node->GetData(); if ( item->IsOwnerDrawn() ) { int width = item->MeasureAccelWidth(); if (width > m_maxAccelWidth ) m_maxAccelWidth = width; } node = node->GetNext(); } }
void wxMenu::SetForegroundColour(const wxColour& col) { m_foregroundColour = col; if (m_menuWidget) wxDoChangeForegroundColour(m_menuWidget, (wxColour&) col); if (m_buttonWidget) wxDoChangeForegroundColour(m_buttonWidget, (wxColour&) col); for ( wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); node; node = node->GetNext() ) { wxMenuItem* item = node->GetData(); if (item->GetButtonWidget()) { // This crashes because it uses gadgets // wxDoChangeForegroundColour(item->GetButtonWidget(), (wxColour&) col); } if (item->GetSubMenu()) item->GetSubMenu()->SetForegroundColour((wxColour&) col); } }
// undo all changes from the MacBeforeDisplay call void wxMenu::MacAfterDisplay( bool isSubMenu ) { if ( isSubMenu ) ::DeleteMenu(MacGetMenuId()); wxMenuItemList::compatibility_iterator node; wxMenuItem *item; for (node = GetMenuItems().GetFirst(); node; node = node->GetNext()) { item = (wxMenuItem *)node->GetData(); wxMenu* subMenu = item->GetSubMenu() ; if (subMenu) { subMenu->MacAfterDisplay( true ) ; } else { // no need to undo hidings } } }