2011-10-11 20:23:56 +00:00
|
|
|
/*
|
|
|
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
|
|
|
*
|
2015-02-28 16:56:09 +00:00
|
|
|
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
|
|
|
* Copyright (C) 2014 Dick Hollenbeck, dick@softplc.com
|
2017-11-18 13:10:32 +00:00
|
|
|
* Copyright (C) 2015 Wayne Stambaugh <stambaughw@gmail.com>
|
2019-04-22 10:14:47 +00:00
|
|
|
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
|
2011-10-11 20:23:56 +00:00
|
|
|
*
|
|
|
|
* 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 Free Software Foundation; either version 2
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, you may find one here:
|
|
|
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
|
|
* or you may search the http://www.gnu.org website for the version 2 license,
|
|
|
|
* or you may write to the Free Software Foundation, Inc.,
|
|
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|
|
|
*/
|
|
|
|
|
2007-05-06 16:03:28 +00:00
|
|
|
#ifndef COMPONENT_CLASS_H
|
|
|
|
#define COMPONENT_CLASS_H
|
|
|
|
|
2017-01-31 01:31:19 +00:00
|
|
|
#include <lib_id.h>
|
2007-05-06 16:03:28 +00:00
|
|
|
|
2012-01-23 04:33:36 +00:00
|
|
|
#include <sch_field.h>
|
|
|
|
#include <transform.h>
|
|
|
|
#include <general.h>
|
2015-06-08 00:07:42 +00:00
|
|
|
#include <vector>
|
2018-12-24 11:17:35 +00:00
|
|
|
#include <set>
|
2015-06-08 00:07:42 +00:00
|
|
|
#include <lib_draw_item.h>
|
2019-04-03 09:14:36 +00:00
|
|
|
#include <sch_pin.h>
|
2019-05-01 09:24:43 +00:00
|
|
|
#include <sch_base_frame.h>
|
2008-10-06 05:44:29 +00:00
|
|
|
|
2016-08-11 12:41:38 +00:00
|
|
|
class SCH_SCREEN;
|
2009-12-02 21:44:03 +00:00
|
|
|
class SCH_SHEET_PATH;
|
2011-04-27 19:44:32 +00:00
|
|
|
class LIB_ITEM;
|
2010-11-10 15:30:12 +00:00
|
|
|
class LIB_PIN;
|
Modular KiCad Blueprint Milestone B), major portions:
*) When kicad.exe closes a project, close any open KIFACEs so that they cannot
get disassociated from their true PROJECT.
*) Allow loading eeschema library editor from kicad.exe
*) Allow loading pcbnew library editor from kicad.exe
*) Rename LIB_COMPONENT to LIB_PART.
*) Add class PART_LIBS, and PART_LIB.
*) Make PART_LIBS non-global, i.e. PROJECT specific.
*) Implement "data on demand" for PART_LIBS
*) Implement "data on demand" for schematic SEARCH_STACK.
*) Use RSTRINGs to retain eeschema editor's notion of last library and part being edited.
*) Get rid of library search on every SCH_COMPONENT::Draw() call, instead use
a weak pointer.
*) Remove all chdir() calls so projects don't need to be CWD.
*) Romove APPEND support from OpenProjectFiles().
*) Make OpenProjectFiles() robust, even for creating new projects.
*) Load EESCHEMA colors in the KIWAY::OnKiwayStart() rather in window open,
and save them in the .eeschema config file, not in the project file.
*) Fix bug with wxDir() while accessing protected dirs in kicad.exe
*) Consolidate template copying into PROJECT class, not in kicad.exe source.
*) Generally untangle eeschema, making its libraries not global but rather
held in the PROJECT.
2014-08-13 20:28:54 +00:00
|
|
|
class LIB_PART;
|
2013-09-25 19:09:57 +00:00
|
|
|
class NETLIST_OBJECT_LIST;
|
2017-09-01 20:42:20 +00:00
|
|
|
class PART_LIB;
|
Modular KiCad Blueprint Milestone B), major portions:
*) When kicad.exe closes a project, close any open KIFACEs so that they cannot
get disassociated from their true PROJECT.
*) Allow loading eeschema library editor from kicad.exe
*) Allow loading pcbnew library editor from kicad.exe
*) Rename LIB_COMPONENT to LIB_PART.
*) Add class PART_LIBS, and PART_LIB.
*) Make PART_LIBS non-global, i.e. PROJECT specific.
*) Implement "data on demand" for PART_LIBS
*) Implement "data on demand" for schematic SEARCH_STACK.
*) Use RSTRINGs to retain eeschema editor's notion of last library and part being edited.
*) Get rid of library search on every SCH_COMPONENT::Draw() call, instead use
a weak pointer.
*) Remove all chdir() calls so projects don't need to be CWD.
*) Romove APPEND support from OpenProjectFiles().
*) Make OpenProjectFiles() robust, even for creating new projects.
*) Load EESCHEMA colors in the KIWAY::OnKiwayStart() rather in window open,
and save them in the .eeschema config file, not in the project file.
*) Fix bug with wxDir() while accessing protected dirs in kicad.exe
*) Consolidate template copying into PROJECT class, not in kicad.exe source.
*) Generally untangle eeschema, making its libraries not global but rather
held in the PROJECT.
2014-08-13 20:28:54 +00:00
|
|
|
class PART_LIBS;
|
2019-05-10 19:22:26 +00:00
|
|
|
class EE_COLLECTOR;
|
2016-07-06 09:22:56 +00:00
|
|
|
class SCH_SCREEN;
|
2017-03-09 23:33:39 +00:00
|
|
|
class SYMBOL_LIB_TABLE;
|
Modular KiCad Blueprint Milestone B), major portions:
*) When kicad.exe closes a project, close any open KIFACEs so that they cannot
get disassociated from their true PROJECT.
*) Allow loading eeschema library editor from kicad.exe
*) Allow loading pcbnew library editor from kicad.exe
*) Rename LIB_COMPONENT to LIB_PART.
*) Add class PART_LIBS, and PART_LIB.
*) Make PART_LIBS non-global, i.e. PROJECT specific.
*) Implement "data on demand" for PART_LIBS
*) Implement "data on demand" for schematic SEARCH_STACK.
*) Use RSTRINGs to retain eeschema editor's notion of last library and part being edited.
*) Get rid of library search on every SCH_COMPONENT::Draw() call, instead use
a weak pointer.
*) Remove all chdir() calls so projects don't need to be CWD.
*) Romove APPEND support from OpenProjectFiles().
*) Make OpenProjectFiles() robust, even for creating new projects.
*) Load EESCHEMA colors in the KIWAY::OnKiwayStart() rather in window open,
and save them in the .eeschema config file, not in the project file.
*) Fix bug with wxDir() while accessing protected dirs in kicad.exe
*) Consolidate template copying into PROJECT class, not in kicad.exe source.
*) Generally untangle eeschema, making its libraries not global but rather
held in the PROJECT.
2014-08-13 20:28:54 +00:00
|
|
|
|
2008-10-06 05:44:29 +00:00
|
|
|
|
2019-04-22 10:14:47 +00:00
|
|
|
/// A container for several SCH_PIN items
|
|
|
|
typedef std::vector<SCH_PIN> SCH_PINS;
|
2019-04-03 09:14:36 +00:00
|
|
|
|
2019-04-25 22:10:45 +00:00
|
|
|
/// A map from the libary pin pointer to the SCH_PIN's index
|
|
|
|
typedef std::unordered_map<LIB_PIN*, unsigned> SCH_PIN_MAP;
|
|
|
|
|
2009-12-02 21:44:03 +00:00
|
|
|
/// A container for several SCH_FIELD items
|
2016-06-29 15:09:55 +00:00
|
|
|
typedef std::vector<SCH_FIELD> SCH_FIELDS;
|
Modular KiCad Blueprint Milestone B), major portions:
*) When kicad.exe closes a project, close any open KIFACEs so that they cannot
get disassociated from their true PROJECT.
*) Allow loading eeschema library editor from kicad.exe
*) Allow loading pcbnew library editor from kicad.exe
*) Rename LIB_COMPONENT to LIB_PART.
*) Add class PART_LIBS, and PART_LIB.
*) Make PART_LIBS non-global, i.e. PROJECT specific.
*) Implement "data on demand" for PART_LIBS
*) Implement "data on demand" for schematic SEARCH_STACK.
*) Use RSTRINGs to retain eeschema editor's notion of last library and part being edited.
*) Get rid of library search on every SCH_COMPONENT::Draw() call, instead use
a weak pointer.
*) Remove all chdir() calls so projects don't need to be CWD.
*) Romove APPEND support from OpenProjectFiles().
*) Make OpenProjectFiles() robust, even for creating new projects.
*) Load EESCHEMA colors in the KIWAY::OnKiwayStart() rather in window open,
and save them in the .eeschema config file, not in the project file.
*) Fix bug with wxDir() while accessing protected dirs in kicad.exe
*) Consolidate template copying into PROJECT class, not in kicad.exe source.
*) Generally untangle eeschema, making its libraries not global but rather
held in the PROJECT.
2014-08-13 20:28:54 +00:00
|
|
|
|
2016-06-29 15:09:55 +00:00
|
|
|
typedef std::weak_ptr<LIB_PART> PART_REF;
|
2008-11-24 06:53:43 +00:00
|
|
|
|
|
|
|
|
2016-07-11 19:48:46 +00:00
|
|
|
extern std::string toUTFTildaText( const wxString& txt );
|
|
|
|
|
|
|
|
|
2008-03-20 01:50:21 +00:00
|
|
|
/**
|
|
|
|
* Class SCH_COMPONENT
|
|
|
|
* describes a real schematic component
|
2007-09-13 11:55:46 +00:00
|
|
|
*/
|
2008-03-20 01:50:21 +00:00
|
|
|
class SCH_COMPONENT : public SCH_ITEM
|
2007-05-06 16:03:28 +00:00
|
|
|
{
|
2015-12-13 16:56:47 +00:00
|
|
|
public:
|
|
|
|
enum AUTOPLACED { AUTOPLACED_NO = 0, AUTOPLACED_AUTO, AUTOPLACED_MANUAL };
|
2019-03-11 21:32:05 +00:00
|
|
|
|
2015-12-13 16:56:47 +00:00
|
|
|
private:
|
|
|
|
|
Modular KiCad Blueprint Milestone B), major portions:
*) When kicad.exe closes a project, close any open KIFACEs so that they cannot
get disassociated from their true PROJECT.
*) Allow loading eeschema library editor from kicad.exe
*) Allow loading pcbnew library editor from kicad.exe
*) Rename LIB_COMPONENT to LIB_PART.
*) Add class PART_LIBS, and PART_LIB.
*) Make PART_LIBS non-global, i.e. PROJECT specific.
*) Implement "data on demand" for PART_LIBS
*) Implement "data on demand" for schematic SEARCH_STACK.
*) Use RSTRINGs to retain eeschema editor's notion of last library and part being edited.
*) Get rid of library search on every SCH_COMPONENT::Draw() call, instead use
a weak pointer.
*) Remove all chdir() calls so projects don't need to be CWD.
*) Romove APPEND support from OpenProjectFiles().
*) Make OpenProjectFiles() robust, even for creating new projects.
*) Load EESCHEMA colors in the KIWAY::OnKiwayStart() rather in window open,
and save them in the .eeschema config file, not in the project file.
*) Fix bug with wxDir() while accessing protected dirs in kicad.exe
*) Consolidate template copying into PROJECT class, not in kicad.exe source.
*) Generally untangle eeschema, making its libraries not global but rather
held in the PROJECT.
2014-08-13 20:28:54 +00:00
|
|
|
wxPoint m_Pos;
|
2017-01-31 01:31:19 +00:00
|
|
|
|
|
|
|
///< Name and library where symbol was loaded from, i.e. "74xx:74LS00".
|
|
|
|
LIB_ID m_lib_id;
|
Modular KiCad Blueprint Milestone B), major portions:
*) When kicad.exe closes a project, close any open KIFACEs so that they cannot
get disassociated from their true PROJECT.
*) Allow loading eeschema library editor from kicad.exe
*) Allow loading pcbnew library editor from kicad.exe
*) Rename LIB_COMPONENT to LIB_PART.
*) Add class PART_LIBS, and PART_LIB.
*) Make PART_LIBS non-global, i.e. PROJECT specific.
*) Implement "data on demand" for PART_LIBS
*) Implement "data on demand" for schematic SEARCH_STACK.
*) Use RSTRINGs to retain eeschema editor's notion of last library and part being edited.
*) Get rid of library search on every SCH_COMPONENT::Draw() call, instead use
a weak pointer.
*) Remove all chdir() calls so projects don't need to be CWD.
*) Romove APPEND support from OpenProjectFiles().
*) Make OpenProjectFiles() robust, even for creating new projects.
*) Load EESCHEMA colors in the KIWAY::OnKiwayStart() rather in window open,
and save them in the .eeschema config file, not in the project file.
*) Fix bug with wxDir() while accessing protected dirs in kicad.exe
*) Consolidate template copying into PROJECT class, not in kicad.exe source.
*) Generally untangle eeschema, making its libraries not global but rather
held in the PROJECT.
2014-08-13 20:28:54 +00:00
|
|
|
|
|
|
|
int m_unit; ///< The unit for multiple part per package components.
|
|
|
|
int m_convert; ///< The alternate body style for components that have more than
|
|
|
|
///< one body style defined. Primarily used for components that
|
|
|
|
///< have a De Morgan conversion.
|
|
|
|
wxString m_prefix; ///< C, R, U, Q etc - the first character which typically indicates
|
|
|
|
///< what the component is. Determined, upon placement, from the
|
|
|
|
///< library component. Created upon file load, by the first
|
|
|
|
///< non-digits in the reference fields.
|
|
|
|
TRANSFORM m_transform; ///< The rotation/mirror transformation matrix.
|
|
|
|
SCH_FIELDS m_Fields; ///< Variable length list of fields.
|
|
|
|
|
|
|
|
PART_REF m_part; ///< points into the PROJECT's libraries to the LIB_PART for this component
|
2008-10-06 05:44:29 +00:00
|
|
|
|
2019-04-22 10:14:47 +00:00
|
|
|
SCH_PINS m_pins; ///< the component's pins
|
|
|
|
SCH_PIN_MAP m_pinMap; ///< the component's pins mapped by LIB_PIN*.
|
2015-06-08 00:07:42 +00:00
|
|
|
|
2015-12-13 16:56:47 +00:00
|
|
|
AUTOPLACED m_fieldsAutoplaced; ///< indicates status of field autoplacement
|
|
|
|
|
2019-04-09 01:54:41 +00:00
|
|
|
bool m_isInNetlist; ///< True if the component should appear in the netlist
|
|
|
|
|
2010-12-21 15:13:09 +00:00
|
|
|
/**
|
2011-01-07 19:24:24 +00:00
|
|
|
* Defines the hierarchical path and reference of the component. This allows support
|
|
|
|
* for hierarchical sheets that reference the same schematic. The format for the path
|
2010-12-31 19:47:39 +00:00
|
|
|
* is /<sheet time stamp>/<sheet time stamp>/.../&lscomponent time stamp>.
|
|
|
|
* A single / denotes the root sheet.
|
2008-04-15 19:38:19 +00:00
|
|
|
*/
|
2010-09-05 17:01:48 +00:00
|
|
|
wxArrayString m_PathsAndReferences;
|
2008-02-12 21:12:46 +00:00
|
|
|
|
2009-10-16 17:18:23 +00:00
|
|
|
void Init( const wxPoint& pos = wxPoint( 0, 0 ) );
|
|
|
|
|
2007-05-06 16:03:28 +00:00
|
|
|
public:
|
2010-11-03 14:13:15 +00:00
|
|
|
SCH_COMPONENT( const wxPoint& pos = wxPoint( 0, 0 ), SCH_ITEM* aParent = NULL );
|
2008-10-19 18:31:09 +00:00
|
|
|
|
2009-10-16 17:18:23 +00:00
|
|
|
/**
|
|
|
|
* Create schematic component from library component object.
|
|
|
|
*
|
Modular KiCad Blueprint Milestone B), major portions:
*) When kicad.exe closes a project, close any open KIFACEs so that they cannot
get disassociated from their true PROJECT.
*) Allow loading eeschema library editor from kicad.exe
*) Allow loading pcbnew library editor from kicad.exe
*) Rename LIB_COMPONENT to LIB_PART.
*) Add class PART_LIBS, and PART_LIB.
*) Make PART_LIBS non-global, i.e. PROJECT specific.
*) Implement "data on demand" for PART_LIBS
*) Implement "data on demand" for schematic SEARCH_STACK.
*) Use RSTRINGs to retain eeschema editor's notion of last library and part being edited.
*) Get rid of library search on every SCH_COMPONENT::Draw() call, instead use
a weak pointer.
*) Remove all chdir() calls so projects don't need to be CWD.
*) Romove APPEND support from OpenProjectFiles().
*) Make OpenProjectFiles() robust, even for creating new projects.
*) Load EESCHEMA colors in the KIWAY::OnKiwayStart() rather in window open,
and save them in the .eeschema config file, not in the project file.
*) Fix bug with wxDir() while accessing protected dirs in kicad.exe
*) Consolidate template copying into PROJECT class, not in kicad.exe source.
*) Generally untangle eeschema, making its libraries not global but rather
held in the PROJECT.
2014-08-13 20:28:54 +00:00
|
|
|
* @param aPart - library part to create schematic component from.
|
2018-11-22 21:30:36 +00:00
|
|
|
* @param aLibId - libId of alias to create.
|
Modular KiCad Blueprint Milestone B), major portions:
*) When kicad.exe closes a project, close any open KIFACEs so that they cannot
get disassociated from their true PROJECT.
*) Allow loading eeschema library editor from kicad.exe
*) Allow loading pcbnew library editor from kicad.exe
*) Rename LIB_COMPONENT to LIB_PART.
*) Add class PART_LIBS, and PART_LIB.
*) Make PART_LIBS non-global, i.e. PROJECT specific.
*) Implement "data on demand" for PART_LIBS
*) Implement "data on demand" for schematic SEARCH_STACK.
*) Use RSTRINGs to retain eeschema editor's notion of last library and part being edited.
*) Get rid of library search on every SCH_COMPONENT::Draw() call, instead use
a weak pointer.
*) Remove all chdir() calls so projects don't need to be CWD.
*) Romove APPEND support from OpenProjectFiles().
*) Make OpenProjectFiles() robust, even for creating new projects.
*) Load EESCHEMA colors in the KIWAY::OnKiwayStart() rather in window open,
and save them in the .eeschema config file, not in the project file.
*) Fix bug with wxDir() while accessing protected dirs in kicad.exe
*) Consolidate template copying into PROJECT class, not in kicad.exe source.
*) Generally untangle eeschema, making its libraries not global but rather
held in the PROJECT.
2014-08-13 20:28:54 +00:00
|
|
|
* @param aSheet - Schematic sheet the component is place into.
|
2009-10-16 17:18:23 +00:00
|
|
|
* @param unit - Part for components that have multiple parts per
|
|
|
|
* package.
|
|
|
|
* @param convert - Use the alternate body style for the schematic
|
|
|
|
* component.
|
|
|
|
* @param pos - Position to place new component.
|
|
|
|
* @param setNewItemFlag - Set the component IS_NEW and IS_MOVED flags.
|
|
|
|
*/
|
2018-11-22 21:30:36 +00:00
|
|
|
SCH_COMPONENT( LIB_PART& aPart, LIB_ID aLibId, SCH_SHEET_PATH* aSheet,
|
2009-10-16 17:18:23 +00:00
|
|
|
int unit = 0, int convert = 0,
|
2019-05-01 09:24:43 +00:00
|
|
|
const wxPoint& pos = wxPoint( 0, 0 ) );
|
2009-10-16 17:18:23 +00:00
|
|
|
|
2019-05-01 09:24:43 +00:00
|
|
|
SCH_COMPONENT( LIB_PART& aPart, SCH_SHEET_PATH* aSheet,
|
|
|
|
SCH_BASE_FRAME::COMPONENT_SELECTION& aSel,
|
|
|
|
const wxPoint& pos = wxPoint( 0, 0 ) );
|
2008-10-19 18:31:09 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Clones \a aComponent into a new schematic symbol object.
|
|
|
|
*
|
|
|
|
* All fields are copied as is except for the linked list management pointers
|
|
|
|
* which are set to NULL, and the SCH_FIELD's m_Parent pointers which are set
|
|
|
|
* to the new object.
|
|
|
|
*
|
|
|
|
* @param aComponent is the schematic symbol to clone.
|
2008-10-19 18:31:09 +00:00
|
|
|
*/
|
2010-12-21 15:13:09 +00:00
|
|
|
SCH_COMPONENT( const SCH_COMPONENT& aComponent );
|
2008-10-19 18:31:09 +00:00
|
|
|
|
2008-03-20 01:50:21 +00:00
|
|
|
~SCH_COMPONENT() { }
|
2008-02-26 19:19:54 +00:00
|
|
|
|
2018-12-24 11:17:35 +00:00
|
|
|
static inline bool ClassOf( const EDA_ITEM* aItem )
|
|
|
|
{
|
|
|
|
return aItem && SCH_COMPONENT_T == aItem->Type();
|
|
|
|
}
|
|
|
|
|
2016-09-25 17:06:49 +00:00
|
|
|
wxString GetClass() const override
|
2007-09-13 11:28:58 +00:00
|
|
|
{
|
2008-03-20 01:50:21 +00:00
|
|
|
return wxT( "SCH_COMPONENT" );
|
2007-09-13 11:28:58 +00:00
|
|
|
}
|
2007-09-13 11:55:46 +00:00
|
|
|
|
2016-07-11 19:48:46 +00:00
|
|
|
const wxArrayString& GetPathsAndReferences() const { return m_PathsAndReferences; }
|
|
|
|
|
2018-10-21 12:50:31 +00:00
|
|
|
void ViewGetLayers( int aLayers[], int& aCount ) const override;
|
|
|
|
|
2015-02-28 16:56:09 +00:00
|
|
|
/**
|
|
|
|
* Return true for items which are moved with the anchor point at mouse cursor
|
2017-06-27 15:22:25 +00:00
|
|
|
* and false for items moved with no reference to anchor.
|
|
|
|
*
|
|
|
|
* Usually return true for small items (labels, junctions) and false for items which can
|
|
|
|
* be large (hierarchical sheets, components).
|
|
|
|
*
|
|
|
|
* @return false for a component
|
2015-02-28 16:56:09 +00:00
|
|
|
*/
|
2016-09-25 17:06:49 +00:00
|
|
|
bool IsMovableFromAnchorPoint() override { return false; }
|
2015-02-28 16:56:09 +00:00
|
|
|
|
2017-01-31 01:31:19 +00:00
|
|
|
void SetLibId( const LIB_ID& aName, PART_LIBS* aLibs=NULL );
|
2017-09-01 20:42:20 +00:00
|
|
|
void SetLibId( const LIB_ID& aLibId, SYMBOL_LIB_TABLE* aSymLibTable, PART_LIB* aCacheLib );
|
2017-03-09 23:33:39 +00:00
|
|
|
|
2017-01-31 01:31:19 +00:00
|
|
|
const LIB_ID& GetLibId() const { return m_lib_id; }
|
Modular KiCad Blueprint Milestone B), major portions:
*) When kicad.exe closes a project, close any open KIFACEs so that they cannot
get disassociated from their true PROJECT.
*) Allow loading eeschema library editor from kicad.exe
*) Allow loading pcbnew library editor from kicad.exe
*) Rename LIB_COMPONENT to LIB_PART.
*) Add class PART_LIBS, and PART_LIB.
*) Make PART_LIBS non-global, i.e. PROJECT specific.
*) Implement "data on demand" for PART_LIBS
*) Implement "data on demand" for schematic SEARCH_STACK.
*) Use RSTRINGs to retain eeschema editor's notion of last library and part being edited.
*) Get rid of library search on every SCH_COMPONENT::Draw() call, instead use
a weak pointer.
*) Remove all chdir() calls so projects don't need to be CWD.
*) Romove APPEND support from OpenProjectFiles().
*) Make OpenProjectFiles() robust, even for creating new projects.
*) Load EESCHEMA colors in the KIWAY::OnKiwayStart() rather in window open,
and save them in the .eeschema config file, not in the project file.
*) Fix bug with wxDir() while accessing protected dirs in kicad.exe
*) Consolidate template copying into PROJECT class, not in kicad.exe source.
*) Generally untangle eeschema, making its libraries not global but rather
held in the PROJECT.
2014-08-13 20:28:54 +00:00
|
|
|
|
2017-03-04 00:04:43 +00:00
|
|
|
PART_REF& GetPartRef() { return m_part; }
|
|
|
|
|
2017-04-02 12:09:01 +00:00
|
|
|
/**
|
|
|
|
* Return information about the aliased parts
|
|
|
|
*/
|
2018-11-22 21:30:36 +00:00
|
|
|
wxString GetDescription() const;
|
2017-06-27 15:22:25 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Return the documentation text for the given part alias
|
|
|
|
*/
|
2018-11-22 21:30:36 +00:00
|
|
|
wxString GetDatasheet() const;
|
2017-04-02 12:09:01 +00:00
|
|
|
|
Modular KiCad Blueprint Milestone B), major portions:
*) When kicad.exe closes a project, close any open KIFACEs so that they cannot
get disassociated from their true PROJECT.
*) Allow loading eeschema library editor from kicad.exe
*) Allow loading pcbnew library editor from kicad.exe
*) Rename LIB_COMPONENT to LIB_PART.
*) Add class PART_LIBS, and PART_LIB.
*) Make PART_LIBS non-global, i.e. PROJECT specific.
*) Implement "data on demand" for PART_LIBS
*) Implement "data on demand" for schematic SEARCH_STACK.
*) Use RSTRINGs to retain eeschema editor's notion of last library and part being edited.
*) Get rid of library search on every SCH_COMPONENT::Draw() call, instead use
a weak pointer.
*) Remove all chdir() calls so projects don't need to be CWD.
*) Romove APPEND support from OpenProjectFiles().
*) Make OpenProjectFiles() robust, even for creating new projects.
*) Load EESCHEMA colors in the KIWAY::OnKiwayStart() rather in window open,
and save them in the .eeschema config file, not in the project file.
*) Fix bug with wxDir() while accessing protected dirs in kicad.exe
*) Consolidate template copying into PROJECT class, not in kicad.exe source.
*) Generally untangle eeschema, making its libraries not global but rather
held in the PROJECT.
2014-08-13 20:28:54 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Assigns the current #LIB_PART from \a aLibs which this symbol is based on.
|
|
|
|
*
|
Modular KiCad Blueprint Milestone B), major portions:
*) When kicad.exe closes a project, close any open KIFACEs so that they cannot
get disassociated from their true PROJECT.
*) Allow loading eeschema library editor from kicad.exe
*) Allow loading pcbnew library editor from kicad.exe
*) Rename LIB_COMPONENT to LIB_PART.
*) Add class PART_LIBS, and PART_LIB.
*) Make PART_LIBS non-global, i.e. PROJECT specific.
*) Implement "data on demand" for PART_LIBS
*) Implement "data on demand" for schematic SEARCH_STACK.
*) Use RSTRINGs to retain eeschema editor's notion of last library and part being edited.
*) Get rid of library search on every SCH_COMPONENT::Draw() call, instead use
a weak pointer.
*) Remove all chdir() calls so projects don't need to be CWD.
*) Romove APPEND support from OpenProjectFiles().
*) Make OpenProjectFiles() robust, even for creating new projects.
*) Load EESCHEMA colors in the KIWAY::OnKiwayStart() rather in window open,
and save them in the .eeschema config file, not in the project file.
*) Fix bug with wxDir() while accessing protected dirs in kicad.exe
*) Consolidate template copying into PROJECT class, not in kicad.exe source.
*) Generally untangle eeschema, making its libraries not global but rather
held in the PROJECT.
2014-08-13 20:28:54 +00:00
|
|
|
* @param aLibs is the current set of LIB_PARTs to choose from.
|
|
|
|
*/
|
|
|
|
bool Resolve( PART_LIBS* aLibs );
|
2010-12-14 15:56:30 +00:00
|
|
|
|
2017-09-01 20:42:20 +00:00
|
|
|
bool Resolve( SYMBOL_LIB_TABLE& aLibTable, PART_LIB* aCacheLib = NULL );
|
2017-06-27 15:22:25 +00:00
|
|
|
|
2019-05-10 19:22:26 +00:00
|
|
|
static void ResolveAll( const EE_COLLECTOR& aComponents, SYMBOL_LIB_TABLE& aLibTable,
|
2017-09-01 20:42:20 +00:00
|
|
|
PART_LIB* aCacheLib = NULL );
|
2017-06-27 15:22:25 +00:00
|
|
|
|
2010-12-14 15:56:30 +00:00
|
|
|
int GetUnit() const { return m_unit; }
|
|
|
|
|
2017-12-11 03:28:34 +00:00
|
|
|
/**
|
|
|
|
* Update the pin cache for all components in \a aComponents
|
|
|
|
*
|
|
|
|
* @param aComponents collector of components in screen
|
|
|
|
*/
|
2019-05-10 19:22:26 +00:00
|
|
|
static void UpdatePins( const EE_COLLECTOR& aComponents );
|
2017-12-11 03:28:34 +00:00
|
|
|
|
2019-03-11 21:32:05 +00:00
|
|
|
/**
|
|
|
|
* Updates the local cache of SCH_PIN_CONNECTION objects for each pin
|
|
|
|
*/
|
2019-04-03 09:14:36 +00:00
|
|
|
void UpdatePins( SCH_SHEET_PATH* aSheet = nullptr );
|
2019-03-11 21:32:05 +00:00
|
|
|
|
|
|
|
/**
|
2019-03-08 00:16:59 +00:00
|
|
|
* Retrieves the connection for a given pin of the component
|
2019-03-11 21:32:05 +00:00
|
|
|
*/
|
2019-03-08 00:16:59 +00:00
|
|
|
SCH_CONNECTION* GetConnectionForPin( LIB_PIN* aPin, const SCH_SHEET_PATH& aSheet );
|
2019-03-11 21:32:05 +00:00
|
|
|
|
2013-07-05 17:48:01 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Change the unit number to \a aUnit
|
|
|
|
*
|
|
|
|
* This has meaning only for symbols made up of multiple units per package.
|
|
|
|
*
|
|
|
|
* @note This also set the modified flag bit
|
|
|
|
*
|
|
|
|
* @param aUnit is the new unit to select.
|
2013-07-05 17:48:01 +00:00
|
|
|
*/
|
2010-12-14 15:56:30 +00:00
|
|
|
void SetUnit( int aUnit );
|
|
|
|
|
2013-07-05 17:48:01 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Change the unit number to \a aUnit without setting any internal flags.
|
|
|
|
* This has meaning only for symbols made up of multiple units per package.
|
|
|
|
*
|
|
|
|
* @note This also set the modified flag bit
|
|
|
|
*
|
|
|
|
* @param aUnit is the new unit to select.
|
2013-07-05 17:48:01 +00:00
|
|
|
*/
|
|
|
|
void UpdateUnit( int aUnit );
|
|
|
|
|
2010-12-14 15:56:30 +00:00
|
|
|
int GetConvert() const { return m_convert; }
|
|
|
|
|
|
|
|
void SetConvert( int aConvert );
|
|
|
|
|
|
|
|
wxString GetPrefix() const { return m_prefix; }
|
|
|
|
|
2016-07-06 09:22:56 +00:00
|
|
|
void SetPrefix( const wxString& aPrefix ) { m_prefix = aPrefix; }
|
|
|
|
|
2010-12-14 21:39:31 +00:00
|
|
|
TRANSFORM& GetTransform() const { return const_cast< TRANSFORM& >( m_transform ); }
|
|
|
|
|
|
|
|
void SetTransform( const TRANSFORM& aTransform );
|
2008-04-15 19:38:19 +00:00
|
|
|
|
2011-06-17 13:24:22 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Return the number of units per package of the symbol.
|
2011-06-17 13:24:22 +00:00
|
|
|
*
|
2017-06-27 15:22:25 +00:00
|
|
|
* @return the number of units per package or zero if the library entry cannot be found.
|
2011-06-17 13:24:22 +00:00
|
|
|
*/
|
Modular KiCad Blueprint Milestone B), major portions:
*) When kicad.exe closes a project, close any open KIFACEs so that they cannot
get disassociated from their true PROJECT.
*) Allow loading eeschema library editor from kicad.exe
*) Allow loading pcbnew library editor from kicad.exe
*) Rename LIB_COMPONENT to LIB_PART.
*) Add class PART_LIBS, and PART_LIB.
*) Make PART_LIBS non-global, i.e. PROJECT specific.
*) Implement "data on demand" for PART_LIBS
*) Implement "data on demand" for schematic SEARCH_STACK.
*) Use RSTRINGs to retain eeschema editor's notion of last library and part being edited.
*) Get rid of library search on every SCH_COMPONENT::Draw() call, instead use
a weak pointer.
*) Remove all chdir() calls so projects don't need to be CWD.
*) Romove APPEND support from OpenProjectFiles().
*) Make OpenProjectFiles() robust, even for creating new projects.
*) Load EESCHEMA colors in the KIWAY::OnKiwayStart() rather in window open,
and save them in the .eeschema config file, not in the project file.
*) Fix bug with wxDir() while accessing protected dirs in kicad.exe
*) Consolidate template copying into PROJECT class, not in kicad.exe source.
*) Generally untangle eeschema, making its libraries not global but rather
held in the PROJECT.
2014-08-13 20:28:54 +00:00
|
|
|
int GetUnitCount() const;
|
2011-06-17 13:24:22 +00:00
|
|
|
|
2010-12-14 21:39:31 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Compute the new transform matrix based on \a aOrientation for the symbol which is
|
2010-12-14 21:39:31 +00:00
|
|
|
* applied to the current transform.
|
2017-06-27 15:22:25 +00:00
|
|
|
*
|
|
|
|
* @param aOrientation is the orientation to apply to the transform.
|
2010-12-14 21:39:31 +00:00
|
|
|
*/
|
2010-12-10 19:47:44 +00:00
|
|
|
void SetOrientation( int aOrientation );
|
2010-01-13 21:15:54 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Get the display symbol orientation.
|
|
|
|
*
|
|
|
|
* Because there are different ways to have a given orientation/mirror,
|
|
|
|
* the orientation/mirror is not necessary what the user does. For example:
|
|
|
|
* a mirrorX then a mirrorY returns no mirror but a rotate. This function finds
|
|
|
|
* a rotation and a mirror value #CMP_MIRROR_X because this is the first mirror
|
|
|
|
* option tested. This can differs from the orientation made by an user. A
|
|
|
|
* #CMP_MIRROR_Y is returned as a #CMP_MIRROR_X with an orientation 180 because
|
|
|
|
* they are equivalent.
|
|
|
|
*
|
|
|
|
* @sa COMPONENT_ORIENTATION_T
|
|
|
|
*
|
|
|
|
* @return the orientation and mirror of the symbol.
|
2009-04-09 11:34:41 +00:00
|
|
|
*/
|
2011-03-25 19:16:05 +00:00
|
|
|
int GetOrientation();
|
2009-04-09 11:34:41 +00:00
|
|
|
|
2018-04-10 10:52:12 +00:00
|
|
|
void GetMsgPanelInfo( EDA_UNITS_T aUnits, std::vector< MSG_PANEL_ITEM >& aList ) override;
|
2008-10-06 05:44:29 +00:00
|
|
|
|
2008-04-21 06:34:56 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Clear exiting component annotation.
|
|
|
|
*
|
|
|
|
* For example, IC23 would be changed to IC? and unit number would be reset.
|
|
|
|
*
|
|
|
|
* @param aSheetPath is the hierarchical path of the symbol to clear or remove all
|
|
|
|
* annotations for this symbol if NULL.
|
2008-04-21 06:34:56 +00:00
|
|
|
*/
|
2016-02-15 20:22:45 +00:00
|
|
|
void ClearAnnotation( SCH_SHEET_PATH* aSheetPath );
|
2008-04-21 06:34:56 +00:00
|
|
|
|
2018-09-03 10:11:39 +00:00
|
|
|
/**
|
|
|
|
* Add aSheetPath in m_PathsAndReferences alternate references list,
|
|
|
|
* if this entry does not exist
|
|
|
|
* Do nothing if already exists.
|
|
|
|
* In component lists shared by more than one sheet path, an entry for each
|
|
|
|
* sheet path must exist to manage references
|
|
|
|
* @param aSheetPathName is the candidate sheet path name
|
2018-09-04 16:46:03 +00:00
|
|
|
* this sheet path is the sheet path of the sheet containing the component,
|
|
|
|
* not the full component sheet path
|
|
|
|
* @return false if the alternate reference was existing, true if added.
|
2018-09-03 10:11:39 +00:00
|
|
|
*/
|
2018-09-04 16:46:03 +00:00
|
|
|
bool AddSheetPathReferenceEntryIfMissing( const wxString& aSheetPathName );
|
2018-09-03 10:11:39 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Change the time stamp to \a aNewTimeStamp and updates the reference path.
|
|
|
|
*
|
2010-12-14 21:39:31 +00:00
|
|
|
* @see m_PathsAndReferences
|
2017-06-27 15:22:25 +00:00
|
|
|
*
|
2009-04-25 10:12:30 +00:00
|
|
|
* @param aNewTimeStamp = new time stamp
|
|
|
|
*/
|
2017-12-07 08:29:10 +00:00
|
|
|
void SetTimeStamp( timestamp_t aNewTimeStamp );
|
2009-04-25 10:12:30 +00:00
|
|
|
|
2018-12-31 12:54:26 +00:00
|
|
|
/**
|
|
|
|
* Clear the HIGHLIGHTED flag of all items of the component
|
|
|
|
* (fields, pins ...)
|
|
|
|
*/
|
|
|
|
void ClearAllHighlightFlags();
|
|
|
|
|
2016-09-25 17:06:49 +00:00
|
|
|
const EDA_RECT GetBoundingBox() const override;
|
2007-09-13 11:55:46 +00:00
|
|
|
|
2015-12-13 16:56:47 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Return a bounding box for the symbol body but not the fields.
|
2015-12-13 16:56:47 +00:00
|
|
|
*/
|
|
|
|
EDA_RECT GetBodyBoundingBox() const;
|
|
|
|
|
|
|
|
|
2010-06-17 16:30:10 +00:00
|
|
|
//-----<Fields>-----------------------------------------------------------
|
|
|
|
|
2008-10-06 05:44:29 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Returns a field in this symbol.
|
|
|
|
*
|
|
|
|
* @param aFieldNdx is the index into the array of fields, not a field id.
|
|
|
|
*
|
|
|
|
* @return is the field at \a aFieldNdx or NULL if the field does not exist.
|
2008-10-06 05:44:29 +00:00
|
|
|
*/
|
2009-12-02 21:44:03 +00:00
|
|
|
SCH_FIELD* GetField( int aFieldNdx ) const;
|
2007-09-20 21:06:49 +00:00
|
|
|
|
2017-04-02 12:09:01 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Search for a field named \a aFieldName and returns text associated with this field.
|
|
|
|
*
|
2017-06-21 07:32:19 +00:00
|
|
|
* @param aFieldName is the name of the field
|
2017-04-02 12:09:01 +00:00
|
|
|
*/
|
2018-05-29 21:46:13 +00:00
|
|
|
wxString GetFieldText( const wxString& aFieldName, SCH_EDIT_FRAME* aFrame ) const;
|
2017-04-02 12:09:01 +00:00
|
|
|
|
2015-12-13 16:56:47 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Populates a std::vector with SCH_FIELDs.
|
|
|
|
*
|
|
|
|
* @param aVector is the vector to populate.
|
|
|
|
* @param aVisibleOnly is used to add only the fields that are visible and contain text.
|
2015-12-13 16:56:47 +00:00
|
|
|
*/
|
|
|
|
void GetFields( std::vector<SCH_FIELD*>& aVector, bool aVisibleOnly );
|
|
|
|
|
2007-09-20 21:06:49 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Add a field to the symbol.
|
|
|
|
*
|
|
|
|
* @param aField is the field to add to this symbol.
|
|
|
|
*
|
|
|
|
* @return the newly inserted field.
|
2010-06-17 16:30:10 +00:00
|
|
|
*/
|
|
|
|
SCH_FIELD* AddField( const SCH_FIELD& aField );
|
|
|
|
|
2018-07-31 21:59:43 +00:00
|
|
|
/**
|
|
|
|
* Removes a user field from the symbol.
|
|
|
|
* @param aFieldName is the user fieldName to remove. Attempts to remove a mandatory
|
|
|
|
* field or a non-existant field are silently ignored.
|
|
|
|
*/
|
|
|
|
void RemoveField( const wxString& aFieldName );
|
|
|
|
|
2010-06-17 16:30:10 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Search for a #SCH_FIELD with \a aFieldName
|
|
|
|
*
|
|
|
|
* @param aFieldName is the name of the field to find.
|
|
|
|
* @param aIncludeDefaultFields searches the library symbol default fields if true.
|
|
|
|
*
|
|
|
|
* @return the field if found or NULL if the field was not found.
|
2007-09-20 21:06:49 +00:00
|
|
|
*/
|
2017-05-22 14:05:36 +00:00
|
|
|
SCH_FIELD* FindField( const wxString& aFieldName, bool aIncludeDefaultFields = true );
|
2007-09-20 21:06:49 +00:00
|
|
|
|
2017-06-27 15:22:25 +00:00
|
|
|
/**
|
|
|
|
* Set multiple schematic fields.
|
|
|
|
*
|
|
|
|
* @param aFields are the fields to set in this symbol.
|
|
|
|
*/
|
2009-12-02 21:44:03 +00:00
|
|
|
void SetFields( const SCH_FIELDS& aFields )
|
2008-11-26 00:20:16 +00:00
|
|
|
{
|
|
|
|
m_Fields = aFields; // vector copying, length is changed possibly
|
|
|
|
}
|
2017-06-27 15:22:25 +00:00
|
|
|
|
2017-08-25 13:27:06 +00:00
|
|
|
/**
|
|
|
|
* Restores fields to the original library values.
|
|
|
|
* @param aResetStyle selects whether fields should reset the position and text attribute.
|
|
|
|
* @param aResetRef selects whether the reference field should be restored.
|
|
|
|
*/
|
|
|
|
void UpdateFields( bool aResetStyle, bool aResetRef = false );
|
|
|
|
|
2008-10-06 05:44:29 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Return the number of fields in this symbol.
|
2008-10-06 05:44:29 +00:00
|
|
|
*/
|
2016-07-11 19:48:46 +00:00
|
|
|
int GetFieldCount() const { return (int)m_Fields.size(); }
|
2008-02-26 19:19:54 +00:00
|
|
|
|
2015-12-13 16:56:47 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Return whether the fields have been automatically placed.
|
2015-12-13 16:56:47 +00:00
|
|
|
*/
|
|
|
|
AUTOPLACED GetFieldsAutoplaced() const { return m_fieldsAutoplaced; }
|
|
|
|
|
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Set fields automatically placed flag false.
|
2015-12-13 16:56:47 +00:00
|
|
|
*/
|
|
|
|
void ClearFieldsAutoplaced() { m_fieldsAutoplaced = AUTOPLACED_NO; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Automatically orient all the fields in the component.
|
2017-06-27 15:22:25 +00:00
|
|
|
*
|
|
|
|
* @param aScreen is the SCH_SCREEN associated with the current instance of the
|
|
|
|
* component. This can be NULL when aManual is false.
|
|
|
|
* @param aManual should be true if the autoplace was manually initiated (e.g. by a hotkey
|
2015-12-13 16:56:47 +00:00
|
|
|
* or a menu item). Some more 'intelligent' routines will be used that would be
|
|
|
|
* annoying if done automatically during moves.
|
|
|
|
*/
|
|
|
|
void AutoplaceFields( SCH_SCREEN* aScreen, bool aManual );
|
|
|
|
|
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Autoplace fields only if correct to do so automatically.
|
|
|
|
*
|
|
|
|
* Fields that have been moved by hand are not automatically placed.
|
2017-06-30 07:50:49 +00:00
|
|
|
*
|
2017-06-27 15:22:25 +00:00
|
|
|
* @param aScreen is the SCH_SCREEN associated with the current instance of the
|
|
|
|
* component.
|
2015-12-13 16:56:47 +00:00
|
|
|
*/
|
|
|
|
void AutoAutoplaceFields( SCH_SCREEN* aScreen )
|
|
|
|
{
|
|
|
|
if( GetFieldsAutoplaced() )
|
|
|
|
AutoplaceFields( aScreen, GetFieldsAutoplaced() == AUTOPLACED_MANUAL );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//-----</Fields>----------------------------------------------------------
|
|
|
|
|
|
|
|
|
2009-10-30 19:26:25 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Find a symbol pin by number.
|
|
|
|
*
|
|
|
|
* @param number is the number of the pin to find.
|
2009-10-30 19:26:25 +00:00
|
|
|
*
|
|
|
|
* @return Pin object if found, otherwise NULL.
|
|
|
|
*/
|
|
|
|
LIB_PIN* GetPin( const wxString& number );
|
|
|
|
|
2015-12-13 16:56:47 +00:00
|
|
|
/**
|
2019-04-03 09:14:36 +00:00
|
|
|
* Populate a vector with all the pins from the library object.
|
2017-06-27 15:22:25 +00:00
|
|
|
*
|
|
|
|
* @param aPinsList is the list to populate with all of the pins.
|
2015-12-13 16:56:47 +00:00
|
|
|
*/
|
|
|
|
void GetPins( std::vector<LIB_PIN*>& aPinsList );
|
|
|
|
|
2019-04-22 10:14:47 +00:00
|
|
|
SCH_PINS& GetPins() { return m_pins; }
|
2018-08-30 19:44:10 +00:00
|
|
|
|
2015-02-28 16:56:09 +00:00
|
|
|
/**
|
2019-04-04 22:49:49 +00:00
|
|
|
* Draw a component
|
2017-06-30 07:50:49 +00:00
|
|
|
*
|
2017-06-27 15:22:25 +00:00
|
|
|
* @param aPanel is the panel to use (can be null) mainly used for clipping purposes.
|
|
|
|
* @param aDC is the device context (can be null)
|
|
|
|
* @param aOffset is the drawing offset (usually wxPoint(0,0),
|
2015-02-28 16:56:09 +00:00
|
|
|
* but can be different when moving an object)
|
2019-04-04 22:49:49 +00:00
|
|
|
*/
|
|
|
|
void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset ) override;
|
2010-09-05 17:01:48 +00:00
|
|
|
|
2016-09-24 18:53:15 +00:00
|
|
|
void SwapData( SCH_ITEM* aItem ) override;
|
2007-09-13 11:55:46 +00:00
|
|
|
|
2016-02-15 20:22:45 +00:00
|
|
|
// returns a unique ID, in the form of a path.
|
|
|
|
wxString GetPath( const SCH_SHEET_PATH* sheet ) const;
|
2008-10-06 05:44:29 +00:00
|
|
|
|
2011-05-31 16:29:14 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Tests for an acceptable reference string.
|
|
|
|
*
|
|
|
|
* An acceptable reference string must support unannotation i.e starts by letter
|
|
|
|
*
|
|
|
|
* @param aReferenceString is the reference string to validate
|
|
|
|
*
|
|
|
|
* @return true if reference string is valid.
|
2011-05-31 16:29:14 +00:00
|
|
|
*/
|
2011-12-14 17:25:42 +00:00
|
|
|
static bool IsReferenceStringValid( const wxString& aReferenceString );
|
2011-05-31 16:29:14 +00:00
|
|
|
|
2008-11-24 06:53:43 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Return the reference for the given sheet path.
|
|
|
|
*
|
|
|
|
* @return the reference for the sheet.
|
2008-11-24 06:53:43 +00:00
|
|
|
*/
|
2017-06-27 15:22:25 +00:00
|
|
|
const wxString GetRef( const SCH_SHEET_PATH* aSheet );
|
2008-10-06 05:44:29 +00:00
|
|
|
|
2011-05-31 16:29:14 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Set the reference for the given sheet path for this symbol.
|
|
|
|
*
|
|
|
|
* @param aSheet is the hierarchical path of the reference.
|
|
|
|
* @param aReference is the new reference for the symbol.
|
2011-05-31 16:29:14 +00:00
|
|
|
*/
|
2017-06-27 15:22:25 +00:00
|
|
|
void SetRef( const SCH_SHEET_PATH* aSheet, const wxString& aReference );
|
2008-10-06 05:44:29 +00:00
|
|
|
|
2019-05-19 15:40:14 +00:00
|
|
|
/**
|
|
|
|
* Checks if the component has a valid annotation (reference) for the given sheet path
|
|
|
|
* @param aSheet is the sheet path to test
|
|
|
|
* @return true if the component exists on that sheet and has a valid reference
|
|
|
|
*/
|
|
|
|
bool IsAnnotated( const SCH_SHEET_PATH* aSheet );
|
|
|
|
|
2008-10-06 05:44:29 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Add a full hierarchical reference to this symbol.
|
|
|
|
*
|
|
|
|
* @param aPath is the hierarchical path (/<sheet timestamp>/<component
|
2010-12-14 15:56:30 +00:00
|
|
|
* timestamp> like /05678E50/A23EF560)
|
2017-06-27 15:22:25 +00:00
|
|
|
* @param aRef is the local reference like C45, R56
|
|
|
|
* @param aMulti is the unit selection used for symbols with multiple units per package.
|
2008-04-16 08:40:31 +00:00
|
|
|
*/
|
2011-03-25 19:16:05 +00:00
|
|
|
void AddHierarchicalReference( const wxString& aPath,
|
|
|
|
const wxString& aRef,
|
|
|
|
int aMulti );
|
2008-10-06 05:44:29 +00:00
|
|
|
|
2016-02-15 20:16:54 +00:00
|
|
|
// returns the unit selection, for the given sheet path.
|
2016-02-15 20:17:51 +00:00
|
|
|
int GetUnitSelection( SCH_SHEET_PATH* aSheet );
|
2008-10-06 05:44:29 +00:00
|
|
|
|
2016-02-15 20:16:54 +00:00
|
|
|
// Set the unit selection, for the given sheet path.
|
|
|
|
void SetUnitSelection( SCH_SHEET_PATH* aSheet, int aUnitSelection );
|
2008-02-26 19:19:54 +00:00
|
|
|
|
2009-07-27 14:32:40 +00:00
|
|
|
// Geometric transforms (used in block operations):
|
2010-09-05 17:01:48 +00:00
|
|
|
|
2016-09-25 17:06:49 +00:00
|
|
|
void Move( const wxPoint& aMoveVector ) override
|
2009-07-27 14:32:40 +00:00
|
|
|
{
|
2010-12-14 21:39:31 +00:00
|
|
|
if( aMoveVector == wxPoint( 0, 0 ) )
|
|
|
|
return;
|
|
|
|
|
2009-07-27 14:32:40 +00:00
|
|
|
m_Pos += aMoveVector;
|
2010-12-14 21:39:31 +00:00
|
|
|
|
2009-07-27 14:32:40 +00:00
|
|
|
for( int ii = 0; ii < GetFieldCount(); ii++ )
|
2009-12-02 21:44:03 +00:00
|
|
|
GetField( ii )->Move( aMoveVector );
|
2009-07-27 14:32:40 +00:00
|
|
|
|
2010-12-14 21:39:31 +00:00
|
|
|
SetModified();
|
|
|
|
}
|
2010-09-05 17:01:48 +00:00
|
|
|
|
2016-09-24 18:53:15 +00:00
|
|
|
void MirrorY( int aYaxis_position ) override;
|
|
|
|
void MirrorX( int aXaxis_position ) override;
|
|
|
|
void Rotate( wxPoint aPosition ) override;
|
2009-07-27 14:32:40 +00:00
|
|
|
|
2019-05-19 21:04:04 +00:00
|
|
|
bool Matches( wxFindReplaceData& aSearchData, void* aAuxData ) override;
|
2010-11-03 14:13:15 +00:00
|
|
|
|
2016-09-24 18:53:15 +00:00
|
|
|
void GetEndPoints( std::vector<DANGLING_END_ITEM>& aItemList ) override;
|
2010-11-03 14:13:15 +00:00
|
|
|
|
2015-07-20 19:49:32 +00:00
|
|
|
/**
|
2017-06-27 15:22:25 +00:00
|
|
|
* Test if the component's dangling state has changed for all pins.
|
|
|
|
*
|
|
|
|
* As a side effect, actually update the dangling status for all pins.
|
|
|
|
*
|
|
|
|
* @note This does not test for short circuits.
|
|
|
|
*
|
2017-06-30 07:50:49 +00:00
|
|
|
* @param aItemList is list of all #DANGLING_END_ITEM items to be tested.
|
2015-07-20 19:49:32 +00:00
|
|
|
*
|
|
|
|
* @return true if any pin's state has changed.
|
|
|
|
*/
|
2018-10-29 18:11:04 +00:00
|
|
|
bool UpdateDanglingState( std::vector<DANGLING_END_ITEM>& aItemList ) override;
|
2015-06-08 00:07:42 +00:00
|
|
|
|
2018-04-12 16:10:22 +00:00
|
|
|
wxPoint GetPinPhysicalPosition( const LIB_PIN* Pin ) const;
|
2010-11-03 14:13:15 +00:00
|
|
|
|
2016-09-25 17:06:49 +00:00
|
|
|
bool IsConnectable() const override { return true; }
|
2011-01-07 19:24:24 +00:00
|
|
|
|
2017-12-19 17:45:56 +00:00
|
|
|
bool CanConnect( const SCH_ITEM* aItem ) const override
|
|
|
|
{
|
|
|
|
return ( aItem->Type() == SCH_LINE_T && aItem->GetLayer() == LAYER_WIRE ) ||
|
|
|
|
( aItem->Type() == SCH_NO_CONNECT_T ) ||
|
2019-01-11 01:28:29 +00:00
|
|
|
( aItem->Type() == SCH_JUNCTION_T ) ||
|
|
|
|
( aItem->Type() == SCH_COMPONENT_T ) ;
|
2017-12-19 17:45:56 +00:00
|
|
|
}
|
|
|
|
|
2013-09-27 17:58:58 +00:00
|
|
|
/**
|
|
|
|
* @return true if the component is in netlist
|
|
|
|
* which means this is not a power component, or something
|
|
|
|
* like a component reference starting by #
|
|
|
|
*/
|
|
|
|
bool IsInNetlist() const;
|
|
|
|
|
2016-09-24 18:53:15 +00:00
|
|
|
void GetConnectionPoints( std::vector<wxPoint>& aPoints ) const override;
|
2010-03-16 18:22:59 +00:00
|
|
|
|
2016-07-12 19:05:54 +00:00
|
|
|
SEARCH_RESULT Visit( INSPECTOR inspector, void* testData, const KICAD_T scanTypes[] ) override;
|
2011-03-25 19:16:05 +00:00
|
|
|
|
2010-12-13 15:59:00 +00:00
|
|
|
/**
|
|
|
|
* Return the component library item at \a aPosition that is part of this component.
|
|
|
|
*
|
2017-06-27 15:22:25 +00:00
|
|
|
* @param aPosition is the schematic position of the component library object.
|
|
|
|
* @param aType is the type of symbol library object to find or any if set to TYPE_NOT_INIT.
|
|
|
|
*
|
|
|
|
* @return is the symbol library object if found otherwise NULL.
|
2010-12-13 15:59:00 +00:00
|
|
|
*/
|
2011-04-27 19:44:32 +00:00
|
|
|
LIB_ITEM* GetDrawItem( const wxPoint& aPosition, KICAD_T aType = TYPE_NOT_INIT );
|
2011-03-25 19:16:05 +00:00
|
|
|
|
2018-04-10 10:52:12 +00:00
|
|
|
wxString GetSelectMenuText( EDA_UNITS_T aUnits ) const override;
|
2011-03-25 19:16:05 +00:00
|
|
|
|
2017-02-20 12:20:39 +00:00
|
|
|
BITMAP_DEF GetMenuImage() const override;
|
2011-03-25 19:16:05 +00:00
|
|
|
|
2019-04-29 21:17:26 +00:00
|
|
|
void GetNetListItem( NETLIST_OBJECT_LIST& aNetListItems, SCH_SHEET_PATH* aSheetPath ) override;
|
2011-10-11 20:23:56 +00:00
|
|
|
|
2016-09-24 18:53:15 +00:00
|
|
|
bool operator <( const SCH_ITEM& aItem ) const override;
|
2011-03-25 19:16:05 +00:00
|
|
|
|
2012-02-22 21:37:34 +00:00
|
|
|
bool operator==( const SCH_COMPONENT& aComponent) const;
|
|
|
|
bool operator!=( const SCH_COMPONENT& aComponent) const;
|
|
|
|
|
2019-04-21 23:45:34 +00:00
|
|
|
SCH_COMPONENT& operator=( const SCH_ITEM& aItem );
|
2012-01-09 20:26:55 +00:00
|
|
|
|
2016-09-25 17:06:49 +00:00
|
|
|
bool IsReplaceable() const override { return true; }
|
2011-12-01 16:49:28 +00:00
|
|
|
|
2016-09-25 17:06:49 +00:00
|
|
|
wxPoint GetPosition() const override { return m_Pos; }
|
|
|
|
void SetPosition( const wxPoint& aPosition ) override { Move( aPosition - m_Pos ); }
|
2012-03-15 14:31:16 +00:00
|
|
|
|
2019-05-05 10:33:34 +00:00
|
|
|
bool HitTest( const wxPoint& aPosition, int aAccuracy = 0 ) const override;
|
|
|
|
bool HitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy = 0 ) const override;
|
2012-03-15 14:31:16 +00:00
|
|
|
|
2016-09-24 18:53:15 +00:00
|
|
|
void Plot( PLOTTER* aPlotter ) override;
|
2012-03-15 14:31:16 +00:00
|
|
|
|
2016-09-24 18:53:15 +00:00
|
|
|
EDA_ITEM* Clone() const override;
|
2012-03-17 14:39:27 +00:00
|
|
|
|
2010-12-10 19:47:44 +00:00
|
|
|
#if defined(DEBUG)
|
2016-09-25 17:06:49 +00:00
|
|
|
void Show( int nestLevel, std::ostream& os ) const override;
|
2008-02-26 19:19:54 +00:00
|
|
|
#endif
|
2010-12-10 19:47:44 +00:00
|
|
|
|
2019-03-08 00:16:59 +00:00
|
|
|
void ClearBrightenedPins();
|
|
|
|
|
|
|
|
bool HasBrightenedPins();
|
|
|
|
|
|
|
|
void BrightenPin( LIB_PIN* aPin );
|
|
|
|
|
2018-12-24 11:17:35 +00:00
|
|
|
void ClearHighlightedPins();
|
|
|
|
|
|
|
|
void HighlightPin( LIB_PIN* aPin );
|
|
|
|
|
2010-12-10 19:47:44 +00:00
|
|
|
private:
|
2016-09-24 18:53:15 +00:00
|
|
|
bool doIsConnected( const wxPoint& aPosition ) const override;
|
2007-05-06 16:03:28 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif /* COMPONENT_CLASS_H */
|