1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/osx/dataview.h
3 // Purpose: wxDataViewCtrl native implementation header for OSX
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
10 #ifndef _WX_DATAVIEWCTRL_OSX_H_
11 #define _WX_DATAVIEWCTRL_OSX_H_
13 #ifdef __WXMAC_CLASSIC__
14 # error "Native wxDataViewCtrl for classic environment not defined. Please use generic control."
17 // --------------------------------------------------------
18 // Class declarations to mask native types
19 // --------------------------------------------------------
20 class wxDataViewColumnNativeData
; // class storing environment dependent data for the native implementation
21 class wxDataViewWidgetImpl
; // class used as a common interface for carbon and cocoa implementation
23 // ---------------------------------------------------------
25 // ---------------------------------------------------------
27 class WXDLLIMPEXP_ADV wxDataViewColumn
: public wxDataViewColumnBase
30 // constructors / destructor
31 wxDataViewColumn(const wxString
& title
,
32 wxDataViewRenderer
* renderer
,
33 unsigned int model_column
,
34 int width
= wxDVC_DEFAULT_WIDTH
,
35 wxAlignment align
= wxALIGN_CENTER
,
36 int flags
= wxDATAVIEW_COL_RESIZABLE
);
37 wxDataViewColumn(const wxBitmap
& bitmap
,
38 wxDataViewRenderer
* renderer
,
39 unsigned int model_column
,
40 int width
= wxDVC_DEFAULT_WIDTH
,
41 wxAlignment align
= wxALIGN_CENTER
,
42 int flags
= wxDATAVIEW_COL_RESIZABLE
);
43 virtual ~wxDataViewColumn();
45 // implement wxHeaderColumnBase pure virtual methods
46 virtual wxAlignment
GetAlignment() const { return m_alignment
; }
47 virtual int GetFlags() const { return m_flags
; }
48 virtual int GetMaxWidth() const { return m_maxWidth
; }
49 virtual int GetMinWidth() const { return m_minWidth
; }
50 virtual wxString
GetTitle() const { return m_title
; }
51 virtual int GetWidth() const;
52 virtual bool IsHidden() const { return false; } // TODO
53 virtual bool IsSortOrderAscending() const { return m_ascending
; }
54 virtual bool IsSortKey() const;
56 virtual void SetAlignment (wxAlignment align
);
57 virtual void SetBitmap (wxBitmap
const& bitmap
);
58 virtual void SetFlags (int flags
) { SetIndividualFlags(flags
); }
59 virtual void SetHidden (bool WXUNUSED(hidden
)) { } // TODO
60 virtual void SetMaxWidth (int maxWidth
);
61 virtual void SetMinWidth (int minWidth
);
62 virtual void SetReorderable(bool reorderable
);
63 virtual void SetResizeable (bool resizeable
);
64 virtual void SetSortable (bool sortable
);
65 virtual void SetSortOrder (bool ascending
);
66 virtual void SetTitle (wxString
const& title
);
67 virtual void SetWidth (int width
);
68 virtual void SetAsSortKey (bool sort
= true);
70 // implementation only
71 wxDataViewColumnNativeData
* GetNativeData() const
73 return m_NativeDataPtr
;
76 void SetNativeData(wxDataViewColumnNativeData
* newNativeDataPtr
); // class takes ownership of pointer
77 int GetWidthVariable() const
81 void SetWidthVariable(int NewWidth
)
85 void SetSortOrderVariable(bool NewOrder
)
87 m_ascending
= NewOrder
;
91 // common part of all ctors
92 void InitCommon(int width
, wxAlignment align
, int flags
)
95 m_flags
= flags
& ~wxDATAVIEW_COL_HIDDEN
; // TODO
98 m_width
= width
>= 0 ? width
: wxDVC_DEFAULT_WIDTH
;
102 bool m_ascending
; // sorting order
104 int m_flags
; // flags for the column
105 int m_maxWidth
; // maximum width for the column
106 int m_minWidth
; // minimum width for the column
107 int m_width
; // column width
109 wxAlignment m_alignment
; // column header alignment
111 wxDataViewColumnNativeData
* m_NativeDataPtr
; // storing environment dependent data for the native implementation
113 wxString m_title
; // column title
117 // type definitions related to wxDataViewColumn
119 WX_DEFINE_ARRAY(wxDataViewColumn
*,wxDataViewColumnPtrArrayType
);
121 // ---------------------------------------------------------
123 // ---------------------------------------------------------
124 class WXDLLIMPEXP_ADV wxDataViewCtrl
: public wxDataViewCtrlBase
127 // Constructors / destructor:
132 wxDataViewCtrl(wxWindow
*parent
, wxWindowID id
, const wxPoint
& pos
= wxDefaultPosition
, const wxSize
& size
= wxDefaultSize
, long style
= 0,
133 const wxValidator
& validator
= wxDefaultValidator
)
136 Create(parent
, id
, pos
, size
, style
, validator
);
141 // explicit control creation
142 bool Create(wxWindow
*parent
, wxWindowID id
, const wxPoint
& pos
=wxDefaultPosition
, const wxSize
& size
=wxDefaultSize
, long style
=0,
143 const wxValidator
& validator
=wxDefaultValidator
);
145 virtual wxControl
* GetMainWindow() // not used for the native implementation
150 // inherited methods from wxDataViewCtrlBase:
151 virtual bool AssociateModel(wxDataViewModel
* model
);
153 virtual bool AppendColumn (wxDataViewColumn
* columnPtr
);
154 virtual bool ClearColumns ();
155 virtual bool DeleteColumn (wxDataViewColumn
* columnPtr
);
156 virtual wxDataViewColumn
* GetColumn (unsigned int pos
) const;
157 virtual unsigned int GetColumnCount () const;
158 virtual int GetColumnPosition(const wxDataViewColumn
* columnPtr
) const;
159 virtual wxDataViewColumn
* GetSortingColumn () const;
160 virtual bool InsertColumn (unsigned int pos
, wxDataViewColumn
*col
);
161 virtual bool PrependColumn (wxDataViewColumn
* columnPtr
);
163 virtual void Collapse( const wxDataViewItem
& item
);
164 virtual void EnsureVisible(const wxDataViewItem
& item
, const wxDataViewColumn
* columnPtr
=NULL
);
165 virtual void Expand(const wxDataViewItem
& item
);
166 virtual bool IsExpanded(const wxDataViewItem
& item
) const;
169 virtual unsigned int GetCount() const;
170 virtual wxRect
GetItemRect(const wxDataViewItem
& item
, const wxDataViewColumn
* columnPtr
) const;
171 virtual wxDataViewItem
GetSelection() const;
172 virtual int GetSelections(wxDataViewItemArray
& sel
) const;
174 virtual void HitTest(const wxPoint
& point
, wxDataViewItem
& item
, wxDataViewColumn
*& columnPtr
) const;
176 virtual bool IsSelected(const wxDataViewItem
& item
) const;
178 virtual void SelectAll();
179 virtual void Select(const wxDataViewItem
& item
);
180 virtual void SetSelections(const wxDataViewItemArray
& sel
);
182 virtual void Unselect(const wxDataViewItem
& item
);
183 virtual void UnselectAll();
188 // returns a pointer to the native implementation
189 wxDataViewWidgetImpl
* GetDataViewPeer() const;
191 // adds all children of the passed parent to the control; if 'parentItem' is invalid the root(s) is/are added:
192 void AddChildren(wxDataViewItem
const& parentItem
);
194 // finishes editing of custom items; if no custom item is currently edited the method does nothing
195 void FinishCustomItemEditing();
197 // returns the n-th pointer to a column;
198 // this method is different from GetColumn(unsigned int pos) because here 'n' is not a position in the control but the n-th
199 // position in the internal list/array of column pointers
200 wxDataViewColumn
* GetColumnPtr(size_t n
) const
202 return m_ColumnPtrs
[n
];
204 // returns the current being rendered item of the customized renderer (this item is only valid during editing)
205 wxDataViewItem
const& GetCustomRendererItem() const
207 return m_CustomRendererItem
;
209 // returns a pointer to a customized renderer (this pointer is only valid during editing)
210 wxDataViewCustomRenderer
* GetCustomRendererPtr() const
212 return m_CustomRendererPtr
;
215 // checks if currently a delete process is running
216 bool IsDeleting() const
221 // with CG, we need to get the context from an kEventControlDraw event
222 // unfortunately, the DataBrowser callbacks don't provide the context
223 // and we need it, so we need to set/remove it before and after draw
224 // events so we can access it in the callbacks.
225 void MacSetDrawingContext(void* context
)
227 m_cgContext
= context
;
229 void* MacGetDrawingContext() const
234 // sets the currently being edited item of the custom renderer
235 void SetCustomRendererItem(wxDataViewItem
const& NewItem
)
237 m_CustomRendererItem
= NewItem
;
239 // sets the custom renderer
240 void SetCustomRendererPtr(wxDataViewCustomRenderer
* NewCustomRendererPtr
)
242 m_CustomRendererPtr
= NewCustomRendererPtr
;
244 // sets the flag indicating a deletion process:
245 void SetDeleting(bool deleting
)
247 m_Deleting
= deleting
;
250 virtual wxVisualAttributes
GetDefaultAttributes() const
252 return GetClassDefaultAttributes(GetWindowVariant());
255 static wxVisualAttributes
256 GetClassDefaultAttributes(wxWindowVariant variant
= wxWINDOW_VARIANT_NORMAL
);
259 // inherited methods from wxDataViewCtrlBase
260 virtual void DoSetExpanderColumn();
261 virtual void DoSetIndent();
263 virtual wxSize
DoGetBestSize() const;
266 void OnSize(wxSizeEvent
&event
);
267 void OnMouse(wxMouseEvent
&event
);
270 // initializing of local variables:
276 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
277 // after the actual deletion of the item; then, native callback functions/delegates may try to update data of variables that are already deleted;
278 // if this flag is set all native variable update requests will be ignored
280 void* m_cgContext
; // pointer to core graphics context
282 wxDataViewCustomRenderer
* m_CustomRendererPtr
; // pointer to a valid custom renderer while editing; this class does NOT own the pointer
284 wxDataViewItem m_CustomRendererItem
; // currently edited item by the customrenderer; it is invalid while not editing a custom item
286 wxDataViewColumnPtrArrayType m_ColumnPtrs
; // all column pointers are stored in an array
288 // wxWidget internal stuff:
289 DECLARE_DYNAMIC_CLASS(wxDataViewCtrl
)
290 DECLARE_NO_COPY_CLASS(wxDataViewCtrl
)
291 DECLARE_EVENT_TABLE()
294 #endif // _WX_DATAVIEWCTRL_OSX_H_