// constants
// ----------------------------------------------------------------------------
-extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxGridNameStr[];
+extern WXDLLIMPEXP_DATA_ADV(const char) wxGridNameStr[];
// Default parameters for wxGrid
//
class WXDLLIMPEXP_FWD_ADV wxGridTypeRegistry;
class WXDLLIMPEXP_FWD_ADV wxGridSelection;
+class WXDLLIMPEXP_FWD_CORE wxHeaderCtrl;
class WXDLLIMPEXP_FWD_CORE wxCheckBox;
class WXDLLIMPEXP_FWD_CORE wxComboBox;
class WXDLLIMPEXP_FWD_CORE wxTextCtrl;
// would break the existing code overriding them, so instead we provide
// these const synonyms which can be used from const-correct code
int GetRowsCount() const
- { return wx_const_cast(wxGridTableBase *, this)->GetNumberRows(); }
+ { return const_cast<wxGridTableBase *>(this)->GetNumberRows(); }
int GetColsCount() const
- { return wx_const_cast(wxGridTableBase *, this)->GetNumberCols(); }
+ { return const_cast<wxGridTableBase *>(this)->GetNumberCols(); }
- virtual bool IsEmptyCell( int row, int col ) = 0;
+ virtual bool IsEmptyCell( int row, int col )
+ {
+ return GetValue(row, col).empty();
+ }
bool IsEmpty(const wxGridCellCoords& coord)
{
int GetNumberCols();
wxString GetValue( int row, int col );
void SetValue( int row, int col, const wxString& s );
- bool IsEmptyCell( int row, int col );
// overridden functions from wxGridTableBase
//
// ------------------------
// ctor and Create() create the grid window, as with the other controls
- wxGrid();
+ wxGrid() { Init(); }
wxGrid(wxWindow *parent,
wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxWANTS_CHARS,
- const wxString& name = wxGridNameStr);
+ const wxString& name = wxGridNameStr)
+ {
+ Init();
+
+ Create(parent, id, pos, size, style, name);
+ }
bool Create(wxWindow *parent,
wxWindowID id,
int GetCellHighlightPenWidth() const { return m_cellHighlightPenWidth; }
int GetCellHighlightROPenWidth() const { return m_cellHighlightROPenWidth; }
- void SetUseNativeColLabels( bool native = true );
+ // this one will use wxHeaderCtrl for the column labels
+ void UseNativeColHeader(bool native = true);
+
+ // this one will still draw them manually but using the native renderer
+ // instead of using the same appearance as for the row labels
+ void SetUseNativeColLabels( bool native = true );
+
void SetRowLabelSize( int width );
void SetColLabelSize( int height );
void HideRowLabels() { SetRowLabelSize( 0 ); }
// Accessors for component windows
wxWindow* GetGridWindow() const { return (wxWindow*)m_gridWin; }
wxWindow* GetGridRowLabelWindow() const { return (wxWindow*)m_rowLabelWin; }
- wxWindow* GetGridColLabelWindow() const { return (wxWindow*)m_colLabelWin; }
+ wxWindow* GetGridColLabelWindow() const { return m_colWindow; }
wxWindow* GetGridCornerLabelWindow() const { return (wxWindow*)m_cornerLabelWin; }
// Allow adjustment of scroll increment. The default is (15, 15).
int x, int y, int w = wxDefaultCoord, int h = wxDefaultCoord,
long style = wxWANTS_CHARS,
const wxString& name = wxPanelNameStr )
- : wxScrolledWindow( parent, wxID_ANY, wxPoint(x,y), wxSize(w,h),
- (style|wxWANTS_CHARS), name )
- {
- InitVars();
- Create();
- }
+ {
+ Init();
+ Create(parent, wxID_ANY, wxPoint(x, y), wxSize(w, h), style, name);
+ }
void SetCellValue( const wxString& val, int row, int col )
{ SetCellValue( row, col, val ); }
bool m_created;
wxGridWindow *m_gridWin;
- wxGridRowLabelWindow *m_rowLabelWin;
- wxGridColLabelWindow *m_colLabelWin;
wxGridCornerLabelWindow *m_cornerLabelWin;
+ wxGridRowLabelWindow *m_rowLabelWin;
+
+ // the real type of the column window depends on m_useNativeHeader value:
+ // if it is true, its dynamic type is wxHeaderCtrl, otherwise it is
+ // wxGridColLabelWindow, use accessors below when the real type matters
+ wxWindow *m_colWindow;
+
+ wxHeaderCtrl *GetColHeader() const
+ {
+ wxASSERT_MSG( m_useNativeHeader, "no column header window" );
+
+ // static_cast<> doesn't work without the full class declaration in
+ // view and we prefer to avoid adding more compile-time dependencies
+ // even at the cost of using reinterpret_cast<>
+ return reinterpret_cast<wxHeaderCtrl *>(m_colWindow);
+ }
+
+ wxGridColLabelWindow *GetColLabelWindow() const
+ {
+ wxASSERT_MSG( !m_useNativeHeader, "no column label window" );
+
+ return reinterpret_cast<wxGridColLabelWindow *>(m_colWindow);
+ }
wxGridTableBase *m_table;
bool m_ownTable;
wxArrayInt m_colWidths;
wxArrayInt m_colRights;
- bool m_nativeColumnLabels;
+ bool m_useNativeHeader,
+ m_nativeColumnLabels;
// get the col/row coords
int GetColWidth(int col) const;
int m_scrollLineX; // X scroll increment
int m_scrollLineY; // Y scroll increment
+ void Init(); // common part of all ctors
void Create();
- void Init();
- void InitVars();
+ void CreateColumnWindow();
void CalcDimensions();
void CalcWindowSizes();
bool Redimension( wxGridTableMessage& );
friend class wxGridRowLabelWindow;
friend class wxGridWindow;
+ friend class wxGridHeaderCtrl;
+
private:
// implement wxScrolledWindow method to return m_gridWin size
virtual wxSize GetSizeAvailableForScrollTarget(const wxSize& size);
void ProcessColLabelMouseEvent(wxMouseEvent& event);
void ProcessCornerLabelMouseEvent(wxMouseEvent& event);
+ void DoStartResizeCol(int col);
+ void DoUpdateResizeCol(int x);
+ void DoUpdateResizeColWidth(int w);
+
void DoEndDragResizeRow();
- void DoEndDragResizeCol();
+ void DoEndDragResizeCol(wxMouseEvent *event = NULL);
void DoEndDragMoveCol();
SetEventObject(obj);
}
- wxDEPRECATED(
+ // explicitly specifying inline allows gcc < 3.4 to
+ // handle the deprecation attribute even in the constructor.
+ wxDEPRECATED( inline
wxGridEvent(int id,
wxEventType type,
wxObject* obj,
SetEventObject(obj);
}
- wxDEPRECATED(
+ wxDEPRECATED( inline
wxGridSizeEvent(int id,
wxEventType type,
wxObject* obj,
SetEventObject(obj);
}
- wxDEPRECATED(
+ wxDEPRECATED( inline
wxGridRangeSelectEvent(int id,
wxEventType type,
wxObject* obj,