/////////////////////////////////////////////////////////////////////////////
// Name: src/mac/carbon/databrow.cpp
// Purpose: Classes and functions for the Carbon data browser
-// Author:
+// Author:
// Modified by:
// Created: 2007-05-18
// RCS-ID: $Id$
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifndef wxUSE_GENERICDATAVIEWCTRL
-
-#include <ctype.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-
#include "wx/wxprec.h"
-#include "wx/utils.h"
+#if wxUSE_DATAVIEWCTRL && !defined(wxUSE_GENERICDATAVIEWCTRL)
+
+#include <limits>
#ifndef WX_PRECOMP
#include "wx/app.h"
#include "wx/toplevel.h"
#include "wx/font.h"
+ #include "wx/settings.h"
#endif
-#include "wx/apptrait.h"
-
-#include "wx/mac/uma.h"
-
-
-#ifdef __DARWIN__
- #include <Carbon/Carbon.h>
-#else
- #include <ATSUnicode.h>
- #include <TextCommon.h>
- #include <TextEncodingConverter.h>
-#endif
-
-#include "wx/mac/private.h"
-
-#if defined(__MWERKS__) && wxUSE_UNICODE
-#if __MWERKS__ < 0x4100 || !defined(__DARWIN__)
- #include <wtime.h>
-#endif
-#endif
-
-#include <limits>
+#include "wx/dataview.h"
+#include "wx/utils.h"
#include "wx/mac/carbon/databrow.h"
-
-#include "wx/dataview.h"
+#include "wx/mac/private.h"
+#include "wx/mac/uma.h"
// ============================================================================
-// DataBrowser Wrapper
+// wxMacDataBrowserTableViewControl
// ============================================================================
-//
-// basing on DataBrowserItemIDs
-//
pascal Boolean wxMacDataBrowserTableViewControl::DataBrowserCompareProc(ControlRef browser, DataBrowserItemID itemOneID, DataBrowserItemID itemTwoID, DataBrowserPropertyID sortProperty)
{
if (gDataBrowserTableViewItemNotificationUPP == NULL)
{
gDataBrowserTableViewItemNotificationUPP =
-#if TARGET_API_MAC_OSX
(DataBrowserItemNotificationUPP) NewDataBrowserItemNotificationWithItemUPP(wxMacDataBrowserTableViewControl::DataBrowserItemNotificationProc);
-#else
- NewDataBrowserItemNotificationUPP(wxMacDataBrowserTableViewControl::DataBrowserItemNotificationProc);
-#endif
}
DataBrowserCallbacks callbacks;
flags |= kDataBrowserSelectOnlyOne;
(void) this->SetSelectionFlags(flags);
} /* if */
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
+
OptionBits attributes; // variable definition
-
+
if (this->GetAttributes(&attributes) == noErr) // get default settings
{
if ((style & wxDV_VERT_RULES) != 0)
attributes &= ~kDataBrowserAttributeListViewDrawColumnDividers;
(void) this->SetAttributes(attributes);
} /* if */
-#endif
+
if ((style & wxDV_NO_HEADER) != 0)
this->SetHeaderButtonHeight(0);
} /* wxMacDataBrowserTableViewControl::wxMacDataBrowserTableViewControl(wxWindow*, wxPoint const&, wxSize const&, long) */
return ::SetDataBrowserTableViewGeometry(this->GetControlRef(),enableWidth,enableHeight);
} /* wxMacDataBrowserTableViewControl::EnableCellSizeModification(bool, bool) */
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
OSStatus wxMacDataBrowserTableViewControl::GetAttributes(OptionBits* attributes)
{
return ::DataBrowserGetAttributes(this->GetControlRef(),attributes);
} /* wxMacDataBrowserTableViewControl::GetAttributes(OptionBits*) */
-#endif
-OSStatus wxMacDataBrowserTableViewControl::GetColumnWidth( DataBrowserPropertyID column , UInt16 *width ) const
+OSStatus wxMacDataBrowserTableViewControl::GetColumnWidth(DataBrowserPropertyID propertyID, UInt16* width) const
{
- return GetDataBrowserTableViewNamedColumnWidth( m_controlRef , column , width );
+ return ::GetDataBrowserTableViewNamedColumnWidth(this->m_controlRef,propertyID,width);
}
-OSStatus wxMacDataBrowserTableViewControl::GetDefaultRowHeight( UInt16 * height ) const
+OSStatus wxMacDataBrowserTableViewControl::GetDefaultColumnWidth( UInt16 *width ) const
{
- return GetDataBrowserTableViewRowHeight( m_controlRef, height );
+ return GetDataBrowserTableViewColumnWidth(this->m_controlRef, width );
}
-OSStatus wxMacDataBrowserTableViewControl::GetHeaderButtonHeight(UInt16 *height)
+OSStatus wxMacDataBrowserTableViewControl::GetDefaultRowHeight(UInt16* height) const
{
- return GetDataBrowserListViewHeaderBtnHeight( m_controlRef, height );
+ return ::GetDataBrowserTableViewRowHeight(this->m_controlRef,height);
}
-OSStatus wxMacDataBrowserTableViewControl::GetDefaultColumnWidth( UInt16 *width ) const
+OSStatus wxMacDataBrowserTableViewControl::GetHeaderButtonHeight(UInt16 *height)
{
- return GetDataBrowserTableViewColumnWidth( m_controlRef , width );
+ return ::GetDataBrowserListViewHeaderBtnHeight(this->m_controlRef,height);
}
-OSStatus wxMacDataBrowserTableViewControl::GetRowHeight( DataBrowserItemID item , UInt16 *height) const
+OSStatus wxMacDataBrowserTableViewControl::GetPartBounds(DataBrowserItemID item, DataBrowserPropertyID property, DataBrowserPropertyPart part, Rect* bounds)
{
- return GetDataBrowserTableViewItemRowHeight( m_controlRef, item , height);
-}
+ return ::GetDataBrowserItemPartBounds(this->m_controlRef,item,property,part,bounds);
+} /* wxMacDataBrowserTableViewControl::GetPartBounds(DataBrowserItemID, DataBrowswerPropertyID, DataBrowserPropertyPart, Rect*) */
+
+OSStatus wxMacDataBrowserTableViewControl::GetRowHeight(DataBrowserItemID item, UInt16* height) const
+{
+ return ::GetDataBrowserTableViewItemRowHeight(this->m_controlRef,item,height);
+} /* wxMacDataBrowserTableViewControl::GetRowHeight(DataBrowserItemID, UInt16*) const */
OSStatus wxMacDataBrowserTableViewControl::GetScrollPosition( UInt32 *top , UInt32 *left ) const
{
- return GetDataBrowserScrollPosition( m_controlRef , top , left );
+ return GetDataBrowserScrollPosition(this->m_controlRef, top , left );
}
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
OSStatus wxMacDataBrowserTableViewControl::SetAttributes(OptionBits attributes)
{
return ::DataBrowserChangeAttributes(this->GetControlRef(),attributes,~attributes);
} /* wxMacDataBrowserTableViewControl::SetAttributes(OptionBits) */
-#endif
-OSStatus wxMacDataBrowserTableViewControl::SetColumnWidth( DataBrowserPropertyID column , UInt16 width )
+OSStatus wxMacDataBrowserTableViewControl::SetColumnWidth(DataBrowserPropertyID propertyID, UInt16 width)
{
- return SetDataBrowserTableViewNamedColumnWidth( m_controlRef , column , width );
+ return ::SetDataBrowserTableViewNamedColumnWidth(this->m_controlRef,propertyID,width);
}
-OSStatus wxMacDataBrowserTableViewControl::SetDefaultColumnWidth( UInt16 width )
+OSStatus wxMacDataBrowserTableViewControl::SetDefaultColumnWidth(UInt16 width)
{
- return SetDataBrowserTableViewColumnWidth( m_controlRef , width );
+ return ::SetDataBrowserTableViewColumnWidth(this->m_controlRef,width);
}
-OSStatus wxMacDataBrowserTableViewControl::SetDefaultRowHeight( UInt16 height )
+OSStatus wxMacDataBrowserTableViewControl::SetDefaultRowHeight(UInt16 height)
{
- return SetDataBrowserTableViewRowHeight( m_controlRef , height );
+ return ::SetDataBrowserTableViewRowHeight(this->m_controlRef,height);
}
-OSStatus wxMacDataBrowserTableViewControl::SetHasScrollBars( bool horiz, bool vert )
+OSStatus wxMacDataBrowserTableViewControl::SetHasScrollBars(bool horiz, bool vert)
{
- return SetDataBrowserHasScrollBars( m_controlRef, horiz, vert );
-}
+ return ::SetDataBrowserHasScrollBars(this->m_controlRef,horiz,vert);
+} /* wxMacDataBrowserTableViewControl::SetHasScrollBars(bool, bool) */
OSStatus wxMacDataBrowserTableViewControl::SetHeaderButtonHeight(UInt16 height)
{
- return SetDataBrowserListViewHeaderBtnHeight( m_controlRef, height );
-}
+ return ::SetDataBrowserListViewHeaderBtnHeight(this->m_controlRef,height);
+} /* wxMacDataBrowserTableViewControl::SetHeaderButtonHeight(UInt16) */
-OSStatus wxMacDataBrowserTableViewControl::SetHiliteStyle( DataBrowserTableViewHiliteStyle hiliteStyle )
+OSStatus wxMacDataBrowserTableViewControl::SetHiliteStyle(DataBrowserTableViewHiliteStyle hiliteStyle)
{
- return SetDataBrowserTableViewHiliteStyle( m_controlRef, hiliteStyle );
-}
+ return ::SetDataBrowserTableViewHiliteStyle(this->m_controlRef,hiliteStyle);
+} /*wxMacDataBrowserTableViewControl::SetHiliteStyle(DataBrowserTableViewHiliteStyle) */
+
+OSStatus wxMacDataBrowserTableViewControl::SetIndent(float Indent)
+{
+ return ::DataBrowserSetMetric(this->m_controlRef,kDataBrowserMetricDisclosureColumnPerDepthGap,true,Indent);
+} /* wxMacDataBrowserTableViewControl::SetIndent(float* Indent) */
OSStatus wxMacDataBrowserTableViewControl::SetRowHeight(DataBrowserItemID item, UInt16 height)
{
//
OSStatus wxMacDataBrowserTableViewControl::GetColumnCount(UInt32* numColumns) const
{
- return GetDataBrowserTableViewColumnCount(this->m_controlRef,numColumns);
+ return ::GetDataBrowserTableViewColumnCount(this->m_controlRef,numColumns);
}
-OSStatus wxMacDataBrowserTableViewControl::GetColumnID(DataBrowserTableViewColumnIndex position, DataBrowserTableViewColumnID* id)
+OSStatus wxMacDataBrowserTableViewControl::GetColumnIndex(DataBrowserPropertyID propertyID, DataBrowserTableViewColumnIndex* index) const
{
- return GetDataBrowserTableViewColumnProperty(this->m_controlRef,position,id);
-} /* wxMacDataBrowserTableViewControl::GetColumnID(DataBrowserTableViewColumnIndex position, DataBrowserTableViewColumnID* id) */
+ return ::GetDataBrowserTableViewColumnPosition(this->m_controlRef,propertyID,index);
+} /* wxMacDataBrowserTableViewControl::GetColumnIndex(DataBrowserPropertyID, DataBrowserTableViewColumnIndex*) const */
-OSStatus wxMacDataBrowserTableViewControl::GetFreePropertyID(DataBrowserPropertyID* id) const
+OSStatus wxMacDataBrowserTableViewControl::GetFreePropertyID(DataBrowserPropertyID* propertyID) const
{
- for (*id=kMinPropertyID; *id<std::numeric_limits<DataBrowserPropertyID>::max(); ++(*id))
- if (this->IsUsedPropertyID(*id) == errDataBrowserPropertyNotFound)
+ for (*propertyID=kMinPropertyID; *propertyID<std::numeric_limits<DataBrowserPropertyID>::max(); ++(*propertyID))
+ if (this->IsUsedPropertyID(*propertyID) == errDataBrowserPropertyNotFound)
return noErr;
return errDataBrowserPropertyNotSupported;
} /* wxMacDataBrowserTableViewControl::GetFreePropertyID(DataBrowserPropertyID*) const */
-OSStatus wxMacDataBrowserTableViewControl::GetPropertyColumn(DataBrowserPropertyID propertyID, DataBrowserTableViewColumnIndex* column) const
+OSStatus wxMacDataBrowserTableViewControl::GetPropertyFlags(DataBrowserPropertyID propertyID, DataBrowserPropertyFlags *flags) const
{
- return GetDataBrowserTableViewColumnPosition(this->m_controlRef,propertyID,column);
-} /* wxMacDataBrowserTableViewControl::GetPropertyColumn(DataBrowserPropertyID, DataBrowserTableViewColumnIndex*) const */
+ return ::GetDataBrowserPropertyFlags(this->m_controlRef,propertyID,flags);
+}
-OSStatus wxMacDataBrowserTableViewControl::GetPropertyFlags(DataBrowserPropertyID property, DataBrowserPropertyFlags *flags) const
+OSStatus wxMacDataBrowserTableViewControl::GetPropertyID(DataBrowserItemDataRef itemData, DataBrowserPropertyID* propertyID)
{
- return GetDataBrowserPropertyFlags( m_controlRef , property , flags );
-}
+ return ::GetDataBrowserItemDataProperty(itemData,propertyID);
+} /* wxMacDataBrowserTableViewControl::GetPropertyID(DataBrowserItemDataRef, DataBrowserPropertyID*) */
+
+OSStatus wxMacDataBrowserTableViewControl::GetPropertyID(DataBrowserTableViewColumnIndex index, DataBrowserTableViewColumnID* propertyID)
+{
+ return ::GetDataBrowserTableViewColumnProperty(this->m_controlRef,index,propertyID);
+} /* wxMacDataBrowserTableViewControl::GetPropertyID(DataBrowserTableViewColumnIndex, DataBrowserTableViewColumnID*) */
OSStatus wxMacDataBrowserTableViewControl::IsUsedPropertyID(DataBrowserPropertyID propertyID) const
{
// lead to a large overhead for the call but returns an error code if the property id does not exist, here we use the function that returns
// the column position for the property id:
DataBrowserTableViewColumnIndex index;
-
+
return ::GetDataBrowserTableViewColumnPosition(this->m_controlRef,propertyID,&index);
} /* wxMacDataBrowserTableViewControl::IsUsedPropertyId(DataBrowserPropertyID) const */
-OSStatus wxMacDataBrowserTableViewControl::RemoveColumn(DataBrowserTableViewColumnIndex position)
+OSStatus wxMacDataBrowserTableViewControl::RemoveColumnByProperty(DataBrowserTableViewColumnID propertyID)
{
- DataBrowserTableViewColumnID id;
- GetColumnID( position, &id );
- return RemoveDataBrowserTableViewColumn( m_controlRef, id );
-}
+ return ::RemoveDataBrowserTableViewColumn(this->m_controlRef,propertyID);
+} /* wxMacDataBrowserTableViewControl::RemoveColumnByProperty(DataBrowserTableViewColumnID) */
-OSStatus wxMacDataBrowserTableViewControl::SetColumnPosition(DataBrowserPropertyID column, DataBrowserTableViewColumnIndex position)
+OSStatus wxMacDataBrowserTableViewControl::RemoveColumnByIndex(DataBrowserTableViewColumnIndex index)
{
- return ::SetDataBrowserTableViewColumnPosition(this->m_controlRef,column,position);
-}
+ DataBrowserTableViewColumnID propertyID;
+
-OSStatus wxMacDataBrowserTableViewControl::SetPropertyFlags(DataBrowserPropertyID property, DataBrowserPropertyFlags flags)
+ this->GetPropertyID(index,&propertyID);
+ return ::RemoveDataBrowserTableViewColumn(this->m_controlRef,propertyID);
+} /* wxMacDataBrowserTableViewControl::RemoveColumnByIndex(DataBrowserTableViewColumnIndex) */
+
+OSStatus wxMacDataBrowserTableViewControl::SetColumnIndex(DataBrowserPropertyID propertyID, DataBrowserTableViewColumnIndex index)
{
- return ::SetDataBrowserPropertyFlags(this->m_controlRef,property,flags);
-} /* wxMacDataBrowserTableViewControl::SetPropertyFlags(DataBrowserPropertyID, DataBrowserPropertyFlags) */
+ return ::SetDataBrowserTableViewColumnPosition(this->m_controlRef,propertyID,index);
+} /* wxMacDataBrowserTableViewControl::SetColumnIndex(DataBrowserPropertyID, DataBrowserTableViewColumnIndex) */
-OSStatus wxMacDataBrowserTableViewControl::SetDisclosureColumn(DataBrowserPropertyID property, Boolean expandableRows)
+OSStatus wxMacDataBrowserTableViewControl::SetDisclosureColumn(DataBrowserPropertyID propertyID, Boolean expandableRows)
{
- return SetDataBrowserListViewDisclosureColumn( m_controlRef, property, expandableRows);
+ return ::SetDataBrowserListViewDisclosureColumn(this->m_controlRef,propertyID,expandableRows);
}
+OSStatus wxMacDataBrowserTableViewControl::SetPropertyFlags(DataBrowserPropertyID propertyID, DataBrowserPropertyFlags flags)
+{
+ return ::SetDataBrowserPropertyFlags(this->m_controlRef,propertyID,flags);
+} /* wxMacDataBrowserTableViewControl::SetPropertyFlags(DataBrowserPropertyID, DataBrowserPropertyFlags) */
+
//
// item handling
//
OSStatus wxMacDataBrowserTableViewControl::GetFreeItemID(DataBrowserItemID* id) const
{
ItemCount NoOfItems;
-
-
+
+
verify_noerr(this->GetItemCount(&NoOfItems));
if (NoOfItems == 0)
{
// lead to a large overhead for the call but returns an error code if the property id does not exist, here we use the function that returns
// the column position for the property id:
DataBrowserTableViewColumnIndex index;
-
+
return ::GetDataBrowserTableViewItemRow(this->m_controlRef,itemID,&index);
} /* wxMacDataBrowserTableViewControl::IsUsedItemID(DataBrowserItemID) const */
{
DataBrowserItemID* itemIDPtr;
Handle handle(::NewHandle(0));
-
+
size_t NoOfItems;
return NoOfItems;
} /* wxMacDataBrowserTableViewControl::GetSelectedItemIDs(wxArrayDataBrowserItemID&) const*/
-OSStatus wxMacDataBrowserTableViewControl::GetSelectionAnchor( DataBrowserItemID *first, DataBrowserItemID *last ) const
+OSStatus wxMacDataBrowserTableViewControl::GetSelectionAnchor(DataBrowserItemID* first, DataBrowserItemID* last) const
{
- return GetDataBrowserSelectionAnchor( m_controlRef, first, last );
-}
+ return ::GetDataBrowserSelectionAnchor(this->m_controlRef,first,last);
+} /* wxMacDataBrowserTableViewControl::GetSelectionAnchor(DataBrowserItemID*, DataBrowserItemID*) const */
OSStatus wxMacDataBrowserTableViewControl::GetSelectionFlags(DataBrowserSelectionFlags* flags) const
{
OSStatus wxMacDataBrowserTableViewControl::SetSelectedItems(UInt32 numItems, DataBrowserItemID const* items, DataBrowserSetOption operation)
{
- return ::SetDataBrowserSelectedItems( m_controlRef, numItems, items, operation );
+ return ::SetDataBrowserSelectedItems(this->m_controlRef, numItems, items, operation );
} /* wxMacDataBrowserTableViewControl::SetSelectedItems(UInt32, DataBrowserItemID const*, DataBrowserSetOption) */
-OSStatus wxMacDataBrowserTableViewControl::GetSortProperty( DataBrowserPropertyID *column ) const
+OSStatus wxMacDataBrowserTableViewControl::GetSortOrder(DataBrowserSortOrder* order) const
{
- return GetDataBrowserSortProperty( m_controlRef , column );
+ return ::GetDataBrowserSortOrder(this->m_controlRef,order);
}
-OSStatus wxMacDataBrowserTableViewControl::SetSortProperty( DataBrowserPropertyID column )
+OSStatus wxMacDataBrowserTableViewControl::GetSortProperty(DataBrowserPropertyID* propertyID) const
{
- return SetDataBrowserSortProperty( m_controlRef , column );
+ return ::GetDataBrowserSortProperty(this->m_controlRef,propertyID);
}
-OSStatus wxMacDataBrowserTableViewControl::GetSortOrder( DataBrowserSortOrder *order ) const
+OSStatus wxMacDataBrowserTableViewControl::Resort(DataBrowserItemID container, Boolean sortChildren)
{
- return GetDataBrowserSortOrder( m_controlRef , order );
+ return ::SortDataBrowserContainer(this->m_controlRef,container,sortChildren);
+} /* wxMacDataBrowserTableViewControl::Resort(DataBrowserItemID, Boolean) */
+
+OSStatus wxMacDataBrowserTableViewControl::SetSortOrder(DataBrowserSortOrder order)
+{
+ return ::SetDataBrowserSortOrder(this->m_controlRef,order);
}
-OSStatus wxMacDataBrowserTableViewControl::SetSortOrder( DataBrowserSortOrder order )
+OSStatus wxMacDataBrowserTableViewControl::SetSortProperty(DataBrowserPropertyID propertyID)
{
- return SetDataBrowserSortOrder( m_controlRef , order );
+ return ::SetDataBrowserSortProperty(this->m_controlRef,propertyID);
}
+//
+// container handling
+//
+OSStatus wxMacDataBrowserTableViewControl::CloseContainer(DataBrowserItemID containerID)
+{
+ return ::CloseDataBrowserContainer(this->m_controlRef,containerID);
+} /* wxMacDataBrowserTableViewControl::CloseContainer(DataBrowserItemID) */
+
+OSStatus wxMacDataBrowserTableViewControl::OpenContainer(DataBrowserItemID containerID)
+{
+ return ::OpenDataBrowserContainer(this->m_controlRef,containerID);
+} /* wxMacDataBrowserTableViewControl::OpenContainer(DataBrowserItemID) */
+
IMPLEMENT_ABSTRACT_CLASS(wxMacDataBrowserTableViewControl,wxMacControl)
// ============================================================================
-// Databrowser class for the list view control
+// wxMacDataBrowserListViewControl
// ============================================================================
-//
#pragma mark -
//
// column handling
} /* wxMacDataBrowserListViewControl::AddColumn(DataBrowserListViewColumnDesc*, DataBrowserTableViewColumnIndex) */
// ============================================================================
-// Databrowser class for the data view control
+// wxMacDataViewDataBrowserListViewControl
// ============================================================================
-//
#pragma mark -
//
// constructors / destructor
} /* wxMacDataViewDataBrowserListViewControl::wxMacDataViewDataBrowserListViewControl(wxWindow* , const wxPoint&, const wxSize&, long) */
//
-// item ID and model matching
+// callback functions (inherited from wxMacDataBrowserTableViewControl)
//
-void wxMacDataViewDataBrowserListViewControl::ClearItemIDRowPairs(void)
-{
- this->m_itemIDRowNumberMap.clear();
-} /* wxMacDataViewDataBrowserListViewControl::ClearItemIDRowPairs(void) */
-
-bool wxMacDataViewDataBrowserListViewControl::DeleteItemIDRowPair(DataBrowserItemID itemID)
+Boolean wxMacDataViewDataBrowserListViewControl::DataBrowserCompareProc(DataBrowserItemID itemOneID, DataBrowserItemID itemTwoID, DataBrowserPropertyID sortProperty)
{
- return (this->m_itemIDRowNumberMap.erase(itemID) == 1);
-} /* wxMacDataViewDataBrowserListViewControl::DeleteItemIDRowPair(DataBrowseritemID) */
+ DataBrowserSortOrder sortOrder;
-bool wxMacDataViewDataBrowserListViewControl::GetRowIndex(unsigned long& rowIndex, DataBrowserItemID itemID) const
-{
- ItemIDRowNumberHashMap::const_iterator iteratorHashMap(this->m_itemIDRowNumberMap.find(itemID));
-
-
- if (iteratorHashMap == this->m_itemIDRowNumberMap.end())
- return false;
- else
- {
- rowIndex = iteratorHashMap->second;
- return true;
- } /* if */
-} /* wxMacDataViewDataBrowserListViewControl::GetRowIndex(unsigned int& rowIndex, DataBrowserItemID itemID) const */
-
-bool wxMacDataViewDataBrowserListViewControl::InsertItemIDRowPair(DataBrowserItemID itemID, unsigned long rowIndex)
-{
- return this->m_itemIDRowNumberMap.insert(ItemIDRowNumberHashMap::value_type(itemID,rowIndex)).second;
-} /* wxMacDataViewDataBrowserListViewControl::InsertItemIDRowPair(DataBrowserItemID, unsigned long) */
-
-void wxMacDataViewDataBrowserListViewControl::RenumberItemIDRowIndices(unsigned int* newIndices)
-{
- ItemIDRowNumberHashMap::iterator hashMapIterator(this->m_itemIDRowNumberMap.begin());
-
-
- while (hashMapIterator != this->m_itemIDRowNumberMap.end())
- {
- hashMapIterator->second = newIndices[hashMapIterator->second];
- ++hashMapIterator;
- } /* while */
-} /* wxMacDataViewDataBrowserListViewControl::RenumberItemIDRowIndices(unsigned int*) */
+ DataBrowserTableViewColumnIndex columnIndex;
-void wxMacDataViewDataBrowserListViewControl::RenumberItemIDRowIndicesDeletion (unsigned long decreaseFromIndex)
-{
- ItemIDRowNumberHashMap::iterator hashMapIterator(this->m_itemIDRowNumberMap.begin());
-
-
- while (hashMapIterator != this->m_itemIDRowNumberMap.end())
- {
- if (hashMapIterator->second >= decreaseFromIndex)
- --(hashMapIterator->second);
- ++hashMapIterator;
- } /* while */
-} /* wxMacDataViewDataBrowserListViewControl::RenumberItemIDRowIndicesDeletion (unsigned int) */
+ wxDataViewCtrl* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl*>(this->GetPeer()));
-void wxMacDataViewDataBrowserListViewControl::RenumberItemIDRowIndicesInsertion(unsigned long increaseFromIndex)
-{
- ItemIDRowNumberHashMap::iterator hashMapIterator(this->m_itemIDRowNumberMap.begin());
-
-
- while (hashMapIterator != this->m_itemIDRowNumberMap.end())
- {
- if (hashMapIterator->second >= increaseFromIndex)
- ++(hashMapIterator->second);
- ++hashMapIterator;
- } /* while */
-} /* wxMacDataViewDataBrowserListViewControl::RenumberItemIDRowIndicesInsertion(unsigned int) */
-void wxMacDataViewDataBrowserListViewControl::ReverseRowIndexNumbering(void)
-{
- if (this->m_itemIDRowNumberMap.size() > 0)
+ wxCHECK_MSG(dataViewCtrlPtr != NULL, false,_("Pointer to data view control not set correctly."));
+ wxCHECK_MSG(dataViewCtrlPtr->GetModel() != NULL,false,_("Pointer to model not set correctly."));
+ if (sortProperty >= kMinPropertyID)
{
- size_t const maxIndex = this->m_itemIDRowNumberMap.size()-1;
-
- ItemIDRowNumberHashMap::iterator hashMapIterator(this->m_itemIDRowNumberMap.begin());
-
-
- while (hashMapIterator != this->m_itemIDRowNumberMap.end())
- {
- hashMapIterator->second = maxIndex-hashMapIterator->second;
- ++hashMapIterator;
- } /* while */
+ wxCHECK_MSG(this->GetColumnIndex(sortProperty,&columnIndex) == noErr,false,_("Could not determine column index."));
} /* if */
-} /* wxMacDataViewDataBrowserListViewControl::ReverseRowIndexNumbering(void) */
-
-//
-// callback functions (inherited from wxMacDataBrowserTableViewControl)
-//
-Boolean wxMacDataViewDataBrowserListViewControl::DataBrowserCompareProc(DataBrowserItemID itemOneID, DataBrowserItemID itemTwoID, DataBrowserPropertyID WXUNUSED(sortProperty))
-{
- unsigned long rowIndex1, rowIndex2;
-
- bool result = (this->GetRowIndex(rowIndex1,itemOneID) && this->GetRowIndex(rowIndex2,itemTwoID) && (rowIndex1 < rowIndex2));
- return result;
+ else
+ columnIndex = 0;
+ this->GetSortOrder(&sortOrder);
+ return static_cast<Boolean>(dataViewCtrlPtr->GetModel()->Compare(wxDataViewItem(reinterpret_cast<void*>(itemOneID)),wxDataViewItem(reinterpret_cast<void*>(itemTwoID)),
+ columnIndex,sortOrder != kDataBrowserOrderDecreasing) < 0);
} /* wxMacDataViewDataBrowserListViewControl::DataBrowserCompareProc(DataBrowserItemID, DataBrowserItemID, DataBrowserPropertyID) */
-void wxMacDataViewDataBrowserListViewControl::DataBrowserDrawItemProc(DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemState state, Rect const* rectangle, SInt16 bitDepth, Boolean colorDevice)
+void wxMacDataViewDataBrowserListViewControl::DataBrowserDrawItemProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, DataBrowserItemState state, Rect const* rectangle, SInt16 bitDepth, Boolean colorDevice)
{
- OSStatus errorStatus;
-
- unsigned long column;
- unsigned long row;
+ DataBrowserTableViewColumnIndex columnIndex;
wxDataViewColumn* dataViewColumnPtr;
wxDataViewCtrl* dataViewCtrlPtr;
-
+
wxDataViewCustomRenderer* dataViewCustomRendererPtr;
wxVariant dataToRender;
-
- wxCHECK_RET(this->GetPropertyColumn(property,&column) == noErr,_("Could not determine column index."));
dataViewCtrlPtr = dynamic_cast<wxDataViewCtrl*>(this->GetPeer());
- wxCHECK_RET(dataViewCtrlPtr != NULL, _("Pointer to data view control not set correctly."));
- wxCHECK_RET(dataViewCtrlPtr->GetModel() != NULL,_("Pointer to model not set correctly."));
- if (dynamic_cast<wxDataViewSortedListModel*>(dataViewCtrlPtr->GetModel()) == NULL)
- {
- wxCHECK_RET(this->GetRowIndex(row,itemID),_("Row index does not exist."));
- } /* if */
- else
- {
- wxCHECK_RET(this->GetItemRow(itemID,&row) == noErr,_("Row index does not exist."));
- } /* if */
- dataViewColumnPtr = dataViewCtrlPtr->GetColumn(column);
+ wxCHECK_RET(dataViewCtrlPtr != NULL, _("Pointer to data view control not set correctly."));
+ wxCHECK_RET(dataViewCtrlPtr->GetModel() != NULL, _("Pointer to model not set correctly."));
+ wxCHECK_RET(this->GetColumnIndex(propertyID,&columnIndex) == noErr,_("Could not determine column index."));
+ dataViewColumnPtr = dataViewCtrlPtr->GetColumn(columnIndex);
wxCHECK_RET(dataViewColumnPtr != NULL,_("No column for the specified column index existing."));
dataViewCustomRendererPtr = dynamic_cast<wxDataViewCustomRenderer*>(dataViewColumnPtr->GetRenderer());
wxCHECK_RET(dataViewCustomRendererPtr != NULL,_("No renderer or invalid renderer type specified for custom data column."));
- dataViewCtrlPtr->GetModel()->GetValue(dataToRender,column,row);
+
+ wxDataViewItem dataitem( reinterpret_cast<void*>(itemID) );
+ dataViewCtrlPtr->GetModel()->GetValue(dataToRender,dataitem,columnIndex);
dataViewCustomRendererPtr->SetValue(dataToRender);
// try to determine the content's size (drawable part):
content.left += 5;
content.right -= 3;
content.bottom -= 3;
- // extra space for the scrollbars:
+ // extra space for the scrollbars:
content.bottom -= wxSystemSettings::GetMetric(wxSYS_HSCROLL_Y);
content.right -= wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
- // make sure that 'Render' can draw only in the allowed area:
- dataViewCustomRendererPtr->GetDC()->SetClippingRegion(content.left,content.top,content.right-content.left+1,content.bottom-content.top+1);
- (void) (dataViewCustomRendererPtr->Render(wxRect(static_cast<int>(rectangle->left),static_cast<int>(rectangle->top),
- static_cast<int>(1+rectangle->right-rectangle->left),static_cast<int>(1+rectangle->bottom-rectangle->top)),
- dataViewCustomRendererPtr->GetDC(),((state == kDataBrowserItemIsSelected) ? wxDATAVIEW_CELL_SELECTED : 0)));
- dataViewCustomRendererPtr->GetDC()->DestroyClippingRegion(); // probably not necessary
+ wxDC *dc = dataViewCustomRendererPtr->GetDC();
+
+ wxRect cellrect( static_cast<int>(rectangle->left),
+ static_cast<int>(rectangle->top+2),
+ static_cast<int>(1+rectangle->right-rectangle->left),
+ static_cast<int>(rectangle->bottom-rectangle->top) );
+
+ bool is_active = IsControlActive( this->m_controlRef );
+ if (state == kDataBrowserItemIsSelected)
+ {
+
+ wxColour col( wxMacCreateCGColorFromHITheme( (is_active) ?
+ kThemeBrushAlternatePrimaryHighlightColor
+ : kThemeBrushSecondaryHighlightColor ) );
+
+ wxRect rect = cellrect;
+ Rect itemrect;
+ GetDataBrowserItemPartBounds( this->m_controlRef, itemID, propertyID,
+ kDataBrowserPropertyEnclosingPart, &itemrect );
+ rect.x = itemrect.left;
+ rect.width = itemrect.right-itemrect.left+1;
+
+ wxBrush selBrush( col );
+ wxPen oldpen( dc->GetPen() );
+ wxBrush oldbrush( dc->GetBrush() );
+ dc->SetPen( *wxTRANSPARENT_PEN );
+ dc->SetBrush( selBrush );
+ dc->DrawRectangle(rect);
+ dc->SetBrush( oldbrush );
+ dc->SetPen( oldpen );
+ }
+
+ wxDataViewModel *model = dataViewCtrlPtr->GetModel();
+ if ((columnIndex == 0) || !model->IsContainer(dataitem) || model->HasContainerColumns(dataitem))
+ {
+ // make sure that 'Render' can draw only in the allowed area:
+ dc->SetClippingRegion(content.left,content.top,content.right-content.left+1,content.bottom-content.top+1);
+ (void) (dataViewCustomRendererPtr->Render( cellrect, dc,
+ ((state == kDataBrowserItemIsSelected) ? wxDATAVIEW_CELL_SELECTED : 0)));
+ dc->DestroyClippingRegion(); // probably not necessary
+ }
+
+ dataViewCustomRendererPtr->SetDC(NULL);
} /* wxMacDataViewDataBrowserListViewControl::DataBrowserDrawItemProc(DataBrowserItemID, DataBrowserPropertyID, DataBrowserItemState, Rect const*, SInt16, Boolean) */
-OSStatus wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean getValue)
+OSStatus wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, DataBrowserItemDataRef itemData, Boolean getValue)
{
if (getValue)
{
- // variable definition:
- unsigned long column;
- unsigned long row;
- wxDataViewCtrl* dataViewCtrlPtr;
- wxDataViewColumn* dataViewColumnPtr;
-
- verify_noerr(this->GetPropertyColumn(property,&column));
+ // variable definitions:
+ wxDataViewCtrl* dataViewCtrlPtr;
+
dataViewCtrlPtr = dynamic_cast<wxDataViewCtrl*>(this->GetPeer());
wxCHECK_MSG(dataViewCtrlPtr != NULL,errDataBrowserNotConfigured,_("Pointer to data view control not set correctly."));
- if (dynamic_cast<wxDataViewSortedListModel*>(dataViewCtrlPtr->GetModel()) == NULL)
- {
- wxCHECK_MSG(this->GetRowIndex(row,itemID),errDataBrowserNotConfigured,_("Row index does not exist."));
- } /* if */
+ if (dataViewCtrlPtr->IsDeleting())
+ return noErr; // if a delete process is running the data of editable fields cannot be saved because the associated model variable may already have been deleted
else
{
- wxCHECK_MSG(this->GetItemRow(itemID,&row) == noErr,errDataBrowserNotConfigured,_("Row index does not exist."));
- } /* if */
- dataViewColumnPtr = dataViewCtrlPtr->GetColumn(column);
- wxCHECK_MSG((dataViewColumnPtr != NULL) && (dataViewColumnPtr->GetRenderer() != NULL),errDataBrowserNotConfigured,_("There is no column for the specified column index."));
- switch (dataViewColumnPtr->GetRenderer()->GetPropertyType())
- {
- case kDataBrowserCheckboxType:
- {
- // variable definitions:
- ThemeButtonValue buttonValue;
- OSStatus errorStatus;
-
- errorStatus = ::GetDataBrowserItemDataButtonValue(itemData,&buttonValue);
- if (errorStatus == noErr)
+ // variable definitions:
+ DataBrowserTableViewColumnIndex columnIndex;
+ OSStatus errorStatus;
+ wxDataViewColumn* dataViewColumnPtr;
+
+ wxCHECK_MSG(dataViewCtrlPtr->GetModel() != NULL,errDataBrowserNotConfigured,_("Pointer to model not set correctly."));
+ errorStatus = this->GetColumnIndex(propertyID,&columnIndex);
+ wxCHECK_MSG(errorStatus == noErr,errorStatus,_("Could not determine column index"));
+ dataViewColumnPtr = dataViewCtrlPtr->GetColumn(columnIndex);
+ wxCHECK_MSG((dataViewColumnPtr != NULL) && (dataViewColumnPtr->GetRenderer() != NULL),errDataBrowserNotConfigured,_("There is no column or renderer for the specified column index."));
+ switch (dataViewColumnPtr->GetRenderer()->GetPropertyType())
+ {
+ case kDataBrowserCheckboxType:
{
- if (buttonValue == kThemeButtonOn)
- {
- // variable definition and initialization:
- wxVariant modifiedData(true);
+ // variable definition:
+ ThemeButtonValue buttonValue;
- return (dataViewCtrlPtr->GetModel()->SetValue(modifiedData,static_cast<unsigned int>(column),static_cast<unsigned int>(row)) ? noErr : errDataBrowserNotConfigured);
- } /* if */
- else if (buttonValue == kThemeButtonOff)
+ errorStatus = ::GetDataBrowserItemDataButtonValue(itemData,&buttonValue);
+ if (errorStatus == noErr)
{
- // variable definition and initialization:
- wxVariant modifiedData(false);
-
- return (dataViewCtrlPtr->GetModel()->SetValue(modifiedData,static_cast<unsigned int>(column),static_cast<unsigned int>(row)) ? noErr : errDataBrowserNotConfigured);
+ if (buttonValue == kThemeButtonOn)
+ {
+ // variable definition and initialization:
+ wxVariant modifiedData(true);
+
+ return (dataViewCtrlPtr->GetModel()->SetValue(modifiedData,wxDataViewItem(reinterpret_cast<void*>(itemID)),static_cast<unsigned int>(columnIndex)) ? OSStatus(noErr) : OSStatus(errDataBrowserNotConfigured));
+ } /* if */
+ else if (buttonValue == kThemeButtonOff)
+ {
+ // variable definition and initialization:
+ wxVariant modifiedData(false);
+
+ return (dataViewCtrlPtr->GetModel()->SetValue(modifiedData,wxDataViewItem(reinterpret_cast<void*>(itemID)),static_cast<unsigned int>(columnIndex)) ? OSStatus(noErr) : OSStatus(errDataBrowserNotConfigured));
+ } /* if */
+ else
+ return errDataBrowserInvalidPropertyData;
} /* if */
else
- return errDataBrowserInvalidPropertyData;
- } /* if */
- else
- return errorStatus;
- } /* block */
- case kDataBrowserTextType:
- {
- // variable definitions:
- CFStringRef stringReference;
- OSStatus errorStatus;
-
- errorStatus = ::GetDataBrowserItemDataText(itemData,&stringReference);
- if (errorStatus == noErr)
+ return errorStatus;
+ } /* block */
+ case kDataBrowserTextType:
{
- // variable definitions and initializations:
- wxMacCFStringHolder modifiedString(stringReference);
- wxVariant modifiedData(modifiedString.AsString());
+ // variable definitions:
+ CFStringRef stringReference;
- if (dataViewCtrlPtr->GetModel()->SetValue(modifiedData,static_cast<unsigned int>(column),static_cast<unsigned int>(row)))
- return noErr;
+ errorStatus = ::GetDataBrowserItemDataText(itemData,&stringReference);
+ if (errorStatus == noErr)
+ {
+ // variable definitions and initializations:
+ wxCFStringRef modifiedString(stringReference);
+ wxVariant modifiedData(modifiedString.AsString());
+
+ if (dataViewCtrlPtr->GetModel()->SetValue(modifiedData,wxDataViewItem(reinterpret_cast<void*>(itemID)),static_cast<unsigned int>(columnIndex)))
+ return noErr;
+ else
+ return errDataBrowserNotConfigured;
+ } /* if */
else
- return errDataBrowserNotConfigured;
- } /* if */
- else
- return errorStatus;
- } /* block */
- default:
- return errDataBrowserPropertyNotSupported;
- } /* switch */
+ return errorStatus;
+ } /* block */
+ default:
+ return errDataBrowserPropertyNotSupported;
+ } /* switch */
+ } /* if */
} /* if */
else
{
- if (property >= kMinPropertyID) // in case of data columns set the data
+ if (propertyID >= kMinPropertyID) // in case data columns set the data
{
// variable definitions:
- OSStatus errorStatus;
- unsigned long columnPosition;
- unsigned long rowPosition;
wxVariant variant;
wxDataViewColumn* dataViewColumnPtr;
wxDataViewCtrl* dataViewCtrlPtr;
-
- errorStatus = this->GetPropertyColumn(property,&columnPosition);
- wxCHECK_MSG(errorStatus == noErr,errorStatus,_("Column index does not exist."));
- dataViewCtrlPtr = dynamic_cast<wxDataViewCtrl*>(this->GetPeer());wxCHECK_MSG(dataViewCtrlPtr != NULL,errDataBrowserNotConfigured,_("Pointer to data view control not set correctly."));
- dataViewColumnPtr = dataViewCtrlPtr->GetColumn(columnPosition); wxCHECK_MSG(dataViewColumnPtr != NULL,errDataBrowserNotConfigured,_("No column for the specified column position existing."));
- if (dynamic_cast<wxDataViewSortedListModel*>(dataViewCtrlPtr->GetModel()) == NULL)
- {
- wxCHECK_MSG(this->GetRowIndex(rowPosition,itemID),errDataBrowserNotConfigured,_("Row index does not exist."));
- } /* if */
- else
+
+ dataViewCtrlPtr = dynamic_cast<wxDataViewCtrl*>(this->GetPeer());
+ wxCHECK_MSG(dataViewCtrlPtr != NULL,errDataBrowserNotConfigured,_("Pointer to data view control not set correctly."));
+ wxCHECK_MSG(dataViewCtrlPtr->GetModel() != NULL,errDataBrowserNotConfigured,_("Pointer to model not set correctly."));
+ dataViewColumnPtr = dataViewCtrlPtr->GetColumnPtr(propertyID);
+ wxCHECK_MSG(dataViewColumnPtr != NULL,errDataBrowserNotConfigured,_("No column for the specified column position existing."));
+ wxCHECK_MSG(dataViewColumnPtr->GetRenderer() != NULL,errDataBrowserNotConfigured,_("No renderer specified for column."));
+ dataViewCtrlPtr->GetModel()->GetValue(variant,wxDataViewItem(reinterpret_cast<void*>(itemID)),dataViewColumnPtr->GetModelColumn());
+ if (!(variant.IsNull()))
{
- wxCHECK_MSG(this->GetItemRow(itemID,&rowPosition) == noErr,errDataBrowserNotConfigured,_("Row index does not exist."));
+ dataViewColumnPtr->GetRenderer()->SetDataReference(itemData);
+ dataViewColumnPtr->GetRenderer()->SetValue(variant);
+ wxCHECK_MSG(dataViewColumnPtr->GetRenderer()->Render(),errDataBrowserNotConfigured,_("Rendering failed."));
} /* if */
- dataViewCtrlPtr->GetModel()->GetValue(variant,dataViewColumnPtr->GetModelColumn(),rowPosition);
- wxCHECK_MSG(dataViewColumnPtr->GetRenderer() != NULL,errDataBrowserNotConfigured,_("No renderer specified for column."));
- dataViewColumnPtr->GetRenderer()->SetDataReference(itemData);
- dataViewColumnPtr->GetRenderer()->SetValue(variant);
- wxCHECK_MSG(dataViewColumnPtr->GetRenderer()->Render(),errDataBrowserNotConfigured,_("Rendering failed."));
+ return noErr;
} /* if */
else // react on special system requests
- switch (property)
+ {
+ switch (propertyID)
{
+ case kDataBrowserContainerIsClosableProperty:
+ {
+ // variable definitions:
+ wxDataViewCtrl* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl*>(this->GetPeer()));
+
+ wxCHECK_MSG(dataViewCtrlPtr != NULL,errDataBrowserNotConfigured,_("Pointer to data view control not set correctly."));
+ // initialize wxWidget event:
+ wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING,dataViewCtrlPtr->GetId()); // variable definition
+
+ dataViewEvent.SetEventObject(dataViewCtrlPtr);
+ dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
+ // finally send the equivalent wxWidget event:
+ dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
+ // opening the container is allowed if not vetoed:
+ return ::SetDataBrowserItemDataBooleanValue(itemData,dataViewEvent.IsAllowed());
+ } /* block */
+ case kDataBrowserContainerIsOpenableProperty:
+ {
+ // variable definitions:
+ wxDataViewCtrl* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl*>(this->GetPeer()));
+
+ wxCHECK_MSG(dataViewCtrlPtr != NULL,errDataBrowserNotConfigured,_("Pointer to data view control not set correctly."));
+ // initialize wxWidget event:
+ wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING,dataViewCtrlPtr->GetId()); // variable definition
+
+ dataViewEvent.SetEventObject(dataViewCtrlPtr);
+ dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
+ // finally send the equivalent wxWidget event:
+ dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
+ // opening the container is allowed if not vetoed:
+ return ::SetDataBrowserItemDataBooleanValue(itemData,dataViewEvent.IsAllowed());
+ } /* block */
case kDataBrowserItemIsContainerProperty:
- return ::SetDataBrowserItemDataBooleanValue(itemData,false);
+ {
+ // variable definition:
+ wxDataViewCtrl* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl*>(this->GetPeer()));
+
+ wxCHECK_MSG(dataViewCtrlPtr != NULL,errDataBrowserNotConfigured,_("Pointer to data view control not set correctly."));
+ wxCHECK_MSG(dataViewCtrlPtr->GetModel() != NULL,errDataBrowserNotConfigured,_("Pointer to model not set correctly."));
+ return ::SetDataBrowserItemDataBooleanValue(itemData,dataViewCtrlPtr->GetModel()->IsContainer(wxDataViewItem(reinterpret_cast<void*>(itemID))));
+ } /* block */
case kDataBrowserItemIsEditableProperty:
return ::SetDataBrowserItemDataBooleanValue(itemData,true);
} /* switch */
+ } /* if */
} /* if */
return errDataBrowserPropertyNotSupported;
} /* wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(DataBrowserItemID, DataBrowserPropertyID, DataBrowserItemDataRef, Boolean) */
-void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(DataBrowserItemID itemID, DataBrowserItemNotification message, DataBrowserItemDataRef WXUNUSED(itemData))
+void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(DataBrowserItemID itemID, DataBrowserItemNotification message, DataBrowserItemDataRef itemData)
{
- switch (message)
- {
- case kDataBrowserItemDoubleClicked:
- {
- // variable definitions:
- unsigned long row;
- wxDataViewCtrl* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl*>(this->GetPeer()));
-
- wxCHECK_RET(dataViewCtrlPtr != NULL, _("Pointer to data view control not set correctly."));
- wxCHECK_RET(this->GetRowIndex(row,itemID),_("Row index does not exist."));
- // initialize wxWidget event:
- wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ROW_ACTIVATED,dataViewCtrlPtr->GetId()); // variable defintion
-
- dataViewEvent.SetEventObject(dataViewCtrlPtr);
- dataViewEvent.SetRow(row);
- // finally sent the equivalent wxWidget event:
- dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
- } /* block */
- break;
- case kDataBrowserItemSelected:
- {
- // variable definitions:
- unsigned long row;
- wxDataViewCtrl* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl*>(this->GetPeer()));
-
- wxCHECK_RET(dataViewCtrlPtr != NULL, _("Pointer to data view control not set correctly."));
- if (dynamic_cast<wxDataViewSortedListModel*>(dataViewCtrlPtr->GetModel()) == NULL)
+ wxDataViewCtrl* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl*>(this->GetPeer()));
+
+
+ // check if the data view control pointer still exists because this call back function can still be called when the control has already been deleted:
+ if (dataViewCtrlPtr != NULL)
+ switch (message)
+ {
+ case kDataBrowserContainerClosed:
+ {
+ // initialize wxWidget event:
+ wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED,dataViewCtrlPtr->GetId()); // variable definition
+
+ dataViewEvent.SetEventObject(dataViewCtrlPtr);
+ dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
+ // finally send the equivalent wxWidget event:
+ dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
+ } /* block */
+ break;
+ case kDataBrowserContainerOpened:
{
- wxCHECK_RET(this->GetRowIndex(row,itemID),_("Row index does not exist."));
- } /* if */
- else
+ // initialize wxWidget event:
+ wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED,dataViewCtrlPtr->GetId()); // variable definition
+
+ dataViewEvent.SetEventObject(dataViewCtrlPtr);
+ dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
+ // finally send the equivalent wxWidget event:
+ dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
+ // add children to the expanded container:
+ dataViewCtrlPtr->AddChildrenLevel(wxDataViewItem(reinterpret_cast<void*>(itemID)));
+ } /* block */
+ break;
+ case kDataBrowserEditStarted:
{
- wxCHECK_RET(this->GetItemRow(itemID,&row) == noErr,_("Row index does not exist."));
- } /* if */
- // initialize wxWidget event:
- wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ROW_SELECTED,dataViewCtrlPtr->GetId()); // variable defintion
-
- dataViewEvent.SetEventObject(dataViewCtrlPtr);
- dataViewEvent.SetRow(row);
- // finally sent the equivalent wxWidget event:
- dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
- } /* block */
- break;
- case kDataBrowserUserStateChanged:
- {
- DataBrowserPropertyID propertyId;
-
- if ((this->GetSortProperty(&propertyId) == noErr) && (propertyId >= kMinPropertyID))
+ // initialize wxWidget event:
+ DataBrowserPropertyID propertyID;
+ wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED,dataViewCtrlPtr->GetId()); // variable definition
+
+ dataViewEvent.SetEventObject(dataViewCtrlPtr);
+ dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
+ if (this->GetPropertyID(itemData,&propertyID) == noErr)
+ {
+ // variable definition and initialization:
+ DataBrowserTableViewColumnIndex columnIndex;
+
+ wxCHECK_RET(this->GetColumnIndex(propertyID,&columnIndex),_("Column index not found."));
+ dataViewEvent.SetColumn(columnIndex);
+ dataViewEvent.SetDataViewColumn(dataViewCtrlPtr->GetColumnPtr(propertyID));
+ } /* if */
+ // finally send the equivalent wxWidget event:
+ dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
+ } /* block */
+ break;
+ case kDataBrowserEditStopped:
{
- DataBrowserSortOrder sortOrder;
- unsigned long column;
-
- if ((this->GetSortOrder(&sortOrder) == noErr) && (this->GetPropertyColumn(propertyId,&column) == noErr))
+ // initialize wxWidget event:
+ DataBrowserPropertyID propertyID;
+ wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE,dataViewCtrlPtr->GetId()); // variable definition
+
+ dataViewEvent.SetEventObject(dataViewCtrlPtr);
+ dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
+ if (this->GetPropertyID(itemData,&propertyID) == noErr)
{
- wxDataViewCtrl* dataViewCtrlPtr(dynamic_cast<wxDataViewCtrl*>(this->GetPeer()));
+ // variable definition and initialization:
+ DataBrowserTableViewColumnIndex columnIndex;
+
+ wxCHECK_RET(this->GetColumnIndex(propertyID,&columnIndex),_("Column index not found."));
+ dataViewEvent.SetColumn(columnIndex);
+ dataViewEvent.SetDataViewColumn(dataViewCtrlPtr->GetColumnPtr(propertyID));
+ } /* if */
+ // finally send the equivalent wxWidget event:
+ dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
+ } /* block */
+ break;
+ case kDataBrowserItemAdded:
+ break; // not used anymore
+ case kDataBrowserItemDeselected:
+ break; // not implemented by wxWidgets; see kDataBrowserSelectionSetChanged
+ case kDataBrowserItemDoubleClicked:
+ {
+ // initialize wxWidget event:
+ wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED,dataViewCtrlPtr->GetId()); // variable definition
+
+ dataViewEvent.SetEventObject(dataViewCtrlPtr);
+ dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
+ // finally send the equivalent wxWidget event:
+ dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
+ } /* block */
+ break;
+ case kDataBrowserItemRemoved:
+ break; // not used anymore
+ case kDataBrowserItemSelected:
+ break; // not implemented by wxWidgets; see kDataBrowserSelectionSetChanged
+ case kDataBrowserSelectionSetChanged:
+ {
+ // initialize wxWidget event:
+ wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED,dataViewCtrlPtr->GetId()); // variable definition
- if ( dataViewCtrlPtr->GetColumn(column)->IsSortOrderAscending() && (sortOrder == kDataBrowserOrderDecreasing) ||
- !(dataViewCtrlPtr->GetColumn(column)->IsSortOrderAscending()) && (sortOrder == kDataBrowserOrderIncreasing))
+ dataViewEvent.SetEventObject(dataViewCtrlPtr);
+ dataViewEvent.SetModel (dataViewCtrlPtr->GetModel());
+ // finally send the equivalent wxWidget event:
+ dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
+ } /* block */
+ break;
+ case kDataBrowserUserStateChanged:
+ {
+ // 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:
+ DataBrowserPropertyID propertyID; // variable definition
+
+ if ((this->GetSortProperty(&propertyID) == noErr) && (propertyID >= kMinPropertyID))
+ {
+ DataBrowserSortOrder sortOrder;
+ DataBrowserTableViewColumnIndex columnIndex;
+
+ if ((this->GetSortOrder(&sortOrder) == noErr) && (this->GetColumnIndex(propertyID,&columnIndex) == noErr))
{
- // initialize wxWidget event:
- wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED,dataViewCtrlPtr->GetId()); // variable defintion
-
- dataViewEvent.SetEventObject(dataViewCtrlPtr);
- dataViewEvent.SetColumn(column);
- dataViewEvent.SetDataViewColumn(dataViewCtrlPtr->GetColumn(column));
- // finally sent the equivalent wxWidget event:
- dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
+ // variable definition and initialization:
+ wxDataViewColumn* columnPtr;
+ columnPtr = dataViewCtrlPtr->GetColumn(columnIndex);
+ // check if the sort order has changed:
+ if ( columnPtr->IsSortOrderAscending() && (sortOrder == kDataBrowserOrderDecreasing) ||
+ !(columnPtr->IsSortOrderAscending()) && (sortOrder == kDataBrowserOrderIncreasing))
+ {
+ columnPtr->SetSortOrder(!(columnPtr->IsSortOrderAscending()));
+ // initialize wxWidget event:
+ wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED,dataViewCtrlPtr->GetId()); // variable defintion
+
+ dataViewEvent.SetEventObject(dataViewCtrlPtr);
+ dataViewEvent.SetColumn(columnIndex);
+ dataViewEvent.SetDataViewColumn(columnPtr);
+ // finally send the equivalent wxWidget event:
+ dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
+ } /* if */
} /* if */
} /* if */
- } /* if */
- } /* block */
- break;
- } /* switch */
+ } /* block */
+ break;
+ } /* switch */
} /* wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(DataBrowserItemID, DataBrowserItemNotification, DataBrowserItemDataRef) */
-#endif
- // wxUSE_GENERICDATAVIEWCTRL
+#endif // wxUSE_DATAVIEWCTRL && !wxUSE_GENERICDATAVIEWCTRL