X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b1153ed60faa31147c5ff2d4cbae15f4d5376887..f9e19204bf8327f1e71f127e5542ee8306282280:/include/wx/dvrenderers.h diff --git a/include/wx/dvrenderers.h b/include/wx/dvrenderers.h index 34939a685e..1d77b09114 100644 --- a/include/wx/dvrenderers.h +++ b/include/wx/dvrenderers.h @@ -54,6 +54,21 @@ public: void SetIcon( const wxIcon &icon ) { m_icon = icon; } const wxIcon &GetIcon() const { return m_icon; } + bool IsSameAs(const wxDataViewIconText& other) const + { + return m_text == other.m_text && m_icon.IsSameAs(other.m_icon); + } + + bool operator==(const wxDataViewIconText& other) const + { + return IsSameAs(other); + } + + bool operator!=(const wxDataViewIconText& other) const + { + return !IsSameAs(other); + } + private: wxString m_text; wxIcon m_icon; @@ -61,19 +76,6 @@ private: DECLARE_DYNAMIC_CLASS(wxDataViewIconText) }; -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) // ---------------------------------------------------------------------------- @@ -116,8 +118,14 @@ public: virtual void SetAttr(const wxDataViewItemAttr& WXUNUSED(attr)) { } + virtual void SetEnabled(bool WXUNUSED(enabled)) { } + wxString GetVariantType() const { return m_variantType; } + // helper that calls SetValue and SetAttr: + void PrepareForItem(const wxDataViewModel *model, + const wxDataViewItem& item, unsigned column); + // renderer properties: virtual void SetMode( wxDataViewCellMode mode ) = 0; virtual wxDataViewCellMode GetMode() const = 0; @@ -139,11 +147,11 @@ public: // in-place editing virtual bool HasEditorCtrl() const { return false; } - virtual wxControl* CreateEditorCtrl(wxWindow * WXUNUSED(parent), - wxRect WXUNUSED(labelRect), - const wxVariant& WXUNUSED(value)) + virtual wxWindow* CreateEditorCtrl(wxWindow * WXUNUSED(parent), + wxRect WXUNUSED(labelRect), + const wxVariant& WXUNUSED(value)) { return NULL; } - virtual bool GetValueFromEditorCtrl(wxControl * WXUNUSED(editor), + virtual bool GetValueFromEditorCtrl(wxWindow * WXUNUSED(editor), wxVariant& WXUNUSED(value)) { return false; } @@ -151,16 +159,23 @@ public: virtual void CancelEditing(); virtual bool FinishEditing(); - wxControl *GetEditorCtrl() { return m_editorCtrl; } + wxWindow *GetEditorCtrl() { return m_editorCtrl; } + + virtual bool IsCustomRenderer() const { return false; } + protected: + // Called from {Cancel,Finish}Editing() to cleanup m_editorCtrl + void DestroyEditControl(); + wxString m_variantType; wxDataViewColumn *m_owner; - wxWeakRef m_editorCtrl; + wxWeakRef m_editorCtrl; wxDataViewItem m_item; // for m_editorCtrl - // internal utility: - const wxDataViewCtrl* GetView() const; + // internal utility, may be used anywhere the window associated with the + // renderer is required + wxDataViewCtrl* GetView() const; protected: DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRendererBase) @@ -218,21 +233,21 @@ public: // to drag it: by default they all simply return false indicating that the // events are not handled - virtual bool Activate(wxRect WXUNUSED(cell), + virtual bool Activate(const wxRect& WXUNUSED(cell), wxDataViewModel *WXUNUSED(model), const wxDataViewItem & WXUNUSED(item), unsigned int WXUNUSED(col)) { return false; } - virtual bool LeftClick(wxPoint WXUNUSED(cursor), - wxRect WXUNUSED(cell), + virtual bool LeftClick(const wxPoint& WXUNUSED(cursor), + const 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), + virtual bool StartDrag(const wxPoint& WXUNUSED(cursor), + const wxRect& WXUNUSED(cell), wxDataViewModel *WXUNUSED(model), const wxDataViewItem & WXUNUSED(item), unsigned int WXUNUSED(col) ) @@ -254,6 +269,11 @@ public: virtual void SetAttr(const wxDataViewItemAttr& attr) { m_attr = attr; } const wxDataViewItemAttr& GetAttr() const { return m_attr; } + // Store the enabled state of the item so that it can be accessed from + // Render() via GetEnabled() if needed. + virtual void SetEnabled(bool enabled) { m_enabled = enabled; } + bool GetEnabled() const { return m_enabled; } + // Implementation only from now on @@ -264,8 +284,15 @@ public: // Prepare DC to use attributes and call Render(). void WXCallRender(wxRect rect, wxDC *dc, int state); + virtual bool IsCustomRenderer() const { return true; } + +protected: + // helper for GetSize() implementations, respects attributes + wxSize GetTextExtent(const wxString& str) const; + private: wxDataViewItemAttr m_attr; + bool m_enabled; wxDECLARE_NO_COPY_CLASS(wxDataViewCustomRendererBase); }; @@ -298,8 +325,8 @@ public: wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, int alignment = wxDVR_DEFAULT_ALIGNMENT ); virtual bool HasEditorCtrl() const { return true; } - virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); - virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ); + virtual wxWindow* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); + virtual bool GetValueFromEditorCtrl( wxWindow* editor, wxVariant &value ); virtual bool Render( wxRect rect, wxDC *dc, int state ); virtual wxSize GetSize() const; virtual bool SetValue( const wxVariant &value ); @@ -323,18 +350,40 @@ public: wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, int alignment = wxDVR_DEFAULT_ALIGNMENT ); virtual bool HasEditorCtrl() const { return true; } - virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); - virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ); + virtual wxWindow* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); + virtual bool GetValueFromEditorCtrl( wxWindow* editor, wxVariant &value ); 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; + wxString GetChoice(size_t index) const { return m_choices[index]; } + const wxArrayString& GetChoices() const { return m_choices; } + private: wxArrayString m_choices; wxString m_data; }; +// ---------------------------------------------------------------------------- +// wxDataViewChoiceByIndexRenderer +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_ADV wxDataViewChoiceByIndexRenderer: public wxDataViewChoiceRenderer +{ +public: + wxDataViewChoiceByIndexRenderer( const wxArrayString &choices, + wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, + int alignment = wxDVR_DEFAULT_ALIGNMENT ); + + virtual wxWindow* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); + virtual bool GetValueFromEditorCtrl( wxWindow* editor, wxVariant &value ); + + virtual bool SetValue( const wxVariant &value ); + virtual bool GetValue( wxVariant &value ) const; +}; + + #endif // generic or Carbon versions // this class is obsolete, its functionality was merged in