diff options
Diffstat (limited to 'cvpcb/cvpcb_mainframe.h')
-rw-r--r-- | cvpcb/cvpcb_mainframe.h | 306 |
1 files changed, 306 insertions, 0 deletions
diff --git a/cvpcb/cvpcb_mainframe.h b/cvpcb/cvpcb_mainframe.h new file mode 100644 index 0000000..f868b78 --- /dev/null +++ b/cvpcb/cvpcb_mainframe.h @@ -0,0 +1,306 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2011 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com + * Copyright (C) 1992-2012 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 + */ + +/** + * @file cvpcb_mainframe.h + */ + +#ifndef _CVPCB_MAINFRAME_H_ +#define _CVPCB_MAINFRAME_H_ + +#include <wx/listctrl.h> +#include <wx/filename.h> +#include <pcb_netlist.h> +#include <footprint_info.h> + +#include <wxBasePcbFrame.h> +#include <config_params.h> +#include <autosel.h> + + +/* Forward declarations of all top-level window classes. */ +class wxAuiToolBar; +class FOOTPRINTS_LISTBOX; +class COMPONENTS_LISTBOX; +class LIBRARY_LISTBOX; +class DISPLAY_FOOTPRINTS_FRAME; +class COMPONENT; +class FP_LIB_TABLE; + +namespace CV { struct IFACE; } + +/** + * The CvPcb application main window. + */ +class CVPCB_MAINFRAME : public KIWAY_PLAYER +{ + friend struct CV::IFACE; + + wxArrayString m_footprintListEntries; + +public: + bool m_KeepCvpcbOpen; + FOOTPRINTS_LISTBOX* m_footprintListBox; + LIBRARY_LISTBOX* m_libListBox; + COMPONENTS_LISTBOX* m_compListBox; + wxAuiToolBar* m_mainToolBar; + wxArrayString m_ModuleLibNames; + wxArrayString m_EquFilesNames; + wxString m_NetlistFileExtension; + wxString m_DocModulesFileName; + FOOTPRINT_LIST m_footprints; + NETLIST m_netlist; + +protected: + int m_undefinedComponentCnt; + bool m_modified; + bool m_isEESchemaNetlist; + bool m_skipComponentSelect; // true to skip OnSelectComponent event + // (in automatic selection/deletion of associations) + PARAM_CFG_ARRAY m_projectFileParams; + + CVPCB_MAINFRAME( KIWAY* aKiway, wxWindow* aParent ); + +public: + ~CVPCB_MAINFRAME(); + + bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl=0 ); // overload KIWAY_PLAYER + + void KiwayMailIn( KIWAY_EXPRESS& aEvent ); // override virtual from KIWAY_PLAYER + + /** + * @return a pointer on the Footprint Viewer frame, if exists, or NULL + */ + DISPLAY_FOOTPRINTS_FRAME* GetFpViewerFrame(); + + /** + * Function OnSelectComponent + * Called when clicking on a component in component list window + * * Updates the filtered footprint list, if the filtered list option is selected + * * Updates the current selected footprint in footprint list + * * Updates the footprint shown in footprint display window (if opened) + */ + void OnSelectComponent( wxListEvent& event ); + + /** + * Function OnEditFootrprintLibraryTable + * displays the footprint library table editing dialog and updates the global and local + * footprint tables accordingly. + */ + void OnEditFootrprintLibraryTable( wxCommandEvent& event ); + + void OnQuit( wxCommandEvent& event ); + void OnCloseWindow( wxCloseEvent& Event ); + void OnSize( wxSizeEvent& SizeEvent ); + void ReCreateHToolbar(); + virtual void ReCreateMenuBar(); + + void ChangeFocus( bool aMoveRight ); + + void ToFirstNA( wxCommandEvent& event ); + void ToPreviousNA( wxCommandEvent& event ); + + /** + * Function DelAssociations + * removes all component footprint associations already made + */ + void DelAssociations( wxCommandEvent& event ); + + void SaveProjectFile( wxCommandEvent& aEvent ); + void SaveQuitCvpcb( wxCommandEvent& event ); + + /** + * Function LoadNetList + * reads a netlist selected by user when clicking on load netlist button or any entry + * in the file history menu. + */ + void LoadNetList( wxCommandEvent& event ); + + /** + * Function OnEditLibraryTable + * envokes the footprint library table edit dialog. + */ + void OnEditFootprintLibraryTable( wxCommandEvent& aEvent ); + + void OnConfigurePaths( wxCommandEvent& aEvent ); + + /** + * Function OnEditEquFilesList + * envokes the equ files list edit dialog. + */ + void OnEditEquFilesList( wxCommandEvent& aEvent ); + + void OnKeepOpenOnSave( wxCommandEvent& event ); + void DisplayModule( wxCommandEvent& event ); + + /** + * Called by the automatic association button + * Read *.equ files to try to find corresponding footprint + * for each component that is not already linked to a footprint ( a "free" + * component ) + * format of a line: + * 'cmp_ref' 'footprint_name' + */ + void AutomaticFootprintMatching( wxCommandEvent& event ); + + /** + * Function OnSelectFilteringFootprint + * is the command event handler for enabling and disabling footprint filtering. + */ + void OnSelectFilteringFootprint( wxCommandEvent& event ); + + void OnUpdateKeepOpenOnSave( wxUpdateUIEvent& event ); + + /** + * Function SetNewPkg + * set the footprint name for all selected components in component list + * and selects the next component. + * @param aFootprintName = the new footprint name + */ + void SetNewPkg( const wxString& aFootprintName ); + + /** + * Function SetNewPkg + * Set the footprint name for the component of position aIndex in the component list + * + * @param aFootprintName = the new footprint name + * @param aIndex = the index of the component to modify in the component list + */ + void SetNewPkg( const wxString& aFootprintName, int aIndex ); + + void BuildCmpListBox(); + void BuildFOOTPRINTS_LISTBOX(); + void BuildLIBRARY_LISTBOX(); + + /** + * Create or Update the frame showing the current highlighted footprint + * and (if showed) the 3D display frame + */ + void CreateScreenCmp(); + + /** + * Function SaveEdits + * saves the edits that the user has done by sending them back to eeschema + * via the kiway. + */ + void SaveEdits(); + + /** + * Function ReadNetList + * reads the netlist (.net) file defined by #m_NetlistFileName. + * and the corresponding cmp to footprint (.cmp) link file + * @param aNetlist is the netlist from eeschema in kicad s-expr format. + */ + bool ReadNetListAndLinkFiles( const std::string& aNetlist ); + + int ReadSchematicNetlist( const std::string& aNetlist ); + + /** + * Function LoadProjectFile + * reads the configuration parameter from the project (.pro) file \a aFileName + */ + void LoadProjectFile(); + + void LoadSettings( wxConfigBase* aCfg ); // override virtual + + void SaveSettings( wxConfigBase* aCfg ); // override virtual + + /** + * Function DisplayStatus + * updates the information displayed on the status bar at bottom of the main frame. + * + * When the library or component list controls have the focus, the footprint assignment + * status of the components is displayed in the first status bar pane and the list of + * filters for the selected component is displayed in the second status bar pane. When + * the footprint list control has the focus, the description of the selected footprint is + * displayed in the first status bar pane and the key words for the selected footprint are + * displayed in the second status bar pane. The third status bar pane always displays the + * current footprint list filtering. + */ + void DisplayStatus(); + + /** + * Function LoadFootprintFiles + * reads the list of footprint (*.mod files) and generate the list of footprints. + * for each module are stored + * the module name + * documentation string + * associated keywords + * m_ModuleLibNames is the list of library that must be read (loaded) + * fills m_footprints + * @return true if libraries are found, false otherwise. + */ + bool LoadFootprintFiles(); + + /** + * Function GetProjectFileParameters + * return project file parameter list for CvPcb. + * <p> + * Populate the project file parameter array specific to CvPcb if it hasn't + * already been populated and return a reference to the array to the caller. + * Creating the parameter list at run time has the advantage of being able + * to define local variables. The old method of statically building the array + * at compile time requiring global variable definitions. + * </p> + * + * @return A reference to a PARAM_CFG_ARRAY contain the project settings for CvPcb. + */ + PARAM_CFG_ARRAY& GetProjectFileParameters( void ); + + /** + * Function UpdateTitle + * sets the main window title bar text. + * <p> + * If file name defined by CVPCB_MAINFRAME::m_NetlistFileName is not set, the title is + * set to the application name appended with no file. Otherwise, the title is set to + * the full path and file name and read only is appended to the title if the user does + * not have write access to the file. + */ + void UpdateTitle(); + + /** + * Function SendMessageToEESCHEMA + * Send a remote command to Eeschema via a socket, + * Commands are + * $PART: "reference" put cursor on component anchor + */ + void SendMessageToEESCHEMA(); + + COMPONENT* GetSelectedComponent(); + +private: + + /** + * read the .equ files and populate the list of equvalents + * @param aList the list to populate + * @param aErrorMessages is a pointer to a wxString to store error messages + * (can be NULL) + * @return the error count ( 0 = no error) + */ + int buildEquivalenceList( FOOTPRINT_EQUIVALENCE_LIST& aList, wxString * aErrorMessages = NULL ); + + DECLARE_EVENT_TABLE() +}; + +#endif //#ifndef _CVPCB_MAINFRAME_H_ |