From e32352cf6600deac48d15fe1ca2ba74f3352922c Mon Sep 17 00:00:00 2001 From: Stefan Neis Date: Fri, 10 Mar 2000 12:27:27 +0000 Subject: [PATCH] Changed wxGridCellCoords from long to int (get rid of most HP warnings?) Added Shift/Control+Click handling for labels. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6589 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/generic/grid.h | 22 ++++++------ samples/newgrid/griddemo.cpp | 5 +-- samples/newgrid/griddemo.h | 8 ++--- src/generic/grid.cpp | 69 +++++++++++++++++++++++++++--------- 4 files changed, 71 insertions(+), 33 deletions(-) diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h index 373e205e35..580c6de8a3 100644 --- a/include/wx/generic/grid.h +++ b/include/wx/generic/grid.h @@ -699,8 +699,8 @@ public: // You must override these functions in a derived table class // - virtual long GetNumberRows() = 0; - virtual long GetNumberCols() = 0; + virtual int GetNumberRows() = 0; + virtual int GetNumberCols() = 0; virtual bool IsEmptyCell( int row, int col ) = 0; virtual wxString GetValue( int row, int col ) = 0; virtual void SetValue( int row, int col, const wxString& value ) = 0; @@ -843,8 +843,8 @@ public: // these are pure virtual in wxGridTableBase // - long GetNumberRows(); - long GetNumberCols(); + int GetNumberRows(); + int GetNumberCols(); wxString GetValue( int row, int col ); void SetValue( int row, int col, const wxString& s ); bool IsEmptyCell( int row, int col ); @@ -894,11 +894,11 @@ public: // default copy ctor is ok - long GetRow() const { return m_row; } - void SetRow( long n ) { m_row = n; } - long GetCol() const { return m_col; } - void SetCol( long n ) { m_col = n; } - void Set( long row, long col ) { m_row = row; m_col = col; } + 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 ) { @@ -926,8 +926,8 @@ public: } private: - long m_row; - long m_col; + int m_row; + int m_col; }; diff --git a/samples/newgrid/griddemo.cpp b/samples/newgrid/griddemo.cpp index 0ac53c44aa..15b56fe752 100644 --- a/samples/newgrid/griddemo.cpp +++ b/samples/newgrid/griddemo.cpp @@ -572,6 +572,7 @@ void GridFrame::OnLabelLeftClick( wxGridEvent& ev ) } if ( ev.ShiftDown() ) logBuf << " (shift down)"; + if ( ev.ControlDown() ) logBuf << " (control down)"; wxLogMessage( "%s", logBuf.c_str() ); // you must call event skip if you want default grid processing @@ -911,12 +912,12 @@ wxString BugsGridTable::GetTypeName(int WXUNUSED(row), int col) return wxEmptyString; } -long BugsGridTable::GetNumberRows() +int BugsGridTable::GetNumberRows() { return WXSIZEOF(gs_dataBugsGrid); } -long BugsGridTable::GetNumberCols() +int BugsGridTable::GetNumberCols() { return Col_Max; } diff --git a/samples/newgrid/griddemo.h b/samples/newgrid/griddemo.h index 2dc5e3b16c..5140bfbbb4 100644 --- a/samples/newgrid/griddemo.h +++ b/samples/newgrid/griddemo.h @@ -141,8 +141,8 @@ class BigGridTable : public wxGridTableBase public: BigGridTable(long sizeGrid) { m_sizeGrid = sizeGrid; } - long GetNumberRows() { return m_sizeGrid; } - long GetNumberCols() { return m_sizeGrid; } + int GetNumberRows() { return m_sizeGrid; } + int GetNumberCols() { return m_sizeGrid; } wxString GetValue( int row, int col ) { return wxString::Format("(%d, %d)", row, col); @@ -190,8 +190,8 @@ class BugsGridTable : public wxGridTableBase public: BugsGridTable(); - virtual long GetNumberRows(); - virtual long GetNumberCols(); + virtual int GetNumberRows(); + virtual int GetNumberCols(); virtual bool IsEmptyCell( int row, int col ); virtual wxString GetValue( int row, int col ); virtual void SetValue( int row, int col, const wxString& value ); diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 741a9b7ae2..4a3a28cce0 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -2456,12 +2456,12 @@ wxGridStringTable::~wxGridStringTable() { } -long wxGridStringTable::GetNumberRows() +int wxGridStringTable::GetNumberRows() { return m_data.GetCount(); } -long wxGridStringTable::GetNumberCols() +int wxGridStringTable::GetNumberCols() { if ( m_data.GetCount() > 0 ) return m_data[0].GetCount(); @@ -3803,10 +3803,13 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event ) break; case WXGRID_CURSOR_SELECT_ROW: - if ( (row = YToRow( y )) >= 0 && - !IsInSelection( row, 0 ) ) - { - SelectRow( row, TRUE ); + if ( (row = YToRow( y )) >= 0 ) + { + m_selection->SelectRow( row, + event.ControlDown(), + event.ShiftDown(), + event.AltDown(), + event.MetaDown() ); } // default label to suppress warnings about "enumeration value @@ -3843,7 +3846,23 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event ) if ( row >= 0 && !SendEvent( wxEVT_GRID_LABEL_LEFT_CLICK, row, -1, event ) ) { - SelectRow( row, event.ShiftDown() ); + if ( !event.ShiftDown() && !event.ControlDown() ) + ClearSelection(); + if ( event.ShiftDown() ) + m_selection->SelectBlock( m_currentCellCoords.GetRow(), + 0, + row, + GetNumberCols() - 1, + event.ControlDown(), + event.ShiftDown(), + event.AltDown(), + event.MetaDown() ); + else + m_selection->SelectRow( row, + event.ControlDown(), + event.ShiftDown(), + event.AltDown(), + event.MetaDown() ); ChangeCursorMode(WXGRID_CURSOR_SELECT_ROW, m_rowLabelWin); } } @@ -3970,10 +3989,13 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event ) break; case WXGRID_CURSOR_SELECT_COL: - if ( (col = XToCol( x )) >= 0 && - !IsInSelection( 0, col ) ) - { - SelectCol( col, TRUE ); + if ( (col = XToCol( x )) >= 0 ) + { + m_selection->SelectCol( col, + event.ControlDown(), + event.ShiftDown(), + event.AltDown(), + event.MetaDown() ); } // default label to suppress warnings about "enumeration value @@ -4010,7 +4032,22 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event ) if ( col >= 0 && !SendEvent( wxEVT_GRID_LABEL_LEFT_CLICK, -1, col, event ) ) { - SelectCol( col, event.ShiftDown() ); + if ( !event.ShiftDown() && !event.ControlDown() ) + ClearSelection(); + if ( event.ShiftDown() ) + m_selection->SelectBlock( 0, + m_currentCellCoords.GetCol(), + GetNumberRows() - 1, col, + event.ControlDown(), + event.ShiftDown(), + event.AltDown(), + event.MetaDown() ); + else + m_selection->SelectCol( col, + event.ControlDown(), + event.ShiftDown(), + event.AltDown(), + event.MetaDown() ); ChangeCursorMode(WXGRID_CURSOR_SELECT_COL, m_colLabelWin); } } @@ -4268,7 +4305,7 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event ) { MakeCellVisible(coords); // TODO: need to introduce a delay or something here. The - // scrolling is way to fast, at least on MSW. + // scrolling is way to fast, at least on MSW - also on GTK. } } } @@ -5105,7 +5142,7 @@ void wxGrid::OnKeyDown( wxKeyEvent& event ) break; case WXK_ESCAPE: - m_selection->ClearSelection(); + ClearSelection(); break; case WXK_TAB: @@ -7585,7 +7622,7 @@ void wxGrid::SetCellValue( int row, int col, const wxString& s ) void wxGrid::SelectRow( int row, bool addToSelected ) { if ( IsSelection() && !addToSelected ) - m_selection->ClearSelection(); + ClearSelection(); m_selection->SelectRow( row ); } @@ -7594,7 +7631,7 @@ void wxGrid::SelectRow( int row, bool addToSelected ) void wxGrid::SelectCol( int col, bool addToSelected ) { if ( IsSelection() && !addToSelected ) - m_selection->ClearSelection(); + ClearSelection(); m_selection->SelectCol( col ); } -- 2.45.2