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; }
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

View File

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

View File

@@ -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

View File

@@ -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