Init(text);
}
+#if WXWIN_COMPATIBILITY_2_8
wxMenuItem::wxMenuItem(wxMenu *parentMenu,
int id,
const wxString& text,
{
Init(text);
}
+#endif
void wxMenuItem::Init(const wxString& text)
{
- m_labelWidget = (GtkWidget *) NULL;
m_menuItem = (GtkWidget *) NULL;
DoSetText(text);
// format, not GTK+ format, so we do what the other ports do.
return wxStripMenuCodes(text);
-
-#if 0
- wxString label;
-
- for ( const wxChar *pc = text.c_str(); *pc; pc++ )
- {
- if ( *pc == wxT('\t'))
- break;
-
- if ( *pc == wxT('_') )
- {
- // GTK 1.2 escapes "xxx_xxx" to "xxx__xxx"
- pc++;
- label += *pc;
- continue;
- }
-
- if ( *pc == wxT('\\') )
- {
- // GTK 2.0 escapes "xxx/xxx" to "xxx\/xxx"
- pc++;
- label += *pc;
- continue;
- }
-
- if ( (*pc == wxT('&')) && (*(pc+1) != wxT('&')) )
- {
- // wxMSW escapes "&"
- // "&" is doubled to indicate "&" instead of accelerator
- continue;
- }
-
- label += *pc;
- }
-
- // wxPrintf( wxT("GetLabelText(): text %s label %s\n"), text.c_str(), label.c_str() );
-
- return label;
-#endif
-}
-
-wxString wxMenuItem::GetItemLabel() const
-{
- wxString label = wxConvertMnemonicsFromGTK(m_text);
- if (!m_hotKey.IsEmpty())
- label << "\t" << m_hotKey;
- return label;
}
void wxMenuItem::SetItemLabel( const wxString& str )
// Some optimization to avoid flicker
wxString oldLabel = m_text;
oldLabel = wxStripMenuCodes(oldLabel);
- oldLabel.Replace(wxT("_"), wxT(""));
wxString label1 = wxStripMenuCodes(str);
#if wxUSE_ACCEL
- wxString oldhotkey = GetHotKey(); // Store the old hotkey in Ctrl-foo format
+ wxString oldhotkey = m_hotKey; // Store the old hotkey in Ctrl-foo format
wxCharBuffer oldbuf = wxGTK_CONV_SYS( GetGtkHotKey(*this) ); // and as <control>foo
#endif // wxUSE_ACCEL
#if wxUSE_ACCEL
if (oldLabel == label1 &&
- oldhotkey == GetHotKey()) // Make sure we can change a hotkey even if the label is unaltered
+ oldhotkey == m_hotKey) // Make sure we can change a hotkey even if the label is unaltered
return;
if (m_menuItem)
{
- GtkLabel *label;
- if (m_labelWidget)
- label = (GtkLabel*) m_labelWidget;
- else
- label = GTK_LABEL( GTK_BIN(m_menuItem)->child );
-
// stock menu items can have empty labels:
- wxString text = m_text;
+ wxString text = m_gtkText;
if (text.IsEmpty() && !IsSeparator())
{
wxASSERT_MSG(isstock, wxT("A non-stock menu item with an empty label?"));
text = GTKProcessMenuItemLabel(text, NULL);
}
- gtk_label_set_text_with_mnemonic( GTK_LABEL(label), wxGTK_CONV_SYS(text) );
+ GtkLabel* label = GTK_LABEL(GTK_BIN(m_menuItem)->child);
+ gtk_label_set_text_with_mnemonic(label, wxGTK_CONV_SYS(text));
}
// remove old accelerator from our parent's accelerator group, if present
// it's valid for this function to be called even if m_menuItem == NULL
void wxMenuItem::DoSetText( const wxString& str )
{
- m_text.Empty();
- m_text = GTKProcessMenuItemLabel(str, &m_hotKey);
+ m_text = str;
+ m_gtkText = GTKProcessMenuItemLabel(str, &m_hotKey);
}
#if wxUSE_ACCEL
wxAcceleratorEntry *wxMenuItem::GetAccel() const
{
- if ( !GetHotKey() )
+ if (m_hotKey.empty())
{
// nothing
return NULL;
// accelerator parsing code looks for them after a TAB, so insert a dummy
// one here
wxString label;
- label << wxT('\t') << GetHotKey();
+ label << wxT('\t') << m_hotKey;
return wxAcceleratorEntry::Create(label);
}
GtkWidget *menuItem;
// cache some data used later
- wxString text = mitem->wxMenuItemBase::GetItemLabel();
+ wxString text = mitem->GetGtkItemLabel();
int id = mitem->GetId();
bool isstock = wxIsStockID(id);
const char *stockid = NULL;
menuItem = gtk_separator_menu_item_new();
m_prevRadio = NULL;
}
- else if ( mitem->GetBitmap().Ok() ||
+ else if ( mitem->GetBitmap().IsOk() ||
(mitem->GetKind() == wxITEM_NORMAL && isstock) )
{
wxBitmap bitmap(mitem->GetBitmap());
}
gtk_menu_item_set_submenu(GTK_MENU_ITEM(mitem), NULL);
- gtk_container_remove(GTK_CONTAINER(m_menu), mitem);
+ gtk_widget_destroy(mitem);
+ item->SetMenuItem(NULL);
return item;
}