// Name: wx/dataview.h
// Purpose: wxDataViewCtrl base classes
// Author: Robert Roebling
-// Modified by:
+// Modified by: Bo Yang
// Created: 08.01.06
// RCS-ID: $Id$
// Copyright: (c) Robert Roebling
#include "wx/bitmap.h"
#include "wx/variant.h"
#include "wx/listctrl.h"
+#include "wx/dynarray.h"
#if defined(__WXGTK20__)
// for testing
class WXDLLIMPEXP_FWD_ADV wxDataViewColumn;
class WXDLLIMPEXP_FWD_ADV wxDataViewRenderer;
class WXDLLIMPEXP_FWD_ADV wxDataViewModelNotifier;
-class wxDataViewEventModelNotifier;
extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxDataViewCtrlNameStr[];
{ m_id = item.m_id; }
bool IsOk() const { return m_id != NULL; }
void* GetID() const { return m_id; }
+ operator const void* () const { return m_id; }
private:
void* m_id;
bool operator == (const wxDataViewItem &left, const wxDataViewItem &right);
+WX_DEFINE_ARRAY(wxDataViewItem, wxDataViewItemArray);
+
// ---------------------------------------------------------
// wxDataViewModelNotifier
// ---------------------------------------------------------
virtual bool ValueChanged( const wxDataViewItem &item, unsigned int col ) = 0;
virtual bool Cleared() = 0;
- virtual void Resort() { }
+ virtual void Resort() = 0;
void SetOwner( wxDataViewModel *owner ) { m_owner = owner; }
wxDataViewModel *GetOwner() { return m_owner; }
void RemoveNotifier( wxDataViewModelNotifier *notifier );
// default compare function
- virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2 );
-
- void SetSortingColumn( unsigned int col ) { m_sortingColumn = col; }
- unsigned int GetSortingColumn() { return m_sortingColumn; }
- void SetSortOrderAscending( bool ascending ) { m_ascending = ascending; }
- bool GetSortOrderAscending() { return m_ascending; }
-
-
+ virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2,
+ unsigned int column, bool ascending );
+
protected:
// the user should not delete this class directly: he should use DecRef() instead!
virtual ~wxDataViewModel() { }
wxDataViewModelNotifiers m_notifiers;
- unsigned int m_sortingColumn;
- bool m_ascending;
};
// ---------------------------------------------------------
// wxDataViewIndexListModel
// ---------------------------------------------------------
-// use hash map later
-WX_DEFINE_ARRAY_PTR( void*, wxDataViewItemHash );
-
class wxDataViewIndexListModel: public wxDataViewModel
{
public:
// compare based on index
- virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2 );
+ virtual int Compare( const wxDataViewItem &item1, const wxDataViewItem &item2,
+ unsigned int column, bool ascending );
// implement base methods
virtual wxDataViewItem GetNextSibling( const wxDataViewItem &item ) const;
private:
- wxDataViewItemHash m_hash;
+ wxDataViewItemArray m_hash;
unsigned int m_lastIndex;
};
wxDataViewModel* GetModel();
// short cuts
- bool AppendTextColumn( const wxString &label, unsigned int model_column,
+ wxDataViewColumn *AppendTextColumn( const wxString &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
wxAlignment align = wxALIGN_CENTER,
int flags = wxDATAVIEW_COL_RESIZABLE );
- bool AppendToggleColumn( const wxString &label, unsigned int model_column,
+ wxDataViewColumn *AppendToggleColumn( const wxString &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_TOGGLE_DEFAULT_WIDTH,
wxAlignment align = wxALIGN_CENTER,
int flags = wxDATAVIEW_COL_RESIZABLE );
- bool AppendProgressColumn( const wxString &label, unsigned int model_column,
+ wxDataViewColumn *AppendProgressColumn( const wxString &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_DEFAULT_WIDTH,
wxAlignment align = wxALIGN_CENTER,
int flags = wxDATAVIEW_COL_RESIZABLE );
- bool AppendDateColumn( const wxString &label, unsigned int model_column,
+ wxDataViewColumn *AppendDateColumn( const wxString &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1,
wxAlignment align = wxALIGN_CENTER,
int flags = wxDATAVIEW_COL_RESIZABLE );
- bool AppendBitmapColumn( const wxString &label, unsigned int model_column,
+ wxDataViewColumn *AppendBitmapColumn( const wxString &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
wxAlignment align = wxALIGN_CENTER,
int flags = wxDATAVIEW_COL_RESIZABLE );
- bool AppendTextColumn( const wxBitmap &label, unsigned int model_column,
+ wxDataViewColumn *AppendTextColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
wxAlignment align = wxALIGN_CENTER,
int flags = wxDATAVIEW_COL_RESIZABLE );
- bool AppendToggleColumn( const wxBitmap &label, unsigned int model_column,
+ wxDataViewColumn *AppendToggleColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_TOGGLE_DEFAULT_WIDTH,
wxAlignment align = wxALIGN_CENTER,
int flags = wxDATAVIEW_COL_RESIZABLE );
- bool AppendProgressColumn( const wxBitmap &label, unsigned int model_column,
+ wxDataViewColumn *AppendProgressColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = wxDVC_DEFAULT_WIDTH,
wxAlignment align = wxALIGN_CENTER,
int flags = wxDATAVIEW_COL_RESIZABLE );
- bool AppendDateColumn( const wxBitmap &label, unsigned int model_column,
+ wxDataViewColumn *AppendDateColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1,
wxAlignment align = wxALIGN_CENTER,
int flags = wxDATAVIEW_COL_RESIZABLE );
- bool AppendBitmapColumn( const wxBitmap &label, unsigned int model_column,
+
+ wxDataViewColumn *AppendBitmapColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1,
wxAlignment align = wxALIGN_CENTER,
int flags = wxDATAVIEW_COL_RESIZABLE );
int GetIndent() const
{ return m_indent; }
- // TODO selection code
virtual wxDataViewItem GetSelection() = 0;
+ virtual int GetSelections( wxDataViewItemArray & sel ) const = 0;
+ virtual void SetSelections( const wxDataViewItemArray & sel ) = 0;
+ virtual void Select( const wxDataViewItem & item ) = 0;
+ virtual void Unselect( const wxDataViewItem & item ) = 0;
+ virtual bool IsSelected( const wxDataViewItem & item ) const = 0;
+
+ virtual void SelectAll() = 0;
+ virtual void UnselectAll() = 0;
+
+ virtual void EnsureVisible( const wxDataViewItem & item,
+ wxDataViewColumn *column = NULL ) = 0;
+
+ virtual void HitTest( const wxPoint &point,
+ wxDataViewItem &item, unsigned int &column ) const = 0;
+ virtual wxRect GetItemRect( const wxDataViewItem &item,
+ unsigned int column ) const = 0;
protected:
virtual void DoSetExpanderColumn() = 0 ;
private:
wxDataViewModel *m_model;
wxList m_cols;
- wxDataViewEventModelNotifier *m_eventNotifier;
unsigned int m_expander_column;
int m_indent ;
BEGIN_DECLARE_EVENT_TYPES()
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_SELECTED, -1)
+ DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_DESELECTED, -1)
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, -1)
+ DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED, -1)
+ DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED, -1)
+ DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING, -1)
+ DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, -1)
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, -1)
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, -1)
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED, -1)
wx__DECLARE_EVT1(wxEVT_COMMAND_DATAVIEW_ ## evt, id, wxDataViewEventHandler(fn))
#define EVT_DATAVIEW_ITEM_SELECTED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_SELECTED, id, fn)
+#define EVT_DATAVIEW_ITEM_DESELECTED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_DESELECTED, id, fn)
#define EVT_DATAVIEW_ITEM_ACTIVATED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_ACTIVATED, id, fn)
+#define EVT_DATAVIEW_ITEM_COLLAPSING(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_COLLAPSING, id, fn)
+#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_COLUMN_HEADER_CLICK(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_HEADER_CLICK, id, fn)
#define EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICKED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_HEADER_RIGHT_CLICK, id, fn)
#define EVT_DATAVIEW_COLUMN_SORTED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_SORTED, id, fn)