Coverity fixes and code cleaning.

This commit is contained in:
Wayne Stambaugh 2023-03-06 07:12:11 -05:00
parent 7547e550aa
commit a1fb8e1b1d
9 changed files with 153 additions and 87 deletions

View File

@ -122,6 +122,8 @@ DIALOG_LIB_TEXT_PROPERTIES::~DIALOG_LIB_TEXT_PROPERTIES()
bool DIALOG_LIB_TEXT_PROPERTIES::TransferDataToWindow()
{
wxCHECK( m_CommonUnit, false );
LIB_SYMBOL* symbol = nullptr;
if( m_graphicText )
@ -170,10 +172,11 @@ bool DIALOG_LIB_TEXT_PROPERTIES::TransferDataToWindow()
auto* tools = m_parent->GetToolManager()->GetTool<SYMBOL_EDITOR_DRAWING_TOOLS>();
symbol = m_parent->GetCurSymbol();
wxCHECK( cfg && symbol && tools, false );
m_textSize.SetValue( schIUScale.MilsToIU( cfg->m_Defaults.text_size ) );
m_CommonUnit->SetValue(
symbol && symbol->GetUnitCount() > 1 && !tools->GetDrawSpecificUnit() );
m_CommonUnit->SetValue( symbol->GetUnitCount() > 1 && !tools->GetDrawSpecificUnit() );
m_CommonConvert->SetValue( !tools->GetDrawSpecificConvert() );
if( tools->GetLastTextAngle().IsHorizontal() )

View File

@ -1990,19 +1990,19 @@ void SCH_EDIT_FRAME::UpdateItem( EDA_ITEM* aItem, bool isAddOrDelete, bool aUpda
void SCH_EDIT_FRAME::DisplayCurrentSheet()
{
wxCHECK( m_toolManager, /* void */ );
m_toolManager->RunAction( ACTIONS::cancelInteractive, true );
m_toolManager->RunAction( EE_ACTIONS::clearSelection, true );
SCH_SCREEN* screen = GetCurrentSheet().LastScreen();
wxASSERT( screen );
wxCHECK( screen, /* void */ );
if( m_toolManager )
m_toolManager->RunAction( EE_ACTIONS::clearSelection, true );
m_toolManager->RunAction( EE_ACTIONS::clearSelection, true );
SCH_BASE_FRAME::SetScreen( screen );
if( m_toolManager )
m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD );
m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD );
// update the References
GetCurrentSheet().UpdateAllScreenReferences();
@ -2011,6 +2011,8 @@ void SCH_EDIT_FRAME::DisplayCurrentSheet()
EE_SELECTION_TOOL* selectionTool = m_toolManager->GetTool<EE_SELECTION_TOOL>();
wxCHECK( selectionTool, /* void */ );
auto visit =
[&]( EDA_ITEM* item )
{
@ -2058,6 +2060,9 @@ void SCH_EDIT_FRAME::DisplayCurrentSheet()
m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD );
SCH_EDITOR_CONTROL* editTool = m_toolManager->GetTool<SCH_EDITOR_CONTROL>();
wxCHECK( editTool, /* void */ );
TOOL_EVENT dummy;
editTool->UpdateNetHighlighting( dummy );

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2019 CERN
* Copyright (C) 2019-2021 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2019-2023 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -192,6 +192,7 @@ void SCH_MOVE_TOOL::orthoLineDrag( SCH_LINE* line, const VECTOR2I& splitDelta, i
// start point to be attached to the unselected end of our drag line).
//
// Also, new lines are added already so they'll be in the undo list, skip adding them.
if( !foundLine->HasFlag( IS_CHANGED ) && !foundLine->HasFlag( IS_NEW ) )
{
saveCopyInUndoList( (SCH_ITEM*) foundLine, UNDO_REDO::CHANGED, true );
@ -207,7 +208,6 @@ void SCH_MOVE_TOOL::orthoLineDrag( SCH_LINE* line, const VECTOR2I& splitDelta, i
updateItem( foundLine, true );
SCH_LINE* bendLine = nullptr;
if( m_lineConnectionCache.count( foundLine ) == 1
@ -362,16 +362,22 @@ int SCH_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
m_anchorPos.reset();
if( aEvent.IsAction( &EE_ACTIONS::move ) )
{
m_isDrag = false;
}
else if( aEvent.IsAction( &EE_ACTIONS::drag ) )
{
m_isDrag = true;
isSlice = aEvent.Parameter<bool>();
}
else if( aEvent.IsAction( &EE_ACTIONS::moveActivate ) )
{
m_isDrag = !cfg->m_Input.drag_is_move;
}
else
{
return 0;
}
if( m_moveInProgress )
{
@ -383,7 +389,17 @@ int SCH_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
{
// Reset the selected items so we can start again with the current m_isDrag
// state.
m_frame->RollbackSchematicFromUndo();
try
{
m_frame->RollbackSchematicFromUndo();
}
catch( const IO_ERROR& exc )
{
wxLogWarning( wxS( "Exception \"%s\" rolling back schematic undo ocurred." ),
exc.What() );
return 1;
}
m_selectionTool->RemoveItemsFromSel( &m_dragAdditions, QUIET_MODE );
m_anchorPos = m_cursor - m_moveOffset;
m_moveInProgress = false;
@ -417,6 +433,7 @@ int SCH_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
std::vector<DANGLING_END_ITEM> internalPoints;
Activate();
// Must be done after Activate() so that it gets set into the correct context
controls->ShowCursor( true );
@ -971,7 +988,8 @@ void SCH_MOVE_TOOL::trimDanglingLines()
// Delete newly dangling lines:
// Find split segments (one segment is new, the other is changed) that
// we aren't dragging and don't have selected
if( aChangedItem->HasFlag( IS_BROKEN) && aChangedItem->IsDangling() && !aChangedItem->IsSelected() )
if( aChangedItem->HasFlag( IS_BROKEN) && aChangedItem->IsDangling()
&& !aChangedItem->IsSelected() )
{
danglers.insert( aChangedItem );
}

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2019 CERN
* Copyright (C) 2019-2022 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2019-2023 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -22,6 +22,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <fmt/format.h>
#include <tool/tool_manager.h>
#include <tool/picker_tool.h>
#include <drawing_sheet/ds_data_item.h>
@ -131,7 +133,18 @@ int PL_EDIT_TOOL::Main( const TOOL_EVENT& aEvent )
VECTOR2I prevPos;
if( !selection.Front()->IsNew() )
m_frame->SaveCopyInUndoList();
{
try
{
m_frame->SaveCopyInUndoList();
}
catch( const fmt::v9::format_error& exc )
{
wxLogWarning( wxS( "Exception \"%s\" serializing string ocurred." ),
exc.what() );
return 1;
}
}
// Main loop: keep receiving events
do

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2019 CERN
* Copyright (C) 2019-2021 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2019-2023 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -25,6 +25,8 @@
#include <functional>
using namespace std::placeholders;
#include <fmt/format.h>
#include <tool/tool_manager.h>
#include <tool/actions.h>
#include <view/view_controls.h>
@ -45,11 +47,13 @@ enum RECTANGLE_POINTS
RECT_TOPLEFT, RECT_TOPRIGHT, RECT_BOTLEFT, RECT_BOTRIGHT
};
enum LINE_POINTS
{
LINE_START, LINE_END
};
class EDIT_POINTS_FACTORY
{
public:
@ -188,7 +192,17 @@ int PL_POINT_EDITOR::Main( const TOOL_EVENT& aEvent )
{
if( !inDrag )
{
m_frame->SaveCopyInUndoList();
try
{
m_frame->SaveCopyInUndoList();
}
catch( const fmt::v9::format_error& exc )
{
wxLogWarning( wxS( "Exception \"%s\" serializing string ocurred." ),
exc.what() );
return 1;
}
controls->ForceCursorPosition( false );
inDrag = true;
modified = true;
@ -215,14 +229,17 @@ int PL_POINT_EDITOR::Main( const TOOL_EVENT& aEvent )
modified = false;
}
else if( evt->IsCancelInteractive() )
{
break;
}
if( evt->IsActivate() && !evt->IsMoveTool() )
break;
}
else
{
evt->SetPassEvent();
}
controls->SetAutoPan( inDrag );
controls->CaptureCursor( inDrag );

View File

@ -1,7 +1,7 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004-2022 KiCad Developers.
* Copyright (C) 2004-2023 KiCad Developers.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@ -497,7 +497,9 @@ bool test::DRC_TEST_PROVIDER_DIFF_PAIR_COUPLING::Run()
{
for( DIFF_PAIR_COUPLED_SEGMENTS& dp : itemSet.coupled )
{
if( ( dp.couplingFailMin || dp.couplingFailMax ) && ( dp.parentP || dp.parentN ) )
wxCHECK2( dp.parentP && dp.parentN, continue );
if( ( dp.couplingFailMin || dp.couplingFailMax ) )
{
// We have a candidate violation, now we need to re-query for a constraint
// given the actual items, because there may be a location-based rule in play.

View File

@ -101,6 +101,7 @@ PCB_VIA::PCB_VIA( const PCB_VIA& aOther ) :
PCB_VIA::operator=( aOther );
const_cast<KIID&>( m_Uuid ) = aOther.m_Uuid;
m_zoneLayerOverrides = aOther.m_zoneLayerOverrides;
}
@ -142,9 +143,7 @@ wxString PCB_VIA::GetItemDescription( UNITS_PROVIDER* aUnitsProvider ) const
default: formatStr = _( "Via %s on %s" ); break;
}
return wxString::Format( formatStr,
GetNetnameMsg(),
layerMaskDescribe() );
return wxString::Format( formatStr, GetNetnameMsg(), layerMaskDescribe() );
}
@ -437,7 +436,6 @@ void PCB_VIA::Flip( const VECTOR2I& aCentre, bool aFlipLeftRight )
}
// see class_track.h
INSPECT_RESULT PCB_TRACK::Visit( INSPECTOR inspector, void* testData,
const std::vector<KICAD_T>& aScanTypes )
{
@ -1137,12 +1135,14 @@ VECTOR2I PCB_ARC::GetPosition() const
return center;
}
double PCB_ARC::GetRadius() const
{
auto center = CalcArcCenter( m_Start, m_Mid , m_End );
return GetLineLength( center, m_Start );
}
EDA_ANGLE PCB_ARC::GetAngle() const
{
VECTOR2I center = GetPosition();
@ -1152,12 +1152,14 @@ EDA_ANGLE PCB_ARC::GetAngle() const
return angle1.Normalize180() + angle2.Normalize180();
}
EDA_ANGLE PCB_ARC::GetArcAngleStart() const
{
EDA_ANGLE angleStart( m_Start - GetPosition() );
return angleStart.Normalize();
}
EDA_ANGLE PCB_ARC::GetArcAngleEnd() const
{
EDA_ANGLE angleEnd( m_End - GetPosition() );

View File

@ -59,14 +59,13 @@ enum ENDPOINT_T : int
ENDPOINT_END = 1
};
// Via types
// Note that this enum must be synchronized to GAL_LAYER_ID
enum class VIATYPE : int
{
THROUGH = 3, /* Always a through hole via */
BLIND_BURIED = 2, /* this via can be on internal layers */
MICROVIA = 1, /* this via which connect from an external layer
* to the near neighbor internal layer */
* to the near neighbor internal layer */
NOT_DEFINED = 0 /* not yet used */
};
@ -132,22 +131,22 @@ public:
const BOX2I GetBoundingBox() const override;
/**
* Function GetLength
* returns the length of the track using the hypotenuse calculation.
* @return double - the length of the track
* Get the length of the track using the hypotenuse calculation.
*
* @return the length of the track.
*/
virtual double GetLength() const;
/**
* Function TransformShapeToPolygon
* Convert the track shape to a closed polygon
* Used in filling zones calculations
* Circles (vias) and arcs (ends of tracks) are approximated by segments
* @param aBuffer = a buffer to store the polygon
* @param aClearance = the clearance around the pad
* @param aError = the maximum deviation from true circle
* @param ignoreLineWidth = used for edge cut items where the line width is only for
* visualization
* Convert the track shape to a closed polygon.
*
* Circles (vias) and arcs (ends of tracks) are approximated by segments.
*
* @param aBuffer is a buffer to store the polygon
* @param aClearance is the clearance around the pad
* @param aError is the maximum deviation from true circle
* @param ignoreLineWidth is used for edge cut items where the line width is only for
* visualization
*/
void TransformShapeToPolygon( SHAPE_POLY_SET& aBuffer, PCB_LAYER_ID aLayer, int aClearance,
int aError, ERROR_LOC aErrorLoc,
@ -158,17 +157,16 @@ public:
FLASHING aFlash = FLASHING::DEFAULT ) const override;
/**
* Function IsPointOnEnds
* returns STARTPOINT if point if near (dist = min_dist) start point, ENDPOINT if
* Return STARTPOINT if point if near (dist = min_dist) start point, ENDPOINT if
* point if near (dist = min_dist) end point,STARTPOINT|ENDPOINT if point if near
* (dist = min_dist) both ends, or 0 if none of the above.
* if min_dist < 0: min_dist = track_width/2
*
* If min_dist < 0: min_dist = track_width/2
*/
EDA_ITEM_FLAGS IsPointOnEnds( const VECTOR2I& point, int min_dist = 0 ) const;
/**
* Function IsNull
* returns true if segment length is zero.
* Return true if segment length is zero.
*/
bool IsNull() const
{
@ -192,8 +190,8 @@ public:
}
/**
* Function GetLocalClearance
* returns any local clearance overrides set in the "classic" (ie: pre-rule) system.
* Return any local clearance overrides set in the "classic" (ie: pre-rule) system.
*
* @param aSource [out] optionally reports the source as a user-readable string
* @return int - the clearance in internal units.
*/
@ -222,7 +220,8 @@ public:
}
/**
* Get last used LOD for the track net name
* Get last used LOD for the track net name.
*
* @return LOD from ViewGetLOD()
*/
double GetCachedLOD()
@ -231,8 +230,9 @@ public:
}
/**
* Set the cached LOD
* @param aLOD value from ViewGetLOD() or 0.0 to always display
* Set the cached LOD.
*
* @param aLOD value from ViewGetLOD() or 0.0 to always display.
*/
void SetCachedLOD( double aLOD )
{
@ -240,7 +240,8 @@ public:
}
/**
* Get last used zoom scale for the track net name
* Get last used zoom scale for the track net name.
*
* @return scale from GetScale()
*/
double GetCachedScale()
@ -249,7 +250,8 @@ public:
}
/**
* Set the cached scale
* Set the cached scale.
*
* @param aScale value from GetScale()
*/
void SetCachedScale( double aScale )
@ -269,7 +271,8 @@ public:
protected:
virtual void swapData( BOARD_ITEM* aImage ) override;
void GetMsgPanelInfoBase_Common( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) const;
void GetMsgPanelInfoBase_Common( EDA_DRAW_FRAME* aFrame,
std::vector<MSG_PANEL_ITEM>& aList ) const;
protected:
int m_Width; ///< Thickness of track, or via diameter
@ -277,7 +280,8 @@ protected:
VECTOR2I m_End; ///< Line end point
double m_CachedLOD; ///< Last LOD used to draw this track's net
double m_CachedScale; ///< Last zoom scale used to draw this track's net (we want to redraw when changing zoom)
double m_CachedScale; ///< Last zoom scale used to draw this track's net.
};
@ -327,7 +331,8 @@ public:
EDA_ANGLE GetArcAngleEnd() const;
virtual bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
virtual bool HitTest( const BOX2I& aRect, bool aContained = true, int aAccuracy = 0 ) const override;
virtual bool HitTest( const BOX2I& aRect, bool aContained = true,
int aAccuracy = 0 ) const override;
bool IsCCW() const;
@ -341,8 +346,8 @@ public:
FLASHING aFlash = FLASHING::DEFAULT ) const override;
/**
* Function GetLength
* returns the length of the arc track
* Return the length of the arc track.
*
* @return double - the length of the track
*/
virtual double GetLength() const override
@ -410,10 +415,10 @@ public:
virtual void SetLayerSet( LSET aLayers ) override;
/**
* Function SetLayerPair
* For a via m_layer contains the top layer, the other layer is in m_bottomLayer
* @param aTopLayer = first layer connected by the via
* @param aBottomLayer = last layer connected by the via
* For a via m_layer contains the top layer, the other layer is in m_bottomLayer/
*
* @param aTopLayer is the first layer connected by the via.
* @param aBottomLayer is last layer connected by the via.
*/
void SetLayerPair( PCB_LAYER_ID aTopLayer, PCB_LAYER_ID aBottomLayer );
@ -421,11 +426,11 @@ public:
void SetTopLayer( PCB_LAYER_ID aLayer );
/**
* Function LayerPair
* Return the 2 layers used by the via (the via actually uses
* all layers between these 2 layers)
* @param top_layer = pointer to the first layer (can be null)
* @param bottom_layer = pointer to the last layer (can be null)
* Return the 2 layers used by the via (the via actually uses all layers between these
* 2 layers)
*
* @param[out] top_layer is storage for the first layer of the via (can be null).
* @param[out] bottom_layer is storage for the last layer of the via(can be null).
*/
void LayerPair( PCB_LAYER_ID* top_layer, PCB_LAYER_ID* bottom_layer ) const;
@ -433,8 +438,7 @@ public:
PCB_LAYER_ID BottomLayer() const;
/**
* Function SanitizeLayers
* Check so that the layers are correct dependin on the type of via, and
* Check so that the layers are correct depending on the type of via, and
* so that the top actually is on top.
*/
void SanitizeLayers();
@ -495,59 +499,61 @@ public:
}
/**
* Checks to see whether the via should have a pad on the specific layer
* Check to see whether the via should have a pad on the specific layer.
*
* @param aLayer Layer to check for connectivity
* @return true if connected by pad or track (or optionally zone)
*/
bool FlashLayer( int aLayer ) const;
/**
* Checks to see if the via is present on any of the layers in the set
* @param aLayers set of layers to check the via against
* @return true if connected by pad or track (or optionally zone) on any of the associated layers
* Check to see if the via is present on any of the layers in the set.
*
* @param aLayers is the set of layers to check the via against.
* @return true if connected by pad or track (or optionally zone) on any of the associated
* layers.
*/
bool FlashLayer( LSET aLayers ) const;
/**
* Function SetDrill
* sets the drill value for vias.
* Set the drill value for vias.
*
* @param aDrill is the new drill diameter
*/
*/
void SetDrill( int aDrill ) { m_drill = aDrill; }
/**
* Function GetDrill
* returns the local drill setting for this PCB_VIA. If you want the calculated value,
* use GetDrillValue() instead.
* Return the local drill setting for this PCB_VIA.
*
* @note Use GetDrillValue() to get the calculated value.
*/
int GetDrill() const { return m_drill; }
/**
* Function GetDrillValue
* "calculates" the drill value for vias (m-Drill if > 0, or default
* drill value for the board.
* @return real drill_value
*/
* Calculate the drill value for vias (m-Drill if > 0, or default drill value for the board.
*
* @return the calculated drill value.
*/
int GetDrillValue() const;
/**
* Function SetDrillDefault
* sets the drill value for vias to the default value #UNDEFINED_DRILL_DIAMETER.
*/
* Set the drill value for vias to the default value #UNDEFINED_DRILL_DIAMETER.
*/
void SetDrillDefault() { m_drill = UNDEFINED_DRILL_DIAMETER; }
/**
* Checks if the via is a free via (as opposed to one created on a track by the router).
* Check if the via is a free via (as opposed to one created on a track by the router).
*
* Free vias don't have their nets automatically updated by the connectivity algorithm.
*
* @return true if the via is a free via
*/
bool GetIsFree() const { return m_isFree; }
void SetIsFree( bool aFree = true ) { m_isFree = aFree; }
/**
* Function IsDrillDefault
* @return true if the drill value is default value (-1)
*/
*/
bool IsDrillDefault() const { return m_drill <= 0; }
// @copydoc BOARD_ITEM::GetEffectiveShape
@ -555,7 +561,7 @@ public:
FLASHING aFlash = FLASHING::DEFAULT ) const override;
void ClearZoneLayerOverrides()
{
{
m_zoneLayerOverrides.fill( ZLO_NONE );
}

View File

@ -248,7 +248,7 @@ bool PNS_PCBNEW_RULE_RESOLVER::IsNetTieExclusion( const PNS::ITEM* aItem,
return true;
}
if( drcEngine && collidingItem )
if( drcEngine )
{
return drcEngine->IsNetTieExclusion( aItem->Net(), ToLAYER_ID( aItem->Layer() ),
aCollisionPos, collidingItem );