X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/19723525ce7b6cc80b5c642fef6bbd46266b6071..2feacb6eb30247634085f45c0a69014ef89772e9:/include/wx/gtk/dataview.h diff --git a/include/wx/gtk/dataview.h b/include/wx/gtk/dataview.h index 402720cce9..589da74a9a 100644 --- a/include/wx/gtk/dataview.h +++ b/include/wx/gtk/dataview.h @@ -12,22 +12,23 @@ #include "wx/list.h" -// --------------------------------------------------------- +// --------------------------------------------------------- // classes -// --------------------------------------------------------- +// --------------------------------------------------------- class WXDLLIMPEXP_FWD_ADV wxDataViewCtrl; class WXDLLIMPEXP_FWD_ADV wxDataViewCtrlInternal; +typedef struct _GtkTreeViewColumn GtkTreeViewColumn; -// --------------------------------------------------------- +// --------------------------------------------------------- // wxDataViewRenderer -// --------------------------------------------------------- +// --------------------------------------------------------- class WXDLLIMPEXP_ADV wxDataViewRenderer: public wxDataViewRendererBase { public: - wxDataViewRenderer( const wxString &varianttype, + wxDataViewRenderer( const wxString &varianttype, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int align = wxDVR_DEFAULT_ALIGNMENT ); @@ -37,102 +38,130 @@ public: virtual void SetAlignment( int align ); virtual int GetAlignment() const; - // implementation + virtual void EnableEllipsize(wxEllipsizeMode mode = wxELLIPSIZE_MIDDLE); + virtual wxEllipsizeMode GetEllipsizeMode() const; + + // GTK-specific implementation + // --------------------------- + + // pack the GTK cell renderers used by this renderer to the given column + // + // by default only a single m_renderer is used but some renderers use more + // than one GTK cell renderer + virtual void GtkPackIntoColumn(GtkTreeViewColumn *column); + + // called when the cell value was edited by user with the new value + // + // it validates the new value and notifies the model about the change by + // calling GtkOnCellChanged() if it was accepted + void GtkOnTextEdited(const gchar *itempath, const wxString& value); + GtkCellRenderer* GetGtkHandle() { return m_renderer; } void GtkInitHandlers(); - virtual bool GtkHasAttributes() { return false; } void GtkUpdateAlignment(); + bool GtkIsUsingDefaultAttrs() const { return m_usingDefaultAttrs; } + void GtkSetUsingDefaultAttrs(bool def) { m_usingDefaultAttrs = def; } + protected: + virtual void GtkOnCellChanged(const wxVariant& value, + const wxDataViewItem& item, + unsigned col); + + GtkCellRenderer *m_renderer; int m_alignment; + // true if we hadn't changed any visual attributes or restored them since + // doing this + bool m_usingDefaultAttrs; + protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRenderer) }; -// --------------------------------------------------------- +// --------------------------------------------------------- // wxDataViewTextRenderer -// --------------------------------------------------------- +// --------------------------------------------------------- class WXDLLIMPEXP_ADV wxDataViewTextRenderer: public wxDataViewRenderer { public: - wxDataViewTextRenderer( const wxString &varianttype = wxT("string"), + wxDataViewTextRenderer( const wxString &varianttype = wxT("string"), wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int align = wxDVR_DEFAULT_ALIGNMENT ); - bool SetValue( const wxVariant &value ); - bool GetValue( wxVariant &value ) const; + virtual bool SetValue( const wxVariant &value ) + { + return SetTextValue(value); + } - void SetAlignment( int align ); + virtual bool GetValue( wxVariant &value ) const + { + wxString str; + if ( !GetTextValue(str) ) + return false; -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer) -}; - -// --------------------------------------------------------- -// wxDataViewTextRendererAttr -// --------------------------------------------------------- + value = str; -class WXDLLIMPEXP_ADV wxDataViewTextRendererAttr: public wxDataViewTextRenderer -{ -public: - wxDataViewTextRendererAttr( const wxString &varianttype = wxT("string"), - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, - int align = wxDVR_DEFAULT_ALIGNMENT ); + return true; + } + + virtual void SetAlignment( int align ); - // implementation - bool GtkHasAttributes() { return true; } - protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRendererAttr) + // implementation of Set/GetValue() + bool SetTextValue(const wxString& str); + bool GetTextValue(wxString& str) const; + + + DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer) }; - -// --------------------------------------------------------- + +// --------------------------------------------------------- // wxDataViewBitmapRenderer -// --------------------------------------------------------- +// --------------------------------------------------------- class WXDLLIMPEXP_ADV wxDataViewBitmapRenderer: public wxDataViewRenderer { public: - wxDataViewBitmapRenderer( const wxString &varianttype = wxT("wxBitmap"), + wxDataViewBitmapRenderer( const wxString &varianttype = wxT("wxBitmap"), wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int align = wxDVR_DEFAULT_ALIGNMENT ); bool SetValue( const wxVariant &value ); bool GetValue( wxVariant &value ) const; - + protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer) }; - -// --------------------------------------------------------- + +// --------------------------------------------------------- // wxDataViewToggleRenderer -// --------------------------------------------------------- +// --------------------------------------------------------- class WXDLLIMPEXP_ADV wxDataViewToggleRenderer: public wxDataViewRenderer { public: - wxDataViewToggleRenderer( const wxString &varianttype = wxT("bool"), + wxDataViewToggleRenderer( const wxString &varianttype = wxT("bool"), wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int align = wxDVR_DEFAULT_ALIGNMENT ); bool SetValue( const wxVariant &value ); bool GetValue( wxVariant &value ) const; - + protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleRenderer) }; - -// --------------------------------------------------------- + +// --------------------------------------------------------- // wxDataViewCustomRenderer -// --------------------------------------------------------- +// --------------------------------------------------------- class WXDLLIMPEXP_ADV wxDataViewCustomRenderer: public wxDataViewRenderer { public: - wxDataViewCustomRenderer( const wxString &varianttype = wxT("string"), + wxDataViewCustomRenderer( const wxString &varianttype = wxT("string"), wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int align = wxDVR_DEFAULT_ALIGNMENT, bool no_init = false ); @@ -140,25 +169,25 @@ public: virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0; - + void RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state ); - + virtual wxSize GetSize() const = 0; virtual bool Activate( wxRect WXUNUSED(cell), - wxDataViewModel *WXUNUSED(model), const wxDataViewItem &WXUNUSED(item), unsigned int WXUNUSED(col) ) + wxDataViewModel *WXUNUSED(model), const wxDataViewItem &WXUNUSED(item), unsigned int WXUNUSED(col) ) { return false; } - virtual bool LeftClick( wxPoint WXUNUSED(cursor), wxRect WXUNUSED(cell), - wxDataViewModel *WXUNUSED(model), const wxDataViewItem &WXUNUSED(item), unsigned int WXUNUSED(col) ) + virtual bool LeftClick( wxPoint WXUNUSED(cursor), wxRect WXUNUSED(cell), + wxDataViewModel *WXUNUSED(model), const wxDataViewItem &WXUNUSED(item), unsigned int WXUNUSED(col) ) { return false; } - virtual bool StartDrag( wxPoint WXUNUSED(cursor), wxRect WXUNUSED(cell), - wxDataViewModel *WXUNUSED(model), const wxDataViewItem &WXUNUSED(item), unsigned int WXUNUSED(col) ) + virtual bool StartDrag( wxPoint WXUNUSED(cursor), wxRect WXUNUSED(cell), + wxDataViewModel *WXUNUSED(model), const wxDataViewItem &WXUNUSED(item), unsigned int WXUNUSED(col) ) { return false; } - + // Create DC on request virtual wxDC *GetDC(); - + protected: @@ -167,8 +196,8 @@ protected: private: wxDC *m_dc; -public: - // Internal, temporay for RenderText. +public: + // Internal, temporary for RenderText. GtkCellRenderer *m_text_renderer; GdkWindow *window; GtkWidget *widget; @@ -180,92 +209,115 @@ public: protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer) }; - -// --------------------------------------------------------- + +// --------------------------------------------------------- // wxDataViewProgressRenderer -// --------------------------------------------------------- +// --------------------------------------------------------- class WXDLLIMPEXP_ADV wxDataViewProgressRenderer: public wxDataViewCustomRenderer { public: - wxDataViewProgressRenderer( const wxString &label = wxEmptyString, - const wxString &varianttype = wxT("long"), + wxDataViewProgressRenderer( const wxString &label = wxEmptyString, + const wxString &varianttype = wxT("long"), wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int align = wxDVR_DEFAULT_ALIGNMENT ); virtual ~wxDataViewProgressRenderer(); - + bool SetValue( const wxVariant &value ); bool GetValue( wxVariant &value ) const; - + virtual bool Render( wxRect cell, wxDC *dc, int state ); virtual wxSize GetSize() const; - + private: wxString m_label; int m_value; - + protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer) }; - -// --------------------------------------------------------- + +// --------------------------------------------------------- // wxDataViewIconTextRenderer -// --------------------------------------------------------- +// --------------------------------------------------------- -class WXDLLIMPEXP_ADV wxDataViewIconTextRenderer: public wxDataViewCustomRenderer +class WXDLLIMPEXP_ADV wxDataViewIconTextRenderer: public wxDataViewTextRenderer { public: - wxDataViewIconTextRenderer( const wxString &varianttype = wxT("wxDataViewIconText"), + 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 ); - + + virtual void GtkPackIntoColumn(GtkTreeViewColumn *column); + +protected: + virtual void GtkOnCellChanged(const wxVariant& value, + const wxDataViewItem& item, + unsigned col); + private: wxDataViewIconText m_value; - -protected: + + // we use the base class m_renderer for the text and this one for the icon + GtkCellRenderer *m_rendererIcon; + DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewIconTextRenderer) }; - -// --------------------------------------------------------- + +// --------------------------------------------------------- // wxDataViewDateRenderer -// --------------------------------------------------------- +// --------------------------------------------------------- class WXDLLIMPEXP_ADV wxDataViewDateRenderer: public wxDataViewCustomRenderer { public: - wxDataViewDateRenderer( const wxString &varianttype = wxT("datetime"), + wxDataViewDateRenderer( const wxString &varianttype = wxT("datetime"), wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int align = wxDVR_DEFAULT_ALIGNMENT ); - + 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 Activate( wxRect cell, wxDataViewModel *model, const wxDataViewItem &item, unsigned int col ); - + private: wxDateTime m_date; - + protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer) }; - -// --------------------------------------------------------- + +// ------------------------------------- +// wxDataViewChoiceRenderer +// ------------------------------------- + +class WXDLLIMPEXP_ADV wxDataViewChoiceRenderer: public wxDataViewCustomRenderer +{ +public: + wxDataViewChoiceRenderer( const wxArrayString &choices, + wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, + int alignment = wxDVR_DEFAULT_ALIGNMENT ); + virtual bool Render( wxRect rect, wxDC *dc, int state ); + virtual wxSize GetSize() const; + virtual bool SetValue( const wxVariant &value ); + virtual bool GetValue( wxVariant &value ) const; + + void SetAlignment( int align ); +private: + wxArrayString m_choices; + wxString m_data; +}; + +// --------------------------------------------------------- // wxDataViewColumn -// --------------------------------------------------------- +// --------------------------------------------------------- class WXDLLIMPEXP_ADV wxDataViewColumn: public wxDataViewColumnBase { @@ -279,8 +331,6 @@ public: wxAlignment align = wxALIGN_CENTER, int flags = wxDATAVIEW_COL_RESIZABLE ); - virtual ~wxDataViewColumn(); - // setters: @@ -290,9 +340,10 @@ public: virtual void SetOwner( wxDataViewCtrl *owner ); virtual void SetAlignment( wxAlignment align ); - + virtual void SetSortable( bool sortable ); virtual void SetSortOrder( bool ascending ); + virtual void SetAsSortKey(bool sort = true); virtual void SetResizeable( bool resizeable ); virtual void SetHidden( bool hidden ); @@ -302,6 +353,8 @@ public: virtual void SetReorderable( bool reorderable ); + virtual void SetFlags(int flags) { SetIndividualFlags(flags); } + // getters: virtual wxString GetTitle() const; @@ -309,14 +362,18 @@ public: virtual bool IsSortable() const; virtual bool IsSortOrderAscending() const; + virtual bool IsSortKey() const; + virtual bool IsResizeable() const; virtual bool IsHidden() const; virtual int GetWidth() const; virtual int GetMinWidth() const; - + virtual bool IsReorderable() const; + virtual int GetFlags() const { return GetFromIndividualFlags(); } + // implementation GtkWidget* GetGtkHandle() { return m_column; } GtkWidget* GetConstGtkHandle() const { return m_column; } @@ -324,60 +381,57 @@ public: private: // holds the GTK handle GtkWidget *m_column; - + // holds GTK handles for title/bitmap in the header GtkWidget *m_image; GtkWidget *m_label; - + // delayed connection to mouse events friend class wxDataViewCtrl; void OnInternalIdle(); bool m_isConnected; void Init(wxAlignment align, int flags, int width); - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumn) }; WX_DECLARE_LIST_WITH_DECL(wxDataViewColumn, wxDataViewColumnList, class WXDLLIMPEXP_ADV); -// --------------------------------------------------------- +// --------------------------------------------------------- // wxDataViewCtrl -// --------------------------------------------------------- +// --------------------------------------------------------- class WXDLLIMPEXP_ADV wxDataViewCtrl: public wxDataViewCtrlBase { public: - wxDataViewCtrl() + wxDataViewCtrl() { Init(); } - + wxDataViewCtrl( wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxValidator& validator = wxDefaultValidator ) { + Init(); + Create(parent, id, pos, size, style, validator ); } - virtual ~wxDataViewCtrl(); - - void Init(); - bool Create(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxValidator& validator = wxDefaultValidator ); + virtual ~wxDataViewCtrl(); + virtual bool AssociateModel( wxDataViewModel *model ); - + virtual bool PrependColumn( wxDataViewColumn *col ); virtual bool AppendColumn( wxDataViewColumn *col ); virtual bool InsertColumn( unsigned int pos, wxDataViewColumn *col ); - + virtual unsigned int GetColumnCount() const; virtual wxDataViewColumn* GetColumn( unsigned int pos ) const; virtual bool DeleteColumn( wxDataViewColumn *column ); @@ -395,22 +449,26 @@ public: virtual void SelectAll(); virtual void UnselectAll(); - virtual void EnsureVisible( const wxDataViewItem& item, + virtual void EnsureVisible( const wxDataViewItem& item, const wxDataViewColumn *column = NULL ); - virtual void HitTest( const wxPoint &point, - wxDataViewItem &item, + virtual void HitTest( const wxPoint &point, + wxDataViewItem &item, wxDataViewColumn *&column ) const; - virtual wxRect GetItemRect( const wxDataViewItem &item, + virtual wxRect GetItemRect( const wxDataViewItem &item, const wxDataViewColumn *column = NULL ) const; virtual void Expand( const wxDataViewItem & item ); virtual void Collapse( const wxDataViewItem & item ); + virtual bool IsExpanded( const wxDataViewItem & item ) const; + + virtual bool EnableDragSource( const wxDataFormat &format ); + virtual bool EnableDropTarget( const wxDataFormat &format ); static wxVisualAttributes GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); - + wxWindow *GetMainWindow() { return (wxWindow*) this; } - + GtkWidget *GtkGetTreeView() { return m_treeview; } wxDataViewCtrlInternal* GtkGetInternal() { return m_internal; } @@ -420,22 +478,27 @@ protected: virtual void DoSetExpanderColumn(); virtual void DoSetIndent(); + virtual void DoApplyWidgetStyle(GtkRcStyle *style); + private: + void Init(); + friend class wxDataViewCtrlDCImpl; friend class wxDataViewColumn; friend class wxGtkDataViewModelNotifier; friend class wxDataViewCtrlInternal; - + GtkWidget *m_treeview; wxDataViewModelNotifier *m_notifier; wxDataViewCtrlInternal *m_internal; wxDataViewColumnList m_cols; + virtual void AddChildGTK(wxWindowGTK* child); void GtkEnableSelectionEvents(); void GtkDisableSelectionEvents(); - + DECLARE_DYNAMIC_CLASS(wxDataViewCtrl) - DECLARE_NO_COPY_CLASS(wxDataViewCtrl) + wxDECLARE_NO_COPY_CLASS(wxDataViewCtrl); };