27#include <wx/hyperlink.h> 
   87#include <wx/combobox.h> 
  131    wxIconBundle icon_bundle;
 
  134    icon_bundle.AddIcon( icon );
 
  136    icon_bundle.AddIcon( icon );
 
  138    icon_bundle.AddIcon( icon );
 
  140    icon_bundle.AddIcon( icon );
 
  142    icon_bundle.AddIcon( icon );
 
  144    SetIcons( icon_bundle );
 
  165    GetCanvas()->GetViewControls()->SetCrossHairCursorPosition( 
VECTOR2D( 0, 0 ), 
false );
 
  198                      .Bottom().Layer( 6 ) );
 
  201                      .Left().Layer( 2 ) );
 
  204                      .Right().Layer( 2 ) );
 
  213                      .TopDockable( 
false ).BottomDockable( 
false )
 
  214                      .Caption( 
_( 
"Libraries" ) )
 
  215                      .MinSize( FromDIP( 250 ), -1 ).BestSize( FromDIP( 250 ), -1 ) );
 
  227    m_auimgr.GetPane( 
"TopMainToolbar" ).Top().Layer( 6 ).Position(0).Show( 
true );
 
  228    m_auimgr.GetPane( 
"LeftToolbar" ).Position(0).Show( 
true );
 
  229    m_auimgr.GetPane( 
"RightToolbar" ).Show( 
true );
 
  233    wxAuiPaneInfo& selectionFilterPane = 
m_auimgr.GetPane( wxS( 
"SelectionFilter" ) );
 
  235    selectionFilterPane.dock_proportion = 0;
 
  237    propertiesPaneInfo.Show( 
m_settings->m_AuiPanels.show_properties );
 
  254    GetCanvas()->GetView()->UseDrawPriority( 
true );
 
  255    GetCanvas()->GetGAL()->SetAxesEnabled( 
true );
 
  264    bbox.
SetOrigin( -max_size_x /2, -max_size_y/2 );
 
  265    bbox.
SetSize( max_size_x, max_size_y );
 
  266    GetCanvas()->GetView()->SetBoundary( bbox );
 
  271    DragAcceptFiles( 
true );
 
 
  319    wxCHECK_RET( 
m_settings, 
"Call to SYMBOL_EDIT_FRAME::LoadSettings with null m_settings" );
 
 
  333    wxCHECK_RET( 
m_settings, 
"Call to SYMBOL_EDIT_FRAME:SaveSettings with null m_settings" );
 
  350    m_settings->m_AuiPanels.show_properties = prop_shown;
 
 
  418#define ENABLE( x ) ACTION_CONDITIONS().Enable( x ) 
  419#define CHECK( x )  ACTION_CONDITIONS().Check( x ) 
  421    auto haveSymbolCond =
 
  427    auto isEditableCond =
 
  435    auto isEditableInAliasCond =
 
  444    auto symbolModifiedCondition =
 
  451    auto libSelectedCondition =
 
  457    auto canEditProperties =
 
  463    auto saveSymbolAsCondition =
 
  469    const auto isSymbolFromSchematicCond =
 
  525    auto hiddenFieldCond =
 
  531    auto showPinAltIconsCond =
 
  537    auto showLibraryTreeCond =
 
  543    auto propertiesCond =
 
  557    auto multiUnitModeCond =
 
  563    auto multiBodyStyleModeCond =
 
  569    auto syncedPinsModeCond =
 
  575    auto haveDatasheetCond =
 
  590#define EDIT_TOOL( tool ) ACTION_CONDITIONS().Enable( isEditableCond ).Check( cond.CurrentTool( tool ) ) 
 
  616        wxString        msg = 
_( 
"Save changes to '%s' before closing?" );
 
 
  649            && aEvent.GetId() == wxEVT_QUERY_END_SESSION
 
  662    m_libMgr->GetAdapter()->SaveSettings();
 
 
  696            for( 
int i = 0; i < 
m_symbol->GetUnitCount(); i++ )
 
  724            for( 
int i = 0; i < 
m_symbol->GetBodyStyleCount(); i++ )
 
 
  745    propertiesPaneInfo.Show( show );
 
  751                        m_settings->m_AuiPanels.properties_panel_width, -1 );
 
 
  813    if( event.GetSelection() == wxNOT_FOUND )
 
  816    SetUnit( event.GetSelection() + 1 );
 
 
  828    if( event.GetSelection() == wxNOT_FOUND )
 
 
  841        if( 
auto row = adapter->
GetRow( 
m_symbol->GetLibNickname() ); row.has_value() )
 
 
  856    if( !libNickname.empty() )
 
  861            libNickname = wxEmptyString;
 
 
  933    int           infobarFlags = wxICON_INFORMATION;
 
  937        msgs.push_back( wxString::Format( 
_( 
"Editing symbol %s from schematic.  Saving will " 
  938                                             "update the schematic only." ),
 
  941        wxString         link = wxString::Format( 
_( 
"Open symbol from library %s" ), libName );
 
  942        wxHyperlinkCtrl* button = 
new wxHyperlinkCtrl( &infobar, wxID_ANY, link, wxEmptyString );
 
  944        button->Bind( wxEVT_COMMAND_HYPERLINK, std::function<
void( wxHyperlinkEvent& aEvent )>(
 
  945                [
this, symbolName, libName]( wxHyperlinkEvent& aEvent )
 
  954        msgs.push_back( 
_( 
"Symbols in legacy libraries are not editable.  Use Manage Symbol " 
  955                           "Libraries to migrate to current format." ) );
 
  957        wxString         link = 
_( 
"Manage symbol libraries" );
 
  958        wxHyperlinkCtrl* button = 
new wxHyperlinkCtrl( &infobar, wxID_ANY, link, wxEmptyString );
 
  960        button->Bind( wxEVT_COMMAND_HYPERLINK, std::function<
void( wxHyperlinkEvent& aEvent )>(
 
  961                [
this]( wxHyperlinkEvent& aEvent )
 
  970        msgs.push_back( wxString::Format( 
_( 
"Symbol %s is a derived symbol. Symbol graphics will " 
  971                                             "not be editable." ),
 
  975        if( std::shared_ptr<LIB_SYMBOL> rootSymbol = 
m_symbol->GetRootSymbol() )
 
  979            wxString rootSymbolName = rootSymbol->GetName();
 
  980            wxString link = wxString::Format( 
_( 
"Open %s" ), 
UnescapeString( rootSymbolName ) );
 
  982            wxHyperlinkCtrl* button = 
new wxHyperlinkCtrl( &infobar, wxID_ANY, link,
 
  985            button->Bind( wxEVT_COMMAND_HYPERLINK, std::function<
void( wxHyperlinkEvent& aEvent )>(
 
  986                    [
this, rootSymbolName, unit, bodyStyle]( wxHyperlinkEvent& aEvent )
 
  997            && 
m_libMgr->IsLibraryReadOnly( 
m_symbol->GetLibId().GetFullLibraryName() ) )
 
  999        msgs.push_back( 
_( 
"Library is read-only.  Changes cannot be saved to this library." ) );
 
 1001        wxString         link = wxString::Format( 
_( 
"Create an editable copy" ) );
 
 1002        wxHyperlinkCtrl* button = 
new wxHyperlinkCtrl( &infobar, wxID_ANY, link, wxEmptyString );
 
 1004        button->Bind( wxEVT_COMMAND_HYPERLINK, std::function<
void( wxHyperlinkEvent& aEvent )>(
 
 1005                [
this, symbolName, libName]( wxHyperlinkEvent& aEvent )
 
 1007                    wxString msg = wxString::Format( 
_( 
"Create an editable copy of the symbol or " 
 1008                                                        "the entire library (%s)?" ),
 
 1011                    KIDIALOG errorDlg( 
this, msg, 
_( 
"Select type of item to save" ),
 
 1012                                       wxYES_NO | wxCANCEL | wxICON_QUESTION );
 
 1014                    errorDlg.SetYesNoCancelLabels( 
_( 
"Copy symbol" ), 
_( 
"Cancel" ),
 
 1015                                                   _( 
"Copy library" ) );
 
 1042        wxString msg = wxJoin( msgs, 
'\n', 
'\0' );
 
 
 1069    if( !GetTitle().StartsWith( 
"*" ) )
 
 
 1076    wxCHECK( aUnit > 0 && aUnit <= 
GetCurSymbol()->GetUnitCount(),  );
 
 
 1097    wxCHECK( aBodyStyle > 0 && aBodyStyle <= 
GetCurSymbol()->GetBodyStyleCount(),  );
 
 
 1125    wxFileName               fn = 
m_libMgr->GetUniqueLibraryName();
 
 1126    bool                     useGlobalTable = 
true;
 
 1134        return wxEmptyString;
 
 1141    wxCHECK( 
table, wxEmptyString );
 
 1143    wxString libName = fn.GetName();
 
 1145    if( libName.IsEmpty() )
 
 1146        return wxEmptyString;
 
 1152        DisplayError( 
this, wxString::Format( 
_( 
"Library '%s' already exists." ), libName ) );
 
 1153        return wxEmptyString;
 
 1158        if( !
m_libMgr->CreateLibrary( fn.GetFullPath(), scope ) )
 
 1160            DisplayError( 
this, wxString::Format( 
_( 
"Could not create the library file '%s'.\n" 
 1161                                                     "Make sure you have write permissions and try again." ),
 
 1162                                                  fn.GetFullPath() ) );
 
 1163            return wxEmptyString;
 
 1168        if( !
m_libMgr->AddLibrary( fn.GetFullPath(), scope ) )
 
 1170            DisplayError( 
this, 
_( 
"Could not open the library file." ) );
 
 1171            return wxEmptyString;
 
 1175    ( *table )->Save().map_error(
 
 1178                wxMessageBox( wxString::Format( 
_( 
"Error saving library table:\n\n%s" ), aError.
message ),
 
 1179                              _( 
"File Save Error" ), wxOK | wxICON_ERROR );
 
 1182    adapter->
LoadOne( fn.GetName() );
 
 1184    std::string packet = fn.GetFullPath().ToStdString();
 
 1188    return fn.GetFullPath();
 
 
 1194    wxFileName fn = wxFileName( aLibFile );
 
 1195    wxString   libName = fn.GetName();
 
 1197    if( libName.IsEmpty() )
 
 1204        DisplayError( 
this, wxString::Format( 
_( 
"Library '%s' already exists." ), libName ) );
 
 1211        DisplayError( 
this, 
_( 
"Could not open the library file." ) );
 
 1219    ( *table )->Save().map_error(
 
 1222                wxMessageBox( wxString::Format( 
_( 
"Error saving library table:\n\n%s" ), aError.
message ),
 
 1223                              _( 
"File Save Error" ), wxOK | wxICON_ERROR );
 
 1226    std::string packet = fn.GetFullPath().ToStdString();
 
 
 1279    std::vector<LIB_ID> ids;
 
 
 1292                                       const wxString& aForceRefresh )
 
 1302                                         m_libMgr->GetAdapter()->GetLibrariesCount(), 
this );
 
 1305                [&]( 
int progress, 
int max, 
const wxString& libName )
 
 1307                    progressDlg.
Update( progress, wxString::Format( 
_( 
"Loading library '%s'..." ),
 
 1311    else if( !aPreloadCancelled )
 
 1314                [&]( 
int progress, 
int max, 
const wxString& libName )
 
 1321        wxDataViewItem found;
 
 1327            found = 
m_libMgr->GetAdapter()->FindItem( selected );
 
 1336        if( !found && selected.
IsValid() )
 
 1339            found = 
m_libMgr->GetAdapter()->FindItem( selected );
 
 
 1369    if( aTreeItem.IsOk() )   
 
 
 1380    if( aOriginalFile.FileExists() )
 
 1382        wxFileName backupFileName( aOriginalFile );
 
 1383        backupFileName.SetExt( aBackupExt );
 
 1385        if( backupFileName.FileExists() )
 
 1386            wxRemoveFile( backupFileName.GetFullPath() );
 
 1388        if( !wxCopyFile( aOriginalFile.GetFullPath(), backupFileName.GetFullPath() ) )
 
 1390            DisplayError( 
this, wxString::Format( 
_( 
"Failed to save backup to '%s'." ),
 
 1391                                                  backupFileName.GetFullPath() ) );
 
 
 1472    bool tree_shown = tree_pane_info.IsShown();
 
 1473    tree_pane_info.Caption( 
_( 
"Libraries" ) );
 
 1474    tree_pane_info.Show( tree_shown );
 
 
 1533                item.ClearSelected();
 
 
 1569    if( aItem != 
nullptr && !aItem->
IsSCH_ITEM() )
 
 1576            if( 
pin->m_Uuid == lastBrightenedItemID )
 
 1580        std::vector<SCH_FIELD*> fields;
 
 1585            if( field->m_Uuid == lastBrightenedItemID )
 
 1590    if( lastItem && lastItem != aItem )
 
 1595        lastBrightenedItemID = 
niluuid;
 
 1605            lastBrightenedItemID = aItem->
m_Uuid;
 
 
 1615    const std::string& payload = mail.
GetPayload();
 
 1620        if( !payload.empty() )
 
 1622            wxString uri( payload );
 
 1623            wxString libNickname;
 
 1627            std::optional<const LIBRARY_TABLE_ROW*> libTableRow = adapter->
FindRowByURI( uri );
 
 1631                msg.Printf( 
_( 
"The current configuration does not include the symbol library '%s'." ),
 
 1633                msg += wxS( 
"\n" ) + 
_( 
"Use Manage Symbol Libraries to edit the configuration." );
 
 1638            libNickname = ( *libTableRow )->Nickname();
 
 1640            if( !adapter->
HasLibrary( libNickname, 
true ) )
 
 1642                msg.Printf( 
_( 
"The symbol library '%s' is not enabled in the current configuration." ),
 
 1644                msg += wxS( 
"\n" ) + 
_( 
"Use Manage Symbol Libraries to edit the configuration." );
 
 1653                LIB_ID id( libNickname, wxEmptyString );
 
 1669        if( !currentLib.empty()
 
 1688        wxLogTrace( 
traceLibWatch, 
"Received refresh symbol request for %s", payload );
 
 1694        std::optional<const LIBRARY_TABLE_ROW*> row = adapter->
GetRow( libName );
 
 1703        wxLogTrace( 
traceLibWatch, 
"Received refresh symbol request for %s, current symbols is %s",
 
 1704                    changedLib.GetFullPath(), libfullname.GetFullPath() );
 
 1706        if( changedLib == libfullname )
 
 1711            m_libMgr->UpdateLibraryBuffer( libName );
 
 
 1757    return m_libMgr->HasModifications();
 
 
 1770    for( 
const wxString& libName : 
m_libMgr->GetLibraryNames() )
 
 1772        if( 
m_libMgr->IsLibraryModified( libName ) && !
m_libMgr->IsLibraryReadOnly( libName ) )
 
 
 1782    if( aItemCount == 0 )
 
 1787    if( aItemCount < 0 )
 
 1789        list.ClearCommandList();
 
 1793        for( 
int ii = 0; ii < aItemCount; ii++ )
 
 1795            if( list.m_CommandsList.size() == 0 )
 
 1799            list.m_CommandsList.erase( list.m_CommandsList.begin() );
 
 
 1822    symbol->SetLibId( aSymbol->
GetLibId() );
 
 1829    std::vector<SCH_FIELD> fullSetOfFields;
 
 1834        SCH_FIELD libField( symbol.get(), field.GetId() );
 
 1846        switch( orientation )
 
 1849            std::swap( pos.
x, pos.
y );
 
 1853            std::swap( pos.
x, pos.
y );
 
 1866        fullSetOfFields.emplace_back( std::move( libField ) );
 
 1869    symbol->SetFields( fullSetOfFields );
 
 1876    m_reference = symbol->GetReferenceField().GetText();
 
 1884    tools->SetDrawSpecificUnit( symbol->UnitsLocked() );
 
 
 1914    wxFileName fn = aLibFile;
 
 1916    wxString libNickname = fn.GetName();
 
 1927            tmp.Printf( 
"%s%d", fn.GetName(), suffix );
 
 1933    std::optional<LIBRARY_TABLE*> optTable =
 
 1935    wxCHECK( optTable, 
false );
 
 1943    wxString normalizedPath = 
NormalizePath( aLibFile, &envVars,
 
 1945                                                                                    : wxString( wxEmptyString ) );
 
 1947    row->
SetURI( normalizedPath );
 
 1950    bool success = 
true;
 
 1952    table->Save().map_error(
 
 1956                                                                     : 
_( 
"Error saving project library table." );
 
 1958                wxMessageDialog dlg( 
this, msg, 
_( 
"File Save Error" ), wxOK | wxICON_ERROR );
 
 1959                dlg.SetExtendedMessage( aError.
message );
 
 1966        adapter->
LoadOne( libNickname );
 
 
 1980    if( adapter->
GetRow( aLibNickname, scope ) )
 
 1984        wxCHECK( optTable, 
false );
 
 1991        if( adapter->
GetRow( aLibNickname, scope ) )
 
 2001    wxCHECK( 
table, 
false );
 
 2003    auto optRow = adapter->
GetRow( aLibNickname, scope );
 
 2004    wxCHECK( optRow, 
false );
 
 2009    wxString projectPath;
 
 2014    wxString normalizedPath = 
NormalizePath( aLibFile, &envVars, projectPath );
 
 2016    row->
SetURI( normalizedPath );
 
 2019    bool success = 
true;
 
 2021    table->Save().map_error(
 
 2025                                                                    : 
_( 
"Error saving project library table." );
 
 2027                wxMessageDialog dlg( 
this, msg, 
_( 
"File Save Error" ), wxOK | wxICON_ERROR );
 
 2028                dlg.SetExtendedMessage( aError.
message );
 
 2035        adapter->
LoadOne( aLibNickname );
 
 
 2059        eda_text->ClearBoundingBoxCache();
 
 2060        eda_text->ClearRenderCache();
 
 
 2069    wxAuiPaneInfo& selectionFilterPane = 
m_auimgr.GetPane( wxS( 
"SelectionFilter" ) );
 
 2073    bool showFilter = ( treePane.IsShown() && treePane.IsDocked() )
 
 2074                      || ( propertiesPane.IsShown() && propertiesPane.IsDocked() );
 
 2076    selectionFilterPane.Show( showFilter );
 
 
BASE_SCREEN class implementation.
 
constexpr EDA_IU_SCALE schIUScale
 
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
 
static TOOL_ACTION toggleGrid
 
static TOOL_ACTION cancelInteractive
 
static TOOL_ACTION unselectAll
 
static TOOL_ACTION revert
 
static TOOL_ACTION showLibraryTree
 
static TOOL_ACTION showDatasheet
 
static TOOL_ACTION toggleBoundingBoxes
 
static TOOL_ACTION saveAll
 
static TOOL_ACTION duplicate
 
static TOOL_ACTION doDelete
 
static TOOL_ACTION selectionTool
 
static TOOL_ACTION zoomFitScreen
 
static TOOL_ACTION deleteTool
 
static TOOL_ACTION zoomTool
 
static TOOL_ACTION selectionClear
Clear the current selection.
 
static TOOL_ACTION showProperties
 
static TOOL_ACTION ddAddLibrary
 
static TOOL_ACTION copyAsText
 
static TOOL_ACTION toggleGridOverrides
 
static TOOL_ACTION selectAll
 
Manage TOOL_ACTION objects.
 
void SetConditions(const TOOL_ACTION &aAction, const ACTION_CONDITIONS &aConditions)
Set the conditions the UI elements for activating a specific tool action should use for determining t...
 
wxProgressDialog with the option to also update the application progress on the taskbar
 
virtual bool Update(int aValue, const wxString &aNewMsg=wxEmptyString, bool *aSkip=nullptr) override
 
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
 
wxString m_ColorTheme
Active color theme name.
 
Handles how to draw a screen (a board, a schematic ...)
 
void SetContentModified(bool aModified=true)
 
constexpr void SetOrigin(const Vec &pos)
 
constexpr void SetSize(const SizeVec &size)
 
Color settings are a bit different than most of the settings objects in that there can be more than o...
 
Handle actions that are shared between different applications.
 
UNDO_REDO_CONTAINER m_undoList
 
void ShowChangedLanguage() override
Redraw the menus and what not in current language.
 
virtual void setupUIConditions()
Setup the UI conditions for the various actions and their controls in this frame.
 
virtual void ClearUndoRedoList()
Clear the undo and redo list using ClearUndoORRedoList()
 
SETTINGS_MANAGER * GetSettingsManager() const
 
UNDO_REDO_LIST
Specify whether we are interacting with the undo or redo stacks.
 
virtual void OnModify()
Must be called after a model change in order to set the "modify" flag and do other frame-specific pro...
 
ACTION_TOOLBAR * m_tbRight
 
TOOLBAR_SETTINGS * m_toolbarSettings
 
void FinishAUIInitialization()
 
virtual void RecreateToolbars()
 
UNDO_REDO_CONTAINER m_redoList
 
ACTION_TOOLBAR * m_tbLeft
 
virtual void OnDropFiles(wxDropFilesEvent &aEvent)
Handle event fired when a file is dropped to the window.
 
std::map< const wxString, TOOL_ACTION * > m_acceptedExts
Associate file extensions with action to execute.
 
ACTION_TOOLBAR * m_tbTopMain
 
bool m_isClosing
Set by the close window event handler after frames are asked if they can close.
 
void ReCreateMenuBar()
Recreate the menu bar.
 
WX_INFOBAR * GetInfoBar()
 
COLOR_SETTINGS * m_colorSettings
 
EDA_DRAW_PANEL_GAL::GAL_TYPE m_canvasType
The current canvas type.
 
void setupUnits(APP_SETTINGS_BASE *aCfg)
 
virtual void SwitchCanvas(EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType)
Change the current rendering backend.
 
GAL_DISPLAY_OPTIONS_IMPL & GetGalDisplayOptions()
Return a reference to the gal rendering options used by GAL for rendering.
 
virtual void resolveCanvasType()
Determine the canvas type to load (with prompt if required) and initializes m_canvasType.
 
static const wxString PropertiesPaneName()
 
EDA_MSG_PANEL * m_messagePanel
 
virtual void SetScreen(BASE_SCREEN *aScreen)
 
bool LibraryFileBrowser(const wxString &aTitle, bool doOpen, wxFileName &aFilename, const wxString &wildcard, const wxString &ext, bool isDirectory, FILEDLG_HOOK_NEW_LIBRARY *aFileDlgHook=nullptr)
 
void FocusOnLocation(const VECTOR2I &aPos, bool aAllowScroll=true)
Useful to focus on a particular location, in find functions.
 
PROPERTIES_PANEL * m_propertiesPanel
 
void ForceRefresh()
Force a redraw.
 
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
 
KIGFX::GAL * GetGAL() const
Return a pointer to the GAL instance used in the panel.
 
void SetEventDispatcher(TOOL_DISPATCHER *aEventDispatcher)
Set a dispatcher that processes events and forwards them to tools.
 
A base class for most all the KiCad significant classes used in schematics and boards.
 
virtual const VECTOR2I GetFocusPosition() const
Similar to GetPosition() but allows items to return their visual center rather than their anchor.
 
bool IsBrightened() const
 
Specialization of the wxAuiPaneInfo class for KiCad panels.
 
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
 
Class that groups generic conditions for editor states.
 
SELECTION_CONDITION NoActiveTool()
Create a functor testing if there are no tools active in the frame.
 
SELECTION_CONDITION BoundingBoxes()
 
SELECTION_CONDITION RedoAvailable()
Create a functor that tests if there are any items in the redo queue.
 
SELECTION_CONDITION CurrentTool(const TOOL_ACTION &aTool)
Create a functor testing if the specified tool is the current active tool in the frame.
 
virtual SELECTION_CONDITION UndoAvailable()
Create a functor that tests if there are any items in the undo queue.
 
SELECTION_CONDITION GridVisible()
Create a functor testing if the grid is visible in a frame.
 
SELECTION_CONDITION GridOverrides()
Create a functor testing if the grid overrides wires is enabled in a frame.
 
bool GetUseGlobalTable() const
 
void ReadWindowSettings(WINDOW_SETTINGS &aCfg)
Read GAL config options from application-level config.
 
Helper class to create more flexible dialogs, including 'do not show again' checkbox handling.
 
bool m_axesEnabled
Crosshair drawing mode.
 
void SetAxesEnabled(bool aAxesEnabled)
Enable drawing the axes.
 
void SetAxesColor(const COLOR4D &aAxesColor)
Set the axes color.
 
void SetDefaultFont(const wxString &aFont)
 
void ClearHiddenFlags()
Clear the hide flag of all items in the view.
 
void Clear()
Remove all items from the view.
 
void UpdateAllItems(int aUpdateFlags)
Update all items in the view according to the given flags.
 
Carry a payload from one KIWAY_PLAYER to another within a PROJECT.
 
std::string & GetPayload()
Return the payload, which can be any text but it typically self identifying s-expression.
 
MAIL_T Command()
Returns the MAIL_T associated with this mail.
 
bool Destroy() override
Our version of Destroy() which is virtual from wxWidgets.
 
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
 
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
 
virtual void ExpressMail(FRAME_T aDestination, MAIL_T aCommand, std::string &aPayload, wxWindow *aSource=nullptr, bool aFromOtherThread=false)
Send aPayload to aDestination from aSource.
 
Module editor specific tools.
 
std::optional< LIBRARY_TABLE_ROW * > FindRowByURI(const wxString &aUri, LIBRARY_TABLE_SCOPE aScope=LIBRARY_TABLE_SCOPE::BOTH) const
Like LIBRARY_MANAGER::FindRowByURI but filtered to the LIBRARY_TABLE_TYPE of this adapter.
 
bool HasLibrary(const wxString &aNickname, bool aCheckEnabled=false) const
Test for the existence of aNickname in the library tables.
 
std::optional< LIBRARY_TABLE_ROW * > GetRow(const wxString &aNickname, LIBRARY_TABLE_SCOPE aScope=LIBRARY_TABLE_SCOPE::BOTH) const
Like LIBRARY_MANAGER::GetRow but filtered to the LIBRARY_TABLE_TYPE of this adapter.
 
std::optional< LIBRARY_TABLE * > Table(LIBRARY_TABLE_TYPE aType, LIBRARY_TABLE_SCOPE aScope)
Retrieves a given table; creating a new empty project table if a valid project is loaded and the give...
 
std::optional< wxString > GetFullURI(LIBRARY_TABLE_TYPE aType, const wxString &aNickname, bool aSubstituted=false) const
Return the full location specifying URI for the LIB, either in original UI form or in environment var...
 
void SetNickname(const wxString &aNickname)
 
void SetType(const wxString &aType)
 
void SetURI(const wxString &aUri)
 
A logical library item identifier and consists of various portions much like a URI.
 
int SetLibItemName(const UTF8 &aLibItemName)
Override the library item name portion of the LIB_ID to aLibItemName.
 
bool IsValid() const
Check if this LID_ID is valid.
 
const UTF8 & GetLibItemName() const
 
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
 
Symbol library management helper that is specific to the symbol library editor frame.
 
Define a library symbol object.
 
const LIB_ID & GetLibId() const override
 
bool UnitsLocked() const
Check whether symbol units are interchangeable.
 
bool IsRoot() const override
For symbols derived from other symbols, IsRoot() indicates no derivation.
 
wxString GetName() const override
 
bool IsMultiUnit() const override
 
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
 
void Update(LIB_TREE_ITEM *aItem)
Update the node using data from a LIB_ALIAS object.
 
void RefreshLibTree()
Refresh the tree (mainly to update highlighting and asterisking)
 
void CenterLibId(const LIB_ID &aLibId)
Ensure that an item is visible (preferably centered).
 
int GetSelectionCount() const
 
void ShowChangedLanguage()
 
void FocusSearchFieldIfExists()
Focus the search widget if it exists.
 
void SelectLibId(const LIB_ID &aLibId)
Select an item in the tree widget.
 
LIB_TREE_MODEL_ADAPTER::SORT_MODE GetSortMode() const
 
int GetSelectedLibIds(std::vector< LIB_ID > &aSelection, std::vector< int > *aUnit=nullptr) const
Retrieve a list of selections for trees that allow multi-selection.
 
void Unselect()
Unselect currently selected item in wxDataViewCtrl.
 
LIB_ID GetSelectedLibId(int *aUnit=nullptr) const
For multi-unit symbols, if the user selects the symbol itself rather than picking an individual unit,...
 
void ExpandLibId(const LIB_ID &aLibId)
Expand and item i the tree widget.
 
void Regenerate(bool aKeepState)
Regenerate the tree.
 
virtual ENV_VAR_MAP & GetLocalEnvVariables() const
 
virtual SETTINGS_MANAGER & GetSettingsManager() const
 
virtual LIBRARY_MANAGER & GetLibraryManager() const
 
A holder to handle information on schematic or board items.
 
void ClearListAndDeleteItems(std::function< void(EDA_ITEM *)> aItemDeleter)
Delete the list of pickers AND the data pointed by #m_PickedItem or #m_PickedItemLink according to th...
 
static SYMBOL_LIBRARY_ADAPTER * SymbolLibAdapter(PROJECT *aProject)
Accessor for project symbol library manager adapter.
 
virtual const wxString GetProjectPath() const
Return the full path of the project.
 
virtual void SetRString(RSTRING_T aStringId, const wxString &aString)
Store a "retained string", which is any session and project specific string identified in enum RSTRIN...
 
virtual const wxString & GetRString(RSTRING_T aStringId)
Return a "retained string", which is any session and project specific string identified in enum RSTRI...
 
Gather all the actions that are shared by tools.
 
static TOOL_ACTION rotateCCW
 
static TOOL_ACTION importSymbol
 
static TOOL_ACTION newSymbol
 
static TOOL_ACTION saveLibraryAs
 
static TOOL_ACTION mirrorV
 
static TOOL_ACTION editLibSymbolWithLibEdit
 
static TOOL_ACTION drawArc
 
static TOOL_ACTION pinTable
 
static TOOL_ACTION drawSymbolLines
 
static TOOL_ACTION placeSymbolPin
 
static TOOL_ACTION drawSymbolTextBox
 
static TOOL_ACTION drawRectangle
 
static TOOL_ACTION drawCircle
 
static TOOL_ACTION importGraphics
 
static TOOL_ACTION drawBezier
 
static TOOL_ACTION saveSymbolCopyAs
 
static TOOL_ACTION rotateCW
 
static TOOL_ACTION showElectricalTypes
 
static TOOL_ACTION drawSymbolPolygon
 
static TOOL_ACTION showHiddenFields
 
static TOOL_ACTION placeSymbolAnchor
 
static TOOL_ACTION showHiddenPins
 
static TOOL_ACTION cycleBodyStyle
 
static TOOL_ACTION mirrorH
 
static TOOL_ACTION runERC
Inspection and Editing.
 
static TOOL_ACTION symbolProperties
 
static TOOL_ACTION placeSymbolText
 
static TOOL_ACTION toggleSyncedPinsMode
 
static TOOL_ACTION togglePinAltIcons
 
static TOOL_ACTION saveSymbolAs
 
A shim class between EDA_DRAW_FRAME and several derived classes: SYMBOL_EDIT_FRAME,...
 
SCH_BASE_FRAME(KIWAY *aKiway, wxWindow *aParent, FRAME_T aWindowType, const wxString &aTitle, const wxPoint &aPosition, const wxSize &aSize, long aStyle, const wxString &aFrameName)
 
SCH_RENDER_SETTINGS * GetRenderSettings()
 
void doCloseWindow() override
 
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
 
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
 
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
 
SYMBOL_EDITOR_SETTINGS * libeditconfig() const
 
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
 
void CommonSettingsChanged(int aFlags) override
Notification event that some of the common (suite-wide) settings have changed.
 
void SyncView()
Mark all items for refresh.
 
PANEL_SCH_SELECTION_FILTER * m_selectionFilterPanel
 
virtual void UpdateItem(EDA_ITEM *aItem, bool isAddOrDelete=false, bool aUpdateRtree=false)
Mark an item for refresh.
 
void setSymWatcher(const LIB_ID *aSymbol)
Creates (or removes) a watcher on the specified symbol library.
 
KIGFX::SCH_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
 
void DisplaySymbol(LIB_SYMBOL *aSymbol)
 
Schematic editor (Eeschema) main window.
 
void SaveSymbolToSchematic(const LIB_SYMBOL &aSymbol, const KIID &aSchematicSymbolUUID)
Update a schematic symbol from a LIB_SYMBOL.
 
void SetPosition(const VECTOR2I &aPosition) override
 
static const wxString ShowType(SCH_FILE_T aFileType)
Return a brief name for a plugin, given aFileType enum.
 
static SCH_FILE_T GuessPluginTypeFromLibPath(const wxString &aLibPath, int aCtl=0)
Return a plugin type given a symbol library using the file extension of aLibPath.
 
Base class for any item which can be embedded within the SCHEMATIC container class,...
 
Tool that displays edit points allowing to modify items by dragging the points.
 
bool m_ShowPinsElectricalType
 
bool m_ShowGraphicsDisabled
 
void GetFields(std::vector< SCH_FIELD * > &aVector, bool aVisibleOnly) const override
Populate a std::vector with SCH_FIELDs, sorted in ordinal order.
 
VECTOR2I GetPosition() const override
 
const LIB_ID & GetLibId() const override
 
int GetOrientation() const override
Get the display symbol orientation.
 
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
 
static bool Idle(const SELECTION &aSelection)
Test if there no items selected or being edited.
 
static bool ShowAlways(const SELECTION &aSelection)
The default condition function (always returns true).
 
Handle actions for the various symbol editor and viewers.
 
bool m_ShowPinElectricalType
 
bool m_ShowPinAltIcons
When true, dragging an outline edge will drag pins rooted on it.
 
The symbol library editor main window.
 
bool m_isSymbolFromSchematic
 
void OnExitKiCad(wxCommandEvent &event)
 
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
 
std::unique_ptr< GRID_HELPER > MakeGridHelper() override
 
void UpdateItem(EDA_ITEM *aItem, bool isAddOrDelete=false, bool aUpdateRtree=false) override
Mark an item for refresh.
 
void setupUIConditions() override
Setup the UI conditions for the various actions and their controls in this frame.
 
APP_SETTINGS_BASE * config() const override
Return the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.
 
void storeCurrentSymbol()
Rename LIB_SYMBOL aliases to avoid conflicts before adding a symbol to a library.
 
bool IsLibraryTreeShown() const override
 
const BOX2I GetDocumentExtents(bool aIncludeAllVisible=true) const override
Return bounding box of document with option to not include some items.
 
SELECTION & GetCurrentSelection() override
Get the current selection from the canvas area.
 
wxString getTargetLib() const
 
bool IsCurrentSymbol(const LIB_ID &aLibId) const
Restore the empty editor screen, without any symbol or library selected.
 
void OnSelectBodyStyle(wxCommandEvent &event)
 
bool GetShowInvisibleFields()
 
bool backupFile(const wxFileName &aOriginalFile, const wxString &aBackupExt)
Return currently edited symbol.
 
void RefreshLibraryTree()
Redisplay the library tree.
 
void updateSelectionFilterVisbility() override
Selection filter panel doesn't have a dedicated visibility control, so show it if any other AUI panel...
 
void CommonSettingsChanged(int aFlags) override
Called after the preferences dialog is run.
 
void FocusLibraryTreeInput() override
 
wxComboBox * m_unitSelectBox
 
void RebuildSymbolUnitAndBodyStyleLists()
 
int GetTreeLIBIDs(std::vector< LIB_ID > &aSelection) const
 
LIB_ID GetTreeLIBID(int *aUnit=nullptr) const
Return the LIB_ID of the library or symbol selected in the symbol tree.
 
LIB_SYMBOL_LIBRARY_MANAGER * m_libMgr
 
wxString GetCurLib() const
The nickname of the current library being edited and empty string if none.
 
void FocusOnLibId(const LIB_ID &aLibID)
 
bool IsSymbolAlias() const
Return true if aLibId is an alias for the editor screen symbol.
 
void ToggleProperties() override
 
SYMBOL_EDITOR_SETTINGS * m_settings
 
void HardRedraw() override
Rebuild the GAL and redraw the screen.
 
bool m_SyncPinEdit
Set to true to synchronize pins at the same position when editing symbols with multiple units or mult...
 
int GetTreeSelectionCount() const
 
bool addLibTableEntry(const wxString &aLibFile, LIBRARY_TABLE_SCOPE aScope=LIBRARY_TABLE_SCOPE::GLOBAL)
Add aLibFile to the symbol library table defined by aScope.
 
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
 
bool CanCloseSymbolFromSchematic(bool doClose)
 
bool IsSymbolFromLegacyLibrary() const
 
bool replaceLibTableEntry(const wxString &aLibNickname, const wxString &aLibFile)
Replace the file path of the symbol library table entry aLibNickname with aLibFile.
 
bool IsSymbolFromSchematic() const
 
static bool m_showDeMorgan
 
void SetScreen(BASE_SCREEN *aScreen) override
 
SYMBOL_EDITOR_SETTINGS * GetSettings() const
 
SCH_SCREEN * m_dummyScreen
< Helper screen used when no symbol is loaded
 
void KiwayMailIn(KIWAY_EXPRESS &mail) override
Receive KIWAY_EXPRESS messages from other players.
 
void SetCurSymbol(LIB_SYMBOL *aSymbol, bool aUpdateZoom)
Take ownership of aSymbol and notes that it is the one currently being edited.
 
KIID m_schematicSymbolUUID
RefDes of the symbol (only valid if symbol was loaded from schematic)
 
SYMBOL_EDIT_FRAME(KIWAY *aKiway, wxWindow *aParent)
 
bool IsSymbolEditable() const
Test if a symbol is loaded and can be edited.
 
std::vector< LIB_ID > GetSelectedLibIds() const
 
void SyncLibraries(bool aShowProgress, bool aPreloadCancelled=false, const wxString &aForceRefresh=wxEmptyString)
Synchronize the library manager to the symbol library table, and then the symbol tree to the library ...
 
void OnSelectUnit(wxCommandEvent &event)
 
LIB_SYMBOL * GetCurSymbol() const
Return the current symbol being edited or NULL if none selected.
 
void UpdateSymbolMsgPanelInfo()
Display the documentation of the selected symbol.
 
bool canCloseWindow(wxCloseEvent &aCloseEvent) override
 
LIB_ID GetTargetLibId() const override
Return either the symbol selected in the symbol tree (if context menu is active) or the symbol on the...
 
void SetBodyStyle(int aBodyStyle)
 
int m_bodyStyle
Flag if the symbol being edited was loaded directly from a schematic.
 
bool saveAllLibraries(bool aRequireConfirmation)
Save the current symbol.
 
bool GetShowInvisiblePins()
 
void UpdateMsgPanel() override
Redraw the message panel.
 
void ClearUndoORRedoList(UNDO_REDO_LIST whichList, int aItemCount=-1) override
Free the undo or redo list from aList element.
 
LIB_TREE * GetLibTree() const override
 
wxString SetCurLib(const wxString &aLibNickname)
Set the current library nickname and returns the old library nickname.
 
void UpdateTitle()
Update the main window title bar with the current library name and read only status of the library.
 
bool LoadSymbolFromCurrentLib(const wxString &aSymbolName, int aUnit=0, int aBodyStyle=0)
Load a symbol from the current active library, optionally setting the selected unit and convert.
 
bool HasLibModifications() const
Check if any pending libraries have been modified.
 
SYMBOL_TREE_PANE * m_treePane
 
void LoadSymbolFromSchematic(SCH_SYMBOL *aSymbol)
Load a symbol from the schematic to edit in place.
 
COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Returns a pointer to the active color theme settings.
 
LIB_SYMBOL_LIBRARY_MANAGER & GetLibManager()
 
void OnUpdateBodyStyle(wxUpdateUIEvent &event)
 
void SaveSymbolCopyAs(bool aOpenCopy)
Save the currently selected symbol to a new name and/or location.
 
void SwitchCanvas(EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType) override
Switch currently used canvas ( Cairo / OpenGL).
 
void doCloseWindow() override
 
void DdAddLibrary(wxString aLibFile)
Add a library dropped file to the symbol library table.
 
wxString AddLibraryFile(bool aCreateNew)
Create or add an existing library to the symbol library table.
 
~SYMBOL_EDIT_FRAME() override
 
void FocusOnItem(EDA_ITEM *aItem, bool aAllowScroll=true) override
Focus on a particular canvas item.
 
void configureToolbars() override
 
void CloseWindow(wxCommandEvent &event)
Trigger the wxCloseEvent, which is handled by the function given to EVT_CLOSE() macro:
 
wxComboBox * m_bodyStyleSelectBox
 
void UpdateLibraryTree(const wxDataViewItem &aTreeItem, LIB_SYMBOL *aSymbol)
Update a symbol node in the library tree.
 
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag of the current symbol.
 
void ShowChangedLanguage() override
Redraw the menus and what not in current language.
 
void SaveLibraryAs()
Save the currently selected library to a new file.
 
bool IsContentModified() const override
Get if any symbols or libraries have been modified but not saved.
 
void ToggleLibraryTree() override
 
LIB_SYMBOL * getTargetSymbol() const
Return either the library selected in the symbol tree, if context menu is active or the library that ...
 
void OnUpdateUnitNumber(wxUpdateUIEvent &event)
 
An interface to the global shared library manager that is schematic-specific and linked to one projec...
 
std::optional< LIB_STATUS > LoadOne(const wxString &aNickname)
Loads or reloads the given library, if it exists.
 
Library Editor pane with symbol tree and symbol library table selector.
 
A holder to handle a list of undo (or redo) commands.
 
A modified version of the wxInfoBar class that allows us to:
 
void RemoveAllButtons()
Remove all the buttons that have been added by the user.
 
void AddButton(wxButton *aButton)
Add an already created button to the infobar.
 
void Dismiss() override
Dismisses the infobar and updates the containing layout and AUI manager (if one is provided).
 
void ShowMessage(const wxString &aMessage, int aFlags=wxICON_INFORMATION) override
Show the info bar with the provided message and icon.
 
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
 
int UnsavedChangesDialog(wxWindow *parent, const wxString &aMessage, bool *aApplyToAll)
A specialized version of HandleUnsavedChanges which handles an apply-to-all checkbox.
 
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
 
This file is part of the common library.
 
static bool empty(const wxTextEntryBase *aCtrl)
 
#define KICAD_DEFAULT_DRAWFRAME_STYLE
 
#define LIB_EDIT_FRAME_NAME
 
@ ID_LIBEDIT_SELECT_UNIT_NUMBER
 
@ ID_LIBEDIT_SELECT_BODY_STYLE
 
const wxAuiPaneInfo & defaultSchSelectionFilterPaneInfo(wxWindow *aWindow)
 
const wxAuiPaneInfo & defaultPropertiesPaneInfo(wxWindow *aWindow)
 
wxString NormalizePath(const wxFileName &aFilePath, const ENV_VAR_MAP *aEnvVars, const wxString &aProjectPath)
Normalize a file path to an environmental variable, if possible.
 
Helper functions to substitute paths with environmental variables.
 
@ FRAME_SCH_SYMBOL_EDITOR
 
static const std::string SymbolLibraryTableFileName
 
static const std::string KiCadSymbolLibFileExtension
 
static wxString KiCadSymbolLibFileWildcard()
 
const wxChar *const traceLibWatch
Flag to enable debug output for library file watch refreshes.
 
std::map< wxString, ENV_VAR_ITEM > ENV_VAR_MAP
 
@ LAYER_SCHEMATIC_GRID_AXES
 
@ ALL
All except INITIAL_ADD.
 
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
 
void InvokeSchEditSymbolLibTable(KIWAY *aKiway, wxWindow *aParent)
 
void Refresh()
Update the board display after modifying it by a python script (note: it is automatically called by a...
 
PGM_BASE & Pgm()
The global program "get" accessor.
 
COLOR_SETTINGS * GetColorSettings(const wxString &aName)
 
T * GetToolbarSettings(const wxString &aFilename)
 
T * GetAppSettings(const char *aFilename)
 
KIWAY Kiway(KFCTL_STANDALONE)
 
wxString UnescapeString(const wxString &aSource)
 
Functors that can be used to figure out how the action controls should be displayed in the UI and if ...
 
wxLogTrace helper definitions.
 
VECTOR2< int32_t > VECTOR2I
 
VECTOR2< double > VECTOR2D
 
Definition of file extensions used in Kicad.
 
void SetAuiPaneSize(wxAuiManager &aManager, wxAuiPaneInfo &aPane, int aWidth, int aHeight)
Sets the size of an AUI pane, working around http://trac.wxwidgets.org/ticket/13180.