#if wxUSE_ACCEL
+static inline bool CompareAccelString(const wxString& str, const wxChar *accel)
+{
+#if wxUSE_INTL
+ return str == accel || str == wxGetTranslation(accel);
+#else
+ return str == accel;
+#endif
+}
+
// return wxAcceleratorEntry for the given menu string or NULL if none
// specified
wxAcceleratorEntry *wxGetAccelFromString(const wxString& label)
wxString current;
for ( size_t n = (size_t)posTab + 1; n < label.Len(); n++ ) {
if ( (label[n] == '+') || (label[n] == '-') ) {
- if ( current == _("ctrl") )
+ if ( CompareAccelString(current, wxTRANSLATE("ctrl")) )
accelFlags |= wxACCEL_CTRL;
- else if ( current == _("alt") )
+ else if ( CompareAccelString(current, wxTRANSLATE("alt")) )
accelFlags |= wxACCEL_ALT;
- else if ( current == _("shift") )
+ else if ( CompareAccelString(current, wxTRANSLATE("shift")) )
accelFlags |= wxACCEL_SHIFT;
else {
// we may have "Ctrl-+", for example, but we still want to
keyCode = WXK_SPACE;
else if ( current == wxT("TAB") )
keyCode = WXK_TAB;
- else if ( current == wxT("ESC") || current == wxT("ESCAPE") ) {
+ else if ( current == wxT("ESC") || current == wxT("ESCAPE") )
keyCode = WXK_ESCAPE;
else
{
m_style = style;
m_clientData = (void *)NULL;
m_eventHandler = this;
-
-#if wxUSE_MENU_CALLBACK
- m_callback = (wxFunction) NULL;
-#endif // wxUSE_MENU_CALLBACK
}
wxMenuBase::~wxMenuBase()
wxCHECK_MSG( item, FALSE, wxT("invalid item in wxMenu::Append()") );
m_items.Append(item);
+ item->SetMenu((wxMenu*)this);
if ( item->IsSubMenu() )
{
AddSubMenu(item->GetSubMenu());
wxCHECK_MSG( node, FALSE, wxT("invalid index in wxMenu::Insert()") );
m_items.Insert(node, item);
+ item->SetMenu((wxMenu*)this);
if ( item->IsSubMenu() )
{
AddSubMenu(item->GetSubMenu());
m_items.DeleteNode(node);
// item isn't attached to anything any more
+ item->SetMenu((wxMenu *)NULL);
wxMenu *submenu = item->GetSubMenu();
if ( submenu )
{
return item;
}
+// find by position
+wxMenuItem* wxMenuBase::FindItemByPosition(size_t position) const
+{
+ wxCHECK_MSG( position < m_items.GetCount(), NULL,
+ _T("wxMenu::FindItemByPosition(): invalid menu index") );
+
+ return m_items.Item( position )->GetData();
+}
+
// ----------------------------------------------------------------------------
// wxMenu helpers used by derived classes
// ----------------------------------------------------------------------------
if ( source->ProcessEvent(event) )
{
- // if anything changed, update the chanegd attribute
+ // if anything changed, update the changed attribute
if (event.GetSetText())
SetLabel(id, event.GetText());
if (event.GetSetChecked())
if ( item->GetSubMenu() )
item->GetSubMenu()->UpdateUI(source);
}
- //else: item is a separator (which don't process update UI events)
+ //else: item is a separator (which doesn't process update UI events)
node = node->GetNext();
}
bool processed = FALSE;
-#if wxUSE_MENU_CALLBACK
- // Try a callback
- if (m_callback)
- {
- (void)(*(m_callback))(*this, event);
- processed = TRUE;
- }
-#endif // wxUSE_MENU_CALLBACK
-
// Try the menu's event handler
if ( !processed )
{