]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/menu.cpp
wxMenuBarBase for MSW (untested)
[wxWidgets.git] / src / gtk / menu.cpp
index d0b20891bbf5f33feea8877add9c68e3a2f5d359..1d042b817d835026845e0fe7d2ee2ad924c1f7bd 100644 (file)
 #pragma implementation "menuitem.h"
 #endif
 
 #pragma implementation "menuitem.h"
 #endif
 
-#include "wx/menu.h"
 #include "wx/log.h"
 #include "wx/intl.h"
 #include "wx/app.h"
 #include "wx/log.h"
 #include "wx/intl.h"
 #include "wx/app.h"
+#include "wx/menu.h"
 
 #if wxUSE_ACCEL
     #include "wx/accel.h"
 
 #if wxUSE_ACCEL
     #include "wx/accel.h"
@@ -199,7 +199,7 @@ void wxMenuBar::UnsetInvokingWindow( wxWindow *win )
     }
 }
 
     }
 }
 
-void wxMenuBar::Append( wxMenu *menu, const wxString &title )
+bool wxMenuBar::Append( wxMenu *menu, const wxString &title )
 {
     m_menus.Append( menu );
 
 {
     m_menus.Append( menu );
 
@@ -283,6 +283,38 @@ void wxMenuBar::Append( wxMenu *menu, const wxString &title )
     // adding menu later on.
     if (m_invokingWindow)
         wxMenubarSetInvokingWindow( menu, m_invokingWindow );
     // adding menu later on.
     if (m_invokingWindow)
         wxMenubarSetInvokingWindow( menu, m_invokingWindow );
+
+    return TRUE;
+}
+
+bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title)
+{
+    if ( !wxMenuBarBase::Insert(pos, menu, title) )
+        return FALSE;
+
+    wxFAIL_MSG(wxT("TODO"));
+
+    return FALSE;
+}
+
+wxMenu *wxMenuBar::Replace(size_t pos, wxMenu *menu, const wxString& title)
+{
+    if ( !wxMenuBarBase::Replace(pos, menu, title) )
+        return FALSE;
+
+    wxFAIL_MSG(wxT("TODO"));
+
+    return NULL;
+}
+
+wxMenu *wxMenuBar::Remove(size_t pos)
+{
+    if ( !wxMenuBarBase::Remove(pos) )
+        return FALSE;
+
+    wxFAIL_MSG(wxT("TODO"));
+
+    return NULL;
 }
 
 static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString, const wxString &itemString )
 }
 
 static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString, const wxString &itemString )
@@ -307,18 +339,6 @@ static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString
     return wxNOT_FOUND;
 }
 
     return wxNOT_FOUND;
 }
 
-wxMenuItem *wxMenuBar::FindItemForId(int itemId, wxMenu **menuForItem ) const
-{
-    if ( menuForItem )
-    {
-        // TODO return the pointer to the menu
-
-        *menuForItem = NULL;
-    }
-
-    return FindItem(itemId);
-}
-
 int wxMenuBar::FindMenuItem( const wxString &menuString, const wxString &itemString ) const
 {
     wxNode *node = m_menus.First();
 int wxMenuBar::FindMenuItem( const wxString &menuString, const wxString &itemString ) const
 {
     wxNode *node = m_menus.First();
@@ -351,7 +371,7 @@ static wxMenuItem* FindMenuItemByIdRecursive(const wxMenu* menu, int id)
     return result;
 }
 
     return result;
 }
 
-wxMenuItem* wxMenuBar::FindItem( int id ) const
+wxMenuItem* wxMenuBar::FindItem( int id, wxMenu **menuForItem ) const
 {
     wxMenuItem* result = 0;
     wxNode *node = m_menus.First();
 {
     wxMenuItem* result = 0;
     wxNode *node = m_menus.First();
@@ -362,115 +382,48 @@ wxMenuItem* wxMenuBar::FindItem( int id ) const
         node = node->Next();
     }
 
         node = node->Next();
     }
 
-    return result;
-}
-
-void wxMenuBar::Check( int id, bool check )
-{
-    wxMenuItem* item = FindMenuItemById( id );
-
-    wxCHECK_RET( item, wxT("wxMenuBar::Check: no such item") );
-
-    item->Check(check);
-}
-
-bool wxMenuBar::IsChecked( int id ) const
-{
-    wxMenuItem* item = FindMenuItemById( id );
-
-    wxCHECK_MSG( item, FALSE, wxT("wxMenuBar::IsChecked: no such item") );
-
-    return item->IsChecked();
-}
-
-void wxMenuBar::Enable( int id, bool enable )
-{
-    wxMenuItem* item = FindMenuItemById( id );
-
-    wxCHECK_RET( item, wxT("wxMenuBar::Enable: no such item") );
-
-    item->Enable(enable);
-}
-
-bool wxMenuBar::IsEnabled( int id ) const
-{
-    wxMenuItem* item = FindMenuItemById( id );
-
-    wxCHECK_MSG( item, FALSE, wxT("wxMenuBar::IsEnabled: no such item") );
-
-    return item->IsEnabled();
-}
-
-wxString wxMenuBar::GetLabel( int id ) const
-{
-    wxMenuItem* item = FindMenuItemById( id );
-
-    wxCHECK_MSG( item, wxT(""), wxT("wxMenuBar::GetLabel: no such item") );
-
-    return item->GetText();
-}
-
-void wxMenuBar::SetLabel( int id, const wxString &label )
-{
-    wxMenuItem* item = FindMenuItemById( id );
-
-    wxCHECK_RET( item, wxT("wxMenuBar::SetLabel: no such item") );
+    if ( menuForItem )
+    {
+        *menuForItem = result ? result->GetMenu() : (wxMenu *)NULL;
+    }
 
 
-    item->SetText( label );
+    return result;
 }
 
 }
 
-void wxMenuBar::EnableTop( int pos, bool flag )
+void wxMenuBar::EnableTop( size_t pos, bool flag )
 {
 {
-    wxNode *node = m_menus.Nth( pos );
+    wxMenuList::Node *node = m_menus.Item( pos );
 
     wxCHECK_RET( node, wxT("menu not found") );
 
 
     wxCHECK_RET( node, wxT("menu not found") );
 
-    wxMenu* menu = (wxMenu*)node->Data();
+    wxMenu* menu = node->GetData();
 
     if (menu->m_owner)
         gtk_widget_set_sensitive( menu->m_owner, flag );
 }
 
 
     if (menu->m_owner)
         gtk_widget_set_sensitive( menu->m_owner, flag );
 }
 
-wxString wxMenuBar::GetLabelTop( int pos ) const
+wxString wxMenuBar::GetLabelTop( size_t pos ) const
 {
 {
-    wxNode *node = m_menus.Nth( pos );
+    wxMenuList::Node *node = m_menus.Item( pos );
 
     wxCHECK_MSG( node, wxT("invalid"), wxT("menu not found") );
 
 
     wxCHECK_MSG( node, wxT("invalid"), wxT("menu not found") );
 
-    wxMenu* menu = (wxMenu*)node->Data();
+    wxMenu* menu = node->GetData();
 
     return menu->GetTitle();
 }
 
 
     return menu->GetTitle();
 }
 
-void wxMenuBar::SetLabelTop( int pos, const wxString& label )
+void wxMenuBar::SetLabelTop( size_t pos, const wxString& label )
 {
 {
-    wxNode *node = m_menus.Nth( pos );
+    wxMenuList::Node *node = m_menus.Item( pos );
 
     wxCHECK_RET( node, wxT("menu not found") );
 
 
     wxCHECK_RET( node, wxT("menu not found") );
 
-    wxMenu* menu = (wxMenu*)node->Data();
+    wxMenu* menu = node->GetData();
 
     menu->SetTitle( label );
 }
 
 
     menu->SetTitle( label );
 }
 
-void wxMenuBar::SetHelpString( int id, const wxString& helpString )
-{
-    wxMenuItem* item = FindMenuItemById( id );
-
-    wxCHECK_RET( item, wxT("wxMenuBar::SetHelpString: no such item") );
-
-    item->SetHelp( helpString );
-}
-
-wxString wxMenuBar::GetHelpString( int id ) const
-{
-    wxMenuItem* item = FindMenuItemById( id );
-
-    wxCHECK_MSG( item, wxT(""), wxT("wxMenuBar::GetHelpString: no such item") );
-
-    return item->GetHelp();
-}
-
 //-----------------------------------------------------------------------------
 // "activate"
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 // "activate"
 //-----------------------------------------------------------------------------
@@ -810,51 +763,56 @@ static wxString GetHotKey( const wxMenuItem& item )
     // as wxGetAccelFromString() looks for TAB, insert a dummy one here
     wxString label;
     label << wxT('\t') << item.GetHotKey();
     // as wxGetAccelFromString() looks for TAB, insert a dummy one here
     wxString label;
     label << wxT('\t') << item.GetHotKey();
-    wxAcceleratorEntry *accel = wxGetAccelFromString(label);
-    if ( accel )
+
+    // but if the hotkey is empty don't do anything
+    if ( label.length() > 1 )
     {
     {
-        int flags = accel->GetFlags();
-        if ( flags & wxACCEL_ALT )
-            hotkey += wxT("<alt>");
-        if ( flags & wxACCEL_CTRL )
-            hotkey += wxT("<control>");
-        if ( flags & wxACCEL_SHIFT )
-            hotkey += wxT("<shift>");
-
-        int code = accel->GetKeyCode();
-        switch ( code )
+        wxAcceleratorEntry *accel = wxGetAccelFromString(label);
+        if ( accel )
         {
         {
-            case WXK_F1:
-            case WXK_F2:
-            case WXK_F3:
-            case WXK_F4:
-            case WXK_F5:
-            case WXK_F6:
-            case WXK_F7:
-            case WXK_F8:
-            case WXK_F9:
-            case WXK_F10:
-            case WXK_F11:
-            case WXK_F12:
-                hotkey << wxT('F') << code = WXK_F1 + 1;
-                break;
-
-            // if there are any other keys wxGetAccelFromString() may return,
-            // we should process them here
-
-            default:
-                if ( wxIsalnum(code) )
-                {
-                    hotkey << (wxChar)code;
-
+            int flags = accel->GetFlags();
+            if ( flags & wxACCEL_ALT )
+                hotkey += wxT("<alt>");
+            if ( flags & wxACCEL_CTRL )
+                hotkey += wxT("<control>");
+            if ( flags & wxACCEL_SHIFT )
+                hotkey += wxT("<shift>");
+
+            int code = accel->GetKeyCode();
+            switch ( code )
+            {
+                case WXK_F1:
+                case WXK_F2:
+                case WXK_F3:
+                case WXK_F4:
+                case WXK_F5:
+                case WXK_F6:
+                case WXK_F7:
+                case WXK_F8:
+                case WXK_F9:
+                case WXK_F10:
+                case WXK_F11:
+                case WXK_F12:
+                    hotkey << wxT('F') << code - WXK_F1 + 1;
                     break;
                     break;
-                }
 
 
-                wxFAIL_MSG( wxT("unknown keyboard accel") );
+                // if there are any other keys wxGetAccelFromString() may return,
+                // we should process them here
+
+                default:
+                    if ( wxIsalnum(code) )
+                    {
+                        hotkey << (wxChar)code;
+
+                        break;
+                    }
+
+                    wxFAIL_MSG( wxT("unknown keyboard accel") );
+            }
+
+            delete accel;
         }
     }
         }
     }
-    if (accel)
-        delete accel;
 
     return hotkey;
 }
 
     return hotkey;
 }