1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/mac/carbon/dataview.h
3 // Purpose: wxDataViewCtrl native implementation header
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
10 #ifndef _WX_MACCARBONDATAVIEWCTRL_H_
11 #define _WX_MACCARBONDATAVIEWCTRL_H_
13 // --------------------------------------------------------
14 // Type definitions to mask native types
15 // --------------------------------------------------------
17 typedef void* WXDataBrowserItemDataRef
;
18 typedef unsigned long WXDataBrowserPropertyType
;
19 typedef wxUint32 WXDataBrowserPropertyID
;
21 // ---------------------------------------------------------
23 // ---------------------------------------------------------
25 class WXDLLIMPEXP_ADV wxDataViewRenderer
: public wxDataViewRendererBase
29 // constructors / destructor
31 wxDataViewRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
=wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
34 // inherited methods from wxDataViewRendererBase
36 virtual int GetAlignment() const
38 return this->m_alignment
;
40 virtual wxDataViewCellMode
GetMode() const
44 virtual bool GetValue(wxVariant
& value
) const
46 value
= this->m_value
;
50 virtual void SetAlignment(int WXUNUSED(align
)) // is always identical to the header alignment
53 virtual void SetMode(wxDataViewCellMode mode
);
54 virtual bool SetValue(wxVariant
const& newValue
)
56 this->m_value
= newValue
;
63 WXDataBrowserItemDataRef
GetDataReference() const
65 return this->m_dataReference
;
67 wxVariant
const& GetValue() const
72 virtual WXDataBrowserPropertyType
GetPropertyType() const = 0;
74 virtual bool Render() = 0; // a call to the appropriate data browser function filling the data reference with the stored datum;
75 // returns 'true' if the data value could be rendered, 'false' otherwise
77 void SetDataReference(WXDataBrowserItemDataRef
const& newDataReference
)
79 this->m_dataReference
= newDataReference
;
86 WXDataBrowserItemDataRef m_dataReference
; // data reference of the data browser; the data will be assigned to this reference during rendering
88 int m_alignment
; // contains the alignment flags
90 wxDataViewCellMode m_mode
; // storing the mode that determines how the cell is going to be shown
92 wxVariant m_value
; // value that is going to be rendered
95 // wxWidget internal stuff
97 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRenderer
)
100 // ---------------------------------------------------------
101 // wxDataViewCustomRenderer
102 // ---------------------------------------------------------
104 class WXDLLIMPEXP_ADV wxDataViewCustomRenderer
: public wxDataViewRenderer
108 // constructors / destructor
110 wxDataViewCustomRenderer(wxString
const& varianttype
=wxT("string"), wxDataViewCellMode mode
=wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
112 virtual ~wxDataViewCustomRenderer();
114 void RenderText( const wxString
&text
, int xoffset
, wxRect cell
, wxDC
*dc
, int state
);
117 // methods handling render space
119 virtual wxSize
GetSize() const = 0;
122 // methods handling user actions
124 virtual bool Render(wxRect cell
, wxDC
* dc
, int state
) = 0;
126 virtual bool Activate( wxRect
WXUNUSED(cell
),
127 wxDataViewModel
*WXUNUSED(model
),
128 const wxDataViewItem
& WXUNUSED(item
),
129 unsigned int WXUNUSED(col
) )
132 virtual bool LeftClick( wxPoint
WXUNUSED(cursor
),
133 wxRect
WXUNUSED(cell
),
134 wxDataViewModel
*WXUNUSED(model
),
135 const wxDataViewItem
& WXUNUSED(item
),
136 unsigned int WXUNUSED(col
) )
139 virtual bool StartDrag( wxPoint
WXUNUSED(cursor
),
140 wxRect
WXUNUSED(cell
),
141 wxDataViewModel
*WXUNUSED(model
),
142 const wxDataViewItem
& WXUNUSED(item
),
143 unsigned int WXUNUSED(col
) )
147 // device context handling
149 virtual wxDC
* GetDC(); // creates a device context and keeps it
154 virtual bool Render(); // declared in wxDataViewRenderer but will not be used here, therefore calling this function will
155 // return 'true' without having done anything
157 virtual WXDataBrowserPropertyType
GetPropertyType() const;
159 void SetDC(wxDC
* newDCPtr
); // this method takes ownership of the pointer
166 wxControl
* m_editorCtrlPtr
; // pointer to an in-place editor control
171 // wxWidget internal stuff
173 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer
)
176 // ---------------------------------------------------------
177 // wxDataViewTextRenderer
178 // ---------------------------------------------------------
180 class WXDLLIMPEXP_ADV wxDataViewTextRenderer
: public wxDataViewRenderer
184 // constructors / destructor
186 wxDataViewTextRenderer(wxString
const& varianttype
=wxT("string"), wxDataViewCellMode mode
=wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
189 // inherited functions from wxDataViewRenderer
191 virtual bool Render();
196 virtual WXDataBrowserPropertyType
GetPropertyType() const;
200 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer
)
203 // ---------------------------------------------------------
204 // wxDataViewTextRendererAttr
205 // ---------------------------------------------------------
207 class WXDLLIMPEXP_ADV wxDataViewTextRendererAttr
: public wxDataViewTextRenderer
211 // constructors / destructor
213 wxDataViewTextRendererAttr(wxString
const& varianttype
=wxT("string"), wxDataViewCellMode mode
=wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
216 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRendererAttr
)
219 // ---------------------------------------------------------
220 // wxDataViewBitmapRenderer
221 // ---------------------------------------------------------
223 class WXDLLIMPEXP_ADV wxDataViewBitmapRenderer
: public wxDataViewRenderer
227 // constructors / destructor
229 wxDataViewBitmapRenderer(wxString
const& varianttype
=wxT("wxBitmap"), wxDataViewCellMode mode
=wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
232 // inherited functions from wxDataViewRenderer
234 virtual bool Render();
239 virtual WXDataBrowserPropertyType
GetPropertyType() const;
243 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer
)
246 // ---------------------------------------------------------
247 // wxDataViewToggleRenderer
248 // ---------------------------------------------------------
250 class WXDLLIMPEXP_ADV wxDataViewIconTextRenderer
: public wxDataViewRenderer
253 wxDataViewIconTextRenderer(wxString
const& varianttype
= wxT("wxDataViewIconText"), wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
256 // inherited functions from wxDataViewRenderer
258 virtual bool Render();
263 virtual WXDataBrowserPropertyType
GetPropertyType() const;
267 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewIconTextRenderer
)
270 // ---------------------------------------------------------
271 // wxDataViewToggleRenderer
272 // ---------------------------------------------------------
274 class WXDLLIMPEXP_ADV wxDataViewToggleRenderer
: public wxDataViewRenderer
277 wxDataViewToggleRenderer(wxString
const& varianttype
= wxT("bool"), wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
280 // inherited functions from wxDataViewRenderer
282 virtual bool Render();
287 virtual WXDataBrowserPropertyType
GetPropertyType() const;
291 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleRenderer
)
294 // ---------------------------------------------------------
295 // wxDataViewProgressRenderer
296 // ---------------------------------------------------------
298 class WXDLLIMPEXP_ADV wxDataViewProgressRenderer
: public wxDataViewRenderer
301 wxDataViewProgressRenderer(wxString
const& label
= wxEmptyString
, wxString
const& varianttype
=wxT("long"),
302 wxDataViewCellMode mode
=wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
305 // inherited functions from wxDataViewRenderer
307 virtual bool Render();
312 virtual WXDataBrowserPropertyType
GetPropertyType() const;
316 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer
)
319 // ---------------------------------------------------------
320 // wxDataViewDateRenderer
321 // ---------------------------------------------------------
323 class WXDLLIMPEXP_ADV wxDataViewDateRenderer
: public wxDataViewRenderer
326 wxDataViewDateRenderer(wxString
const& varianttype
=wxT("datetime"), wxDataViewCellMode mode
=wxDATAVIEW_CELL_ACTIVATABLE
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
329 // inherited functions from wxDataViewRenderer
331 virtual bool Render();
336 virtual WXDataBrowserPropertyType
GetPropertyType() const;
340 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer
)
343 // ---------------------------------------------------------
345 // ---------------------------------------------------------
347 class WXDLLIMPEXP_ADV wxDataViewColumn
: public wxDataViewColumnBase
350 // constructors / destructor
351 wxDataViewColumn(const wxString
& title
,
352 wxDataViewRenderer
* renderer
,
353 unsigned int model_column
,
354 int width
= wxDVC_DEFAULT_WIDTH
,
355 wxAlignment align
= wxALIGN_CENTER
,
356 int flags
= wxDATAVIEW_COL_RESIZABLE
)
357 : wxDataViewColumnBase(renderer
, model_column
),
360 Init(width
, align
, flags
);
363 wxDataViewColumn(const wxBitmap
& bitmap
,
364 wxDataViewRenderer
* renderer
,
365 unsigned int model_column
,
366 int width
= wxDVC_DEFAULT_WIDTH
,
367 wxAlignment align
= wxALIGN_CENTER
,
368 int flags
= wxDATAVIEW_COL_RESIZABLE
)
369 : wxDataViewColumnBase(bitmap
, renderer
, model_column
)
371 Init(width
, align
, flags
);
374 // implement wxHeaderColumnBase pure virtual methods
375 virtual wxAlignment
GetAlignment() const { return m_alignment
; }
376 virtual int GetFlags() const { return m_flags
; }
377 virtual int GetMaxWidth() const { return m_maxWidth
; }
378 virtual int GetMinWidth() const { return m_minWidth
; }
379 virtual wxString
GetTitle() const { return m_title
; }
380 virtual int GetWidth() const { return m_width
; }
381 virtual bool IsHidden() const { return false; } // TODO
382 virtual bool IsSortOrderAscending() const { return m_ascending
; }
383 virtual bool IsSortKey() const;
385 virtual void SetAlignment(wxAlignment align
);
386 virtual void SetBitmap (wxBitmap
const& bitmap
);
387 virtual void SetFlags (int flags
) { SetIndividualFlags(flags
); }
388 virtual void SetHidden(bool WXUNUSED(hidden
)) { } // TODO
389 virtual void SetMaxWidth (int maxWidth
);
390 virtual void SetMinWidth (int minWidth
);
391 virtual void SetReorderable(bool reorderable
);
392 virtual void SetResizeable (bool resizeable
);
393 virtual void SetSortable (bool sortable
);
394 virtual void SetSortOrder (bool ascending
);
395 virtual void SetTitle (wxString
const& title
);
396 virtual void SetWidth (int width
);
397 virtual void SetAsSortKey(bool sort
= true);
399 // implementation only
400 WXDataBrowserPropertyID
GetPropertyID() const
405 void SetPropertyID(WXDataBrowserPropertyID newID
)
407 m_propertyID
= newID
;
409 void SetWidthVariable(int NewWidth
)
415 // common part of all ctors
416 void Init(int width
, wxAlignment align
, int flags
)
419 m_flags
= flags
& ~wxDATAVIEW_COL_HIDDEN
; // TODO
422 m_width
= width
>= 0 ? width
: wxDVC_DEFAULT_WIDTH
;
426 bool m_ascending
; // sorting order
428 // each column is identified by its unique property ID (NOT by the column
430 WXDataBrowserPropertyID m_propertyID
;
432 int m_flags
; // flags for the column
433 int m_maxWidth
; // maximum width for the column
434 int m_minWidth
; // minimum width for the column
435 int m_width
; // column width
437 wxAlignment m_alignment
; // column header alignment
439 wxString m_title
; // column title
442 // ---------------------------------------------------------
444 // ---------------------------------------------------------
445 class WXDLLIMPEXP_ADV wxDataViewCtrl
: public wxDataViewCtrlBase
448 // Constructors / destructor:
453 wxDataViewCtrl(wxWindow
*parent
, wxWindowID id
, const wxPoint
& pos
= wxDefaultPosition
, const wxSize
& size
= wxDefaultSize
, long style
= 0,
454 const wxValidator
& validator
= wxDefaultValidator
)
457 this->Create(parent
, id
, pos
, size
, style
, validator
);
462 // explicit control creation
463 bool Create(wxWindow
*parent
, wxWindowID id
, const wxPoint
& pos
=wxDefaultPosition
, const wxSize
& size
=wxDefaultSize
, long style
=0,
464 const wxValidator
& validator
=wxDefaultValidator
);
466 virtual wxControl
* GetMainWindow() // should disappear as it is not of any use for the native implementation
471 // inherited methods from 'wxDataViewCtrlBase':
472 virtual bool AssociateModel(wxDataViewModel
* model
);
474 virtual bool AppendColumn(wxDataViewColumn
* columnPtr
);
475 virtual bool PrependColumn(wxDataViewColumn
* columnPtr
);
476 virtual bool InsertColumn(unsigned int pos
, wxDataViewColumn
*col
);
478 virtual bool ClearColumns();
479 virtual bool DeleteColumn(wxDataViewColumn
* columnPtr
);
480 virtual wxDataViewColumn
* GetColumn(unsigned int pos
) const;
481 virtual unsigned int GetColumnCount() const;
482 virtual int GetColumnPosition(const wxDataViewColumn
* columnPtr
) const;
484 virtual void Collapse( const wxDataViewItem
& item
);
485 virtual void EnsureVisible(const wxDataViewItem
& item
, const wxDataViewColumn
* columnPtr
=NULL
);
486 virtual void Expand(const wxDataViewItem
& item
);
487 virtual bool IsExpanded(const wxDataViewItem
& item
) const;
489 virtual wxDataViewColumn
* GetSortingColumn() const;
491 virtual unsigned int GetCount() const;
492 virtual wxRect
GetItemRect(const wxDataViewItem
& item
, const wxDataViewColumn
* columnPtr
) const;
493 virtual wxDataViewItem
GetSelection() const;
494 virtual int GetSelections(wxDataViewItemArray
& sel
) const;
496 virtual void HitTest(const wxPoint
& point
, wxDataViewItem
& item
, wxDataViewColumn
*& columnPtr
) const;
498 virtual bool IsSelected(const wxDataViewItem
& item
) const;
500 virtual void SelectAll();
501 virtual void Select(const wxDataViewItem
& item
);
502 virtual void SetSelections(const wxDataViewItemArray
& sel
);
504 virtual void Unselect(const wxDataViewItem
& item
);
505 virtual void UnselectAll();
511 virtual wxSize
DoGetBestSize() const;
513 // adds all children of the passed parent to the control; if 'parentItem' is invalid the root(s) is/are added:
514 void AddChildrenLevel(wxDataViewItem
const& parentItem
);
516 // finishes editing of custom items; if no custom item is currently edited the method does nothing
517 void FinishCustomItemEditing();
519 // returns a pointer to a column;
520 // in case the pointer cannot be found NULL is returned:
521 wxDataViewColumn
* GetColumnPtr(WXDataBrowserPropertyID propertyID
) const;
522 // returns the current being rendered item of the customized renderer (this item is only valid during editing)
523 wxDataViewItem
const& GetCustomRendererItem() const
525 return this->m_CustomRendererItem
;
527 // returns a pointer to a customized renderer (this pointer is only valid during editing)
528 wxDataViewCustomRenderer
* GetCustomRendererPtr() const
530 return this->m_CustomRendererPtr
;
533 // checks if currently a delete process is running:
534 bool IsDeleting() const
536 return this->m_Deleting
;
539 // with CG, we need to get the context from an kEventControlDraw event
540 // unfortunately, the DataBrowser callbacks don't provide the context
541 // and we need it, so we need to set/remove it before and after draw
542 // events so we can access it in the callbacks.
543 void MacSetDrawingContext(void* context
)
545 this->m_cgContext
= context
;
547 void* MacGetDrawingContext() const
549 return this->m_cgContext
;
552 // sets the currently being edited item of the custom renderer
553 void SetCustomRendererItem(wxDataViewItem
const& NewItem
)
555 this->m_CustomRendererItem
= NewItem
;
557 // sets the custom renderer
558 void SetCustomRendererPtr(wxDataViewCustomRenderer
* NewCustomRendererPtr
)
560 this->m_CustomRendererPtr
= NewCustomRendererPtr
;
562 // sets the flag indicating a deletion process:
563 void SetDeleting(bool deleting
)
565 this->m_Deleting
= deleting
;
568 virtual wxVisualAttributes
GetDefaultAttributes() const
570 return GetClassDefaultAttributes(GetWindowVariant());
573 static wxVisualAttributes
574 GetClassDefaultAttributes(wxWindowVariant variant
= wxWINDOW_VARIANT_NORMAL
);
577 // inherited methods from wxDataViewCtrlBase:
578 virtual void DoSetExpanderColumn();
579 virtual void DoSetIndent();
582 void OnSize(wxSizeEvent
&event
);
583 void OnMouse(wxMouseEvent
&event
);
587 WX_DECLARE_HASH_MAP(WXDataBrowserPropertyID
,wxDataViewColumn
*,wxIntegerHash
,wxIntegerEqual
,ColumnPointerHashMapType
);
589 // initializing of local variables:
596 bool m_Deleting
; // flag indicating if a delete process is running; this flag is necessary because the notifier indicating an item deletion in the model may be called
597 // after the actual deletion of the item; then, the callback function "wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc" may
598 // try to update data into variables that are already deleted; this flag will ignore all variable update requests during item deletion
600 void* m_cgContext
; // pointer to core graphics context
602 wxDataViewCustomRenderer
* m_CustomRendererPtr
; // pointer to a valid custom renderer while editing; this class does NOT own the pointer
604 wxDataViewItem m_CustomRendererItem
; // currently edited item by the customerenderer; it is invalid while not editing
606 ColumnPointerHashMapType m_ColumnPointers
; // all column pointers are stored in a hash map with the property ID as a key
608 // wxWidget internal stuff:
609 DECLARE_DYNAMIC_CLASS(wxDataViewCtrl
)
610 wxDECLARE_NO_COPY_CLASS(wxDataViewCtrl
);
611 DECLARE_EVENT_TABLE()
615 #endif // _WX_MACCARBONDATAVIEWCTRL_H_