Readded test for wxMenuItem::SetLabel() to sample.
Support for hotkeys in names functions for GTK+2. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33671 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
e66439e365
commit
98f297837a
@ -438,6 +438,8 @@ MyFrame::MyFrame()
|
|||||||
menuMenu->AppendSeparator();
|
menuMenu->AppendSeparator();
|
||||||
menuMenu->Append(Menu_Menu_GetInfo, _T("Get menu item in&fo\tAlt-F"),
|
menuMenu->Append(Menu_Menu_GetInfo, _T("Get menu item in&fo\tAlt-F"),
|
||||||
_T("Show the state of the last menu item"));
|
_T("Show the state of the last menu item"));
|
||||||
|
menuMenu->Append(Menu_Menu_SetLabel, _T("Set menu item label\tAlt-L"),
|
||||||
|
_T("Set the label of a menu item"));
|
||||||
#if wxUSE_TEXTDLG
|
#if wxUSE_TEXTDLG
|
||||||
menuMenu->AppendSeparator();
|
menuMenu->AppendSeparator();
|
||||||
menuMenu->Append(Menu_Menu_FindItem, _T("Find menu item from label"),
|
menuMenu->Append(Menu_Menu_FindItem, _T("Find menu item from label"),
|
||||||
@ -799,6 +801,7 @@ void MyFrame::OnSetLabelMenuItem(wxCommandEvent& WXUNUSED(event))
|
|||||||
item->GetLabel(),
|
item->GetLabel(),
|
||||||
this
|
this
|
||||||
);
|
);
|
||||||
|
label.Replace( _T("\\t"), _T("\t") );
|
||||||
|
|
||||||
if ( !label.empty() )
|
if ( !label.empty() )
|
||||||
{
|
{
|
||||||
|
@ -57,7 +57,7 @@ extern void wxapp_install_idle_handler();
|
|||||||
extern bool g_isIdle;
|
extern bool g_isIdle;
|
||||||
|
|
||||||
#if wxUSE_ACCEL
|
#if wxUSE_ACCEL
|
||||||
static wxString GetHotKey( const wxMenuItem& item );
|
static wxString GetGtkHotKey( const wxMenuItem& item );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -815,14 +815,17 @@ void wxMenuItem::SetText( const wxString& str )
|
|||||||
{
|
{
|
||||||
// Some optimization to avoid flicker
|
// Some optimization to avoid flicker
|
||||||
wxString oldLabel = m_text;
|
wxString oldLabel = m_text;
|
||||||
oldLabel = wxStripMenuCodes(oldLabel.BeforeFirst('\t'));
|
oldLabel = wxStripMenuCodes(oldLabel);
|
||||||
oldLabel.Replace(wxT("_"), wxT(""));
|
oldLabel.Replace(wxT("_"), wxT(""));
|
||||||
wxString label1 = wxStripMenuCodes(str.BeforeFirst('\t'));
|
wxString label1 = wxStripMenuCodes(str);
|
||||||
if (oldLabel == label1)
|
// Make sure we can change a hotkey even if the label is unaltered
|
||||||
return;
|
wxString oldhotkey = GetHotKey();
|
||||||
|
|
||||||
DoSetText(str);
|
DoSetText(str);
|
||||||
|
|
||||||
|
if (oldLabel == label1 && oldhotkey == GetHotKey())
|
||||||
|
return;
|
||||||
|
|
||||||
if (m_menuItem)
|
if (m_menuItem)
|
||||||
{
|
{
|
||||||
GtkLabel *label;
|
GtkLabel *label;
|
||||||
@ -842,6 +845,32 @@ void wxMenuItem::SetText( const wxString& str )
|
|||||||
gtk_accel_label_refetch( GTK_ACCEL_LABEL(label) );
|
gtk_accel_label_refetch( GTK_ACCEL_LABEL(label) );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __WXGTK20__
|
||||||
|
guint accel_key;
|
||||||
|
GdkModifierType accel_mods;
|
||||||
|
wxCharBuffer oldbuf = wxGTK_CONV( oldhotkey );
|
||||||
|
gtk_accelerator_parse( (const char*) oldbuf, &accel_key, &accel_mods);
|
||||||
|
if (accel_key != 0)
|
||||||
|
{
|
||||||
|
gtk_widget_remove_accelerator( GTK_WIDGET(m_menuItem),
|
||||||
|
m_parentMenu->m_accel,
|
||||||
|
accel_key,
|
||||||
|
accel_mods );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxCharBuffer buf = wxGTK_CONV( GetGtkHotKey(*this) );
|
||||||
|
gtk_accelerator_parse( (const char*) buf, &accel_key, &accel_mods);
|
||||||
|
if (accel_key != 0)
|
||||||
|
{
|
||||||
|
gtk_widget_add_accelerator( GTK_WIDGET(m_menuItem),
|
||||||
|
"activate",
|
||||||
|
m_parentMenu->m_accel,
|
||||||
|
accel_key,
|
||||||
|
accel_mods,
|
||||||
|
GTK_ACCEL_VISIBLE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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
|
||||||
@ -873,8 +902,6 @@ void wxMenuItem::DoSetText( const wxString& str )
|
|||||||
++pc;
|
++pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
// wxPrintf( wxT("DoSetText(): str %s m_text %s\n"), str.c_str(), m_text.c_str() );
|
|
||||||
|
|
||||||
m_hotKey = wxT("");
|
m_hotKey = wxT("");
|
||||||
|
|
||||||
if(*pc == wxT('\t'))
|
if(*pc == wxT('\t'))
|
||||||
@ -882,6 +909,8 @@ void wxMenuItem::DoSetText( const wxString& str )
|
|||||||
pc++;
|
pc++;
|
||||||
m_hotKey = pc;
|
m_hotKey = pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// wxPrintf( wxT("DoSetText(): str %s m_text %s hotkey %s\n"), str.c_str(), m_text.c_str(), m_hotKey.c_str() );
|
||||||
}
|
}
|
||||||
|
|
||||||
#if wxUSE_ACCEL
|
#if wxUSE_ACCEL
|
||||||
@ -1100,7 +1129,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
|
|||||||
|
|
||||||
// accelerator for the item, as specified by its label
|
// accelerator for the item, as specified by its label
|
||||||
// (ex. Ctrl+O for open)
|
// (ex. Ctrl+O for open)
|
||||||
gtk_accelerator_parse(GetHotKey(*mitem).c_str(), &accel_key,
|
gtk_accelerator_parse(GetGtkHotKey(*mitem).c_str(), &accel_key,
|
||||||
&accel_mods);
|
&accel_mods);
|
||||||
if (accel_key != GDK_VoidSymbol)
|
if (accel_key != GDK_VoidSymbol)
|
||||||
{
|
{
|
||||||
@ -1271,10 +1300,9 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
|
|||||||
|
|
||||||
guint accel_key;
|
guint accel_key;
|
||||||
GdkModifierType accel_mods;
|
GdkModifierType accel_mods;
|
||||||
wxCharBuffer buf = wxGTK_CONV( GetHotKey(*mitem) );
|
wxCharBuffer buf = wxGTK_CONV( GetGtkHotKey(*mitem) );
|
||||||
|
|
||||||
// wxPrintf( wxT("item: %s hotkey %s\n"), mitem->GetText().c_str(), GetHotKey(*mitem).c_str() );
|
|
||||||
|
|
||||||
|
// wxPrintf( wxT("item: %s hotkey %s\n"), mitem->GetText().c_str(), GetGtkHotKey(*mitem).c_str() );
|
||||||
gtk_accelerator_parse( (const char*) buf, &accel_key, &accel_mods);
|
gtk_accelerator_parse( (const char*) buf, &accel_key, &accel_mods);
|
||||||
if (accel_key != 0)
|
if (accel_key != 0)
|
||||||
{
|
{
|
||||||
@ -1364,7 +1392,7 @@ int wxMenu::FindMenuIdByMenuItem( GtkWidget *menuItem ) const
|
|||||||
|
|
||||||
#if wxUSE_ACCEL
|
#if wxUSE_ACCEL
|
||||||
|
|
||||||
static wxString GetHotKey( const wxMenuItem& item )
|
static wxString GetGtkHotKey( const wxMenuItem& item )
|
||||||
{
|
{
|
||||||
wxString hotkey;
|
wxString hotkey;
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ extern void wxapp_install_idle_handler();
|
|||||||
extern bool g_isIdle;
|
extern bool g_isIdle;
|
||||||
|
|
||||||
#if wxUSE_ACCEL
|
#if wxUSE_ACCEL
|
||||||
static wxString GetHotKey( const wxMenuItem& item );
|
static wxString GetGtkHotKey( const wxMenuItem& item );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -815,14 +815,17 @@ void wxMenuItem::SetText( const wxString& str )
|
|||||||
{
|
{
|
||||||
// Some optimization to avoid flicker
|
// Some optimization to avoid flicker
|
||||||
wxString oldLabel = m_text;
|
wxString oldLabel = m_text;
|
||||||
oldLabel = wxStripMenuCodes(oldLabel.BeforeFirst('\t'));
|
oldLabel = wxStripMenuCodes(oldLabel);
|
||||||
oldLabel.Replace(wxT("_"), wxT(""));
|
oldLabel.Replace(wxT("_"), wxT(""));
|
||||||
wxString label1 = wxStripMenuCodes(str.BeforeFirst('\t'));
|
wxString label1 = wxStripMenuCodes(str);
|
||||||
if (oldLabel == label1)
|
// Make sure we can change a hotkey even if the label is unaltered
|
||||||
return;
|
wxString oldhotkey = GetHotKey();
|
||||||
|
|
||||||
DoSetText(str);
|
DoSetText(str);
|
||||||
|
|
||||||
|
if (oldLabel == label1 && oldhotkey == GetHotKey())
|
||||||
|
return;
|
||||||
|
|
||||||
if (m_menuItem)
|
if (m_menuItem)
|
||||||
{
|
{
|
||||||
GtkLabel *label;
|
GtkLabel *label;
|
||||||
@ -842,6 +845,32 @@ void wxMenuItem::SetText( const wxString& str )
|
|||||||
gtk_accel_label_refetch( GTK_ACCEL_LABEL(label) );
|
gtk_accel_label_refetch( GTK_ACCEL_LABEL(label) );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __WXGTK20__
|
||||||
|
guint accel_key;
|
||||||
|
GdkModifierType accel_mods;
|
||||||
|
wxCharBuffer oldbuf = wxGTK_CONV( oldhotkey );
|
||||||
|
gtk_accelerator_parse( (const char*) oldbuf, &accel_key, &accel_mods);
|
||||||
|
if (accel_key != 0)
|
||||||
|
{
|
||||||
|
gtk_widget_remove_accelerator( GTK_WIDGET(m_menuItem),
|
||||||
|
m_parentMenu->m_accel,
|
||||||
|
accel_key,
|
||||||
|
accel_mods );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxCharBuffer buf = wxGTK_CONV( GetGtkHotKey(*this) );
|
||||||
|
gtk_accelerator_parse( (const char*) buf, &accel_key, &accel_mods);
|
||||||
|
if (accel_key != 0)
|
||||||
|
{
|
||||||
|
gtk_widget_add_accelerator( GTK_WIDGET(m_menuItem),
|
||||||
|
"activate",
|
||||||
|
m_parentMenu->m_accel,
|
||||||
|
accel_key,
|
||||||
|
accel_mods,
|
||||||
|
GTK_ACCEL_VISIBLE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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
|
||||||
@ -873,8 +902,6 @@ void wxMenuItem::DoSetText( const wxString& str )
|
|||||||
++pc;
|
++pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
// wxPrintf( wxT("DoSetText(): str %s m_text %s\n"), str.c_str(), m_text.c_str() );
|
|
||||||
|
|
||||||
m_hotKey = wxT("");
|
m_hotKey = wxT("");
|
||||||
|
|
||||||
if(*pc == wxT('\t'))
|
if(*pc == wxT('\t'))
|
||||||
@ -882,6 +909,8 @@ void wxMenuItem::DoSetText( const wxString& str )
|
|||||||
pc++;
|
pc++;
|
||||||
m_hotKey = pc;
|
m_hotKey = pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// wxPrintf( wxT("DoSetText(): str %s m_text %s hotkey %s\n"), str.c_str(), m_text.c_str(), m_hotKey.c_str() );
|
||||||
}
|
}
|
||||||
|
|
||||||
#if wxUSE_ACCEL
|
#if wxUSE_ACCEL
|
||||||
@ -1100,7 +1129,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
|
|||||||
|
|
||||||
// accelerator for the item, as specified by its label
|
// accelerator for the item, as specified by its label
|
||||||
// (ex. Ctrl+O for open)
|
// (ex. Ctrl+O for open)
|
||||||
gtk_accelerator_parse(GetHotKey(*mitem).c_str(), &accel_key,
|
gtk_accelerator_parse(GetGtkHotKey(*mitem).c_str(), &accel_key,
|
||||||
&accel_mods);
|
&accel_mods);
|
||||||
if (accel_key != GDK_VoidSymbol)
|
if (accel_key != GDK_VoidSymbol)
|
||||||
{
|
{
|
||||||
@ -1271,10 +1300,9 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
|
|||||||
|
|
||||||
guint accel_key;
|
guint accel_key;
|
||||||
GdkModifierType accel_mods;
|
GdkModifierType accel_mods;
|
||||||
wxCharBuffer buf = wxGTK_CONV( GetHotKey(*mitem) );
|
wxCharBuffer buf = wxGTK_CONV( GetGtkHotKey(*mitem) );
|
||||||
|
|
||||||
// wxPrintf( wxT("item: %s hotkey %s\n"), mitem->GetText().c_str(), GetHotKey(*mitem).c_str() );
|
|
||||||
|
|
||||||
|
// wxPrintf( wxT("item: %s hotkey %s\n"), mitem->GetText().c_str(), GetGtkHotKey(*mitem).c_str() );
|
||||||
gtk_accelerator_parse( (const char*) buf, &accel_key, &accel_mods);
|
gtk_accelerator_parse( (const char*) buf, &accel_key, &accel_mods);
|
||||||
if (accel_key != 0)
|
if (accel_key != 0)
|
||||||
{
|
{
|
||||||
@ -1364,7 +1392,7 @@ int wxMenu::FindMenuIdByMenuItem( GtkWidget *menuItem ) const
|
|||||||
|
|
||||||
#if wxUSE_ACCEL
|
#if wxUSE_ACCEL
|
||||||
|
|
||||||
static wxString GetHotKey( const wxMenuItem& item )
|
static wxString GetGtkHotKey( const wxMenuItem& item )
|
||||||
{
|
{
|
||||||
wxString hotkey;
|
wxString hotkey;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user