common event code

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58077 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2009-01-13 18:19:42 +00:00
parent 9d33840bab
commit 2126732187
4 changed files with 78 additions and 22 deletions

View File

@@ -122,6 +122,7 @@ public:
bool MacGetBlockEvents() const { return m_blockEvents; } bool MacGetBlockEvents() const { return m_blockEvents; }
virtual void HandleLineEvent( unsigned int n, bool doubleClick );
protected: protected:
// callback for derived classes which may have to insert additional data // callback for derived classes which may have to insert additional data
// at a certain line - which cannot be predetermined for sorted list data // at a certain line - which cannot be predetermined for sorted list data

View File

@@ -250,16 +250,7 @@ void wxMacListBoxItem::Notification(wxMacDataItemBrowserControl *owner ,
if (message == kDataBrowserItemDoubleClicked) if (message == kDataBrowserItemDoubleClicked)
{ {
unsigned int n = owner->GetLineFromItem( this ); unsigned int n = owner->GetLineFromItem( this );
wxCommandEvent event( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, list->GetId() ); list->HandleLineEvent( n, true );
event.SetEventObject( list );
if ( list->HasClientObjectData() )
event.SetClientObject( list->GetClientObject(n) );
else if ( list->HasClientUntypedData() )
event.SetClientData( list->GetClientData(n) );
event.SetString( list->GetString(n) );
event.SetInt( n );
event.SetExtraLong( 1 );
list->HandleWindowEvent(event);
return; return;
} }
} }
@@ -374,15 +365,7 @@ void wxMacDataBrowserListControl::ItemNotification(
int sel = list->GetSelection(); int sel = list->GetSelection();
if ((sel < 0) || (sel > (int) list->GetCount())) // OS X can select an item below the last item (why?) if ((sel < 0) || (sel > (int) list->GetCount())) // OS X can select an item below the last item (why?)
return; return;
event.SetEventObject( list ); list->HandleLineEvent( sel, false );
if ( list->HasClientObjectData() )
event.SetClientObject( list->GetClientObject( sel ) );
else if ( list->HasClientUntypedData() )
event.SetClientData( list->GetClientData( sel ) );
event.SetString( list->GetString( sel ) );
event.SetInt( sel );
event.SetExtraLong( 1 );
list->HandleWindowEvent(event);
return; return;
} }

View File

@@ -59,6 +59,8 @@ class wxListWidgetCocoaImpl;
- (void)setImplementation: (wxListWidgetCocoaImpl *) theImplementation; - (void)setImplementation: (wxListWidgetCocoaImpl *) theImplementation;
- (wxListWidgetCocoaImpl*) implementation; - (wxListWidgetCocoaImpl*) implementation;
- (void)clickedAction: (id) sender;
- (void)doubleClickedAction: (id) sender;
@end @end
@@ -282,6 +284,47 @@ protected:
return impl; return impl;
} }
- (id) init
{
[super init];
impl = NULL;
[self setTarget: self];
[self setAction: @selector(clickedAction:)];
[self setDoubleAction: @selector(doubleClickedAction:)];
return self;
}
- (void) clickedAction: (id) sender
{
if ( impl )
{
wxListBox *list = static_cast<wxListBox*> ( impl->GetWXPeer());
wxCHECK_RET( list != NULL , wxT("Listbox expected"));
wxCommandEvent event( wxEVT_COMMAND_LISTBOX_SELECTED, list->GetId() );
int sel = [self clickedRow];
if ((sel < 0) || (sel > (int) list->GetCount())) // OS X can select an item below the last item (why?)
return;
list->HandleLineEvent( sel, false );
}
}
- (void) doubleClickedAction: (id) sender
{
if ( impl )
{
wxListBox *list = static_cast<wxListBox*> ( impl->GetWXPeer());
wxCHECK_RET( list != NULL , wxT("Listbox expected"));
int sel = [self clickedRow];
if ((sel < 0) || (sel > (int) list->GetCount())) // OS X can select an item below the last item (why?)
return;
list->HandleLineEvent( sel, true );
}
}
@end @end
@@ -428,17 +471,27 @@ void wxListWidgetCocoaImpl::ListSetSelection( unsigned int n, bool select, bool
int wxListWidgetCocoaImpl::ListGetSelection() const int wxListWidgetCocoaImpl::ListGetSelection() const
{ {
return 0; return [m_tableView selectedRow];
} }
int wxListWidgetCocoaImpl::ListGetSelections( wxArrayInt& aSelections ) const int wxListWidgetCocoaImpl::ListGetSelections( wxArrayInt& aSelections ) const
{ {
return 0; aSelections.Empty();
int count = ListGetCount();
for ( int i = 0; i < count; ++i)
{
if ([m_tableView isRowSelected:count])
aSelections.Add(i);
}
return aSelections.Count();
} }
bool wxListWidgetCocoaImpl::ListIsSelected( unsigned int n ) const bool wxListWidgetCocoaImpl::ListIsSelected( unsigned int n ) const
{ {
return false; return [m_tableView isRowSelected:n];
} }
// display // display

View File

@@ -370,4 +370,23 @@ void wxListBox::SetString(unsigned int n, const wxString& s)
GetListPeer()->UpdateLine(n); GetListPeer()->UpdateLine(n);
} }
//
// common event handling
//
void wxListBox::HandleLineEvent( unsigned int n, bool doubleClick )
{
wxCommandEvent event( doubleClick ? wxEVT_COMMAND_LISTBOX_DOUBLECLICKED :
wxEVT_COMMAND_LISTBOX_SELECTED, GetId() );
event.SetEventObject( this );
if ( HasClientObjectData() )
event.SetClientObject( GetClientObject(n) );
else if ( HasClientUntypedData() )
event.SetClientData( GetClientData(n) );
event.SetString( GetString(n) );
event.SetInt( n );
event.SetExtraLong( 1 );
HandleWindowEvent(event);
}
#endif // wxUSE_LISTBOX #endif // wxUSE_LISTBOX