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(void) const
38 return this->m_alignment
;
40 virtual wxDataViewCellMode
GetMode(void) 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(void) const
65 return this->m_dataReference
;
67 wxVariant
const& GetValue(void) const
72 virtual WXDataBrowserPropertyType
GetPropertyType(void) const = 0;
74 virtual bool Render(void) = 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(void);
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 RightClick( wxPoint
WXUNUSED(cursor
),
140 wxRect
WXUNUSED(cell
),
141 wxDataViewModel
*WXUNUSED(model
),
142 const wxDataViewItem
& WXUNUSED(item
),
143 unsigned int WXUNUSED(col
) )
146 virtual bool StartDrag( wxPoint
WXUNUSED(cursor
),
147 wxRect
WXUNUSED(cell
),
148 wxDataViewModel
*WXUNUSED(model
),
149 const wxDataViewItem
& WXUNUSED(item
),
150 unsigned int WXUNUSED(col
) )
154 // device context handling
156 virtual wxDC
* GetDC(void); // creates a device context and keeps it
161 virtual bool Render(void); // declared in wxDataViewRenderer but will not be used here, therefore calling this function will
162 // return 'true' without having done anything
164 virtual WXDataBrowserPropertyType
GetPropertyType(void) const;
166 void SetDC(wxDC
* newDCPtr
); // this method takes ownership of the pointer
173 wxControl
* m_editorCtrlPtr
; // pointer to an in-place editor control
178 // wxWidget internal stuff
180 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer
)
183 // ---------------------------------------------------------
184 // wxDataViewTextRenderer
185 // ---------------------------------------------------------
187 class WXDLLIMPEXP_ADV wxDataViewTextRenderer
: public wxDataViewRenderer
191 // constructors / destructor
193 wxDataViewTextRenderer(wxString
const& varianttype
=wxT("string"), wxDataViewCellMode mode
=wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
196 // inherited functions from wxDataViewRenderer
198 virtual bool Render(void);
203 virtual WXDataBrowserPropertyType
GetPropertyType(void) const;
207 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer
)
210 // ---------------------------------------------------------
211 // wxDataViewTextRendererAttr
212 // ---------------------------------------------------------
214 class WXDLLIMPEXP_ADV wxDataViewTextRendererAttr
: public wxDataViewTextRenderer
218 // constructors / destructor
220 wxDataViewTextRendererAttr(wxString
const& varianttype
=wxT("string"), wxDataViewCellMode mode
=wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
223 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRendererAttr
)
226 // ---------------------------------------------------------
227 // wxDataViewBitmapRenderer
228 // ---------------------------------------------------------
230 class WXDLLIMPEXP_ADV wxDataViewBitmapRenderer
: public wxDataViewRenderer
234 // constructors / destructor
236 wxDataViewBitmapRenderer(wxString
const& varianttype
=wxT("wxBitmap"), wxDataViewCellMode mode
=wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
239 // inherited functions from wxDataViewRenderer
241 virtual bool Render(void);
246 virtual WXDataBrowserPropertyType
GetPropertyType(void) const;
250 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer
)
253 // ---------------------------------------------------------
254 // wxDataViewToggleRenderer
255 // ---------------------------------------------------------
257 class WXDLLIMPEXP_ADV wxDataViewIconTextRenderer
: public wxDataViewRenderer
260 wxDataViewIconTextRenderer(wxString
const& varianttype
= wxT("wxDataViewIconText"), wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
263 // inherited functions from wxDataViewRenderer
265 virtual bool Render(void);
270 virtual WXDataBrowserPropertyType
GetPropertyType(void) const;
274 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewIconTextRenderer
)
277 // ---------------------------------------------------------
278 // wxDataViewToggleRenderer
279 // ---------------------------------------------------------
281 class WXDLLIMPEXP_ADV wxDataViewToggleRenderer
: public wxDataViewRenderer
284 wxDataViewToggleRenderer(wxString
const& varianttype
= wxT("bool"), wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
287 // inherited functions from wxDataViewRenderer
289 virtual bool Render(void);
294 virtual WXDataBrowserPropertyType
GetPropertyType(void) const;
298 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleRenderer
)
301 // ---------------------------------------------------------
302 // wxDataViewProgressRenderer
303 // ---------------------------------------------------------
305 class WXDLLIMPEXP_ADV wxDataViewProgressRenderer
: public wxDataViewRenderer
308 wxDataViewProgressRenderer(wxString
const& label
= wxEmptyString
, wxString
const& varianttype
=wxT("long"),
309 wxDataViewCellMode mode
=wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
312 // inherited functions from wxDataViewRenderer
314 virtual bool Render(void);
319 virtual WXDataBrowserPropertyType
GetPropertyType(void) const;
323 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer
)
326 // ---------------------------------------------------------
327 // wxDataViewDateRenderer
328 // ---------------------------------------------------------
330 class WXDLLIMPEXP_ADV wxDataViewDateRenderer
: public wxDataViewRenderer
333 wxDataViewDateRenderer(wxString
const& varianttype
=wxT("datetime"), wxDataViewCellMode mode
=wxDATAVIEW_CELL_ACTIVATABLE
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
336 // inherited functions from wxDataViewRenderer
338 virtual bool Render(void);
343 virtual WXDataBrowserPropertyType
GetPropertyType(void) const;
347 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer
)
350 // ---------------------------------------------------------
352 // ---------------------------------------------------------
354 class WXDLLIMPEXP_ADV wxDataViewColumn
: public wxDataViewColumnBase
358 // constructors / destructor
360 wxDataViewColumn(wxString
const& title
, wxDataViewRenderer
* renderer
, unsigned int model_column
, int width
=80, wxAlignment align
=wxALIGN_CENTER
,
361 int flags
=wxDATAVIEW_COL_RESIZABLE
);
362 wxDataViewColumn(wxBitmap
const& bitmap
, wxDataViewRenderer
* renderer
, unsigned int model_column
, int width
=80, wxAlignment align
=wxALIGN_CENTER
,
363 int flags
=wxDATAVIEW_COL_RESIZABLE
);
366 // inherited methods from wxDataViewColumnBase
368 virtual wxAlignment
GetAlignment(void) const
370 return this->m_alignment
;
372 virtual int GetFlags(void) const
374 return this->m_flags
;
376 virtual int GetMaxWidth(void) const
378 return this->m_maxWidth
;
380 virtual int GetMinWidth(void) const
382 return this->m_minWidth
;
384 virtual wxString
GetTitle(void) const
386 return this->m_title
;
388 virtual int GetWidth(void) const
390 return this->m_width
;
393 virtual bool IsHidden(void) const
395 return false; // not implemented
397 virtual bool IsReorderable(void) const
399 return ((this->m_flags
& wxDATAVIEW_COL_REORDERABLE
) != 0);
401 virtual bool IsResizeable(void) const
403 return ((this->m_flags
& wxDATAVIEW_COL_RESIZABLE
) != 0);
405 virtual bool IsSortable(void) const
407 return ((this->m_flags
& wxDATAVIEW_COL_SORTABLE
) != 0);
409 virtual bool IsSortOrderAscending(void) const
411 return this->m_ascending
;
414 virtual void SetAlignment(wxAlignment align
);
415 virtual void SetBitmap (wxBitmap
const& bitmap
);
416 virtual void SetFlags (int flags
);
417 virtual void SetHidden(bool WXUNUSED(hidden
))
420 virtual void SetMaxWidth (int maxWidth
);
421 virtual void SetMinWidth (int minWidth
);
422 virtual void SetReorderable(bool reorderable
);
423 virtual void SetResizeable (bool resizeable
);
424 virtual void SetSortable (bool sortable
);
425 virtual void SetSortOrder (bool ascending
);
426 virtual void SetTitle (wxString
const& title
);
427 virtual void SetWidth (int width
);
432 WXDataBrowserPropertyID
GetPropertyID() const
434 return this->m_propertyID
;
437 void SetPropertyID(WXDataBrowserPropertyID newID
)
439 this->m_propertyID
= newID
;
441 void SetWidthVariable(int NewWidth
)
443 this->m_width
= NewWidth
;
451 bool m_ascending
; // sorting order
453 WXDataBrowserPropertyID m_propertyID
; // each column is identified by its unique property ID (NOT by the column index)
455 int m_flags
; // flags for the column
456 int m_maxWidth
; // maximum width for the column
457 int m_minWidth
; // minimum width for the column
458 int m_width
; // column width
460 wxAlignment m_alignment
; // column header alignment
462 wxString m_title
; // column title
464 // wxWidget internal stuff:
465 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumn
)
468 // ---------------------------------------------------------
470 // ---------------------------------------------------------
471 class WXDLLIMPEXP_ADV wxDataViewCtrl
: public wxDataViewCtrlBase
474 // Constructors / destructor:
479 wxDataViewCtrl(wxWindow
*parent
, wxWindowID id
, wxPoint
const& pos
= wxDefaultPosition
, wxSize
const& size
= wxDefaultSize
, long style
= 0,
480 wxValidator
const& validator
= wxDefaultValidator
)
483 this->Create(parent
, id
, pos
, size
, style
, validator
);
486 // explicit control creation
487 bool Create(wxWindow
*parent
, wxWindowID id
, wxPoint
const& pos
=wxDefaultPosition
, wxSize
const& size
=wxDefaultSize
, long style
=0,
488 wxValidator
const& validator
=wxDefaultValidator
);
490 virtual wxControl
* GetMainWindow(void) // should disappear as it is not of any use for the native implementation
495 // inherited methods from 'wxDataViewCtrlBase':
496 virtual bool AssociateModel(wxDataViewModel
* model
);
498 virtual bool AppendColumn(wxDataViewColumn
* columnPtr
);
499 virtual bool ClearColumns(void);
500 virtual bool DeleteColumn(wxDataViewColumn
* columnPtr
);
501 virtual wxDataViewColumn
* GetColumn(unsigned int pos
) const;
502 virtual unsigned int GetColumnCount(void) const;
503 virtual int GetColumnPosition(wxDataViewColumn
const* columnPtr
) const;
504 virtual bool PrependColumn(wxDataViewColumn
* columnPtr
);
506 virtual void Collapse(wxDataViewItem
const& item
);
507 virtual void EnsureVisible(wxDataViewItem
const& item
, wxDataViewColumn
const* columnPtr
=NULL
);
508 virtual void Expand(wxDataViewItem
const& item
);
510 virtual wxDataViewColumn
* GetSortingColumn(void) const;
512 virtual unsigned int GetCount(void) const;
513 virtual wxRect
GetItemRect(wxDataViewItem
const& item
, wxDataViewColumn
const* columnPtr
) const;
514 virtual wxDataViewItem
GetSelection(void) const;
515 virtual int GetSelections(wxDataViewItemArray
& sel
) const;
517 virtual void HitTest(wxPoint
const& point
, wxDataViewItem
& item
, wxDataViewColumn
*& columnPtr
) const;
519 virtual bool IsSelected(wxDataViewItem
const& item
) const;
521 virtual void SelectAll(void);
522 virtual void Select(wxDataViewItem
const& item
);
523 virtual void SetSelections(wxDataViewItemArray
const& sel
);
525 virtual void Unselect(wxDataViewItem
const& item
);
526 virtual void UnselectAll(void);
532 // adds all children of the passed parent to the control; if 'parentItem' is invalid the root(s) is/are added:
533 void AddChildrenLevel(wxDataViewItem
const& parentItem
);
535 // finishes editing of custom items; if no custom item is currently edited the method does nothing
536 void FinishCustomItemEditing(void);
538 // returns a pointer to a column;
539 // in case the pointer cannot be found NULL is returned:
540 wxDataViewColumn
* GetColumnPtr(WXDataBrowserPropertyID propertyID
) const;
541 // returns the current being rendered item of the customized renderer (this item is only valid during editing)
542 wxDataViewItem
const& GetCustomRendererItem(void) const
544 return this->m_CustomRendererItem
;
546 // returns a pointer to a customized renderer (this pointer is only valid during editing)
547 wxDataViewCustomRenderer
* GetCustomRendererPtr(void) const
549 return this->m_CustomRendererPtr
;
552 // checks if currently a delete process is running:
553 bool IsDeleting(void) const
555 return this->m_Deleting
;
558 // with CG, we need to get the context from an kEventControlDraw event
559 // unfortunately, the DataBrowser callbacks don't provide the context
560 // and we need it, so we need to set/remove it before and after draw
561 // events so we can access it in the callbacks.
562 void MacSetDrawingContext(void* context
)
564 this->m_cgContext
= context
;
566 void* MacGetDrawingContext(void) const
568 return this->m_cgContext
;
571 // sets the currently being edited item of the custom renderer
572 void SetCustomRendererItem(wxDataViewItem
const& NewItem
)
574 this->m_CustomRendererItem
= NewItem
;
576 // sets the custom renderer
577 void SetCustomRendererPtr(wxDataViewCustomRenderer
* NewCustomRendererPtr
)
579 this->m_CustomRendererPtr
= NewCustomRendererPtr
;
581 // sets the flag indicating a deletion process:
582 void SetDeleting(bool deleting
)
584 this->m_Deleting
= deleting
;
587 virtual wxVisualAttributes
GetDefaultAttributes() const
589 return GetClassDefaultAttributes(GetWindowVariant());
592 static wxVisualAttributes
593 GetClassDefaultAttributes(wxWindowVariant variant
= wxWINDOW_VARIANT_NORMAL
);
596 // inherited methods from wxDataViewCtrlBase:
597 virtual void DoSetExpanderColumn(void);
598 virtual void DoSetIndent(void);
601 void OnSize(wxSizeEvent
&event
);
605 WX_DECLARE_HASH_MAP(WXDataBrowserPropertyID
,wxDataViewColumn
*,wxIntegerHash
,wxIntegerEqual
,ColumnPointerHashMapType
);
607 // initializing of local variables:
614 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
615 // after the actual deletion of the item; then, the callback function "wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc" may
616 // try to update data into variables that are already deleted; this flag will ignore all variable update requests during item deletion
618 void* m_cgContext
; // pointer to core graphics context
620 wxDataViewCustomRenderer
* m_CustomRendererPtr
; // pointer to a valid custom renderer while editing; this class does NOT own the pointer
622 wxDataViewItem m_CustomRendererItem
; // currently edited item by the customerenderer; it is invalid while not editing
624 ColumnPointerHashMapType m_ColumnPointers
; // all column pointers are stored in a hash map with the property ID as a key
626 // wxWidget internal stuff:
627 DECLARE_DYNAMIC_CLASS(wxDataViewCtrl
)
628 DECLARE_NO_COPY_CLASS(wxDataViewCtrl
)
629 DECLARE_EVENT_TABLE()
633 #endif // _WX_MACCARBONDATAVIEWCTRL_H_