X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9861f022c31f3f46b694f77cb166b02452a63b6d..60dd3c0916772e3e64fde7c83d359daae02b40a6:/include/wx/generic/dataview.h diff --git a/include/wx/generic/dataview.h b/include/wx/generic/dataview.h index 9f2d6f009f..10e8bbf970 100644 --- a/include/wx/generic/dataview.h +++ b/include/wx/generic/dataview.h @@ -2,6 +2,7 @@ // Name: wx/generic/dataview.h // Purpose: wxDataViewCtrl generic implementation header // Author: Robert Roebling +// Modified By: Bo Yang // Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence @@ -21,9 +22,9 @@ // classes // --------------------------------------------------------- -class WXDLLIMPEXP_ADV wxDataViewCtrl; -class WXDLLIMPEXP_ADV wxDataViewMainWindow; -class WXDLLIMPEXP_ADV wxDataViewHeaderWindow; +class WXDLLIMPEXP_FWD_ADV wxDataViewCtrl; +class WXDLLIMPEXP_FWD_ADV wxDataViewMainWindow; +class WXDLLIMPEXP_FWD_ADV wxDataViewHeaderWindow; // --------------------------------------------------------- // wxDataViewRenderer @@ -51,37 +52,46 @@ public: { return m_mode; } virtual bool Activate( wxRect WXUNUSED(cell), - wxDataViewListModel *WXUNUSED(model), - unsigned int WXUNUSED(col), - unsigned int WXUNUSED(row) ) + wxDataViewModel *WXUNUSED(model), + const wxDataViewItem & WXUNUSED(item), + unsigned int WXUNUSED(col) ) { return false; } virtual bool LeftClick( wxPoint WXUNUSED(cursor), wxRect WXUNUSED(cell), - wxDataViewListModel *WXUNUSED(model), - unsigned int WXUNUSED(col), - unsigned int WXUNUSED(row) ) + wxDataViewModel *WXUNUSED(model), + const wxDataViewItem & WXUNUSED(item), + unsigned int WXUNUSED(col) ) { return false; } virtual bool RightClick( wxPoint WXUNUSED(cursor), wxRect WXUNUSED(cell), - wxDataViewListModel *WXUNUSED(model), - unsigned int WXUNUSED(col), - unsigned int WXUNUSED(row) ) + wxDataViewModel *WXUNUSED(model), + const wxDataViewItem & WXUNUSED(item), + unsigned int WXUNUSED(col) ) { return false; } virtual bool StartDrag( wxPoint WXUNUSED(cursor), wxRect WXUNUSED(cell), - wxDataViewListModel *WXUNUSED(model), - unsigned int WXUNUSED(col), - unsigned int WXUNUSED(row) ) + wxDataViewModel *WXUNUSED(model), + const wxDataViewItem & WXUNUSED(item), + unsigned int WXUNUSED(col) ) { return false; } // Create DC on request virtual wxDC *GetDC(); + + void SetHasAttr( bool set ) { m_hasAttr = set; } + void SetAttr( const wxDataViewItemAttr &attr ) { m_attr = attr; } + bool GetWantsAttr() { return m_wantsAttr; } private: - wxDC *m_dc; - int m_align; - wxDataViewCellMode m_mode; + wxDC *m_dc; + int m_align; + wxDataViewCellMode m_mode; + +protected: + bool m_wantsAttr; + bool m_hasAttr; + wxDataViewItemAttr m_attr; protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRenderer) @@ -98,10 +108,13 @@ public: wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int align = wxDVR_DEFAULT_ALIGNMENT ); + void RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state ); + protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer) }; + // --------------------------------------------------------- // wxDataViewTextRenderer // --------------------------------------------------------- @@ -119,13 +132,35 @@ public: bool Render( wxRect cell, wxDC *dc, int state ); wxSize GetSize() const; -private: - wxString m_text; + // in-place editing + virtual bool HasEditorCtrl(); + virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); + virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ); + +protected: + wxString m_text; protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer) }; +// --------------------------------------------------------- +// wxDataViewTextRendererAttr +// --------------------------------------------------------- + +class WXDLLIMPEXP_ADV wxDataViewTextRendererAttr: public wxDataViewTextRenderer +{ +public: + wxDataViewTextRendererAttr( const wxString &varianttype = wxT("string"), + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + int align = wxDVR_DEFAULT_ALIGNMENT ); + + bool Render( wxRect cell, wxDC *dc, int state ); + +protected: + DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRendererAttr) +}; + // --------------------------------------------------------- // wxDataViewBitmapRenderer // --------------------------------------------------------- @@ -166,8 +201,8 @@ public: bool GetValue( wxVariant &value ) const; bool Render( wxRect cell, wxDC *dc, int state ); - bool Activate( wxRect cell, wxDataViewListModel *model, unsigned int col, - unsigned int row ); + bool Activate( wxRect cell, wxDataViewModel *model, const wxDataViewItem & item, + unsigned int col ); wxSize GetSize() const; private: @@ -203,6 +238,35 @@ private: protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer) }; + +// --------------------------------------------------------- +// wxDataViewIconTextRenderer +// --------------------------------------------------------- + +class wxDataViewIconTextRenderer: public wxDataViewCustomRenderer +{ +public: + wxDataViewIconTextRenderer( const wxString &varianttype = wxT("wxDataViewIconText"), + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + int align = wxDVR_DEFAULT_ALIGNMENT ); + virtual ~wxDataViewIconTextRenderer(); + + bool SetValue( const wxVariant &value ); + bool GetValue( wxVariant &value ) const; + + virtual bool Render( wxRect cell, wxDC *dc, int state ); + virtual wxSize GetSize() const; + + virtual bool HasEditorCtrl() { return true; } + virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); + virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ); + +private: + wxDataViewIconText m_value; + +protected: + DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewIconTextRenderer) +}; // --------------------------------------------------------- // wxDataViewDateRenderer @@ -221,7 +285,7 @@ public: virtual bool Render( wxRect cell, wxDC *dc, int state ); virtual wxSize GetSize() const; virtual bool Activate( wxRect cell, - wxDataViewListModel *model, unsigned int col, unsigned int row ); + wxDataViewModel *model, const wxDataViewItem & item, unsigned int col ); private: wxDateTime m_date; @@ -291,6 +355,7 @@ private: int m_flags; wxAlignment m_align; wxString m_title; + bool m_ascending; void Init(int width); @@ -306,6 +371,9 @@ protected: // wxDataViewCtrl // --------------------------------------------------------- +WX_DECLARE_LIST_WITH_DECL(wxDataViewColumn, wxDataViewColumnList, + class WXDLLIMPEXP_ADV); + class WXDLLIMPEXP_ADV wxDataViewCtrl: public wxDataViewCtrlBase, public wxScrollHelperNative { @@ -318,6 +386,8 @@ class WXDLLIMPEXP_ADV wxDataViewCtrl: public wxDataViewCtrlBase, public: wxDataViewCtrl() : wxScrollHelperNative(this) { + //No sorting column at start, I think + m_sortingColumn = NULL; Init(); } @@ -327,6 +397,7 @@ public: const wxValidator& validator = wxDefaultValidator ) : wxScrollHelperNative(this) { + m_sortingColumn = NULL; Create(parent, id, pos, size, style, validator ); } @@ -339,17 +410,55 @@ public: const wxSize& size = wxDefaultSize, long style = 0, const wxValidator& validator = wxDefaultValidator ); - virtual bool AssociateModel( wxDataViewListModel *model ); + virtual bool AssociateModel( wxDataViewModel *model ); virtual bool AppendColumn( wxDataViewColumn *col ); + virtual bool PrependColumn( wxDataViewColumn *col ); + + virtual void DoSetExpanderColumn(); + virtual void DoSetIndent(); + + virtual unsigned int GetColumnCount() const; + virtual wxDataViewColumn* GetColumn( unsigned int pos ) const; + virtual bool DeleteColumn( wxDataViewColumn *column ); + virtual bool ClearColumns(); + virtual int GetColumnPosition( const wxDataViewColumn *column ) const; - virtual void SetSelection( int row ); // -1 for unselect - virtual void SetSelectionRange( unsigned int from, unsigned int to ); - virtual void SetSelections( const wxArrayInt& aSelections); - virtual void Unselect( unsigned int row ); + virtual wxDataViewColumn *GetSortingColumn() const; - virtual bool IsSelected( unsigned int row ) const; - virtual int GetSelection() const; - virtual int GetSelections(wxArrayInt& aSelections) const; + virtual wxDataViewItem GetSelection() const; + virtual int GetSelections( wxDataViewItemArray & sel ) const; + virtual void SetSelections( const wxDataViewItemArray & sel ); + virtual void Select( const wxDataViewItem & item ); + virtual void Unselect( const wxDataViewItem & item ); + virtual bool IsSelected( const wxDataViewItem & item ) const; + + virtual void SelectAll(); + virtual void UnselectAll(); + + virtual void EnsureVisible( const wxDataViewItem & item, + const wxDataViewColumn *column = NULL ); + virtual void HitTest( const wxPoint & point, wxDataViewItem & item, wxDataViewColumn* &column ) const; + virtual wxRect GetItemRect( const wxDataViewItem & item, const wxDataViewColumn *column = NULL ) const; + + virtual void Expand( const wxDataViewItem & item ); + virtual void Collapse( const wxDataViewItem & item ); + +protected: + virtual int GetSelections( wxArrayInt & sel ) const; + virtual void SetSelections( const wxArrayInt & sel ); + virtual void Select( int row ); + virtual void Unselect( int row ); + virtual bool IsSelected( int row ) const; + virtual void SelectRange( int from, int to ); + virtual void UnselectRange( int from, int to ); + + virtual void EnsureVisible( int row, int column ); + + virtual wxDataViewItem GetItemByRow( unsigned int row ) const; + virtual int GetRowByItem( const wxDataViewItem & item ) const; + + wxDataViewColumn* GetSortingColumn() { return m_sortingColumn; } + void SetSortingColumn( wxDataViewColumn* column ) { m_sortingColumn = column; } public: // utility functions not part of the API @@ -362,10 +471,14 @@ public: // utility functions not part of the API // updates the header window after a change in a column setting void OnColumnChange(); + wxWindow *GetMainWindow() { return (wxWindow*) m_clientArea; } + private: - wxDataViewListModelNotifier *m_notifier; + wxDataViewColumnList m_cols; + wxDataViewModelNotifier *m_notifier; wxDataViewMainWindow *m_clientArea; wxDataViewHeaderWindow *m_headerArea; + wxDataViewColumn* m_sortingColumn; private: void OnSize( wxSizeEvent &event );