void CatheterGrid::setGridRowChannel(int row, int channel) { if (isGridRowNumValid(row)) { if (channel > 0 && channel <= NCHANNELS) { SetCellValue(wxGridCellCoords(row, CHANNEL_COL), wxString::Format("%d", channel)); } else if (channel == GLOBAL_ADDR) { SetCellValue(wxGridCellCoords(row, CHANNEL_COL), GLOBALSTR); } } }
void wex::grid::set_cells_value( const wxGridCellCoords& start_coords, const std::string& data) { tokenizer tkz(data, "\n"); auto start_at_row = start_coords.GetRow(); while (tkz.has_more_tokens()) { const auto line(tkz.get_next_token()); tokenizer tkz(line, "\t"); auto next_col = start_coords.GetCol(); while (tkz.has_more_tokens() && next_col < GetNumberCols()) { const std::string value = tkz.get_next_token(); if (!IsReadOnly(start_at_row, next_col)) { set_grid_cell_value(wxGridCellCoords(start_at_row, next_col), value); } next_col++; } start_at_row++; } }
int CatheterGrid::getGridRowChannel(int row) { const wxString& channel = GetCellValue(wxGridCellCoords(row, CHANNEL_COL)); if (!wxStrcmp(channel, "global")) return GLOBAL_ADDR; else return wxAtoi(channel); }
void CatheterGrid::setGridRowDelayMS(int row, int delayMS) { if (isGridRowNumValid(row)) { if (delayMS >= 0) { SetCellValue(wxGridCellCoords(row, DELAY_COL), wxString::Format("%d", delayMS)); } } }
void CatheterGrid::setGridRowDirection(int row, dir_t direction) { if (isGridRowNumValid(row)) { switch (direction) { case DIR_POS: SetCellValue(wxGridCellCoords(row, DIRECTION_COL), DIRPOSSTR); if (!isGridCellEmpty(row, CURRENT_COL) && getGridRowcurrentMilliAmp(row) < 0) setGridRowcurrentMilliAmp(row, getGridRowcurrentMilliAmp(row) * -1); break; case DIR_NEG: SetCellValue(wxGridCellCoords(row, DIRECTION_COL), DIRNEGSTR); if (!isGridCellEmpty(row, CURRENT_COL) && getGridRowcurrentMilliAmp(row) > 0) setGridRowcurrentMilliAmp(row, getGridRowcurrentMilliAmp(row) * -1); break; } } }
void wex::grid::paste_cells_from_clipboard() { set_cells_value( wxGridCellCoords( GetGridCursorRow(), GetGridCursorCol()), clipboard_get()); }
dir_t CatheterGrid::getGridRowDirection(int row) { const wxString& dirStr = GetCellValue(wxGridCellCoords(row, DIRECTION_COL)); if (!wxStrcmp(dirStr, DIRPOSSTR)) { return DIR_POS; } else { return DIR_NEG; } }
void CatheterGrid::setGridRowcurrentMilliAmp(int row, double currentMilliAmp) { if (isGridRowNumValid(row)) { SetCellValue(wxGridCellCoords(row, CURRENT_COL), wxString::Format("%3.3f", currentMilliAmp)); if (currentMilliAmp > 0) setGridRowDirection(row, DIR_POS); else if (currentMilliAmp < 0) setGridRowDirection(row, DIR_NEG); } }
void wxGridSelection::SelectCell( int row, int col, const wxKeyboardState& kbd, bool sendEvent ) { if ( m_selectionMode == wxGrid::wxGridSelectRows ) { SelectBlock(row, 0, row, m_grid->GetNumberCols() - 1, kbd, sendEvent); return; } else if ( m_selectionMode == wxGrid::wxGridSelectColumns ) { SelectBlock(0, col, m_grid->GetNumberRows() - 1, col, kbd, sendEvent); return; } else if ( IsInSelection ( row, col ) ) return; m_cellSelection.Add( wxGridCellCoords( row, col ) ); // Update View: if ( !m_grid->GetBatchCount() ) { wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, col ), wxGridCellCoords( row, col ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); } // Send event if (sendEvent) { wxGridRangeSelectEvent gridEvt( m_grid->GetId(), wxEVT_GRID_RANGE_SELECT, m_grid, wxGridCellCoords( row, col ), wxGridCellCoords( row, col ), true, kbd); m_grid->GetEventHandler()->ProcessEvent( gridEvt ); } }
void wex::grid::empty_selection() { wxBusyCursor wait; for (int i = 0; i < GetNumberRows(); i++) { for (int j = 0; j < GetNumberCols(); j++) { if (IsInSelection(i, j) && !IsReadOnly(i, j)) { set_grid_cell_value(wxGridCellCoords(i, j), std::string()); } } } }
bool wex::grid::find_next(const std::string& text, bool forward) { if (text.empty()) { return false; } static bool recursive = false; static int start_row; static int end_row; static int init_row; static int start_col; static int end_col; wxString text_use = text; if (!find_replace_data::get()->match_case()) { text_use.MakeUpper(); } wxGridCellCoords grid_cursor(GetGridCursorRow(), GetGridCursorCol()); if (forward) { init_row = 0; if (recursive) { start_row = init_row; start_col = 0; } else { start_row = grid_cursor.GetRow() + 1; start_col = grid_cursor.GetCol(); } end_row = GetNumberRows(); end_col = GetNumberCols(); } else { init_row = GetNumberRows() - 1; if (recursive) { start_row = init_row; start_col = GetNumberCols() - 1; } else { start_row = grid_cursor.GetRow() - 1; start_col = grid_cursor.GetCol(); } end_row = -1; end_col = -1; } if (start_col == -1) { start_col = 0; } if (start_row == -1) { start_row = 0; } wxGridCellCoords match; for (int j = start_col; j != end_col && !match; (forward ? j++: j--)) { for (int i = (j == start_col ? start_row: init_row); i != end_row && !match; (forward ? i++: i--)) { wxString text = GetCellValue(i, j); if (!find_replace_data::get()->match_case()) { text.MakeUpper(); } if (find_replace_data::get()->match_word()) { if (text == text_use) { match = wxGridCellCoords(i, j); } } else { if (text.Contains(text_use)) { match = wxGridCellCoords(i, j); } } } } if (!match) { bool result = false; frame::statustext( get_find_result(text, forward, recursive), std::string()); if (!recursive) { recursive = true; result = find_next(text, forward); recursive = false; } return result; } else { recursive = false; SetGridCursor(match.GetRow(), match.GetCol()); MakeCellVisible(match); // though docs say this isn't necessary, it is return true; } }
void wxGridSelection::SelectBlock( int topRow, int leftCol, int bottomRow, int rightCol, bool ControlDown, bool ShiftDown, bool AltDown, bool MetaDown, bool sendEvent ) { // Fix the coordinates of the block if needed. if ( m_selectionMode == wxGrid::wxGridSelectRows ) { leftCol = 0; rightCol = m_grid->GetNumberCols() - 1; } else if ( m_selectionMode == wxGrid::wxGridSelectColumns ) { topRow = 0; bottomRow = m_grid->GetNumberRows() - 1; } if ( topRow > bottomRow ) { int temp = topRow; topRow = bottomRow; bottomRow = temp; } if ( leftCol > rightCol ) { int temp = leftCol; leftCol = rightCol; rightCol = temp; } // Handle single cell selection in SelectCell. // (MB: added check for selection mode here to prevent // crashes if, for example, we are select rows and the // grid only has 1 col) if ( m_selectionMode == wxGrid::wxGridSelectCells && topRow == bottomRow && leftCol == rightCol ) SelectCell( topRow, leftCol, ControlDown, ShiftDown, AltDown, MetaDown, sendEvent ); size_t count, n; // Remove single cells contained in newly selected block. if ( m_selectionMode == wxGrid::wxGridSelectCells ) { count = m_cellSelection.GetCount(); for ( n = 0; n < count; n++ ) { wxGridCellCoords& coords = m_cellSelection[n]; if ( BlockContainsCell( topRow, leftCol, bottomRow, rightCol, coords.GetRow(), coords.GetCol() ) ) { m_cellSelection.RemoveAt(n); n--; count--; } } } // If a block containing the selection is already selected, return, // if a block contained in the selection is found, remove it. count = m_blockSelectionTopLeft.GetCount(); for ( n = 0; n < count; n++ ) { wxGridCellCoords& coords1 = m_blockSelectionTopLeft[n]; wxGridCellCoords& coords2 = m_blockSelectionBottomRight[n]; switch ( BlockContain( coords1.GetRow(), coords1.GetCol(), coords2.GetRow(), coords2.GetCol(), topRow, leftCol, bottomRow, rightCol ) ) { case 1: return; case -1: m_blockSelectionTopLeft.RemoveAt(n); m_blockSelectionBottomRight.RemoveAt(n); n--; count--; break; default: break; } } // If a row containing the selection is already selected, return, // if a row contained in newly selected block is found, remove it. if ( m_selectionMode != wxGrid::wxGridSelectColumns ) { count = m_rowSelection.GetCount(); for ( n = 0; n < count; n++ ) { switch ( BlockContain( m_rowSelection[n], 0, m_rowSelection[n], m_grid->GetNumberCols()-1, topRow, leftCol, bottomRow, rightCol ) ) { case 1: return; case -1: m_rowSelection.RemoveAt(n); n--; count--; break; default: break; } } } if ( m_selectionMode != wxGrid::wxGridSelectRows ) { count = m_colSelection.GetCount(); for ( n = 0; n < count; n++ ) { switch ( BlockContain( 0, m_colSelection[n], m_grid->GetNumberRows()-1, m_colSelection[n], topRow, leftCol, bottomRow, rightCol ) ) { case 1: return; case -1: m_colSelection.RemoveAt(n); n--; count--; break; default: break; } } } m_blockSelectionTopLeft.Add( wxGridCellCoords( topRow, leftCol ) ); m_blockSelectionBottomRight.Add( wxGridCellCoords( bottomRow, rightCol ) ); // Update View: if ( !m_grid->GetBatchCount() ) { wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( topRow, leftCol ), wxGridCellCoords( bottomRow, rightCol ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); } // Send Event, if not disabled. if ( sendEvent ) { wxGridRangeSelectEvent gridEvt( m_grid->GetId(), wxEVT_GRID_RANGE_SELECT, m_grid, wxGridCellCoords( topRow, leftCol ), wxGridCellCoords( bottomRow, rightCol ), true, ControlDown, ShiftDown, AltDown, MetaDown ); m_grid->GetEventHandler()->ProcessEvent(gridEvt); } }
void wxGridSelection::ClearSelection() { size_t n; wxRect r; wxGridCellCoords coords1, coords2; // deselect all individual cells and update the screen if ( m_selectionMode == wxGrid::wxGridSelectCells ) { while ( ( n = m_cellSelection.GetCount() ) > 0) { n--; coords1 = m_cellSelection[n]; m_cellSelection.RemoveAt(n); if ( !m_grid->GetBatchCount() ) { r = m_grid->BlockToDeviceRect( coords1, coords1 ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); #ifdef __WXMAC__ ((wxWindow *)m_grid->m_gridWin)->Update(); #endif } } } // deselect all blocks and update the screen while ( ( n = m_blockSelectionTopLeft.GetCount() ) > 0) { n--; coords1 = m_blockSelectionTopLeft[n]; coords2 = m_blockSelectionBottomRight[n]; m_blockSelectionTopLeft.RemoveAt(n); m_blockSelectionBottomRight.RemoveAt(n); if ( !m_grid->GetBatchCount() ) { r = m_grid->BlockToDeviceRect( coords1, coords2 ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); #ifdef __WXMAC__ ((wxWindow *)m_grid->m_gridWin)->Update(); #endif } } // deselect all rows and update the screen if ( m_selectionMode != wxGrid::wxGridSelectColumns ) { while ( ( n = m_rowSelection.GetCount() ) > 0) { n--; int row = m_rowSelection[n]; m_rowSelection.RemoveAt(n); if ( !m_grid->GetBatchCount() ) { r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ), wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); #ifdef __WXMAC__ ((wxWindow *)m_grid->m_gridWin)->Update(); #endif } } } // deselect all columns and update the screen if ( m_selectionMode != wxGrid::wxGridSelectRows ) { while ( ( n = m_colSelection.GetCount() ) > 0) { n--; int col = m_colSelection[n]; m_colSelection.RemoveAt(n); if ( !m_grid->GetBatchCount() ) { r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ), wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); #ifdef __WXMAC__ ((wxWindow *)m_grid->m_gridWin)->Update(); #endif } } } // One deselection event, indicating deselection of _all_ cells. // (No finer grained events for each of the smaller regions // deselected above!) wxGridRangeSelectEvent gridEvt( m_grid->GetId(), wxEVT_GRID_RANGE_SELECT, m_grid, wxGridCellCoords( 0, 0 ), wxGridCellCoords( m_grid->GetNumberRows() - 1, m_grid->GetNumberCols() - 1 ), false ); m_grid->GetEventHandler()->ProcessEvent(gridEvt); }
void wxGridSelection::SelectBlock( int topRow, int leftCol, int bottomRow, int rightCol, const wxKeyboardState& kbd, bool sendEvent ) { // Fix the coordinates of the block if needed. switch ( m_selectionMode ) { default: wxFAIL_MSG( "unknown selection mode" ); // fall through case wxGrid::wxGridSelectCells: // nothing to do -- in this mode arbitrary blocks can be selected break; case wxGrid::wxGridSelectRows: leftCol = 0; rightCol = m_grid->GetNumberCols() - 1; break; case wxGrid::wxGridSelectColumns: topRow = 0; bottomRow = m_grid->GetNumberRows() - 1; break; case wxGrid::wxGridSelectRowsOrColumns: // block selection doesn't make sense for this mode, we could only // select the entire grid but this wouldn't be useful return; } if ( topRow > bottomRow ) { int temp = topRow; topRow = bottomRow; bottomRow = temp; } if ( leftCol > rightCol ) { int temp = leftCol; leftCol = rightCol; rightCol = temp; } // Handle single cell selection in SelectCell. // (MB: added check for selection mode here to prevent // crashes if, for example, we are select rows and the // grid only has 1 col) if ( m_selectionMode == wxGrid::wxGridSelectCells && topRow == bottomRow && leftCol == rightCol ) { SelectCell( topRow, leftCol, kbd, sendEvent ); } size_t count, n; if ( m_selectionMode == wxGrid::wxGridSelectRows ) { // find out which rows are already selected: wxArrayInt alreadyselected; alreadyselected.Add(0,bottomRow-topRow+1); for( n = 0; n < m_rowSelection.GetCount(); n++) { int row = m_rowSelection[n]; if( (row >= topRow) && (row <= bottomRow) ) { alreadyselected[ row - topRow ]=1; } } // add the newly selected rows: for ( int row = topRow; row <= bottomRow; row++ ) { if ( alreadyselected[ row - topRow ] == 0 ) { m_rowSelection.Add( row ); } } } else if ( m_selectionMode == wxGrid::wxGridSelectColumns ) { // find out which columns are already selected: wxArrayInt alreadyselected; alreadyselected.Add(0,rightCol-leftCol+1); for( n = 0; n < m_colSelection.GetCount(); n++) { int col = m_colSelection[n]; if( (col >= leftCol) && (col <= rightCol) ) { alreadyselected[ col - leftCol ]=1; } } // add the newly selected columns: for ( int col = leftCol; col <= rightCol; col++ ) { if ( alreadyselected[ col - leftCol ] == 0 ) { m_colSelection.Add( col ); } } } else { // Remove single cells contained in newly selected block. if ( m_selectionMode == wxGrid::wxGridSelectCells ) { count = m_cellSelection.GetCount(); for ( n = 0; n < count; n++ ) { wxGridCellCoords& coords = m_cellSelection[n]; if ( BlockContainsCell( topRow, leftCol, bottomRow, rightCol, coords.GetRow(), coords.GetCol() ) ) { m_cellSelection.RemoveAt(n); n--; count--; } } } // If a block containing the selection is already selected, return, // if a block contained in the selection is found, remove it. count = m_blockSelectionTopLeft.GetCount(); for ( n = 0; n < count; n++ ) { wxGridCellCoords& coords1 = m_blockSelectionTopLeft[n]; wxGridCellCoords& coords2 = m_blockSelectionBottomRight[n]; switch ( BlockContain( coords1.GetRow(), coords1.GetCol(), coords2.GetRow(), coords2.GetCol(), topRow, leftCol, bottomRow, rightCol ) ) { case 1: return; case -1: m_blockSelectionTopLeft.RemoveAt(n); m_blockSelectionBottomRight.RemoveAt(n); n--; count--; break; default: break; } } // If a row containing the selection is already selected, return, // if a row contained in newly selected block is found, remove it. count = m_rowSelection.GetCount(); for ( n = 0; n < count; n++ ) { switch ( BlockContain( m_rowSelection[n], 0, m_rowSelection[n], m_grid->GetNumberCols() - 1, topRow, leftCol, bottomRow, rightCol ) ) { case 1: return; case -1: m_rowSelection.RemoveAt(n); n--; count--; break; default: break; } } // Same for columns. count = m_colSelection.GetCount(); for ( n = 0; n < count; n++ ) { switch ( BlockContain( 0, m_colSelection[n], m_grid->GetNumberRows() - 1, m_colSelection[n], topRow, leftCol, bottomRow, rightCol ) ) { case 1: return; case -1: m_colSelection.RemoveAt(n); n--; count--; break; default: break; } } m_blockSelectionTopLeft.Add( wxGridCellCoords( topRow, leftCol ) ); m_blockSelectionBottomRight.Add( wxGridCellCoords( bottomRow, rightCol ) ); } // Update View: if ( !m_grid->GetBatchCount() ) { wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( topRow, leftCol ), wxGridCellCoords( bottomRow, rightCol ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); } // Send Event, if not disabled. if ( sendEvent ) { wxGridRangeSelectEvent gridEvt( m_grid->GetId(), wxEVT_GRID_RANGE_SELECT, m_grid, wxGridCellCoords( topRow, leftCol ), wxGridCellCoords( bottomRow, rightCol ), true, kbd); m_grid->GetEventHandler()->ProcessEvent( gridEvt ); } }
void CatheterGrid::setGridRowChannel(int row, const wxString& channel) { if (isGridRowNumValid(row)) { SetCellValue(wxGridCellCoords(row, CHANNEL_COL), channel); } }
void wxGridSelection::SelectCol(int col, const wxKeyboardState& kbd) { if ( m_selectionMode == wxGrid::wxGridSelectRows ) return; size_t count, n; // Remove single cells contained in newly selected block. if ( m_selectionMode == wxGrid::wxGridSelectCells ) { count = m_cellSelection.GetCount(); for ( n = 0; n < count; n++ ) { wxGridCellCoords& coords = m_cellSelection[n]; if ( BlockContainsCell( 0, col, m_grid->GetNumberRows() - 1, col, coords.GetRow(), coords.GetCol() ) ) { m_cellSelection.RemoveAt(n); n--; count--; } } } // Simplify list of selected blocks (if possible) count = m_blockSelectionTopLeft.GetCount(); bool done = false; for ( n = 0; n < count; n++ ) { wxGridCellCoords& coords1 = m_blockSelectionTopLeft[n]; wxGridCellCoords& coords2 = m_blockSelectionBottomRight[n]; // Remove block if it is a subset of the column if ( coords1.GetCol() == col && col == coords2.GetCol() ) { m_blockSelectionTopLeft.RemoveAt(n); m_blockSelectionBottomRight.RemoveAt(n); n--; count--; } else if ( coords1.GetRow() == 0 && coords2.GetRow() == m_grid->GetNumberRows() - 1 ) { // silently return, if row is contained in block if ( coords1.GetCol() <= col && col <= coords2.GetCol() ) return; // expand block, if it touched col else if ( coords1.GetCol() == col + 1) { coords1.SetCol(col); done = true; } else if ( coords2.GetCol() == col - 1) { coords2.SetCol(col); done = true; } } } // Unless we successfully handled the column, // Check whether col is already selected. if ( !done ) { count = m_colSelection.GetCount(); for ( n = 0; n < count; n++ ) { if ( col == m_colSelection[n] ) return; } // Add col to selection m_colSelection.Add(col); } // Update View: if ( !m_grid->GetBatchCount() ) { wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ), wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); } // Send Event wxGridRangeSelectEvent gridEvt( m_grid->GetId(), wxEVT_GRID_RANGE_SELECT, m_grid, wxGridCellCoords( 0, col ), wxGridCellCoords( m_grid->GetNumberRows() - 1, col ), true, kbd ); m_grid->GetEventHandler()->ProcessEvent( gridEvt ); }
double CatheterGrid::getGridRowcurrentMilliAmp(int row) { return wxAtof(GetCellValue(wxGridCellCoords(row, CURRENT_COL))); }
void wxGridSelection::ToggleCellSelection(int row, int col, const wxKeyboardState& kbd) { // if the cell is not selected, select it if ( !IsInSelection ( row, col ) ) { SelectCell(row, col, kbd); return; } // otherwise deselect it. This can be simple or more or // less difficult, depending on how the cell is selected. size_t count, n; // The simplest case: The cell is contained in m_cellSelection // Then it can't be contained in rows/cols/block (since those // would remove the cell from m_cellSelection on creation), so // we just have to remove it from m_cellSelection. if ( m_selectionMode == wxGrid::wxGridSelectCells ) { count = m_cellSelection.GetCount(); for ( n = 0; n < count; n++ ) { const wxGridCellCoords& sel = m_cellSelection[n]; if ( row == sel.GetRow() && col == sel.GetCol() ) { wxGridCellCoords coords = m_cellSelection[n]; m_cellSelection.RemoveAt(n); if ( !m_grid->GetBatchCount() ) { wxRect r = m_grid->BlockToDeviceRect( coords, coords ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); } // Send event wxGridRangeSelectEvent gridEvt( m_grid->GetId(), wxEVT_GRID_RANGE_SELECT, m_grid, wxGridCellCoords( row, col ), wxGridCellCoords( row, col ), false, kbd ); m_grid->GetEventHandler()->ProcessEvent( gridEvt ); return; } } } // The most difficult case: The cell is member of one or even several // blocks. Split each such block in up to 4 new parts, that don't // contain the cell to be selected, like this: // |---------------------------| // | | // | part 1 | // | | // |---------------------------| // | part 3 |x| part 4 | // |---------------------------| // | | // | part 2 | // | | // |---------------------------| // (The x marks the newly deselected cell). // Note: in row selection mode, we only need part1 and part2; // in column selection mode, we only need part 3 and part4, // which are expanded to whole columns automatically! count = m_blockSelectionTopLeft.GetCount(); for ( n = 0; n < count; n++ ) { wxGridCellCoords& coords1 = m_blockSelectionTopLeft[n]; wxGridCellCoords& coords2 = m_blockSelectionBottomRight[n]; int topRow = coords1.GetRow(); int leftCol = coords1.GetCol(); int bottomRow = coords2.GetRow(); int rightCol = coords2.GetCol(); if ( BlockContainsCell( topRow, leftCol, bottomRow, rightCol, row, col ) ) { // remove the block m_blockSelectionTopLeft.RemoveAt(n); m_blockSelectionBottomRight.RemoveAt(n); n--; count--; // add up to 4 smaller blocks and set update region if ( m_selectionMode != wxGrid::wxGridSelectColumns ) { if ( topRow < row ) SelectBlockNoEvent(topRow, leftCol, row - 1, rightCol); if ( bottomRow > row ) SelectBlockNoEvent(row + 1, leftCol, bottomRow, rightCol); } if ( m_selectionMode != wxGrid::wxGridSelectRows ) { if ( leftCol < col ) SelectBlockNoEvent(row, leftCol, row, col - 1); if ( rightCol > col ) SelectBlockNoEvent(row, col + 1, row, rightCol); } } } bool rowSelectionWasChanged = false; // remove a cell from a row, adding up to two new blocks if ( m_selectionMode != wxGrid::wxGridSelectColumns ) { count = m_rowSelection.GetCount(); for ( n = 0; n < count; n++ ) { if ( m_rowSelection[n] == row ) { m_rowSelection.RemoveAt(n); n--; count--; rowSelectionWasChanged = true; if (m_selectionMode == wxGrid::wxGridSelectCells) { if ( col > 0 ) SelectBlockNoEvent(row, 0, row, col - 1); if ( col < m_grid->GetNumberCols() - 1 ) SelectBlockNoEvent( row, col + 1, row, m_grid->GetNumberCols() - 1); } } } } bool colSelectionWasChanged = false; // remove a cell from a column, adding up to two new blocks if ( m_selectionMode != wxGrid::wxGridSelectRows ) { count = m_colSelection.GetCount(); for ( n = 0; n < count; n++ ) { if ( m_colSelection[n] == col ) { m_colSelection.RemoveAt(n); n--; count--; colSelectionWasChanged = true; if (m_selectionMode == wxGrid::wxGridSelectCells) { if ( row > 0 ) SelectBlockNoEvent(0, col, row - 1, col); if ( row < m_grid->GetNumberRows() - 1 ) SelectBlockNoEvent(row + 1, col, m_grid->GetNumberRows() - 1, col); } } } } // Refresh the screen and send the event; according to m_selectionMode, // we need to either update only the cell, or the whole row/column. wxRect r; if ( m_selectionMode == wxGrid::wxGridSelectCells ) { if ( !m_grid->GetBatchCount() ) { r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, col ), wxGridCellCoords( row, col ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); } wxGridRangeSelectEvent gridEvt( m_grid->GetId(), wxEVT_GRID_RANGE_SELECT, m_grid, wxGridCellCoords( row, col ), wxGridCellCoords( row, col ), false, kbd ); m_grid->GetEventHandler()->ProcessEvent( gridEvt ); } else // rows/columns selection mode { if ( m_selectionMode != wxGrid::wxGridSelectColumns && rowSelectionWasChanged ) { int numCols = m_grid->GetNumberCols(); for ( int colFrom = 0, colTo = 0; colTo <= numCols; ++colTo ) { if ( m_colSelection.Index(colTo) >= 0 || colTo == numCols ) { if ( colFrom < colTo ) { if ( !m_grid->GetBatchCount() ) { r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, colFrom ), wxGridCellCoords( row, colTo-1 ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); } wxGridRangeSelectEvent gridEvt( m_grid->GetId(), wxEVT_GRID_RANGE_SELECT, m_grid, wxGridCellCoords( row, colFrom ), wxGridCellCoords( row, colTo - 1 ), false, kbd ); m_grid->GetEventHandler()->ProcessEvent( gridEvt ); } colFrom = colTo + 1; } } } if ( m_selectionMode != wxGrid::wxGridSelectRows && colSelectionWasChanged ) { int numRows = m_grid->GetNumberRows(); for ( int rowFrom = 0, rowTo = 0; rowTo <= numRows; ++rowTo ) { if ( m_rowSelection.Index(rowTo) >= 0 || rowTo == numRows ) { if (rowFrom < rowTo) { if ( !m_grid->GetBatchCount() ) { r = m_grid->BlockToDeviceRect( wxGridCellCoords( rowFrom, col ), wxGridCellCoords( rowTo - 1, col ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); } wxGridRangeSelectEvent gridEvt( m_grid->GetId(), wxEVT_GRID_RANGE_SELECT, m_grid, wxGridCellCoords( rowFrom, col ), wxGridCellCoords( rowTo - 1, col ), false, kbd ); m_grid->GetEventHandler()->ProcessEvent( gridEvt ); } rowFrom = rowTo + 1; } } } } }
int CatheterGrid::getGridRowDelayMS(int row) { return wxAtoi(GetCellValue(wxGridCellCoords(row, DELAY_COL))); }
/* Insert or add a library to the library list: * The new library is put in list before (insert button) the selection, * or added (add button) to end of list */ void DIALOG_CONFIG_EQUFILES::OnAddFiles( wxCommandEvent& event ) { wxString equFilename, wildcard; wxFileName fn; wildcard = EquFilesWildcard; wxListBox* list = m_ListEquiv; // Get a default path to open the file dialog: wxString libpath; wxArrayInt selectedRows = m_gridEnvVars->GetSelectedRows(); int row = selectedRows.GetCount() ? selectedRows[0] : m_gridEnvVars->GetGridCursorRow(); libpath = m_gridEnvVars->GetCellValue( wxGridCellCoords( row, 1 ) ); wxFileDialog FilesDialog( this, _( "Equ files:" ), libpath, wxEmptyString, wildcard, wxFD_DEFAULT_STYLE | wxFD_MULTIPLE ); if( FilesDialog.ShowModal() != wxID_OK ) return; wxArrayString Filenames; FilesDialog.GetPaths( Filenames ); for( unsigned jj = 0; jj < Filenames.GetCount(); jj++ ) { fn = Filenames[jj]; equFilename.Empty(); if( isPathRelativeAllowed() ) // try to use relative path { for( row = 0; row < getEnvVarCount(); row++ ) { libpath = m_gridEnvVars->GetCellValue( wxGridCellCoords( row, 1 ) ); if( fn.MakeRelativeTo( libpath ) ) { equFilename.Printf( wxT("${%s}%c%s"), GetChars( m_gridEnvVars->GetCellValue( wxGridCellCoords( row, 0 ) ) ), fn.GetPathSeparator(), GetChars( fn.GetFullPath() ) ); break; } } } if( equFilename.IsEmpty() ) equFilename = Filenames[jj]; // Add or insert new library name, if not already in list if( list->FindString( equFilename, fn.IsCaseSensitive() ) == wxNOT_FOUND ) { m_ListChanged = true; equFilename.Replace( wxT("\\"), wxT("/") ); // Use unix separators only. list->Append( equFilename ); } else { wxString msg; msg.Printf( _( "File '%s' already exists in list" ), equFilename.GetData() ); DisplayError( this, msg ); } } }
void wxGridSelection::SelectRow( int row, bool ControlDown, bool ShiftDown, bool AltDown, bool MetaDown ) { if ( m_selectionMode == wxGrid::wxGridSelectColumns ) return; size_t count, n; // Remove single cells contained in newly selected block. if ( m_selectionMode == wxGrid::wxGridSelectCells ) { count = m_cellSelection.GetCount(); for ( n = 0; n < count; n++ ) { wxGridCellCoords& coords = m_cellSelection[n]; if ( BlockContainsCell( row, 0, row, m_grid->GetNumberCols() - 1, coords.GetRow(), coords.GetCol() ) ) { m_cellSelection.RemoveAt(n); n--; count--; } } } // Simplify list of selected blocks (if possible) count = m_blockSelectionTopLeft.GetCount(); bool done = false; for ( n = 0; n < count; n++ ) { wxGridCellCoords& coords1 = m_blockSelectionTopLeft[n]; wxGridCellCoords& coords2 = m_blockSelectionBottomRight[n]; // Remove block if it is a subset of the row if ( coords1.GetRow() == row && row == coords2.GetRow() ) { m_blockSelectionTopLeft.RemoveAt(n); m_blockSelectionBottomRight.RemoveAt(n); n--; count--; } else if ( coords1.GetCol() == 0 && coords2.GetCol() == m_grid->GetNumberCols() - 1 ) { // silently return, if row is contained in block if ( coords1.GetRow() <= row && row <= coords2.GetRow() ) return; // expand block, if it touched row else if ( coords1.GetRow() == row + 1) { coords1.SetRow(row); done = true; } else if ( coords2.GetRow() == row - 1) { coords2.SetRow(row); done = true; } } } // Unless we successfully handled the row, // check whether row is already selected. if ( !done ) { count = m_rowSelection.GetCount(); for ( n = 0; n < count; n++ ) { if ( row == m_rowSelection[n] ) return; } // Add row to selection m_rowSelection.Add(row); } // Update View: if ( !m_grid->GetBatchCount() ) { wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ), wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); } // Send Event wxGridRangeSelectEvent gridEvt( m_grid->GetId(), wxEVT_GRID_RANGE_SELECT, m_grid, wxGridCellCoords( row, 0 ), wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ), true, ControlDown, ShiftDown, AltDown, MetaDown ); m_grid->GetEventHandler()->ProcessEvent(gridEvt); }