]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/databrow.cpp
fix access to client data of wxComboBox in wxUniv by virtualizing access to wxControl...
[wxWidgets.git] / src / mac / carbon / databrow.cpp
index fa3d7556f012c481ff7c04036be433cad5a90ed3..7152558b24108c1d6141f00888bef45a728ddf02 100644 (file)
@@ -20,6 +20,8 @@
 
 #include "wx/wxprec.h"
 
+#if wxUSE_DATAVIEWCTRL
+
 #include "wx/utils.h"
 
 #ifndef WX_PRECOMP
@@ -916,22 +918,7 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(Da
       } /* block */
       break;
     case kDataBrowserItemDeselected:
-      {
-       // variable definitions:
-        wxDataViewCtrl* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl*>(this->GetPeer()));
-        
-        if (dataViewCtrlPtr != NULL) // can become NULL if an item is still selected while removing the data browser
-        {
-         // initialize wxWidget event:
-          wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_DESELECTED,dataViewCtrlPtr->GetId()); // variable definition
-          
-          dataViewEvent.SetEventObject(dataViewCtrlPtr);
-          dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
-         // finally send the equivalent wxWidget event:
-          dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
-        } /* if */
-      } /* block */
-      break;
+      break; // not implemented by wxWidgets; see kDataBrowserSelectionSetChanged
     case kDataBrowserItemDoubleClicked:
       {
        // variable definitions:
@@ -965,26 +952,41 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(Da
       } /* block */
       break;
     case kDataBrowserItemSelected:
+      break; // not implemented by wxWidgets; see kDataBrowserSelectionSetChanged
+    case kDataBrowserSelectionSetChanged:
       {
        // variable definitions:
         wxDataViewCtrl* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl*>(this->GetPeer()));
         
         wxCHECK_RET(dataViewCtrlPtr != NULL,_("Pointer to data view control not set correctly."));
        // initialize wxWidget event:
-        wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_SELECTED,dataViewCtrlPtr->GetId()); // variable definition
+        wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED,dataViewCtrlPtr->GetId()); // variable definition
 
         dataViewEvent.SetEventObject(dataViewCtrlPtr);
-        dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
+        dataViewEvent.SetModel      (dataViewCtrlPtr->GetModel());
        // finally send the equivalent wxWidget event:
         dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
       } /* block */
       break;
-    case kDataBrowserSelectionSetChanged:
-      break;
     case kDataBrowserUserStateChanged:
       {
+       // variable definitions and initialization:
         DataBrowserPropertyID propertyID;
-        
+        wxDataViewCtrl*       dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl*>(this->GetPeer()));
+
+        wxCHECK_RET(dataViewCtrlPtr != NULL,_("Pointer to data view control not set correctly"));
+       // update column widths:
+        for (size_t i=0; i<dataViewCtrlPtr->GetColumnCount(); ++i)
+        {
+         // constant definition for abbreviational purposes:
+          wxDataViewColumn* const columnPtr = dataViewCtrlPtr->GetColumn(i);
+         // variable definition:
+          UInt16 columnWidth;
+          
+          wxCHECK_RET(this->GetColumnWidth(columnPtr->GetPropertyID(),&columnWidth) == noErr,_("Column width could not be determined"));
+          columnPtr->SetWidthVariable(columnWidth);
+        } /* for */
+       // update order status:
         if ((this->GetSortProperty(&propertyID) == noErr) && (propertyID >= kMinPropertyID))
         {
           DataBrowserSortOrder            sortOrder;
@@ -994,9 +996,6 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(Da
           {
            // variable definition and initialization:
             wxDataViewColumn* columnPtr;
-            wxDataViewCtrl*   dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl*>(this->GetPeer()));
-
-            wxCHECK_RET(dataViewCtrlPtr != NULL,_("Pointer to data vie wcontrol not set correctly."));
             columnPtr = dataViewCtrlPtr->GetColumn(columnIndex);
            // check if the sort order has changed:
             if (  columnPtr->IsSortOrderAscending()  && (sortOrder == kDataBrowserOrderDecreasing) ||
@@ -1020,5 +1019,5 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(Da
 } /* wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(DataBrowserItemID, DataBrowserItemNotification, DataBrowserItemDataRef) */
 
 
-#endif
- // wxUSE_GENERICDATAVIEWCTRL
+#endif // wxUSE_DATAVIEWCTRL
+#endif // wxUSE_GENERICDATAVIEWCTRL