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:
Vadim Zeitlin
2002-03-25 16:30:22 +00:00
parent ac511156ea
commit 24bcaec367
2 changed files with 32 additions and 22 deletions

View File

@@ -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();
} }

View File

@@ -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();
} }