#include "wx/variant.h"
#include "wx/dynarray.h"
#include "wx/icon.h"
+#include "wx/itemid.h"
#include "wx/weakref.h"
#include "wx/vector.h"
#include "wx/dataobj.h"
// wxDataViewCtrl globals
// ----------------------------------------------------------------------------
-class WXDLLIMPEXP_FWD_ADV wxDataViewItem;
class WXDLLIMPEXP_FWD_ADV wxDataViewModel;
class WXDLLIMPEXP_FWD_ADV wxDataViewCtrl;
class WXDLLIMPEXP_FWD_ADV wxDataViewColumn;
// wxDataViewItem
// ---------------------------------------------------------
-class WXDLLIMPEXP_ADV wxDataViewItem
+// Make it a class and not a typedef to allow forward declaring it.
+class wxDataViewItem : public wxItemId<void*>
{
public:
- wxDataViewItem() : m_id(NULL) {}
- wxDataViewItem(const wxDataViewItem &item) : m_id(item.m_id) {}
-
- wxEXPLICIT wxDataViewItem(void* id) : m_id(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;
+ wxDataViewItem() : wxItemId<void*>() { }
+ wxEXPLICIT wxDataViewItem(void* pItem) : wxItemId<void*>(pItem) { }
};
-inline
-bool operator==(const wxDataViewItem& left, const wxDataViewItem& right)
-{
- return left.GetID() == right.GetID();
-}
-
-inline
-bool operator!=(const wxDataViewItem& left, const wxDataViewItem& right)
-{
- return !(left == right);
-}
-
WX_DEFINE_ARRAY(wxDataViewItem, wxDataViewItemArray);
// ---------------------------------------------------------
void SetColour(const wxColour& colour) { m_colour = colour; }
void SetBold( bool set ) { m_bold = set; }
void SetItalic( bool set ) { m_italic = set; }
+ void SetBackgroundColour(const wxColour& colour) { m_bgColour = colour; }
// accessors
bool HasColour() const { return m_colour.IsOk(); }
bool GetBold() const { return m_bold; }
bool GetItalic() const { return m_italic; }
- bool IsDefault() const { return !(HasColour() || HasFont()); }
+ bool HasBackgroundColour() const { return m_bgColour.IsOk(); }
+ const wxColour& GetBackgroundColour() const { return m_bgColour; }
+
+ bool IsDefault() const { return !(HasColour() || HasFont() || HasBackgroundColour()); }
// Return the font based on the given one with this attribute applied to it.
wxFont GetEffectiveFont(const wxFont& font) const;
wxColour m_colour;
bool m_bold;
bool m_italic;
+ wxColour m_bgColour;
};
wxDataViewItem GetCurrentItem() const;
void SetCurrentItem(const wxDataViewItem& item);
- virtual wxDataViewItem GetSelection() const = 0;
+ // Currently focused column of the current item or NULL if no column has focus
+ virtual wxDataViewColumn *GetCurrentColumn() const = 0;
+
+ // Selection: both GetSelection() and GetSelections() can be used for the
+ // controls both with and without wxDV_MULTIPLE style. For single selection
+ // controls GetSelections() is not very useful however. And for multi
+ // selection controls GetSelection() returns an invalid item if more than
+ // one item is selected. Use GetSelectedItemsCount() or HasSelection() to
+ // check if any items are selected at all.
+ virtual int GetSelectedItemsCount() const = 0;
+ bool HasSelection() const { return GetSelectedItemsCount() != 0; }
+ wxDataViewItem GetSelection() const;
virtual int GetSelections( wxDataViewItemArray & sel ) const = 0;
virtual void SetSelections( const wxDataViewItemArray & sel ) = 0;
virtual void Select( const wxDataViewItem & item ) = 0;
virtual bool SetRowHeight( int WXUNUSED(rowHeight) ) { return false; }
- virtual void StartEditor( const wxDataViewItem & WXUNUSED(item),
- unsigned int WXUNUSED(column) )
- { }
+ virtual void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column) = 0;
+
+ // Use EditItem() instead
+ wxDEPRECATED( void StartEditor(const wxDataViewItem& item, unsigned int column) );
#if wxUSE_DRAG_AND_DROP
virtual bool EnableDragSource(const wxDataFormat& WXUNUSED(format))
virtual bool HasDefaultCompare() const
{ return true; }
virtual unsigned int GetColumnCount() const
- { return 1; };
+ { return 1; }
virtual wxString GetColumnType( unsigned int WXUNUSED(col) ) const
{ return wxT("wxDataViewIconText"); }
{ return GetStore()->IsContainer(item); }
wxDataViewItem AppendItem( const wxDataViewItem& parent,
- const wxString &text, int icon = -1, wxClientData *data = NULL );
+ const wxString &text, int icon = NO_IMAGE, wxClientData *data = NULL );
wxDataViewItem PrependItem( const wxDataViewItem& parent,
- const wxString &text, int icon = -1, wxClientData *data = NULL );
+ const wxString &text, int icon = NO_IMAGE, wxClientData *data = NULL );
wxDataViewItem InsertItem( const wxDataViewItem& parent, const wxDataViewItem& previous,
- const wxString &text, int icon = -1, wxClientData *data = NULL );
+ const wxString &text, int icon = NO_IMAGE, wxClientData *data = NULL );
wxDataViewItem PrependContainer( const wxDataViewItem& parent,
- const wxString &text, int icon = -1, int expanded = -1,
+ const wxString &text, int icon = NO_IMAGE, int expanded = NO_IMAGE,
wxClientData *data = NULL );
wxDataViewItem AppendContainer( const wxDataViewItem& parent,
- const wxString &text, int icon = -1, int expanded = -1,
+ const wxString &text, int icon = NO_IMAGE, int expanded = NO_IMAGE,
wxClientData *data = NULL );
wxDataViewItem InsertContainer( const wxDataViewItem& parent, const wxDataViewItem& previous,
- const wxString &text, int icon = -1, int expanded = -1,
+ const wxString &text, int icon = NO_IMAGE, int expanded = NO_IMAGE,
wxClientData *data = NULL );
wxDataViewItem GetNthChild( const wxDataViewItem& parent, unsigned int pos ) const