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);
//
// 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

View File

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

View 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
//