/** * @file wizard_add_fplib.h */ /* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * 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 */ #include #include #include // A helper class to handle the different types of lib depending // on the plugin: ext, type of lib: files/folders ... and info // needed to populate the main fp lib table class LIB_DESCR { public: wxString m_PluginName; // The "official" name of the plugin (see fp lib table dialog) wxString m_Ext; // standard extension (.mod, .pretty ...) wxString m_EnvVarName; // the environment var if selected, or empty wxString m_DefaultPath; bool m_IsAbsolutePath; // true if absolue path is selected bool m_IsFile; // true for libs which are single files, // false for libs which are directories containing footprints bool m_IsGitHub; // true only for GitHub plugin LIB_DESCR() { m_IsAbsolutePath = true; m_IsFile = true; m_IsGitHub = false; } }; class WIZARD_FPLIB_TABLE : public WIZARD_FPLIB_TABLE_BASE { int m_rowPrjEnvVarPosition; // the row of the PROJECT_VAR_NAME int m_predefinedEnvVarCnt; // number of predefined env var when calling the wizard // at least 3 are always defined LIB_DESCR * m_currLibDescr; // static members to store options during a session static int m_last_plugin_choice; static int m_last_defaultpath_choice; // This enum must have the same order than m_rbPathManagement enum OPT_PATH { PROJECT_PATH, ENV_VAR_PATH, ABSOLUTE_PATH }; // This enum must have the same order than m_rbFpLibFormat enum OPT_PLUGIN { KICAD_PLUGIN, GITHUB_PLUGIN, LEGACY_PLUGIN, EAGLE_PLUGIN, GEDA_PCB_PLUGIN }; public: WIZARD_FPLIB_TABLE( wxWindow* aParent, wxArrayString& aEnvVariableList ); wxWizardPage* GetFirstPage() { return m_pages[0]; } ~WIZARD_FPLIB_TABLE(); /** * Return info on lib at line aIdx in aLibDescr * @param aLibDescr = a wxArrayString to return the nickname, the lib URI and the lin type * @return true if aIdx lin exists */ bool GetLibDescr( int aIdx, wxArrayString& aLibDescr ) { int count = m_gridFpListLibs->GetTable()->GetRowsCount(); if( aIdx >= count ) return false; // Return info // Add the nickname: aLibDescr.Add( m_gridFpListLibs->GetCellValue( aIdx, 0 ) ); // Add the full path: aLibDescr.Add( m_gridFpListLibs->GetCellValue( aIdx, 1 ) ); // Add the plugin name: aLibDescr.Add( m_gridFpListLibs->GetCellValue( aIdx, 2 ) ); return true; } private: void initDlg( wxArrayString& aEnvVariableList ); wxString GetSelectedEnvVar(); // return the selected env variable wxString GetSelectedEnvVarValue(); // return the selected env variable value bool setSecondPage(); // Init prms for the second wizard page bool setLastPage(); // Init prms for the last wizard page void selectLibsFiles(); // select a set of library files void selectLibsFolders(); // select a set of library folders void selectLibsGithub(); // select a set of library on Github void updateFromPlugingChoice(); // update dialog options and widgets // depending on the plugin choice int GetEnvVarCount() // Get the number of rows in env var table { return m_gridEnvironmentVariablesList->GetTable()->GetRowsCount(); } int GetLibsCount() // Get the number of rows in libs table { return m_gridFpListLibs->GetTable()->GetRowsCount(); } bool IsGithubPlugin() // Helper funct, return true if { // the Github plugin is the choice return m_rbFpLibFormat->GetSelection() == GITHUB_PLUGIN; } int HasGithubEnvVarCompatible(); // Return the first index to one env var // which defines a url compatible github // or -1 if not found // Populate the library list with the currently selected libs void populateLibList( const wxArrayString& aNickNames, const wxArrayString& aPaths, const wxString& aPluginName ); // Virtual event functions, from WIZARD_FPLIB_TABLE_BASE void OnFinish( wxWizardEvent& event ) { event.Skip(); } void OnPageChanged( wxWizardEvent& event ); void OnPageChanging( wxWizardEvent& event ); void OnAddEVariable( wxCommandEvent& event ); void OnRemoveEVariable( wxCommandEvent& event ); void OnAddFpLibs( wxCommandEvent& event ); void OnRemoveFpLibs( wxCommandEvent& event ); void OnPathManagementSelection( wxCommandEvent& event ); void OnSelectEnvVarCell( wxGridEvent& event ); void OnPluginSelection( wxCommandEvent& event ); bool ValidateOptions(); }; // Specialized helper classes to handle the different plugin types: class LIB_DESCR_KICAD: public LIB_DESCR { public: LIB_DESCR_KICAD(): LIB_DESCR() { m_PluginName = IO_MGR::ShowType( IO_MGR::KICAD ); m_Ext = wxT("pretty"); m_IsFile = false; } }; class LIB_DESCR_GITHUB: public LIB_DESCR { public: LIB_DESCR_GITHUB(): LIB_DESCR() { m_PluginName = IO_MGR::ShowType( IO_MGR::GITHUB ); m_Ext = wxT("pretty"); m_IsFile = false; m_IsGitHub = true; } }; class LIB_DESCR_LEGACY: public LIB_DESCR { public: LIB_DESCR_LEGACY(): LIB_DESCR() { m_PluginName = IO_MGR::ShowType( IO_MGR::LEGACY ); m_Ext = wxT("mod"); } }; class LIB_DESCR_EAGLE: public LIB_DESCR { public: LIB_DESCR_EAGLE(): LIB_DESCR() { m_PluginName = IO_MGR::ShowType( IO_MGR::EAGLE ); m_Ext = wxT("lbr"); m_IsFile = true; } }; class LIB_DESCR_GEDA: public LIB_DESCR { public: // No specific extension known for folders LIB_DESCR_GEDA(): LIB_DESCR() { m_PluginName = IO_MGR::ShowType( IO_MGR::GEDA_PCB ); m_IsFile = false; } };