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)
const wxString& name)
{
m_macIsUserPane = FALSE ;
+
+ wxASSERT_MSG( !(style & wxLB_MULTIPLE) || !(style & wxLB_EXTENDED),
+ _T("only one of listbox selection modes can be specified") );
if ( !wxListBoxBase::Create(parent, id, pos, size, style & ~(wxHSCROLL|wxVSCROLL), validator, name) )
return false;
columnDesc.propertyDesc.propertyID = 1024;
columnDesc.propertyDesc.propertyType = kDataBrowserTextType;
- columnDesc.propertyDesc.propertyFlags = kDataBrowserListViewTypeSelectColumn | kDataBrowserTableViewSelectionColumn ;
+ columnDesc.propertyDesc.propertyFlags =
+#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2
+ kDataBrowserListViewTypeSelectColumn |
+#endif
+ kDataBrowserTableViewSelectionColumn ;
verify_noerr(::AddDataBrowserListViewColumn(browser, &columnDesc, kDataBrowserListViewAppendColumn) ) ;
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) ;
#endif // wxUSE_OWNER_DRAWN
}
-bool wxListBox::HasMultipleSelection() const
-{
- return (m_windowStyle & wxLB_MULTIPLE) || (m_windowStyle & wxLB_EXTENDED);
-}
-
int wxListBox::FindString(const wxString& s) const
{
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 )
{
UInt32 id = m_idArray[n] ;
+ if ( !(GetWindowStyle() & (wxLB_MULTIPLE|wxLB_EXTENDED) ) )
+ {
+ int n = MacGetSelection() ;
+ if ( n >= 0 )
+ {
+ UInt32 idOld = m_idArray[n] ;
+ SetDataBrowserSelectedItems((ControlRef) m_macControl , 1 , & idOld , kDataBrowserItemsRemove ) ;
+ }
+ }
if ( ::IsDataBrowserItemSelected( (ControlRef) m_macControl , id ) != select )
{
verify_noerr(::SetDataBrowserSelectedItems((ControlRef) m_macControl , 1 , & id , kDataBrowserItemsToggle ) ) ;
void wxListBox::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED(mouseStillDown))
{
+ /*
Boolean wasDoubleClick = false ;
long result ;
{
MacDoDoubleClick() ;
}
+ */
}
void wxListBox::MacSetRedraw( bool doDraw )
}
void wxListBox::MacDoClick()
-{
+{/*
wxArrayInt aSelections;
int n ;
size_t count = GetSelections(aSelections);
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)