]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix sending wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, fixes #10894: Missing OSX...
authorRobert Roebling <robert@roebling.de>
Mon, 15 Jun 2009 18:35:24 +0000 (18:35 +0000)
committerRobert Roebling <robert@roebling.de>
Mon, 15 Jun 2009 18:35:24 +0000 (18:35 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61062 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/osx/carbon/dataview.h
include/wx/osx/dataview.h
src/osx/carbon/dataview.cpp

index d55d0b62ef10b8a34faf647cb7cced5a7a5617f5..336c577f23dda5a416da268671295a3744b975c8 100644 (file)
@@ -129,6 +129,7 @@ public:
   wxMacDataBrowserTableViewControl(void)
   {
   }
+  ~wxMacDataBrowserTableViewControl(void);
 
 //
 // callback handling
@@ -310,6 +311,11 @@ protected :
   virtual Boolean DataBrowserAddDragItemProc(DragReference dragRef, DataBrowserItemID itemID, ItemReference* itemRef) = 0;
   virtual Boolean DataBrowserReceiveDragProc(DragReference dragRef, DataBrowserItemID itemID)                         = 0;
 
+//
+// event handler for hit testing
+///
+  void*  m_macDataViewCtrlEventHandler;
+  
 private:
 //
 // wxWidget internal stuff
index 80c6f5c3777731b2f6e6f6b598bd8cad60a5918e..b1b692eede6255a0b532ad657e02620520458a9a 100644 (file)
@@ -406,6 +406,10 @@ public:
     {
         m_width = NewWidth;
     }
+    void SetSortOrderVariable(bool NewOrder)
+    {
+        m_ascending = NewOrder;
+    }
 
 private:
     // common part of all ctors
index ecacdf72b1e33c4341e2bcf62ead3504e408d540..bbc49a00d60c59e05ebabf96afaa500f1cba3f60 100644 (file)
@@ -66,6 +66,12 @@ static DataBrowserItemID* CreateDataBrowserItemIDArray(size_t& noOfEntries, wxDa
   return itemIDs;
 }
 
+static const EventTypeSpec eventList[] =
+{
+    { kEventClassControl, kEventControlHit },
+    { kEventClassControl, kEventControlDraw }
+};
+
 static pascal OSStatus DataBrowserCtrlEventHandler(EventHandlerCallRef handler, EventRef EventReference, void* Data)
 {
   wxDataViewCtrl* DataViewCtrlPtr((wxDataViewCtrl*) Data); // the 'Data' variable always contains a pointer to the data view control that installed the handler
@@ -89,7 +95,9 @@ static pascal OSStatus DataBrowserCtrlEventHandler(EventHandlerCallRef handler,
       {
         ControlRef            controlReference;
         DataBrowserPropertyID columnPropertyID;
+        DataBrowserSortOrder  order;
         unsigned long         columnIndex;
+        wxDataViewColumn*     column;
         OSStatus              status;
         wxDataViewEvent       DataViewEvent(wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK,DataViewCtrlPtr->GetId());
 
@@ -101,10 +109,15 @@ static pascal OSStatus DataBrowserCtrlEventHandler(EventHandlerCallRef handler,
         if (status == errDataBrowserPropertyNotFound) // user clicked into part of the header that does not have a property
           return ::CallNextEventHandler(handler,EventReference);
         wxCHECK(status == noErr,status);
+        column = DataViewCtrlPtr->GetColumn(columnIndex);
+       // set the column sort order:
+        status = ::GetDataBrowserSortOrder(controlReference,&order);
+        wxCHECK(status == noErr,status);
+        column->SetSortOrderVariable(order == kDataBrowserOrderIncreasing);
        // initialize wxWidget event handler:
         DataViewEvent.SetEventObject(DataViewCtrlPtr);
         DataViewEvent.SetColumn(columnIndex);
-        DataViewEvent.SetDataViewColumn(DataViewCtrlPtr->GetColumn(columnIndex));
+        DataViewEvent.SetDataViewColumn(column);
        // finally sent the equivalent wxWidget event:
         DataViewCtrlPtr->HandleWindowEvent(DataViewEvent);
         return ::CallNextEventHandler(handler,EventReference);
@@ -312,6 +325,9 @@ wxMacDataBrowserTableViewControl::wxMacDataBrowserTableViewControl(wxWindow* pee
 
   SetReferenceInNativeControl();
   verify_noerr(err);
+  
+  ::InstallControlEventHandler(this->m_controlRef, GetDataBrowserCtrlEventHandlerUPP(), GetEventTypeCount(eventList), eventList, peer, (EventHandlerRef *)&m_macDataViewCtrlEventHandler);
+  
  // setup standard callbacks:
   if (gDataBrowserTableViewGetContextualMenuUPP == NULL) gDataBrowserTableViewGetContextualMenuUPP = NewDataBrowserGetContextualMenuUPP(wxMacDataBrowserTableViewControl::DataBrowserGetContextualMenuProc);
   if (gDataBrowserTableViewItemCompareUPP       == NULL) gDataBrowserTableViewItemCompareUPP       = NewDataBrowserItemCompareUPP      (wxMacDataBrowserTableViewControl::DataBrowserCompareProc);
@@ -390,6 +406,11 @@ wxMacDataBrowserTableViewControl::wxMacDataBrowserTableViewControl(wxWindow* pee
     this->SetHeaderButtonHeight(0);
 } /* wxMacDataBrowserTableViewControl::wxMacDataBrowserTableViewControl(wxWindow*, wxPoint const&, wxSize const&, long) */
 
+wxMacDataBrowserTableViewControl::~wxMacDataBrowserTableViewControl(void)
+{
+  ::RemoveEventHandler((EventHandlerRef) m_macDataViewCtrlEventHandler);
+} /* wxMacDataBrowserTableViewControl::~wxMacDataBrowserTableViewControl(void) */
+
 //
 // callback handling
 //