#include "wx/menu.h"
#include "wx/log.h"
#include "wx/intl.h"
+#include "wx/app.h"
#include "gdk/gdk.h"
#include "gtk/gtk.h"
if (pos != -1) menu->m_title.Remove( pos, 1 );
} while (pos != -1);
- GtkWidget *root_menu;
- root_menu = gtk_menu_item_new_with_label( WXSTRINGCAST(menu->m_title) );
- gtk_widget_show( root_menu );
- gtk_menu_item_set_submenu( GTK_MENU_ITEM(root_menu), menu->m_menu );
+ menu->m_owner = gtk_menu_item_new_with_label( WXSTRINGCAST(menu->m_title) );
+ gtk_widget_show( menu->m_owner );
+ gtk_menu_item_set_submenu( GTK_MENU_ITEM(menu->m_owner), menu->m_menu );
- gtk_menu_bar_append( GTK_MENU_BAR(m_menubar), root_menu );
+ gtk_menu_bar_append( GTK_MENU_BAR(m_menubar), menu->m_owner );
}
static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString, const wxString &itemString )
wxMenuItem *item = (wxMenuItem*)node->Data();
if (item->IsSubMenu())
return FindMenuItemRecursive(item->GetSubMenu(), menuString, itemString);
+
node = node->Next();
}
return FALSE;
}
+wxString wxMenuBar::GetLabel( int id ) const
+{
+ wxMenuItem* item = FindMenuItemById( id );
+
+ if (item) return item->GetText();
+
+ return "";
+}
+
+void wxMenuBar::SetLabel( int id, const wxString &label )
+{
+ wxMenuItem* item = FindMenuItemById( id );
+
+ if (item) item->SetText( label );
+}
+
+void wxMenuBar::EnableTop( int pos, bool flag )
+{
+ wxNode *node = m_menus.Nth( pos );
+
+ wxCHECK_RET( node, "menu not found" );
+
+ wxMenu* menu = (wxMenu*)node->Data();
+
+ if (menu->m_owner) gtk_widget_set_sensitive( menu->m_owner, flag );
+}
+
+wxString wxMenuBar::GetLabelTop( int pos ) const
+{
+ wxNode *node = m_menus.Nth( pos );
+
+ wxCHECK_MSG( node, "invalid", "menu not found" );
+
+ wxMenu* menu = (wxMenu*)node->Data();
+
+ return menu->GetTitle();
+}
+
+void wxMenuBar::SetLabelTop( int pos, const wxString& label )
+{
+ wxNode *node = m_menus.Nth( pos );
+
+ wxCHECK_RET( node, "menu not found" );
+
+ wxMenu* menu = (wxMenu*)node->Data();
+
+ menu->SetTitle( label );
+}
+
//-----------------------------------------------------------------------------
// "activate"
//-----------------------------------------------------------------------------
if (!menu->IsEnabled(id)) return;
+ wxMenuItem* item = menu->FindItem( id );
+ wxCHECK_RET( item, "error in menu item callback" );
+
+ if (item->m_isCheckMenu)
+ {
+ if (item->m_isChecked == item->IsChecked())
+ {
+ /* the menu item has been checked by calling wxMenuItem->Check() */
+ return;
+ }
+ else
+ {
+ /* the user pressed on the menu item -> report */
+ item->m_isChecked = item->IsChecked(); /* make consistent again */
+ }
+ }
+
wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, id );
event.SetEventObject( menu );
event.SetInt(id );
wxCHECK_RET( IsCheckable(), "Can't check uncheckable item!" )
+ if (check == m_isChecked) return;
+
m_isChecked = check;
gtk_check_menu_item_set_state( (GtkCheckMenuItem*)m_menuItem, (gint)check );
}
bool bIsChecked = ((GtkCheckMenuItem*)m_menuItem)->active != 0;
- wxASSERT( bIsChecked == m_isChecked ); // consistency check
-
return bIsChecked;
}
Append(-2, m_title);
AppendSeparator();
}
+
+ m_owner = (GtkWidget*) NULL;
}
void wxMenu::SetTitle( const wxString& title )