/* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2010 Jean-Pierre Charras, jp.charras@wanadoo.fr * Copyright (C) 1992-2019 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 3 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, see . */ #ifndef WXPCB_STRUCT_H_ #define WXPCB_STRUCT_H_ #include #include #include "pcb_base_edit_frame.h" #include "config_params.h" #include "undo_redo_container.h" #include "zones.h" /* Forward declarations of classes. */ class ACTION_PLUGIN; class PCB_SCREEN; class BOARD; class BOARD_COMMIT; class BOARD_ITEM_CONTAINER; class TEXTE_PCB; class MODULE; class TRACK; class VIA; class D_PAD; class TEXTE_MODULE; class PCB_TARGET; class DIMENSION; class EDGE_MODULE; class DRC; class DIALOG_PLOT; class ZONE_CONTAINER; class DRAWSEGMENT; class GENERAL_COLLECTOR; class GENERAL_COLLECTORS_GUIDE; class PCB_LAYER_WIDGET; class MARKER_PCB; class BOARD_ITEM; class PCB_LAYER_BOX_SELECTOR; class NETLIST; class REPORTER; struct PARSE_ERROR; class IO_ERROR; class FP_LIB_TABLE; class BOARD_NETLIST_UPDATER; class ACTION_MENU; namespace PCB { struct IFACE; } // KIFACE_I is in pcbnew.cpp /** * Enum to signify the result of editing tracks and vias */ enum TRACK_ACTION_RESULT { TRACK_ACTION_DRC_ERROR = -1,//!< TRACK_ACTION_DRC_ERROR - Track not changed to to DRC TRACK_ACTION_SUCCESS, //!< TRACK_ACTION_SUCCESS - Track changed successfully TRACK_ACTION_NONE //!< TRACK_ACTION_NONE - Nothing to change }; /** * Class PCB_EDIT_FRAME * is the main frame for Pcbnew. * * See also class PCB_BASE_FRAME(): Basic class for Pcbnew and GerbView. */ class PCB_EDIT_FRAME : public PCB_BASE_EDIT_FRAME { friend struct PCB::IFACE; friend class PCB_LAYER_WIDGET; /// The auxiliary right vertical tool bar used to access the microwave tools. wxAuiToolBar* m_microWaveToolBar; protected: PCB_LAYER_WIDGET* m_Layers; PARAM_CFG_ARRAY m_configParams; ///< List of Pcbnew configuration settings. wxString m_lastNetListRead; ///< Last net list read with relative path. // The Tool Framework initalization void setupTools(); wxString createBackupFile( const wxString& aFileName ); /** * switches currently used canvas (Cairo / OpenGL). * It also reinit the layers manager that slightly changes with canvases */ void SwitchCanvas( EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType ) override; #if defined(KICAD_SCRIPTING) && defined(KICAD_SCRIPTING_ACTION_MENU) /** * Function buildActionPluginMenus * Fill action menu with all registered action plugins */ void buildActionPluginMenus( ACTION_MENU* aActionMenu ); /** * Function AddActionPluginTools * Append action plugin buttons to main toolbar */ void AddActionPluginTools(); /** * Function RunActionPlugin * Executes action plugin's Run() method and updates undo buffer * @param aActionPlugin action plugin */ void RunActionPlugin( ACTION_PLUGIN* aActionPlugin ); /** * Function OnActionPluginMenu * Launched by the menu when an action is called * @param aEvent sent by wx */ void OnActionPluginMenu( wxCommandEvent& aEvent); /** * Function OnActionPluginButton * Launched by the button when an action is called * @param aEvent sent by wx */ void OnActionPluginButton( wxCommandEvent& aEvent ); /** * Function OnActionPluginRefresh * Refresh plugin list (reload Python plugins) * @param aEvent sent by wx */ void OnActionPluginRefresh( wxCommandEvent& aEvent) { PythonPluginsReload(); } #endif /** Has meaning only if KICAD_SCRIPTING_WXPYTHON option is * not defined * @return the frame name identifier for the python console frame */ static const wxChar * pythonConsoleNameId() { return wxT( "PythonConsole" ); } /** * @return a pointer to the python console frame, or NULL if not exist */ static wxWindow * findPythonConsole() { return FindWindowByName( pythonConsoleNameId() ); } /** * Updates the state of the GUI after a new board is loaded or created */ void onBoardLoaded(); /** * Function syncLayerWidgetLayer * updates the currently layer "selection" within the PCB_LAYER_WIDGET. * The currently selected layer is defined by the return value of GetActiveLayer(). *

* This function cannot be inline without including layer_widget.h in * here and we do not want to do that. *

*/ void syncLayerWidgetLayer(); /** * Function syncRenderStates * updates the "Render" checkboxes in the layer widget according * to current toggle values determined by IsElementVisible(), and is helpful * immediately after loading a BOARD which may have state information in it. */ void syncRenderStates(); /** * Function syncLayerVisibilities * updates each "Layer" checkbox in the layer widget according * to each layer's current visibility determined by IsLayerVisible(), and is * helpful immediately after loading a BOARD which may have state information in it. */ void syncLayerVisibilities(); /** * Function doAutoSave * performs auto save when the board has been modified and not saved within the * auto save interval. * * @return true if the auto save was successful. */ bool doAutoSave() override; /** * Function isautoSaveRequired * returns true if the board has been modified. */ bool isAutoSaveRequired() const override; /** * Load the given filename but sets the path to the current project path. * @param full filepath of file to be imported. * @param aFileType PCB_FILE_T value for filetype */ bool importFile( const wxString& aFileName, int aFileType ); /** * Use the existing edge_cut line thicknesses to infer the edge clearace. */ int inferLegacyEdgeClearance( BOARD* aBoard ); /** * Rematch orphaned zones and vias to schematic nets. */ bool fixEagleNets( const std::unordered_map& aRemap ); // protected so that PCB::IFACE::CreateWindow() is the only factory. PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ); public: PCB_LAYER_BOX_SELECTOR* m_SelLayerBox; // a combo box to display and select active layer wxChoice* m_SelTrackWidthBox; // a choice box to display and select current track width wxChoice* m_SelViaSizeBox; // a choice box to display and select current via diameter bool m_show_microwave_tools; bool m_show_layer_manager_tools; bool m_ZoneFillsDirty; // Board has been modified since last zone fill. virtual ~PCB_EDIT_FRAME(); /** * Function loadFootprints * loads the footprints for each #COMPONENT in \a aNetlist from the list of libraries. * * @param aNetlist is the netlist of components to load the footprints into. * @param aReporter is the #REPORTER object to report to. * @throw IO_ERROR if an I/O error occurs or a #PARSE_ERROR if a file parsing error * occurs while reading footprint library files. */ void LoadFootprints( NETLIST& aNetlist, REPORTER& aReporter ); void OnQuit( wxCommandEvent& event ); /** * Reload the Python plugins if they are newer than * the already loaded, and load new plugins if any * Do nothing if KICAD_SCRIPTING is not defined */ void PythonPluginsReload(); /** * Update the layer manager and other widgets from the board setup * (layer and items visibility, colors ...) */ void UpdateUserInterface(); /** * Execute a remote command send by Eeschema via a socket, * port KICAD_PCB_PORT_SERVICE_NUMBER (currently 4242) * this is a virtual function called by EDA_DRAW_FRAME::OnSockRequest(). * @param cmdline = received command from socket */ void ExecuteRemoteCommand( const char* cmdline ) override; void KiwayMailIn( KIWAY_EXPRESS& aEvent ) override; /** * Function ToPlotter * Open a dialog frame to create plot and drill files relative to the current board. */ void ToPlotter( int aID ); /** * Function SVG_Print * Shows the Export to SVG file dialog. */ void ExportSVG( wxCommandEvent& event ); // User interface update command event handlers. void OnUpdateLayerPair( wxUpdateUIEvent& aEvent ); void OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent ); bool LayerManagerShown(); bool MicrowaveToolbarShown(); void OnUpdateSelectViaSize( wxUpdateUIEvent& aEvent ); void OnUpdateSelectTrackWidth( wxUpdateUIEvent& aEvent ); void OnUpdateMuWaveToolbar( wxUpdateUIEvent& aEvent ); void OnLayerColorChange( wxCommandEvent& aEvent ); void OnRunEeschema( wxCommandEvent& event ); void UpdateTrackWidthSelectBox( wxChoice* aTrackWidthSelectBox, bool aEdit = true ); void UpdateViaSizeSelectBox( wxChoice* aViaSizeSelectBox, bool aEdit = true ); /** * Function IsGridVisible() , virtual * @return true if the grid must be shown */ bool IsGridVisible() const override; /** * Function SetGridVisibility() , virtual * It may be overloaded by derived classes * if you want to store/retrieve the grid visibility in configuration. * @param aVisible = true if the grid must be shown */ void SetGridVisibility( bool aVisible ) override; /** * Function GetGridColor() , virtual * @return the color of the grid */ COLOR4D GetGridColor() override; /** * Function SetGridColor() , virtual * @param aColor = the new color of the grid */ void SetGridColor( COLOR4D aColor ) override; // Configurations: void Process_Config( wxCommandEvent& event ); #if defined(KICAD_SCRIPTING) && defined(KICAD_SCRIPTING_ACTION_MENU) /** * Function SetActionPluginSettings * Set a set of plugins that have visible buttons on toolbar * Plugins are identified by their module path */ void SetActionPluginSettings( const std::vector< std::pair >& aPluginsWithButtons ); /** * Function GetActionPluginSettings * Get a set of plugins that have visible buttons on toolbar */ std::vector< std::pair > GetActionPluginSettings(); /** * Function GetActionPluginButtonVisible * Returns true if button visibility action plugin setting was set to true * or it is unset and plugin defaults to true. */ bool GetActionPluginButtonVisible( const wxString& aPluginPath, bool aPluginDefault ); /** * Function GetOrderedActionPlugins * Returns ordered list of plugins in sequence in which they should appear on toolbar or in settings */ std::vector GetOrderedActionPlugins(); #endif /** * Function GetProjectFileParameters * returns a project file parameter list for Pcbnew. *

* Populate a project file parameter array specific to Pcbnew. * 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 by design. *

* @return PARAM_CFG_ARRAY - it is only good until SetBoard() is called, so * don't keep it around past that event. */ PARAM_CFG_ARRAY GetProjectFileParameters(); /** * Function SaveProjectSettings * saves changes to the project settings to the project (.pro) file. * @param aAskForSave = true to open a dialog before saving the settings */ void SaveProjectSettings( bool aAskForSave ) override; /** * Load the current project's file configuration settings which are pertinent * to this PCB_EDIT_FRAME instance. * * @return always returns true. */ bool LoadProjectSettings(); /** * Function GetConfigurationSettings * returns the Pcbnew applications settings list. * * This replaces the old statically defined list that had the project * file settings and the application settings mixed together. This * was confusing and caused some settings to get saved and loaded * incorrectly. Currently, only the settings that are needed at start * up by the main window are defined here. There are other locally used * settings that are scattered throughout the Pcbnew source code. If you need * to define a configuration setting that needs to be loaded at run time, * this is the place to define it. * * @return - Reference to the list of applications settings. */ PARAM_CFG_ARRAY& GetConfigurationSettings(); void LoadSettings( wxConfigBase* aCfg ) override; void SaveSettings( wxConfigBase* aCfg ) override; wxConfigBase* GetSettings() { return config(); }; /** * Get the last net list read with the net list dialog box. * @return - Absolute path and file name of the last net list file successfully read. */ wxString GetLastNetListRead(); /** * Set the last net list successfully read by the net list dialog box. * * Note: the file path is converted to a path relative to the project file path. If * the path cannot be made relative, than m_lastNetListRead is set to and empty * string. This could happen when the net list file is on a different drive than * the project file. The advantage of relative paths is that is more likely to * work when opening the same project from both Windows and Linux. * * @param aNetListFile - The last net list file with full path successfully read. */ void SetLastNetListRead( const wxString& aNetListFile ); ///> @copydoc EDA_DRAW_FRAME::GetHotKeyDescription() EDA_HOTKEY* GetHotKeyDescription( int aCommand ) const override; void OnCloseWindow( wxCloseEvent& Event ) override; void Process_Special_Functions( wxCommandEvent& event ); void Tracks_and_Vias_Size_Event( wxCommandEvent& event ); /** * Function OnEditTextAndGraphics * Dialog for editing properties of text and graphic items, selected by type, layer, * and/or parent footprint. */ void OnEditTextAndGraphics( wxCommandEvent& event ); /** * Function OnEditTracksAndVias * Dialog for editing the properties of tracks and vias, selected by net, netclass, * and/or layer. */ void OnEditTracksAndVias( wxCommandEvent& event ); void ReCreateHToolbar() override; void ReCreateAuxiliaryToolbar() override; void ReCreateVToolbar() override; void ReCreateMicrowaveVToolbar(); void ReCreateOptToolbar() override; void ReCreateMenuBar() override; /** * Re create the layer Box by clearing the old list, and building * le new one, from the new layers names and cole layers * @param aForceResizeToolbar = true to resize the parent toolbar * false if not needed (mainly in parent toolbar creation, * or when the layers names are not modified) */ void ReCreateLayerBox( bool aForceResizeToolbar = true ); /** * Function SetCurrentNetClass * Must be called after a netclass selection (or after a netclass parameter change * calls BOARD_DESIGN_SETTINGS::SetCurrentNetClass() and update trace width and via size * combo boxes on main toolbar * Initialize vias and tracks values displayed in comb boxes of the auxiliary toolbar * and some others parameters (netclass name ....) * @param aNetClassName = the new netclass name * @return true if lists of tracks and vias sizes are modified */ bool SetCurrentNetClass( const wxString& aNetClassName ); /** * Function OnModify * must be called after a board change to set the modified flag. *

* Reloads the 3D view if required and calls the base PCB_BASE_FRAME::OnModify function * to update auxiliary information. *

*/ void OnModify() override; /** * Function SetActiveLayer * will change the currently active layer to \a aLayer and also * update the PCB_LAYER_WIDGET. */ void SetActiveLayer( PCB_LAYER_ID aLayer ) override; PCB_LAYER_WIDGET* GetLayerManager() { return m_Layers; } /** * Update the UI to reflect changes to the current layer's transparency. */ void OnUpdateLayerAlpha( wxUpdateUIEvent& aEvent ) override; /** * Function IsElementVisible * tests whether a given element category is visible. Keep this as an * inline function. * @param aElement is from the enum by the same name * @return bool - true if the element is visible. * @see enum GAL_LAYER_ID */ bool IsElementVisible( GAL_LAYER_ID aElement ) const; /** * Function SetElementVisibility * changes the visibility of an element category * @param aElement is from the enum by the same name * @param aNewState The new visibility state of the element category * @see enum PCB_LAYER_ID */ void SetElementVisibility( GAL_LAYER_ID aElement, bool aNewState ); /** * Function SetVisibleAlls * Set the status of all visible element categories and layers to VISIBLE */ void SetVisibleAlls(); /** * Function ReFillLayerWidget * changes out all the layers in m_Layers and may be called upon * loading a new BOARD. */ void ReFillLayerWidget(); ///> @copydoc EDA_DRAW_FRAME::UseGalCanvas() void ActivateGalCanvas() override; /** * Function ShowBoardSetupDialog */ void DoShowBoardSetupDialog( const wxString& aInitialPage = wxEmptyString, const wxString& aInitialParentPage = wxEmptyString ); /* toolbars update UI functions: */ void PrepareLayerIndicator(); void ToggleLayersManager(); void ToggleMicrowaveToolbar(); /** * Function DoGenFootprintsPositionFile * Creates an ascii footprint position file * @param aFullFileName = the full file name of the file to create * @param aUnitsMM = false to use inches, true to use mm in coordinates * @param aForceSmdItems = true to force all footprints with smd pads in list * = false to put only footprints with option "INSERT" in list * @param aSide = 0 to list footprints on BACK side, * 1 to list footprints on FRONT side * 2 to list footprints on both sides * @param aFormatCSV = true to use a comma separated file (CSV) format; defautl = false * @return the number of footprints found on aSide side, * or -1 if the file could not be created */ int DoGenFootprintsPositionFile( const wxString& aFullFileName, bool aUnitsMM, bool aForceSmdItems, int aSide, bool aFormatCSV = false ); /** * Function GenFootprintsReport * Calls DoGenFootprintsReport to create a footprint reprot file * See DoGenFootprintsReport for file format */ void GenFootprintsReport( wxCommandEvent& event ); /** * Function DoGenFootprintsReport * Creates an ascii footprint report file giving some infos on footprints * and board outlines * @param aFullFilename = the full file name of the file to create * @param aUnitsMM = false to use inches, true to use mm in coordinates * @return true if OK, false if error */ bool DoGenFootprintsReport( const wxString& aFullFilename, bool aUnitsMM ); void GenD356File( wxCommandEvent& event ); void OnFileHistory( wxCommandEvent& event ); /** * Function Files_io * @param event is the command event handler. * do nothing else than call Files_io_from_id with the * wxCommandEvent id */ void Files_io( wxCommandEvent& event ); /** * Function Files_io_from_id * Read and write board files * @param aId is an event ID ciming from file command events: * ID_LOAD_FILE * ID_MENU_READ_BOARD_BACKUP_FILE * ID_MENU_RECOVER_BOARD_AUTOSAVE * ID_NEW_BOARD * ID_SAVE_BOARD * ID_COPY_BOARD_AS * ID_SAVE_BOARD_AS * Files_io_from_id prepare parameters and calls the specialized function */ bool Files_io_from_id( int aId ); /** * Function OpenProjectFiles (was LoadOnePcbFile) * loads a KiCad board (.kicad_pcb) from \a aFileName. * * @param aFileSet - hold the BOARD file to load, a vector of one element. * * @param aCtl - KICTL_ bits, one to indicate that an append of the board file * aFileName to the currently loaded file is desired. * @see #KIWAY_PLAYER for bit defines. * * @return bool - false if file load fails, otherwise true. bool LoadOnePcbFile( const wxString& aFileName, bool aAppend = false, bool aForceFileDialog = false ); */ bool OpenProjectFiles( const std::vector& aFileSet, int aCtl = 0 ) override; /** * Function SavePcbFile * writes the board data structures to \a a aFileName * Creates backup when requested and update flags (modified and saved flgs) * * @param aFileName The file name to write or wxEmptyString to prompt user for * file name. * @param aCreateBackupFile Creates a back of \a aFileName if true. Helper * definitions #CREATE_BACKUP_FILE and #NO_BACKUP_FILE * are defined for improved code readability. * @return True if file was saved successfully. */ bool SavePcbFile( const wxString& aFileName, bool aCreateBackupFile = CREATE_BACKUP_FILE ); /** * Function SavePcbCopy * writes the board data structures to \a a aFileName * but unlike SavePcbFile, does not make anything else * (no backup, borad fliename change, no flag changes ...) * Used under a project mgr to save under a new name the current board * * When not under a project mgr, the full SavePcbFile is used. * @param aFileName The file name to write. * @return True if file was saved successfully. */ bool SavePcbCopy( const wxString& aFileName ); // BOARD handling /** * Function Clear_Pcb * delete all and reinitialize the current board * @param aQuery = true to prompt user for confirmation, false to initialize silently * @param aFinal = if true, we are clearing the board to exit, so don't run more events */ bool Clear_Pcb( bool aQuery, bool aFinal = false ); ///> @copydoc PCB_BASE_FRAME::SetBoard() void SetBoard( BOARD* aBoard ) override; ///> @copydoc PCB_BASE_EDIT_FRAME::GetModel() BOARD_ITEM_CONTAINER* GetModel() const override; ///> @copydoc PCB_BASE_FRAME::SetPageSettings() void SetPageSettings( const PAGE_INFO& aPageSettings ) override; /** * Function RecreateBOMFileFromBoard * Recreates a .cmp file from the current loaded board * this is the same as created by CvPcb. * can be used if this file is lost */ void RecreateCmpFileFromBoard( wxCommandEvent& aEvent ); /** * Function ArchiveModulesOnBoard * Save modules in a library: * @param aStoreInNewLib: * true : save modules in a existing lib. Existing footprints will be kept * or updated. * This lib should be in fp lib table, and is type is .pretty * false: save modules in a new lib. It it is an existing lib, * previous footprints will be removed * * @param aLibName: * optional library name to create, stops dialog call. * must be called with aStoreInNewLib as true */ void ArchiveModulesOnBoard( bool aStoreInNewLib, const wxString& aLibName = wxEmptyString, wxString* aLibPath = NULL ); /** * Function RecreateBOMFileFromBoard * Creates a BOM file from the current loaded board */ void RecreateBOMFileFromBoard( wxCommandEvent& aEvent ); /** * Function ExportToGenCAD * creates a file in GenCAD 1.4 format from the current board. */ void ExportToGenCAD( wxCommandEvent& event ); /** * Function OnExportVRML * will export the current BOARD to a VRML file. */ void OnExportVRML( wxCommandEvent& event ); /** * Function ExportVRML_File * Creates the file(s) exporting current BOARD to a VRML file. * * @note When copying 3D shapes files, the new filename is build from the full path * name, changing the separators by underscore. This is needed because files * with the same shortname can exist in different directories * @note ExportVRML_File generates coordinates in board units (BIU) inside the file. * @todo Use mm inside the file. A general scale transform is applied to the whole * file (1.0 to have the actual WRML unit im mm, 0.001 to have the actual WRML * unit in meters. * @note For 3D models built by a 3D modeler, the unit is 0,1 inches. A specific scale * is applied to 3D models to convert them to internal units. * * @param aFullFileName = the full filename of the file to create * @param aMMtoWRMLunit = the VRML scaling factor: * 1.0 to export in mm. 0.001 for meters * @param aExport3DFiles = true to copy 3D shapes in the subir a3D_Subdir * @param aUseRelativePaths set to true to use relative paths instead of absolute paths * in the board VRML file URLs. * @param aUsePlainPCB set to true to export a board with no copper or silkskreen; * this is useful for generating a VRML file which can be * converted to a STEP model. * @param a3D_Subdir = sub directory where 3D shapes files are copied. This is only used * when aExport3DFiles == true * @param aXRef = X value of PCB (0,0) reference point * @param aYRef = Y value of PCB (0,0) reference point * @return true if Ok. */ bool ExportVRML_File( const wxString & aFullFileName, double aMMtoWRMLunit, bool aExport3DFiles, bool aUseRelativePaths, bool aUsePlainPCB, const wxString & a3D_Subdir, double aXRef, double aYRef ); /** * Function OnExportIDF3 * will export the current BOARD to a IDFv3 board and lib files. */ void OnExportIDF3( wxCommandEvent& event ); /** * Function OnExportHyperlynx * will export the current BOARD to a Hyperlynx HYP file. */ void OnExportHyperlynx( wxCommandEvent& event ); /** * Function Export_IDF3 * Creates an IDF3 compliant BOARD (*.emn) and LIBRARY (*.emp) file. * * @param aPcb = a pointer to the board to be exported to IDF * @param aFullFileName = the full filename of the export file * @param aUseThou = set to true if the desired IDF unit is thou (mil) * @param aXRef = the board Reference Point in mm, X value * @param aYRef = the board Reference Point in mm, Y value * @return true if OK */ bool Export_IDF3( BOARD* aPcb, const wxString& aFullFileName, bool aUseThou, double aXRef, double aYRef ); /** * Function OnExportSTEP * Exports the current BOARD to a STEP assembly. */ void OnExportSTEP( wxCommandEvent& event ); /** * Function ExportSpecctraFile * will export the current BOARD to a specctra dsn file. * See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the * specification. * @return true if OK */ bool ExportSpecctraFile( const wxString& aFullFilename ); /** * Function ImportSpecctraSession * will import a specctra *.ses file and use it to relocate MODULEs and * to replace all vias and tracks in an existing and loaded BOARD. * See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the * specification. */ bool ImportSpecctraSession( const wxString& aFullFilename ); // Footprint editing (see also PCB_BASE_FRAME) void InstallFootprintPropertiesDialog( MODULE* Module ); int InstallExchangeModuleFrame( MODULE* aModule, bool updateMode, bool selectedMode ); /** * Function Exchange_Module * Replaces OldModule by NewModule, using OldModule settings: * position, orientation, pad netnames ...) * OldModule is deleted or put in undo list. * @param aSrc = footprint to replace * @param aDest = footprint to put * @param aCommit = commit that should store the changes */ void Exchange_Module( MODULE* aSrc, MODULE* aDest, BOARD_COMMIT& aCommit, bool deleteExtraTexts = true, bool resetTextLayers = true, bool resetTextEffects = true ); // loading modules: see PCB_BASE_FRAME /** * Function OnEditItemRequest * Install the corresponding dialog editor for the given item * @param aDC = the current device context * @param aItem = a pointer to the BOARD_ITEM to edit */ void OnEditItemRequest( BOARD_ITEM* aItem ) override; /** * Function Edit_TrackSegm_Width * Modify one track segment width or one via diameter (using DRC control). * @param aTrackItem = the track segment or via to modify */ void Edit_TrackSegm_Width( TRACK* aTrackItem ); void SwitchLayer( wxDC* DC, PCB_LAYER_ID layer ) override; /** * Function SetTrackSegmentWidth * Modify one track segment width or one via diameter (using DRC control). * Basic routine used by other routines when editing tracks or vias. * Note that casting this to boolean will allow you to determine whether any action * happened. * @param aTrackItem = the track segment or via to modify * @param aItemsListPicker = the list picker to use for an undo command * (can be NULL) * @param aUseNetclassValue = true to use NetClass value, false to use * current designSettings value * @return 0 if items successfully changed, * -1 if there was a DRC error, * 1 if items were changed successfully */ int SetTrackSegmentWidth( TRACK* aTrackItem, PICKED_ITEMS_LIST* aItemsListPicker, bool aUseNetclassValue ); // zone handling /** * Function Fill_All_Zones */ void Fill_All_Zones(); /** * Function Check_All_Zones * Checks for out-of-date fills and fills them if requested by the user. * @param aActiveWindow */ void Check_All_Zones( wxWindow* aActiveWindow ); /** * Function Edit_Zone_Params * Edit params (layer, clearance, ...) for a zone outline */ void Edit_Zone_Params( ZONE_CONTAINER* zone_container ); // Properties dialogs void ShowTargetOptionsDialog( PCB_TARGET* aTarget ); void ShowDimensionPropertyDialog( DIMENSION* aDimension ); void InstallNetlistFrame(); /** * Function FetchNetlistFromSchematic * @param aNetlist a NETLIST owned by the caller. This function fills it in. * @return true if a netlist was fetched. */ enum FETCH_NETLIST_MODE { NO_ANNOTATION, QUIET_ANNOTATION, ANNOTATION_DIALOG }; bool FetchNetlistFromSchematic( NETLIST& aNetlist, FETCH_NETLIST_MODE aMode ); /** * Function DoUpdatePCBFromNetlist * An automated version of UpdatePCBFromNetlist which skips the UI dialog. * @param aNetlist * @param aUseTimestamps */ void DoUpdatePCBFromNetlist( NETLIST& aNetlist, bool aUseTimestamps ); /** * Reads a netlist from a file into a NETLIST object. * * @param aFilename is the netlist to load * @param aNetlist is the object to populate with data * @param aReporter is a #REPORTER object to display messages * @return true if the netlist was read successfully */ bool ReadNetlistFromFile( const wxString &aFilename, NETLIST& aNetlist, REPORTER& aReporter ); /** * Called after netlist is updated * @param aUpdater is the updater object that was run * @param aRunDragCommand is set to true if the drag command was invoked by this call */ void OnNetlistChanged( BOARD_NETLIST_UPDATER& aUpdater, bool* aRunDragCommand ); #if defined( KICAD_SCRIPTING_WXPYTHON ) /** * Function ScriptingConsoleEnableDisable * enables or disabled the scripting console */ void ScriptingConsoleEnableDisable(); #endif void LockModule( MODULE* aModule, bool aLocked ); /** * Function SpreadFootprints * Footprints (after loaded by reading a netlist for instance) are moved * to be in a small free area (outside the current board) without overlapping. * @param aFootprints: a list of footprints to be spread out. * @param aMoveFootprintsOutsideBoardOnly: true to move only * footprints outside the board outlines * (they are outside if the position of a footprint anchor is outside * the board outlines bounding box). It imply the board outlines exist * @param aCheckForBoardEdges: true to try to place footprints outside of * board edges, if aSpreadAreaPosition is incorrectly chosen. * @param aSpreadAreaPosition the position of the upper left corner of the * area used to spread footprints * @param aPrepareUndoCommand = true (defualt) to commit a undo command for the * spread footprints, false to do just the spread command * (no undo specific to this move command) */ void SpreadFootprints( std::vector* aFootprints, bool aMoveFootprintsOutsideBoardOnly, bool aCheckForBoardEdges, wxPoint aSpreadAreaPosition, bool aPrepareUndoCommand = true ); /** * Function SendMessageToEESCHEMA * sends a message to the schematic editor so that it may move its cursor * to a part with the same reference as the objectToSync * @param objectToSync The object whose reference is used to synchronize Eeschema. */ void SendMessageToEESCHEMA( BOARD_ITEM* objectToSync ); /** * Sends a net name to eeschema for highlighting * * @param aNetName is the name of a net, or empty string to clear highlight */ void SendCrossProbeNetName( const wxString& aNetName ); /** * Function CreateMuWaveBaseFootprint * create a basic footprint for micro wave applications. * @param aValue = the text value * @param aTextSize = the size of ref and value texts ( <= 0 to use board default values ) * @param aPadCount = number of pads * Pads settings are: * PAD_ATTRIB_SMD, rectangular, H size = V size = current track width. */ MODULE* CreateMuWaveBaseFootprint( const wxString& aValue, int aTextSize, int aPadCount ); /** * Create_MuWaveComponent * creates a module "GAP" or "STUB" used in micro wave designs. * This module has 2 pads: * PAD_ATTRIB_SMD, rectangular, H size = V size = current track width. * the "gap" is isolation created between this 2 pads */ MODULE* Create_MuWaveComponent( int shape_type ); MODULE* Create_MuWavePolygonShape(); void ShowChangedLanguage() override; /** * Function UpdateTitle * sets the main window title bar text. *

* If file name defined by PCB_SCREEN::m_FileName 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(); /** * Allows Pcbnew to install its preferences panel into the preferences dialog. */ void InstallPreferences( PAGED_DIALOG* aParent ) override; /** * Called after the preferences dialog is run. */ void CommonSettingsChanged() override; void SyncMenusAndToolbars() override; DECLARE_EVENT_TABLE() }; #endif // WXPCB_STRUCT_H_