#include "wx/control.h"
#include "wx/textctrl.h"
-#include "wx/bitmap.h"
+#include "wx/headercol.h"
#include "wx/variant.h"
#include "wx/dynarray.h"
#include "wx/icon.h"
#include "wx/imaglist.h"
#include "wx/weakref.h"
+#if !(defined(__WXGTK20__) || defined(__WXMAC__)) || defined(__WXUNIVERSAL__)
+ #define wxHAS_GENERIC_DATAVIEWCTRL
+#endif
+
class WXDLLIMPEXP_FWD_CORE wxDataFormat;
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_FWD_ADV wxDataViewRenderer;
class WXDLLIMPEXP_FWD_ADV wxDataViewModelNotifier;
-extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxDataViewCtrlNameStr[];
+extern WXDLLIMPEXP_DATA_ADV(const char) wxDataViewCtrlNameStr[];
// the default width of new (text) columns:
#define wxDVC_DEFAULT_WIDTH 80
protected:
void OnChar( wxKeyEvent &event );
+ void OnTextEnter( wxCommandEvent &event );
void OnKillFocus( wxFocusEvent &event );
void OnIdle( wxIdleEvent &event );
// wxDataViewColumnBase
// ---------------------------------------------------------
+// for compatibility only, do not use
enum wxDataViewColumnFlags
{
- wxDATAVIEW_COL_RESIZABLE = 1,
- wxDATAVIEW_COL_SORTABLE = 2,
- wxDATAVIEW_COL_REORDERABLE = 4,
- wxDATAVIEW_COL_HIDDEN = 8
+ wxDATAVIEW_COL_RESIZABLE = wxCOL_RESIZABLE,
+ wxDATAVIEW_COL_SORTABLE = wxCOL_SORTABLE,
+ wxDATAVIEW_COL_REORDERABLE = wxCOL_REORDERABLE,
+ wxDATAVIEW_COL_HIDDEN = wxCOL_HIDDEN
};
-class WXDLLIMPEXP_ADV wxDataViewColumnBase: public wxObject
+class WXDLLIMPEXP_ADV wxDataViewColumnBase : public
+// native implementations of wxDataViewCtrl have their own implementations of
+// wxDataViewColumnBase and so they need to only inherit from
+// wxHeaderColumnBase to provide the same interface as the generic port which
+// uses the platform native (if any) wxHeaderColumn
+#ifdef wxHAS_GENERIC_DATAVIEWCTRL
+ wxHeaderColumn
+#else
+ wxHeaderColumnBase
+#endif
{
public:
wxDataViewColumnBase( const wxString &title, wxDataViewRenderer *renderer,
virtual ~wxDataViewColumnBase();
// setters:
-
- virtual void SetTitle( const wxString &title ) = 0;
- virtual void SetAlignment( wxAlignment align ) = 0;
- virtual void SetSortable( bool sortable ) = 0;
- virtual void SetReorderable(bool reorderable) = 0;
- virtual void SetResizeable( bool resizeable ) = 0;
- virtual void SetHidden( bool hidden ) = 0;
- virtual void SetSortOrder( bool ascending ) = 0;
- virtual void SetFlags( int flags );
virtual void SetOwner( wxDataViewCtrl *owner )
{ m_owner = owner; }
- virtual void SetBitmap( const wxBitmap &bitmap )
- { m_bitmap=bitmap; }
-
- virtual void SetMinWidth( int minWidth ) = 0;
- virtual void SetWidth( int width ) = 0;
-
// getters:
-
- virtual wxString GetTitle() const = 0;
- virtual wxAlignment GetAlignment() const = 0;
- virtual int GetWidth() const = 0;
- virtual int GetMinWidth() const = 0;
-
- virtual int GetFlags() const;
-
- virtual bool IsHidden() const = 0;
- virtual bool IsReorderable() const = 0;
- virtual bool IsResizeable() const = 0;
- virtual bool IsSortable() const = 0;
- virtual bool IsSortOrderAscending() const = 0;
-
- const wxBitmap &GetBitmap() const { return m_bitmap; }
- unsigned int GetModelColumn() const { return static_cast<unsigned int>(m_model_column); }
-
+ unsigned int GetModelColumn() const { return static_cast<unsigned int>(m_model_column); }
wxDataViewCtrl *GetOwner() const { return m_owner; }
wxDataViewRenderer* GetRenderer() const { return m_renderer; }
+#ifndef wxHAS_GENERIC_DATAVIEWCTRL
+ // implement some of base class pure virtuals (the rest is port-dependent
+ // and done differently in generic and native versions)
+ virtual void SetBitmap( const wxBitmap& bitmap ) { m_bitmap = bitmap; }
+ virtual wxBitmap GetBitmap() const { return m_bitmap; }
+#endif // !wxHAS_GENERIC_DATAVIEWCTRL
+
protected:
wxDataViewRenderer *m_renderer;
int m_model_column;
+#ifndef wxHAS_GENERIC_DATAVIEWCTRL
wxBitmap m_bitmap;
+#endif // !wxHAS_GENERIC_DATAVIEWCTRL
wxDataViewCtrl *m_owner;
protected:
// short cuts
wxDataViewColumn *PrependTextColumn( const wxString &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
- wxAlignment align = (wxAlignment)(wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL),
+ wxAlignment align = wxALIGN_NOT,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *PrependIconTextColumn( const wxString &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
- wxAlignment align = (wxAlignment)(wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL),
+ wxAlignment align = wxALIGN_NOT,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *PrependToggleColumn( const wxString &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_TOGGLE_DEFAULT_WIDTH,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *PrependDateColumn( const wxString &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1,
- wxAlignment align = (wxAlignment)(wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL),
+ wxAlignment align = wxALIGN_NOT,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *PrependBitmapColumn( const wxString &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *PrependTextColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
- wxAlignment align = (wxAlignment)(wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL),
+ wxAlignment align = wxALIGN_NOT,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *PrependIconTextColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
- wxAlignment align = (wxAlignment)(wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL),
+ wxAlignment align = wxALIGN_NOT,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *PrependToggleColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_TOGGLE_DEFAULT_WIDTH,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *PrependDateColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1,
- wxAlignment align = (wxAlignment)(wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL),
+ wxAlignment align = wxALIGN_NOT,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *PrependBitmapColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
wxDataViewColumn *AppendTextColumn( const wxString &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
- wxAlignment align = (wxAlignment)(wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL),
+ wxAlignment align = wxALIGN_NOT,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *AppendIconTextColumn( const wxString &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
- wxAlignment align = (wxAlignment)(wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL),
+ wxAlignment align = wxALIGN_NOT,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *AppendToggleColumn( const wxString &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_TOGGLE_DEFAULT_WIDTH,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *AppendDateColumn( const wxString &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1,
- wxAlignment align = (wxAlignment)(wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL),
+ wxAlignment align = wxALIGN_NOT,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *AppendBitmapColumn( const wxString &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *AppendTextColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
- wxAlignment align = (wxAlignment)(wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL),
+ wxAlignment align = wxALIGN_NOT,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *AppendIconTextColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
- wxAlignment align = (wxAlignment)(wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL),
+ wxAlignment align = wxALIGN_NOT,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *AppendToggleColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_TOGGLE_DEFAULT_WIDTH,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *AppendDateColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1,
- wxAlignment align = (wxAlignment)(wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL),
+ wxAlignment align = wxALIGN_NOT,
int flags = wxDATAVIEW_COL_RESIZABLE );
wxDataViewColumn *AppendBitmapColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
{ return m_expander_column; }
virtual wxDataViewColumn *GetSortingColumn() const = 0;
-
+
void SetIndent( int indent )
{ m_indent = indent ; DoSetIndent(); }
int GetIndent() const
#define EVT_DATAVIEW_COLUMN_REORDERED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_REORDERED, id, fn)
-#if defined(__WXGTK20__) && !defined(__WXUNIVERSAL__)
+#ifdef wxHAS_GENERIC_DATAVIEWCTRL
+ // this symbol doesn't follow the convention for wxUSE_XXX symbols which
+ // are normally always defined as either 0 or 1, so its use is deprecated
+ // and it only exists for backwards compatibility, don't use it any more
+ // and use wxHAS_GENERIC_DATAVIEWCTRL instead
+ #define wxUSE_GENERICDATAVIEWCTRL
+
+ #include "wx/generic/dataview.h"
+#elif defined(__WXGTK20__)
#include "wx/gtk/dataview.h"
-#elif defined(__WXMAC__) && !defined(__WXUNIVERSAL__)
+#elif defined(__WXMAC__)
#include "wx/osx/dataview.h"
#else
- #define wxUSE_GENERICDATAVIEWCTRL
- #include "wx/generic/dataview.h"
+ #error "unknown native wxDataViewCtrl implementation"
#endif
// -------------------------------------
long m_min,m_max;
};
+#ifndef __WXGTK20__
+
+// -------------------------------------
+// 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() { return true; }
+ virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value );
+ virtual bool GetValueFromEditorCtrl( wxControl* 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:
+ wxArrayString m_choices;
+ wxString m_data;
+};
+
+#endif
+
//-----------------------------------------------------------------------------
// wxDataViewTreeStore
//-----------------------------------------------------------------------------