Revise transferDataToPad to return False on failure

When the data doesn't allow the pad to be drawn, we return false and
skip the redraw/update steps.  This allows updating with invalid values
while typing

Fixes https://gitlab.com/kicad/code/kicad/issues/10684
This commit is contained in:
Seth Hillbrand 2022-01-31 17:01:05 -08:00
parent 59e43527a0
commit 56d204c4c9
1 changed files with 24 additions and 39 deletions

View File

@ -373,13 +373,15 @@ void DIALOG_PAD_PROPERTIES::onCornerRadiusChange( wxCommandEvent& event )
if( m_cornerRadius.GetValue() < 0 )
m_cornerRadiusCtrl->ChangeValue( "0" );
transferDataToPad( m_dummyPad );
m_dummyPad->SetRoundRectCornerRadius( m_cornerRadius.GetValue() );
if( transferDataToPad( m_dummyPad ) )
{
m_dummyPad->SetRoundRectCornerRadius( m_cornerRadius.GetValue() );
m_cornerRatio.ChangeDoubleValue( m_dummyPad->GetRoundRectRadiusRatio() * 100.0 );
m_mixedCornerRatio.ChangeDoubleValue( m_dummyPad->GetRoundRectRadiusRatio() * 100.0 );
m_cornerRatio.ChangeDoubleValue( m_dummyPad->GetRoundRectRadiusRatio() * 100.0 );
m_mixedCornerRatio.ChangeDoubleValue( m_dummyPad->GetRoundRectRadiusRatio() * 100.0 );
redraw();
redraw();
}
}
@ -448,11 +450,8 @@ void DIALOG_PAD_PROPERTIES::onCornerSizePercentChange( wxCommandEvent& event )
}
}
if( changed )
{
transferDataToPad( m_dummyPad );
if( changed && transferDataToPad( m_dummyPad ) )
m_cornerRadius.ChangeValue( m_dummyPad->GetRoundRectCornerRadius() );
}
redraw();
}
@ -892,9 +891,8 @@ void DIALOG_PAD_PROPERTIES::OnPadShapeSelection( wxCommandEvent& event )
enablePrimitivePage( is_custom );
transferDataToPad( m_dummyPad );
updateRoundRectCornerValues();
if( transferDataToPad( m_dummyPad ) )
updateRoundRectCornerValues();
for( size_t i = 0; i < m_notebook->GetPageCount(); ++i )
m_notebook->GetPage( i )->Layout();
@ -1228,7 +1226,7 @@ void DIALOG_PAD_PROPERTIES::OnSetLayers( wxCommandEvent& event )
bool DIALOG_PAD_PROPERTIES::padValuesOK()
{
bool error = transferDataToPad( m_dummyPad );
bool error = !transferDataToPad( m_dummyPad );
wxArrayString error_msgs;
wxArrayString warning_msgs;
@ -1551,7 +1549,8 @@ bool DIALOG_PAD_PROPERTIES::TransferDataFromWindow()
if( !padValuesOK() )
return false;
transferDataToPad( m_padMaster );
if( !transferDataToPad( m_padMaster ) )
return false;
PAD_TOOL* padTool = m_parent->GetToolManager()->GetTool<PAD_TOOL>();
padTool->SetLastPadNumber( m_padMaster->GetNumber() );
@ -1693,11 +1692,11 @@ bool DIALOG_PAD_PROPERTIES::transferDataToPad( PAD* aPad )
wxString msg;
if( !Validate() )
return true;
return false;
if( !m_panelGeneral->Validate() )
return true;
return false;
if( !m_localSettingsPanel->Validate() )
return true;
return false;
if( !m_spokeWidth.Validate( 0, INT_MAX ) )
return false;
@ -1999,7 +1998,7 @@ bool DIALOG_PAD_PROPERTIES::transferDataToPad( PAD* aPad )
aPad->SetLayerSet( padLayerMask );
return error;
return !error;
}
@ -2035,7 +2034,8 @@ void DIALOG_PAD_PROPERTIES::OnValuesChanged( wxCommandEvent& event )
{
if( m_canUpdate )
{
transferDataToPad( m_dummyPad );
if( !transferDataToPad( m_dummyPad ) )
return;
// If the pad size has changed, update the displayed values for rounded rect pads.
updateRoundRectCornerValues();
@ -2078,11 +2078,8 @@ void DIALOG_PAD_PROPERTIES::editPrimitive()
displayPrimitivesList();
if( m_canUpdate )
{
transferDataToPad( m_dummyPad );
if( m_canUpdate && transferDataToPad( m_dummyPad ) )
redraw();
}
}
@ -2126,11 +2123,8 @@ void DIALOG_PAD_PROPERTIES::onDeletePrimitive( wxCommandEvent& event )
displayPrimitivesList();
if( m_canUpdate )
{
transferDataToPad( m_dummyPad );
if( m_canUpdate && transferDataToPad( m_dummyPad ) )
redraw();
}
}
@ -2180,11 +2174,8 @@ void DIALOG_PAD_PROPERTIES::onAddPrimitive( wxCommandEvent& event )
displayPrimitivesList();
if( m_canUpdate )
{
transferDataToPad( m_dummyPad );
if( m_canUpdate && transferDataToPad( m_dummyPad ) )
redraw();
}
}
@ -2214,11 +2205,8 @@ void DIALOG_PAD_PROPERTIES::onGeometryTransform( wxCommandEvent& event )
displayPrimitivesList();
if( m_canUpdate )
{
transferDataToPad( m_dummyPad );
if( m_canUpdate && transferDataToPad( m_dummyPad ) )
redraw();
}
}
@ -2253,9 +2241,6 @@ void DIALOG_PAD_PROPERTIES::onDuplicatePrimitive( wxCommandEvent& event )
displayPrimitivesList();
if( m_canUpdate )
{
transferDataToPad( m_dummyPad );
if( m_canUpdate && transferDataToPad( m_dummyPad ) )
redraw();
}
}