X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/15cac64f7564d48c274c6490774a77bd8c09f808..ddadf560da7ec1d7477a40ed5b9277b6468dc5e7:/include/wx/dataview.h diff --git a/include/wx/dataview.h b/include/wx/dataview.h index 29a658f66b..66ef3ea532 100644 --- a/include/wx/dataview.h +++ b/include/wx/dataview.h @@ -16,27 +16,22 @@ #if wxUSE_DATAVIEWCTRL -#include "wx/control.h" #include "wx/textctrl.h" #include "wx/headercol.h" #include "wx/variant.h" #include "wx/dynarray.h" #include "wx/icon.h" -#include "wx/imaglist.h" #include "wx/weakref.h" #include "wx/vector.h" +#include "wx/dataobj.h" -#if !(defined(__WXGTK20__) || defined(__WXMAC__)) || defined(__WXUNIVERSAL__) -// #if !(defined(__WXMAC__)) || defined(__WXUNIVERSAL__) +class WXDLLIMPEXP_FWD_CORE wxImageList; + +#if !(defined(__WXGTK20__) || defined(__WXOSX__)) || defined(__WXUNIVERSAL__) +// #if !(defined(__WXOSX__)) || defined(__WXUNIVERSAL__) #define wxHAS_GENERIC_DATAVIEWCTRL #endif -class WXDLLIMPEXP_FWD_CORE wxDataFormat; - -// ---------------------------------------------------------------------------- -// wxDataViewCtrl flags -// ---------------------------------------------------------------------------- - // ---------------------------------------------------------------------------- // wxDataViewCtrl globals // ---------------------------------------------------------------------------- @@ -50,6 +45,13 @@ class WXDLLIMPEXP_FWD_ADV wxDataViewModelNotifier; extern WXDLLIMPEXP_DATA_ADV(const char) wxDataViewCtrlNameStr[]; +// ---------------------------------------------------------------------------- +// wxDataViewCtrl flags +// ---------------------------------------------------------------------------- + +// size of a wxDataViewRenderer without contents: +#define wxDVC_DEFAULT_RENDERER_SIZE 20 + // the default width of new (text) columns: #define wxDVC_DEFAULT_WIDTH 80 @@ -79,15 +81,21 @@ public: void* GetID() const { return m_id; } operator const void* () const { return m_id; } -#ifdef __WXDEBUG__ - void Print( const wxString &text ) const; -#endif - private: void* m_id; }; -bool operator == (const wxDataViewItem &left, const wxDataViewItem &right); +inline +bool operator==(const wxDataViewItem& left, const wxDataViewItem& right) +{ + return left.GetID() == right.GetID(); +} + +inline +bool operator!=(const wxDataViewItem& left, const wxDataViewItem& right) +{ + return !(left == right); +} WX_DEFINE_ARRAY(wxDataViewItem, wxDataViewItemArray); @@ -146,6 +154,7 @@ public: bool HasColour() const { return m_colour.Ok(); } const wxColour& GetColour() const { return m_colour; } + bool HasFont() const { return m_bold || m_italic; } bool GetBold() const { return m_bold; } bool GetItalic() const { return m_italic; } @@ -163,7 +172,7 @@ private: WX_DECLARE_LIST_WITH_DECL(wxDataViewModelNotifier, wxDataViewModelNotifiers, class WXDLLIMPEXP_ADV); -class WXDLLIMPEXP_ADV wxDataViewModel: public wxObjectRefData +class WXDLLIMPEXP_ADV wxDataViewModel: public wxRefCounter { public: wxDataViewModel(); @@ -177,13 +186,36 @@ public: virtual void GetValue( wxVariant &variant, const wxDataViewItem &item, unsigned int col ) const = 0; - // set value, call ValueChanged() afterwards! - virtual bool SetValue( const wxVariant &variant, - const wxDataViewItem &item, unsigned int col ) = 0; + // return true if the given item has a value to display in the given + // column: this is always true except for container items which by default + // only show their label in the first column (but see HasContainerColumns()) + bool HasValue(const wxDataViewItem& item, unsigned col) const + { + return col == 0 || !IsContainer(item) || HasContainerColumns(item); + } + + // usually ValueChanged() should be called after changing the value in the + // model to update the control, ChangeValue() does it on its own while + // SetValue() does not -- so while you will override SetValue(), you should + // be usually calling ChangeValue() + virtual bool SetValue(const wxVariant &variant, + const wxDataViewItem &item, + unsigned int col) = 0; + + bool ChangeValue(const wxVariant& variant, + const wxDataViewItem& item, + unsigned int col) + { + return SetValue(variant, item, col) && ValueChanged(item, col); + } // Get text attribute, return false of default attributes should be used - virtual bool GetAttr( const wxDataViewItem &WXUNUSED(item), unsigned int WXUNUSED(col), wxDataViewItemAttr &WXUNUSED(attr) ) - { return false; } + virtual bool GetAttr(const wxDataViewItem &WXUNUSED(item), + unsigned int WXUNUSED(col), + wxDataViewItemAttr &WXUNUSED(attr)) const + { + return false; + } // define hierachy virtual wxDataViewItem GetParent( const wxDataViewItem &item ) const = 0; @@ -211,7 +243,7 @@ public: // default compare function virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2, - unsigned int column, bool ascending ); + unsigned int column, bool ascending ) const; virtual bool HasDefaultCompare() const { return false; } // internal @@ -224,24 +256,78 @@ protected: wxDataViewModelNotifiers m_notifiers; }; +// ---------------------------------------------------------------------------- +// wxDataViewListModel: a model of a list, i.e. flat data structure without any +// branches/containers, used as base class by wxDataViewIndexListModel and +// wxDataViewVirtualListModel +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_ADV wxDataViewListModel : public wxDataViewModel +{ +public: + // derived classes should override these methods instead of + // {Get,Set}Value() and GetAttr() inherited from the base class + + virtual void GetValueByRow(wxVariant &variant, + unsigned row, unsigned col) const = 0; + + virtual bool SetValueByRow(const wxVariant &variant, + unsigned row, unsigned col) = 0; + + virtual bool + GetAttrByRow(unsigned WXUNUSED(row), unsigned WXUNUSED(col), + wxDataViewItemAttr &WXUNUSED(attr)) const + { + return false; + } + + + // helper methods provided by list models only + virtual unsigned GetRow( const wxDataViewItem &item ) const = 0; + + + // implement some base class pure virtual directly + virtual wxDataViewItem + GetParent( const wxDataViewItem & WXUNUSED(item) ) const + { + // items never have valid parent in this model + return wxDataViewItem(); + } + + virtual bool IsContainer( const wxDataViewItem &item ) const + { + // only the invisible (and invalid) root item has children + return !item.IsOk(); + } + + // and implement some others by forwarding them to our own ones + virtual void GetValue( wxVariant &variant, + const wxDataViewItem &item, unsigned int col ) const + { + GetValueByRow(variant, GetRow(item), col); + } + + virtual bool SetValue( const wxVariant &variant, + const wxDataViewItem &item, unsigned int col ) + { + return SetValueByRow( variant, GetRow(item), col ); + } + + virtual bool GetAttr(const wxDataViewItem &item, unsigned int col, + wxDataViewItemAttr &attr) const + { + return GetAttrByRow( GetRow(item), col, attr ); + } +}; + // --------------------------------------------------------- // wxDataViewIndexListModel // --------------------------------------------------------- -class WXDLLIMPEXP_ADV wxDataViewIndexListModel: public wxDataViewModel +class WXDLLIMPEXP_ADV wxDataViewIndexListModel: public wxDataViewListModel { public: wxDataViewIndexListModel( unsigned int initial_size = 0 ); - ~wxDataViewIndexListModel(); - - virtual void GetValueByRow( wxVariant &variant, - unsigned int row, unsigned int col ) const = 0; - - virtual bool SetValueByRow( const wxVariant &variant, - unsigned int row, unsigned int col ) = 0; - - virtual bool GetAttrByRow( unsigned int WXUNUSED(row), unsigned int WXUNUSED(col), wxDataViewItemAttr &WXUNUSED(attr) ) - { return false; } void RowPrepended(); void RowInserted( unsigned int before ); @@ -254,33 +340,23 @@ public: // convert to/from row/wxDataViewItem - unsigned int GetRow( const wxDataViewItem &item ) const; + virtual unsigned GetRow( const wxDataViewItem &item ) const; wxDataViewItem GetItem( unsigned int row ) const; // compare based on index virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2, - unsigned int column, bool ascending ); + unsigned int column, bool ascending ) const; virtual bool HasDefaultCompare() const; // implement base methods - - virtual void GetValue( wxVariant &variant, - const wxDataViewItem &item, unsigned int col ) const; - virtual bool SetValue( const wxVariant &variant, - const wxDataViewItem &item, unsigned int col ); - virtual bool GetAttr( const wxDataViewItem &item, unsigned int col, wxDataViewItemAttr &attr ); - virtual wxDataViewItem GetParent( const wxDataViewItem &item ) const; - virtual bool IsContainer( const wxDataViewItem &item ) const; virtual unsigned int GetChildren( const wxDataViewItem &item, wxDataViewItemArray &children ) const; - // internal - virtual bool IsVirtualListModel() const { return false; } - unsigned int GetLastIndex() const { return m_lastIndex; } + unsigned int GetCount() const { return m_hash.GetCount(); } private: wxDataViewItemArray m_hash; - unsigned int m_lastIndex; + unsigned int m_nextFreeID; bool m_ordered; }; @@ -293,20 +369,10 @@ private: typedef wxDataViewIndexListModel wxDataViewVirtualListModel; #else -class WXDLLIMPEXP_ADV wxDataViewVirtualListModel: public wxDataViewModel +class WXDLLIMPEXP_ADV wxDataViewVirtualListModel: public wxDataViewListModel { public: wxDataViewVirtualListModel( unsigned int initial_size = 0 ); - ~wxDataViewVirtualListModel(); - - virtual void GetValueByRow( wxVariant &variant, - unsigned int row, unsigned int col ) const = 0; - - virtual bool SetValueByRow( const wxVariant &variant, - unsigned int row, unsigned int col ) = 0; - - virtual bool GetAttrByRow( unsigned int WXUNUSED(row), unsigned int WXUNUSED(col), wxDataViewItemAttr &WXUNUSED(attr) ) - { return false; } void RowPrepended(); void RowInserted( unsigned int before ); @@ -319,33 +385,25 @@ public: // convert to/from row/wxDataViewItem - unsigned int GetRow( const wxDataViewItem &item ) const; + virtual unsigned GetRow( const wxDataViewItem &item ) const; wxDataViewItem GetItem( unsigned int row ) const; // compare based on index virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2, - unsigned int column, bool ascending ); + unsigned int column, bool ascending ) const; virtual bool HasDefaultCompare() const; // implement base methods - - virtual void GetValue( wxVariant &variant, - const wxDataViewItem &item, unsigned int col ) const; - virtual bool SetValue( const wxVariant &variant, - const wxDataViewItem &item, unsigned int col ); - virtual bool GetAttr( const wxDataViewItem &item, unsigned int col, wxDataViewItemAttr &attr ); - virtual wxDataViewItem GetParent( const wxDataViewItem &item ) const; - virtual bool IsContainer( const wxDataViewItem &item ) const; virtual unsigned int GetChildren( const wxDataViewItem &item, wxDataViewItemArray &children ) const; + unsigned int GetCount() const { return m_size; } + // internal virtual bool IsVirtualListModel() const { return true; } - unsigned int GetLastIndex() const { return m_lastIndex; } private: - wxDataViewItemArray m_hash; - unsigned int m_lastIndex; + unsigned int m_size; bool m_ordered; }; #endif @@ -403,7 +461,7 @@ public: wxDataViewRendererBase( const wxString &varianttype, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int alignment = wxDVR_DEFAULT_ALIGNMENT ); - ~wxDataViewRendererBase(); + virtual ~wxDataViewRendererBase(); virtual bool Validate( wxVariant& WXUNUSED(value) ) { return true; } @@ -427,8 +485,16 @@ public: virtual void SetAlignment( int align ) = 0; virtual int GetAlignment() const = 0; + // enable or disable (if called with wxELLIPSIZE_NONE) replacing parts of + // the item text (hence this only makes sense for renderers showing + // text...) with ellipsis in order to make it fit the column width + virtual void EnableEllipsize(wxEllipsizeMode mode = wxELLIPSIZE_MIDDLE) = 0; + void DisableEllipsize() { EnableEllipsize(wxELLIPSIZE_NONE); } + + virtual wxEllipsizeMode GetEllipsizeMode() const = 0; + // in-place editing - virtual bool HasEditorCtrl() + virtual bool HasEditorCtrl() const { return false; } virtual wxControl* CreateEditorCtrl(wxWindow * WXUNUSED(parent), wxRect WXUNUSED(labelRect), @@ -484,7 +550,18 @@ private: DECLARE_DYNAMIC_CLASS(wxDataViewIconText) }; -bool operator == (const wxDataViewIconText &one, const wxDataViewIconText &two); +inline +bool operator==(const wxDataViewIconText& left, const wxDataViewIconText& right) +{ + return left.GetText() == right.GetText() && + left.GetIcon().IsSameAs(right.GetIcon()); +} + +inline +bool operator!=(const wxDataViewIconText& left, const wxDataViewIconText& right) +{ + return !(left == right); +} DECLARE_VARIANT_OBJECT_EXPORTED(wxDataViewIconText, WXDLLIMPEXP_ADV) @@ -567,11 +644,17 @@ public: wxDataViewCtrlBase(); virtual ~wxDataViewCtrlBase(); + // model + // ----- + virtual bool AssociateModel( wxDataViewModel *model ); wxDataViewModel* GetModel(); const wxDataViewModel* GetModel() const; - // short cuts + + // column management + // ----------------- + wxDataViewColumn *PrependTextColumn( const wxString &label, unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, wxAlignment align = wxALIGN_NOT, @@ -670,7 +753,6 @@ public: wxAlignment align = wxALIGN_CENTER, int flags = wxDATAVIEW_COL_RESIZABLE ); - virtual bool PrependColumn( wxDataViewColumn *col ); virtual bool InsertColumn( unsigned int pos, wxDataViewColumn *col ); virtual bool AppendColumn( wxDataViewColumn *col ); @@ -689,6 +771,10 @@ public: virtual wxDataViewColumn *GetSortingColumn() const = 0; + + // items management + // ---------------- + void SetIndent( int indent ) { m_indent = indent ; DoSetIndent(); } int GetIndent() const @@ -713,8 +799,27 @@ public: const wxDataViewColumn *column = NULL ) = 0; virtual void HitTest( const wxPoint & point, wxDataViewItem &item, wxDataViewColumn* &column ) const = 0; virtual wxRect GetItemRect( const wxDataViewItem & item, const wxDataViewColumn *column = NULL ) const = 0; - - virtual bool EnableDragSource( const wxDataFormat &format ); + +#if wxUSE_DRAG_AND_DROP + virtual bool EnableDragSource(const wxDataFormat& WXUNUSED(format)) + { return false; } + virtual bool EnableDropTarget(const wxDataFormat& WXUNUSED(format)) + { return false; } +#endif // wxUSE_DRAG_AND_DROP + + // define control visual attributes + // -------------------------------- + + virtual wxVisualAttributes GetDefaultAttributes() const + { + return GetClassDefaultAttributes(GetWindowVariant()); + } + + static wxVisualAttributes + GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL) + { + return wxControl::GetCompositeControlsDefaultAttributes(variant); + } protected: virtual void DoSetExpanderColumn() = 0 ; @@ -744,8 +849,13 @@ public: m_value(wxNullVariant), m_column(NULL), m_pos(-1,-1), - m_isDraggable(false), - m_dragDataSize(-1) + m_cacheFrom(0), + m_cacheTo(0) +#if wxUSE_DRAG_AND_DROP + , m_dataObject(NULL), + m_dataBuffer(NULL), + m_dataSize(0) +#endif { } wxDataViewEvent(const wxDataViewEvent& event) @@ -756,8 +866,14 @@ public: m_value(event.m_value), m_column(event.m_column), m_pos(m_pos), - m_isDraggable(event.m_isDraggable), - m_dragDataSize(event.m_dragDataSize) + m_cacheFrom(event.m_cacheFrom), + m_cacheTo(event.m_cacheTo) +#if wxUSE_DRAG_AND_DROP + , m_dataObject(event.m_dataObject), + m_dataFormat(event.m_dataFormat), + m_dataBuffer(event.m_dataBuffer), + m_dataSize(event.m_dataSize) +#endif { } wxDataViewItem GetItem() const { return m_item; } @@ -780,15 +896,25 @@ public: wxPoint GetPosition() const { return m_pos; } void SetPosition( int x, int y ) { m_pos.x = x; m_pos.y = y; } - // For Drag operations - bool IsDraggable() const { return m_isDraggable; } - void SetDraggable( bool can_drag = true ) { m_isDraggable = can_drag; } - int GetDragDataSize() const { return m_dragDataSize; } - void SetDragDataSize( int size ) { m_dragDataSize = size; } - void* GetDragDataBuffer() const { return m_dragDataBuffer; } - void SetDragDataBuffer( void *buffer ) { m_dragDataBuffer = buffer; } - wxDataFormat GetDataFormat() const { return m_dataFormat; } + // For wxEVT_COMMAND_DATAVIEW_CACHE_HINT + int GetCacheFrom() const { return m_cacheFrom; } + int GetCacheTo() const { return m_cacheTo; } + void SetCache(int from, int to) { m_cacheFrom = from; m_cacheTo = to; } + + +#if wxUSE_DRAG_AND_DROP + // For drag operations + void SetDataObject( wxDataObject *obj ) { m_dataObject = obj; } + wxDataObject *GetDataObject() const { return m_dataObject; } + + // For drop operations void SetDataFormat( const wxDataFormat &format ) { m_dataFormat = format; } + wxDataFormat GetDataFormat() const { return m_dataFormat; } + void SetDataSize( size_t size ) { m_dataSize = size; } + size_t GetDataSize() const { return m_dataSize; } + void SetDataBuffer( void* buf ) { m_dataBuffer = buf;} + void *GetDataBuffer() const { return m_dataBuffer; } +#endif // wxUSE_DRAG_AND_DROP virtual wxEvent *Clone() const { return new wxDataViewEvent(*this); } @@ -799,37 +925,45 @@ protected: wxVariant m_value; wxDataViewColumn *m_column; wxPoint m_pos; - - bool m_isDraggable; - int m_dragDataSize; - void *m_dragDataBuffer; + int m_cacheFrom; + int m_cacheTo; + +#if wxUSE_DRAG_AND_DROP + wxDataObject *m_dataObject; + wxDataFormat m_dataFormat; + void* m_dataBuffer; + size_t m_dataSize; +#endif // wxUSE_DRAG_AND_DROP private: DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxDataViewEvent) }; -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEvent ) +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEvent ); -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, wxDataViewEvent ) +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_START_EDITING, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, wxDataViewEvent ); -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, wxDataViewEvent ) +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, wxDataViewEvent ); -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_REORDERED, wxDataViewEvent ) +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_REORDERED, wxDataViewEvent ); -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_DRAGGABLE, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_GET_DRAG_DATA_SIZE, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_GET_DRAG_DATA, wxDataViewEvent ) +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_CACHE_HINT, wxDataViewEvent ); + +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_DROP_POSSIBLE, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_DROP, wxDataViewEvent ); typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&); @@ -846,6 +980,7 @@ typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&); #define EVT_DATAVIEW_ITEM_COLLAPSED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_COLLAPSED, id, fn) #define EVT_DATAVIEW_ITEM_EXPANDING(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_EXPANDING, id, fn) #define EVT_DATAVIEW_ITEM_EXPANDED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_EXPANDED, id, fn) +#define EVT_DATAVIEW_ITEM_START_EDITING(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_START_EDITING, id, fn) #define EVT_DATAVIEW_ITEM_EDITING_STARTED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_EDITING_STARTED, id, fn) #define EVT_DATAVIEW_ITEM_EDITING_DONE(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_EDITING_DONE, id, fn) #define EVT_DATAVIEW_ITEM_VALUE_CHANGED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_VALUE_CHANGED, id, fn) @@ -856,10 +991,11 @@ typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&); #define EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICKED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_HEADER_RIGHT_CLICK, id, fn) #define EVT_DATAVIEW_COLUMN_SORTED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_SORTED, id, fn) #define EVT_DATAVIEW_COLUMN_REORDERED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_REORDERED, id, fn) +#define EVT_DATAVIEW_CACHE_HINT(id, fn) wx__DECLARE_DATAVIEWEVT(CACHE_HINT, id, fn) -#define EVT_DATAVIEW_ITEM_DRAGGABLE(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_DRAGGABLE, id, fn) -#define EVT_DATAVIEW_ITEM_GET_DRAG_DATA_SIZE(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_GET_DRAG_DATA_SIZE, id, fn) -#define EVT_DATAVIEW_ITEM_GET_DRAG_DATA(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_GET_DRAG_DATA, id, fn) +#define EVT_DATAVIEW_ITEM_BEGIN_DRAG(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_BEGIN_DRAG, id, fn) +#define EVT_DATAVIEW_ITEM_DROP_POSSIBLE(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_DROP_POSSIBLE, id, fn) +#define EVT_DATAVIEW_ITEM_DROP(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_DROP, id, fn) #ifdef wxHAS_GENERIC_DATAVIEWCTRL // this symbol doesn't follow the convention for wxUSE_XXX symbols which @@ -887,7 +1023,7 @@ public: wxDataViewSpinRenderer( int min, int max, wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, int alignment = wxDVR_DEFAULT_ALIGNMENT ); - virtual bool HasEditorCtrl() { return true; } + virtual bool HasEditorCtrl() const { return true; } virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ); virtual bool Render( wxRect rect, wxDC *dc, int state ); @@ -900,7 +1036,7 @@ private: long m_min,m_max; }; -#if defined(wxHAS_GENERIC_DATAVIEWCTRL) || defined(__WXMAC__) +#if defined(wxHAS_GENERIC_DATAVIEWCTRL) || defined(__WXOSX_CARBON__) // ------------------------------------- // wxDataViewChoiceRenderer @@ -912,7 +1048,7 @@ public: wxDataViewChoiceRenderer( const wxArrayString &choices, wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, int alignment = wxDVR_DEFAULT_ALIGNMENT ); - virtual bool HasEditorCtrl() { return true; } + virtual bool HasEditorCtrl() const { return true; } virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ); virtual bool Render( wxRect rect, wxDC *dc, int state ); @@ -927,6 +1063,10 @@ private: #endif +// this class is obsolete, its functionality was merged in +// wxDataViewTextRenderer itself now, don't use it any more +#define wxDataViewTextRendererAttr wxDataViewTextRenderer + //----------------------------------------------------------------------------- // wxDataViewListStore //----------------------------------------------------------------------------- @@ -947,9 +1087,9 @@ public: { if (m_data) delete m_data; m_data = data; } wxClientData *GetData() const { return m_data; } - + wxVector m_values; - + private: wxClientData *m_data; }; @@ -964,11 +1104,11 @@ public: void PrependColumn( const wxString &varianttype ); void InsertColumn( unsigned int pos, const wxString &varianttype ); void AppendColumn( const wxString &varianttype ); - + void AppendItem( const wxVector &values, wxClientData *data = NULL ); void PrependItem( const wxVector &values, wxClientData *data = NULL ); void InsertItem( unsigned int row, const wxVector &values, wxClientData *data = NULL ); - void DeleteItem( unsigned pos ); + void DeleteItem( unsigned int pos ); void DeleteAllItems(); // override base virtuals @@ -983,7 +1123,7 @@ public: virtual bool SetValueByRow( const wxVariant &value, unsigned int row, unsigned int col ); - + public: wxVector m_data; wxArrayString m_cols; @@ -1014,23 +1154,23 @@ public: bool AppendColumn( wxDataViewColumn *column, const wxString &varianttype ); bool PrependColumn( wxDataViewColumn *column, const wxString &varianttype ); bool InsertColumn( unsigned int pos, wxDataViewColumn *column, const wxString &varianttype ); - + // overridden from base class virtual bool PrependColumn( wxDataViewColumn *col ); virtual bool InsertColumn( unsigned int pos, wxDataViewColumn *col ); virtual bool AppendColumn( wxDataViewColumn *col ); - wxDataViewColumn *AppendTextColumn( const wxString &label, - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + wxDataViewColumn *AppendTextColumn( const wxString &label, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, wxAlignment align = wxALIGN_LEFT, int flags = wxDATAVIEW_COL_RESIZABLE ); - wxDataViewColumn *AppendToggleColumn( const wxString &label, - wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, + wxDataViewColumn *AppendToggleColumn( const wxString &label, + wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1, wxAlignment align = wxALIGN_LEFT, int flags = wxDATAVIEW_COL_RESIZABLE ); - wxDataViewColumn *AppendProgressColumn( const wxString &label, - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + wxDataViewColumn *AppendProgressColumn( const wxString &label, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, wxAlignment align = wxALIGN_LEFT, int flags = wxDATAVIEW_COL_RESIZABLE ); - wxDataViewColumn *AppendIconTextColumn( const wxString &label, - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + wxDataViewColumn *AppendIconTextColumn( const wxString &label, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, wxAlignment align = wxALIGN_LEFT, int flags = wxDATAVIEW_COL_RESIZABLE ); void AppendItem( const wxVector &values, wxClientData *data = NULL ) @@ -1045,7 +1185,7 @@ public: { GetStore()->DeleteAllItems(); } void SetValue( const wxVariant &value, unsigned int row, unsigned int col ) - { GetStore()->SetValueByRow( value, row, col ); + { GetStore()->SetValueByRow( value, row, col ); GetStore()->RowValueChanged( row, col); } void GetValue( wxVariant &value, unsigned int row, unsigned int col ) { GetStore()->GetValueByRow( value, row, col ); } @@ -1196,7 +1336,7 @@ public: virtual unsigned int GetChildren( const wxDataViewItem &item, wxDataViewItemArray &children ) const; virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2, - unsigned int column, bool ascending ); + unsigned int column, bool ascending ) const; virtual bool HasDefaultCompare() const { return true; } @@ -1218,17 +1358,27 @@ public: class WXDLLIMPEXP_ADV wxDataViewTreeCtrl: public wxDataViewCtrl { public: - wxDataViewTreeCtrl(); - wxDataViewTreeCtrl( wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = wxDV_NO_HEADER | wxDV_ROW_LINES, - const wxValidator& validator = wxDefaultValidator ); - ~wxDataViewTreeCtrl(); + wxDataViewTreeCtrl() { Init(); } + wxDataViewTreeCtrl(wxWindow *parent, + wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxDV_NO_HEADER | wxDV_ROW_LINES, + const wxValidator& validator = wxDefaultValidator) + { + Init(); - bool Create( wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = wxDV_NO_HEADER | wxDV_ROW_LINES, - const wxValidator& validator = wxDefaultValidator ); + Create(parent, id, pos, size, style, validator); + } + + virtual ~wxDataViewTreeCtrl(); + + bool Create(wxWindow *parent, + wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxDV_NO_HEADER | wxDV_ROW_LINES, + const wxValidator& validator = wxDefaultValidator); wxDataViewTreeStore *GetStore() { return (wxDataViewTreeStore*) GetModel(); } @@ -1283,7 +1433,12 @@ public: void OnSize( wxSizeEvent &event ); private: - wxImageList *m_imageList; + void Init() + { + m_imageList = NULL; + } + + wxImageList *m_imageList; private: DECLARE_EVENT_TABLE()