X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9f7aee01986653bfc0fe2e7ebf5a68cb12d7f0b1..1bb7462687e4ce250372f6201a92a155a6f67af6:/include/wx/generic/grid.h diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h index 546bf7ea26..1e0e44b01c 100644 --- a/include/wx/generic/grid.h +++ b/include/wx/generic/grid.h @@ -22,7 +22,7 @@ // constants // ---------------------------------------------------------------------------- -extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxGridNameStr[]; +extern WXDLLIMPEXP_DATA_ADV(const char) wxGridNameStr[]; // Default parameters for wxGrid // @@ -77,6 +77,7 @@ class WXDLLIMPEXP_FWD_ADV wxGridWindow; 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; @@ -913,12 +914,15 @@ public: // 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(this)->GetNumberRows(); } int GetColsCount() const - { return wx_const_cast(wxGridTableBase *, this)->GetNumberCols(); } + { return const_cast(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) { @@ -1071,7 +1075,6 @@ public: 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 // @@ -1126,14 +1129,19 @@ public: // ------------------------ // 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, @@ -1377,7 +1385,13 @@ public: 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 ); } @@ -1699,7 +1713,7 @@ public: // 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). @@ -1728,12 +1742,10 @@ public: 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 ); } @@ -1894,9 +1906,30 @@ protected: 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(m_colWindow); + } + + wxGridColLabelWindow *GetColLabelWindow() const + { + wxASSERT_MSG( !m_useNativeHeader, "no column label window" ); + + return reinterpret_cast(m_colWindow); + } wxGridTableBase *m_table; bool m_ownTable; @@ -1944,7 +1977,8 @@ protected: wxArrayInt m_colWidths; wxArrayInt m_colRights; - bool m_nativeColumnLabels; + bool m_useNativeHeader, + m_nativeColumnLabels; // get the col/row coords int GetColWidth(int col) const; @@ -2117,9 +2151,9 @@ protected: 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& ); @@ -2178,6 +2212,8 @@ protected: friend class wxGridRowLabelWindow; friend class wxGridWindow; + friend class wxGridHeaderCtrl; + private: // implement wxScrolledWindow method to return m_gridWin size virtual wxSize GetSizeAvailableForScrollTarget(const wxSize& size); @@ -2225,8 +2261,12 @@ private: 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(); @@ -2326,7 +2366,9 @@ public: 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, @@ -2387,7 +2429,7 @@ public: SetEventObject(obj); } - wxDEPRECATED( + wxDEPRECATED( inline wxGridSizeEvent(int id, wxEventType type, wxObject* obj, @@ -2445,7 +2487,7 @@ public: SetEventObject(obj); } - wxDEPRECATED( + wxDEPRECATED( inline wxGridRangeSelectEvent(int id, wxEventType type, wxObject* obj,