KiCad PCB EDA Suite
panel_sym_lib_table.cpp File Reference
#include <set>
#include <wx/regex.h>
#include <fctsys.h>
#include <project.h>
#include <panel_sym_lib_table.h>
#include <lib_id.h>
#include <symbol_lib_table.h>
#include <lib_table_lexer.h>
#include <grid_tricks.h>
#include <widgets/wx_grid.h>
#include <confirm.h>
#include <bitmaps.h>
#include <lib_table_grid.h>
#include <wildcards_and_files_ext.h>
#include <env_paths.h>
#include <eeschema_id.h>
#include <lib_edit_frame.h>
#include <lib_view_frame.h>
#include <sch_edit_frame.h>
#include <kiway.h>
#include <sch_screen.h>
#include <widgets/grid_readonly_text_helpers.h>
#include <widgets/grid_text_button_helpers.h>

Go to the source code of this file.

Classes

struct  supportedFileType
 Container that describes file type info for the add a library options. More...
 
class  SYMBOL_LIB_TABLE_GRID
 Build a wxGridTableBase by wrapping an SYMBOL_LIB_TABLE object. More...
 
class  SYMBOL_GRID_TRICKS
 

Enumerations

enum  { ID_PANEL_SYM_LIB_KICAD = ID_END_EESCHEMA_ID_LIST, ID_PANEL_SYM_LIB_LEGACY }
 Event IDs for the menu items in the split button menu for add a library. More...
 

Functions

static const std::map< int, supportedFileType > & fileTypes ()
 Map with event id as the key to supported file types that will be listed for the add a library option. More...
 
void InvokeSchEditSymbolLibTable (KIWAY *aKiway, wxWindow *aParent)
 

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Event IDs for the menu items in the split button menu for add a library.

Enumerator
ID_PANEL_SYM_LIB_KICAD 
ID_PANEL_SYM_LIB_LEGACY 

Definition at line 66 of file panel_sym_lib_table.cpp.

Function Documentation

◆ fileTypes()

static const std::map<int, supportedFileType>& fileTypes ( )
static

Map with event id as the key to supported file types that will be listed for the add a library option.

Definition at line 76 of file panel_sym_lib_table.cpp.

77 {
78  static const std::map<int, supportedFileType> fileTypes =
79  {
81  {
82  "KiCad legacy symbol library file (*.lib)",
84  "",
85  true,
86  SCH_IO_MGR::SCH_LEGACY
87  }
88  },
89  {
91  {
92  "KiCad s-expression symbol library file (*.kicad_sym)",
94  "",
95  true,
96  SCH_IO_MGR::SCH_KICAD
97  }
98  }
99  };
100 
101  return fileTypes;
102 }
wxString KiCadSymbolLibFileWildcard()
wxString LegacySymbolLibFileWildcard()
static const std::map< int, supportedFileType > & fileTypes()
Map with event id as the key to supported file types that will be listed for the add a library option...

References ID_PANEL_SYM_LIB_KICAD, ID_PANEL_SYM_LIB_LEGACY, KiCadSymbolLibFileWildcard(), and LegacySymbolLibFileWildcard().

◆ InvokeSchEditSymbolLibTable()

void InvokeSchEditSymbolLibTable ( KIWAY aKiway,
wxWindow *  aParent 
)

Definition at line 767 of file panel_sym_lib_table.cpp.

768 {
769  SCH_EDIT_FRAME* schEditor = (SCH_EDIT_FRAME*) aKiway->Player( FRAME_SCH, false );
770  LIB_EDIT_FRAME* libEditor = (LIB_EDIT_FRAME*) aKiway->Player( FRAME_SCH_LIB_EDITOR, false );
771  LIB_VIEW_FRAME* libViewer = (LIB_VIEW_FRAME*) aKiway->Player( FRAME_SCH_VIEWER, false );
772 
774  wxString globalTablePath = SYMBOL_LIB_TABLE::GetGlobalTableFileName();
775  SYMBOL_LIB_TABLE* projectTable = aKiway->Prj().SchSymbolLibTable();
776  wxString projectPath = aKiway->Prj().GetProjectPath();
777  wxFileName projectTableFn( projectPath, SYMBOL_LIB_TABLE::GetSymbolLibTableFileName() );
778  wxString msg;
779  wxString currentLib;
780 
781  if( libEditor )
782  {
783  currentLib = libEditor->GetCurLib();
784 
785  // This prevents an ugly crash on OSX (https://bugs.launchpad.net/kicad/+bug/1765286)
786  libEditor->FreezeSearchTree();
787 
788  if( libEditor->HasLibModifications() )
789  {
790  msg = _( "Modifications have been made to one or more symbol libraries.\n"
791  "Changes must be saved or discarded before the symbol library "
792  "table can be modified." );
793 
794  switch( UnsavedChangesDialog( aParent, msg ) )
795  {
796  case wxID_YES: libEditor->SaveAll(); break;
797  case wxID_NO: libEditor->RevertAll(); break;
798  default:
799  case wxID_CANCEL: libEditor->ThawSearchTree(); return;
800  }
801  }
802  }
803 
804  DIALOG_EDIT_LIBRARY_TABLES dlg( aParent, _( "Symbol Libraries" ) );
805 
806  dlg.InstallPanel( new PANEL_SYM_LIB_TABLE( &dlg, globalTable, globalTablePath,
807  projectTable, projectTableFn.GetFullPath(),
808  aKiway->Prj().GetProjectPath() ) );
809 
810  if( dlg.ShowModal() == wxID_CANCEL )
811  {
812  if( libEditor )
813  libEditor->ThawSearchTree();
814 
815  return;
816  }
817 
818  if( dlg.m_GlobalTableChanged )
819  {
820  try
821  {
822  globalTable->Save( globalTablePath );
823  }
824  catch( const IO_ERROR& ioe )
825  {
826  msg.Printf( _( "Error saving global library table:\n\n%s" ), ioe.What() );
827  wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
828  }
829  }
830 
831  if( dlg.m_ProjectTableChanged )
832  {
833  try
834  {
835  projectTable->Save( projectTableFn.GetFullPath() );
836  }
837  catch( const IO_ERROR& ioe )
838  {
839  msg.Printf( _( "Error saving project-specific library table:\n\n%s" ), ioe.What() );
840  wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
841  }
842  }
843 
844  if( schEditor )
845  schEditor->SyncView();
846 
847  if( libEditor )
848  {
849  // Check if the currently selected symbol library been removed or disabled.
850  if( !currentLib.empty()
851  && !projectTable->HasLibrary( currentLib, true ) )
852  {
853  libEditor->SetCurLib( wxEmptyString );
854  libEditor->emptyScreen();
855  }
856 
857  libEditor->SyncLibraries( true );
858  libEditor->ThawSearchTree();
859  }
860 
861  if( libViewer )
862  libViewer->ReCreateListLib();
863 }
static const wxString & GetSymbolLibTableFileName()
static SYMBOL_LIB_TABLE & GetGlobalLibTable()
bool HasLibrary(const wxString &aNickname, bool aCheckEnabled=false) const
Test for the existence of aNickname in the library table.
VTBL_ENTRY PROJECT & Prj() const
Function Prj returns the PROJECT associated with this KIWAY.
Definition: kiway.cpp:172
Schematic editor (Eeschema) main window.
VTBL_ENTRY const wxString GetProjectPath() const
Function GetProjectPath returns the full path of the project.
Definition: project.cpp:122
Symbol library viewer main window.
wxString GetCurLib() const
The nickname of the current library being edited and empty string if none.
VTBL_ENTRY KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=NULL)
Function Player returns the KIWAY_PLAYER* given a FRAME_T.
Definition: kiway.cpp:342
virtual const wxString What() const
A composite of Problem() and Where()
Definition: exceptions.cpp:33
void SaveAll()
Saves all modified parts and libraries.
void SyncView()
Mark all items for refresh.
Dialog to show and edit symbol library tables.
int UnsavedChangesDialog(wxWindow *parent, wxString aMessage, bool *aApplyToAll)
A specialized version of HandleUnsavedChanges which handles an apply-to-all checkbox.
Definition: confirm.cpp:148
void emptyScreen()
Restores the empty editor screen, without any part or library selected.
void SyncLibraries(bool aShowProgress)
Synchronize the library manager to the symbol library table, and then the symbol tree to the library ...
The symbol library editor main window.
bool HasLibModifications() const
Check if any pending libraries have been modified.
#define _(s)
Definition: 3d_actions.cpp:33
void Save(const wxString &aFileName) const
Write this library table to aFileName in s-expression form.
wxString SetCurLib(const wxString &aLibNickname)
Sets the current library nickname and returns the old library nickname.
bool ReCreateListLib()
Creates or recreates a sorted list of currently loaded libraries.
Struct IO_ERROR is a class used to hold an error message and may be used when throwing exceptions con...
Definition: ki_exception.h:76
static wxString GetGlobalTableFileName()
Fetch the global symbol library table file name.

References _, LIB_EDIT_FRAME::emptyScreen(), FRAME_SCH, FRAME_SCH_LIB_EDITOR, FRAME_SCH_VIEWER, LIB_EDIT_FRAME::FreezeSearchTree(), LIB_EDIT_FRAME::GetCurLib(), SYMBOL_LIB_TABLE::GetGlobalLibTable(), SYMBOL_LIB_TABLE::GetGlobalTableFileName(), PROJECT::GetProjectPath(), SYMBOL_LIB_TABLE::GetSymbolLibTableFileName(), LIB_EDIT_FRAME::HasLibModifications(), LIB_TABLE::HasLibrary(), DIALOG_EDIT_LIBRARY_TABLES::InstallPanel(), DIALOG_EDIT_LIBRARY_TABLES::m_GlobalTableChanged, DIALOG_EDIT_LIBRARY_TABLES::m_ProjectTableChanged, KIWAY::Player(), KIWAY::Prj(), LIB_VIEW_FRAME::ReCreateListLib(), LIB_EDIT_FRAME::RevertAll(), LIB_TABLE::Save(), LIB_EDIT_FRAME::SaveAll(), LIB_EDIT_FRAME::SetCurLib(), LIB_EDIT_FRAME::SyncLibraries(), SCH_BASE_FRAME::SyncView(), LIB_EDIT_FRAME::ThawSearchTree(), UnsavedChangesDialog(), and IO_ERROR::What().

Referenced by SCH::IFACE::CreateWindow().