Fix sending wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, fixes #10894: Missing OSX-Carbon DataView control header click events

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61062 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2009-06-15 18:35:24 +00:00
parent 9c956c0a59
commit 8ba01d3546
3 changed files with 32 additions and 1 deletions

View File

@@ -129,6 +129,7 @@ public:
wxMacDataBrowserTableViewControl(void) wxMacDataBrowserTableViewControl(void)
{ {
} }
~wxMacDataBrowserTableViewControl(void);
// //
// callback handling // callback handling
@@ -310,6 +311,11 @@ protected :
virtual Boolean DataBrowserAddDragItemProc(DragReference dragRef, DataBrowserItemID itemID, ItemReference* itemRef) = 0; virtual Boolean DataBrowserAddDragItemProc(DragReference dragRef, DataBrowserItemID itemID, ItemReference* itemRef) = 0;
virtual Boolean DataBrowserReceiveDragProc(DragReference dragRef, DataBrowserItemID itemID) = 0; virtual Boolean DataBrowserReceiveDragProc(DragReference dragRef, DataBrowserItemID itemID) = 0;
//
// event handler for hit testing
///
void* m_macDataViewCtrlEventHandler;
private: private:
// //
// wxWidget internal stuff // wxWidget internal stuff

View File

@@ -406,6 +406,10 @@ public:
{ {
m_width = NewWidth; m_width = NewWidth;
} }
void SetSortOrderVariable(bool NewOrder)
{
m_ascending = NewOrder;
}
private: private:
// common part of all ctors // common part of all ctors

View File

@@ -66,6 +66,12 @@ static DataBrowserItemID* CreateDataBrowserItemIDArray(size_t& noOfEntries, wxDa
return itemIDs; return itemIDs;
} }
static const EventTypeSpec eventList[] =
{
{ kEventClassControl, kEventControlHit },
{ kEventClassControl, kEventControlDraw }
};
static pascal OSStatus DataBrowserCtrlEventHandler(EventHandlerCallRef handler, EventRef EventReference, void* Data) 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 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; ControlRef controlReference;
DataBrowserPropertyID columnPropertyID; DataBrowserPropertyID columnPropertyID;
DataBrowserSortOrder order;
unsigned long columnIndex; unsigned long columnIndex;
wxDataViewColumn* column;
OSStatus status; OSStatus status;
wxDataViewEvent DataViewEvent(wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK,DataViewCtrlPtr->GetId()); 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 if (status == errDataBrowserPropertyNotFound) // user clicked into part of the header that does not have a property
return ::CallNextEventHandler(handler,EventReference); return ::CallNextEventHandler(handler,EventReference);
wxCHECK(status == noErr,status); 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: // initialize wxWidget event handler:
DataViewEvent.SetEventObject(DataViewCtrlPtr); DataViewEvent.SetEventObject(DataViewCtrlPtr);
DataViewEvent.SetColumn(columnIndex); DataViewEvent.SetColumn(columnIndex);
DataViewEvent.SetDataViewColumn(DataViewCtrlPtr->GetColumn(columnIndex)); DataViewEvent.SetDataViewColumn(column);
// finally sent the equivalent wxWidget event: // finally sent the equivalent wxWidget event:
DataViewCtrlPtr->HandleWindowEvent(DataViewEvent); DataViewCtrlPtr->HandleWindowEvent(DataViewEvent);
return ::CallNextEventHandler(handler,EventReference); return ::CallNextEventHandler(handler,EventReference);
@@ -312,6 +325,9 @@ wxMacDataBrowserTableViewControl::wxMacDataBrowserTableViewControl(wxWindow* pee
SetReferenceInNativeControl(); SetReferenceInNativeControl();
verify_noerr(err); verify_noerr(err);
::InstallControlEventHandler(this->m_controlRef, GetDataBrowserCtrlEventHandlerUPP(), GetEventTypeCount(eventList), eventList, peer, (EventHandlerRef *)&m_macDataViewCtrlEventHandler);
// setup standard callbacks: // setup standard callbacks:
if (gDataBrowserTableViewGetContextualMenuUPP == NULL) gDataBrowserTableViewGetContextualMenuUPP = NewDataBrowserGetContextualMenuUPP(wxMacDataBrowserTableViewControl::DataBrowserGetContextualMenuProc); if (gDataBrowserTableViewGetContextualMenuUPP == NULL) gDataBrowserTableViewGetContextualMenuUPP = NewDataBrowserGetContextualMenuUPP(wxMacDataBrowserTableViewControl::DataBrowserGetContextualMenuProc);
if (gDataBrowserTableViewItemCompareUPP == NULL) gDataBrowserTableViewItemCompareUPP = NewDataBrowserItemCompareUPP (wxMacDataBrowserTableViewControl::DataBrowserCompareProc); if (gDataBrowserTableViewItemCompareUPP == NULL) gDataBrowserTableViewItemCompareUPP = NewDataBrowserItemCompareUPP (wxMacDataBrowserTableViewControl::DataBrowserCompareProc);
@@ -390,6 +406,11 @@ wxMacDataBrowserTableViewControl::wxMacDataBrowserTableViewControl(wxWindow* pee
this->SetHeaderButtonHeight(0); this->SetHeaderButtonHeight(0);
} /* wxMacDataBrowserTableViewControl::wxMacDataBrowserTableViewControl(wxWindow*, wxPoint const&, wxSize const&, long) */ } /* wxMacDataBrowserTableViewControl::wxMacDataBrowserTableViewControl(wxWindow*, wxPoint const&, wxSize const&, long) */
wxMacDataBrowserTableViewControl::~wxMacDataBrowserTableViewControl(void)
{
::RemoveEventHandler((EventHandlerRef) m_macDataViewCtrlEventHandler);
} /* wxMacDataBrowserTableViewControl::~wxMacDataBrowserTableViewControl(void) */
// //
// callback handling // callback handling
// //