Respect readOnly cells in GRID_TRICKS.
Also fixes setting colors in the signals grid as it allows us to make it editable again. Fixes https://gitlab.com/kicad/code/kicad/issues/14079
This commit is contained in:
parent
bb62c21abc
commit
ee956673b1
|
@ -86,13 +86,35 @@ void GRID_TRICKS::init()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool GRID_TRICKS::toggleCell( int aRow, int aCol, bool aPreserveSelection )
|
bool GRID_TRICKS::isTextEntry( int aRow, int aCol )
|
||||||
|
{
|
||||||
|
wxGridCellEditor* editor = m_grid->GetCellEditor( aRow, aCol );
|
||||||
|
bool retval = ( dynamic_cast<wxTextEntry*>( editor ) );
|
||||||
|
|
||||||
|
editor->DecRef();
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool GRID_TRICKS::isCheckbox( int aRow, int aCol )
|
||||||
{
|
{
|
||||||
wxGridCellRenderer* renderer = m_grid->GetCellRenderer( aRow, aCol );
|
wxGridCellRenderer* renderer = m_grid->GetCellRenderer( aRow, aCol );
|
||||||
bool isCheckbox = ( dynamic_cast<wxGridCellBoolRenderer*>( renderer ) );
|
bool retval = ( dynamic_cast<wxGridCellBoolRenderer*>( renderer ) );
|
||||||
renderer->DecRef();
|
|
||||||
|
|
||||||
if( isCheckbox )
|
renderer->DecRef();
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool GRID_TRICKS::isReadOnly( int aRow, int aCol )
|
||||||
|
{
|
||||||
|
return !m_grid->IsEditable() || m_grid->IsReadOnly( aRow, aCol );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool GRID_TRICKS::toggleCell( int aRow, int aCol, bool aPreserveSelection )
|
||||||
|
{
|
||||||
|
if( isCheckbox( aRow, aCol ) )
|
||||||
{
|
{
|
||||||
if( !aPreserveSelection )
|
if( !aPreserveSelection )
|
||||||
{
|
{
|
||||||
|
@ -135,7 +157,7 @@ bool GRID_TRICKS::showEditor( int aRow, int aCol )
|
||||||
if( m_grid->GetGridCursorRow() != aRow || m_grid->GetGridCursorCol() != aCol )
|
if( m_grid->GetGridCursorRow() != aRow || m_grid->GetGridCursorCol() != aCol )
|
||||||
m_grid->SetGridCursor( aRow, aCol );
|
m_grid->SetGridCursor( aRow, aCol );
|
||||||
|
|
||||||
if( m_grid->IsEditable() && !m_grid->IsReadOnly( aRow, aCol ) )
|
if( !isReadOnly( aRow, aCol ) )
|
||||||
{
|
{
|
||||||
m_grid->ClearSelection();
|
m_grid->ClearSelection();
|
||||||
|
|
||||||
|
@ -328,7 +350,7 @@ void GRID_TRICKS::showPopupMenu( wxMenu& menu, wxGridEvent& aEvent )
|
||||||
_( "Copy selected cells to clipboard" ) );
|
_( "Copy selected cells to clipboard" ) );
|
||||||
menu.Append( GRIDTRICKS_ID_PASTE, _( "Paste" ) + "\tCtrl+V",
|
menu.Append( GRIDTRICKS_ID_PASTE, _( "Paste" ) + "\tCtrl+V",
|
||||||
_( "Paste clipboard cells to matrix at current cell" ) );
|
_( "Paste clipboard cells to matrix at current cell" ) );
|
||||||
menu.Append( GRIDTRICKS_ID_DELETE, _( "Delete" ) + "\tDel", _( "Delete selected cells" ) );
|
menu.Append( GRIDTRICKS_ID_DELETE, _( "Delete" ) + "\tDel", _( "Clear contents of selected cells" ) );
|
||||||
menu.Append( GRIDTRICKS_ID_SELECT, _( "Select All" ) + "\tCtrl+A", _( "Select all cells" ) );
|
menu.Append( GRIDTRICKS_ID_SELECT, _( "Select All" ) + "\tCtrl+A", _( "Select all cells" ) );
|
||||||
|
|
||||||
getSelectedArea();
|
getSelectedArea();
|
||||||
|
@ -340,25 +362,43 @@ void GRID_TRICKS::showPopupMenu( wxMenu& menu, wxGridEvent& aEvent )
|
||||||
menu.Enable( GRIDTRICKS_ID_COPY, false );
|
menu.Enable( GRIDTRICKS_ID_COPY, false );
|
||||||
menu.Enable( GRIDTRICKS_ID_DELETE, false );
|
menu.Enable( GRIDTRICKS_ID_DELETE, false );
|
||||||
}
|
}
|
||||||
else if( !m_grid->IsEditable() )
|
|
||||||
{
|
|
||||||
menu.Enable( GRIDTRICKS_ID_CUT, false );
|
|
||||||
menu.Enable( GRIDTRICKS_ID_DELETE, false );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
menu.Enable( GRIDTRICKS_ID_CUT, false );
|
||||||
|
menu.Enable( GRIDTRICKS_ID_DELETE, false );
|
||||||
menu.Enable( GRIDTRICKS_ID_PASTE, false );
|
menu.Enable( GRIDTRICKS_ID_PASTE, false );
|
||||||
|
|
||||||
wxLogNull doNotLog; // disable logging of failed clipboard actions
|
auto anyCellsWritable =
|
||||||
|
[&]()
|
||||||
|
{
|
||||||
|
for( int row = m_sel_row_start; row < m_sel_row_start + m_sel_row_count; ++row )
|
||||||
|
{
|
||||||
|
for( int col = m_sel_col_start; col < m_sel_col_start + m_sel_col_count; ++col )
|
||||||
|
{
|
||||||
|
if( !isReadOnly( row, col ) && isTextEntry( row, col ) )
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if( m_grid->IsEditable() && wxTheClipboard->Open() )
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
if( anyCellsWritable() )
|
||||||
{
|
{
|
||||||
if( wxTheClipboard->IsSupported( wxDF_TEXT )
|
menu.Enable( GRIDTRICKS_ID_CUT, true );
|
||||||
|| wxTheClipboard->IsSupported( wxDF_UNICODETEXT ) )
|
menu.Enable( GRIDTRICKS_ID_DELETE, true );
|
||||||
{
|
|
||||||
menu.Enable( GRIDTRICKS_ID_PASTE, true );
|
|
||||||
}
|
|
||||||
|
|
||||||
wxTheClipboard->Close();
|
wxLogNull doNotLog; // disable logging of failed clipboard actions
|
||||||
|
|
||||||
|
if( wxTheClipboard->Open() )
|
||||||
|
{
|
||||||
|
if( wxTheClipboard->IsSupported( wxDF_TEXT )
|
||||||
|
|| wxTheClipboard->IsSupported( wxDF_UNICODETEXT ) )
|
||||||
|
{
|
||||||
|
menu.Enable( GRIDTRICKS_ID_PASTE, true );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxTheClipboard->Close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_grid->PopupMenu( &menu );
|
m_grid->PopupMenu( &menu );
|
||||||
|
@ -730,7 +770,9 @@ void GRID_TRICKS::paste_text( const wxString& cb_text )
|
||||||
|
|
||||||
wxString cellTxt = cols.GetNextToken();
|
wxString cellTxt = cols.GetNextToken();
|
||||||
|
|
||||||
if( tbl->CanSetValueAs( row, col, wxGRID_VALUE_STRING ) )
|
// Allow paste to anything that can take a string, including things like color
|
||||||
|
// swatches and checkboxes
|
||||||
|
if( tbl->CanSetValueAs( row, col, wxGRID_VALUE_STRING ) && !isReadOnly( row, col ) )
|
||||||
{
|
{
|
||||||
tbl->SetValue( row, col, cellTxt );
|
tbl->SetValue( row, col, cellTxt );
|
||||||
|
|
||||||
|
@ -765,9 +807,11 @@ void GRID_TRICKS::cutcopy( bool doCopy, bool doDelete )
|
||||||
if( col < m_sel_col_start + m_sel_col_count - 1 ) // that was not last column
|
if( col < m_sel_col_start + m_sel_col_count - 1 ) // that was not last column
|
||||||
txt += COL_SEP;
|
txt += COL_SEP;
|
||||||
|
|
||||||
if( doDelete && m_grid->IsEditable() )
|
if( doDelete )
|
||||||
{
|
{
|
||||||
if( tbl->CanSetValueAs( row, col, wxGRID_VALUE_STRING ) )
|
// Do NOT allow clear of things that can take strings but aren't textEntries
|
||||||
|
// (ie: color swatches, textboxes, etc.).
|
||||||
|
if( isTextEntry( row, col ) && !isReadOnly( row, col ) )
|
||||||
tbl->SetValue( row, col, wxEmptyString );
|
tbl->SetValue( row, col, wxEmptyString );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// C++ code generated with wxFormBuilder (version 3.10.1-88b0f50)
|
// C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b)
|
||||||
// http://www.wxformbuilder.org/
|
// http://www.wxformbuilder.org/
|
||||||
//
|
//
|
||||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||||
|
@ -102,7 +102,7 @@ SIM_PLOT_FRAME_BASE::SIM_PLOT_FRAME_BASE( wxWindow* parent, wxWindowID id, const
|
||||||
|
|
||||||
// Grid
|
// Grid
|
||||||
m_signalsGrid->CreateGrid( 0, 5 );
|
m_signalsGrid->CreateGrid( 0, 5 );
|
||||||
m_signalsGrid->EnableEditing( false );
|
m_signalsGrid->EnableEditing( true );
|
||||||
m_signalsGrid->EnableGridLines( true );
|
m_signalsGrid->EnableGridLines( true );
|
||||||
m_signalsGrid->EnableDragGridSize( false );
|
m_signalsGrid->EnableDragGridSize( false );
|
||||||
m_signalsGrid->SetMargins( 0, 0 );
|
m_signalsGrid->SetMargins( 0, 0 );
|
||||||
|
|
|
@ -843,7 +843,7 @@
|
||||||
<property name="drag_col_size">1</property>
|
<property name="drag_col_size">1</property>
|
||||||
<property name="drag_grid_size">0</property>
|
<property name="drag_grid_size">0</property>
|
||||||
<property name="drag_row_size">1</property>
|
<property name="drag_row_size">1</property>
|
||||||
<property name="editing">0</property>
|
<property name="editing">1</property>
|
||||||
<property name="enabled">1</property>
|
<property name="enabled">1</property>
|
||||||
<property name="fg"></property>
|
<property name="fg"></property>
|
||||||
<property name="floatable">1</property>
|
<property name="floatable">1</property>
|
||||||
|
|
|
@ -110,6 +110,10 @@ protected:
|
||||||
virtual void showPopupMenu( wxMenu& menu, wxGridEvent& aEvent );
|
virtual void showPopupMenu( wxMenu& menu, wxGridEvent& aEvent );
|
||||||
virtual void doPopupSelection( wxCommandEvent& event );
|
virtual void doPopupSelection( wxCommandEvent& event );
|
||||||
|
|
||||||
|
bool isTextEntry( int aRow, int aCol );
|
||||||
|
bool isCheckbox( int aRow, int aCol );
|
||||||
|
bool isReadOnly( int aRow, int aCol );
|
||||||
|
|
||||||
bool toggleCell( int aRow, int aCol, bool aPreserveSelection = false );
|
bool toggleCell( int aRow, int aCol, bool aPreserveSelection = false );
|
||||||
bool showEditor( int aRow, int aCol );
|
bool showEditor( int aRow, int aCol );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue