Coverity warning fixes.

This commit is contained in:
Wayne Stambaugh 2023-10-16 17:04:01 -04:00
parent 2849388d2e
commit b5eee9dd7e
25 changed files with 352 additions and 125 deletions

View File

@ -1,7 +1,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2015-2022 Mario Luzeiro <mrluzeiro@ua.pt> * Copyright (C) 2015-2023 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 2023 CERN * Copyright (C) 2023 CERN
* Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
* *
@ -223,10 +223,23 @@ BOARD_ADAPTER::~BOARD_ADAPTER()
void BOARD_ADAPTER::ReloadColorSettings() noexcept void BOARD_ADAPTER::ReloadColorSettings() noexcept
{ {
wxASSERT( PgmOrNull() ); wxCHECK( PgmOrNull(), /* void */ );
PCBNEW_SETTINGS* settings = Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>(); PCBNEW_SETTINGS* cfg = nullptr;
m_colors = Pgm().GetSettingsManager().GetColorSettings( settings->m_ColorTheme );
try
{
cfg = Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>();
}
catch( const std::runtime_error& e )
{
wxFAIL_MSG( e.what() );
}
if( cfg )
{
m_colors = Pgm().GetSettingsManager().GetColorSettings( cfg->m_ColorTheme );
}
} }

View File

@ -934,8 +934,8 @@ int EESCHEMA_JOBS_HANDLER::JobSchErc( JOB* aJob )
m_reporter->Report( _( "Running ERC...\n" ), RPT_SEVERITY_INFO ); m_reporter->Report( _( "Running ERC...\n" ), RPT_SEVERITY_INFO );
DS_PROXY_VIEW_ITEM* drawingSheet = getDrawingSheetProxyView( sch ); std::unique_ptr<DS_PROXY_VIEW_ITEM> drawingSheet( getDrawingSheetProxyView( sch ) );
ercTester.RunTests( drawingSheet, nullptr, m_progressReporter ); ercTester.RunTests( drawingSheet.get(), nullptr, m_progressReporter );
markersProvider->SetSeverities( ercJob->m_severity ); markersProvider->SetSeverities( ercJob->m_severity );

View File

@ -160,11 +160,10 @@ void SCH_VIEW::DisplaySymbol( LIB_SYMBOL* aSymbol )
// Draw the parent items if the symbol is inherited from another symbol. // Draw the parent items if the symbol is inherited from another symbol.
if( aSymbol->IsAlias() ) if( aSymbol->IsAlias() )
{ {
std::shared_ptr< LIB_SYMBOL > parent = aSymbol->GetRootSymbol().lock(); if( std::shared_ptr< LIB_SYMBOL > parent = aSymbol->GetRootSymbol().lock() )
drawnSymbol = parent.get();
wxCHECK( parent, /* void */ ); else
wxCHECK( false, /* void */ );
drawnSymbol = parent.get();
} }
for( LIB_ITEM& item : drawnSymbol->GetDrawItems() ) for( LIB_ITEM& item : drawnSymbol->GetDrawItems() )

View File

@ -2059,6 +2059,9 @@ bool SIMULATOR_FRAME_UI::loadJsonWorkbook( const wxString& aPath )
m_simulatorFrame->LoadSimulator( simTab->GetSimCommand(), simTab->GetSimOptions() ); m_simulatorFrame->LoadSimulator( simTab->GetSimCommand(), simTab->GetSimOptions() );
simTab = dynamic_cast<SIM_TAB*>( m_plotNotebook->GetPage( 0 ) ); simTab = dynamic_cast<SIM_TAB*>( m_plotNotebook->GetPage( 0 ) );
wxCHECK( simTab, false );
simTab->SetLastSchTextSimCommand( js[ "last_sch_text_sim_command" ] ); simTab->SetLastSchTextSimCommand( js[ "last_sch_text_sim_command" ] );
} }
} }

View File

@ -277,8 +277,21 @@ SYMBOL_EDIT_FRAME::~SYMBOL_EDIT_FRAME()
// current screen is destroyed in EDA_DRAW_FRAME // current screen is destroyed in EDA_DRAW_FRAME
SetScreen( m_dummyScreen ); SetScreen( m_dummyScreen );
auto libedit = Pgm().GetSettingsManager().GetAppSettings<SYMBOL_EDITOR_SETTINGS>(); SYMBOL_EDITOR_SETTINGS* cfg = nullptr;
Pgm().GetSettingsManager().Save( libedit );
try
{
cfg = Pgm().GetSettingsManager().GetAppSettings<SYMBOL_EDITOR_SETTINGS>();
}
catch( const std::runtime_error& e )
{
wxFAIL_MSG( e.what() );
}
if( cfg )
{
Pgm().GetSettingsManager().Save( cfg );
}
delete m_libMgr; delete m_libMgr;
} }
@ -745,6 +758,8 @@ wxString SYMBOL_EDIT_FRAME::SetCurLib( const wxString& aLibNickname )
void SYMBOL_EDIT_FRAME::SetCurSymbol( LIB_SYMBOL* aSymbol, bool aUpdateZoom ) void SYMBOL_EDIT_FRAME::SetCurSymbol( LIB_SYMBOL* aSymbol, bool aUpdateZoom )
{ {
wxCHECK( m_toolManager, /* void */ );
m_toolManager->RunAction( EE_ACTIONS::clearSelection ); m_toolManager->RunAction( EE_ACTIONS::clearSelection );
GetCanvas()->GetView()->Clear(); GetCanvas()->GetView()->Clear();
delete m_symbol; delete m_symbol;
@ -811,12 +826,14 @@ void SYMBOL_EDIT_FRAME::SetCurSymbol( LIB_SYMBOL* aSymbol, bool aUpdateZoom )
} }
else if( IsSymbolAlias() ) else if( IsSymbolAlias() )
{ {
std::shared_ptr<LIB_SYMBOL> rootSymbol = m_symbol->GetRootSymbol().lock(); wxString rootSymbolName;
// Don't assume the parent symbol shared pointer is still valid. // Don't assume the parent symbol shared pointer is still valid.
wxCHECK( rootSymbol, /* void */ ); if( std::shared_ptr<LIB_SYMBOL> rootSymbol = m_symbol->GetRootSymbol().lock() )
rootSymbolName = rootSymbol->GetName();
else
wxCHECK( false, /* void */ );
wxString rootSymbolName = rootSymbol->GetName();
int unit = GetUnit(); int unit = GetUnit();
int convert = GetConvert(); int convert = GetConvert();
wxString msg; wxString msg;

View File

@ -170,23 +170,37 @@ DIALOG_BOARD_REANNOTATE::DIALOG_BOARD_REANNOTATE( PCB_EDIT_FRAME* aParentFrame )
DIALOG_BOARD_REANNOTATE::~DIALOG_BOARD_REANNOTATE() DIALOG_BOARD_REANNOTATE::~DIALOG_BOARD_REANNOTATE()
{ {
GetParameters(); // Get the current menu settings GetParameters(); // Get the current menu settings
PCBNEW_SETTINGS* cfg = m_frame->GetPcbNewSettings();
cfg->m_Reannotate.sort_on_fp_location = m_locationChoice->GetSelection() == 0;
cfg->m_Reannotate.remove_front_prefix = m_RemoveFrontPrefix->GetValue();
cfg->m_Reannotate.remove_back_prefix = m_RemoveBackPrefix->GetValue();
cfg->m_Reannotate.exclude_locked = m_ExcludeLocked->GetValue();
cfg->m_Reannotate.grid_index = m_gridIndex; PCBNEW_SETTINGS* cfg = nullptr;
cfg->m_Reannotate.sort_code = m_sortCode;
cfg->m_Reannotate.annotation_choice = m_annotationScope;
cfg->m_Reannotate.report_severity = m_severity;
cfg->m_Reannotate.front_refdes_start = m_FrontRefDesStart->GetValue(); try
cfg->m_Reannotate.back_refdes_start = m_BackRefDesStart->GetValue(); {
cfg->m_Reannotate.front_prefix = m_FrontPrefix->GetValue(); cfg = m_frame->GetPcbNewSettings();
cfg->m_Reannotate.back_prefix = m_BackPrefix->GetValue(); }
cfg->m_Reannotate.exclude_list = m_ExcludeList->GetValue(); catch( const std::runtime_error& e )
cfg->m_Reannotate.report_file_name = m_MessageWindow->GetFileName(); {
wxFAIL_MSG( e.what() );
}
if( cfg )
{
cfg->m_Reannotate.sort_on_fp_location = m_locationChoice->GetSelection() == 0;
cfg->m_Reannotate.remove_front_prefix = m_RemoveFrontPrefix->GetValue();
cfg->m_Reannotate.remove_back_prefix = m_RemoveBackPrefix->GetValue();
cfg->m_Reannotate.exclude_locked = m_ExcludeLocked->GetValue();
cfg->m_Reannotate.grid_index = m_gridIndex;
cfg->m_Reannotate.sort_code = m_sortCode;
cfg->m_Reannotate.annotation_choice = m_annotationScope;
cfg->m_Reannotate.report_severity = m_severity;
cfg->m_Reannotate.front_refdes_start = m_FrontRefDesStart->GetValue();
cfg->m_Reannotate.back_refdes_start = m_BackRefDesStart->GetValue();
cfg->m_Reannotate.front_prefix = m_FrontPrefix->GetValue();
cfg->m_Reannotate.back_prefix = m_BackPrefix->GetValue();
cfg->m_Reannotate.exclude_list = m_ExcludeList->GetValue();
cfg->m_Reannotate.report_file_name = m_MessageWindow->GetFileName();
}
} }

View File

@ -1,7 +1,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 1992-2022 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -59,14 +59,26 @@ DIALOG_CLEANUP_TRACKS_AND_VIAS::DIALOG_CLEANUP_TRACKS_AND_VIAS( PCB_EDIT_FRAME*
DIALOG_CLEANUP_TRACKS_AND_VIAS::~DIALOG_CLEANUP_TRACKS_AND_VIAS() DIALOG_CLEANUP_TRACKS_AND_VIAS::~DIALOG_CLEANUP_TRACKS_AND_VIAS()
{ {
auto cfg = m_parentFrame->GetPcbNewSettings(); PCBNEW_SETTINGS* cfg = nullptr;
cfg->m_Cleanup.cleanup_vias = m_cleanViasOpt->GetValue(); try
cfg->m_Cleanup.merge_segments = m_mergeSegmOpt->GetValue(); {
cfg->m_Cleanup.cleanup_unconnected = m_deleteUnconnectedOpt->GetValue(); cfg = m_parentFrame->GetPcbNewSettings();
cfg->m_Cleanup.cleanup_short_circuits = m_cleanShortCircuitOpt->GetValue(); }
cfg->m_Cleanup.cleanup_tracks_in_pad = m_deleteTracksInPadsOpt->GetValue(); catch( const std::runtime_error& e )
cfg->m_Cleanup.delete_dangling_vias = m_deleteDanglingViasOpt->GetValue(); {
wxFAIL_MSG( e.what() );
}
if( cfg )
{
cfg->m_Cleanup.cleanup_vias = m_cleanViasOpt->GetValue();
cfg->m_Cleanup.merge_segments = m_mergeSegmOpt->GetValue();
cfg->m_Cleanup.cleanup_unconnected = m_deleteUnconnectedOpt->GetValue();
cfg->m_Cleanup.cleanup_short_circuits = m_cleanShortCircuitOpt->GetValue();
cfg->m_Cleanup.cleanup_tracks_in_pad = m_deleteTracksInPadsOpt->GetValue();
cfg->m_Cleanup.delete_dangling_vias = m_deleteDanglingViasOpt->GetValue();
}
m_changesTreeModel->DecRef(); m_changesTreeModel->DecRef();
} }

View File

@ -160,14 +160,27 @@ DIALOG_DRC::~DIALOG_DRC()
for( int ii = 0; ii < m_ignoredList->GetItemCount(); ++ii ) for( int ii = 0; ii < m_ignoredList->GetItemCount(); ++ii )
g_lastIgnored.push_back( m_ignoredList->GetItemText( ii ) ); g_lastIgnored.push_back( m_ignoredList->GetItemText( ii ) );
PCBNEW_SETTINGS* settings = m_frame->GetPcbNewSettings(); PCBNEW_SETTINGS* cfg = nullptr;
settings->m_DrcDialog.refill_zones = m_cbRefillZones->GetValue();
settings->m_DrcDialog.test_all_track_errors = m_cbReportAllTrackErrors->GetValue();
if( !Kiface().IsSingle() ) try
settings->m_DrcDialog.test_footprints = m_cbTestFootprints->GetValue(); {
cfg = m_frame->GetPcbNewSettings();
}
catch( const std::runtime_error& e )
{
wxFAIL_MSG( e.what() );
}
settings->m_DrcDialog.severities = m_severities; if( cfg )
{
cfg->m_DrcDialog.refill_zones = m_cbRefillZones->GetValue();
cfg->m_DrcDialog.test_all_track_errors = m_cbReportAllTrackErrors->GetValue();
if( !Kiface().IsSingle() )
cfg->m_DrcDialog.test_footprints = m_cbTestFootprints->GetValue();
cfg->m_DrcDialog.severities = m_severities;
}
m_markersTreeModel->DecRef(); m_markersTreeModel->DecRef();
m_unconnectedTreeModel->DecRef(); m_unconnectedTreeModel->DecRef();

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2013-2015 Cirilo Bernardo * Copyright (C) 2013-2015 Cirilo Bernardo
* Copyright (C) 2013-2019 KiCad Developers, see change_log.txt for contributors. * Copyright (C) 2013-2023 KiCad Developers, see change_log.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -91,13 +91,25 @@ public:
{ {
m_idfThouOpt = m_rbUnitSelection->GetSelection() == 1; m_idfThouOpt = m_rbUnitSelection->GetSelection() == 1;
auto cfg = m_parent->GetPcbNewSettings(); PCBNEW_SETTINGS* cfg = nullptr;
cfg->m_ExportIdf.units_mils = m_idfThouOpt; try
cfg->m_ExportIdf.auto_adjust = m_AutoAdjust; {
cfg->m_ExportIdf.ref_units = m_RefUnits; cfg = m_parent->GetPcbNewSettings();
cfg->m_ExportIdf.ref_x = m_XRef; }
cfg->m_ExportIdf.ref_y = m_YRef; catch( const std::runtime_error& e )
{
wxFAIL_MSG( e.what() );
}
if( cfg )
{
cfg->m_ExportIdf.units_mils = m_idfThouOpt;
cfg->m_ExportIdf.auto_adjust = m_AutoAdjust;
cfg->m_ExportIdf.ref_units = m_RefUnits;
cfg->m_ExportIdf.ref_x = m_XRef;
cfg->m_ExportIdf.ref_y = m_YRef;
}
} }
bool GetThouOption() bool GetThouOption()

View File

@ -255,23 +255,35 @@ DIALOG_EXPORT_STEP::~DIALOG_EXPORT_STEP()
{ {
GetOriginOption(); // Update m_origin member. GetOriginOption(); // Update m_origin member.
PCBNEW_SETTINGS* cfg = m_parent->GetPcbNewSettings(); PCBNEW_SETTINGS* cfg = nullptr;
cfg->m_ExportStep.origin_mode = static_cast<int>( m_origin ); try
cfg->m_ExportStep.origin_units = m_STEP_OrgUnitChoice->GetSelection(); {
cfg->m_ExportStep.replace_models = m_cbSubstModels->GetValue(); cfg = m_parent->GetPcbNewSettings();
cfg->m_ExportStep.overwrite_file = m_cbOverwriteFile->GetValue(); }
catch( const std::runtime_error& e )
{
wxFAIL_MSG( e.what() );
}
double val = 0.0; if( cfg )
{
cfg->m_ExportStep.origin_mode = static_cast<int>( m_origin );
cfg->m_ExportStep.origin_units = m_STEP_OrgUnitChoice->GetSelection();
cfg->m_ExportStep.replace_models = m_cbSubstModels->GetValue();
cfg->m_ExportStep.overwrite_file = m_cbOverwriteFile->GetValue();
m_STEP_Xorg->GetValue().ToDouble( &val ); double val = 0.0;
cfg->m_ExportStep.origin_x = val;
m_STEP_Yorg->GetValue().ToDouble( &val ); m_STEP_Xorg->GetValue().ToDouble( &val );
cfg->m_ExportStep.origin_y = val; cfg->m_ExportStep.origin_x = val;
cfg->m_ExportStep.no_unspecified = m_cbRemoveUnspecified->GetValue(); m_STEP_Yorg->GetValue().ToDouble( &val );
cfg->m_ExportStep.no_dnp = m_cbRemoveDNP->GetValue(); cfg->m_ExportStep.origin_y = val;
cfg->m_ExportStep.no_unspecified = m_cbRemoveUnspecified->GetValue();
cfg->m_ExportStep.no_dnp = m_cbRemoveDNP->GetValue();
}
m_toleranceLastChoice = m_choiceTolerance->GetSelection(); m_toleranceLastChoice = m_choiceTolerance->GetSelection();
m_exportTracks = m_cbExportTracks->GetValue(); m_exportTracks = m_cbExportTracks->GetValue();

View File

@ -71,8 +71,6 @@ private:
}; };
/* DIALOG_EXPORT_SVG functions
*/
DIALOG_EXPORT_SVG::DIALOG_EXPORT_SVG( PCB_EDIT_FRAME* aParent, BOARD* aBoard ) : DIALOG_EXPORT_SVG::DIALOG_EXPORT_SVG( PCB_EDIT_FRAME* aParent, BOARD* aBoard ) :
DIALOG_EXPORT_SVG_BASE( aParent ), DIALOG_EXPORT_SVG_BASE( aParent ),
m_board( aBoard ), m_board( aBoard ),
@ -117,28 +115,42 @@ DIALOG_EXPORT_SVG::~DIALOG_EXPORT_SVG()
m_parent->Prj().GetProjectFile().m_PcbLastPath[ LAST_PATH_SVG ] = m_outputDirectory; m_parent->Prj().GetProjectFile().m_PcbLastPath[ LAST_PATH_SVG ] = m_outputDirectory;
auto cfg = m_parent->GetPcbNewSettings(); PCBNEW_SETTINGS* cfg = nullptr;
cfg->m_ExportSvg.black_and_white = m_printBW; try
cfg->m_ExportSvg.mirror = m_printMirror; {
cfg->m_ExportSvg.one_file = m_oneFileOnly; cfg = m_parent->GetPcbNewSettings();
cfg->m_ExportSvg.page_size = m_rbSvgPageSizeOpt->GetSelection(); }
cfg->m_ExportSvg.output_dir = m_outputDirectory.ToStdString(); catch( const std::runtime_error& e )
{
wxFAIL_MSG( e.what() );
}
cfg->m_ExportSvg.use_selected_theme = !m_cbUsedBoardTheme->GetValue(); if( cfg )
cfg->m_ExportSvg.color_theme = m_colorTheme->GetStringSelection(); {
cfg->m_ExportSvg.black_and_white = m_printBW;
cfg->m_ExportSvg.mirror = m_printMirror;
cfg->m_ExportSvg.one_file = m_oneFileOnly;
cfg->m_ExportSvg.page_size = m_rbSvgPageSizeOpt->GetSelection();
cfg->m_ExportSvg.output_dir = m_outputDirectory.ToStdString();
cfg->m_ExportSvg.use_selected_theme = !m_cbUsedBoardTheme->GetValue();
cfg->m_ExportSvg.color_theme = m_colorTheme->GetStringSelection();
}
if( m_checkboxPagePerLayer->GetValue() ) if( m_checkboxPagePerLayer->GetValue() )
{ {
m_oneFileOnly = false; m_oneFileOnly = false;
cfg->m_ExportSvg.plot_board_edges = m_checkboxEdgesOnAllPages->GetValue();
if( cfg )
cfg->m_ExportSvg.plot_board_edges = m_checkboxEdgesOnAllPages->GetValue();
} }
else else
{ {
m_oneFileOnly = true; m_oneFileOnly = true;
} }
cfg->m_ExportSvg.layers.clear(); if( cfg )
cfg->m_ExportSvg.layers.clear();
for( unsigned layer = 0; layer < arrayDim( m_boxSelectLayer ); ++layer ) for( unsigned layer = 0; layer < arrayDim( m_boxSelectLayer ); ++layer )
{ {
@ -146,7 +158,10 @@ DIALOG_EXPORT_SVG::~DIALOG_EXPORT_SVG()
continue; continue;
if( m_boxSelectLayer[layer].first->IsChecked( m_boxSelectLayer[layer].second ) ) if( m_boxSelectLayer[layer].first->IsChecked( m_boxSelectLayer[layer].second ) )
cfg->m_ExportSvg.layers.push_back( layer ); {
if( cfg )
cfg->m_ExportSvg.layers.push_back( layer );
}
} }
} }
@ -302,6 +317,7 @@ void DIALOG_EXPORT_SVG::ExportSVGFile( bool aOnlyOneFile )
LSET all_selected = getCheckBoxSelectedLayers(); LSET all_selected = getCheckBoxSelectedLayers();
PCB_PLOT_SVG_OPTIONS svgPlotOptions; PCB_PLOT_SVG_OPTIONS svgPlotOptions;
svgPlotOptions.m_negative = false;
svgPlotOptions.m_blackAndWhite = m_printBW; svgPlotOptions.m_blackAndWhite = m_printBW;
svgPlotOptions.m_printMaskLayer = m_printMaskLayer; svgPlotOptions.m_printMaskLayer = m_printMaskLayer;
svgPlotOptions.m_pageSizeMode = m_rbSvgPageSizeOpt->GetSelection(); svgPlotOptions.m_pageSizeMode = m_rbSvgPageSizeOpt->GetSelection();

View File

@ -3,7 +3,7 @@
* *
* Copyright (C) 2009-2013 Lorenzo Mercantonio * Copyright (C) 2009-2013 Lorenzo Mercantonio
* Copyright (C) 2013 Jean-Pierre Charras jp.charras at wanadoo.fr * Copyright (C) 2013 Jean-Pierre Charras jp.charras at wanadoo.fr
* Copyright (C) 2004-2017 KiCad Developers, see change_log.txt for contributors. * Copyright (C) 2004-2023 KiCad Developers, see change_log.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -96,20 +96,32 @@ public:
m_unitsOpt = GetUnits(); m_unitsOpt = GetUnits();
m_copy3DFilesOpt = GetCopyFilesOption(); m_copy3DFilesOpt = GetCopyFilesOption();
PCBNEW_SETTINGS* cfg = m_parent->GetPcbNewSettings(); PCBNEW_SETTINGS* cfg = nullptr;
cfg->m_ExportVrml.units = m_unitsOpt; try
cfg->m_ExportVrml.copy_3d_models = m_copy3DFilesOpt; {
cfg->m_ExportVrml.use_relative_paths = m_useRelativePathsOpt; cfg = m_parent->GetPcbNewSettings();
cfg->m_ExportVrml.ref_units = m_VRML_RefUnitChoice->GetSelection(); }
cfg->m_ExportVrml.origin_mode = m_rbCoordOrigin->GetSelection(); catch( const std::runtime_error& e )
{
wxFAIL_MSG( e.what() );
}
double val = 0.0; if( cfg )
m_VRML_Xref->GetValue().ToDouble( &val ); {
cfg->m_ExportVrml.ref_x = val; cfg->m_ExportVrml.units = m_unitsOpt;
cfg->m_ExportVrml.copy_3d_models = m_copy3DFilesOpt;
cfg->m_ExportVrml.use_relative_paths = m_useRelativePathsOpt;
cfg->m_ExportVrml.ref_units = m_VRML_RefUnitChoice->GetSelection();
cfg->m_ExportVrml.origin_mode = m_rbCoordOrigin->GetSelection();
m_VRML_Yref->GetValue().ToDouble( &val ); double val = 0.0;
cfg->m_ExportVrml.ref_y = val; m_VRML_Xref->GetValue().ToDouble( &val );
cfg->m_ExportVrml.ref_x = val;
m_VRML_Yref->GetValue().ToDouble( &val );
cfg->m_ExportVrml.ref_y = val;
}
}; };
void SetSubdir( const wxString & aDir ) void SetSubdir( const wxString & aDir )

View File

@ -176,8 +176,21 @@ DIALOG_FOOTPRINT_PROPERTIES::DIALOG_FOOTPRINT_PROPERTIES( PCB_EDIT_FRAME* aParen
DIALOG_FOOTPRINT_PROPERTIES::~DIALOG_FOOTPRINT_PROPERTIES() DIALOG_FOOTPRINT_PROPERTIES::~DIALOG_FOOTPRINT_PROPERTIES()
{ {
if( PCBNEW_SETTINGS* cfg = m_frame->GetPcbNewSettings() ) PCBNEW_SETTINGS* cfg = nullptr;
try
{
cfg = m_frame->GetPcbNewSettings();
}
catch( const std::runtime_error& e )
{
wxFAIL_MSG( e.what() );
}
if( cfg )
{
cfg->m_FootprintTextShownColumns = m_itemsGrid->GetShownColumnsAsString(); cfg->m_FootprintTextShownColumns = m_itemsGrid->GetShownColumnsAsString();
}
// Prevents crash bug in wxGrid's d'tor // Prevents crash bug in wxGrid's d'tor
m_itemsGrid->DestroyTable( m_fields ); m_itemsGrid->DestroyTable( m_fields );

View File

@ -228,8 +228,21 @@ DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR(
DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::~DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR() DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::~DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR()
{ {
if( FOOTPRINT_EDITOR_SETTINGS* cfg = m_frame->GetSettings() ) PCBNEW_SETTINGS* cfg = nullptr;
try
{
cfg = m_frame->GetPcbNewSettings();
}
catch( const std::runtime_error& e )
{
wxFAIL_MSG( e.what() );
}
if( cfg )
{
cfg->m_FootprintTextShownColumns = m_itemsGrid->GetShownColumnsAsString(); cfg->m_FootprintTextShownColumns = m_itemsGrid->GetShownColumnsAsString();
}
// Prevents crash bug in wxGrid's d'tor // Prevents crash bug in wxGrid's d'tor
m_itemsGrid->DestroyTable( m_fields ); m_itemsGrid->DestroyTable( m_fields );

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2012-2014 Miguel Angel Ajo <miguelangel@nbee.es> * Copyright (C) 2012-2014 Miguel Angel Ajo <miguelangel@nbee.es>
* Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -68,9 +68,19 @@ DIALOG_FOOTPRINT_WIZARD_LIST::DIALOG_FOOTPRINT_WIZARD_LIST( wxWindow* aParent )
DIALOG_FOOTPRINT_WIZARD_LIST::~DIALOG_FOOTPRINT_WIZARD_LIST() DIALOG_FOOTPRINT_WIZARD_LIST::~DIALOG_FOOTPRINT_WIZARD_LIST()
{ {
if( !IsIconized() ) PCBNEW_SETTINGS* cfg = nullptr;
try
{
cfg = Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>();
}
catch( const std::runtime_error& e )
{
wxFAIL_MSG( e.what() );
}
if( cfg && !IsIconized() )
{ {
auto cfg = Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>();
cfg->m_FootprintWizardList.width = GetSize().x; cfg->m_FootprintWizardList.width = GetSize().x;
cfg->m_FootprintWizardList.height = GetSize().y; cfg->m_FootprintWizardList.height = GetSize().y;

View File

@ -1,7 +1,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 1992-2022 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -91,12 +91,24 @@ DIALOG_IMPORT_NETLIST::~DIALOG_IMPORT_NETLIST()
{ {
m_matchByUUID = m_matchByTimestamp->GetSelection() == 0; m_matchByUUID = m_matchByTimestamp->GetSelection() == 0;
PCBNEW_SETTINGS* cfg = m_parent->GetPcbNewSettings(); PCBNEW_SETTINGS* cfg = nullptr;
cfg->m_NetlistDialog.report_filter = m_MessageWindow->GetVisibleSeverities(); try
cfg->m_NetlistDialog.update_footprints = m_cbUpdateFootprints->GetValue(); {
cfg->m_NetlistDialog.delete_shorting_tracks = m_cbDeleteShortingTracks->GetValue(); cfg = m_parent->GetPcbNewSettings();
cfg->m_NetlistDialog.delete_extra_footprints = m_cbDeleteExtraFootprints->GetValue(); }
catch( const std::runtime_error& e )
{
wxFAIL_MSG( e.what() );
}
if( cfg )
{
cfg->m_NetlistDialog.report_filter = m_MessageWindow->GetVisibleSeverities();
cfg->m_NetlistDialog.update_footprints = m_cbUpdateFootprints->GetValue();
cfg->m_NetlistDialog.delete_shorting_tracks = m_cbDeleteShortingTracks->GetValue();
cfg->m_NetlistDialog.delete_extra_footprints = m_cbDeleteExtraFootprints->GetValue();
}
if( m_runDragCommand ) if( m_runDragCommand )
{ {

View File

@ -68,12 +68,24 @@ DIALOG_UPDATE_PCB::DIALOG_UPDATE_PCB( PCB_EDIT_FRAME* aParent, NETLIST* aNetlist
DIALOG_UPDATE_PCB::~DIALOG_UPDATE_PCB() DIALOG_UPDATE_PCB::~DIALOG_UPDATE_PCB()
{ {
auto cfg = m_frame->GetPcbNewSettings(); PCBNEW_SETTINGS* cfg = nullptr;
cfg->m_NetlistDialog.associate_by_ref_sch = m_cbRelinkFootprints->GetValue(); try
cfg->m_NetlistDialog.update_footprints = m_cbUpdateFootprints->GetValue(); {
cfg->m_NetlistDialog.delete_extra_footprints = m_cbDeleteExtraFootprints->GetValue(); cfg = m_frame->GetPcbNewSettings();
cfg->m_NetlistDialog.report_filter = m_messagePanel->GetVisibleSeverities(); }
catch( const std::runtime_error& e )
{
wxFAIL_MSG( e.what() );
}
if( cfg )
{
cfg->m_NetlistDialog.associate_by_ref_sch = m_cbRelinkFootprints->GetValue();
cfg->m_NetlistDialog.update_footprints = m_cbUpdateFootprints->GetValue();
cfg->m_NetlistDialog.delete_extra_footprints = m_cbDeleteExtraFootprints->GetValue();
cfg->m_NetlistDialog.report_filter = m_messagePanel->GetVisibleSeverities();
}
if( m_runDragCommand ) if( m_runDragCommand )
{ {

View File

@ -130,15 +130,28 @@ DIALOG_IMPORT_GFX_PCB::DIALOG_IMPORT_GFX_PCB( PCB_BASE_FRAME* aParent, bool aImp
DIALOG_IMPORT_GFX_PCB::~DIALOG_IMPORT_GFX_PCB() DIALOG_IMPORT_GFX_PCB::~DIALOG_IMPORT_GFX_PCB()
{ {
PCBNEW_SETTINGS* cfg = m_parent->GetPcbNewSettings(); PCBNEW_SETTINGS* cfg = nullptr;
cfg->m_ImportGraphics.layer = m_SelLayerBox->GetLayerSelection(); try
cfg->m_ImportGraphics.interactive_placement = m_placementInteractive; {
cfg->m_ImportGraphics.last_file = m_textCtrlFileName->GetValue(); cfg = m_parent->GetPcbNewSettings();
cfg->m_ImportGraphics.dxf_line_width = pcbIUScale.IUTomm( m_defaultLineWidth.GetValue() ); }
cfg->m_ImportGraphics.origin_x = pcbIUScale.IUTomm( m_xOrigin.GetValue() ); catch( const std::runtime_error& e )
cfg->m_ImportGraphics.origin_y = pcbIUScale.IUTomm( m_yOrigin.GetValue() ); {
cfg->m_ImportGraphics.dxf_units = m_choiceDxfUnits->GetSelection(); wxFAIL_MSG( e.what() );
}
if( cfg )
{
cfg->m_ImportGraphics.layer = m_SelLayerBox->GetLayerSelection();
cfg->m_ImportGraphics.interactive_placement = m_placementInteractive;
cfg->m_ImportGraphics.last_file = m_textCtrlFileName->GetValue();
cfg->m_ImportGraphics.dxf_line_width =
pcbIUScale.IUTomm( m_defaultLineWidth.GetValue() );
cfg->m_ImportGraphics.origin_x = pcbIUScale.IUTomm( m_xOrigin.GetValue() );
cfg->m_ImportGraphics.origin_y = pcbIUScale.IUTomm( m_yOrigin.GetValue() );
cfg->m_ImportGraphics.dxf_units = m_choiceDxfUnits->GetSelection();
}
m_importScale = EDA_UNIT_UTILS::UI::DoubleValueFromString( m_importScaleCtrl->GetValue() ); m_importScale = EDA_UNIT_UTILS::UI::DoubleValueFromString( m_importScaleCtrl->GetValue() );

View File

@ -240,6 +240,7 @@ bool ITEM::collideSimple( const ITEM* aHead, const NODE* aNode,
obs.m_item = const_cast<ITEM*>( this ); obs.m_item = const_cast<ITEM*>( this );
obs.m_clearance = clearance; obs.m_clearance = clearance;
obs.m_distFirst = 0; obs.m_distFirst = 0;
obs.m_maxFanoutWidth = 0;
aCtx->obstacles.insert( obs ); aCtx->obstacles.insert( obs );
} }
else else

View File

@ -144,9 +144,11 @@ public:
if( !via || hasNonVirtualVia ) if( !via || hasNonVirtualVia )
return false; return false;
assert ( seg1 && seg2 ); // This compiles away in release builds so we still need to check it below
// to prevent segfaults in release builds.
assert( seg1 && seg2 );
return seg1->Width() == seg2->Width(); return ( seg1 && seg2 ) ? seg1->Width() == seg2->Width() : false;
} }
} }

View File

@ -143,6 +143,10 @@ const ITEM_SET ROUTER::QueryHoverItems( const VECTOR2I& aP, bool aUseClearance )
clearance = m_sizes.Clearance() + m_sizes.DiffPairWidth() / 2; clearance = m_sizes.Clearance() + m_sizes.DiffPairWidth() / 2;
} }
PNS::ITEM_SET ret;
wxCHECK( node, ret );
if( aUseClearance ) if( aUseClearance )
{ {
NODE::OBSTACLES obs; NODE::OBSTACLES obs;
@ -155,10 +159,6 @@ const ITEM_SET ROUTER::QueryHoverItems( const VECTOR2I& aP, bool aUseClearance )
opts.m_differentNetsOnly = false; opts.m_differentNetsOnly = false;
opts.m_overrideClearance = clearance; opts.m_overrideClearance = clearance;
PNS::ITEM_SET ret;
wxCHECK( node, ret );
node->QueryColliding( &test, obs, opts ); node->QueryColliding( &test, obs, opts );
for( const OBSTACLE& obstacle : obs ) for( const OBSTACLE& obstacle : obs )

View File

@ -188,8 +188,13 @@ const WALKAROUND::RESULT WALKAROUND::Route( const LINE& aInitialPath )
if( s_cw != IN_PROGRESS && s_ccw != IN_PROGRESS ) if( s_cw != IN_PROGRESS && s_ccw != IN_PROGRESS )
break; break;
double lcw = path_cw.Line().Length() / (double)aInitialPath.CLine().Length(); double length = (double)aInitialPath.CLine().Length();
double lccw = path_ccw.Line().Length() / (double)aInitialPath.CLine().Length(); wxCHECK2( length != 0, length = 1.0 );
double lcw = path_cw.Line().Length() / length;
length = (double)aInitialPath.CLine().Length();
wxCHECK2( length != 0, length = 1.0 );
double lccw = path_ccw.Line().Length() / length;
PNS_DBG( Dbg(), Message, wxString::Format( wxT( "lcw %.1f lccw %.1f" ), lcw, lccw ) ); PNS_DBG( Dbg(), Message, wxString::Format( wxT( "lcw %.1f lccw %.1f" ), lcw, lccw ) );

View File

@ -2749,11 +2749,13 @@ int DRAWING_TOOL::DrawVia( const TOOL_EVENT& aEvent )
{ {
ROUTER_TOOL* router = m_frame->GetToolManager()->GetTool<ROUTER_TOOL>(); ROUTER_TOOL* router = m_frame->GetToolManager()->GetTool<ROUTER_TOOL>();
m_allowDRCViolations = router->Router()->Settings().AllowDRCViolations(); if( router )
m_allowDRCViolations = router->Router()->Settings().AllowDRCViolations();
try try
{ {
m_drcEngine->InitEngine( aFrame->GetDesignRulesPath() ); if( aFrame )
m_drcEngine->InitEngine( aFrame->GetDesignRulesPath() );
DRC_CONSTRAINT constraint; DRC_CONSTRAINT constraint;
@ -2788,6 +2790,8 @@ int DRAWING_TOOL::DrawVia( const TOOL_EVENT& aEvent )
KIGFX::PCB_VIEW* view = m_frame->GetCanvas()->GetView(); KIGFX::PCB_VIEW* view = m_frame->GetCanvas()->GetView();
std::vector<PCB_TRACK*> possible_tracks; std::vector<PCB_TRACK*> possible_tracks;
wxCHECK( view, nullptr );
view->Query( bbox, items ); view->Query( bbox, items );
for( const KIGFX::VIEW::LAYER_ITEM_PAIR& it : items ) for( const KIGFX::VIEW::LAYER_ITEM_PAIR& it : items )

View File

@ -263,7 +263,16 @@ int PCB_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
while( TOOL_EVENT* evt = Wait() ) while( TOOL_EVENT* evt = Wait() )
{ {
MOUSE_DRAG_ACTION dragAction = m_frame->GetDragAction(); MOUSE_DRAG_ACTION dragAction = m_frame->GetDragAction();
TRACK_DRAG_ACTION trackDragAction = m_frame->GetPcbNewSettings()->m_TrackDragAction; TRACK_DRAG_ACTION trackDragAction = TRACK_DRAG_ACTION::MOVE;
try
{
m_frame->GetPcbNewSettings()->m_TrackDragAction;
}
catch( const std::runtime_error& e )
{
wxFAIL_MSG( e.what() );
}
// on left click, a selection is made, depending on modifiers ALT, SHIFT, CTRL: // on left click, a selection is made, depending on modifiers ALT, SHIFT, CTRL:
setModifiersState( evt->Modifier( MD_SHIFT ), evt->Modifier( MD_CTRL ), setModifiersState( evt->Modifier( MD_SHIFT ), evt->Modifier( MD_CTRL ),

View File

@ -167,7 +167,17 @@ PANEL_FOOTPRINT_CHOOSER::~PANEL_FOOTPRINT_CHOOSER()
m_dbl_click_timer->Stop(); m_dbl_click_timer->Stop();
delete m_dbl_click_timer; delete m_dbl_click_timer;
if( PCBNEW_SETTINGS* cfg = Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>() ) PCBNEW_SETTINGS* cfg = nullptr;
try
{
cfg = Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>();
}
catch( const std::runtime_error& e )
{
wxFAIL_MSG( e.what() );
}
if( cfg )
{ {
// Save any changes to column widths, etc. // Save any changes to column widths, etc.
m_adapter->SaveSettings(); m_adapter->SaveSettings();