X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bec7026270ecdb5f9019c3180b228da0469df710..d8c74d044b5acfedfbc15bf29bbfa4f4bc8f1bf7:/include/wx/generic/grid.h diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h index 767635a16f..789ffbfc52 100644 --- a/include/wx/generic/grid.h +++ b/include/wx/generic/grid.h @@ -87,6 +87,7 @@ class WXDLLIMPEXP_FWD_CORE wxSpinCtrl; class wxGridOperations; class wxGridRowOperations; class wxGridColumnOperations; +class wxGridDirectionOperations; // ---------------------------------------------------------------------------- // macros @@ -319,7 +320,7 @@ public: // Show or hide the edit control, use the specified attributes to set // colours/fonts for it - virtual void Show(bool show, wxGridCellAttr *attr = (wxGridCellAttr *)NULL); + virtual void Show(bool show, wxGridCellAttr *attr = NULL); // Draws the part of the cell not occupied by the control: the base class // version just fills it with background colour from the attribute @@ -829,14 +830,72 @@ private: DECLARE_NO_COPY_CLASS(wxGridCellAttrProvider) }; -////////////////////////////////////////////////////////////////////// +// ---------------------------------------------------------------------------- +// wxGridCellCoords: location of a cell in the grid +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_ADV wxGridCellCoords +{ +public: + wxGridCellCoords() { m_row = m_col = -1; } + wxGridCellCoords( int r, int c ) { m_row = r; m_col = c; } + + // default copy ctor is ok + + int GetRow() const { return m_row; } + void SetRow( int n ) { m_row = n; } + int GetCol() const { return m_col; } + void SetCol( int n ) { m_col = n; } + void Set( int row, int col ) { m_row = row; m_col = col; } + + wxGridCellCoords& operator=( const wxGridCellCoords& other ) + { + if ( &other != this ) + { + m_row=other.m_row; + m_col=other.m_col; + } + return *this; + } + + bool operator==( const wxGridCellCoords& other ) const + { + return (m_row == other.m_row && m_col == other.m_col); + } + + bool operator!=( const wxGridCellCoords& other ) const + { + return (m_row != other.m_row || m_col != other.m_col); + } + + bool operator!() const + { + return (m_row == -1 && m_col == -1 ); + } + +private: + int m_row; + int m_col; +}; + + +// For comparisons... // -// Grid table classes +extern WXDLLIMPEXP_ADV wxGridCellCoords wxGridNoCellCoords; +extern WXDLLIMPEXP_ADV wxRect wxGridNoCellRect; + +// An array of cell coords... // -////////////////////////////////////////////////////////////////////// +WX_DECLARE_OBJARRAY_WITH_DECL(wxGridCellCoords, wxGridCellCoordsArray, + class WXDLLIMPEXP_ADV); +// ---------------------------------------------------------------------------- +// Grid table classes +// ---------------------------------------------------------------------------- -class WXDLLIMPEXP_ADV wxGridTableBase : public wxObject, public wxClientDataContainer +// the abstract base class +class WXDLLIMPEXP_ADV wxGridTableBase : public wxObject, + public wxClientDataContainer { public: wxGridTableBase(); @@ -844,9 +903,28 @@ public: // You must override these functions in a derived table class // + + // return the number of rows and columns in this table virtual int GetNumberRows() = 0; virtual int GetNumberCols() = 0; + + // the methods above are unfortunately non-const even though they should + // have been const -- but changing it now is not possible any longer as it + // 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(); } + int GetColsCount() const + { return wx_const_cast(wxGridTableBase *, this)->GetNumberCols(); } + + virtual bool IsEmptyCell( int row, int col ) = 0; + + bool IsEmpty(const wxGridCellCoords& coord) + { + return IsEmptyCell(coord.GetRow(), coord.GetCol()); + } + virtual wxString GetValue( int row, int col ) = 0; virtual void SetValue( int row, int col, const wxString& value ) = 0; @@ -1028,65 +1106,6 @@ private: // Grid view classes // ============================================================================ -// ---------------------------------------------------------------------------- -// wxGridCellCoords: location of a cell in the grid -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxGridCellCoords -{ -public: - wxGridCellCoords() { m_row = m_col = -1; } - wxGridCellCoords( int r, int c ) { m_row = r; m_col = c; } - - // default copy ctor is ok - - int GetRow() const { return m_row; } - void SetRow( int n ) { m_row = n; } - int GetCol() const { return m_col; } - void SetCol( int n ) { m_col = n; } - void Set( int row, int col ) { m_row = row; m_col = col; } - - wxGridCellCoords& operator=( const wxGridCellCoords& other ) - { - if ( &other != this ) - { - m_row=other.m_row; - m_col=other.m_col; - } - return *this; - } - - bool operator==( const wxGridCellCoords& other ) const - { - return (m_row == other.m_row && m_col == other.m_col); - } - - bool operator!=( const wxGridCellCoords& other ) const - { - return (m_row != other.m_row || m_col != other.m_col); - } - - bool operator!() const - { - return (m_row == -1 && m_col == -1 ); - } - -private: - int m_row; - int m_col; -}; - - -// For comparisons... -// -extern WXDLLIMPEXP_ADV wxGridCellCoords wxGridNoCellCoords; -extern WXDLLIMPEXP_ADV wxRect wxGridNoCellRect; - -// An array of cell coords... -// -WX_DECLARE_OBJARRAY_WITH_DECL(wxGridCellCoords, wxGridCellCoordsArray, - class WXDLLIMPEXP_ADV); - // ---------------------------------------------------------------------------- // wxGrid // ---------------------------------------------------------------------------- @@ -1139,6 +1158,10 @@ public: bool takeOwnership = false, wxGridSelectionModes selmode = wxGridSelectCells ); + bool ProcessTableMessage(wxGridTableMessage&); + + wxGridTableBase *GetTable() const { return m_table; } + void SetSelectionMode(wxGridSelectionModes selmode); wxGridSelectionModes GetSelectionMode() const; @@ -1157,27 +1180,37 @@ public: wxGridCellCoordsArray CalcCellsExposed( const wxRegion& reg ) const; - // ------ event handlers - // - void ProcessRowLabelMouseEvent( wxMouseEvent& event ); - void ProcessColLabelMouseEvent( wxMouseEvent& event ); - void ProcessCornerLabelMouseEvent( wxMouseEvent& event ); - void ProcessGridCellMouseEvent( wxMouseEvent& event ); - bool ProcessTableMessage( wxGridTableMessage& ); - - void DoEndDragResizeRow(); - void DoEndDragResizeCol(); - void DoEndDragMoveCol(); + void ClearGrid(); + bool InsertRows(int pos = 0, int numRows = 1, bool updateLabels = true) + { + return DoModifyLines(&wxGridTableBase::InsertRows, + pos, numRows, updateLabels); + } + bool InsertCols(int pos = 0, int numCols = 1, bool updateLabels = true) + { + return DoModifyLines(&wxGridTableBase::InsertCols, + pos, numCols, updateLabels); + } - wxGridTableBase * GetTable() const { return m_table; } + bool AppendRows(int numRows = 1, bool updateLabels = true) + { + return DoAppendLines(&wxGridTableBase::AppendRows, numRows, updateLabels); + } + bool AppendCols(int numCols = 1, bool updateLabels = true) + { + return DoAppendLines(&wxGridTableBase::AppendCols, numCols, updateLabels); + } - void ClearGrid(); - bool InsertRows( int pos = 0, int numRows = 1, bool updateLabels = true ); - bool AppendRows( int numRows = 1, bool updateLabels = true ); - bool DeleteRows( int pos = 0, int numRows = 1, bool updateLabels = true ); - bool InsertCols( int pos = 0, int numCols = 1, bool updateLabels = true ); - bool AppendCols( int numCols = 1, bool updateLabels = true ); - bool DeleteCols( int pos = 0, int numCols = 1, bool updateLabels = true ); + bool DeleteRows(int pos = 0, int numRows = 1, bool updateLabels = true) + { + return DoModifyLines(&wxGridTableBase::DeleteRows, + pos, numRows, updateLabels); + } + bool DeleteCols(int pos = 0, int numCols = 1, bool updateLabels = true) + { + return DoModifyLines(&wxGridTableBase::DeleteCols, + pos, numCols, updateLabels); + } void DrawGridCellArea( wxDC& dc , const wxGridCellCoordsArray& cells ); void DrawGridSpace( wxDC& dc ); @@ -1231,8 +1264,7 @@ public: int GetBatchCount() { return m_batchCount; } - virtual void Refresh(bool eraseb = true, - const wxRect* rect = (const wxRect *) NULL); + virtual void Refresh(bool eraseb = true, const wxRect* rect = NULL); // Use this, rather than wxWindow::Refresh(), to force an // immediate repainting of the grid. Has no effect if you are @@ -1267,7 +1299,12 @@ public: // grid cells and labels so you will need to convert from device // coordinates for mouse events etc. // - void XYToCell( int x, int y, wxGridCellCoords& ) const; + wxGridCellCoords XYToCell(int x, int y) const; + void XYToCell(int x, int y, wxGridCellCoords& coords) const + { coords = XYToCell(x, y); } + wxGridCellCoords XYToCell(const wxPoint& pos) const + { return XYToCell(pos.x, pos.y); } + int YToRow( int y, bool clipToMinMax = false ) const; int XToCol( int x, bool clipToMinMax = false ) const; @@ -1294,8 +1331,20 @@ public: // ------ grid cursor movement functions // - void SetGridCursor( int row, int col ) - { SetCurrentCell( wxGridCellCoords(row, col) ); } + void SetGridCursor(int row, int col) { SetCurrentCell(row, col); } + void SetGridCursor(const wxGridCellCoords& c) { SetCurrentCell(c); } + + void GoToCell(int row, int col) + { + if ( SetCurrentCell(row, col) ) + MakeCellVisible(row, col); + } + + void GoToCell(const wxGridCellCoords& coords) + { + if ( SetCurrentCell(coords) ) + MakeCellVisible(coords); + } bool MoveCursorUp( bool expandSelection ); bool MoveCursorDown( bool expandSelection ); @@ -1837,10 +1886,22 @@ protected: wxGridCellCoords m_currentCellCoords; - wxGridCellCoords m_selectingTopLeft; - wxGridCellCoords m_selectingBottomRight; - wxGridCellCoords m_selectingKeyboard; + // the corners of the block being currently selected or wxGridNoCellCoords + wxGridCellCoords m_selectedBlockTopLeft; + wxGridCellCoords m_selectedBlockBottomRight; + + // when selecting blocks of cells (either from the keyboard using Shift + // with cursor keys, or by dragging the mouse), the selection is anchored + // at m_currentCellCoords which defines one of the corners of the rectangle + // being selected -- and this variable defines the other corner, i.e. it's + // either m_selectedBlockTopLeft or m_selectedBlockBottomRight depending on + // which of them is not m_currentCellCoords + // + // if no block selection is in process, it is set to wxGridNoCellCoords + wxGridCellCoords m_selectedBlockCorner; + wxGridSelection *m_selection; + wxColour m_selectionBackground; wxColour m_selectionForeground; @@ -1977,12 +2038,22 @@ protected: // for this to work, you should always use it and not set m_cursorMode // directly! void ChangeCursorMode(CursorMode mode, - wxWindow *win = (wxWindow *)NULL, + wxWindow *win = NULL, bool captureMouse = true); wxWindow *m_winCapture; // the window which captured the mouse + + // this variable is used not for finding the correct current cursor but + // mainly for finding out what is going to happen if the mouse starts being + // dragged right now + // + // by default it is WXGRID_CURSOR_SELECT_CELL meaning that nothing else is + // going on, and it is set to one of RESIZE/SELECT/MOVE values while the + // corresponding operation will be started if the user starts dragging the + // mouse from the current position CursorMode m_cursorMode; + //Column positions wxArrayInt m_colAt; int m_moveToCol; @@ -1999,7 +2070,16 @@ protected: int m_dragLastPos; int m_dragRowOrCol; + // true if a drag operation is in progress; when this is true, + // m_startDragPos is valid, i.e. not wxDefaultPosition bool m_isDragging; + + // the position (in physical coordinates) where the user started dragging + // the mouse or wxDefaultPosition if mouse isn't being dragged + // + // notice that this can be != wxDefaultPosition while m_isDragging is still + // false because we wait until the mouse is moved some distance away before + // setting m_isDragging to true wxPoint m_startDragPos; bool m_waitForSlowClick; @@ -2023,14 +2103,20 @@ protected: bool Redimension( wxGridTableMessage& ); - int SendEvent( const wxEventType, int row, int col, wxMouseEvent& ); - int SendEvent( const wxEventType, int row, int col ); - int SendEvent( const wxEventType type) - { - return SendEvent(type, - m_currentCellCoords.GetRow(), - m_currentCellCoords.GetCol()); - } + // generate the appropriate grid event and return -1 if it was vetoed, 1 if + // it was processed (but not vetoed) and 0 if it wasn't processed + int SendEvent(const wxEventType evtType, + int row, int col, + wxMouseEvent& e); + int SendEvent(const wxEventType evtType, + const wxGridCellCoords& coords, + wxMouseEvent& e) + { return SendEvent(evtType, coords.GetRow(), coords.GetCol(), e); } + int SendEvent(const wxEventType evtType, int row, int col); + int SendEvent(const wxEventType evtType, const wxGridCellCoords& coords) + { return SendEvent(evtType, coords.GetRow(), coords.GetCol()); } + int SendEvent(const wxEventType evtType) + { return SendEvent(evtType, m_currentCellCoords); } void OnPaint( wxPaintEvent& ); void OnSize( wxSizeEvent& ); @@ -2040,16 +2126,20 @@ protected: void OnEraseBackground( wxEraseEvent& ); - void SetCurrentCell( const wxGridCellCoords& coords ); - void SetCurrentCell( int row, int col ) - { SetCurrentCell( wxGridCellCoords(row, col) ); } + bool SetCurrentCell( const wxGridCellCoords& coords ); + bool SetCurrentCell( int row, int col ) + { return SetCurrentCell( wxGridCellCoords(row, col) ); } + - void HighlightBlock( int topRow, int leftCol, int bottomRow, int rightCol ); + // this function is called to extend the block being currently selected + // from mouse and keyboard event handlers + void UpdateBlockBeingSelected(int topRow, int leftCol, + int bottomRow, int rightCol); - void HighlightBlock( const wxGridCellCoords& topLeft, - const wxGridCellCoords& bottomRight ) - { HighlightBlock( topLeft.GetRow(), topLeft.GetCol(), - bottomRight.GetRow(), bottomRight.GetCol() ); } + void UpdateBlockBeingSelected(const wxGridCellCoords& topLeft, + const wxGridCellCoords& bottomRight) + { UpdateBlockBeingSelected(topLeft.GetRow(), topLeft.GetCol(), + bottomRight.GetRow(), bottomRight.GetCol()); } // ------ functions to get/send data (see also public functions) // @@ -2060,17 +2150,78 @@ protected: friend class wxGridRowOperations; friend class wxGridColumnOperations; + // they call our private Process{{Corner,Col,Row}Label,GridCell}MouseEvent() + friend class wxGridCornerLabelWindow; + friend class wxGridColLabelWindow; + friend class wxGridRowLabelWindow; + friend class wxGridWindow; + private: // implement wxScrolledWindow method to return m_gridWin size virtual wxSize GetSizeAvailableForScrollTarget(const wxSize& size); + // event handlers and their helpers + // -------------------------------- + + // process mouse drag event in WXGRID_CURSOR_SELECT_CELL mode + void DoGridCellDrag(wxMouseEvent& event, + const wxGridCellCoords& coords, + bool isFirstDrag); + + // process row/column resizing drag event + void DoGridLineDrag(wxMouseEvent& event, const wxGridOperations& oper); + + // process mouse drag event in the grid window + void DoGridDragEvent(wxMouseEvent& event, const wxGridCellCoords& coords); + + // process different clicks on grid cells + void DoGridCellLeftDown(wxMouseEvent& event, + const wxGridCellCoords& coords, + const wxPoint& pos); + void DoGridCellLeftDClick(wxMouseEvent& event, + const wxGridCellCoords& coords, + const wxPoint& pos); + void DoGridCellLeftUp(wxMouseEvent& event, const wxGridCellCoords& coords); + + // process movement (but not dragging) event in the grid cell area + void DoGridMouseMoveEvent(wxMouseEvent& event, + const wxGridCellCoords& coords, + const wxPoint& pos); + + // process mouse events in the grid window + void ProcessGridCellMouseEvent(wxMouseEvent& event); + + // process mouse events in the row/column labels/corner windows + void ProcessRowLabelMouseEvent(wxMouseEvent& event); + void ProcessColLabelMouseEvent(wxMouseEvent& event); + void ProcessCornerLabelMouseEvent(wxMouseEvent& event); + + void DoEndDragResizeRow(); + void DoEndDragResizeCol(); + void DoEndDragMoveCol(); + // common implementations of methods defined for both rows and columns void DeselectLine(int line, const wxGridOperations& oper); void DoEndDragResizeLine(const wxGridOperations& oper); int PosToLine(int pos, bool clipToMinMax, const wxGridOperations& oper) const; - + int PosToEdgeOfLine(int pos, const wxGridOperations& oper) const; + + bool DoMoveCursor(bool expandSelection, + const wxGridDirectionOperations& diroper); + bool DoMoveCursorByPage(const wxGridDirectionOperations& diroper); + bool DoMoveCursorByBlock(bool expandSelection, + const wxGridDirectionOperations& diroper); + void AdvanceToNextNonEmpty(wxGridCellCoords& coords, + const wxGridDirectionOperations& diroper); + + // common part of {Insert,Delete}{Rows,Cols} + bool DoModifyLines(bool (wxGridTableBase::*funcModify)(size_t, size_t), + int pos, int num, bool updateLabels); + // Append{Rows,Cols} is a bit different because of one less parameter + bool DoAppendLines(bool (wxGridTableBase::*funcAppend)(size_t), + int num, bool updateLabels); DECLARE_DYNAMIC_CLASS( wxGrid ) DECLARE_EVENT_TABLE() @@ -2122,35 +2273,44 @@ private: // Grid event class and event types // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_ADV wxGridEvent : public wxNotifyEvent +class WXDLLIMPEXP_ADV wxGridEvent : public wxNotifyEvent, + public wxKeyboardState { public: wxGridEvent() - : wxNotifyEvent(), m_row(-1), m_col(-1), m_x(-1), m_y(-1), - m_selecting(0), m_control(0), m_meta(0), m_shift(0), m_alt(0) - { - } + : wxNotifyEvent() + { + Init(-1, -1, -1, -1, false); + } - wxGridEvent(int id, wxEventType type, wxObject* obj, - int row=-1, int col=-1, int x=-1, int y=-1, bool sel = true, - bool control = false, bool shift = false, bool alt = false, bool meta = false); + wxGridEvent(int id, + wxEventType type, + wxObject* obj, + int row = -1, int col = -1, + int x = -1, int y = -1, + bool sel = true, + const wxKeyboardState& kbd = wxKeyboardState()) + : wxNotifyEvent(type, id), + wxKeyboardState(kbd) + { + Init(row, col, x, y, sel); + SetEventObject(obj); + } + + wxDEPRECATED( + wxGridEvent(int id, + wxEventType type, + wxObject* obj, + int row, int col, + int x, int y, + bool sel, + bool control, + bool shift = false, bool alt = false, bool meta = false)); virtual int GetRow() { return m_row; } virtual int GetCol() { return m_col; } wxPoint GetPosition() { return wxPoint( m_x, m_y ); } bool Selecting() { return m_selecting; } - bool ControlDown() { return m_control; } - bool MetaDown() { return m_meta; } - bool ShiftDown() { return m_shift; } - bool AltDown() { return m_alt; } - bool CmdDown() - { -#if defined(__WXMAC__) || defined(__WXCOCOA__) - return MetaDown(); -#else - return ControlDown(); -#endif - } virtual wxEvent *Clone() const { return new wxGridEvent(*this); } @@ -2160,41 +2320,57 @@ protected: int m_x; int m_y; bool m_selecting; - bool m_control; - bool m_meta; - bool m_shift; - bool m_alt; + +private: + void Init(int row, int col, int x, int y, bool sel) + { + m_row = row; + m_col = col; + m_x = x; + m_y = y; + m_selecting = sel; + } DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxGridEvent) }; -class WXDLLIMPEXP_ADV wxGridSizeEvent : public wxNotifyEvent +class WXDLLIMPEXP_ADV wxGridSizeEvent : public wxNotifyEvent, + public wxKeyboardState { public: wxGridSizeEvent() - : wxNotifyEvent(), m_rowOrCol(-1), m_x(-1), m_y(-1), - m_control(0), m_meta(0), m_shift(0), m_alt(0) - { - } + : wxNotifyEvent() + { + Init(-1, -1, -1); + } - wxGridSizeEvent(int id, wxEventType type, wxObject* obj, - int rowOrCol=-1, int x=-1, int y=-1, - bool control = false, bool shift = false, bool alt = false, bool meta = false); + wxGridSizeEvent(int id, + wxEventType type, + wxObject* obj, + int rowOrCol = -1, + int x = -1, int y = -1, + const wxKeyboardState& kbd = wxKeyboardState()) + : wxNotifyEvent(type, id), + wxKeyboardState(kbd) + { + Init(rowOrCol, x, y); + + SetEventObject(obj); + } + + wxDEPRECATED( + wxGridSizeEvent(int id, + wxEventType type, + wxObject* obj, + int rowOrCol, + int x, int y, + bool control, + bool shift = false, + bool alt = false, + bool meta = false) ); int GetRowOrCol() { return m_rowOrCol; } wxPoint GetPosition() { return wxPoint( m_x, m_y ); } - bool ControlDown() { return m_control; } - bool MetaDown() { return m_meta; } - bool ShiftDown() { return m_shift; } - bool AltDown() { return m_alt; } - bool CmdDown() - { -#if defined(__WXMAC__) || defined(__WXCOCOA__) - return MetaDown(); -#else - return ControlDown(); -#endif - } virtual wxEvent *Clone() const { return new wxGridSizeEvent(*this); } @@ -2202,36 +2378,55 @@ protected: int m_rowOrCol; int m_x; int m_y; - bool m_control; - bool m_meta; - bool m_shift; - bool m_alt; + +private: + void Init(int rowOrCol, int x, int y) + { + m_rowOrCol = rowOrCol; + m_x = x; + m_y = y; + } DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxGridSizeEvent) }; -class WXDLLIMPEXP_ADV wxGridRangeSelectEvent : public wxNotifyEvent +class WXDLLIMPEXP_ADV wxGridRangeSelectEvent : public wxNotifyEvent, + public wxKeyboardState { public: wxGridRangeSelectEvent() : wxNotifyEvent() - { - m_topLeft = wxGridNoCellCoords; - m_bottomRight = wxGridNoCellCoords; - m_selecting = false; - m_control = false; - m_meta = false; - m_shift = false; - m_alt = false; - } + { + Init(wxGridNoCellCoords, wxGridNoCellCoords, false); + } - wxGridRangeSelectEvent(int id, wxEventType type, wxObject* obj, + wxGridRangeSelectEvent(int id, + wxEventType type, + wxObject* obj, const wxGridCellCoords& topLeft, const wxGridCellCoords& bottomRight, bool sel = true, - bool control = false, bool shift = false, - bool alt = false, bool meta = false); + const wxKeyboardState& kbd = wxKeyboardState()) + : wxNotifyEvent(type, id), + wxKeyboardState(kbd) + { + Init(topLeft, bottomRight, sel); + + SetEventObject(obj); + } + + wxDEPRECATED( + wxGridRangeSelectEvent(int id, + wxEventType type, + wxObject* obj, + const wxGridCellCoords& topLeft, + const wxGridCellCoords& bottomRight, + bool sel, + bool control, + bool shift = false, + bool alt = false, + bool meta = false) ); wxGridCellCoords GetTopLeftCoords() { return m_topLeft; } wxGridCellCoords GetBottomRightCoords() { return m_bottomRight; } @@ -2240,35 +2435,29 @@ public: int GetLeftCol() { return m_topLeft.GetCol(); } int GetRightCol() { return m_bottomRight.GetCol(); } bool Selecting() { return m_selecting; } - bool ControlDown() { return m_control; } - bool MetaDown() { return m_meta; } - bool ShiftDown() { return m_shift; } - bool AltDown() { return m_alt; } - bool CmdDown() - { -#if defined(__WXMAC__) || defined(__WXCOCOA__) - return MetaDown(); -#else - return ControlDown(); -#endif - } virtual wxEvent *Clone() const { return new wxGridRangeSelectEvent(*this); } protected: + void Init(const wxGridCellCoords& topLeft, + const wxGridCellCoords& bottomRight, + bool selecting) + { + m_topLeft = topLeft; + m_bottomRight = bottomRight; + m_selecting = selecting; + } + wxGridCellCoords m_topLeft; wxGridCellCoords m_bottomRight; bool m_selecting; - bool m_control; - bool m_meta; - bool m_shift; - bool m_alt; DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxGridRangeSelectEvent) }; -class WXDLLIMPEXP_ADV wxGridEditorCreatedEvent : public wxCommandEvent { +class WXDLLIMPEXP_ADV wxGridEditorCreatedEvent : public wxCommandEvent +{ public: wxGridEditorCreatedEvent() : wxCommandEvent()