1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478
|
/////////////////////////////////////////////////////////////////////////////
// Name: wx/osx/carbon/dataview.h
// Purpose: wxDataViewCtrl native implementation header for carbon
// Author:
// Copyright: (c) 2009
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_DATAVIEWCTRL_CARBON_H_
#define _WX_DATAVIEWCTRL_CARBON_H_
#include "wx/defs.h"
#if wxUSE_GUI
#include "wx/osx/core/dataview.h"
#include "wx/osx/private.h"
// ============================================================================
// wxDataViewColumnNativeData
// ============================================================================
class wxDataViewColumnNativeData
{
public:
//
// constructors / destructor
//
wxDataViewColumnNativeData()
{
}
wxDataViewColumnNativeData(DataBrowserPropertyID initPropertyID)
:m_PropertyID(initPropertyID)
{
}
//
// data access methods
//
DataBrowserPropertyID GetPropertyID() const
{
return m_PropertyID;
}
void SetPropertyID(DataBrowserPropertyID newPropertyID)
{
m_PropertyID = newPropertyID;
}
protected:
private:
//
// variables
//
DataBrowserPropertyID m_PropertyID; // each column is identified by its unique property ID (NOT by the column's index)
};
// ============================================================================
// wxDataViewRendererNativeData
// ============================================================================
class wxDataViewRendererNativeData
{
public:
//
// constructors / destructor
//
wxDataViewRendererNativeData()
{
}
wxDataViewRendererNativeData(DataBrowserPropertyType initPropertyType, DataBrowserItemDataRef initItemDataRef=NULL)
:m_ItemDataRef(initItemDataRef), m_PropertyType(initPropertyType)
{
}
//
// data access methods
//
DataBrowserItemDataRef GetItemDataRef() const
{
return m_ItemDataRef;
}
DataBrowserPropertyType GetPropertyType() const
{
return m_PropertyType;
}
void SetItemDataRef(DataBrowserItemDataRef newItemDataRef)
{
m_ItemDataRef = newItemDataRef;
}
void SetPropertyType(DataBrowserPropertyType newPropertyType)
{
m_PropertyType = newPropertyType;
}
protected:
private:
//
// variables
//
DataBrowserItemDataRef m_ItemDataRef;
DataBrowserPropertyType m_PropertyType;
};
// ============================================================================
// wxMacDataBrowserTableViewControl
// ============================================================================
//
// This is a wrapper class for the Mac OS X data browser environment.
// It covers all data browser functionality for the native browser's list
// and column style.
//
// data browser's property IDs have a reserved ID range from 0 - 1023
// therefore, the first usable property ID is 'kMinPropertyID'
DataBrowserPropertyID const kMinPropertyID = 1024;
// array of data browser item IDs
WX_DEFINE_ARRAY_SIZE_T(size_t,wxArrayDataBrowserItemID);
class wxMacDataBrowserTableViewControl : public wxMacControl
{
public:
//
// constructors / destructor
//
wxMacDataBrowserTableViewControl(wxWindow* peer, const wxPoint& pos, const wxSize& size, long style);
wxMacDataBrowserTableViewControl()
{
}
~wxMacDataBrowserTableViewControl();
//
// callback handling
//
OSStatus SetCallbacks (DataBrowserCallbacks const* callbacks);
OSStatus SetCustomCallbacks(DataBrowserCustomCallbacks const* customCallbacks);
//
// DnD handling
//
OSStatus EnableAutomaticDragTracking(bool enable=true);
//
// header handling
//
OSStatus GetHeaderDesc(DataBrowserPropertyID property, DataBrowserListViewHeaderDesc* desc) const;
OSStatus SetHeaderDesc(DataBrowserPropertyID property, DataBrowserListViewHeaderDesc* desc);
//
// layout handling
//
OSStatus AutoSizeColumns();
OSStatus EnableCellSizeModification(bool enableHeight=true, bool enableWidth=true); // enables or disables the column width and row height modification (default: false)
OSStatus GetAttributes (OptionBits* attributes);
OSStatus GetColumnWidth (DataBrowserPropertyID column, UInt16 *width ) const; // returns the column width in pixels
OSStatus GetDefaultColumnWidth(UInt16 *width ) const; // returns the default column width in pixels
OSStatus GetDefaultRowHeight (UInt16 * height ) const;
OSStatus GetHeaderButtonHeight(UInt16 *height );
OSStatus GetPartBounds (DataBrowserItemID item, DataBrowserPropertyID property, DataBrowserPropertyPart part, Rect* bounds);
OSStatus GetRowHeight (DataBrowserItemID item , UInt16 *height) const;
OSStatus GetScrollPosition (UInt32* top, UInt32 *left) const;
OSStatus SetAttributes (OptionBits attributes);
OSStatus SetColumnWidth(DataBrowserPropertyID column, UInt16 width); // sets the column width in pixels
OSStatus SetDefaultColumnWidth( UInt16 width );
OSStatus SetDefaultRowHeight( UInt16 height );
OSStatus SetHasScrollBars( bool horiz, bool vert );
OSStatus SetHeaderButtonHeight( UInt16 height );
OSStatus SetHiliteStyle(DataBrowserTableViewHiliteStyle hiliteStyle);
OSStatus SetIndent(float Indent);
OSStatus SetItemRowHeight( DataBrowserItemID item , UInt16 height);
OSStatus SetScrollPosition( UInt32 top , UInt32 left );
//
// column handling
//
OSStatus GetColumnCount (UInt32* numColumns) const;
OSStatus GetColumnIndex (DataBrowserPropertyID propertyID, DataBrowserTableViewColumnIndex* index) const; // returns for the passed property the corresponding column index
OSStatus GetFreePropertyID(DataBrowserPropertyID* propertyID) const; // this method returns a property id that is valid and currently not used; if it cannot be found 'errDataBrowserPropertyNotSupported' is returned
OSStatus GetPropertyFlags (DataBrowserPropertyID propertyID, DataBrowserPropertyFlags *flags ) const;
OSStatus GetPropertyID (DataBrowserItemDataRef itemData, DataBrowserPropertyID* propertyID) const; // returns for the passed item data reference the corresponding property ID
OSStatus GetPropertyID (DataBrowserTableViewColumnIndex index, DataBrowserPropertyID* propertyID) const; // returns for the passed column index the corresponding property ID
OSStatus IsUsedPropertyID(DataBrowserPropertyID propertyID) const; // checks if passed property id is used by the control; no error is returned if the id exists
OSStatus RemoveColumnByProperty(DataBrowserTableViewColumnID propertyID);
OSStatus RemoveColumnByIndex (DataBrowserTableViewColumnIndex index);
OSStatus SetColumnIndex (DataBrowserPropertyID propertyID, DataBrowserTableViewColumnIndex index);
OSStatus SetDisclosureColumn(DataBrowserPropertyID propertyID, Boolean expandableRows=false);
OSStatus SetPropertyFlags (DataBrowserPropertyID propertyID, DataBrowserPropertyFlags flags);
//
// item handling
//
OSStatus AddItem(DataBrowserItemID container, DataBrowserItemID const* itemID) // adds a single item
{
return AddItems(container,1,itemID,kDataBrowserItemNoProperty);
}
OSStatus AddItems(DataBrowserItemID container, UInt32 numItems, DataBrowserItemID const* items, DataBrowserPropertyID preSortProperty); // adds items to the data browser
OSStatus GetFreeItemID(DataBrowserItemID* id) const; // this method returns an item id that is valid and currently not used; if it cannot be found 'errDataBrowserItemNotAdded' is returned
OSStatus GetItemCount (ItemCount* numItems) const
{
return GetItemCount(kDataBrowserNoItem,true,kDataBrowserItemAnyState,numItems);
}
OSStatus GetItemCount (DataBrowserItemID container, Boolean recurse, DataBrowserItemState state, ItemCount* numItems) const;
OSStatus GetItemID (DataBrowserTableViewRowIndex row, DataBrowserItemID* item) const;
OSStatus GetItems (DataBrowserItemID container, Boolean recurse, DataBrowserItemState state, Handle items) const;
OSStatus GetItemRow (DataBrowserItemID item, DataBrowserTableViewRowIndex* row) const;
OSStatus GetItemState (DataBrowserItemID item, DataBrowserItemState* state) const;
OSStatus IsUsedItemID(DataBrowserItemID itemID) const; // checks if the passed id is in use
OSStatus RevealItem(DataBrowserItemID item, DataBrowserPropertyID propertyID, DataBrowserRevealOptions options) const;
OSStatus RemoveItem(DataBrowserItemID container, DataBrowserItemID const* itemID) // removes a single item
{
return RemoveItems(container,1,itemID,kDataBrowserItemNoProperty);
}
OSStatus RemoveItems(void) // removes all items
{
return RemoveItems(kDataBrowserNoItem,0,NULL,kDataBrowserItemNoProperty);
}
OSStatus RemoveItems(DataBrowserItemID container, UInt32 numItems, DataBrowserItemID const* items, DataBrowserPropertyID preSortProperty);
OSStatus UpdateItem(DataBrowserItemID container, DataBrowserItemID const* item) // updates all columns of the passed item
{
return UpdateItems(container,1,item,kDataBrowserItemNoProperty,kDataBrowserItemNoProperty);
}
OSStatus UpdateItems(void) // updates all items
{
return UpdateItems(kDataBrowserNoItem,0,NULL,kDataBrowserItemNoProperty,kDataBrowserItemNoProperty);
}
OSStatus UpdateItems(DataBrowserItemID container, UInt32 numItems, DataBrowserItemID const* items, DataBrowserPropertyID preSortProperty, DataBrowserPropertyID propertyID) const;
//
// item selection
//
size_t GetSelectedItemIDs(wxArrayDataBrowserItemID& itemIDs) const; // returns the number of selected item and the item IDs in the array
OSStatus GetSelectionAnchor(DataBrowserItemID *first, DataBrowserItemID *last) const;
OSStatus GetSelectionFlags (DataBrowserSelectionFlags* flags) const;
bool IsItemSelected(DataBrowserItemID item) const;
OSStatus SetSelectionFlags(DataBrowserSelectionFlags flags);
OSStatus SetSelectedItems (UInt32 numItems, DataBrowserItemID const* itemIDs, DataBrowserSetOption operation);
//
// item sorting
//
OSStatus GetSortOrder (DataBrowserSortOrder* order) const;
OSStatus GetSortProperty(DataBrowserPropertyID* propertyID) const;
OSStatus Resort(DataBrowserItemID container=kDataBrowserNoItem, Boolean sortChildren=true);
OSStatus SetSortOrder (DataBrowserSortOrder order);
OSStatus SetSortProperty(DataBrowserPropertyID propertyID);
//
// container handling
//
OSStatus CloseContainer(DataBrowserItemID containerID);
OSStatus OpenContainer(DataBrowserItemID containerID);
protected :
//
// standard callback functions
//
static pascal Boolean DataBrowserCompareProc (ControlRef browser, DataBrowserItemID itemOneID, DataBrowserItemID itemTwoID, DataBrowserPropertyID sortProperty);
static pascal void DataBrowserGetContextualMenuProc(ControlRef browser, MenuRef* menu, UInt32* helpType, CFStringRef* helpItemString, AEDesc* selection);
static pascal OSStatus DataBrowserGetSetItemDataProc (ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean getValue);
static pascal void DataBrowserItemNotificationProc (ControlRef browser, DataBrowserItemID itemID, DataBrowserItemNotification message, DataBrowserItemDataRef itemData);
virtual Boolean DataBrowserCompareProc (DataBrowserItemID itemOneID, DataBrowserItemID itemTwoID, DataBrowserPropertyID sortProperty) = 0;
virtual void DataBrowserGetContextualMenuProc(MenuRef* menu, UInt32* helpType, CFStringRef* helpItemString, AEDesc* selection) = 0;
virtual OSStatus DataBrowserGetSetItemDataProc (DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean getValue) = 0;
virtual void DataBrowserItemNotificationProc (DataBrowserItemID itemID, DataBrowserItemNotification message, DataBrowserItemDataRef itemData) = 0;
//
// callback functions for customized types
//
static pascal void DataBrowserDrawItemProc(ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID propertyID, DataBrowserItemState state, Rect const* rectangle, SInt16 bitDepth, Boolean colorDevice);
static pascal Boolean DataBrowserEditItemProc(ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID propertyID, CFStringRef theString, Rect* maxEditTextRect, Boolean* shrinkToFit);
static pascal Boolean DataBrowserHitTestProc (ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID propertyID, Rect const* theRect, Rect const* mouseRect);
static pascal DataBrowserTrackingResult DataBrowserTrackingProc(ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID propertyID, Rect const* theRect, Point startPt, EventModifiers modifiers);
virtual void DataBrowserDrawItemProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, DataBrowserItemState state, Rect const* rectangle, SInt16 bitDepth, Boolean colorDevice) = 0;
virtual Boolean DataBrowserEditItemProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, CFStringRef theString, Rect* maxEditTextRect, Boolean* shrinkToFit) = 0;
virtual Boolean DataBrowserHitTestProc (DataBrowserItemID itemID, DataBrowserPropertyID propertyID, Rect const* theRect, Rect const* mouseRect) = 0;
virtual DataBrowserTrackingResult DataBrowserTrackingProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, Rect const* theRect, Point startPt, EventModifiers modifiers) = 0;
//
// callback functions for drag & drop
//
static pascal Boolean DataBrowserAcceptDragProc (ControlRef browser, DragReference dragRef, DataBrowserItemID itemID);
static pascal Boolean DataBrowserAddDragItemProc(ControlRef browser, DragReference dragRef, DataBrowserItemID itemID, ItemReference* itemRef);
static pascal Boolean DataBrowserReceiveDragProc(ControlRef browser, DragReference dragRef, DataBrowserItemID itemID);
virtual Boolean DataBrowserAcceptDragProc (DragReference dragRef, DataBrowserItemID itemID) = 0;
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
//
DECLARE_ABSTRACT_CLASS(wxMacDataBrowserTableViewControl)
};
// ============================================================================
// wxMacDataBrowserListViewControl
// ============================================================================
//
// This class is a wrapper for the native browser's list view style. It expands
// the inherited functionality of the table view control class.
// The term list view is in this case Mac OS X specific and is not related
// to any wxWidget naming conventions.
//
class wxMacDataBrowserListViewControl : public wxMacDataBrowserTableViewControl
{
public:
//
// constructors / destructor
//
wxMacDataBrowserListViewControl(wxWindow* peer, wxPoint const& pos, wxSize const& size, long style) : wxMacDataBrowserTableViewControl(peer,pos,size,style)
{
}
//
// column handling
//
OSStatus AddColumn(DataBrowserListViewColumnDesc *columnDesc, DataBrowserTableViewColumnIndex position);
protected:
private:
};
// ============================================================================
// wxMacDataViewDataBrowserListViewControl
// ============================================================================
//
// This is the internal interface class between wxDataViewCtrl (wxWidget) and
// the native data browser (Mac OS X carbon).
//
class wxMacDataViewDataBrowserListViewControl : public wxMacDataBrowserListViewControl, public wxDataViewWidgetImpl
{
public:
//
// constructors / destructor
//
wxMacDataViewDataBrowserListViewControl(wxWindow* peer, wxPoint const& pos, wxSize const& size, long style);
//
// column related methods (inherited from wxDataViewWidgetImpl)
//
virtual bool ClearColumns ();
virtual bool DeleteColumn (wxDataViewColumn* columnPtr);
virtual void DoSetExpanderColumn(wxDataViewColumn const* columnPtr);
virtual wxDataViewColumn* GetColumn (unsigned int pos) const;
virtual int GetColumnPosition (wxDataViewColumn const* columnPtr) const;
virtual bool InsertColumn (unsigned int pos, wxDataViewColumn* columnPtr);
virtual void FitColumnWidthToContent(unsigned int WXUNUSED(pos)) { /*not implemented*/ }
//
// item related methods (inherited from wxDataViewWidgetImpl)
//
virtual bool Add (wxDataViewItem const& parent, wxDataViewItem const& item);
virtual bool Add (wxDataViewItem const& parent, wxDataViewItemArray const& items);
virtual void Collapse (wxDataViewItem const& item);
virtual void EnsureVisible(wxDataViewItem const& item, wxDataViewColumn const* columnPtr);
virtual void Expand (wxDataViewItem const& item);
virtual unsigned int GetCount () const;
virtual wxRect GetRectangle (wxDataViewItem const& item, wxDataViewColumn const* columnPtr);
virtual bool IsExpanded (wxDataViewItem const& item) const;
virtual bool Reload ();
virtual bool Remove (wxDataViewItem const& parent, wxDataViewItem const& item);
virtual bool Remove (wxDataViewItem const& parent, wxDataViewItemArray const& item);
virtual bool Update (wxDataViewColumn const* columnPtr);
virtual bool Update (wxDataViewItem const& parent, wxDataViewItem const& item);
virtual bool Update (wxDataViewItem const& parent, wxDataViewItemArray const& items);
//
// model related methods
//
virtual bool AssociateModel(wxDataViewModel* model);
//
// selection related methods (inherited from wxDataViewWidgetImpl)
//
virtual wxDataViewItem GetCurrentItem() const;
virtual void SetCurrentItem(const wxDataViewItem& item);
virtual wxDataViewColumn *GetCurrentColumn() const;
virtual int GetSelectedItemsCount() const;
virtual int GetSelections(wxDataViewItemArray& sel) const;
virtual bool IsSelected (wxDataViewItem const& item) const;
virtual void Select (wxDataViewItem const& item);
virtual void SelectAll ();
virtual void Unselect (wxDataViewItem const& item);
virtual void UnselectAll ();
//
// sorting related methods
//
virtual wxDataViewColumn* GetSortingColumn () const;
virtual void Resort ();
//
// other methods (inherited from wxDataViewWidgetImpl)
//
virtual void DoSetIndent (int indent);
virtual void HitTest (wxPoint const& point, wxDataViewItem& item, wxDataViewColumn*& columnPtr) const;
virtual void SetRowHeight(wxDataViewItem const& item, unsigned int height);
virtual void OnSize ();
virtual void StartEditor( const wxDataViewItem & item, unsigned int column );
//
// other methods
//
wxDataViewCtrl* GetDataViewCtrl() const
{
return dynamic_cast<wxDataViewCtrl*>(GetWXPeer());
}
protected:
//
// standard callback functions (inherited from wxMacDataBrowserTableViewControl)
//
virtual Boolean DataBrowserCompareProc (DataBrowserItemID itemOneID, DataBrowserItemID itemTwoID, DataBrowserPropertyID sortProperty);
virtual void DataBrowserItemNotificationProc (DataBrowserItemID itemID, DataBrowserItemNotification message, DataBrowserItemDataRef itemData);
virtual void DataBrowserGetContextualMenuProc(MenuRef* menu, UInt32* helpType, CFStringRef* helpItemString, AEDesc* selection);
virtual OSStatus DataBrowserGetSetItemDataProc (DataBrowserItemID itemID, DataBrowserPropertyID propertyID, DataBrowserItemDataRef itemData, Boolean getValue);
//
// callback functions for customized types (inherited from wxMacDataBrowserTableViewControl)
//
virtual void DataBrowserDrawItemProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, DataBrowserItemState state, Rect const* rectangle, SInt16 bitDepth, Boolean colorDevice);
virtual Boolean DataBrowserEditItemProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, CFStringRef theString, Rect* maxEditTextRect, Boolean* shrinkToFit);
virtual Boolean DataBrowserHitTestProc (DataBrowserItemID itemID, DataBrowserPropertyID propertyID, Rect const* theRect, Rect const* mouseRect);
virtual DataBrowserTrackingResult DataBrowserTrackingProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, Rect const* theRect, Point startPt, EventModifiers modifiers);
//
// callback functions for drag & drop (inherited from wxMacDataBrowserTableViewControl)
//
virtual Boolean DataBrowserAcceptDragProc (DragReference dragRef, DataBrowserItemID itemID);
virtual Boolean DataBrowserAddDragItemProc(DragReference dragRef, DataBrowserItemID itemID, ItemReference* itemRef);
virtual Boolean DataBrowserReceiveDragProc(DragReference dragRef, DataBrowserItemID itemID);
//
// drag & drop helper methods
//
wxDataFormat GetDnDDataFormat(wxDataObjectComposite* dataObjects);
wxDataObjectComposite* GetDnDDataObjects(DragReference dragRef, ItemReference itemRef) const; // create the data objects from the native dragged object
//
// other methods
//
wxDataViewColumn* GetColumnPtr(DataBrowserPropertyID propertyID) const; // returns for the passed property the corresponding pointer to a column; NULL is returned if not found
private:
};
typedef wxMacDataViewDataBrowserListViewControl* wxMacDataViewDataBrowserListViewControlPointer;
#endif // WX_GUI
#endif // _WX_MACCARBONDATAVIEWCTRL_H_
|