// 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 GetColLabelTextOrientation() const;
wxString GetRowLabelValue( int row ) const;
wxString GetColLabelValue( int col ) const;
- wxColour GetGridLineColour() const { return m_gridLineColour; }
- // these methods may be overridden to customize individual grid lines
- // appearance
- virtual wxPen GetDefaultGridLinePen();
- virtual wxPen GetRowGridLinePen(int row);
- virtual wxPen GetColGridLinePen(int col);
wxColour GetCellHighlightColour() const { return m_cellHighlightColour; }
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 ); }
void SetColLabelTextOrientation( int textOrientation );
void SetRowLabelValue( int row, const wxString& );
void SetColLabelValue( int col, const wxString& );
- void SetGridLineColour( const wxColour& );
void SetCellHighlightColour( const wxColour& );
void SetCellHighlightPenWidth(int width);
void SetCellHighlightROPenWidth(int width);
void DisableDragCell() { EnableDragCell( false ); }
bool CanDragCell() const { return m_canDragCell; }
+
+ // grid lines
+ // ----------
+
+ // enable or disable drawing of the lines
+ void EnableGridLines(bool enable = true);
+ bool GridLinesEnabled() const { return m_gridLinesEnabled; }
+
+ // by default grid lines stop at last column/row, but this may be changed
+ void ClipHorzGridLines(bool clip)
+ { DoClipGridLines(m_gridLinesClipHorz, clip); }
+ void ClipVertGridLines(bool clip)
+ { DoClipGridLines(m_gridLinesClipVert, clip); }
+ bool AreHorzGridLinesClipped() const { return m_gridLinesClipHorz; }
+ bool AreVertGridLinesClipped() const { return m_gridLinesClipVert; }
+
+ // this can be used to change the global grid lines colour
+ void SetGridLineColour(const wxColour& col);
+ wxColour GetGridLineColour() const { return m_gridLineColour; }
+
+ // these methods may be overridden to customize individual grid lines
+ // appearance
+ virtual wxPen GetDefaultGridLinePen();
+ virtual wxPen GetRowGridLinePen(int row);
+ virtual wxPen GetColGridLinePen(int col);
+
+
+ // attributes
+ // ----------
+
// this sets the specified attribute for this cell or in this row/col
void SetAttr(int row, int col, wxGridCellAttr *attr);
void SetRowAttr(int row, wxGridCellAttr *attr);
void SetColFormatFloat(int col, int width = -1, int precision = -1);
void SetColFormatCustom(int col, const wxString& typeName);
- void EnableGridLines( bool enable = true );
- bool GridLinesEnabled() const { return m_gridLinesEnabled; }
-
// ------ row and col formatting
//
int GetDefaultRowSize() const;
// 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;
wxColour m_gridLineColour;
bool m_gridLinesEnabled;
+ bool m_gridLinesClipHorz,
+ m_gridLinesClipVert;
wxColour m_cellHighlightColour;
int m_cellHighlightPenWidth;
int m_cellHighlightROPenWidth;
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);
+ // redraw the grid lines, should be called after changing their attributes
+ void RedrawGridLines();
+
+ // common part of Clip{Horz,Vert}GridLines
+ void DoClipGridLines(bool& var, bool clip);
+
+
// event handlers and their helpers
// --------------------------------
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,