virtual void SetFlags(int flags) { m_flags = flags; UpdateDisplay(); }
virtual int GetFlags() const { return m_flags; }
- virtual void SetAsSortKey(bool sort = true) { m_sort = sort; UpdateDisplay(); }
virtual bool IsSortKey() const { return m_sort; }
- virtual void SetSortOrder(bool ascending) { m_sortAscending = ascending; UpdateDisplay(); }
+ virtual void UnsetAsSortKey() { m_sort = false; UpdateDisplay(); }
+
+ virtual void SetSortOrder(bool ascending);
+
virtual bool IsSortOrderAscending() const { return m_sortAscending; }
virtual void SetBitmap( const wxBitmap& bitmap ) { wxDataViewColumnBase::SetBitmap(bitmap); UpdateDisplay(); }
virtual wxBorder GetDefaultBorder() const;
- virtual void StartEditor( const wxDataViewItem & item, unsigned int column );
+ virtual void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column);
+
+ // These methods are specific to generic wxDataViewCtrl implementation and
+ // should not be used in portable code.
+ wxColour GetAlternateRowColour() const { return m_alternateRowColour; }
+ void SetAlternateRowColour(const wxColour& colour);
protected:
virtual void EnsureVisible( int row, int column );
+ // Notice that row here may be invalid (i.e. >= GetRowCount()), this is not
+ // an error and this function simply returns an invalid item in this case.
virtual wxDataViewItem GetItemByRow( unsigned int row ) const;
virtual int GetRowByItem( const wxDataViewItem & item ) const;
// return the column displayed at the given position in the control
wxDataViewColumn *GetColumnAt(unsigned int pos) const;
+ virtual wxDataViewColumn *GetCurrentColumn() const;
+
virtual void OnInternalIdle();
private:
void UpdateColWidths();
wxDataViewColumnList m_cols;
- // cached column best widths or 0 if not computed, values are for
+ // cached column best widths information, values are for
// respective columns from m_cols and the arrays have same size
- wxVector<int> m_colsBestWidths;
- // m_colsBestWidths partially invalid, needs recomputing
+ struct CachedColWidthInfo
+ {
+ CachedColWidthInfo() : width(0), dirty(true) {}
+ int width; // cached width or 0 if not computed
+ bool dirty; // column was invalidated, header needs updating
+ };
+ wxVector<CachedColWidthInfo> m_colsBestWidths;
+ // This indicates that at least one entry in m_colsBestWidths has 'dirty'
+ // flag set. It's cheaper to check one flag in OnInternalIdle() than to
+ // iterate over m_colsBestWidths to check if anything needs to be done.
bool m_colsDirty;
wxDataViewModelNotifier *m_notifier;
wxDataViewMainWindow *m_clientArea;
wxDataViewHeaderWindow *m_headerArea;
+ // user defined color to draw row lines, may be invalid
+ wxColour m_alternateRowColour;
+
// the index of the column currently used for sorting or -1
int m_sortingColumnIdx;