X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/779e28da630ef9fba6441fb0bab01cd538a7e7bb..77c8efc8c37da6d6a5e2e8022d21d1cd7d76371d:/include/wx/generic/grid.h diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h index abdab46ea5..4fe4b1686b 100644 --- a/include/wx/generic/grid.h +++ b/include/wx/generic/grid.h @@ -213,7 +213,9 @@ public: // Draws the part of the cell not occupied by the control: the base class // version just fills it with background colour from the attribute - virtual void PaintBackground(const wxRect& rectCell, wxGridCellAttr *attr); + virtual void PaintBackground(wxDC& dc, + const wxRect& rectCell, + const wxGridCellAttr& attr); // The methods called by wxGrid when a cell is edited: first BeginEdit() is @@ -918,6 +920,15 @@ public: wxGridSelectRowsOrColumns = wxGridSelectRows | wxGridSelectColumns }; + // Different behaviour of the TAB key when the end (or the beginning, for + // Shift-TAB) of the current row is reached: + enum TabBehaviour + { + Tab_Stop, // Do nothing, this is default. + Tab_Wrap, // Move to the next (or previous) row. + Tab_Leave // Move to the next (or previous) control. + }; + // creation and destruction // ------------------------ @@ -1172,6 +1183,8 @@ public: bool MoveCursorLeftBlock( bool expandSelection ); bool MoveCursorRightBlock( bool expandSelection ); + void SetTabBehaviour(TabBehaviour behaviour) { m_tabBehaviour = behaviour; } + // ------ label and gridline formatting // @@ -1357,13 +1370,13 @@ public: // ------ row and col sizes void SetDefaultRowSize( int height, bool resizeExistingRows = false ); void SetRowSize( int row, int height ); - void HideRow(int row) { SetRowSize(row, 0); } - void ShowRow(int row) { SetRowSize(row, -1); } + void HideRow(int row) { DoSetRowSize(row, 0); } + void ShowRow(int row) { DoSetRowSize(row, -1); } void SetDefaultColSize( int width, bool resizeExistingCols = false ); void SetColSize( int col, int width ); - void HideCol(int col) { SetColSize(col, 0); } - void ShowCol(int col) { SetColSize(col, -1); } + void HideCol(int col) { DoSetColSize(col, 0); } + void ShowCol(int col) { DoSetColSize(col, -1); } // the row and column sizes can be also set all at once using // wxGridSizesInfo which holds all of them at once @@ -2074,6 +2087,8 @@ protected: bool m_editable; // applies to whole grid bool m_cellEditCtrlEnabled; // is in-place edit currently shown? + TabBehaviour m_tabBehaviour; // determines how the TAB key behaves + void Init(); // common part of all ctors void Create(); void CreateColumnWindow(); @@ -2241,6 +2256,8 @@ private: void DoEndDragResizeCol(const wxMouseEvent& event); void DoEndMoveCol(int pos); + // process a TAB keypress + void DoGridProcessTab(wxKeyboardState& kbdState); // common implementations of methods defined for both rows and columns void DeselectLine(int line, const wxGridOperations& oper); @@ -2274,10 +2291,35 @@ private: void DoDisableLineResize(int line, wxGridFixedIndicesSet *& setFixed); bool DoCanResizeLine(int line, const wxGridFixedIndicesSet *setFixed) const; + // Helper of Render(): get grid size, origin offset and fill cell arrays + void GetRenderSizes( const wxGridCellCoords& topLeft, + const wxGridCellCoords& bottomRight, + wxPoint& pointOffSet, wxSize& sizeGrid, + wxGridCellCoordsArray& renderCells, + wxArrayInt& arrayCols, wxArrayInt& arrayRows ); // Helper of Render(): set the scale to draw the cells at the right size. void SetRenderScale( wxDC& dc, const wxPoint& pos, const wxSize& size, - int gridWidth, int gridHeight ); + const wxSize& sizeGrid ); + + // Helper of Render(): get render start position from passed parameter + wxPoint GetRenderPosition( wxDC& dc, const wxPoint& position ); + + // Helper of Render(): draws a box around the rendered area + void DoRenderBox( wxDC& dc, const int& style, + const wxPoint& pointOffSet, + const wxSize& sizeCellArea, + const wxGridCellCoords& topLeft, + const wxGridCellCoords& bottomRight ); + + // Implementation of public Set{Row,Col}Size() and {Hide,Show}{Row,Col}(). + // They interpret their height or width parameter slightly different from + // the public methods where -1 in it means "auto fit to the label" for the + // compatibility reasons. Here it means "show a previously hidden row or + // column" while 0 means "hide it" just as in the public methods. And any + // positive values are handled naturally, i.e. they just specify the size. + void DoSetRowSize( int row, int height ); + void DoSetColSize( int col, int width ); // these sets contain the indices of fixed, i.e. non-resizable @@ -2573,6 +2615,7 @@ wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_GRID_EDITOR_CREATED, wxGridEdit wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_GRID_CELL_BEGIN_DRAG, wxGridEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_GRID_COL_MOVE, wxGridEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_GRID_COL_SORT, wxGridEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_GRID_TABBING, wxGridEvent ); typedef void (wxEvtHandler::*wxGridEventFunction)(wxGridEvent&); typedef void (wxEvtHandler::*wxGridSizeEventFunction)(wxGridSizeEvent&); @@ -2623,6 +2666,7 @@ typedef void (wxEvtHandler::*wxGridEditorCreatedEventFunction)(wxGridEditorCreat #define EVT_GRID_CMD_EDITOR_HIDDEN(id, fn) wx__DECLARE_GRIDEVT(EDITOR_HIDDEN, id, fn) #define EVT_GRID_CMD_EDITOR_CREATED(id, fn) wx__DECLARE_GRIDEDITOREVT(EDITOR_CREATED, id, fn) #define EVT_GRID_CMD_CELL_BEGIN_DRAG(id, fn) wx__DECLARE_GRIDEVT(CELL_BEGIN_DRAG, id, fn) +#define EVT_GRID_CMD_TABBING(id, fn) wx__DECLARE_GRIDEVT(TABBING, id, fn) // same as above but for any id (exists mainly for backwards compatibility but // then it's also true that you rarely have multiple grid in the same window) @@ -2646,6 +2690,7 @@ typedef void (wxEvtHandler::*wxGridEditorCreatedEventFunction)(wxGridEditorCreat #define EVT_GRID_EDITOR_HIDDEN(fn) EVT_GRID_CMD_EDITOR_HIDDEN(wxID_ANY, fn) #define EVT_GRID_EDITOR_CREATED(fn) EVT_GRID_CMD_EDITOR_CREATED(wxID_ANY, fn) #define EVT_GRID_CELL_BEGIN_DRAG(fn) EVT_GRID_CMD_CELL_BEGIN_DRAG(wxID_ANY, fn) +#define EVT_GRID_TABBING(fn) EVT_GRID_CMD_TABBING(wxID_ANY, fn) // we used to have a single wxEVT_GRID_CELL_CHANGE event but it was split into // wxEVT_GRID_CELL_CHANGING and CHANGED ones in wx 2.9.0, however the CHANGED