1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/mac/carbon/dataview.h
3 // Purpose: wxDataViewCtrl native implementation header
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
10 #ifndef __MACCARBONDATAVIEWCTRL_H__
11 #define __MACCARBONDATAVIEWCTRL_H__
13 #include <Carbon/carbon.h>
16 #include "wx/object.h"
18 #include "wx/control.h"
19 #include "wx/scrolwin.h"
22 // ---------------------------------------------------------
24 // ---------------------------------------------------------
26 class WXDLLIMPEXP_ADV wxDataViewCtrl
;
28 // ---------------------------------------------------------
30 // ---------------------------------------------------------
32 class WXDLLIMPEXP_ADV wxDataViewRenderer
: public wxDataViewRendererBase
36 // constructors / destructor
38 wxDataViewRenderer(wxString
const& varianttype
, wxDataViewCellMode mode
=wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
41 // inherited methods from wxDataViewRendererBase
43 virtual int GetAlignment(void) const
45 return this->m_alignment
;
47 virtual wxDataViewCellMode
GetMode(void) const
51 virtual bool GetValue(wxVariant
& value
) const
53 value
= this->m_value
;
57 virtual void SetAlignment(int WXUNUSED(align
)) // is always identical to the header alignment
60 virtual void SetMode(wxDataViewCellMode mode
);
61 virtual bool SetValue(wxVariant
const& newValue
)
63 this->m_value
= newValue
;
70 DataBrowserItemDataRef
GetDataReference(void) const
72 return this->m_dataReference
;
74 wxVariant
const& GetValue(void) const
79 virtual DataBrowserPropertyType
GetPropertyType(void) const = 0;
81 virtual bool Render(void) = 0; // a call to the appropriate data browser function filling the data reference with the stored datum;
82 // returns 'true' if the data value could be rendered, 'false' otherwise
84 void SetDataReference(DataBrowserItemDataRef
const& newDataReference
)
86 this->m_dataReference
= newDataReference
;
93 DataBrowserItemDataRef m_dataReference
; // data reference of the data browser; the data will be assigned to this reference during rendering
95 int m_alignment
; // contains the alignment flags
97 wxDataViewCellMode m_mode
; // storing the mode that determines how the cell is going to be shown
99 wxVariant m_value
; // value that is going to be rendered
102 // wxWidget internal stuff
104 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRenderer
)
107 // ---------------------------------------------------------
108 // wxDataViewCustomRenderer
109 // ---------------------------------------------------------
111 class WXDLLIMPEXP_ADV wxDataViewCustomRenderer
: public wxDataViewRenderer
115 // constructors / destructor
117 wxDataViewCustomRenderer(wxString
const& varianttype
=wxT("string"), wxDataViewCellMode mode
=wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
119 virtual ~wxDataViewCustomRenderer(void);
122 // methods handling render space
124 virtual wxSize
GetSize() const = 0;
127 // methods handling user actions
129 virtual bool Render(wxRect cell
, wxDC
* dc
, int state
) = 0;
131 virtual bool Activate(wxRect
WXUNUSED(cell
), wxDataViewListModel
*WXUNUSED(model
), unsigned int WXUNUSED(col
), unsigned int WXUNUSED(row
))
136 virtual bool LeftClick(wxPoint
WXUNUSED(cursor
), wxRect
WXUNUSED(cell
), wxDataViewListModel
*WXUNUSED(model
), unsigned int WXUNUSED(col
), unsigned int WXUNUSED(row
))
141 virtual bool RightClick(wxPoint
WXUNUSED(cursor
), wxRect
WXUNUSED(cell
), wxDataViewListModel
*WXUNUSED(model
), unsigned int WXUNUSED(col
), unsigned int WXUNUSED(row
))
146 virtual bool StartDrag(wxPoint
WXUNUSED(cursor
), wxRect
WXUNUSED(cell
), wxDataViewListModel
*WXUNUSED(model
), unsigned int WXUNUSED(col
), unsigned int WXUNUSED(row
))
154 virtual void CancelEditing()
158 virtual wxControl
* CreateEditorCtrl(wxWindow
* WXUNUSED(parent
), wxRect
WXUNUSED(labelRect
), const wxVariant
& WXUNUSED(value
))
163 virtual bool FinishEditing()
168 wxControl
* GetEditorCtrl(void) const
170 return this->m_editorCtrlPtr
;
172 virtual bool GetValueFromEditorCtrl(wxControl
* WXUNUSED(editor
), wxVariant
& WXUNUSED(value
))
177 virtual bool HasEditorCtrl(void)
182 virtual bool StartEditing(unsigned int WXUNUSED(row
), wxRect
WXUNUSED(labelRect
))
188 // device context handling
190 virtual wxDC
* GetDC(void); // creates a device context and keeps it
195 virtual bool Render(void); // declared in wxDataViewRenderer but will not be used here, therefore calling this function will
196 // return 'false' without having done anything
198 virtual DataBrowserPropertyType
GetPropertyType(void) const
200 return kDataBrowserCustomType
;
203 void SetDC(wxDC
* newDCPtr
); // this method takes ownership of the pointer
210 wxControl
* m_editorCtrlPtr
; // pointer to an in-place editor control
215 // wxWidget internal stuff
217 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer
)
220 // ---------------------------------------------------------
221 // wxDataViewTextRenderer
222 // ---------------------------------------------------------
224 class WXDLLIMPEXP_ADV wxDataViewTextRenderer
: public wxDataViewRenderer
228 // constructors / destructor
230 wxDataViewTextRenderer(wxString
const& varianttype
=wxT("string"), wxDataViewCellMode mode
=wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
233 // inherited functions from wxDataViewRenderer
235 virtual bool Render(void);
240 virtual DataBrowserPropertyType
GetPropertyType(void) const
242 return kDataBrowserTextType
;
247 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer
)
250 // ---------------------------------------------------------
251 // wxDataViewBitmapRenderer
252 // ---------------------------------------------------------
254 class WXDLLIMPEXP_ADV wxDataViewBitmapRenderer
: public wxDataViewRenderer
258 // constructors / destructor
260 wxDataViewBitmapRenderer(wxString
const& varianttype
=wxT("wxBitmap"), wxDataViewCellMode mode
=wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
263 // inherited functions from wxDataViewRenderer
265 virtual bool Render(void);
270 virtual DataBrowserPropertyType
GetPropertyType(void) const
272 return kDataBrowserIconType
;
277 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer
)
280 // ---------------------------------------------------------
281 // wxDataViewToggleRenderer
282 // ---------------------------------------------------------
284 class WXDLLIMPEXP_ADV wxDataViewToggleRenderer
: public wxDataViewRenderer
287 wxDataViewToggleRenderer(wxString
const& varianttype
= wxT("bool"), wxDataViewCellMode mode
= wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
290 // inherited functions from wxDataViewRenderer
292 virtual bool Render(void);
297 virtual DataBrowserPropertyType
GetPropertyType(void) const
299 return kDataBrowserCheckboxType
;
304 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleRenderer
)
307 // ---------------------------------------------------------
308 // wxDataViewProgressRenderer
309 // ---------------------------------------------------------
311 class WXDLLIMPEXP_ADV wxDataViewProgressRenderer
: public wxDataViewRenderer
314 wxDataViewProgressRenderer(wxString
const& label
= wxEmptyString
, wxString
const& varianttype
=wxT("long"),
315 wxDataViewCellMode mode
=wxDATAVIEW_CELL_INERT
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
318 // inherited functions from wxDataViewRenderer
320 virtual bool Render(void);
325 virtual DataBrowserPropertyType
GetPropertyType(void) const
327 return kDataBrowserProgressBarType
;
332 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer
)
335 // ---------------------------------------------------------
336 // wxDataViewDateRenderer
337 // ---------------------------------------------------------
339 class WXDLLIMPEXP_ADV wxDataViewDateRenderer
: public wxDataViewRenderer
342 wxDataViewDateRenderer(wxString
const& varianttype
=wxT("datetime"), wxDataViewCellMode mode
=wxDATAVIEW_CELL_ACTIVATABLE
, int align
=wxDVR_DEFAULT_ALIGNMENT
);
345 // inherited functions from wxDataViewRenderer
347 virtual bool Render(void);
352 virtual DataBrowserPropertyType
GetPropertyType(void) const
354 return kDataBrowserDateTimeType
;
359 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer
)
362 // ---------------------------------------------------------
364 // ---------------------------------------------------------
366 class WXDLLIMPEXP_ADV wxDataViewColumn
: public wxDataViewColumnBase
370 // constructors / destructor
372 wxDataViewColumn(wxString
const& title
, wxDataViewRenderer
* renderer
, unsigned int model_column
, int width
=80, wxAlignment align
=wxALIGN_CENTER
,
373 int flags
=wxDATAVIEW_COL_RESIZABLE
);
374 wxDataViewColumn(wxBitmap
const& bitmap
, wxDataViewRenderer
* renderer
, unsigned int model_column
, int width
=80, wxAlignment align
=wxALIGN_CENTER
,
375 int flags
=wxDATAVIEW_COL_RESIZABLE
);
378 // inherited methods from wxDataViewColumnBase
380 virtual wxAlignment
GetAlignment(void) const
382 return this->m_alignment
;
384 virtual int GetFlags(void) const
386 return this->m_flags
;
388 virtual int GetMaxWidth(void) const
390 return this->m_maxWidth
;
392 virtual int GetMinWidth(void) const
394 return this->m_minWidth
;
396 virtual wxString
GetTitle(void) const
398 return this->m_title
;
400 virtual int GetWidth(void) const
402 return this->m_width
;
405 virtual bool IsHidden(void) const
407 return false; // not implemented
409 virtual bool IsResizeable(void) const
411 return ((this->m_flags
& wxDATAVIEW_COL_RESIZABLE
) != 0);
413 virtual bool IsSortable(void) const
415 return ((this->m_flags
& wxDATAVIEW_COL_SORTABLE
) != 0);
417 virtual bool IsSortOrderAscending(void) const
419 return this->m_ascending
;
422 virtual void SetAlignment(wxAlignment align
);
423 virtual void SetBitmap (wxBitmap
const& bitmap
);
424 virtual void SetFlags (int flags
);
425 virtual void SetHidden(bool WXUNUSED(hidden
))
428 virtual void SetMaxWidth (int maxWidth
);
429 virtual void SetMinWidth (int minWidth
);
430 virtual void SetResizeable(bool resizeable
);
431 virtual void SetSortable (bool sortable
);
432 virtual void SetSortOrder (bool ascending
);
433 virtual void SetTitle (wxString
const& title
);
434 virtual void SetWidth (int width
);
439 DataBrowserPropertyID
GetPropertyID(void) const
441 return this->m_propertyID
;
444 void SetPropertyID(DataBrowserPropertyID newID
)
446 this->m_propertyID
= newID
;
454 bool m_ascending
; // sorting order
456 DataBrowserPropertyID m_propertyID
; // each column is identified by its unique property ID (NOT by the column index)
458 int m_flags
; // flags for the column
459 int m_maxWidth
; // maximum width for the column
460 int m_minWidth
; // minimum width for the column
461 int m_width
; // column width
463 wxAlignment m_alignment
; // column header alignment
465 wxString m_title
; // column title
467 // wxWidget internal stuff:
468 DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumn
)
471 // ---------------------------------------------------------
473 // ---------------------------------------------------------
475 class WXDLLIMPEXP_ADV wxDataViewCtrl
: public wxDataViewCtrlBase
478 // Constructors / destructor:
483 wxDataViewCtrl(wxWindow
*parent
, wxWindowID id
, wxPoint
const& pos
= wxDefaultPosition
, wxSize
const& size
= wxDefaultSize
, long style
= 0,
484 wxValidator
const& validator
= wxDefaultValidator
)
487 this->Create(parent
, id
, pos
, size
, style
, validator
);
490 bool Create(wxWindow
*parent
, wxWindowID id
, wxPoint
const& pos
=wxDefaultPosition
, wxSize
const& size
=wxDefaultSize
, long style
=0,
491 wxValidator
const& validator
=wxDefaultValidator
);
493 virtual bool AppendColumn(wxDataViewColumn
* columnPtr
);
495 virtual bool AssociateModel(wxDataViewListModel
* model
);
497 virtual void SetSelection( int row
); // -1 for unselect
498 virtual void SetSelectionRange( unsigned int from
, unsigned int to
);
499 virtual void SetSelections( const wxArrayInt
& aSelections
);
500 virtual void Unselect( unsigned int row
);
502 virtual bool IsSelected( unsigned int row
) const;
503 virtual int GetSelection() const;
504 virtual int GetSelections(wxArrayInt
& aSelections
) const;
506 virtual wxControl
* GetMainWindow(void) // should disappear as it is not of any use for the native implementation
515 // with CG, we need to get the context from an kEventControlDraw event
516 // unfortunately, the DataBrowser callbacks don't provide the context
517 // and we need it, so we need to set/remove it before and after draw
518 // events so we can access it in the callbacks.
519 void MacSetDrawingContext(void* context
)
521 this->m_cgContext
= context
;
523 void* MacGetDrawingContext(void) const
525 return this->m_cgContext
;
528 // reverts the sorting order of the hash map if wxDataViewColumn data and control data do not match;
529 // wxDataViewColumn data will NOT be updated
530 void ReverseSorting(DataBrowserPropertyID columnID
);
534 void OnSize(wxSizeEvent
&event
);
537 // initializing of local variables:
544 wxDataViewListModelNotifier
* m_NotifierPtr
; // the notifier is NOT owned by this class but by the associated model
546 void* m_cgContext
; // pointer to core graphics context
548 // wxWidget internal stuff:
549 DECLARE_DYNAMIC_CLASS(wxDataViewCtrl
)
550 DECLARE_NO_COPY_CLASS(wxDataViewCtrl
)
551 DECLARE_EVENT_TABLE()
555 #endif // __MACDATAVIEWCTRL_H__