* Some commands are relative to the item under the mouse cursor. Commands are * case insensitive *
*/ bool OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem = NULL ) override; BOARD_ITEM* PrepareItemForHotkey( bool failIfCurrentlyEdited ); /** * Display 3D view of the footprint (module) being edited. */ void Show3D_Frame( wxCommandEvent& event ) override; bool GeneralControl( wxDC* aDC, const wxPoint& aPosition, EDA_KEY aHotKey = 0 ) override; void OnVerticalToolbar( wxCommandEvent& aEvent ); /** * Handle most of tools og the vertical right toolbar ("Tools" toolbar) */ void OnUpdateVerticalToolbar( wxUpdateUIEvent& aEvent ); void OnUpdateModuleSelected( wxUpdateUIEvent& aEvent ); void OnUpdateModuleTargeted( wxUpdateUIEvent& aEvent ); void OnUpdateSave( wxUpdateUIEvent& aEvent ); void OnUpdateSaveAs( wxUpdateUIEvent& aEvent ); void OnUpdateLoadModuleFromBoard( wxUpdateUIEvent& aEvent ); void OnUpdateInsertModuleInBoard( wxUpdateUIEvent& aEvent ); ///> @copydoc PCB_BASE_EDIT_FRAME::OnEditItemRequest() void OnEditItemRequest( wxDC* aDC, BOARD_ITEM* aItem ) override; /** * Called from the main toolbar to load a footprint from board mainly to edit it. */ void LoadModuleFromBoard( wxCommandEvent& event ); void LoadModuleFromLibrary( LIB_ID aFPID ); /** * Returns the adapter object that provides the stored data. */ LIB_TREE_MODEL_ADAPTER::PTR& GetLibTreeAdapter() { return m_adapter; } /** * Save in an existing library a given footprint. * * @param aModule = the given footprint * @return : true if OK, false if abort */ bool SaveFootprint( MODULE* aModule ); bool SaveFootprintAs( MODULE* aModule ); bool SaveFootprintToBoard( bool aAddNew ); bool RevertFootprint(); /** * Must be called after a footprint change * in order to set the "modify" flag of the current screen * and prepare, if needed the refresh of the 3D frame showing the footprint * do not forget to call the basic OnModify function to update auxiliary info */ virtual void OnModify() override; /** * Install the print dialog */ void ToPrinter( wxCommandEvent& event ); // BOARD handling /** * Delete all and reinitialize the current board. * * @param aQuery = true to prompt user for confirmation, false to initialize silently */ bool Clear_Pcb( bool aQuery ); /* handlers for block commands */ virtual int BlockCommand( EDA_KEY key ) override; /** * Handle the BLOCK PLACE command. * * Last routine for block operation for: * - block move & drag * - block copy & paste */ virtual void HandleBlockPlace( wxDC* DC ) override; /** * Handle the "end" of a block command, * i.e. is called at the end of the definition of the area of a block. * depending on the current block command, this command is executed * or parameters are initialized to prepare a call to HandleBlockPlace * in GetScreen()->m_BlockLocate * @return false if no item selected, or command finished, * true if some items found and HandleBlockPlace must be called later */ virtual bool HandleBlockEnd( wxDC* DC ) override; BOARD_ITEM* ModeditLocateAndDisplay( int aHotKeyCode = 0 ); /// Return the LIB_ID of the part selected in the footprint or the part being edited. LIB_ID getTargetFPID() const; /// Return the LIB_ID of the part being edited. LIB_ID GetLoadedFPID() const; void RemoveStruct( EDA_ITEM* Item ); /** * Perform a geometric transform on the current footprint. */ void Transform( MODULE* module, int transform ); // importing / exporting Footprint /** * Create a file containing only one footprint. * * Used to export a footprint * Exported files have the standard ext .emp * This is the same format as .mod files but restricted to only one footprint * So Create a new lib (which will contains one module) and export a footprint * is basically the same thing * @param aModule = the module to export */ void Export_Module( MODULE* aModule ); /** * Read a file containing only one footprint. * * Used to import (after exporting) a footprint * Exported files have the standard ext .emp * This is the same format as .mod files but restricted to only one footprint * The import function can also read gpcb footprint file, in Newlib format * (One footprint per file, Newlib files have no special ext.) */ MODULE* Import_Module( const wxString& aName = wxT("") ); /** * Load in Modedit a footprint from the main board. * * @param Module = the module to load. If NULL, a module reference will we asked to user * @return true if a module isloaded, false otherwise. */ bool Load_Module_From_BOARD( MODULE* Module ); /** * Display the list of modules currently existing on the BOARD. * * @return a pointer to a module if this module is selected or NULL otherwise * @param aPcb = the board from modules can be loaded */ MODULE* SelectFootprintFromBoard( BOARD* aPcb ); // functions to edit footprint edges /** * Change the width of module perimeter lines, EDGE_MODULEs. * * param ModuleSegmentWidth (global) = new width * @param aEdge = edge to edit, or NULL. If aEdge == NULL change * the width of all footprint's edges */ void Edit_Edge_Width( EDGE_MODULE* aEdge ); /** * Change the EDGE_MODULE Edge layer, (The new layer will be asked) * if Edge == NULL change the layer of the entire footprint edges * * @param Edge = edge to edit, or NULL */ void Edit_Edge_Layer( EDGE_MODULE* Edge ); /** * Delete EDGE_MODULE ddge. * * @param Edge = edge to delete */ void Delete_Edge_Module( EDGE_MODULE* Edge ); /** * Creates a new edge item (line, arc ..). * * @param Edge = if NULL: create new edge else terminate edge and create a new edge * @param DC = current Device Context * @param type_edge = S_SEGMENT,S_ARC .. * @return the new created edge. */ EDGE_MODULE* Begin_Edge_Module( EDGE_MODULE* Edge, wxDC* DC, STROKE_T type_edge ); /** * Terminate a move or create edge function. */ void End_Edge_Module( EDGE_MODULE* Edge ); /// Function to initialize the move function params of a graphic item type DRAWSEGMENT void Start_Move_EdgeMod( EDGE_MODULE* drawitem, wxDC* DC ); /// Function to place a graphic item type EDGE_MODULE currently moved void Place_EdgeMod( EDGE_MODULE* drawitem ); /** * Change pad characteristics for the given footprint * or all footprints which look like the given footprint. * Options are set by the opened dialog. * @param aPad is the pattern. The given footprint is the parent of this pad */ void PushPadProperties( D_PAD* aPad ); /** * Delete the given module from its library. */ bool DeleteModuleFromLibrary( const LIB_ID& aFPID, bool aConfirm ); /** * Test whether a given element category is visible. * * @param aElement is from the enum by the same name * @return bool - true if the element is visible. * @see enum PCB_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 ); /** * @return true if the grid must be shown */ virtual bool IsGridVisible() const override; /** * 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 */ virtual void SetGridVisibility( bool aVisible ) override; /** * @return the color of the grid */ virtual COLOR4D GetGridColor() override; ///> @copydoc PCB_BASE_FRAME::SetActiveLayer() void SetActiveLayer( PCB_LAYER_ID aLayer ) override; ///> @copydoc PCB_BASE_FRAME::OnUpdateLayerAlpha() void OnUpdateLayerAlpha( wxUpdateUIEvent& aEvent ) override; ///> @copydoc EDA_DRAW_FRAME::UseGalCanvas() virtual void UseGalCanvas( bool aEnable ) override; /** * Load 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 OpenProjectFiles( const std::vector