X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6154212e512945487e19c393fa3b9119c45bd801..8e4b5265cdd7aeea67c85eb0f50186641f09f7d8:/include/wx/dataview.h diff --git a/include/wx/dataview.h b/include/wx/dataview.h index 6a8ede95ba..2bb0076259 100644 --- a/include/wx/dataview.h +++ b/include/wx/dataview.h @@ -22,6 +22,7 @@ #include "wx/variant.h" #include "wx/listctrl.h" #include "wx/dynarray.h" +#include "wx/icon.h" #if defined(__WXGTK20__) // for testing @@ -74,6 +75,7 @@ public: { m_id = item.m_id; } bool IsOk() const { return m_id != NULL; } void* GetID() const { return m_id; } + operator const void* () const { return m_id; } private: void* m_id; @@ -81,6 +83,8 @@ private: bool operator == (const wxDataViewItem &left, const wxDataViewItem &right); +WX_DEFINE_ARRAY(wxDataViewItem, wxDataViewItemArray); + // --------------------------------------------------------- // wxDataViewModelNotifier // --------------------------------------------------------- @@ -134,8 +138,7 @@ public: // define hierachy virtual wxDataViewItem GetParent( const wxDataViewItem &item ) const = 0; virtual bool IsContainer( const wxDataViewItem &item ) const = 0; - virtual wxDataViewItem GetFirstChild( const wxDataViewItem &parent ) const = 0; - virtual wxDataViewItem GetNextSibling( const wxDataViewItem &item ) const = 0; + virtual unsigned int GetChildren( const wxDataViewItem &item, wxDataViewItemArray &children ) const = 0; // delegated notifiers virtual bool ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item ); @@ -153,7 +156,8 @@ public: // default compare function virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2, unsigned int column, bool ascending ); - + virtual bool HasDefaultCompare() const { return false; } + protected: // the user should not delete this class directly: he should use DecRef() instead! virtual ~wxDataViewModel() { } @@ -165,9 +169,6 @@ protected: // wxDataViewIndexListModel // --------------------------------------------------------- -// use hash map later -WX_DEFINE_ARRAY_PTR( void*, wxDataViewItemHash ); - class wxDataViewIndexListModel: public wxDataViewModel { public: @@ -198,6 +199,7 @@ public: virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2, unsigned int column, bool ascending ); + virtual bool HasDefaultCompare() const { return true; } // implement base methods @@ -207,11 +209,10 @@ public: const wxDataViewItem &item, unsigned int col ); virtual wxDataViewItem GetParent( const wxDataViewItem &item ) const; virtual bool IsContainer( const wxDataViewItem &item ) const; - virtual wxDataViewItem GetFirstChild( const wxDataViewItem &parent ) const; - virtual wxDataViewItem GetNextSibling( const wxDataViewItem &item ) const; + virtual unsigned int GetChildren( const wxDataViewItem &item, wxDataViewItemArray &children ) const; private: - wxDataViewItemHash m_hash; + wxDataViewItemArray m_hash; unsigned int m_lastIndex; }; @@ -320,6 +321,35 @@ protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRendererBase) }; +//----------------------------------------------------------------------------- +// wxDataViewIconText +//----------------------------------------------------------------------------- + +class wxDataViewIconText: public wxObject +{ +public: + wxDataViewIconText( const wxString &text = wxEmptyString, const wxIcon& icon = wxNullIcon ) + { m_icon = icon; m_text = text; } + wxDataViewIconText( const wxDataViewIconText &other ) + { m_icon = other.m_icon; m_text = other.m_text; } + + void SetText( const wxString &text ) { m_text = text; } + wxString GetText() const { return m_text; } + void SetIcon( const wxIcon &icon ) { m_icon = icon; } + const wxIcon &GetIcon() const { return m_icon; } + +private: + wxString m_text; + wxIcon m_icon; + +private: + DECLARE_DYNAMIC_CLASS(wxDataViewIconText) +}; + +bool operator == (const wxDataViewIconText &one, const wxDataViewIconText &two); + +DECLARE_VARIANT_OBJECT(wxDataViewIconText) + // --------------------------------------------------------- // wxDataViewColumnBase // --------------------------------------------------------- @@ -377,7 +407,7 @@ public: virtual bool IsSortOrderAscending() const = 0; const wxBitmap &GetBitmap() const { return m_bitmap; } - unsigned int GetModelColumn() const { return m_model_column; } + unsigned int GetModelColumn() const { return static_cast(m_model_column); } wxDataViewCtrl *GetOwner() { return m_owner; } wxDataViewRenderer* GetRenderer() { return m_renderer; } @@ -396,8 +426,6 @@ protected: // wxDataViewCtrlBase // --------------------------------------------------------- -WX_DECLARE_OBJARRAY(wxDataViewItem, wxDataViewItemArray); - #define wxDV_SINGLE 0x0000 // for convenience #define wxDV_MULTIPLE 0x0001 // can select multiple items @@ -415,66 +443,78 @@ public: wxDataViewModel* GetModel(); // short cuts - bool AppendTextColumn( const wxString &label, unsigned int model_column, + wxDataViewColumn *AppendTextColumn( const wxString &label, unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, wxAlignment align = wxALIGN_CENTER, int flags = wxDATAVIEW_COL_RESIZABLE ); - bool AppendToggleColumn( const wxString &label, unsigned int model_column, + wxDataViewColumn *AppendIconTextColumn( const wxString &label, unsigned int model_column, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, + wxAlignment align = wxALIGN_CENTER, + int flags = wxDATAVIEW_COL_RESIZABLE ); + wxDataViewColumn *AppendToggleColumn( const wxString &label, unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_TOGGLE_DEFAULT_WIDTH, wxAlignment align = wxALIGN_CENTER, int flags = wxDATAVIEW_COL_RESIZABLE ); - bool AppendProgressColumn( const wxString &label, unsigned int model_column, + wxDataViewColumn *AppendProgressColumn( const wxString &label, unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_DEFAULT_WIDTH, wxAlignment align = wxALIGN_CENTER, int flags = wxDATAVIEW_COL_RESIZABLE ); - bool AppendDateColumn( const wxString &label, unsigned int model_column, + wxDataViewColumn *AppendDateColumn( const wxString &label, unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1, wxAlignment align = wxALIGN_CENTER, int flags = wxDATAVIEW_COL_RESIZABLE ); - bool AppendBitmapColumn( const wxString &label, unsigned int model_column, + wxDataViewColumn *AppendBitmapColumn( const wxString &label, unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, wxAlignment align = wxALIGN_CENTER, int flags = wxDATAVIEW_COL_RESIZABLE ); - bool AppendTextColumn( const wxBitmap &label, unsigned int model_column, + wxDataViewColumn *AppendTextColumn( const wxBitmap &label, unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, wxAlignment align = wxALIGN_CENTER, int flags = wxDATAVIEW_COL_RESIZABLE ); - bool AppendToggleColumn( const wxBitmap &label, unsigned int model_column, + wxDataViewColumn *AppendIconTextColumn( const wxBitmap &label, unsigned int model_column, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, + wxAlignment align = wxALIGN_CENTER, + int flags = wxDATAVIEW_COL_RESIZABLE ); + wxDataViewColumn *AppendToggleColumn( const wxBitmap &label, unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_TOGGLE_DEFAULT_WIDTH, wxAlignment align = wxALIGN_CENTER, int flags = wxDATAVIEW_COL_RESIZABLE ); - bool AppendProgressColumn( const wxBitmap &label, unsigned int model_column, + wxDataViewColumn *AppendProgressColumn( const wxBitmap &label, unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_DEFAULT_WIDTH, wxAlignment align = wxALIGN_CENTER, int flags = wxDATAVIEW_COL_RESIZABLE ); - bool AppendDateColumn( const wxBitmap &label, unsigned int model_column, + wxDataViewColumn *AppendDateColumn( const wxBitmap &label, unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1, wxAlignment align = wxALIGN_CENTER, int flags = wxDATAVIEW_COL_RESIZABLE ); - bool AppendBitmapColumn( const wxBitmap &label, unsigned int model_column, + + wxDataViewColumn *AppendBitmapColumn( const wxBitmap &label, unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, wxAlignment align = wxALIGN_CENTER, int flags = wxDATAVIEW_COL_RESIZABLE ); virtual bool AppendColumn( wxDataViewColumn *col ); - virtual unsigned int GetColumnCount() const; - - virtual bool DeleteColumn( unsigned int pos ); - virtual bool ClearColumns(); - virtual wxDataViewColumn* GetColumn( unsigned int pos ); - - void SetExpanderColumn( unsigned int col ) + virtual unsigned int GetColumnCount() const = 0; + virtual wxDataViewColumn* GetColumn( unsigned int pos ) const = 0; + virtual int GetColumnPosition( const wxDataViewColumn *column ) const = 0; + + virtual bool DeleteColumn( wxDataViewColumn *column ) = 0; + virtual bool ClearColumns() = 0; + + void SetExpanderColumn( wxDataViewColumn *col ) { m_expander_column = col ; DoSetExpanderColumn(); } - unsigned int GetExpanderColumn() const + wxDataViewColumn *GetExpanderColumn() const { return m_expander_column; } + + virtual wxDataViewColumn *GetSortingColumn() const = 0; void SetIndent( int indent ) { m_indent = indent ; DoSetIndent(); } int GetIndent() const { return m_indent; } - virtual wxDataViewItem GetSelection() = 0; + virtual wxDataViewItem GetSelection() const = 0; virtual int GetSelections( wxDataViewItemArray & sel ) const = 0; virtual void SetSelections( const wxDataViewItemArray & sel ) = 0; virtual void Select( const wxDataViewItem & item ) = 0; @@ -484,8 +524,13 @@ public: virtual void SelectAll() = 0; virtual void UnselectAll() = 0; + virtual void Expand( const wxDataViewItem & item ) = 0; + virtual void Collapse( const wxDataViewItem & item ) = 0; + virtual void EnsureVisible( const wxDataViewItem & item, - wxDataViewColumn *column = NULL ) = 0; + 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; protected: virtual void DoSetExpanderColumn() = 0 ; @@ -493,8 +538,7 @@ protected: private: wxDataViewModel *m_model; - wxList m_cols; - unsigned int m_expander_column; + wxDataViewColumn *m_expander_column; int m_indent ; protected: @@ -556,16 +600,20 @@ private: }; BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_SELECTED, -1) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_DESELECTED, -1) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, -1) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, -1) DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED, -1) DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED, -1) DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING, -1) DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, -1) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED, -1) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, -1) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, -1) DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, -1) DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED, -1) + // notifications from the model to the control DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_ADDED, -1) DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_DELETED, -1) @@ -582,13 +630,16 @@ typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&); #define wx__DECLARE_DATAVIEWEVT(evt, id, fn) \ wx__DECLARE_EVT1(wxEVT_COMMAND_DATAVIEW_ ## evt, id, wxDataViewEventHandler(fn)) -#define EVT_DATAVIEW_ITEM_SELECTED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_SELECTED, id, fn) -#define EVT_DATAVIEW_ITEM_DESELECTED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_DESELECTED, id, fn) +#define EVT_DATAVIEW_SELECTION_CHANGED(id, fn) wx__DECLARE_DATAVIEWEVT(SELECTION_CHANGED, id, fn) + #define EVT_DATAVIEW_ITEM_ACTIVATED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_ACTIVATED, id, fn) #define EVT_DATAVIEW_ITEM_COLLAPSING(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_COLLAPSING, id, fn) #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_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_COLUMN_HEADER_CLICK(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_HEADER_CLICK, id, fn) #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)