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;
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;