]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/listctrl_mac.cpp
moved Arrow_ constants to the base class
[wxWidgets.git] / src / mac / carbon / listctrl_mac.cpp
index a3dc96b13b6a0a70335971ec606e4886cfefedb5..4e16c48dde77e99f6b8bbee697e894e28186bcb7 100644 (file)
@@ -626,6 +626,12 @@ int wxListCtrl::GetItemCount() const
     return m_count;
 }
 
+void wxListCtrl::SetItemSpacing( int spacing, bool isSmall )
+{
+    if (m_genericImpl)
+        m_genericImpl->SetItemSpacing(spacing, isSmall);
+}
+
 wxSize wxListCtrl::GetItemSpacing() const
 {
     if (m_genericImpl)
@@ -1018,6 +1024,11 @@ long wxListCtrl::InsertItem(wxListItem& info)
         return m_genericImpl->InsertItem(info);
         
     if (m_dbImpl){
+        int count = GetItemCount();
+
+        if (info.m_itemId > count)
+            info.m_itemId = count;
+    
         m_dbImpl->MacInsertItem(info.m_itemId, &info );
         wxListEvent event( wxEVT_COMMAND_LIST_INSERT_ITEM, GetId() );
         event.SetEventObject( this );
@@ -1074,8 +1085,9 @@ long wxListCtrl::InsertColumn(long col, wxListItem& item)
         return m_genericImpl->InsertColumn(col, item);
     
     if (m_dbImpl){
-        if ( !(item.GetMask() & wxLIST_MASK_WIDTH) ) //item.GetWidth() == 0)
-            item.SetWidth(300);
+        if ( !(item.GetMask() & wxLIST_MASK_WIDTH) ) 
+            item.SetWidth(150);
+        
         DataBrowserPropertyType type = kDataBrowserTextType;
         wxImageList* imageList = GetImageList(wxIMAGE_LIST_SMALL);
         if (imageList && imageList->GetImageCount() > 0){
@@ -1094,7 +1106,17 @@ long wxListCtrl::InsertColumn(long col, wxListItem& item)
             else if (item.GetAlign() == wxLIST_FORMAT_RIGHT)
                 just = teFlushRight;
         }
-        m_dbImpl->InsertColumn(col, type, item.GetText(), just, -1, item.GetWidth());
+        m_dbImpl->InsertColumn(col, type, item.GetText(), just, item.GetWidth());
+        
+        if (GetWindowStyleFlag() & wxLC_EDIT_LABELS)
+        {
+            DataBrowserTableViewColumnID id;
+            m_dbImpl->GetColumnIDFromIndex(col, &id);
+            DataBrowserPropertyFlags flags;
+            verify_noerr(m_dbImpl->GetPropertyFlags(id, &flags));
+            flags |= kDataBrowserPropertyIsEditable;
+            verify_noerr(m_dbImpl->SetPropertyFlags(id, flags));
+        }
     }
     
     return col;
@@ -1234,7 +1256,7 @@ void wxMacListCtrlItem::Notification(wxMacDataItemBrowserControl *owner ,
     DataBrowserItemDataRef itemData ) const
 {
 
-    wxMacDataBrowserListControl *lb = dynamic_cast<wxMacDataBrowserListControl*>(owner);
+    wxMacDataBrowserListCtrlControl *lb = dynamic_cast<wxMacDataBrowserListCtrlControl*>(owner);
 
     // we want to depend on as little as possible to make sure tear-down of controls is safe
     if ( message == kDataBrowserItemRemoved)
@@ -1248,35 +1270,22 @@ void wxMacListCtrlItem::Notification(wxMacDataItemBrowserControl *owner ,
         return;
     }
 
-    // TO STEFAN: I'm getting a couple different problems here and I'd appreciate
-    // if you could take a look at them.
-    // 1) wxDynamicCast fails during shutdown. This doesn't suprise me, but 
-    //    you have similar listbox code, so I'm wondering why this case is different.
-    // 2) owner->GetLineFromItem( this ) always asserts.
-    // 3) the !lb->IsSelectionSuppressed code also fails with EXC_BAD_ACCESS
-    
-    // To be honest, I think there are casting issues here, but I don't work enough
-    // in C++ that these things are clear to me, so I'm hoping another pair of eyes
-    // would help. ;-) 
-    // In any case, I set trigger to false so that these events are not sent.
-    
-    // during shutdown, this may fail.
     wxListCtrl *list = wxDynamicCast( owner->GetPeer() , wxListCtrl );
     if ( list ){
         bool trigger = false;
             
-        wxCommandEvent event( wxEVT_COMMAND_LIST_ITEM_SELECTED, list->GetId() );
+        wxListEvent event( wxEVT_COMMAND_LIST_ITEM_SELECTED, list->GetId() );
         bool isSingle = list->GetWindowStyle() | wxLC_SINGLE_SEL;
         switch (message)
         {
             case kDataBrowserItemDeselected:
                 event.SetEventType(wxEVT_COMMAND_LIST_ITEM_DESELECTED);
-                //if ( !isSingle )
-                //    trigger = !lb->IsSelectionSuppressed();
+                if ( !isSingle )
+                    trigger = !lb->IsSelectionSuppressed();
                 break;
 
             case kDataBrowserItemSelected:
-                //trigger = !lb->IsSelectionSuppressed();
+                trigger = !lb->IsSelectionSuppressed();
                 break;
 
             case kDataBrowserItemDoubleClicked:
@@ -1291,17 +1300,13 @@ void wxMacListCtrlItem::Notification(wxMacDataItemBrowserControl *owner ,
         if ( trigger )
         {
             event.SetEventObject( list );
-            //if ( list->HasClientObjectData() )
-            //    event.SetClientObject( (wxClientData*) m_data );
-            //else if ( list->HasClientUntypedData() )
-            //    event.SetClientData( m_data );
-            event.SetString( m_label );
-            event.SetInt( owner->GetLineFromItem( this ) );
-            event.SetExtraLong( !isSingle ? message == kDataBrowserItemSelected : true );
-            wxPostEvent( list->GetEventHandler(), event );
-
+            event.m_itemIndex = owner->GetLineFromItem( this ) ;
+            if ( !list->IsVirtual() )
+            {
+                lb->MacGetColumnInfo(event.m_itemIndex,0,event.m_item);
+            }
             // direct notification is not always having the listbox GetSelection() having in synch with event
-            // list->GetEventHandler()->ProcessEvent(event);
+            wxPostEvent( list->GetEventHandler(), event );
         }
     }
 
@@ -1326,31 +1331,6 @@ wxMacDataBrowserListCtrlControl::wxMacDataBrowserListCtrlControl( wxWindow *peer
     err = SetSelectionFlags( options );
     verify_noerr( err );
 
-    // create the numeric order column
-    DataBrowserListViewColumnDesc columnDesc;
-    columnDesc.headerBtnDesc.titleOffset = 0;
-    columnDesc.headerBtnDesc.version = kDataBrowserListViewLatestHeaderDesc;
-
-    columnDesc.headerBtnDesc.btnFontStyle.flags =
-        kControlUseFontMask | kControlUseJustMask;
-
-    columnDesc.headerBtnDesc.btnContentInfo.contentType = kControlNoContent;
-    columnDesc.headerBtnDesc.btnFontStyle.just = teFlushDefault;
-    columnDesc.headerBtnDesc.btnFontStyle.font = kControlFontViewSystemFont;
-    columnDesc.headerBtnDesc.btnFontStyle.style = normal;
-    columnDesc.headerBtnDesc.titleString = NULL;
-
-    columnDesc.headerBtnDesc.minimumWidth = 0;
-    columnDesc.headerBtnDesc.maximumWidth = 0;
-    columnDesc.propertyDesc.propertyID = kNumericOrderColumnId;
-    columnDesc.propertyDesc.propertyType = kDataBrowserPropertyRelevanceRankPart;
-    columnDesc.propertyDesc.propertyFlags = kDataBrowserTableViewSelectionColumn;
-#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2
-    columnDesc.propertyDesc.propertyFlags |= kDataBrowserListViewTypeSelectColumn;
-#endif
-
-    verify_noerr( AddColumn( &columnDesc, kDataBrowserListViewAppendColumn ) );
-    
     if ( style & wxLC_LIST ){
         InsertColumn(0, kDataBrowserIconAndTextType, wxEmptyString, -1, -1);
         verify_noerr( AutoSizeColumns() );
@@ -1373,7 +1353,7 @@ wxMacDataBrowserListCtrlControl::wxMacDataBrowserListCtrlControl( wxWindow *peer
     else
     {
         m_sortOrder = SortOrder_None;
-        SetDataBrowserSortProperty( m_controlRef , kNumericOrderColumnId);
+        SetDataBrowserSortProperty( m_controlRef , kMinColumnId);
         SetDataBrowserSortOrder( m_controlRef , kDataBrowserOrderIncreasing);
     }
 
@@ -1417,7 +1397,9 @@ void wxMacDataBrowserListCtrlControl::UpdateState(wxMacDataItem* dataItem, wxLis
 void wxMacDataBrowserListCtrlControl::MacGetColumnInfo( unsigned int row, unsigned int column, wxListItem& item )
 { 
     wxMacDataItem* dataItem = GetItemFromLine(row);
-    if (item){
+    // CS should this guard against dataItem = 0 ? , as item is not a pointer if (item) is not appropriate
+    //if (item) 
+    {
         wxMacListCtrlItem* listItem = dynamic_cast<wxMacListCtrlItem*>(dataItem);
         wxListItem* oldItem = listItem->GetColumnInfo( column );
         
@@ -1541,6 +1523,7 @@ OSStatus wxMacListCtrlItem::GetSetData( wxMacDataItemBrowserControl *owner ,
     DataBrowserItemDataRef itemData,
     bool changeValue )
 {
+        
     OSStatus err = errDataBrowserPropertyNotSupported;
     if ( !changeValue )
     {
@@ -1558,7 +1541,7 @@ OSStatus wxMacListCtrlItem::GetSetData( wxMacDataItemBrowserControl *owner ,
                 }
                 
                 int imgIndex = item->GetImage();
-                if (imgIndex != -1){
+                if ( (item->GetMask() & wxLIST_MASK_IMAGE) ){
                     wxListCtrl* list = wxDynamicCast( owner->GetPeer() , wxListCtrl );
                     wxImageList* imageList = list->GetImageList(wxIMAGE_LIST_SMALL);
                     if (imageList && imageList->GetImageCount() > 0){