Change strategy for committing values from SIM_MODEL propGrid.
Note that the PCB editor's propGrid doesn't seem to need this workaround, but I haven't yet figured out what's different between it and the sim model propGrid. Fixes https://gitlab.com/kicad/code/kicad/issues/13852
This commit is contained in:
parent
200a06a677
commit
c188318174
|
@ -295,11 +295,6 @@ bool DIALOG_SIM_MODEL<T_symbol, T_field>::TransferDataFromWindow()
|
||||||
{
|
{
|
||||||
m_pinAssignmentsGrid->CommitPendingChanges();
|
m_pinAssignmentsGrid->CommitPendingChanges();
|
||||||
|
|
||||||
// This should have been done in wxPGTextCtrlEditor::OnTextCtrlEvent(), but something must
|
|
||||||
// be clearing it before we get here, resulting in CommitChangesFromEditor() doing nothing
|
|
||||||
m_paramGrid->GetGrid()->EditorsValueWasModified();
|
|
||||||
m_paramGrid->GetGrid()->CommitChangesFromEditor();
|
|
||||||
|
|
||||||
if( !DIALOG_SIM_MODEL_BASE::TransferDataFromWindow() )
|
if( !DIALOG_SIM_MODEL_BASE::TransferDataFromWindow() )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -1241,11 +1236,6 @@ void DIALOG_SIM_MODEL<T_symbol, T_field>::onTypeChoice( wxCommandEvent& aEvent )
|
||||||
template <typename T_symbol, typename T_field>
|
template <typename T_symbol, typename T_field>
|
||||||
void DIALOG_SIM_MODEL<T_symbol, T_field>::onPageChanging( wxBookCtrlEvent& event )
|
void DIALOG_SIM_MODEL<T_symbol, T_field>::onPageChanging( wxBookCtrlEvent& event )
|
||||||
{
|
{
|
||||||
// This should have been done in wxPGTextCtrlEditor::OnTextCtrlEvent(), but something must
|
|
||||||
// be clearing it before we get here, resulting in CommitChangesFromEditor() doing nothing
|
|
||||||
m_paramGrid->GetGrid()->EditorsValueWasModified();
|
|
||||||
m_paramGrid->GetGrid()->CommitChangesFromEditor();
|
|
||||||
|
|
||||||
updateModelCodeTab( &curModel() );
|
updateModelCodeTab( &curModel() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1295,10 +1285,7 @@ void DIALOG_SIM_MODEL<T_symbol, T_field>::onParamGridSetFocus( wxFocusEvent& aEv
|
||||||
// Tab key is pressed. This is inconvenient, so we fix that here.
|
// Tab key is pressed. This is inconvenient, so we fix that here.
|
||||||
|
|
||||||
wxPropertyGrid* grid = m_paramGrid->GetGrid();
|
wxPropertyGrid* grid = m_paramGrid->GetGrid();
|
||||||
|
wxPGProperty* selected = grid->GetSelection();
|
||||||
grid->CommitChangesFromEditor();
|
|
||||||
|
|
||||||
wxPGProperty* selected = grid->GetSelection();
|
|
||||||
|
|
||||||
if( !selected )
|
if( !selected )
|
||||||
selected = grid->wxPropertyGridInterface::GetFirst();
|
selected = grid->wxPropertyGridInterface::GetFirst();
|
||||||
|
@ -1315,8 +1302,6 @@ void DIALOG_SIM_MODEL<T_symbol, T_field>::onParamGridSelectionChange( wxProperty
|
||||||
{
|
{
|
||||||
wxPropertyGrid* grid = m_paramGrid->GetGrid();
|
wxPropertyGrid* grid = m_paramGrid->GetGrid();
|
||||||
|
|
||||||
grid->CommitChangesFromEditor();
|
|
||||||
|
|
||||||
// Jump over categories.
|
// Jump over categories.
|
||||||
if( grid->GetSelection() && grid->GetSelection()->IsCategory() )
|
if( grid->GetSelection() && grid->GetSelection()->IsCategory() )
|
||||||
{
|
{
|
||||||
|
@ -1395,10 +1380,7 @@ void DIALOG_SIM_MODEL<T_symbol, T_field>::onUpdateUI( wxUpdateUIEvent& aEvent )
|
||||||
wxRect gridRect = grid->GetScreenRect();
|
wxRect gridRect = grid->GetScreenRect();
|
||||||
|
|
||||||
if( ctrlRect.GetTop() < gridRect.GetTop() || ctrlRect.GetBottom() > gridRect.GetBottom() )
|
if( ctrlRect.GetTop() < gridRect.GetTop() || ctrlRect.GetBottom() > gridRect.GetBottom() )
|
||||||
{
|
|
||||||
grid->CommitChangesFromEditor();
|
|
||||||
grid->ClearSelection();
|
grid->ClearSelection();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,6 +134,21 @@ bool SIM_STRING_PROPERTY::OnEvent( wxPropertyGrid* propgrid, wxWindow* wnd_prima
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( wxPropertyGrid* propGrid = dynamic_cast<wxPropertyGrid*>( wnd_primary->GetParent() ) )
|
||||||
|
{
|
||||||
|
// This doesn't seem like it should be required, as wxPGTextCtrlEditor::OnTextCtrlEvent()
|
||||||
|
// should be setting the value to modified. But it doesn't (or the modified flag is
|
||||||
|
// cleared at some point later), and even if it is set, the changes don't get committed.
|
||||||
|
// (We used to have code in DIALOG_SIM_MODEL to commit things on *some* actions, but it
|
||||||
|
// wasn't complete and this appears to have at least a better hit rate.)
|
||||||
|
propGrid->CallAfter(
|
||||||
|
[propGrid]()
|
||||||
|
{
|
||||||
|
propGrid->EditorsValueWasModified();
|
||||||
|
propGrid->CommitChangesFromEditor();
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue