X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/591cc82deb5bc6dd0af6047ecfa7ce7cf4f8d859..d0f063020e6fb1b1a660952d0844071e0df24324:/include/wx/dataview.h diff --git a/include/wx/dataview.h b/include/wx/dataview.h index 17d6f3e092..e0c0f30768 100644 --- a/include/wx/dataview.h +++ b/include/wx/dataview.h @@ -16,27 +16,22 @@ #if wxUSE_DATAVIEWCTRL -#include "wx/control.h" #include "wx/textctrl.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" #include "wx/vector.h" +#include "wx/dataobj.h" -#if !(defined(__WXGTK20__) || defined(__WXMAC__)) || defined(__WXUNIVERSAL__) +class WXDLLIMPEXP_FWD_CORE wxImageList; + +#if !(defined(__WXGTK20__) || defined(__WXOSX_CARBON__)) || defined(__WXUNIVERSAL__) // #if !(defined(__WXMAC__)) || defined(__WXUNIVERSAL__) #define wxHAS_GENERIC_DATAVIEWCTRL #endif -class WXDLLIMPEXP_FWD_CORE wxDataFormat; - -// ---------------------------------------------------------------------------- -// wxDataViewCtrl flags -// ---------------------------------------------------------------------------- - // ---------------------------------------------------------------------------- // wxDataViewCtrl globals // ---------------------------------------------------------------------------- @@ -50,6 +45,13 @@ class WXDLLIMPEXP_FWD_ADV wxDataViewModelNotifier; extern WXDLLIMPEXP_DATA_ADV(const char) wxDataViewCtrlNameStr[]; +// ---------------------------------------------------------------------------- +// wxDataViewCtrl flags +// ---------------------------------------------------------------------------- + +// size of a wxDataViewRenderer without contents: +#define wxDVC_DEFAULT_RENDERER_SIZE 20 + // the default width of new (text) columns: #define wxDVC_DEFAULT_WIDTH 80 @@ -79,10 +81,6 @@ public: void* GetID() const { return m_id; } operator const void* () const { return m_id; } -#ifdef __WXDEBUG__ - void Print( const wxString &text ) const; -#endif - private: void* m_id; }; @@ -211,7 +209,7 @@ public: // default compare function virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2, - unsigned int column, bool ascending ); + unsigned int column, bool ascending ) const; virtual bool HasDefaultCompare() const { return false; } // internal @@ -260,7 +258,7 @@ public: // compare based on index virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2, - unsigned int column, bool ascending ); + unsigned int column, bool ascending ) const; virtual bool HasDefaultCompare() const; // implement base methods @@ -325,7 +323,7 @@ public: // compare based on index virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2, - unsigned int column, bool ascending ); + unsigned int column, bool ascending ) const; virtual bool HasDefaultCompare() const; // implement base methods @@ -428,7 +426,7 @@ public: virtual int GetAlignment() const = 0; // in-place editing - virtual bool HasEditorCtrl() + virtual bool HasEditorCtrl() const { return false; } virtual wxControl* CreateEditorCtrl(wxWindow * WXUNUSED(parent), wxRect WXUNUSED(labelRect), @@ -527,7 +525,8 @@ public: { m_owner = owner; } // getters: - unsigned int GetModelColumn() const { return static_cast(m_model_column); } + unsigned int GetModelColumn() const + { return static_cast(m_model_column); } wxDataViewCtrl *GetOwner() const { return m_owner; } wxDataViewRenderer* GetRenderer() const { return m_renderer; } @@ -567,11 +566,17 @@ public: wxDataViewCtrlBase(); virtual ~wxDataViewCtrlBase(); + // model + // ----- + virtual bool AssociateModel( wxDataViewModel *model ); wxDataViewModel* GetModel(); const wxDataViewModel* GetModel() const; - // short cuts + + // column management + // ----------------- + wxDataViewColumn *PrependTextColumn( const wxString &label, unsigned int model_column, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, wxAlignment align = wxALIGN_NOT, @@ -670,7 +675,6 @@ public: wxAlignment align = wxALIGN_CENTER, int flags = wxDATAVIEW_COL_RESIZABLE ); - virtual bool PrependColumn( wxDataViewColumn *col ); virtual bool InsertColumn( unsigned int pos, wxDataViewColumn *col ); virtual bool AppendColumn( wxDataViewColumn *col ); @@ -689,6 +693,10 @@ public: virtual wxDataViewColumn *GetSortingColumn() const = 0; + + // items management + // ---------------- + void SetIndent( int indent ) { m_indent = indent ; DoSetIndent(); } int GetIndent() const @@ -713,8 +721,13 @@ public: const wxDataViewColumn *column = NULL ) = 0; virtual void HitTest( const wxPoint & point, wxDataViewItem &item, wxDataViewColumn* &column ) const = 0; virtual wxRect GetItemRect( const wxDataViewItem & item, const wxDataViewColumn *column = NULL ) const = 0; - - virtual bool EnableDragSource( const wxDataFormat &format ); + +#if wxUSE_DRAG_AND_DROP + virtual bool EnableDragSource(const wxDataFormat& WXUNUSED(format)) + { return false; } + virtual bool EnableDropTarget(const wxDataFormat& WXUNUSED(format)) + { return false; } +#endif // wxUSE_DRAG_AND_DROP protected: virtual void DoSetExpanderColumn() = 0 ; @@ -743,8 +756,12 @@ public: m_model(NULL), m_value(wxNullVariant), m_column(NULL), - m_pos(-1,-1), - m_dataObject(NULL) + m_pos(-1,-1) +#if wxUSE_DRAG_AND_DROP + , m_dataObject(NULL), + m_dataBuffer(NULL), + m_dataSize(0) +#endif { } wxDataViewEvent(const wxDataViewEvent& event) @@ -754,8 +771,13 @@ public: m_model(event.m_model), m_value(event.m_value), m_column(event.m_column), - m_pos(m_pos), - m_dataObject(event.m_dataObject) + m_pos(m_pos) +#if wxUSE_DRAG_AND_DROP + , m_dataObject(event.m_dataObject), + m_dataFormat(event.m_dataFormat), + m_dataBuffer(event.m_dataBuffer), + m_dataSize(event.m_dataSize) +#endif { } wxDataViewItem GetItem() const { return m_item; } @@ -778,9 +800,19 @@ public: wxPoint GetPosition() const { return m_pos; } void SetPosition( int x, int y ) { m_pos.x = x; m_pos.y = y; } - // For DnD operations +#if wxUSE_DRAG_AND_DROP + // For drag operations void SetDataObject( wxDataObject *obj ) { m_dataObject = obj; } - wxDataObject *GetDataObject() { return m_dataObject; } + wxDataObject *GetDataObject() const { return m_dataObject; } + + // For drop operations + void SetDataFormat( const wxDataFormat &format ) { m_dataFormat = format; } + wxDataFormat GetDataFormat() const { return m_dataFormat; } + void SetDataSize( size_t size ) { m_dataSize = size; } + size_t GetDataSize() const { return m_dataSize; } + void SetDataBuffer( void* buf ) { m_dataBuffer = buf;} + void *GetDataBuffer() const { return m_dataBuffer; } +#endif // wxUSE_DRAG_AND_DROP virtual wxEvent *Clone() const { return new wxDataViewEvent(*this); } @@ -791,31 +823,41 @@ protected: wxVariant m_value; wxDataViewColumn *m_column; wxPoint m_pos; + +#if wxUSE_DRAG_AND_DROP wxDataObject *m_dataObject; + wxDataFormat m_dataFormat; + void* m_dataBuffer; + size_t m_dataSize; +#endif // wxUSE_DRAG_AND_DROP + private: DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxDataViewEvent) }; -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEvent ) +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEvent ); -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, wxDataViewEvent ) +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_START_EDITING, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, wxDataViewEvent ); -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, wxDataViewEvent ) +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, wxDataViewEvent ); -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED, wxDataViewEvent ) -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_REORDERED, wxDataViewEvent ) +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_REORDERED, wxDataViewEvent ); -wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG, wxDataViewEvent ) +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_DROP_POSSIBLE, wxDataViewEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_DROP, wxDataViewEvent ); typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&); @@ -832,6 +874,7 @@ typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&); #define EVT_DATAVIEW_ITEM_COLLAPSED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_COLLAPSED, id, fn) #define EVT_DATAVIEW_ITEM_EXPANDING(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_EXPANDING, id, fn) #define EVT_DATAVIEW_ITEM_EXPANDED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_EXPANDED, id, fn) +#define EVT_DATAVIEW_ITEM_START_EDITING(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_START_EDITING, id, fn) #define EVT_DATAVIEW_ITEM_EDITING_STARTED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_EDITING_STARTED, id, fn) #define EVT_DATAVIEW_ITEM_EDITING_DONE(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_EDITING_DONE, id, fn) #define EVT_DATAVIEW_ITEM_VALUE_CHANGED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_VALUE_CHANGED, id, fn) @@ -844,6 +887,8 @@ typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&); #define EVT_DATAVIEW_COLUMN_REORDERED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_REORDERED, id, fn) #define EVT_DATAVIEW_ITEM_BEGIN_DRAG(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_BEGIN_DRAG, id, fn) +#define EVT_DATAVIEW_ITEM_DROP_POSSIBLE(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_DROP_POSSIBLE, id, fn) +#define EVT_DATAVIEW_ITEM_DROP(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_DROP, id, fn) #ifdef wxHAS_GENERIC_DATAVIEWCTRL // this symbol doesn't follow the convention for wxUSE_XXX symbols which @@ -871,7 +916,7 @@ public: wxDataViewSpinRenderer( int min, int max, wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, int alignment = wxDVR_DEFAULT_ALIGNMENT ); - virtual bool HasEditorCtrl() { return true; } + virtual bool HasEditorCtrl() const { 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 ); @@ -896,7 +941,7 @@ public: wxDataViewChoiceRenderer( const wxArrayString &choices, wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, int alignment = wxDVR_DEFAULT_ALIGNMENT ); - virtual bool HasEditorCtrl() { return true; } + virtual bool HasEditorCtrl() const { 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 ); @@ -931,9 +976,9 @@ public: { if (m_data) delete m_data; m_data = data; } wxClientData *GetData() const { return m_data; } - + wxVector m_values; - + private: wxClientData *m_data; }; @@ -948,11 +993,11 @@ public: void PrependColumn( const wxString &varianttype ); void InsertColumn( unsigned int pos, const wxString &varianttype ); void AppendColumn( const wxString &varianttype ); - + void AppendItem( const wxVector &values, wxClientData *data = NULL ); void PrependItem( const wxVector &values, wxClientData *data = NULL ); void InsertItem( unsigned int row, const wxVector &values, wxClientData *data = NULL ); - void DeleteItem( unsigned pos ); + void DeleteItem( unsigned int pos ); void DeleteAllItems(); // override base virtuals @@ -967,7 +1012,7 @@ public: virtual bool SetValueByRow( const wxVariant &value, unsigned int row, unsigned int col ); - + public: wxVector m_data; wxArrayString m_cols; @@ -998,23 +1043,23 @@ public: bool AppendColumn( wxDataViewColumn *column, const wxString &varianttype ); bool PrependColumn( wxDataViewColumn *column, const wxString &varianttype ); bool InsertColumn( unsigned int pos, wxDataViewColumn *column, const wxString &varianttype ); - + // overridden from base class virtual bool PrependColumn( wxDataViewColumn *col ); virtual bool InsertColumn( unsigned int pos, wxDataViewColumn *col ); virtual bool AppendColumn( wxDataViewColumn *col ); - wxDataViewColumn *AppendTextColumn( const wxString &label, - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + wxDataViewColumn *AppendTextColumn( const wxString &label, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, wxAlignment align = wxALIGN_LEFT, int flags = wxDATAVIEW_COL_RESIZABLE ); - wxDataViewColumn *AppendToggleColumn( const wxString &label, - wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, + wxDataViewColumn *AppendToggleColumn( const wxString &label, + wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1, wxAlignment align = wxALIGN_LEFT, int flags = wxDATAVIEW_COL_RESIZABLE ); - wxDataViewColumn *AppendProgressColumn( const wxString &label, - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + wxDataViewColumn *AppendProgressColumn( const wxString &label, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, wxAlignment align = wxALIGN_LEFT, int flags = wxDATAVIEW_COL_RESIZABLE ); - wxDataViewColumn *AppendIconTextColumn( const wxString &label, - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + wxDataViewColumn *AppendIconTextColumn( const wxString &label, + wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1, wxAlignment align = wxALIGN_LEFT, int flags = wxDATAVIEW_COL_RESIZABLE ); void AppendItem( const wxVector &values, wxClientData *data = NULL ) @@ -1029,7 +1074,7 @@ public: { GetStore()->DeleteAllItems(); } void SetValue( const wxVariant &value, unsigned int row, unsigned int col ) - { GetStore()->SetValueByRow( value, row, col ); + { GetStore()->SetValueByRow( value, row, col ); GetStore()->RowValueChanged( row, col); } void GetValue( wxVariant &value, unsigned int row, unsigned int col ) { GetStore()->GetValueByRow( value, row, col ); } @@ -1180,7 +1225,7 @@ public: virtual unsigned int GetChildren( const wxDataViewItem &item, wxDataViewItemArray &children ) const; virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2, - unsigned int column, bool ascending ); + unsigned int column, bool ascending ) const; virtual bool HasDefaultCompare() const { return true; }