| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445 | 
							- ///////////////////////////////////////////////////////////////////////////////
 
- // Name:        wx/dvrenderers.h
 
- // Purpose:     Declare all wxDataViewCtrl classes
 
- // Author:      Robert Roebling, Vadim Zeitlin
 
- // Created:     2009-11-08 (extracted from wx/dataview.h)
 
- // Copyright:   (c) 2006 Robert Roebling
 
- //              (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
 
- // Licence:     wxWindows licence
 
- ///////////////////////////////////////////////////////////////////////////////
 
- #ifndef _WX_DVRENDERERS_H_
 
- #define _WX_DVRENDERERS_H_
 
- /*
 
-     Note about the structure of various headers: they're organized in a more
 
-     complicated way than usual because of the various dependencies which are
 
-     different for different ports. In any case the only public header, i.e. the
 
-     one which can be included directly is wx/dataview.h. It, in turn, includes
 
-     this one to define all the renderer classes.
 
-     We define the base wxDataViewRendererBase class first and then include a
 
-     port-dependent wx/xxx/dvrenderer.h which defines wxDataViewRenderer itself.
 
-     After this we can define wxDataViewRendererCustomBase (and maybe in the
 
-     future base classes for other renderers if the need arises, i.e. if there
 
-     is any non-trivial code or API which it makes sense to keep in common code)
 
-     and include wx/xxx/dvrenderers.h (notice the plural) which defines all the
 
-     rest of the renderer classes.
 
-  */
 
- class WXDLLIMPEXP_FWD_ADV wxDataViewCustomRenderer;
 
- // ----------------------------------------------------------------------------
 
- // wxDataViewIconText: helper class used by wxDataViewIconTextRenderer
 
- // ----------------------------------------------------------------------------
 
- class WXDLLIMPEXP_ADV wxDataViewIconText : public wxObject
 
- {
 
- public:
 
-     wxDataViewIconText( const wxString &text = wxEmptyString,
 
-                         const wxIcon& icon = wxNullIcon )
 
-         : m_text(text),
 
-           m_icon(icon)
 
-     { }
 
-     wxDataViewIconText( const wxDataViewIconText &other )
 
-         : wxObject(),
 
-           m_text(other.m_text),
 
-           m_icon(other.m_icon)
 
-     { }
 
-     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; }
 
-     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;
 
-     DECLARE_DYNAMIC_CLASS(wxDataViewIconText)
 
- };
 
- DECLARE_VARIANT_OBJECT_EXPORTED(wxDataViewIconText, WXDLLIMPEXP_ADV)
 
- // ----------------------------------------------------------------------------
 
- // wxDataViewRendererBase
 
- // ----------------------------------------------------------------------------
 
- enum wxDataViewCellMode
 
- {
 
-     wxDATAVIEW_CELL_INERT,
 
-     wxDATAVIEW_CELL_ACTIVATABLE,
 
-     wxDATAVIEW_CELL_EDITABLE
 
- };
 
- enum wxDataViewCellRenderState
 
- {
 
-     wxDATAVIEW_CELL_SELECTED    = 1,
 
-     wxDATAVIEW_CELL_PRELIT      = 2,
 
-     wxDATAVIEW_CELL_INSENSITIVE = 4,
 
-     wxDATAVIEW_CELL_FOCUSED     = 8
 
- };
 
- class WXDLLIMPEXP_ADV wxDataViewRendererBase: public wxObject
 
- {
 
- public:
 
-     wxDataViewRendererBase( const wxString &varianttype,
 
-                             wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
 
-                             int alignment = wxDVR_DEFAULT_ALIGNMENT );
 
-     virtual ~wxDataViewRendererBase();
 
-     virtual bool Validate( wxVariant& WXUNUSED(value) )
 
-         { return true; }
 
-     void SetOwner( wxDataViewColumn *owner )    { m_owner = owner; }
 
-     wxDataViewColumn* GetOwner() const          { return m_owner; }
 
-     // renderer value and attributes: SetValue() and SetAttr() are called
 
-     // before a cell is rendered using this renderer
 
-     virtual bool SetValue(const wxVariant& value) = 0;
 
-     virtual bool GetValue(wxVariant& value) const = 0;
 
-     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;
 
-     // NOTE: Set/GetAlignment do not take/return a wxAlignment enum but
 
-     //       rather an "int"; that's because for rendering cells it's allowed
 
-     //       to combine alignment flags (e.g. wxALIGN_LEFT|wxALIGN_BOTTOM)
 
-     virtual void SetAlignment( int align ) = 0;
 
-     virtual int GetAlignment() const = 0;
 
-     // enable or disable (if called with wxELLIPSIZE_NONE) replacing parts of
 
-     // the item text (hence this only makes sense for renderers showing
 
-     // text...) with ellipsis in order to make it fit the column width
 
-     virtual void EnableEllipsize(wxEllipsizeMode mode = wxELLIPSIZE_MIDDLE) = 0;
 
-     void DisableEllipsize() { EnableEllipsize(wxELLIPSIZE_NONE); }
 
-     virtual wxEllipsizeMode GetEllipsizeMode() const = 0;
 
-     // in-place editing
 
-     virtual bool HasEditorCtrl() const
 
-         { return false; }
 
-     virtual wxWindow* CreateEditorCtrl(wxWindow * WXUNUSED(parent),
 
-                                        wxRect WXUNUSED(labelRect),
 
-                                        const wxVariant& WXUNUSED(value))
 
-         { return NULL; }
 
-     virtual bool GetValueFromEditorCtrl(wxWindow * WXUNUSED(editor),
 
-                                         wxVariant& WXUNUSED(value))
 
-         { return false; }
 
-     virtual bool StartEditing( const wxDataViewItem &item, wxRect labelRect );
 
-     virtual void CancelEditing();
 
-     virtual bool FinishEditing();
 
-     wxWindow *GetEditorCtrl() { return m_editorCtrl; }
 
-     virtual bool IsCustomRenderer() const { return false; }
 
- protected:
 
-     // Called from {Cancel,Finish}Editing() to cleanup m_editorCtrl
 
-     void DestroyEditControl();
 
-     // Return the alignment of this renderer if it's specified (i.e. has value
 
-     // different from the default wxDVR_DEFAULT_ALIGNMENT) or the alignment of
 
-     // the column it is used for otherwise.
 
-     //
 
-     // Unlike GetAlignment(), this always returns a valid combination of
 
-     // wxALIGN_XXX flags (although possibly wxALIGN_NOT) and never returns
 
-     // wxDVR_DEFAULT_ALIGNMENT.
 
-     int GetEffectiveAlignment() const;
 
-     wxString                m_variantType;
 
-     wxDataViewColumn       *m_owner;
 
-     wxWeakRef<wxWindow>     m_editorCtrl;
 
-     wxDataViewItem          m_item; // for m_editorCtrl
 
-     // internal utility, may be used anywhere the window associated with the
 
-     // renderer is required
 
-     wxDataViewCtrl* GetView() const;
 
- protected:
 
-     DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRendererBase)
 
- };
 
- // include the real wxDataViewRenderer declaration for the native ports
 
- #ifdef wxHAS_GENERIC_DATAVIEWCTRL
 
-     // in the generic implementation there is no real wxDataViewRenderer, all
 
-     // renderers are custom so it's the same as wxDataViewCustomRenderer and
 
-     // wxDataViewCustomRendererBase derives from wxDataViewRendererBase directly
 
-     //
 
-     // this is a rather ugly hack but unfortunately it just doesn't seem to be
 
-     // possible to have the same class hierarchy in all ports and avoid
 
-     // duplicating the entire wxDataViewCustomRendererBase in the generic
 
-     // wxDataViewRenderer class (well, we could use a mix-in but this would
 
-     // make classes hierarchy non linear and arguably even more complex)
 
-     #define wxDataViewCustomRendererRealBase wxDataViewRendererBase
 
- #else
 
-     #if defined(__WXGTK20__)
 
-         #include "wx/gtk/dvrenderer.h"
 
-     #elif defined(__WXMAC__)
 
-         #include "wx/osx/dvrenderer.h"
 
-     #else
 
-         #error "unknown native wxDataViewCtrl implementation"
 
-     #endif
 
-     #define wxDataViewCustomRendererRealBase wxDataViewRenderer
 
- #endif
 
- // ----------------------------------------------------------------------------
 
- // wxDataViewCustomRendererBase
 
- // ----------------------------------------------------------------------------
 
- class WXDLLIMPEXP_ADV wxDataViewCustomRendererBase
 
-     : public wxDataViewCustomRendererRealBase
 
- {
 
- public:
 
-     // Constructor must specify the usual renderer parameters which we simply
 
-     // pass to the base class
 
-     wxDataViewCustomRendererBase(const wxString& varianttype = "string",
 
-                                  wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT,
 
-                                  int align = wxDVR_DEFAULT_ALIGNMENT)
 
-         : wxDataViewCustomRendererRealBase(varianttype, mode, align)
 
-     {
 
-     }
 
-     // Render the item using the current value (returned by GetValue()).
 
-     virtual bool Render(wxRect cell, wxDC *dc, int state) = 0;
 
-     // Return the size of the item appropriate to its current value.
 
-     virtual wxSize GetSize() const = 0;
 
-     // Define virtual function which are called when a key is pressed on the
 
-     // item, clicked or the user starts to drag it: by default they all simply
 
-     // return false indicating that the events are not handled
 
-     virtual bool ActivateCell(const wxRect& cell,
 
-                               wxDataViewModel *model,
 
-                               const wxDataViewItem & item,
 
-                               unsigned int col,
 
-                               const wxMouseEvent* mouseEvent);
 
-     // Deprecated, use (and override) ActivateCell() instead
 
-     wxDEPRECATED_BUT_USED_INTERNALLY_INLINE(
 
-         virtual bool Activate(wxRect WXUNUSED(cell),
 
-                               wxDataViewModel *WXUNUSED(model),
 
-                               const wxDataViewItem & WXUNUSED(item),
 
-                               unsigned int WXUNUSED(col)),
 
-                           return false; )
 
-     // Deprecated, use (and override) ActivateCell() instead
 
-     wxDEPRECATED_BUT_USED_INTERNALLY_INLINE(
 
-         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(const wxPoint& WXUNUSED(cursor),
 
-                            const wxRect& WXUNUSED(cell),
 
-                            wxDataViewModel *WXUNUSED(model),
 
-                            const wxDataViewItem & WXUNUSED(item),
 
-                            unsigned int WXUNUSED(col) )
 
-         { return false; }
 
-     // Helper which can be used by Render() implementation in the derived
 
-     // classes: it will draw the text in the same manner as the standard
 
-     // renderers do.
 
-     virtual void RenderText(const wxString& text,
 
-                             int xoffset,
 
-                             wxRect cell,
 
-                             wxDC *dc,
 
-                             int state);
 
-     // Override the base class virtual method to simply store the attribute so
 
-     // that it can be accessed using GetAttr() from Render() if needed.
 
-     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
 
-     // Retrieve the DC to use for drawing. This is implemented in derived
 
-     // platform-specific classes.
 
-     virtual wxDC *GetDC() = 0;
 
-     // To draw background use the background colour in wxDataViewItemAttr
 
-     virtual void RenderBackground(wxDC* dc, const wxRect& rect);
 
-     // 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);
 
- };
 
- // include the declaration of all the other renderers to get the real
 
- // wxDataViewCustomRenderer from which we need to inherit below
 
- #ifdef wxHAS_GENERIC_DATAVIEWCTRL
 
-     // because of the different renderer classes hierarchy in the generic
 
-     // version, as explained above, we can include the header defining
 
-     // wxDataViewRenderer only here and not before wxDataViewCustomRendererBase
 
-     // declaration as for the native ports
 
-     #include "wx/generic/dvrenderer.h"
 
-     #include "wx/generic/dvrenderers.h"
 
- #elif defined(__WXGTK20__)
 
-     #include "wx/gtk/dvrenderers.h"
 
- #elif defined(__WXMAC__)
 
-     #include "wx/osx/dvrenderers.h"
 
- #else
 
-     #error "unknown native wxDataViewCtrl implementation"
 
- #endif
 
- // ----------------------------------------------------------------------------
 
- // wxDataViewSpinRenderer
 
- // ----------------------------------------------------------------------------
 
- class WXDLLIMPEXP_ADV wxDataViewSpinRenderer: public wxDataViewCustomRenderer
 
- {
 
- public:
 
-     wxDataViewSpinRenderer( int min, int max,
 
-                             wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
 
-                             int alignment = wxDVR_DEFAULT_ALIGNMENT );
 
-     virtual bool HasEditorCtrl() const { return true; }
 
-     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;
 
- private:
 
-     long    m_data;
 
-     long    m_min,m_max;
 
- };
 
- #if defined(wxHAS_GENERIC_DATAVIEWCTRL) || defined(__WXOSX_CARBON__)
 
- // ----------------------------------------------------------------------------
 
- // wxDataViewChoiceRenderer
 
- // ----------------------------------------------------------------------------
 
- class WXDLLIMPEXP_ADV wxDataViewChoiceRenderer: public wxDataViewCustomRenderer
 
- {
 
- public:
 
-     wxDataViewChoiceRenderer( const wxArrayString &choices,
 
-                             wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
 
-                             int alignment = wxDVR_DEFAULT_ALIGNMENT );
 
-     virtual bool HasEditorCtrl() const { return true; }
 
-     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
 
- #if defined(wxHAS_GENERIC_DATAVIEWCTRL) || defined(__WXGTK__)
 
- // ----------------------------------------------------------------------------
 
- // wxDataViewDateRenderer
 
- // ----------------------------------------------------------------------------
 
- #if wxUSE_DATEPICKCTRL
 
- class WXDLLIMPEXP_ADV wxDataViewDateRenderer: public wxDataViewCustomRenderer
 
- {
 
- public:
 
-     wxDataViewDateRenderer(const wxString &varianttype = wxT("datetime"),
 
-                            wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
 
-                            int align = wxDVR_DEFAULT_ALIGNMENT);
 
-     virtual bool HasEditorCtrl() const { return true; }
 
-     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;
 
-     virtual bool Render( wxRect cell, wxDC *dc, int state );
 
-     virtual wxSize GetSize() const;
 
- private:
 
-     wxDateTime    m_date;
 
- };
 
- #else // !wxUSE_DATEPICKCTRL
 
- typedef wxDataViewTextRenderer wxDataViewDateRenderer;
 
- #endif
 
- #endif // generic or GTK+ versions
 
- // this class is obsolete, its functionality was merged in
 
- // wxDataViewTextRenderer itself now, don't use it any more
 
- #define wxDataViewTextRendererAttr wxDataViewTextRenderer
 
- #endif // _WX_DVRENDERERS_H_
 
 
  |