From: Stefan Csomor <csomor@advancedconcepts.ch> Date: Tue, 13 Jan 2009 18:19:42 +0000 (+0000) Subject: common event code X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/2126732187091fcdb61329b9ba2821627469f44a common event code git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58077 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/osx/carbon/listbox.h b/include/wx/osx/carbon/listbox.h index e2fc661e1c..bf01a78fec 100644 --- a/include/wx/osx/carbon/listbox.h +++ b/include/wx/osx/carbon/listbox.h @@ -122,6 +122,7 @@ public: bool MacGetBlockEvents() const { return m_blockEvents; } + virtual void HandleLineEvent( unsigned int n, bool doubleClick ); protected: // callback for derived classes which may have to insert additional data // at a certain line - which cannot be predetermined for sorted list data diff --git a/src/osx/carbon/listbox.cpp b/src/osx/carbon/listbox.cpp index 23f6443ba0..148167afc0 100644 --- a/src/osx/carbon/listbox.cpp +++ b/src/osx/carbon/listbox.cpp @@ -250,16 +250,7 @@ void wxMacListBoxItem::Notification(wxMacDataItemBrowserControl *owner , if (message == kDataBrowserItemDoubleClicked) { unsigned int n = owner->GetLineFromItem( this ); - wxCommandEvent event( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, list->GetId() ); - 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); + list->HandleLineEvent( n, true ); return; } } @@ -374,15 +365,7 @@ void wxMacDataBrowserListControl::ItemNotification( int sel = list->GetSelection(); if ((sel < 0) || (sel > (int) list->GetCount())) // OS X can select an item below the last item (why?) return; - event.SetEventObject( list ); - 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); + list->HandleLineEvent( sel, false ); return; } diff --git a/src/osx/cocoa/listbox.mm b/src/osx/cocoa/listbox.mm index 5297c16508..94d57afad6 100644 --- a/src/osx/cocoa/listbox.mm +++ b/src/osx/cocoa/listbox.mm @@ -59,6 +59,8 @@ class wxListWidgetCocoaImpl; - (void)setImplementation: (wxListWidgetCocoaImpl *) theImplementation; - (wxListWidgetCocoaImpl*) implementation; +- (void)clickedAction: (id) sender; +- (void)doubleClickedAction: (id) sender; @end @@ -282,6 +284,47 @@ protected: 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 @@ -428,17 +471,27 @@ void wxListWidgetCocoaImpl::ListSetSelection( unsigned int n, bool select, bool int wxListWidgetCocoaImpl::ListGetSelection() const { - return 0; + return [m_tableView selectedRow]; } 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 { - return false; + return [m_tableView isRowSelected:n]; } // display diff --git a/src/osx/listbox_osx.cpp b/src/osx/listbox_osx.cpp index e138470cae..3b74cc851e 100644 --- a/src/osx/listbox_osx.cpp +++ b/src/osx/listbox_osx.cpp @@ -370,4 +370,23 @@ void wxListBox::SetString(unsigned int n, const wxString& s) 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