Separate label with wx mnemonics (&) and with gtk mnemonics (_) into m_text and m_gtkText, fixes #4409

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53958 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2008-06-02 21:46:29 +00:00
parent c71396b42d
commit 92159e3d76
2 changed files with 8 additions and 54 deletions

View File

@@ -29,7 +29,6 @@ public:
// implement base class virtuals // implement base class virtuals
virtual void SetItemLabel( const wxString& str ); virtual void SetItemLabel( const wxString& str );
virtual wxString GetItemLabel() const;
virtual void Enable( bool enable = true ); virtual void Enable( bool enable = true );
virtual void Check( bool check = true ); virtual void Check( bool check = true );
virtual bool IsChecked() const; virtual bool IsChecked() const;
@@ -48,6 +47,8 @@ public:
// and in the hotkey which is used to set given pointer // and in the hotkey which is used to set given pointer
static wxString GTKProcessMenuItemLabel(const wxString& str, wxString *hotKey); static wxString GTKProcessMenuItemLabel(const wxString& str, wxString *hotKey);
wxString GetGtkItemLabel() { return m_gtkText; }
#if WXWIN_COMPATIBILITY_2_8 #if WXWIN_COMPATIBILITY_2_8
// compatibility only, don't use in new code // compatibility only, don't use in new code
wxDEPRECATED( wxDEPRECATED(
@@ -68,6 +69,7 @@ private:
// style to GTK+ and is called from ctor and SetText() // style to GTK+ and is called from ctor and SetText()
void DoSetText(const wxString& text); void DoSetText(const wxString& text);
wxString m_gtkText; // m_text after conversion to GTK mnemonics
wxString m_hotKey; wxString m_hotKey;
wxBitmap m_bitmap; // Bitmap for menuitem, if any wxBitmap m_bitmap; // Bitmap for menuitem, if any

View File

@@ -642,53 +642,6 @@ wxString wxMenuItemBase::GetLabelText(const wxString& text)
// format, not GTK+ format, so we do what the other ports do. // format, not GTK+ format, so we do what the other ports do.
return wxStripMenuCodes(text); 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 ) void wxMenuItem::SetItemLabel( const wxString& str )
@@ -702,7 +655,6 @@ void wxMenuItem::SetItemLabel( const wxString& str )
// Some optimization to avoid flicker // Some optimization to avoid flicker
wxString oldLabel = m_text; wxString oldLabel = m_text;
oldLabel = wxStripMenuCodes(oldLabel); oldLabel = wxStripMenuCodes(oldLabel);
oldLabel.Replace(wxT("_"), wxT(""));
wxString label1 = wxStripMenuCodes(str); wxString label1 = wxStripMenuCodes(str);
#if wxUSE_ACCEL #if wxUSE_ACCEL
wxString oldhotkey = m_hotKey; // Store the old hotkey in Ctrl-foo format wxString oldhotkey = m_hotKey; // Store the old hotkey in Ctrl-foo format
@@ -719,7 +671,7 @@ void wxMenuItem::SetItemLabel( const wxString& str )
if (m_menuItem) if (m_menuItem)
{ {
// stock menu items can have empty labels: // stock menu items can have empty labels:
wxString text = m_text; wxString text = m_gtkText;
if (text.IsEmpty() && !IsSeparator()) if (text.IsEmpty() && !IsSeparator())
{ {
wxASSERT_MSG(isstock, wxT("A non-stock menu item with an empty label?")); wxASSERT_MSG(isstock, wxT("A non-stock menu item with an empty label?"));
@@ -836,8 +788,8 @@ wxString wxMenuItem::GTKProcessMenuItemLabel(const wxString& str, wxString *hotK
// it's valid for this function to be called even if m_menuItem == NULL // it's valid for this function to be called even if m_menuItem == NULL
void wxMenuItem::DoSetText( const wxString& str ) void wxMenuItem::DoSetText( const wxString& str )
{ {
m_text.Empty(); m_text = str;
m_text = GTKProcessMenuItemLabel(str, &m_hotKey); m_gtkText = GTKProcessMenuItemLabel(str, &m_hotKey);
} }
#if wxUSE_ACCEL #if wxUSE_ACCEL
@@ -989,7 +941,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
GtkWidget *menuItem; GtkWidget *menuItem;
// cache some data used later // cache some data used later
wxString text = mitem->wxMenuItemBase::GetItemLabel(); wxString text = mitem->GetGtkItemLabel();
int id = mitem->GetId(); int id = mitem->GetId();
bool isstock = wxIsStockID(id); bool isstock = wxIsStockID(id);
const char *stockid = NULL; const char *stockid = NULL;
@@ -1011,7 +963,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
menuItem = gtk_separator_menu_item_new(); menuItem = gtk_separator_menu_item_new();
m_prevRadio = NULL; m_prevRadio = NULL;
} }
else if ( mitem->GetBitmap().Ok() || else if ( mitem->GetBitmap().IsOk() ||
(mitem->GetKind() == wxITEM_NORMAL && isstock) ) (mitem->GetKind() == wxITEM_NORMAL && isstock) )
{ {
wxBitmap bitmap(mitem->GetBitmap()); wxBitmap bitmap(mitem->GetBitmap());