- if ( event.KeyCode() == WXK_SPACE )
- GetItem(GetSelection())->Toggle();
- else
- wxListBox::OnChar(event);
+ // what do we do?
+ enum
+ {
+ None,
+ Toggle,
+ Set,
+ Clear
+ } oper;
+
+ switch ( event.KeyCode() )
+ {
+ case WXK_SPACE:
+ oper = Toggle;
+ break;
+
+ case WXK_NUMPAD_ADD:
+ case '+':
+ oper = Set;
+ break;
+
+ case WXK_NUMPAD_SUBTRACT:
+ case '-':
+ oper = Clear;
+ break;
+
+ default:
+ oper = None;
+ }
+
+ if ( oper != None )
+ {
+ wxArrayInt selections;
+ int count;
+ if ( HasMultipleSelection() )
+ {
+ count = GetSelections(selections);
+ }
+ else
+ {
+ count = 1;
+ selections.Add(GetSelection());
+ }
+
+ for ( int i = 0; i < count; i++ )
+ {
+ wxCheckListBoxItem *item = GetItem(selections[i]);
+ if ( !item )
+ {
+ wxFAIL_MSG( _T("no wxCheckListBoxItem?") );
+ continue;
+ }
+
+ switch ( oper )
+ {
+ case Toggle:
+ item->Toggle();
+ break;
+
+ case Set:
+ case Clear:
+ item->Check( oper == Set );
+ break;
+
+ default:
+ wxFAIL_MSG( _T("what should this key do?") );
+ }
+ }
+ }
+ else // nothing to do
+ {
+ event.Skip();
+ }