// Created: 26.10.99
// RCS-ID: $Id$
// Copyright: (c) wxWindows team
-// Licence: wxWindows license
+// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
#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
else {
// several special cases
current.MakeUpper();
- if ( current == wxT("DEL") ) {
+ if ( current == wxT("DEL") )
keyCode = WXK_DELETE;
- }
- else if ( current == wxT("DELETE") ) {
+ else if ( current == wxT("DELETE") )
keyCode = WXK_DELETE;
- }
- else if ( current == wxT("INS") ) {
+ else if ( current == wxT("INS") )
keyCode = WXK_INSERT;
- }
- else if ( current == wxT("INSERT") ) {
+ else if ( current == wxT("INSERT") )
keyCode = WXK_INSERT;
- }
- else if ( current == wxT("ENTER") || current == wxT("RETURN") ) {
+ else if ( current == wxT("ENTER") || current == wxT("RETURN") )
keyCode = WXK_RETURN;
- }
- else if ( current == wxT("PGUP") ) {
+ else if ( current == wxT("PGUP") )
keyCode = WXK_PRIOR;
- }
- else if ( current == wxT("PGDN") ) {
+ else if ( current == wxT("PGDN") )
keyCode = WXK_NEXT;
- }
- else if ( current == wxT("LEFT") ) {
+ else if ( current == wxT("LEFT") )
keyCode = WXK_LEFT;
- }
- else if ( current == wxT("RIGHT") ) {
+ else if ( current == wxT("RIGHT") )
keyCode = WXK_RIGHT;
- }
- else if ( current == wxT("UP") ) {
+ else if ( current == wxT("UP") )
keyCode = WXK_UP;
- }
- else if ( current == wxT("DOWN") ) {
+ else if ( current == wxT("DOWN") )
keyCode = WXK_DOWN;
- }
- else if ( current == wxT("HOME") ) {
+ else if ( current == wxT("HOME") )
keyCode = WXK_HOME;
- }
- else if ( current == wxT("END") ) {
+ else if ( current == wxT("END") )
keyCode = WXK_END;
- }
- else if ( current == wxT("SPACE") ) {
+ else if ( current == wxT("SPACE") )
keyCode = WXK_SPACE;
- }
- else if ( current == wxT("TAB") ) {
+ else if ( current == wxT("TAB") )
keyCode = WXK_TAB;
- }
+ else if ( current == wxT("ESC") || current == wxT("ESCAPE") )
+ keyCode = WXK_ESCAPE;
else
{
wxLogDebug(wxT("Unrecognized accel key '%s', accel string ignored."),
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 )
{