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:
@@ -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
|
||||||
|
|
||||||
|
@@ -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());
|
||||||
|
Reference in New Issue
Block a user