Symbol Fields Table: fix issues with selecting row of starting selection

Fixes: https://gitlab.com/kicad/code/kicad/-/issues/15684
This commit is contained in:
Mike Williams 2023-09-20 09:40:48 -04:00
parent dd0743d766
commit 6425c5cc1a
3 changed files with 31 additions and 3 deletions

View File

@ -457,6 +457,8 @@ bool DIALOG_SYMBOL_FIELDS_TABLE::TransferDataToWindow()
EE_SELECTION& selection = selectionTool->GetSelection();
SCH_SYMBOL* symbol = nullptr;
UpdateScope();
if( selection.GetSize() == 1 )
{
EDA_ITEM* item = selection.Front();
@ -485,14 +487,33 @@ bool DIALOG_SYMBOL_FIELDS_TABLE::TransferDataToWindow()
if( found )
{
m_grid->GoToCell( row, 1 );
// Find the value column and the reference column if they're shown
int valueCol = -1;
int refCol = -1;
int anyCol = -1;
for( int col = 0; col < m_dataModel->GetNumberCols(); col++ )
{
if( m_dataModel->ColIsValue( col ) )
valueCol = col;
else if( m_dataModel->ColIsReference( col ) )
refCol = col;
else if( anyCol == -1 && m_dataModel->GetShowColumn( col ) )
anyCol = col;
}
if( valueCol != -1 && m_dataModel->GetShowColumn( valueCol ) )
m_grid->GoToCell( row, valueCol );
else if( refCol != -1 && m_dataModel->GetShowColumn( refCol ) )
m_grid->GoToCell( row, refCol );
else if( anyCol != -1 )
m_grid->GoToCell( row, anyCol );
break;
}
}
}
UpdateScope();
// We don't want table range selection events to happen until we've loaded the data or we
// we'll clear our selection as the grid is built before the code above can get the
// user's current selection.

View File

@ -234,6 +234,12 @@ bool FIELDS_EDITOR_GRID_DATA_MODEL::ColIsReference( int aCol )
return m_cols[aCol].m_fieldName == TEMPLATE_FIELDNAME::GetDefaultFieldName( REFERENCE_FIELD );
}
bool FIELDS_EDITOR_GRID_DATA_MODEL::ColIsValue( int aCol )
{
wxCHECK( aCol >= 0 && aCol < (int) m_cols.size(), false );
return m_cols[aCol].m_fieldName == TEMPLATE_FIELDNAME::GetDefaultFieldName( VALUE_FIELD );
}
bool FIELDS_EDITOR_GRID_DATA_MODEL::ColIsQuantity( int aCol )
{
wxCHECK( aCol >= 0 && aCol < (int) m_cols.size(), false );

View File

@ -132,6 +132,7 @@ public:
}
bool ColIsReference( int aCol );
bool ColIsValue( int aCol );
bool ColIsQuantity( int aCol );
bool ColIsItemNumber( int aCol );
bool ColIsAttribute( int aCol );