diff options
Diffstat (limited to 'kicad/kicad.h')
-rw-r--r-- | kicad/kicad.h | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/kicad/kicad.h b/kicad/kicad.h new file mode 100644 index 0000000..aa98820 --- /dev/null +++ b/kicad/kicad.h @@ -0,0 +1,337 @@ +/** + * @file kicad/kicad.h + * @brief KICAD_MANAGER_FRAME is the KiCad main frame. + */ + +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013 CERN (www.cern.ch) + * Copyright (C) 2015 KiCad Developers, see CHANGELOG.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 + */ + +#ifndef KICAD_H +#define KICAD_H + +#include <vector> + +#include <wx/treectrl.h> +#include <wx/dragimag.h> +#include <wx/filename.h> +#include <wx/process.h> + +#include <id.h> +#include <wxstruct.h> + +#define KICAD_MANAGER_FRAME_NAME wxT( "KicadFrame" ) + +class LAUNCHER_PANEL; +class TREEPROJECTFILES; +class TREE_PROJECT_FRAME; + +// Enum to identify the type of files handled by Kicad manager +// +// When changing this enum please verify (and perhaps update) +// TREE_PROJECT_FRAME::GetFileExt(), +// s_AllowedExtensionsToList[] + +enum TreeFileType { + TREE_PROJECT = 1, + TREE_SCHEMA, // Schematic file (.sch) + TREE_LEGACY_PCB, // board file (.brd) legacy format + TREE_SEXP_PCB, // board file (.kicad_brd) new s expression format + TREE_GERBER, // Gerber file (.pho, .g*) + TREE_HTML, // HTML file (.htm, *.html) + TREE_PDF, // PDF file (.pdf) + TREE_TXT, // ascii text file (.txt) + TREE_NET, // netlist file (.net) + TREE_UNKNOWN, + TREE_DIRECTORY, + TREE_CMP_LINK, // cmp/footprint link file (.cmp) + TREE_REPORT, // report file (.rpt) + TREE_FP_PLACE, // fooprints position (place) file (.pos) + TREE_DRILL, // Excellon drill file (.drl) + TREE_SVG, // SVG file (.svg) + TREE_PAGE_LAYOUT_DESCR, // Page layout and title block descr file (.kicad_wks) + TREE_FOOTPRINT_FILE, // footprint file (.kicad_mod) + TREE_SCHEMATIC_LIBFILE, // schematic library file (.lib) + TREE_MAX +}; + + +/** + * Command IDs for KiCad. + * + * Please add IDs that are unique to Kicad here and not in the global id.h file. + * This will prevent the entire project from being rebuilt when adding + * new commands to KiCad. + * + * However, now the Kicad manager and other sub applications are running inside + * the same application, these IDs are kept unique inside the whole Kicad code + * See the global id.h which reserves room for the Kicad manager IDs + * and expand this room if needed + * + * We have experienced issues with duplicate menus IDs between frames + * because wxUpdateUIEvent events are sent to parent frames, when a wxUpdateUIEvent + * event function does not exists for some menuitems ID, and therefore + * with duplicate menuitems IDs in different frames, the wrong menuitem can be used + * by a function called by the wxUpdateUIEvent event loop. + * + * The number of items in this list should be less than ROOM_FOR_KICADMANAGER (see id.h) + */ + +enum id_kicad_frm { + ID_LEFT_FRAME = ID_KICAD_MANAGER_START, + ID_PROJECT_TREE, + ID_PROJECT_TXTEDIT, + ID_PROJECT_TREE_REFRESH, + ID_PROJECT_NEWDIR, + ID_PROJECT_DELETE, + ID_PROJECT_RENAME, + ID_PROJECT_OPEN_FILE_WITH_TEXT_EDITOR, + + ID_TO_SCH, + ID_TO_SCH_LIB_EDITOR, + ID_TO_PCB, + ID_TO_PCB_FP_EDITOR, + ID_TO_CVPCB, + ID_TO_GERBVIEW, + ID_TO_BITMAP_CONVERTER, + ID_TO_PCB_CALCULATOR, + ID_TO_PL_EDITOR, + + ID_TO_TEXT_EDITOR, + ID_BROWSE_AN_SELECT_FILE, + ID_SELECT_PREFERED_EDITOR, + ID_SELECT_PREFERED_PDF_BROWSER_NAME, + ID_SELECT_PREFERED_PDF_BROWSER, + ID_SELECT_DEFAULT_PDF_BROWSER, + ID_SAVE_AND_ZIP_FILES, + ID_READ_ZIP_ARCHIVE, + ID_INIT_WATCHED_PATHS, + + // Please, verify: the number of items in this list should be + // less than ROOM_FOR_KICADMANAGER (see id.h) + ID_KICADMANAGER_END_LIST +}; + + +/** + * Class KICAD_MANAGER_FRAME + * is the main KiCad project manager frame. It is not a KIWAY_PLAYER. + */ +class KICAD_MANAGER_FRAME : public EDA_BASE_FRAME +{ +public: + KICAD_MANAGER_FRAME( wxWindow* parent, const wxString& title, + const wxPoint& pos, const wxSize& size ); + + ~KICAD_MANAGER_FRAME(); + + void OnCloseWindow( wxCloseEvent& Event ); + void OnSize( wxSizeEvent& event ); + + /** + * Function OnLoadProject + * loads an exiting or creates a new project (.pro) file. + */ + void OnLoadProject( wxCommandEvent& event ); + + /** + * Function OnCreateProjectFromTemplate + * Creates a new project folder, copy a template into this new folder. + * and open this new projrct as working project + */ + void OnCreateProjectFromTemplate( wxCommandEvent& event ); + + /** + * Function OnSaveProject + * is the command event hendler to Save the project (.pro) file containing the top level + * configuration parameters. + */ + void OnSaveProject( wxCommandEvent& event ); + + void OnArchiveFiles( wxCommandEvent& event ); + void OnUnarchiveFiles( wxCommandEvent& event ); + + void OnRunEeschema( wxCommandEvent& event ); + void OnRunSchLibEditor( wxCommandEvent& event ); + void OnRunPcbNew( wxCommandEvent& event ); + void OnRunPcbFpEditor( wxCommandEvent& event ); + void OnRunGerbview( wxCommandEvent& event ); + void OnRunBitmapConverter( wxCommandEvent& event ); + void OnRunPcbCalculator( wxCommandEvent& event ); + void OnRunPageLayoutEditor( wxCommandEvent& event ); + + void OnConfigurePaths( wxCommandEvent& aEvent ); + void OnOpenTextEditor( wxCommandEvent& event ); + void OnOpenFileInTextEditor( wxCommandEvent& event ); + void OnOpenFileInEditor( wxCommandEvent& event ); + + void OnFileHistory( wxCommandEvent& event ); + void OnExit( wxCommandEvent& event ); + void Process_Preferences( wxCommandEvent& event ); + + void Process_Config( wxCommandEvent& event ); + + void ReCreateMenuBar(); + void RecreateBaseHToolbar(); + + /** + * Function PrintMsg + * displays \a aText in the text panel. + * + * @param aText The text to display. + */ + void PrintMsg( const wxString& aText ); + + /** + * a minor helper function: + * Prints the Current Working Dir name and the projet name on the text panel. + */ + void PrintPrjInfo(); + + /** + * a minor helper function: + * Erase the text panel. + */ + void ClearMsg(); + + void OnRefresh( wxCommandEvent& event ); + void OnSelectDefaultPdfBrowser( wxCommandEvent& event ); + void OnSelectPreferredPdfBrowser( wxCommandEvent& event ); + + void OnUpdateDefaultPdfBrowser( wxUpdateUIEvent& event ); + void OnUpdatePreferredPdfBrowser( wxUpdateUIEvent& event ); + void OnUpdateRequiresProject( wxUpdateUIEvent& event ); + + void CreateNewProject( const wxString& aPrjFullFileName, bool aTemplateSelector ); + + void LoadSettings( wxConfigBase* aCfg ); + + void SaveSettings( wxConfigBase* aCfg ); + + /** + * Function Execute + * opens another KiCad application and logs a message. + * @param frame = owner frame. + * @param execFile = name of the executable file. + * @param param = parameters to be passed to the executable. + */ + void Execute( wxWindow* frame, const wxString& execFile, + wxString param = wxEmptyString ); + + class TERMINATE_HANDLER : public wxProcess + { + private: + wxString appName; + + public: + TERMINATE_HANDLER( const wxString& appName ) : + appName(appName) + { + } + + void OnTerminate( int pid, int status ); + }; + + /** + * Called by sending a event with id = ID_INIT_WATCHED_PATHS + * rebuild the list of wahtched paths + */ + void OnChangeWatchedPaths(wxCommandEvent& aEvent ); + + + void SetProjectFileName( const wxString& aFullProjectProFileName ); + const wxString GetProjectFileName(); + + // read only accessors + const wxString SchFileName(); + const wxString PcbFileName(); + const wxString PcbLegacyFileName(); + + void ReCreateTreePrj(); + + /// Call this only for a PCB associated with the current project. That is, + /// it must have the same path and name as the project *.pro file. + void RunPcbNew( const wxString& aProjectBoardFileName ); + + /// Call this only for a SCH associated with the current project. That is, + /// it must have the same path and name as the project *.pro file. + void RunEeschema( const wxString& aProjectSchematicFileName ); + + DECLARE_EVENT_TABLE() + +private: + + wxConfigBase* config(); // override EDA_BASE_FRAME virtual + + const SEARCH_STACK& sys_search(); // override EDA_BASE_FRAME virtual + + wxString help_name(); // override EDA_BASE_FRAME virtual + + TREE_PROJECT_FRAME* m_LeftWin; + LAUNCHER_PANEL* m_Launcher; + wxTextCtrl* m_MessagesBox; + wxAuiToolBar* m_VToolBar; // Vertical toolbar (not used) + + int m_leftWinWidth; + EDA_HOTKEY_CONFIG* m_manager_Hokeys_Descr; + + void language_change( wxCommandEvent& event ); + + bool m_active_project; +}; + + +/** class LAUNCHER_PANEL + */ +class LAUNCHER_PANEL : public wxPanel +{ +private: + int m_buttonSeparation; // button distance in pixels + wxPoint m_buttonsListPosition; /* position of the left bottom corner + * of the first bitmap button + */ + wxPoint m_buttonLastPosition; // position of the last button in the window + int m_bitmapButtons_maxHeigth; // height of bigger bitmap buttons + // Used to calculate the height of the panel. + +public: LAUNCHER_PANEL( wxWindow* parent ); + ~LAUNCHER_PANEL() { }; + + int GetPanelHeight() const; + +private: + + /** + * Function CreateCommandToolbar + * creates the main tool bar buttons (fast launch buttons) + */ + void CreateCommandToolbar( void ); + + wxBitmapButton* AddBitmapButton( wxWindowID aId, const wxBitmap& aBitmap ); +}; + +// The C++ project manager includes a single PROJECT in its link image. +class PROJECT; +extern PROJECT& Prj(); + +#endif |