X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/07a84e7bbb3ed346fff59aa3570a1f687a3c4d7b..d7330233fd94f17c0f7e0e1008aa2ff9a72f0409:/include/wx/dataview.h diff --git a/include/wx/dataview.h b/include/wx/dataview.h index c266aaf820..d255228773 100644 --- a/include/wx/dataview.h +++ b/include/wx/dataview.h @@ -24,7 +24,7 @@ #if defined(__WXGTK20__) // for testing - #define wxUSE_GENERICDATAVIEWCTRL 1 + // #define wxUSE_GENERICDATAVIEWCTRL 1 #elif defined(__WXMAC__) #define wxUSE_GENERICDATAVIEWCTRL 1 #else @@ -47,25 +47,31 @@ class WXDLLIMPEXP_ADV wxDataViewRenderer; extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxDataViewCtrlNameStr[]; +// the default width of new (text) columns: +#define wxDVC_DEFAULT_WIDTH 80 + +// the default width of new toggle columns: +#define wxDVC_TOGGLE_DEFAULT_WIDTH 30 + + // --------------------------------------------------------- // wxDataViewModel // --------------------------------------------------------- -class WXDLLIMPEXP_ADV wxDataViewModel: public wxObject +class WXDLLIMPEXP_ADV wxDataViewModel: public wxObjectRefData { public: wxDataViewModel() { } - virtual ~wxDataViewModel() { } protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewModel) + // the user should not delete this class directly: he should use DecRef() instead! + virtual ~wxDataViewModel() { } }; // --------------------------------------------------------- // wxDataViewListModelNotifier // --------------------------------------------------------- - class WXDLLIMPEXP_ADV wxDataViewListModelNotifier: public wxObject { public: @@ -80,6 +86,8 @@ public: virtual bool ValueChanged( unsigned int col, unsigned int row ) = 0; virtual bool RowsReordered( unsigned int *new_order ) = 0; virtual bool Cleared() = 0; + virtual bool Freed() + { m_owner = NULL; return true; } void SetOwner( wxDataViewListModel *owner ) { m_owner = owner; } wxDataViewListModel *GetOwner() { return m_owner; } @@ -107,16 +115,24 @@ public: class WXDLLIMPEXP_ADV wxDataViewListModel: public wxDataViewModel { + friend class WXDLLIMPEXP_ADV wxDataViewCtrl; + friend class WXDLLIMPEXP_ADV wxDataViewCtrlBase; + friend class WXDLLIMPEXP_ADV wxDataViewSortedListModel; + friend class WXDLLIMPEXP_ADV wxDataViewColumnBase; + friend class WXDLLIMPEXP_ADV wxGtkDataViewListModelNotifier; + public: wxDataViewListModel(); - virtual ~wxDataViewListModel(); virtual unsigned int GetNumberOfRows() = 0; virtual unsigned int GetNumberOfCols() = 0; + // return type as reported by wxVariant virtual wxString GetColType( unsigned int col ) = 0; + // get value into a wxVariant virtual void GetValue( wxVariant &variant, unsigned int col, unsigned int row ) = 0; + // set value, call ValueChanged() afterwards! virtual bool SetValue( wxVariant &variant, unsigned int col, unsigned int row ) = 0; @@ -130,20 +146,23 @@ public: virtual bool RowsReordered( unsigned int *new_order ); virtual bool Cleared(); +protected: + // the user should not delete this class directly: he should use DecRef() instead! + virtual ~wxDataViewListModel(); + // Used internally - virtual void AddViewingColumn( wxDataViewColumn *view_column, unsigned int model_column ); - virtual void RemoveViewingColumn( wxDataViewColumn *column ); + void AddViewingColumn( wxDataViewColumn *view_column, unsigned int model_column ); + void RemoveViewingColumn( wxDataViewColumn *column ); - virtual void AddNotifier( wxDataViewListModelNotifier *notifier ); - virtual void RemoveNotifier( wxDataViewListModelNotifier *notifier ); + void AddNotifier( wxDataViewListModelNotifier *notifier ); + void RemoveNotifier( wxDataViewListModelNotifier *notifier ); wxList m_notifiers; wxList m_viewingColumns; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewListModel) }; + + // --------------------------------------------------------- // wxDataViewSortedListModel // --------------------------------------------------------- @@ -155,10 +174,15 @@ WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_SIZE_T(unsigned int, wxDataViewSortedIndexA class WXDLLIMPEXP_ADV wxDataViewSortedListModel: public wxDataViewListModel { + friend class wxDataViewSortedListModelNotifier; + public: wxDataViewSortedListModel( wxDataViewListModel *child ); virtual ~wxDataViewSortedListModel(); + void SetAscending( bool ascending ) { m_ascending = ascending; } + bool GetAscending() { return m_ascending; } + virtual unsigned int GetNumberOfRows(); virtual unsigned int GetNumberOfCols(); // return type as reported by wxVariant @@ -191,12 +215,12 @@ public: virtual void Resort(); private: + bool m_ascending; wxDataViewListModel *m_child; wxDataViewSortedIndexArray m_array; wxDataViewListModelNotifier *m_notifierOnChild; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewSortedListModel) + + void InitStatics(); // BAD }; // --------------------------------------------------------- @@ -256,10 +280,14 @@ enum wxDataViewColumnFlags class WXDLLIMPEXP_ADV wxDataViewColumnBase: public wxObject { public: - wxDataViewColumnBase( const wxString &title, wxDataViewRenderer *renderer, unsigned int model_column, - int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE ); - wxDataViewColumnBase( const wxBitmap &bitmap, wxDataViewRenderer *renderer, unsigned int model_column, - int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE ); + wxDataViewColumnBase( const wxString &title, wxDataViewRenderer *renderer, + unsigned int model_column, int width = wxDVC_DEFAULT_WIDTH, + wxAlignment align = wxALIGN_CENTER, + int flags = wxDATAVIEW_COL_RESIZABLE ); + wxDataViewColumnBase( const wxBitmap &bitmap, wxDataViewRenderer *renderer, + unsigned int model_column, int width = wxDVC_DEFAULT_WIDTH, + wxAlignment align = wxALIGN_CENTER, + int flags = wxDATAVIEW_COL_RESIZABLE ); virtual ~wxDataViewColumnBase(); virtual void SetTitle( const wxString &title ); @@ -267,15 +295,28 @@ public: virtual void SetBitmap( const wxBitmap &bitmap ); virtual const wxBitmap &GetBitmap(); + + virtual void SetAlignment( wxAlignment align ) = 0; + + virtual void SetSortable( bool sortable ) = 0; + virtual bool IsSortable() const + { return (m_flags & wxDATAVIEW_COL_SORTABLE) != 0; } + virtual bool IsResizeable() const + { return (m_flags & wxDATAVIEW_COL_RESIZABLE) != 0; } + virtual bool IsHidden() const + { return (m_flags & wxDATAVIEW_COL_HIDDEN) != 0; } + + virtual void SetSortOrder( bool ascending ) = 0; + virtual bool IsSortOrderAscending() const = 0; wxDataViewRenderer* GetRenderer() { return m_renderer; } unsigned int GetModelColumn() { return m_model_column; } - void SetOwner( wxDataViewCtrl *owner ) { m_owner = owner; } + virtual void SetOwner( wxDataViewCtrl *owner ) { m_owner = owner; } wxDataViewCtrl *GetOwner() { return m_owner; } - virtual int GetWidth() = 0; + virtual int GetWidth() const = 0; private: wxDataViewCtrl *m_ctrl; @@ -307,16 +348,46 @@ public: wxDataViewListModel* GetModel(); // short cuts - virtual bool AppendTextColumn( const wxString &label, unsigned int model_column ); - virtual bool AppendToggleColumn( const wxString &label, unsigned int model_column ); - virtual bool AppendProgressColumn( const wxString &label, unsigned int model_column ); - virtual bool AppendDateColumn( const wxString &label, unsigned int model_column ); - virtual bool AppendBitmapColumn( const wxString &label, unsigned int model_column ); - virtual bool AppendTextColumn( const wxBitmap &label, unsigned int model_column ); - virtual bool AppendToggleColumn( const wxBitmap &label, unsigned int model_column ); - virtual bool AppendProgressColumn( const wxBitmap &label, unsigned int model_column ); - virtual bool AppendDateColumn( const wxBitmap &label, unsigned int model_column ); - virtual bool AppendBitmapColumn( const wxBitmap &label, unsigned int model_column ); + bool 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, + 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, + 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, + 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, + 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, + 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, + 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, + 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, + 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, + 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 GetNumberOfColumns(); @@ -356,7 +427,8 @@ public: m_row(-1), m_model(NULL), m_value(wxNullVariant), - m_editCancelled(false) + m_editCancelled(false), + m_column(NULL) { } wxDataViewEvent(const wxDataViewEvent& event) @@ -365,7 +437,8 @@ public: m_row(event.m_col), m_model(event.m_model), m_value(event.m_value), - m_editCancelled(event.m_editCancelled) + m_editCancelled(event.m_editCancelled), + m_column(event.m_column) { } int GetColumn() const { return m_col; } @@ -377,6 +450,10 @@ public: const wxVariant &GetValue() const { return m_value; } void SetValue( const wxVariant &value ) { m_value = value; } + // for wxEVT_DATAVIEW_COLUMN_HEADER_CLICKED only + void SetDataViewColumn( wxDataViewColumn *col ) { m_column = col; } + wxDataViewColumn *GetDataViewColumn() { return m_column; } + // was label editing canceled? (for wxEVT_COMMAND_DATVIEW_END_LABEL_EDIT only) bool IsEditCancelled() const { return m_editCancelled; } void SetEditCanceled(bool editCancelled) { m_editCancelled = editCancelled; } @@ -389,14 +466,17 @@ protected: wxDataViewModel *m_model; wxVariant m_value; bool m_editCancelled; + wxDataViewColumn *m_column; private: DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxDataViewEvent) }; BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ROW_SELECTED, -1) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ROW_ACTIVATED, -1) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ROW_SELECTED, -1) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ROW_ACTIVATED, -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) END_DECLARE_EVENT_TYPES() typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&); @@ -409,6 +489,8 @@ typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&); #define EVT_DATAVIEW_ROW_SELECTED(id, fn) wx__DECLARE_DATAVIEWEVT(ROW_SELECTED, id, fn) #define EVT_DATAVIEW_ROW_ACTIVATED(id, fn) wx__DECLARE_DATAVIEWEVT(ROW_ACTIVATED, 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) #if defined(wxUSE_GENERICDATAVIEWCTRL)