Eeschema header housekeeping round 1.

This commit is contained in:
Wayne Stambaugh 2021-03-25 10:07:16 -04:00
parent 7593ee3917
commit a85898f904
20 changed files with 583 additions and 593 deletions

View File

@ -3,7 +3,7 @@
*
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2008 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 2004-2019 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2021 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
@ -79,16 +79,11 @@ enum class SCH_LIB_TYPE
LT_EESCHEMA,
LT_SYMBOL
};
// Helper class to filter a list of libraries, and/or a list of PART_LIB
// in dialogs
class SCHLIB_FILTER
{
wxArrayString m_allowedLibs; ///< a list of lib names to list some libraries
///< if empty: no filter
bool m_filterPowerParts; ///< true to filter (show only) power parts
bool m_forceLoad; // When true, load a part lib from the lib
// which is given in m_allowedLibs[0]
public:
SCHLIB_FILTER()
{
@ -159,6 +154,13 @@ public:
else
return dummy;
}
private:
wxArrayString m_allowedLibs; ///< a list of lib names to list some libraries
///< if empty: no filter
bool m_filterPowerParts; ///< true to filter (show only) power parts
bool m_forceLoad; // When true, load a part lib from the lib
// which is given in m_allowedLibs[0]
};
@ -307,19 +309,6 @@ public:
*/
class PART_LIB
{
SCH_LIB_TYPE type; ///< Library type indicator.
wxFileName fileName; ///< Library file name.
wxDateTime timeStamp; ///< Library save time and date.
int versionMajor; ///< Library major version number.
int versionMinor; ///< Library minor version number.
wxString header; ///< first line of loaded library.
bool isModified; ///< Library modification status.
int m_mod_hash; ///< incremented each time library is changed.
SCH_IO_MGR::SCH_FILE_T m_pluginType;
std::unique_ptr< SCH_PLUGIN > m_plugin;
std::unique_ptr< PROPERTIES > m_properties; ///< Library properties
public:
PART_LIB( SCH_LIB_TYPE aType, const wxString& aFileName,
SCH_IO_MGR::SCH_FILE_T aPluginType = SCH_IO_MGR::SCH_LEGACY );
@ -456,6 +445,20 @@ public:
* @throw IO_ERROR if there's any problem loading the library.
*/
static PART_LIB* LoadLibrary( const wxString& aFileName );
private:
SCH_LIB_TYPE type; ///< Library type indicator.
wxFileName fileName; ///< Library file name.
wxDateTime timeStamp; ///< Library save time and date.
int versionMajor; ///< Library major version number.
int versionMinor; ///< Library minor version number.
wxString header; ///< first line of loaded library.
bool isModified; ///< Library modification status.
int m_mod_hash; ///< incremented each time library is changed.
SCH_IO_MGR::SCH_FILE_T m_pluginType;
std::unique_ptr< SCH_PLUGIN > m_plugin;
std::unique_ptr< PROPERTIES > m_properties; ///< Library properties
};

View File

@ -2,6 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2018 CERN
* Copyright (C) 2021 KiCad Developers, see AUTHORS.txt for contributors.
* @author Jon Evans <jon@craftyjon.com>
*
* This program is free software; you can redistribute it and/or
@ -148,6 +149,10 @@ public:
return PRIORITY::NONE;
}
private:
wxString driverName( SCH_ITEM* aItem ) const;
public:
CONNECTION_GRAPH* m_graph;
bool m_dirty;
@ -229,10 +234,6 @@ public:
/// Used for multiple drivers ERC message; stores the second possible driver (or nullptr)
SCH_ITEM* m_second_driver;
private:
wxString driverName( SCH_ITEM* aItem ) const;
};
/// Associates a net code with the final name of a net
@ -323,52 +324,7 @@ public:
CONNECTION_SUBGRAPH* GetSubgraphForItem( SCH_ITEM* aItem );
// TODO(JE) Remove this when pressure valve is removed
static bool m_allowRealTime;
private:
// All the sheets in the schematic (as long as we don't have partial updates)
SCH_SHEET_LIST m_sheetList;
// All connectable items in the schematic
std::vector<SCH_ITEM*> m_items;
// The owner of all CONNECTION_SUBGRAPH objects
std::vector<CONNECTION_SUBGRAPH*> m_subgraphs;
// Cache of a subset of m_subgraphs
std::vector<CONNECTION_SUBGRAPH*> m_driver_subgraphs;
// Cache to lookup subgraphs in m_driver_subgraphs by sheet path
std::unordered_map<SCH_SHEET_PATH, std::vector<CONNECTION_SUBGRAPH*>> m_sheet_to_subgraphs_map;
std::vector<std::pair<SCH_SHEET_PATH, SCH_PIN*>> m_invisible_power_pins;
std::unordered_map< wxString, std::shared_ptr<BUS_ALIAS> > m_bus_alias_cache;
std::map<wxString, int> m_net_name_to_code_map;
std::map<wxString, int> m_bus_name_to_code_map;
std::map<wxString, std::vector<const CONNECTION_SUBGRAPH*>> m_global_label_cache;
std::map< std::pair<SCH_SHEET_PATH, wxString>,
std::vector<const CONNECTION_SUBGRAPH*> > m_local_label_cache;
std::unordered_map<wxString, std::vector<CONNECTION_SUBGRAPH*>> m_net_name_to_subgraphs_map;
std::map<SCH_ITEM*, CONNECTION_SUBGRAPH*> m_item_to_subgraph_map;
NET_MAP m_net_code_to_subgraphs_map;
int m_last_net_code;
int m_last_bus_code;
int m_last_subgraph_code;
SCHEMATIC* m_schematic; ///< The schematic this graph represents
/**
* Updates the graphical connectivity between items (i.e. where they touch)
* The items passed in must be on the same sheet.
@ -547,6 +503,52 @@ private:
*/
int ercCheckHierSheets();
public:
// TODO(JE) Remove this when pressure valve is removed
static bool m_allowRealTime;
private:
// All the sheets in the schematic (as long as we don't have partial updates)
SCH_SHEET_LIST m_sheetList;
// All connectable items in the schematic
std::vector<SCH_ITEM*> m_items;
// The owner of all CONNECTION_SUBGRAPH objects
std::vector<CONNECTION_SUBGRAPH*> m_subgraphs;
// Cache of a subset of m_subgraphs
std::vector<CONNECTION_SUBGRAPH*> m_driver_subgraphs;
// Cache to lookup subgraphs in m_driver_subgraphs by sheet path
std::unordered_map<SCH_SHEET_PATH, std::vector<CONNECTION_SUBGRAPH*>> m_sheet_to_subgraphs_map;
std::vector<std::pair<SCH_SHEET_PATH, SCH_PIN*>> m_invisible_power_pins;
std::unordered_map< wxString, std::shared_ptr<BUS_ALIAS> > m_bus_alias_cache;
std::map<wxString, int> m_net_name_to_code_map;
std::map<wxString, int> m_bus_name_to_code_map;
std::map<wxString, std::vector<const CONNECTION_SUBGRAPH*>> m_global_label_cache;
std::map< std::pair<SCH_SHEET_PATH, wxString>,
std::vector<const CONNECTION_SUBGRAPH*> > m_local_label_cache;
std::unordered_map<wxString, std::vector<CONNECTION_SUBGRAPH*>> m_net_name_to_subgraphs_map;
std::map<SCH_ITEM*, CONNECTION_SUBGRAPH*> m_item_to_subgraph_map;
NET_MAP m_net_code_to_subgraphs_map;
int m_last_net_code;
int m_last_bus_code;
int m_last_subgraph_code;
SCHEMATIC* m_schematic; ///< The schematic this graph represents
};
#endif

View File

@ -1,7 +1,7 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2020-2021 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
@ -33,7 +33,6 @@ using KIGFX::COLOR4D;
class EESCHEMA_SETTINGS : public APP_SETTINGS_BASE
{
public:
struct APPEARANCE
{
wxString edit_component_visible_columns;
@ -205,6 +204,18 @@ public:
static std::vector<BOM_PLUGIN_SETTINGS> DefaultBomPlugins();
protected:
virtual std::string getLegacyFrameName() const override { return "SchematicFrame"; }
private:
bool migrateBomSettings();
nlohmann::json bomSettingsToJson() const;
static std::vector<BOM_PLUGIN_SETTINGS> bomSettingsFromJson( const nlohmann::json& aObj );
public:
APPEARANCE m_Appearance;
AUTOPLACE_FIELDS m_AutoplaceFields;
@ -236,18 +247,6 @@ public:
bool m_RescueNeverShow;
wxString m_lastSymbolLibDir;
protected:
virtual std::string getLegacyFrameName() const override { return "SchematicFrame"; }
private:
bool migrateBomSettings();
nlohmann::json bomSettingsToJson() const;
static std::vector<BOM_PLUGIN_SETTINGS> bomSettingsFromJson( const nlohmann::json& aObj );
};

View File

@ -3,7 +3,7 @@
*
* Copyright (C) 2004 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2008 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 2004-2019 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2004-2021 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
@ -45,14 +45,6 @@ class HIERARCHY_NAVIG_DLG;
*/
class HIERARCHY_TREE : public wxTreeCtrl
{
// Need to use wxRTTI macros in order for OnCompareItems to work properly
// See: https://docs.wxwidgets.org/3.1/classwx_tree_ctrl.html#ab90a465793c291ca7aa827a576b7d146
wxDECLARE_ABSTRACT_CLASS( HIERARCHY_TREE );
private:
HIERARCHY_NAVIG_DLG* m_parent;
wxImageList* imageList;
public:
HIERARCHY_TREE( HIERARCHY_NAVIG_DLG* parent );
@ -60,17 +52,18 @@ public:
void onChar( wxKeyEvent& event );
int OnCompareItems( const wxTreeItemId& item1, const wxTreeItemId& item2 ) override;
private:
// Need to use wxRTTI macros in order for OnCompareItems to work properly
// See: https://docs.wxwidgets.org/3.1/classwx_tree_ctrl.html#ab90a465793c291ca7aa827a576b7d146
wxDECLARE_ABSTRACT_CLASS( HIERARCHY_TREE );
HIERARCHY_NAVIG_DLG* m_parent;
wxImageList* imageList;
};
class HIERARCHY_NAVIG_DLG : public DIALOG_SHIM
{
private:
SCH_SHEET_PATH m_currSheet;
SCH_SHEET_PATH m_list;
SCH_EDIT_FRAME* m_SchFrameEditor;
HIERARCHY_TREE* m_Tree;
int m_nbsheets;
public:
HIERARCHY_NAVIG_DLG( SCH_EDIT_FRAME* aParent );
@ -87,9 +80,10 @@ private:
/**
* Create the hierarchical tree of the schematic.
*
* This routine is reentrant!
* @param aList = the SCH_SHEET_PATH* list to explore
* @param aPreviousmenu = the wxTreeItemId used as parent to add sub items
* @warning This routine is reentrant!
*
* @param[in] aList is the #SCH_SHEET_PATH list to explore.
* @param aPreviousmenu is the wxTreeItemId used as parent to add sub items.
*/
void buildHierarchyTree( SCH_SHEET_PATH* aList, wxTreeItemId* aPreviousmenu );
@ -100,18 +94,20 @@ private:
void onSelectSheetPath( wxTreeEvent& event );
/**
* getRootString
* @return String with page number in parenthesis
*/
wxString getRootString();
/**
* formatPageString
* @param aName
* @param aPage
* @return String with page number in parenthesis
*/
wxString formatPageString( wxString aName, wxString aPage );
SCH_SHEET_PATH m_currSheet;
SCH_SHEET_PATH m_list;
SCH_EDIT_FRAME* m_SchFrameEditor;
HIERARCHY_TREE* m_Tree;
int m_nbsheets;
};
#endif // HIERARCH_H

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2004-2020 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2021 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2019 CERN
*
* This program is free software; you can redistribute it and/or
@ -34,25 +34,6 @@ class TRANSFORM;
class LIB_ARC : public LIB_ITEM
{
enum SELECT_T // When creating an arc: status of arc
{
ARC_STATUS_START,
ARC_STATUS_END,
ARC_STATUS_OUTLINE,
};
int m_Radius;
int m_t1; // First radius angle of the arc in 0.1 degrees.
int m_t2; /* Second radius angle of the arc in 0.1 degrees. */
wxPoint m_ArcStart;
wxPoint m_ArcEnd; /* Arc end position. */
wxPoint m_Pos; /* Radius center point. */
int m_Width; /* Line width */
int m_editState;
void print( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset, void* aData,
const TRANSFORM& aTransform ) override;
public:
LIB_ARC( LIB_PART * aParent );
@ -137,6 +118,8 @@ public:
EDA_ITEM* Clone() const override;
private:
void print( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset, void* aData,
const TRANSFORM& aTransform ) override;
/**
* @copydoc LIB_ITEM::compare()
@ -149,6 +132,22 @@ private:
*/
int compare( const LIB_ITEM& aOther,
LIB_ITEM::COMPARE_FLAGS aCompareFlags = LIB_ITEM::COMPARE_FLAGS::NORMAL ) const override;
enum SELECT_T // When creating an arc: status of arc
{
ARC_STATUS_START,
ARC_STATUS_END,
ARC_STATUS_OUTLINE,
};
int m_Radius;
int m_t1; // First radius angle of the arc in 0.1 degrees.
int m_t2; /* Second radius angle of the arc in 0.1 degrees. */
wxPoint m_ArcStart;
wxPoint m_ArcEnd; /* Arc end position. */
wxPoint m_Pos; /* Radius center point. */
int m_Width; /* Line width */
int m_editState;
};

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2004-2020 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2021 KiCad Developers, see change_log.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
@ -33,10 +33,6 @@
*/
class LIB_BEZIER : public LIB_ITEM
{
int m_Width; // Line width
std::vector<wxPoint> m_BezierPoints; // list of parameter (3|4)
std::vector<wxPoint> m_PolyPoints; // list of points (>= 2)
public:
LIB_BEZIER( LIB_PART * aParent );
@ -105,6 +101,10 @@ private:
void print( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset,
void* aData, const TRANSFORM& aTransform ) override;
int m_Width; // Line width
std::vector<wxPoint> m_BezierPoints; // list of parameter (3|4)
std::vector<wxPoint> m_PolyPoints; // list of points (>= 2)
};

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2004-2020 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2021 KiCad Developers, see change_log.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
@ -32,10 +32,6 @@
class LIB_CIRCLE : public LIB_ITEM
{
wxPoint m_Pos; // Position or centre (Arc and Circle) or start point (segments).
wxPoint m_EndPos; // A point on the circumference of the circle.
int m_Width; // Line width.
public:
LIB_CIRCLE( LIB_PART * aParent );
@ -107,6 +103,10 @@ private:
void print( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset, void* aData,
const TRANSFORM& aTransform ) override;
wxPoint m_Pos; // Position or centre (Arc and Circle) or start point (segments).
wxPoint m_EndPos; // A point on the circumference of the circle.
int m_Width; // Line width.
};

View File

@ -61,8 +61,6 @@ typedef std::vector< LIB_PIN* > LIB_PINS;
*/
class LIB_ITEM : public EDA_ITEM
{
friend class LIB_PART;
public:
LIB_ITEM( KICAD_T aType, LIB_PART* aComponent = NULL, int aUnit = 0, int aConvert = 0,
FILL_TYPE aFillType = FILL_TYPE::NO_FILL );
@ -120,7 +118,7 @@ public:
virtual void EndEdit() {}
/**
* Calculates the attributes of an item at \a aPosition when it is being edited.
* Calculate the attributes of an item at \a aPosition when it is being edited.
*
* This method gets called by the Draw() method when the item is being edited. This
* probably should be a pure virtual method but bezier curves are not yet editable in
@ -306,6 +304,9 @@ protected:
virtual void print( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset, void* aData,
const TRANSFORM& aTransform ) = 0;
private:
friend class LIB_PART;
protected:
/**
* Unit identification for multiple parts per package. Set to 0 if the item is common

View File

@ -3,7 +3,7 @@
*
* Copyright (C) 2015 Jean-Pierre Charras, jaen-pierre.charras at wanadoo.fr
* Copyright (C) 2015 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 2004-2021 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2021 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
@ -62,54 +62,6 @@ public:
ELECTRICAL_PINTYPE m_Type; // Electrical type of the pin.
};
protected:
wxPoint m_position; // Position of the pin.
int m_length; // Length of the pin.
int m_orientation; // Pin orientation (Up, Down, Left, Right)
GRAPHIC_PINSHAPE m_shape; // Shape drawn around pin
ELECTRICAL_PINTYPE m_type; // Electrical type of the pin.
int m_attributes; // Set bit 0 to indicate pin is invisible.
wxString m_name;
wxString m_number;
int m_numTextSize; // Pin num and Pin name sizes
int m_nameTextSize;
std::map<wxString, ALT> m_alternates; // Map of alternate name to ALT structure
protected:
/**
* Print the pin symbol without text.
* If \a aColor != 0, draw with \a aColor, else with the normal pin color.
*/
void printPinSymbol( const RENDER_SETTINGS* aSettings, const wxPoint& aPos, int aOrientation );
/**
* Put the pin number and pin text info, given the pin line coordinates.
* The line must be vertical or horizontal.
* If aDrawPinName == false the pin name is not printed.
* If aDrawPinNum = false the pin number is not printed.
* If aTextInside then the text is been put inside,otherwise all is drawn outside.
* Pin Name: substring between '~' is negated
*/
void printPinTexts( const RENDER_SETTINGS* aSettings, wxPoint& aPinPos, int aPinOrient,
int aTextInside, bool aDrawPinNum, bool aDrawPinName );
/**
* Draw the electrical type text of the pin (only for the footprint editor)
*/
void printPinElectricalTypeName( const RENDER_SETTINGS* aSettings, wxPoint& aPosition,
int aOrientation );
public:
/**
* return a string giving the electrical type of a pin.
* Can be used when a known, not translated name is needed (for instance in net lists)
* @param aType is the electrical type (see enum ELECTRICAL_PINTYPE )
* @return The electrical name for a pin type (see enun MsgPinElectricType for names).
*/
static const wxString GetCanonicalElectricalTypeName( ELECTRICAL_PINTYPE aType );
public:
~LIB_PIN() { }
wxString GetClass() const override
@ -277,6 +229,40 @@ public:
void CalcEdit( const wxPoint& aPosition ) override;
/**
* Return a string giving the electrical type of a pin.
*
* Can be used when a known, not translated name is needed (for instance in net lists)
*
* @param aType is the electrical type (see enum ELECTRICAL_PINTYPE )
* @return The electrical name for a pin type (see enun MsgPinElectricType for names).
*/
static const wxString GetCanonicalElectricalTypeName( ELECTRICAL_PINTYPE aType );
protected:
/**
* Print the pin symbol without text.
* If \a aColor != 0, draw with \a aColor, else with the normal pin color.
*/
void printPinSymbol( const RENDER_SETTINGS* aSettings, const wxPoint& aPos, int aOrientation );
/**
* Put the pin number and pin text info, given the pin line coordinates.
* The line must be vertical or horizontal.
* If aDrawPinName == false the pin name is not printed.
* If aDrawPinNum = false the pin number is not printed.
* If aTextInside then the text is been put inside,otherwise all is drawn outside.
* Pin Name: substring between '~' is negated
*/
void printPinTexts( const RENDER_SETTINGS* aSettings, wxPoint& aPinPos, int aPinOrient,
int aTextInside, bool aDrawPinNum, bool aDrawPinName );
/**
* Draw the electrical type text of the pin (only for the footprint editor)
*/
void printPinElectricalTypeName( const RENDER_SETTINGS* aSettings, wxPoint& aPosition,
int aOrientation );
private:
/**
* @copydoc LIB_ITEM::compare()
@ -289,6 +275,20 @@ private:
*/
int compare( const LIB_ITEM& aOther,
LIB_ITEM::COMPARE_FLAGS aCompareFlags = LIB_ITEM::COMPARE_FLAGS::NORMAL ) const override;
protected:
wxPoint m_position; // Position of the pin.
int m_length; // Length of the pin.
int m_orientation; // Pin orientation (Up, Down, Left, Right)
GRAPHIC_PINSHAPE m_shape; // Shape drawn around pin
ELECTRICAL_PINTYPE m_type; // Electrical type of the pin.
int m_attributes; // Set bit 0 to indicate pin is invisible.
wxString m_name;
wxString m_number;
int m_numTextSize; // Pin num and Pin name sizes
int m_nameTextSize;
std::map<wxString, ALT> m_alternates; // Map of alternate name to ALT structure
};

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2004-2020 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2021 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
@ -30,12 +30,6 @@
class LIB_POLYLINE : public LIB_ITEM
{
int m_Width; // Line width
std::vector<wxPoint> m_PolyPoints; // list of points (>= 2)
void print( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset, void* aData,
const TRANSFORM& aTransform ) override;
public:
LIB_POLYLINE( LIB_PART * aParent );
@ -119,6 +113,12 @@ private:
*/
int compare( const LIB_ITEM& aOther,
LIB_ITEM::COMPARE_FLAGS aCompareFlags = LIB_ITEM::COMPARE_FLAGS::NORMAL ) const override;
void print( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset, void* aData,
const TRANSFORM& aTransform ) override;
int m_Width; // Line width
std::vector<wxPoint> m_PolyPoints; // list of points (>= 2)
};

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2004-2020 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2021 KiCad Developers, see AUTHOR.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
@ -30,13 +30,6 @@
class LIB_RECTANGLE : public LIB_ITEM
{
wxPoint m_End; // Rectangle end point.
wxPoint m_Pos; // Rectangle start point.
int m_Width; // Line width
void print( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset,
void* aData, const TRANSFORM& aTransform ) override;
public:
LIB_RECTANGLE( LIB_PART * aParent );
@ -95,7 +88,6 @@ public:
EDA_ITEM* Clone() const override;
private:
/**
* @copydoc LIB_ITEM::compare()
*
@ -107,6 +99,13 @@ private:
*/
int compare( const LIB_ITEM& aOther,
LIB_ITEM::COMPARE_FLAGS aCompareFlags = LIB_ITEM::COMPARE_FLAGS::NORMAL ) const override;
void print( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset,
void* aData, const TRANSFORM& aTransform ) override;
wxPoint m_End; // Rectangle end point.
wxPoint m_Pos; // Rectangle start point.
int m_Width; // Line width
};

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2004-2020 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2021 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
@ -31,17 +31,13 @@
/**
* Define a symbol library graphical text item.
* <p>
*
* This is only a graphical text item. Field text like the reference designator,
* symbol value, etc. are not LIB_TEXT items. See the #LIB_FIELD class for the
* field item definition.
* </p>
*/
class LIB_TEXT : public LIB_ITEM, public EDA_TEXT
{
void print( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset, void* aData,
const TRANSFORM& aTransform ) override;
public:
LIB_TEXT( LIB_PART* aParent );
@ -115,7 +111,6 @@ public:
EDA_ITEM* Clone() const override;
private:
/**
* @copydoc LIB_ITEM::compare()
*
@ -128,6 +123,9 @@ private:
*/
int compare( const LIB_ITEM& aOther,
LIB_ITEM::COMPARE_FLAGS aCompareFlags = LIB_ITEM::COMPARE_FLAGS::NORMAL ) const override;
void print( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset, void* aData,
const TRANSFORM& aTransform ) override;
};

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015 Chris Pavlina <pavlina.chris@gmail.com>
* Copyright (C) 2015-2020 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2015-2021 KiCad Developers, see change_log.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
@ -65,13 +65,6 @@ enum RESCUE_TYPE
class RESCUE_CANDIDATE
{
protected:
wxString m_requested_name;
wxString m_new_name;
LIB_PART* m_lib_candidate;
int m_unit;
int m_convert;
public:
virtual ~RESCUE_CANDIDATE() {}
@ -112,6 +105,13 @@ public:
* @return True on success.
*/
virtual bool PerformAction( RESCUER* aRescuer ) = 0;
protected:
wxString m_requested_name;
wxString m_new_name;
LIB_PART* m_lib_candidate;
int m_unit;
int m_convert;
};
@ -121,18 +121,19 @@ public:
/**
* Grab all possible RESCUE_CASE_CANDIDATE objects into a vector.
*
* @param aRescuer - the working RESCUER instance.
* @param aCandidates - the vector the will hold the candidates.
* @param aRescuer is the working RESCUER instance.
* @param aCandidates is the vector the will hold the candidates.
*/
static void FindRescues( RESCUER& aRescuer, boost::ptr_vector<RESCUE_CANDIDATE>& aCandidates );
/**
* Constructor RESCUE_CANDIDATE
* @param aRequestedName - the name the schematic asks for
* @param aNewName - the name we want to change it to
* @param aLibCandidate - the part that will give us
* @param aUnit The unit of the rescued symbol.
* @param aConvert The body style of the rescued symbol.
* Create a RESCUE_CANDIDATE.
*
* @param aRequestedName us the name the schematic asks for.
* @param aNewName is the name we want to change it to.
* @param aLibCandidate is the part that will give us.
* @param aUnit is the unit of the rescued symbol.
* @param aConvert is the body style of the rescued symbol.
*/
RESCUE_CASE_CANDIDATE( const wxString& aRequestedName, const wxString& aNewName,
LIB_PART* aLibCandidate, int aUnit = 0, int aConvert = 0 );
@ -151,21 +152,22 @@ class RESCUE_CACHE_CANDIDATE: public RESCUE_CANDIDATE
public:
/**
* Grab all possible #RESCUE_CACHE_CANDIDATE objectss into a vector.
* Grab all possible #RESCUE_CACHE_CANDIDATE objects into a vector.
*
* @param aRescuer - the working RESCUER instance.
* @param aCandidates - the vector the will hold the candidates.
* @param aRescuer is the working RESCUER instance.
* @param aCandidates is the vector the will hold the candidates.
*/
static void FindRescues( RESCUER& aRescuer, boost::ptr_vector<RESCUE_CANDIDATE>& aCandidates );
/**
* Constructor RESCUE_CACHE_CANDIDATE
* @param aRequestedName - the name the schematic asks for
* @param aNewName - the name we want to change it to
* @param aCacheCandidate - the part from the cache
* @param aLibCandidate - the part that would be loaded from the library
* @param aUnit The unit of the rescued symbol.
* @param aConvert The body style of the rescued symbol.
* Create a RESCUE_CACHE_CANDIDATE.
*
* @param aRequestedName is the name the schematic asks for.
* @param aNewName is the name we want to change it to.
* @param aCacheCandidate is the part from the cache.
* @param aLibCandidate is the part that would be loaded from the library.
* @param aUnit is the unit of the rescued symbol.
* @param aConvert is the body style of the rescued symbol.
*/
RESCUE_CACHE_CANDIDATE( const wxString& aRequestedName, const wxString& aNewName,
LIB_PART* aCacheCandidate, LIB_PART* aLibCandidate,
@ -183,27 +185,24 @@ public:
class RESCUE_SYMBOL_LIB_TABLE_CANDIDATE : public RESCUE_CANDIDATE
{
LIB_ID m_requested_id;
LIB_ID m_new_id;
LIB_PART* m_cache_candidate;
public:
/**
* Grab all possible RESCUE_SYMBOL_LIB_TABLE_CANDIDATE objects into a vector.
*
* @param aRescuer - the working RESCUER instance.
* @param aCandidates - the vector the will hold the candidates.
* @param aRescuer is the working #RESCUER instance.
* @param aCandidates is the vector the will hold the candidates.
*/
static void FindRescues( RESCUER& aRescuer, boost::ptr_vector<RESCUE_CANDIDATE>& aCandidates );
/**
* Constructor RESCUE_CANDIDATE
* @param aRequestedName - the name the schematic asks for
* @param aNewName - the name we want to change it to
* @param aCacheCandidate - the part from the cache
* @param aLibCandidate - the part that would be loaded from the library
* @param aUnit The unit of the rescued symbol.
* @param aConvert The body style of the rescued symbol.
* Create RESCUE_CANDIDATE.
*
* @param aRequestedName is the name the schematic asks for.
* @param aNewName is the name we want to change it to.
* @param aCacheCandidate is the part from the cache.
* @param aLibCandidate is the part that would be loaded from the library.
* @param aUnit is the unit of the rescued symbol.
* @param aConvert is the body style of the rescued symbol.
*/
RESCUE_SYMBOL_LIB_TABLE_CANDIDATE( const LIB_ID& aRequestedId, const LIB_ID& aNewId,
LIB_PART* aCacheCandidate, LIB_PART* aLibCandidate,
@ -216,6 +215,11 @@ public:
virtual wxString GetActionDescription() const override;
virtual bool PerformAction( RESCUER* aRescuer ) override;
private:
LIB_ID m_requested_id;
LIB_ID m_new_id;
LIB_PART* m_cache_candidate;
};
@ -230,20 +234,6 @@ public:
class RESCUER
{
protected:
friend class DIALOG_RESCUE_EACH;
std::vector<SCH_COMPONENT*> m_components;
PROJECT* m_prj;
SCHEMATIC* m_schematic;
EDA_DRAW_PANEL_GAL::GAL_TYPE m_galBackEndType;
SCH_SHEET_PATH* m_currentSheet;
boost::ptr_vector<RESCUE_CANDIDATE> m_all_candidates;
std::vector<RESCUE_CANDIDATE*> m_chosen_candidates;
std::vector<RESCUE_LOG> m_rescue_log;
public:
RESCUER( PROJECT& aProject, SCHEMATIC* aSchematic, SCH_SHEET_PATH* aCurrentSheet,
EDA_DRAW_PANEL_GAL::GAL_TYPE aGalBackeEndType );
@ -253,8 +243,9 @@ public:
}
/**
* Writes out the rescue library. Called after successful PerformAction()s. If this fails,
* undo the actions.
* Write the rescue library.
*
* Called after successful PerformAction()s. If this fails, undo the actions.
*
* @return True on success.
*/
@ -282,12 +273,12 @@ public:
void RemoveDuplicates();
/**
* Returen the number of rescue candidates found.
* Return the number of rescue candidates found.
*/
size_t GetCandidateCount() { return m_all_candidates.size(); }
/**
* Get the number of resuce candidates chosen by the user.
* Get the number of rescue candidates chosen by the user.
*/
size_t GetChosenCandidateCount() { return m_chosen_candidates.size(); }
@ -322,14 +313,25 @@ public:
void UndoRescues();
static bool RescueProject( wxWindow* aParent, RESCUER& aRescuer, bool aRunningOnDemand );
protected:
friend class DIALOG_RESCUE_EACH;
std::vector<SCH_COMPONENT*> m_components;
PROJECT* m_prj;
SCHEMATIC* m_schematic;
EDA_DRAW_PANEL_GAL::GAL_TYPE m_galBackEndType;
SCH_SHEET_PATH* m_currentSheet;
boost::ptr_vector<RESCUE_CANDIDATE> m_all_candidates;
std::vector<RESCUE_CANDIDATE*> m_chosen_candidates;
std::vector<RESCUE_LOG> m_rescue_log;
};
class LEGACY_RESCUER : public RESCUER
{
private:
std::unique_ptr<PART_LIB> m_rescue_lib;
public:
LEGACY_RESCUER( PROJECT& aProject, SCHEMATIC* aSchematic, SCH_SHEET_PATH* aCurrentSheet,
EDA_DRAW_PANEL_GAL::GAL_TYPE aGalBackEndType ) :
@ -350,16 +352,14 @@ public:
virtual bool WriteRescueLibrary( wxWindow *aParent ) override;
virtual void AddPart( LIB_PART* aNewPart ) override;
private:
std::unique_ptr<PART_LIB> m_rescue_lib;
};
class SYMBOL_LIB_TABLE_RESCUER : public RESCUER
{
private:
SCH_PLUGIN::SCH_PLUGIN_RELEASER m_pi;
std::unique_ptr< PROPERTIES > m_properties; ///< Library plugin properties
public:
SYMBOL_LIB_TABLE_RESCUER( PROJECT& aProject, SCHEMATIC* aSchematic,
SCH_SHEET_PATH* aCurrentSheet,
@ -378,6 +378,11 @@ public:
virtual bool WriteRescueLibrary( wxWindow* aParent ) override;
virtual void AddPart( LIB_PART* aNewPart ) override;
private:
SCH_PLUGIN::SCH_PLUGIN_RELEASER m_pi;
std::unique_ptr< PROPERTIES > m_properties; ///< Library plugin properties
};
#endif // _LIB_CACHE_RESCUE_H_

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 2015-2020 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2015-2021 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
@ -69,7 +69,7 @@ class SYMBOL_EDITOR_SETTINGS;
* @param aLibId is the symbol library identifier to load.
* @param aLibTable is the #SYMBOL_LIBRARY_TABLE to load the alias from.
* @param aCacheLib is an optional cache library.
* @param aParent is an optiona parent window when displaying an error message.
* @param aParent is an optional parent window when displaying an error message.
* @param aShowErrorMessage set to true to show any error messages.
*
* @return The symbol found in the library or NULL if the symbol was not found.
@ -89,12 +89,6 @@ LIB_PART* SchGetLibPart( const LIB_ID& aLibId, SYMBOL_LIB_TABLE* aLibTable,
*/
class SCH_BASE_FRAME : public EDA_DRAW_FRAME
{
protected:
/// These are only used by symbol_editor. Eeschema should be using the one inside the SCHEMATIC.
SCHEMATIC_SETTINGS m_base_frame_defaults;
SCHEMATIC_SETTINGS* m_defaults;
public:
SCH_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent,
FRAME_T aWindowType,
@ -147,8 +141,7 @@ public:
void UpdateStatusBar() override;
/**
* Function PickSymbolFromLibTree
* Calls the library viewer to select component to import into schematic.
* Call the library viewer to select component to import into schematic.
* if the library viewer is currently running, it is closed and reopened
* in modal mode.
*
@ -156,17 +149,17 @@ public:
* fields (e.g. footprint selection) should be enabled. This should be false
* when they would have no effect, for example loading a part into symbol_editor.
*
* @param aFilter is a SCHLIB_FILTER filter to pass the allowed library names
* @param aFilter is a #SCHLIB_FILTER filter to pass the allowed library names
* and/or the library name to load the component from and/or some other filter
* if NULL, no filtering.
* @param aHistoryList list of previously loaded components - will be edited
* @param aUseLibBrowser bool to call the library viewer to select the component
* @param aUnit preselected unit
* @param aConvert preselected De Morgan shape
* @param aHighlight name of component to highlight in the list.
* highlights none if there isn't one by that name
* @param aShowFootprints whether to show footprints in the dialog
* @param aAllowFields whether to allow field editing in the dialog
* @param aHistoryList is the list of previously loaded components - will be edited
* @param aUseLibBrowser is the flag to call the library viewer to select the component
* @param aUnit is the preselected unit.
* @param aConvert is the preselected De Morgan shape.
* @param aHighlight is the name of component to highlight in the list.
* highlights none if there isn't one by that name.
* @param aShowFootprints is the whether to show footprints in the dialog.
* @param aAllowFields is whether to allow field editing in the dialog.
*
* @return the selected component
*/
@ -194,17 +187,17 @@ public:
LIB_PART* GetFlattenedLibPart( const LIB_ID& aLibId, bool aShowErrorMsg = false );
/**
* Function PickSymbolFromLibBrowser
* Calls the library viewer to select component to import into schematic.
* Call the library viewer to select component to import into schematic.
* if the library viewer is currently running, it is closed and reopened
* in modal mode.
* @param aParent is the caller
*
* @param aParent is the caller.
* @param aFilter is a filter to pass the allowed library names
* and/or some other filter
* @param aPreselectedLibId Preselected component LIB_ID. Not valid if none selected.
* @param aUnit preselected unit
* @param aConvert preselected deMorgan conversion
* @return the selected component
* and/or some other filter.
* @param aPreselectedLibId is the preselected component #LIB_ID. Not valid if none selected.
* @param aUnit is the preselected unit.
* @param aConvert is the preselected deMorgan conversion.
* @return the selected component.
*/
PICKED_SYMBOL PickSymbolFromLibBrowser( wxTopLevelWindow* aParent,
const SCHLIB_FILTER* aFilter,
@ -261,7 +254,7 @@ public:
protected:
/**
* Saves Symbol Library Tables to disk.
* Save Symbol Library Tables to disk.
*
* @param aGlobal when true, the Global Table is saved.
* @param aProject when true, the Project Table is saved.
@ -269,6 +262,12 @@ protected:
*/
bool saveSymbolLibTables( bool aGlobal, bool aProject );
/// These are only used by symbol_editor. Eeschema should be using the one inside
/// the SCHEMATIC.
SCHEMATIC_SETTINGS m_base_frame_defaults;
SCHEMATIC_SETTINGS* m_defaults;
};
#endif // SCH_BASE_FRAME_H_

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2011 jean-pierre.charras
* Copyright (C) 2011-2019 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2011-2021 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
@ -24,7 +24,6 @@
/**
* @file sch_bitmap.h
*
*/
#ifndef _SCH_BITMAP_H_
@ -38,12 +37,8 @@
/**
* Object to handle a bitmap image that can be inserted in a schematic.
*/
class SCH_BITMAP : public SCH_ITEM
{
wxPoint m_pos; // XY coordinates of center of the bitmap
BITMAP_BASE* m_image; // the BITMAP_BASE item
public:
SCH_BITMAP( const wxPoint& pos = wxPoint( 0, 0 ) );
@ -63,7 +58,7 @@ public:
}
/**
* @return the image "zoom" value
* @return the image "zoom" value.
* scale = 1.0 = original size of bitmap.
* scale < 1.0 = the bitmap is drawn smaller than its original size.
* scale > 1.0 = the bitmap is drawn bigger than its original size.
@ -89,7 +84,7 @@ public:
}
/**
* @return the actual size (in user units, not in pixels) of the image
* @return the actual size (in user units, not in pixels) of the image.
*/
wxSize GetSize() const;
@ -103,11 +98,12 @@ public:
virtual void ViewGetLayers( int aLayers[], int& aCount ) const override;
/**
* Reads and stores an image file. Init the bitmap used to draw this item
* format.
* Read and store an image file.
*
* @param aFullFilename The full filename of the image file to read.
* @return bool - true if success reading else false.
* Initialize the bitmap used to draw this item format.
*
* @param aFullFilename is the full filename of the image file to read.
* @return true if success reading else false.
*/
bool ReadImageFile( const wxString& aFullFilename );
@ -117,10 +113,10 @@ public:
}
/**
* Virtual function IsMovableFromAnchorPoint
* Return true for items which are moved with the anchor point at mouse cursor
* and false for items moved with no reference to anchor
* @return false for a bus entry
* Return true for items which are moved with the anchor point at mouse cursor and false
* for items moved with no reference to anchor.
*
* @return false for a bus entry.
*/
bool IsMovableFromAnchorPoint() const override { return false; }
@ -150,6 +146,10 @@ public:
#if defined(DEBUG)
void Show( int nestLevel, std::ostream& os ) const override;
#endif
private:
wxPoint m_pos; // XY coordinates of center of the bitmap
BITMAP_BASE* m_image; // the BITMAP_BASE item
};

View File

@ -116,43 +116,6 @@ enum SCH_CLEANUP_FLAGS {
*/
class SCH_EDIT_FRAME : public SCH_BASE_FRAME
{
// The schematic editor control class should be able to access some internal
// functions of the editor frame.
friend class SCH_EDITOR_CONTROL;
private:
SCHEMATIC* m_schematic; ///< The currently loaded schematic
const SCH_CONNECTION* m_highlightedConn; ///< The highlighted net or bus, or nullptr
wxPageSetupDialogData m_pageSetupData;
SCH_ITEM* m_item_to_repeat; ///< Last item to insert by the repeat command.
wxString m_netListerCommand; ///< Command line to call a custom net list
///< generator.
int m_exec_flags; ///< Flags of the wxExecute() function
///< to call a custom net list generator.
DIALOG_SCH_FIND* m_findReplaceDialog;
protected:
/**
* Save the schematic files that have been modified and not yet saved.
*
* @return true if the auto save was successful otherwise false.
*/
bool doAutoSave() override;
/**
* Returns true if the schematic has been modified.
*/
bool isAutoSaveRequired() const override;
/**
* Send the kicad netlist over to CVPCB.
*/
void sendNetlistToCvpcb();
void onSize( wxSizeEvent& aEvent );
public:
SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent );
~SCH_EDIT_FRAME() override;
@ -174,7 +137,7 @@ public:
void SaveProjectSettings() override;
/**
* Loads the KiCad project file (*.pro) settings specific to Eeschema.
* Load the KiCad project file (*.pro) settings specific to Eeschema.
*
* @return True if the project file was loaded correctly.
*/
@ -237,7 +200,7 @@ public:
* \li \c \$CLEAR: \c "HIGHLIGHTED" Clear components highlight
* <p>
* They are a keyword followed by a quoted string.
* @param cmdline = received command from Pcbnew
* @param cmdline is the command received from Pcbnew.
*/
void ExecuteRemoteCommand( const char* cmdline ) override;
@ -280,36 +243,36 @@ public:
void OnFindDialogClose();
/**
* Breaks a single segment into two at the specified point.
* Break a single segment into two at the specified point.
*
* NOTE: always appends to the existing undo state.
* @note This always appends to the existing undo state.
*
* @param aSegment Line segment to break
* @param aPoint Point at which to break the segment
* @param aNewSegment Pointer to the newly created segment (if given and created)
* @param aScreen is the screen to examine, or nullptr to examine the current screen
* @param aScreen is the screen to examine, or nullptr to examine the current screen.
* @return True if any wires or buses were broken.
*/
bool BreakSegment( SCH_LINE* aSegment, const wxPoint& aPoint,
SCH_LINE** aNewSegment = NULL, SCH_SCREEN* aScreen = nullptr );
SCH_LINE** aNewSegment = nullptr, SCH_SCREEN* aScreen = nullptr );
/**
* Checks every wire and bus for a intersection at \a aPoint and break into two segments
* Check every wire and bus for a intersection at \a aPoint and break into two segments
* at \a aPoint if an intersection is found.
*
* NOTE: always appends to the existing undo state.
* @note This always appends to the existing undo state.
*
* @param aPoint Test this point for an intersection.
* @param aScreen is the screen to examine, or nullptr to examine the current screen
* @param aScreen is the screen to examine, or nullptr to examine the current screen.
* @return True if any wires or buses were broken.
*/
bool BreakSegments( const wxPoint& aPoint, SCH_SCREEN* aScreen = nullptr );
/**
* Tests all junctions and bus entries in the schematic for intersections with wires and
* Test all junctions and bus entries in the schematic for intersections with wires and
* buses and breaks any intersections into multiple segments.
*
* NOTE: always appends to the existing undo state.
* @note This always appends to the existing undo state.
*
* @param aScreen is the screen to examine, or nullptr to examine the current screen
* @return True if any wires or buses were broken.
@ -330,27 +293,27 @@ public:
* - $PIN: number $PART: reference put cursor on the footprint pad
* - $SHEET: time_stamp select all footprints of components is the schematic sheet path
*
* @param aObjectToSync = item to be located on board
* (footprint, pad, text or schematic sheet)
* @param aPart = component if objectToSync is a sub item of a symbol (like a pin)
* @param aObjectToSync is the item to be located on board.
* @param aPart is the symbol if \a aObjectToSync is a sub item of a symbol (like a pin).
*/
void SendMessageToPCBNEW( EDA_ITEM* aObjectToSync, SCH_COMPONENT* aPart );
/**
* Sends a net name to pcbnew for highlighting
* Sends a net name to Pcbnew for highlighting
*
* @param aNetName is the name of a net, or empty string to clear highlight
*/
void SendCrossProbeNetName( const wxString& aNetName );
/**
* Sends a connection (net or bus) to pcbnew for highlighting
* Send a connection (net or bus) to Pcbnew for highlighting.
*
* @param aConnection is the connection to highlight
*/
void SetCrossProbeConnection( const SCH_CONNECTION* aConnection );
/**
* Tells PcbNew to clear the existing highlighted net, if one exists
* Tell Pcbnew to clear the existing highlighted net, if one exists
*/
void SendCrossProbeClearHighlight();
@ -365,35 +328,32 @@ public:
}
/**
* Checks if we are ready to write a netlist file for the current schematic
* Check if we are ready to write a netlist file for the current schematic.
*
* - Test for some issues (missing or duplicate references and sheet names)
* Test for some issues (missing or duplicate references and sheet names).
*
* @param aAnnotateMessage a message to put up in case annotation needs to be performed
* @returns true if all is well (i.e. you can call WriteNetListFile next)
* @param aAnnotateMessage a message to put up in case annotation needs to be performed.
* @return true if all is well (i.e. you can call WriteNetListFile next).
*/
bool ReadyToNetlist( const wxString& aAnnotateMessage );
/**
* Create a netlist file.
*
* @param aFormat = netlist format (NET_TYPE_PCBNEW ...)
* @param aFullFileName = full netlist file name
* @param aNetlistOptions = netlist options using OR'ed bits.
* @param aFormat is the netlist format (NET_TYPE_PCBNEW ...).
* @param aFullFileName is the full netlist file name.
* @param aNetlistOptions is the netlist options using OR'ed bits.
* <p>
* For SPICE netlist only:
* if NET_USE_NETNAMES is set, use net names from labels in schematic
* else use net numbers (net codes)
* if NET_USE_X_PREFIX is set : change "U" and "IC" reference prefix to "X"
* </p>
* @param aReporter = a REPORTER to report error messages,
* mainly if a command line must be run (can be NULL
* @param aReporter is a #REPORTER to report error messages, can be a nullptr.
* @return true if success.
*/
bool WriteNetListFile( int aFormat,
const wxString& aFullFileName,
unsigned aNetlistOptions,
REPORTER* aReporter = NULL );
bool WriteNetListFile( int aFormat, const wxString& aFullFileName, unsigned aNetlistOptions,
REPORTER* aReporter = nullptr );
/**
* Clear the current component annotation.
@ -453,7 +413,8 @@ public:
int CheckAnnotate( ANNOTATION_ERROR_HANDLER aErrorHandler, bool aOneSheetOnly = false );
/**
* Run a modal version of the Annotate dialog for a specific purpose.
* Run a modal version of the annotate dialog for a specific purpose.
*
* @param aMessage A user message indicating the purpose.
* @return the result of ShowModal()
*/
@ -481,6 +442,7 @@ public:
/**
* Called when modifying the page settings.
*
* In derived classes it can be used to modify parameters like draw area size, and any other
* local parameter related to the page settings.
*/
@ -525,18 +487,17 @@ public:
/**
* Save \a aSheet to a schematic file.
*
* @param aSheet A pointer to the #SCH_SHEET object to save. A NULL pointer saves the
* @param aSheet is the #SCH_SHEET object to save. A NULL pointer saves the
* current screen only.
* @param aSaveUnderNewName Controls how the file is to be saved;: using previous name
* or under a new name.
* @return True if the file has been saved.
*/
bool SaveEEFile( SCH_SHEET* aSheet,
bool aSaveUnderNewName = false );
bool SaveEEFile( SCH_SHEET* aSheet, bool aSaveUnderNewName = false );
/**
* Checks if any of the screens has unsaved changes and asks the user whether to save or
* Check if any of the screens has unsaved changes and asks the user whether to save or
* drop them.
*
* @return True if user decided to save or drop changes, false if the operation should be
@ -548,10 +509,10 @@ public:
bool aFinal = true );
/**
* Performs routine schematic cleaning including breaking wire and buses and deleting
* Perform routine schematic cleaning including breaking wire and buses and deleting
* identical objects superimposed on top of each other.
*
* NOTE: always appends to the existing undo state.
* @note This always appends to the existing undo state.
*
* @param aScreen is the screen to examine, or nullptr to examine the current screen
* @return True if any schematic clean up was performed.
@ -562,7 +523,7 @@ public:
* If any single wire passes through _both points_, remove the portion between the two points,
* potentially splitting the wire into two.
*
* NOTE: always appends to the existing undo state.
* @note This always appends to the existing undo state.
*
* @param aStart The starting point for trimmming
* @param aEnd The ending point for trimming
@ -571,7 +532,7 @@ public:
bool TrimWire( const wxPoint& aStart, const wxPoint& aEnd );
/**
* Collects a unique list of all possible connection points in the schematic.
* Collect a unique list of all possible connection points in the schematic.
*
* @return vector of connections
*/
@ -582,68 +543,13 @@ public:
void OnUpdatePCB( wxCommandEvent& event );
void OnAnnotate( wxCommandEvent& event );
private:
// Sets up the tool framework
void setupTools();
void OnExit( wxCommandEvent& event );
void OnLoadFile( wxCommandEvent& event );
void OnAppendProject( wxCommandEvent& event );
void OnImportProject( wxCommandEvent& event );
void OnClearFileHistory( wxCommandEvent& aEvent );
bool canCloseWindow( wxCloseEvent& aCloseEvent ) override;
void doCloseWindow() override;
/**
* Set the main window title bar text.
*
* If file name defined by SCH_SCREEN::m_FileName is not set, the title is set to the
* application name appended with no file.
* Otherwise, the title is set to the hierarchical sheet path and the full file name, and
* read only is appended to the title if the user does not have write access to the file.
*/
void UpdateTitle();
/**
* Initialize the zoom value of the current screen and mark the screen as zoom-initialized.
*/
void initScreenZoom();
/**
* Verify that the symbol library links \a aSheet and all of it's child sheets have
* been remapped to the symbol library table.
*
* @param aSheet is the #SCH_SHEET object to test.
*
* @return true if \a aSheet and it's child sheets have not been remapped.
*/
bool checkForNoFullyDefinedLibIds( SCH_SHEET* aSheet );
/**
* Load the given filename but sets the path to the current project path.
*
* @param full filepath of file to be imported.
* @param aFileType SCH_FILE_T value for file type
*/
bool importFile( const wxString& aFileName, int aFileType );
/**
* Fills a map of uuid -> reference from the currently loaded schematic
* @param aMap is a map to fill
*/
void mapExistingAnnotation( std::map<wxString, wxString>& aMap );
public:
/**
* Verify that \a aSheet will not cause a recursion error in \a aHierarchy.
*
* @param aSheet is the #SCH_SHEET object to test.
* @param aHierarchy is the #SCH_SHEET_PATH where \a aSheet is going to reside.
*
* @return true if \a aSheet will cause a resursion error in \a aHierarchy.
* @return true if \a aSheet will cause a recursion error in \a aHierarchy.
*/
bool CheckSheetForRecursion( SCH_SHEET* aSheet, SCH_SHEET_PATH* aHierarchy );
@ -656,7 +562,7 @@ public:
* this would result in a broken schematic.
*
* @param aSchematicFileName is the absolute path and file name of the file to test.
* @return true if the user accepts the potential file name clase risk.
* @return true if the user accepts the potential file name clash risk.
*/
bool AllowCaseSensitiveFileNameClashes( const wxString& aSchematicFileName );
@ -685,7 +591,7 @@ public:
* @param aHierarchy is the current hierarchy containing aSheet
* @param aClearAnnotationNewItems is a reference to a bool to know if the items managed by
* this sheet need to have their annotation cleared i.e. when an existing item list is used.
* it can happens when the edited sheet used an existying file, or becomes a new instance
* it can happens when the edited sheet used an existing file, or becomes a new instance
* of a already existing sheet.
*/
bool EditSheetProperties( SCH_SHEET* aSheet, SCH_SHEET_PATH* aHierarchy,
@ -770,24 +676,21 @@ public:
* If it is a delete command, items are put on list with the .Flags member
* set to DELETED.
*
* @param aItemToCopy = the schematic item modified by the command to undo
* @param aTypeCommand = command type (see enum UNDO_REDO)
* @param aAppend = add the item to the previous undo list
* @param aItemToCopy is the schematic item modified by the command to undo.
* @param aTypeCommand is the command type (see enum UNDO_REDO).
* @param aAppend set to true to add the item to the previous undo list.
*/
void SaveCopyInUndoList( SCH_SCREEN* aScreen,
SCH_ITEM* aItemToCopy,
UNDO_REDO aTypeCommand,
void SaveCopyInUndoList( SCH_SCREEN* aScreen, SCH_ITEM* aItemToCopy, UNDO_REDO aTypeCommand,
bool aAppend );
/**
* Create a new entry in undo list of commands.
*
* @param aItemsList = the list of items modified by the command to undo
* @param aTypeCommand = command type (see enum UNDO_REDO)
* @param aAppend = add the item to the previous undo list
* @param aItemsList is the the list of items modified by the command to undo/
* @param aTypeCommand is the command type (see enum UNDO_REDO).
* @param aAppend set to true to add the item to the previous undo list.
*/
void SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList,
UNDO_REDO aTypeCommand,
void SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList, UNDO_REDO aTypeCommand,
bool aAppend );
/**
@ -804,10 +707,9 @@ public:
* - data pointed by wrappers are deleted if not in use in schematic
* i.e. when they are copy of a schematic item or they are no more in use (DELETED)
*
* @param whichList = the UNDO_REDO_CONTAINER to clear
* @param aItemCount = the count of items to remove. < 0 for all items
* items are removed from the beginning of the list.
* So this function can be called to remove old commands
* @param whichList is the UNDO_REDO_CONTAINER to clear
* @param aItemCount is the count of items to remove. Use < 0 to remove all items from
* the beginning of the list.
*/
void ClearUndoORRedoList( UNDO_REDO_LIST whichList, int aItemCount = -1 ) override;
@ -826,7 +728,7 @@ public:
EDA_ITEM* GetItem( const KIID& aId ) const override;
/**
* Performs an undo of the last edit WITHOUT logging a corresponding redo. Used to cancel
* Perform an undo of the last edit WITHOUT logging a corresponding redo. Used to cancel
* an in-progress operation.
*/
void RollbackSchematicFromUndo();
@ -836,8 +738,8 @@ public:
*
* This file will contain all components used in the current schematic.
*
* @param aUseCurrentSheetFilename = false to use the root sheet filename
* (default) or true to use the currently opened sheet.
* @param aUseCurrentSheetFilename set to false to use the root sheet filename
* (default) or true to use the currently opened sheet.
* @return true if the file was written successfully.
*/
bool CreateArchiveLibraryCacheFile( bool aUseCurrentSheetFilename = false );
@ -852,8 +754,6 @@ public:
/**
* Plot or print the current sheet to the clipboard.
*
* @param aDC = wxDC given by the calling print function
*/
virtual void PrintPage( const RENDER_SETTINGS* aSettings ) override;
@ -867,7 +767,7 @@ public:
/**
* Set (adds) specified flags for next execution of external generator of the netlist or bom.
*
* @param aFlags = wxEXEC_* flags, see wxExecute docs.
* @param aFlags is the wxEXEC_* flags, see wxExecute documentation.
*/
void SetExecFlags( const int aFlags ) { m_exec_flags |= aFlags; }
@ -875,19 +775,19 @@ public:
* Clear (removes) specified flags that not needed for next execution of external generator
* of the netlist or bom.
*
* @param aFlags = wxEXEC_* flags, see wxExecute docs.
* @param aFlags is the wxEXEC_* flags, see wxExecute documentation.
*/
void ClearExecFlags( const int aFlags ) { m_exec_flags &= ~( aFlags ); }
wxString GetNetListerCommand() const { return m_netListerCommand; }
/**
* Generates the connection data for the entire schematic hierarchy.
* Generate the connection data for the entire schematic hierarchy.
*/
void RecalculateConnections( SCH_CLEANUP_FLAGS aCleanupFlags );
/**
* Allows Eeschema to install its preferences panels into the preferences dialog.
* Allow Eeschema to install its preferences panels into the preferences dialog.
*/
void InstallPreferences( PAGED_DIALOG* aParent, PANEL_HOTKEYS_EDITOR* aHotkeysPanel ) override;
@ -920,13 +820,104 @@ public:
/**
* Update the schematic's page reference map for all global labels, and refresh the labels
* so that they are redrawn with up-to-date references.
* @return
*/
void RecomputeIntersheetRefs();
void ShowAllIntersheetRefs( bool aShow );
DECLARE_EVENT_TABLE()
protected:
/**
* Save the schematic files that have been modified and not yet saved.
*
* @return true if the auto save was successful otherwise false.
*/
bool doAutoSave() override;
/**
* Return true if the schematic has been modified.
*/
bool isAutoSaveRequired() const override;
/**
* Send the KiCad netlist over to CVPCB.
*/
void sendNetlistToCvpcb();
void onSize( wxSizeEvent& aEvent );
private:
// Sets up the tool framework
void setupTools();
void OnExit( wxCommandEvent& event );
void OnLoadFile( wxCommandEvent& event );
void OnAppendProject( wxCommandEvent& event );
void OnImportProject( wxCommandEvent& event );
void OnClearFileHistory( wxCommandEvent& aEvent );
bool canCloseWindow( wxCloseEvent& aCloseEvent ) override;
void doCloseWindow() override;
/**
* Set the main window title bar text.
*
* If file name defined by SCH_SCREEN::m_FileName is not set, the title is set to the
* application name appended with no file.
* Otherwise, the title is set to the hierarchical sheet path and the full file name, and
* read only is appended to the title if the user does not have write access to the file.
*/
void UpdateTitle();
/**
* Initialize the zoom value of the current screen and mark the screen as zoom-initialized.
*/
void initScreenZoom();
/**
* Verify that the symbol library links \a aSheet and all of it's child sheets have
* been remapped to the symbol library table.
*
* @param aSheet is the #SCH_SHEET object to test.
*
* @return true if \a aSheet and it's child sheets have not been remapped.
*/
bool checkForNoFullyDefinedLibIds( SCH_SHEET* aSheet );
/**
* Load the given filename but sets the path to the current project path.
*
* @param full filepath of file to be imported.
* @param aFileType SCH_FILE_T value for file type
*/
bool importFile( const wxString& aFileName, int aFileType );
/**
* Fill a map of uuid -> reference from the currently loaded schematic.
*
* @param aMap is a map to fill
*/
void mapExistingAnnotation( std::map<wxString, wxString>& aMap );
private:
// The schematic editor control class should be able to access some internal
// functions of the editor frame.
friend class SCH_EDITOR_CONTROL;
SCHEMATIC* m_schematic; ///< The currently loaded schematic
const SCH_CONNECTION* m_highlightedConn; ///< The highlighted net or bus, or nullptr
wxPageSetupDialogData m_pageSetupData;
SCH_ITEM* m_item_to_repeat; ///< Last item to insert by the repeat command.
wxString m_netListerCommand; ///< Command line to call a custom net list
///< generator.
int m_exec_flags; ///< Flags of the wxExecute() function
///< to call a custom net list generator.
DIALOG_SCH_FIND* m_findReplaceDialog;
};

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2004-2019 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2021 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
@ -37,24 +37,18 @@ class LIB_FIELD;
/**
* SCH_FIELD
* instances are attached to a symbol or sheet and provide a place for the component's value,
* Instances are attached to a symbol or sheet and provide a place for the component's value,
* reference designator, footprint, , a sheet's name, filename, and user definable name-value
* pairs of arbitrary purpose.
*
* <ul> <li>Field 0 is reserved for the symbol reference.</li>
* <li>Field 1 is reserved for the symbol value.</li>
* <li>Field 2 is reserved for the symbol footprint.</li>
* <li>Field 3 is reserved for the symbol data sheet file.</li>
* <li>Field 4 and higher are user defineable.</li></ul>
* - Field 0 is reserved for the symbol reference.
* - Field 1 is reserved for the symbol value.
* - Field 2 is reserved for the symbol footprint.
* - Field 3 is reserved for the symbol data sheet file.
* - Field 4 and higher are user definable.
*/
class SCH_FIELD : public SCH_ITEM, public EDA_TEXT
{
int m_id; ///< Field index, @see enum MANDATORY_FIELD_T
wxString m_name;
public:
SCH_FIELD( const wxPoint& aPos, int aFieldId, SCH_ITEM* aParent,
const wxString& aName = wxEmptyString );
@ -101,12 +95,11 @@ public:
void DoHypertextMenu( EDA_DRAW_FRAME* aFrame ) override;
/**
* Function GetName
* returns the field name.
* Return the field name.
*
* @param aUseDefaultName When true return the default field name if the field name is
* empty. Otherwise the default field name is returned.
* @return A wxString object containing the name of the field.
* @return the name of the field.
*/
wxString GetName( bool aUseDefaultName = true ) const;
@ -127,25 +120,24 @@ public:
const EDA_RECT GetBoundingBox() const override;
/**
* Function IsHorizJustifyFlipped
* Returns whether the field will be rendered with the horizontal justification
* Return whether the field will be rendered with the horizontal justification
* inverted due to rotation or mirroring of the parent.
*/
bool IsHorizJustifyFlipped() const;
/**
* Function IsVoid
* returns true if the field is either empty or holds "~".
* @return true if the field is either empty or holds "~".
*/
bool IsVoid() const;
void SwapData( SCH_ITEM* aItem ) override;
/**
* Function ImportValues
* copy parameters from a LIB_FIELD source.
* Pointers and specific values (position) are not copied
* @param aSource = the LIB_FIELD to read
* Copy parameters from a LIB_FIELD source.
*
* Pointers and specific values (position) are not copied.
*
* @param aSource is the LIB_FIELD to read.
*/
void ImportValues( const LIB_FIELD& aSource );
@ -211,6 +203,11 @@ public:
#if defined(DEBUG)
void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
#endif
private:
int m_id; ///< Field index, @see enum MANDATORY_FIELD_T
wxString m_name;
};

View File

@ -5,7 +5,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2016 CERN
* Copyright (C) 2016-2020 KiCad Developers, see CHANGELOG.TXT for contributors.
* Copyright (C) 2016-2021 KiCad Developers, see AUTHORS.txt for contributors.
*
* @author Wayne Stambaugh <stambaughw@gmail.com>
*
@ -40,8 +40,7 @@ class PROPERTIES;
/**
* SCH_IO_MGR
* is a factory which returns an instance of a #SCH_PLUGIN.
* A factory which returns an instance of a #SCH_PLUGIN.
*/
class SCH_IO_MGR
{
@ -58,10 +57,8 @@ public:
SCH_ALTIUM, ///< Altium file format
SCH_CADSTAR_ARCHIVE, ///< CADSTAR Schematic Archive
SCH_EAGLE, ///< Autodesk Eagle file format
// Add your schematic type here.
// ALTIUM,
// etc.
// Add your schematic type here.
SCH_FILE_UNKNOWN
} )
@ -157,12 +154,12 @@ public:
//-----<PUBLIC SCH_PLUGIN API>-------------------------------------------------
/**
* Returns a brief hard coded name for this SCH_PLUGIN.
* Return a brief hard coded name for this SCH_PLUGIN.
*/
virtual const wxString GetName() const = 0;
/**
* Returns the file extension for the #SCH_PLUGIN.
* Return the file extension for the #SCH_PLUGIN.
*/
virtual const wxString GetFileExtension() const = 0;
@ -182,7 +179,7 @@ public:
*/
virtual int GetModifyHash() const = 0;
virtual void SaveLibrary( const wxString& aFileName, const PROPERTIES* aProperties = NULL );
virtual void SaveLibrary( const wxString& aFileName, const PROPERTIES* aProperties = nullptr );
/**
* Load information from some input file format that this #SCH_PLUGIN implementation
@ -213,7 +210,8 @@ public:
* possible.
*/
virtual SCH_SHEET* Load( const wxString& aFileName, SCHEMATIC* aSchematic,
SCH_SHEET* aAppendToMe = NULL, const PROPERTIES* aProperties = NULL );
SCH_SHEET* aAppendToMe = nullptr,
const PROPERTIES* aProperties = nullptr );
/**
* Write \a aSchematic to a storage file in a format that this #SCH_PLUGIN implementation
@ -236,12 +234,12 @@ public:
* continues to own this object (plugin may not delete it), and plugins
* should expect it to be optionally NULL. Set the
* #PropSaveCurrentSheetOnly property to only save the current sheet.
* Otherwise, all hierarchial sheets are saved.
* Otherwise, all hierarchical sheets are saved.
*
* @throw IO_ERROR if there is a problem saving or exporting.
*/
virtual void Save( const wxString& aFileName, SCH_SHEET* aSheet, SCHEMATIC* aSchematic,
const PROPERTIES* aProperties = NULL );
const PROPERTIES* aProperties = nullptr );
/**
* Populate a list of #LIB_PART alias names contained within the library \a aLibraryPath.
@ -259,14 +257,13 @@ public:
*
* @throw IO_ERROR if the library cannot be found, the part library cannot be loaded.
*/
virtual void EnumerateSymbolLib( wxArrayString& aSymbolNameList,
const wxString& aLibraryPath,
const PROPERTIES* aProperties = NULL );
virtual void EnumerateSymbolLib( wxArrayString& aSymbolNameList, const wxString& aLibraryPath,
const PROPERTIES* aProperties = nullptr );
/**
* Populate a list of #LIB_PART aliases contained within the library \a aLibraryPath.
*
* @note It is the reponsibility of the caller to delete the returned object from the heap.
* @note It is the responsibility of the caller to delete the returned object from the heap.
* Failure to do this will result in memory leaks.
*
* @param aSymbolList is an array to populate with the #LIB_PART pointers associated with
@ -283,8 +280,8 @@ public:
* @throw IO_ERROR if the library cannot be found, the part library cannot be loaded.
*/
virtual void EnumerateSymbolLib( std::vector<LIB_PART*>& aSymbolList,
const wxString& aLibraryPath,
const PROPERTIES* aProperties = NULL );
const wxString& aLibraryPath,
const PROPERTIES* aProperties = nullptr );
/**
* Load a #LIB_PART object having \a aPartName from the \a aLibraryPath containing
@ -308,12 +305,12 @@ public:
* is thrown in the case where aAliasName cannot be found.
*/
virtual LIB_PART* LoadSymbol( const wxString& aLibraryPath, const wxString& aPartName,
const PROPERTIES* aProperties = NULL );
const PROPERTIES* aProperties = nullptr );
/**
* Write \a aSymbol to an existing library located at \a aLibraryPath. If a #LIB_PART
* by the same name already exists or there are any conflicting alias names, the new
* #LIB_PART will silently overwrite any existing aliases and/or part becaue libraries
* #LIB_PART will silently overwrite any existing aliases and/or part because libraries
* cannot have duplicate alias names. It is the responsibility of the caller to check
* the library for conflicts before saving.
*
@ -332,7 +329,7 @@ public:
* @throw IO_ERROR if there is a problem saving.
*/
virtual void SaveSymbol( const wxString& aLibraryPath, const LIB_PART* aSymbol,
const PROPERTIES* aProperties = NULL );
const PROPERTIES* aProperties = nullptr );
/**
* Delete the entire #LIB_PART associated with \a aAliasName from the library
@ -353,7 +350,7 @@ public:
* @throw IO_ERROR if there is a problem finding the alias or the library or deleting it.
*/
virtual void DeleteSymbol( const wxString& aLibraryPath, const wxString& aSymbolName,
const PROPERTIES* aProperties = NULL );
const PROPERTIES* aProperties = nullptr );
/**
* Create a new empty symbol library at \a aLibraryPath. It is an error to attempt
@ -371,7 +368,7 @@ public:
* @throw IO_ERROR if there is a problem finding the library, or creating it.
*/
virtual void CreateSymbolLib( const wxString& aLibraryPath,
const PROPERTIES* aProperties = NULL );
const PROPERTIES* aProperties = nullptr );
/**
* Delete an existing symbol library and returns true if successful, or if library
@ -393,7 +390,7 @@ public:
* @throw IO_ERROR if there is a problem deleting an existing library.
*/
virtual bool DeleteSymbolLib( const wxString& aLibraryPath,
const PROPERTIES* aProperties = NULL );
const PROPERTIES* aProperties = nullptr );
/**
* Return true if the library at \a aLibraryPath is writable. (Often
@ -478,7 +475,7 @@ public:
SCH_PLUGIN_RELEASER( const SCH_PLUGIN_RELEASER& aOther ) {}
public:
SCH_PLUGIN_RELEASER( SCH_PLUGIN* aPlugin = NULL ) :
SCH_PLUGIN_RELEASER( SCH_PLUGIN* aPlugin = nullptr ) :
plugin( aPlugin )
{
}
@ -492,7 +489,7 @@ public:
void release()
{
SCH_IO_MGR::ReleasePlugin( plugin );
plugin = NULL;
plugin = nullptr;
}
void set( SCH_PLUGIN* aPlugin )

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2004-2020 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2021 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
@ -86,19 +86,6 @@ enum DANGLING_END_T
*/
class DANGLING_END_ITEM
{
private:
/// A pointer to the connectable object.
EDA_ITEM* m_item;
/// The position of the connection point.
wxPoint m_pos;
/// The type of connection of #m_item.
DANGLING_END_T m_type;
/// A pointer to the parent object (in the case of pins)
const EDA_ITEM* m_parent;
public:
DANGLING_END_ITEM( DANGLING_END_T aType, EDA_ITEM* aItem, const wxPoint& aPosition )
{
@ -143,6 +130,19 @@ public:
EDA_ITEM* GetItem() const { return m_item; }
const EDA_ITEM* GetParent() const { return m_parent; }
DANGLING_END_T GetType() const { return m_type; }
private:
/// A pointer to the connectable object.
EDA_ITEM* m_item;
/// The position of the connection point.
wxPoint m_pos;
/// The type of connection of #m_item.
DANGLING_END_T m_type;
/// A pointer to the parent object (in the case of pins)
const EDA_ITEM* m_parent;
};
@ -154,10 +154,6 @@ typedef std::unordered_set<SCH_ITEM*> SCH_ITEM_SET;
*/
class STROKE_PARAMS
{
int m_width;
PLOT_DASH_TYPE m_plotstyle;
COLOR4D m_color;
public:
STROKE_PARAMS( int aWidth = Mils2iu( DEFAULT_LINE_THICKNESS ),
PLOT_DASH_TYPE aPlotStyle = PLOT_DASH_TYPE::DEFAULT,
@ -183,6 +179,11 @@ public:
|| m_plotstyle != aOther.m_plotstyle
|| m_color != aOther.m_color;
}
private:
int m_width;
PLOT_DASH_TYPE m_plotstyle;
COLOR4D m_color;
};
@ -195,23 +196,6 @@ public:
*/
class SCH_ITEM : public EDA_ITEM
{
friend class CONNECTION_GRAPH;
protected:
SCH_LAYER_ID m_layer;
EDA_ITEMS m_connections; // List of items connected to this item.
FIELDS_AUTOPLACED m_fieldsAutoplaced; // indicates status of field autoplacement
wxPoint m_storedPos; // a temporary variable used in some move commands
// to store a initial pos of the item or mouse cursor
/// Stores pointers to other items that are connected to this one, per sheet
std::unordered_map<SCH_SHEET_PATH, SCH_ITEM_SET> m_connected_items;
/// Stores connectivity information, per sheet
std::unordered_map<SCH_SHEET_PATH, SCH_CONNECTION*> m_connection_map;
bool m_connectivity_dirty;
public:
SCH_ITEM( EDA_ITEM* aParent, KICAD_T aType );
@ -226,7 +210,7 @@ public:
/**
* Swap the internal data structures \a aItem with the schematic item.
* Obviously, aItem must have the same type than me
* Obviously, aItem must have the same type than me.
* @param aItem The item to swap the data structures with.
*/
virtual void SwapData( SCH_ITEM* aItem );
@ -236,7 +220,7 @@ public:
* The new object is not put in draw list (not linked).
*
* @param doClone (default = false) indicates unique values (such as timestamp and
* sheet name) should be duplicated. Use only for undo/redo operations.
* sheet name) should be duplicated. Use only for undo/redo operations.
*/
SCH_ITEM* Duplicate( bool doClone = false ) const;
@ -252,30 +236,31 @@ public:
void SetStoredPos( wxPoint aPos ) { m_storedPos = aPos; }
/**
* Searches the item hierarchy to find a SCHEMATIC
* Searches the item hierarchy to find a SCHEMATIC.
*
* Every SCH_ITEM that lives on a SCH_SCREEN should be parented to either that screen
* or another SCH_ITEM on the same screen (for example, pins to their symbols).
*
* Every SCH_SCREEN should be parented to the SCHEMATIC.
* Note that this hierarchy is not the same as the sheet hierarchy!
*
* @return the parent schematic this item lives on, or nullptr
* @note This hierarchy is not the same as the sheet hierarchy!
*
* @return the parent schematic this item lives on, or nullptr.
*/
SCHEMATIC* Schematic() const;
/**
* @return bool - true if the object is locked, else false
* @return true if the object is locked, else false.
*/
virtual bool IsLocked() const { return false; }
/**
* Set the 'lock' status to \a aLocked for of this item.
* Set the 'lock' status to \a aLocked for of this item.
*/
virtual void SetLocked( bool aLocked ) {}
/**
* Allows items to support hypertext actions when hovered/clicked.
* Allow items to support hypertext actions when hovered/clicked.
*/
virtual bool IsHypertext() const { return false; }
@ -308,7 +293,8 @@ public:
*
* Each schematic item should have its own method
*
* @param aOffset drawing offset (usually {0,0} but can be different when moving an object)
* @param aOffset is the drawing offset (usually {0,0} but can be different when moving an
* object).
*/
virtual void Print( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset ) = 0;
@ -340,7 +326,7 @@ public:
* dangling end ( no connect ), override this method to provide the correct end
* points.
*
* @param aItemList - List of DANGLING_END_ITEMS to add to.
* @param aItemList is the list of DANGLING_END_ITEMS to add to.
*/
virtual void GetEndPoints( std::vector< DANGLING_END_ITEM >& aItemList ) {}
@ -353,11 +339,11 @@ public:
* always returns false. Only override the method if the item can be tested for a
* dangling state.
*
* If aSheet is passed a non-null pointer to a SCH_SHEET_PATH, the overrided method can
* If aSheet is passed a non-null pointer to a SCH_SHEET_PATH, the overridden method can
* optionally use it to update sheet-local connectivity information
*
* @param aItemList - List of items to test item against.
* @param aSheet - Sheet path to update connections for
* @param aItemList is the list of items to test item against.
* @param aSheet is the sheet path to update connections for.
* @return True if the dangling state has changed from it's current setting.
*/
virtual bool UpdateDanglingState( std::vector<DANGLING_END_ITEM>& aItemList,
@ -376,7 +362,8 @@ public:
virtual bool IsConnectable() const { return false; }
/**
* @return true if the given point can start drawing (usually means the anchor is unused/free/dangling)
* @return true if the given point can start drawing (usually means the anchor is
* unused/free/dangling).
*/
virtual bool IsPointClickableAnchor( const wxPoint& aPos ) const { return false; }
@ -385,7 +372,7 @@ public:
*
* Not all schematic items have connection points so the default method does nothing.
*
* @param aPoints List of connection points to add to.
* @param aPoints is the list of connection points to add to.
*/
virtual std::vector<wxPoint> GetConnectionPoints() const { return {}; }
@ -400,37 +387,37 @@ public:
/**
* Test the item to see if it is connected to \a aPoint.
*
* @param aPoint A reference to a wxPoint object containing the coordinates to test.
* @param aPoint is a reference to a wxPoint object containing the coordinates to test.
* @return True if connection to \a aPoint exists.
*/
bool IsConnected( const wxPoint& aPoint ) const;
/**
* Retrieve the connection associated with this object in the given sheet
* Retrieve the connection associated with this object in the given sheet.
*
* @note The returned value can be nullptr.
*/
SCH_CONNECTION* Connection( const SCH_SHEET_PATH* aSheet = nullptr ) const;
/**
* Retrieves the set of items connected to this item on the given sheet
* Retrieve the set of items connected to this item on the given sheet.
*/
SCH_ITEM_SET& ConnectedItems( const SCH_SHEET_PATH& aPath );
/**
* Adds a connection link between this item and another
* Add a connection link between this item and another.
*/
void AddConnectionTo( const SCH_SHEET_PATH& aPath, SCH_ITEM* aItem );
/**
* Creates a new connection object associated with this object
* Create a new connection object associated with this object.
*
* @param aPath is the sheet path to initialize
* @param aPath is the sheet path to initialize.
*/
SCH_CONNECTION* InitializeConnection( const SCH_SHEET_PATH& aPath, CONNECTION_GRAPH* aGraph );
/**
* Returns true if this item should propagate connection info to aItem
* Return true if this item should propagate connection info to \a aItem.
*/
virtual bool ConnectionPropagatesTo( const EDA_ITEM* aItem ) const { return true; }
@ -483,13 +470,15 @@ public:
/**
* Plot the schematic item to \a aPlotter.
*
* @param aPlotter A pointer to a #PLOTTER object.
* @param aPlotter is the #PLOTTER object to plot to.
*/
virtual void Plot( PLOTTER* aPlotter ) const;
virtual bool operator <( const SCH_ITEM& aItem ) const;
private:
friend class CONNECTION_GRAPH;
/**
* Provide the object specific test to see if it is connected to \a aPosition.
*
@ -500,10 +489,25 @@ private:
* which performs tests common to all schematic items before calling the
* item specific connection testing.
*
* @param aPosition A reference to a wxPoint object containing the test position.
* @param aPosition is a reference to a wxPoint object containing the test position.
* @return True if connection to \a aPosition exists.
*/
virtual bool doIsConnected( const wxPoint& aPosition ) const { return false; }
protected:
SCH_LAYER_ID m_layer;
EDA_ITEMS m_connections; // List of items connected to this item.
FIELDS_AUTOPLACED m_fieldsAutoplaced; // indicates status of field autoplacement
wxPoint m_storedPos; // a temporary variable used in some move commands
// to store a initial pos of the item or mouse cursor
/// Store pointers to other items that are connected to this one, per sheet.
std::unordered_map<SCH_SHEET_PATH, SCH_ITEM_SET> m_connected_items;
/// Store connectivity information, per sheet.
std::unordered_map<SCH_SHEET_PATH, SCH_CONNECTION*> m_connection_map;
bool m_connectivity_dirty;
};
#endif /* SCH_ITEM_H */

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2021 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
@ -34,10 +34,6 @@ class NETLIST_OBJECT_LIST;
class SCH_JUNCTION : public SCH_ITEM
{
wxPoint m_pos; // Position of the junction.
int m_diameter; // Diameter of the junction. Zero is user default.
COLOR4D m_color; // Color of the junction. #COLOR4D::UNSPECIFIED is user default.
public:
SCH_JUNCTION( const wxPoint& aPosition = wxPoint( 0, 0 ), int aDiameter = 0,
SCH_LAYER_ID aLayer = LAYER_JUNCTION );
@ -123,6 +119,10 @@ private:
bool doIsConnected( const wxPoint& aPosition ) const override;
SHAPE_CIRCLE getEffectiveShape() const;
wxPoint m_pos; ///< Position of the junction.
int m_diameter; ///< Diameter of the junction. Zero is user default.
COLOR4D m_color; ///< Color of the junction. #COLOR4D::UNSPECIFIED is user default.
};