more fixes to radio menu items: fixed Check() for them; allow separators inside the radio groups
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14772 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -851,17 +851,20 @@ void wxMenuItem::Check( bool check )
|
|||||||
{
|
{
|
||||||
wxCHECK_RET( m_menuItem, wxT("invalid menu item") );
|
wxCHECK_RET( m_menuItem, wxT("invalid menu item") );
|
||||||
|
|
||||||
wxCHECK_RET( IsCheckable(), wxT("Can't check uncheckable item!") )
|
|
||||||
|
|
||||||
if (check == m_isChecked)
|
if (check == m_isChecked)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wxMenuItemBase::Check( check );
|
wxMenuItemBase::Check( check );
|
||||||
|
|
||||||
// GTK+ does it itself for the radio item
|
switch ( GetKind() )
|
||||||
if ( GetKind() == wxITEM_CHECK )
|
|
||||||
{
|
{
|
||||||
gtk_check_menu_item_set_state( (GtkCheckMenuItem*)m_menuItem, (gint)check );
|
case wxITEM_CHECK:
|
||||||
|
case wxITEM_RADIO:
|
||||||
|
gtk_check_menu_item_set_state( (GtkCheckMenuItem*)m_menuItem, (gint)check );
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
wxFAIL_MSG( _T("can't check this item") );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -964,8 +967,8 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if GTK_CHECK_VERSION(1, 2, 0)
|
#if GTK_CHECK_VERSION(1, 2, 0)
|
||||||
// is this a radio item?
|
// does this item terminate the current radio group?
|
||||||
bool isRadio = FALSE;
|
bool endOfRadioGroup = TRUE;
|
||||||
#endif // GTK+ >= 1.2
|
#endif // GTK+ >= 1.2
|
||||||
|
|
||||||
if ( mitem->IsSeparator() )
|
if ( mitem->IsSeparator() )
|
||||||
@@ -982,6 +985,9 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem)
|
|||||||
|
|
||||||
/* this will be wrong for more than one separator. do we care? */
|
/* this will be wrong for more than one separator. do we care? */
|
||||||
menuItem = gtk_item_factory_get_widget( m_factory, "<main>/sep" );
|
menuItem = gtk_item_factory_get_widget( m_factory, "<main>/sep" );
|
||||||
|
|
||||||
|
// we might have a separator inside a radio group
|
||||||
|
endOfRadioGroup = FALSE;
|
||||||
#else // GTK+ 1.0
|
#else // GTK+ 1.0
|
||||||
menuItem = gtk_menu_item_new();
|
menuItem = gtk_menu_item_new();
|
||||||
#endif // GTK 1.2/1.0
|
#endif // GTK 1.2/1.0
|
||||||
@@ -1097,9 +1103,8 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem)
|
|||||||
item_type = pathRadio;
|
item_type = pathRadio;
|
||||||
}
|
}
|
||||||
|
|
||||||
// remember that this one was a radio item to avoid resetting
|
// continue the existing radio group, if any
|
||||||
// m_pathLastRadio below
|
endOfRadioGroup = FALSE;
|
||||||
isRadio = TRUE;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -1162,7 +1167,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem)
|
|||||||
mitem->SetMenuItem(menuItem);
|
mitem->SetMenuItem(menuItem);
|
||||||
|
|
||||||
#if GTK_CHECK_VERSION(1, 2, 0)
|
#if GTK_CHECK_VERSION(1, 2, 0)
|
||||||
if ( !isRadio )
|
if ( endOfRadioGroup )
|
||||||
{
|
{
|
||||||
m_pathLastRadio.clear();
|
m_pathLastRadio.clear();
|
||||||
}
|
}
|
||||||
|
@@ -851,17 +851,20 @@ void wxMenuItem::Check( bool check )
|
|||||||
{
|
{
|
||||||
wxCHECK_RET( m_menuItem, wxT("invalid menu item") );
|
wxCHECK_RET( m_menuItem, wxT("invalid menu item") );
|
||||||
|
|
||||||
wxCHECK_RET( IsCheckable(), wxT("Can't check uncheckable item!") )
|
|
||||||
|
|
||||||
if (check == m_isChecked)
|
if (check == m_isChecked)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wxMenuItemBase::Check( check );
|
wxMenuItemBase::Check( check );
|
||||||
|
|
||||||
// GTK+ does it itself for the radio item
|
switch ( GetKind() )
|
||||||
if ( GetKind() == wxITEM_CHECK )
|
|
||||||
{
|
{
|
||||||
gtk_check_menu_item_set_state( (GtkCheckMenuItem*)m_menuItem, (gint)check );
|
case wxITEM_CHECK:
|
||||||
|
case wxITEM_RADIO:
|
||||||
|
gtk_check_menu_item_set_state( (GtkCheckMenuItem*)m_menuItem, (gint)check );
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
wxFAIL_MSG( _T("can't check this item") );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -964,8 +967,8 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if GTK_CHECK_VERSION(1, 2, 0)
|
#if GTK_CHECK_VERSION(1, 2, 0)
|
||||||
// is this a radio item?
|
// does this item terminate the current radio group?
|
||||||
bool isRadio = FALSE;
|
bool endOfRadioGroup = TRUE;
|
||||||
#endif // GTK+ >= 1.2
|
#endif // GTK+ >= 1.2
|
||||||
|
|
||||||
if ( mitem->IsSeparator() )
|
if ( mitem->IsSeparator() )
|
||||||
@@ -982,6 +985,9 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem)
|
|||||||
|
|
||||||
/* this will be wrong for more than one separator. do we care? */
|
/* this will be wrong for more than one separator. do we care? */
|
||||||
menuItem = gtk_item_factory_get_widget( m_factory, "<main>/sep" );
|
menuItem = gtk_item_factory_get_widget( m_factory, "<main>/sep" );
|
||||||
|
|
||||||
|
// we might have a separator inside a radio group
|
||||||
|
endOfRadioGroup = FALSE;
|
||||||
#else // GTK+ 1.0
|
#else // GTK+ 1.0
|
||||||
menuItem = gtk_menu_item_new();
|
menuItem = gtk_menu_item_new();
|
||||||
#endif // GTK 1.2/1.0
|
#endif // GTK 1.2/1.0
|
||||||
@@ -1097,9 +1103,8 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem)
|
|||||||
item_type = pathRadio;
|
item_type = pathRadio;
|
||||||
}
|
}
|
||||||
|
|
||||||
// remember that this one was a radio item to avoid resetting
|
// continue the existing radio group, if any
|
||||||
// m_pathLastRadio below
|
endOfRadioGroup = FALSE;
|
||||||
isRadio = TRUE;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -1162,7 +1167,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem)
|
|||||||
mitem->SetMenuItem(menuItem);
|
mitem->SetMenuItem(menuItem);
|
||||||
|
|
||||||
#if GTK_CHECK_VERSION(1, 2, 0)
|
#if GTK_CHECK_VERSION(1, 2, 0)
|
||||||
if ( !isRadio )
|
if ( endOfRadioGroup )
|
||||||
{
|
{
|
||||||
m_pathLastRadio.clear();
|
m_pathLastRadio.clear();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user