From 83ce56341bb5587b2253d54898447e8363ee805a Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Tue, 30 Mar 2004 16:57:49 +0000 Subject: [PATCH] databrowser notification trigger events now git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26498 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/mac/carbon/listbox.cpp | 72 ++++++++++++++++++++++++++++++++++---- 1 file changed, 65 insertions(+), 7 deletions(-) diff --git a/src/mac/carbon/listbox.cpp b/src/mac/carbon/listbox.cpp index b4a516b409..f371474e39 100644 --- a/src/mac/carbon/listbox.cpp +++ b/src/mac/carbon/listbox.cpp @@ -62,6 +62,58 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, style, validator, name); } +#if TARGET_API_MAC_OSX +static pascal void DataBrowserItemNotificationProc(ControlRef browser, DataBrowserItemID itemID, + DataBrowserItemNotification message, DataBrowserItemDataRef itemData) +#else +static pascal void DataBrowserItemNotificationProc(ControlRef browser, DataBrowserItemID itemID, + DataBrowserItemNotification message) +#endif +{ + long ref = GetControlReference( browser ) ; + if ( ref ) + { + wxListBox* list = wxDynamicCast( ref , wxListBox ) ; + for ( size_t i = 0 ; i < list->m_idArray.GetCount() ; ++i ) + if ( list->m_idArray[i] == (long) itemID ) + { + bool trigger = false ; + wxCommandEvent event( + wxEVT_COMMAND_LISTBOX_SELECTED, list->GetId() ); + switch( message ) + { + case kDataBrowserItemDeselected : + if ( list->HasMultipleSelection() ) + trigger = true ; + break ; + case kDataBrowserItemSelected : + trigger = true ; + break ; + case kDataBrowserItemDoubleClicked : + event.SetEventType(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED) ; + trigger = true ; + break ; + default : + break ; + } + if ( trigger ) + { + event.SetEventObject( list ); + if ( list->HasClientObjectData() ) + event.SetClientObject( list->GetClientObject(i) ); + else if ( list->HasClientUntypedData() ) + event.SetClientData( list->GetClientData(i) ); + event.SetString( list->GetString(i) ); + event.SetInt(i) ; + event.SetExtraLong( list->HasMultipleSelection() ? message == kDataBrowserItemSelected : TRUE ); + list->GetEventHandler()->ProcessEvent(event) ; + } + break ; + } + } +} + + static pascal OSStatus ListBoxGetSetItemData(ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean changeValue) @@ -178,6 +230,12 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, callbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP(ListBoxGetSetItemData); + callbacks.u.v1.itemNotificationCallback = +#if TARGET_API_MAC_OSX + (DataBrowserItemNotificationUPP) NewDataBrowserItemNotificationWithItemUPP(DataBrowserItemNotificationProc) ; +#else + NewDataBrowserItemNotificationUPP(DataBrowserItemNotificationProc) ; +#endif SetDataBrowserCallbacks(browser, &callbacks); MacPostControlCreate(pos,size) ; @@ -310,11 +368,6 @@ void wxListBox::DoSetItems(const wxArrayString& choices, void** clientData) #endif // wxUSE_OWNER_DRAWN } -bool wxListBox::HasMultipleSelection() const -{ - return (m_windowStyle & wxLB_MULTIPLE) || (m_windowStyle & wxLB_EXTENDED); -} - int wxListBox::FindString(const wxString& s) const { @@ -587,7 +640,7 @@ void wxListBox::MacAppend( const wxString& text) void wxListBox::MacClear() { verify_noerr(::RemoveDataBrowserItems((ControlRef) m_macControl , kDataBrowserNoItem , 0 , NULL , kDataBrowserItemNoProperty ) ) ; - m_dataArray.Empty() ; + m_idArray.Empty() ; } void wxListBox::MacSetSelection( int n , bool select ) @@ -651,6 +704,7 @@ void wxListBox::OnSize( wxSizeEvent &event) void wxListBox::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED(mouseStillDown)) { + /* Boolean wasDoubleClick = false ; long result ; @@ -663,6 +717,7 @@ void wxListBox::MacHandleControlClick( WXWidget control , wxInt16 controlpart , { MacDoDoubleClick() ; } + */ } void wxListBox::MacSetRedraw( bool doDraw ) @@ -671,7 +726,7 @@ void wxListBox::MacSetRedraw( bool doDraw ) } void wxListBox::MacDoClick() -{ +{/* wxArrayInt aSelections; int n ; size_t count = GetSelections(aSelections); @@ -715,13 +770,16 @@ void wxListBox::MacDoClick() event.m_commandInt = n; GetEventHandler()->ProcessEvent(event); +*/ } void wxListBox::MacDoDoubleClick() { +/* wxCommandEvent event(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, m_windowId); event.SetEventObject( this ); GetEventHandler()->ProcessEvent(event) ; +*/ } void wxListBox::OnChar(wxKeyEvent& event) -- 2.45.2