summaryrefslogtreecommitdiff
path: root/include/wxBasePcbFrame.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/wxBasePcbFrame.h')
-rw-r--r--include/wxBasePcbFrame.h703
1 files changed, 703 insertions, 0 deletions
diff --git a/include/wxBasePcbFrame.h b/include/wxBasePcbFrame.h
new file mode 100644
index 0000000..d860755
--- /dev/null
+++ b/include/wxBasePcbFrame.h
@@ -0,0 +1,703 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2012 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@verizon.net>
+ * Copyright (C) 1992-2011 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 wxBasePcbFrame.h
+ * @brief Classes used in Pcbnew, CvPcb and GerbView.
+ */
+
+#ifndef WX_BASE_PCB_FRAME_H_
+#define WX_BASE_PCB_FRAME_H_
+
+
+#include <vector>
+#include <boost/interprocess/exceptions.hpp>
+
+#include <draw_frame.h>
+#include <base_struct.h>
+#include <eda_text.h> // EDA_DRAW_MODE_T
+#include <richio.h>
+#include <class_pcb_screen.h>
+#include <pcbstruct.h>
+#include <class_draw_panel_gal.h>
+
+
+/* Forward declarations of classes. */
+class BOARD;
+class BOARD_CONNECTED_ITEM;
+class MODULE;
+class TRACK;
+class D_PAD;
+class TEXTE_MODULE;
+class EDA_3D_FRAME;
+class GENERAL_COLLECTOR;
+class GENERAL_COLLECTORS_GUIDE;
+class BOARD_DESIGN_SETTINGS;
+class ZONE_SETTINGS;
+class PCB_PLOT_PARAMS;
+class FP_LIB_TABLE;
+class FPID;
+class TOOL_MANAGER;
+class TOOL_DISPATCHER;
+
+/**
+ * class PCB_BASE_FRAME
+ * basic PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
+ */
+class PCB_BASE_FRAME : public EDA_DRAW_FRAME
+{
+public:
+ DISPLAY_OPTIONS m_DisplayOptions;
+ EDA_UNITS_T m_UserGridUnit;
+ wxRealPoint m_UserGridSize;
+
+ int m_FastGrid1; // 1st fast grid setting (index in EDA_DRAW_FRAME::m_gridSelectBox)
+ int m_FastGrid2; // 2nd fast grid setting (index in EDA_DRAW_FRAME::m_gridSelectBox)
+
+ EDA_3D_FRAME* m_Draw3DFrame;
+
+
+protected:
+ BOARD* m_Pcb;
+ GENERAL_COLLECTOR* m_Collector;
+
+ /// Auxiliary tool bar typically shown below the main tool bar at the top of the
+ /// main window.
+ wxAuiToolBar* m_auxiliaryToolBar;
+
+ void updateGridSelectBox();
+ void updateZoomSelectBox();
+ virtual void unitsChangeRefresh();
+
+ /**
+ * Function loadFootprint
+ * attempts to load \a aFootprintId from the footprint library table.
+ *
+ * @param aFootprintId is the #FPID of component footprint to load.
+ * @return the #MODULE if found or NULL if \a aFootprintId not found in any of the
+ * libraries in the table returned from #Prj().PcbFootprintLibs().
+ * @throw IO_ERROR if an I/O error occurs or a #PARSE_ERROR if a file parsing error
+ * occurs while reading footprint library files.
+ */
+ MODULE* loadFootprint( const FPID& aFootprintId )
+ throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception );
+
+public:
+ PCB_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrameType,
+ const wxString& aTitle, const wxPoint& aPos, const wxSize& aSize,
+ long aStyle, const wxString& aFrameName );
+
+ ~PCB_BASE_FRAME();
+
+ /**
+ * Function LoadFootprint
+ * attempts to load \a aFootprintId from the footprint library table.
+ *
+ * @param aFootprintId is the #FPID of component footprint to load.
+ * @return the #MODULE if found or NULL if \a aFootprintId not found in any of the
+ * libraries in table returned from #Prj().PcbFootprintLibs().
+ */
+ MODULE* LoadFootprint( const FPID& aFootprintId );
+
+ /**
+ * Function GetBoardBoundingBox
+ * calculates the bounding box containing all board items (or board edge segments).
+ * @param aBoardEdgesOnly is true if we are interested in board edge segments only.
+ * @return EDA_RECT - the board's bounding box
+ */
+ EDA_RECT GetBoardBoundingBox( bool aBoardEdgesOnly = false ) const;
+
+ virtual void SetPageSettings( const PAGE_INFO& aPageSettings ); // overload
+ const PAGE_INFO& GetPageSettings() const; // overload
+ const wxSize GetPageSizeIU() const; // overload
+
+ const wxPoint& GetAuxOrigin() const; // overload
+ void SetAuxOrigin( const wxPoint& aPoint ); // overload
+
+ const wxPoint& GetGridOrigin() const; // overload
+ void SetGridOrigin( const wxPoint& aPoint ); // overload
+
+ const TITLE_BLOCK& GetTitleBlock() const; // overload
+ void SetTitleBlock( const TITLE_BLOCK& aTitleBlock ); // overload
+
+ /**
+ * Function GetDesignSettings
+ * returns the BOARD_DESIGN_SETTINGS for the BOARD owned by this frame.
+ * Overloaded in FOOTPRINT_EDIT_FRAME.
+ */
+ virtual BOARD_DESIGN_SETTINGS& GetDesignSettings() const;
+ virtual void SetDesignSettings( const BOARD_DESIGN_SETTINGS& aSettings );
+
+ /**
+ * Function GetDisplayOptions
+ * returns the display options current in use
+ * Display options are relative to the way tracks, vias, outlines
+ * and other things are shown (for instance solid or sketch mode)
+ * Must be overloaded in frames which have display options
+ * (board editor and footprint editor)
+ */
+ void* GetDisplayOptions() { return &m_DisplayOptions; }
+
+ const ZONE_SETTINGS& GetZoneSettings() const;
+ void SetZoneSettings( const ZONE_SETTINGS& aSettings );
+
+ /**
+ * Function GetPlotSettings
+ * returns the PCB_PLOT_PARAMS for the BOARD owned by this frame.
+ * Overloaded in FOOTPRINT_EDIT_FRAME.
+ */
+ virtual const PCB_PLOT_PARAMS& GetPlotSettings() const;
+ virtual void SetPlotSettings( const PCB_PLOT_PARAMS& aSettings );
+
+ /**
+ * Function SetBoard
+ * sets the m_Pcb member in such as way as to ensure deleting any previous
+ * BOARD.
+ * @param aBoard The BOARD to put into the frame.
+ */
+ virtual void SetBoard( BOARD* aBoard );
+
+ BOARD* GetBoard() const
+ {
+ wxASSERT( m_Pcb );
+ return m_Pcb;
+ }
+
+ // General
+ virtual void OnCloseWindow( wxCloseEvent& Event ) = 0;
+ virtual void RedrawActiveWindow( wxDC* DC, bool EraseBg ) { }
+ virtual void ReCreateHToolbar() = 0;
+ virtual void ReCreateVToolbar() = 0;
+ virtual void OnLeftClick( wxDC* DC, const wxPoint& MousePos ) = 0;
+ virtual void OnLeftDClick( wxDC* DC, const wxPoint& MousePos ) = 0;
+ virtual bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ) = 0;
+ virtual void ReCreateMenuBar();
+ virtual void SetToolID( int aId, int aCursor, const wxString& aToolMsg );
+ virtual void UpdateStatusBar();
+
+ PCB_SCREEN* GetScreen() const { return (PCB_SCREEN*) EDA_DRAW_FRAME::GetScreen(); }
+
+ /**
+ * Function BestZoom
+ * @return the "best" zoom to show the entire board or footprint on the screen.
+ */
+ virtual double BestZoom();
+
+ /**
+ * Function GetZoomLevelIndicator
+ * returns a human readable value which can be displayed as zoom
+ * level indicator in dialogs.
+ * Virtual from the base class
+ */
+ const wxString GetZoomLevelIndicator() const;
+
+ virtual void Show3D_Frame( wxCommandEvent& event );
+
+ // Read/write functions:
+ EDA_ITEM* ReadDrawSegmentDescr( LINE_READER* aReader );
+ int ReadListeSegmentDescr( LINE_READER* aReader,
+ TRACK* PtSegm,
+ int StructType,
+ int NumSegm );
+
+ int ReadSetup( LINE_READER* aReader );
+ int ReadGeneralDescrPcb( LINE_READER* aReader );
+
+
+ /**
+ * Function PcbGeneralLocateAndDisplay
+ * searches for an item under the mouse cursor.
+ * Items are searched first on the current working layer.
+ * If nothing found, an item will be searched without layer restriction.
+ * If more than one item is found meeting the current working layer
+ * criterion, then a popup menu is shown which allows the user to pick
+ * which item he/she is interested in. Once an item is chosen, then it
+ * is make the "current item" and the status window is updated to reflect
+ * this.
+ *
+ * @param aHotKeyCode The hotkey which relates to the caller and determines
+ * the type of search to be performed. If zero, then
+ * the mouse tools will be tested instead.
+ */
+ BOARD_ITEM* PcbGeneralLocateAndDisplay( int aHotKeyCode = 0 );
+
+ void ProcessItemSelection( wxCommandEvent& event );
+
+ /**
+ * Function SetCurItem
+ * sets the currently selected item and displays it in the MsgPanel.
+ * If the given item is NULL then the MsgPanel is erased and there is no
+ * currently selected item. This function is intended to make the process
+ * of "selecting" an item more formal, and to indivisibly tie the operation
+ * of selecting an item to displaying it using BOARD_ITEM::Display_Infos().
+ * @param aItem The BOARD_ITEM to make the selected item or NULL if none.
+ * @param aDisplayInfo = true to display item info, false if not (default = true)
+ */
+ void SetCurItem( BOARD_ITEM* aItem, bool aDisplayInfo = true );
+
+ BOARD_ITEM* GetCurItem();
+
+ ///> @copydoc EDA_DRAW_FRAME::UpdateMsgPanel()
+ void UpdateMsgPanel();
+
+ /**
+ * Function GetCollectorsGuide
+ * @return GENERAL_COLLECTORS_GUIDE - that considers the global
+ *configuration options.
+ */
+ GENERAL_COLLECTORS_GUIDE GetCollectorsGuide();
+
+ /**
+ * Function CursorGoto
+ * positions the cursor at a given coordinate and reframes the drawing if the
+ * requested point is out of view.
+ * @param aPos is the point to go to.
+ * @param aWarp is true if the pointer should be warped to the new position.
+ */
+ void CursorGoto( const wxPoint& aPos, bool aWarp = true );
+
+ /**
+ * Function SelectLibrary
+ * puts up a dialog and allows the user to pick a library, for unspecified use.
+ *
+ * @param aNicknameExisting is the current choice to highlight
+ *
+ * @return wxString - the library or wxEmptyString on abort.
+ */
+ wxString SelectLibrary( const wxString& aNicknameExisting );
+
+ MODULE* GetModuleByName();
+
+ /**
+ * Function OnModify
+ * Virtual
+ * Must be called after a change
+ * in order to set the "modify" flag of the current screen
+ * and update the date in frame reference
+ * do not forget to call this basic OnModify function to update info
+ * in derived OnModify functions
+ */
+ virtual void OnModify();
+
+ // Modules (footprints)
+
+ /**
+ * Function CreateNewModule
+ * Creates a new module or footprint, at position 0,0
+ * The new module contains only 2 texts: a reference and a value:
+ * Reference = REF**
+ * Value = "VAL**" or Footprint name in lib
+ * Note: they are dummy texts, which will be replaced by the actual texts
+ * when the fooprint is placed on a board and a netlist is read
+ * @param aModuleName = name of the new footprint in library
+ * @return a reference to the new module
+ */
+ MODULE* CreateNewModule( const wxString& aModuleName );
+
+ void Edit_Module( MODULE* module, wxDC* DC );
+ void Rotate_Module( wxDC* DC, MODULE* module, double angle, bool incremental );
+
+ /**
+ * Function PlaceModule
+ * places \a aModule at the current cursor position and updates module coordinates
+ * with the new position.
+ *
+ * @param aModule A MODULE object point of the module to be placed.
+ * @param aDC A wxDC object point of the device context to draw \a aModule on
+ * or NULL if no display screen need updated.
+ * @param aDoNotRecreateRatsnest A bool true redraws the module rats nest.
+ */
+ void PlaceModule( MODULE* aModule, wxDC* aDC, bool aDoNotRecreateRatsnest = false );
+
+ // module texts
+ void RotateTextModule( TEXTE_MODULE* Text, wxDC* DC );
+ void DeleteTextModule( TEXTE_MODULE* Text );
+ void PlaceTexteModule( TEXTE_MODULE* Text, wxDC* DC );
+ void StartMoveTexteModule( TEXTE_MODULE* Text, wxDC* DC );
+
+ /**
+ * Function ResetTextSize
+ * resets given field text size and width to current settings in
+ * Preferences->Dimensions->Texts and Drawings.
+ * @param aItem is the item to be reset, either TEXTE_PCB or TEXTE_MODULE.
+ * @param aDC is the drawing context.
+ */
+ void ResetTextSize( BOARD_ITEM* aItem, wxDC* aDC );
+
+ /**
+ * Function ResetModuleTextSizes
+ * resets text size and width of all module text fields of given field
+ * type to current settings in Preferences->Dimensions->Texts and Drawings.
+ * @param aFilter is a filter: footprint names must match this filter.
+ * an empty filter, or "*" do not filter anything.
+ * @param aRef = true to modify the reference of footprints.
+ * @param aValue = true to modify the value of footprints.
+ * @param aOthers = true to modify the other fields of footprints.
+ */
+ void ResetModuleTextSizes( const wxString & aFilter, bool aRef,
+ bool aValue, bool aOthers );
+
+ void InstallPadOptionsFrame( D_PAD* pad );
+ void InstallTextModOptionsFrame( TEXTE_MODULE* TextMod, wxDC* DC );
+
+ void AddPad( MODULE* Module, bool draw );
+
+ /**
+ * Function DeletePad
+ * Delete the pad aPad.
+ * Refresh the modified screen area
+ * Refresh modified parameters of the parent module (bounding box, last date)
+ * @param aPad = the pad to delete
+ * @param aQuery = true to prompt for confirmation, false to delete silently
+ */
+ void DeletePad( D_PAD* aPad, bool aQuery = true );
+
+ /**
+ * Function StartMovePad
+ * Initialize a drag or move pad command
+ * @param aPad = the pad to move or drag
+ * @param aDC = the current device context
+ * @param aDragConnectedTracks = true to drag connected tracks,
+ * false to just move the pad
+ */
+ void StartMovePad( D_PAD* aPad, wxDC* aDC, bool aDragConnectedTracks );
+
+ void RotatePad( D_PAD* Pad, wxDC* DC );
+ void PlacePad( D_PAD* Pad, wxDC* DC );
+ void Export_Pad_Settings( D_PAD* aPad );
+ void Import_Pad_Settings( D_PAD* aPad, bool aDraw );
+
+ /**
+ * Function GlobalChange_PadSettings
+ * Function to change pad caracteristics for the given footprint
+ * or all footprints which look like the given footprint
+ * @param aPad is the pattern. The given footprint is the parent of this pad
+ * @param aSameFootprints: if true, make changes on all identical footprints
+ * @param aPadShapeFilter: if true, make changes only on pads having the same shape as aPad
+ * @param aPadOrientFilter: if true, make changes only on pads having the same orientation as aPad
+ * @param aPadLayerFilter: if true, make changes only on pads having the same layers as aPad
+ * @param aRedraw: if true: redraws the footprint
+ * @param aSaveForUndo: if true: create an entry in the Undo/Redo list
+ * (usually: true in Schematic editor, false in Module editor)
+ */
+ void GlobalChange_PadSettings( D_PAD* aPad,
+ bool aSameFootprints,
+ bool aPadShapeFilter,
+ bool aPadOrientFilter,
+ bool aPadLayerFilter,
+ bool aRedraw,
+ bool aSaveForUndo );
+
+ /**
+ * Function SelectFootprint
+ * displays a list of modules found in all libraries or a given library
+ *
+ * @param aWindow = the current window ( parent window )
+ *
+ * @param aLibraryName = library to list (if aLibraryFullFilename is empty, then list all modules).
+ * This is a nickname for the FP_LIB_TABLE build.
+ *
+ * @param aMask = Display filter (wildcart)( Mask = wxEmptyString if not used )
+ *
+ * @param aKeyWord = keyword list, to display a filtered list of module
+ * having one (or more) of these keywords in their
+ * keyword list ( aKeyWord = wxEmptyString if not used )
+ *
+ * @param aTable is the #FP_LIB_TABLE to search.
+ *
+ * @return wxEmptyString if abort or fails, or the selected module name if Ok
+ */
+ wxString SelectFootprint( EDA_DRAW_FRAME* aWindow,
+ const wxString& aLibraryName,
+ const wxString& aMask,
+ const wxString& aKeyWord,
+ FP_LIB_TABLE* aTable );
+
+ /**
+ * Function LoadModuleFromLibrary
+ * opens a dialog to select a footprint, and loads it into current board.
+ *
+ * @param aLibrary = the library name to use, or empty string to search
+ * in all loaded libraries
+ * @param aTable is the #FP_LIB_TABLE containing the avaiable footprint libraries.
+ * @param aUseFootprintViewer = true to show the option
+ * allowing the footprint selection by the footprint viewer
+ * @param aDC (can be NULL ) = the current Device Context, to draw the new footprint
+ */
+ MODULE* LoadModuleFromLibrary( const wxString& aLibrary,
+ FP_LIB_TABLE* aTable,
+ bool aUseFootprintViewer = true,
+ wxDC* aDC = NULL );
+
+ /**
+ * Function SelectFootprintFromLibBrowser
+ * launches the footprint viewer to select the name of a footprint to load.
+ *
+ * @return the selected footprint name or an empty string if no selection was made.
+ */
+ wxString SelectFootprintFromLibBrowser();
+
+ // ratsnest functions
+ /**
+ * Function Compile_Ratsnest
+ * Create the entire board ratsnest.
+ * Must be called after a board change (changes for
+ * pads, footprints or a read netlist ).
+ * @param aDC = the current device context (can be NULL)
+ * @param aDisplayStatus : if true, display the computation results
+ */
+ void Compile_Ratsnest( wxDC* aDC, bool aDisplayStatus );
+
+ /**
+ * Function build_ratsnest_module
+ * Build a ratsnest relative to one footprint. This is a simplified computation
+ * used only in move footprint. It is not optimal, but it is fast and sufficient
+ * to help a footprint placement
+ * It shows the connections from a pad to the nearest connected pad
+ * @param aModule = module to consider.
+ */
+ void build_ratsnest_module( MODULE* aModule );
+
+ /**
+ * Function TraceModuleRatsNest
+ * display the rats nest of a moving footprint, computed by
+ * build_ratsnest_module()
+ */
+ void TraceModuleRatsNest( wxDC* aDC );
+
+ /**
+ * Function Build_Board_Ratsnest.
+ * Calculates the full ratsnest depending only on pads.
+ */
+ void Build_Board_Ratsnest();
+
+ /**
+ * function Displays the general ratsnest
+ * Only ratsnest with the status bit CH_VISIBLE is set are displayed
+ * @param aDC = the current device context (can be NULL)
+ * @param aNetcode if > 0, Display only the ratsnest relative to the
+ * corresponding net_code
+ */
+ void DrawGeneralRatsnest( wxDC* aDC, int aNetcode = 0 );
+
+ /**
+ * Function TraceAirWiresToTargets
+ * This functions shows airwires to nearest connecting points (pads)
+ * from the current new track end during track creation
+ * Uses data prepared by BuildAirWiresTargetsList()
+ * @param aDC = the current device context
+ */
+ void TraceAirWiresToTargets( wxDC* aDC );
+
+ /**
+ * Function BuildAirWiresTargetsList
+ * Build a list of candidates that can be a coonection point
+ * when a track is started.
+ * This functions prepares data to show airwires to nearest connecting points (pads)
+ * from the current new track to candidates during track creation
+ * @param aItemRef = the item connected to the starting point of the new track (track or pad)
+ * @param aPosition = the position of the new track end (usually the mouse cursor on grid)
+ * @param aInit = true to build full candidate list or false to update data
+ * When aInit = false, aItemRef is not used (can be NULL)
+ */
+ void BuildAirWiresTargetsList( BOARD_CONNECTED_ITEM* aItemRef,
+ const wxPoint& aPosition, bool aInit );
+
+ /**
+ * Function TestForActiveLinksInRatsnest
+ * Explores the full rats nest list (which must exist) to determine
+ * the ACTIVE links in the full rats nest list
+ * When tracks exist between pads, a link can connect 2 pads already connected by a track
+ * and the link is said inactive.
+ * When a link connects 2 pads not already connected by a track, the link is said active.
+ * @param aNetCode = net code to test. If 0, test all nets
+ */
+ void TestForActiveLinksInRatsnest( int aNetCode );
+
+ /**
+ * Function TestConnections
+ * tests the connections relative to all nets.
+ * <p>
+ * This function update the status of the ratsnest ( flag CH_ACTIF = 0 if a connection
+ * is found, = 1 else) track segments are assumed to be sorted by net codes.
+ * This is the case because when a new track is added, it is inserted in the linked list
+ * according to its net code. and when nets are changed (when a new netlist is read)
+ * tracks are sorted before using this function.
+ * </p>
+ */
+ void TestConnections();
+
+ /**
+ * Function TestNetConnection
+ * tests the connections relative to \a aNetCode. Track segments are assumed to be
+ * sorted by net codes.
+ * @param aDC Current Device Context
+ * @param aNetCode The net code to test
+ */
+ void TestNetConnection( wxDC* aDC, int aNetCode );
+
+ /**
+ * Function RecalculateAllTracksNetcode
+ * search connections between tracks and pads and propagate pad net codes to the track
+ * segments.
+ */
+ void RecalculateAllTracksNetcode();
+
+ /* Functions relative to Undo/redo commands:
+ */
+
+ /**
+ * Function SaveCopyInUndoList (virtual pure)
+ * Creates a new entry in undo list of commands.
+ * add a picker to handle aItemToCopy
+ * @param aItemToCopy = the board item modified by the command to undo
+ * @param aTypeCommand = command type (see enum UNDO_REDO_T)
+ * @param aTransformPoint = the reference point of the transformation, for
+ * commands like move
+ */
+ virtual void SaveCopyInUndoList( BOARD_ITEM* aItemToCopy,
+ UNDO_REDO_T aTypeCommand,
+ const wxPoint& aTransformPoint = wxPoint( 0, 0 ) ) = 0;
+
+ /**
+ * Function SaveCopyInUndoList (virtual pure, overloaded).
+ * Creates a new entry in undo list of commands.
+ * add a list of pickers to handle a list of items
+ * @param aItemsList = the list of items modified by the command to undo
+ * @param aTypeCommand = command type (see enum UNDO_REDO_T)
+ * @param aTransformPoint = the reference point of the transformation,
+ * for commands like move
+ */
+ virtual void SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList,
+ UNDO_REDO_T aTypeCommand,
+ const wxPoint& aTransformPoint = wxPoint( 0, 0 ) ) = 0;
+
+
+ /** Install the dialog box for layer selection
+ * @param aDefaultLayer = Preselection (NB_PCB_LAYERS for "(Deselect)" layer)
+ * @param aNotAllowedLayersMask = a layer mask for not allowed layers
+ * (= 0 to show all layers in use)
+ * @param aDlgPosition = position of dialog ( defualt = centered)
+ * @return the selected layer id
+ */
+ LAYER_ID SelectLayer( LAYER_ID aDefaultLayer,
+ LSET aNotAllowedLayersMask = LSET(),
+ wxPoint aDlgPosition = wxDefaultPosition );
+
+ /* Display a list of two copper layers to choose a pair of copper layers
+ * the layer pair is used to fast switch between copper layers when placing vias
+ */
+ void SelectCopperLayerPair();
+
+ virtual void SwitchLayer( wxDC* DC, LAYER_ID layer );
+
+ /**
+ * Function SetActiveLayer
+ * will change the currently active layer to \a aLayer.
+ */
+ virtual void SetActiveLayer( LAYER_ID aLayer )
+ {
+ GetScreen()->m_Active_Layer = aLayer;
+ }
+
+ /**
+ * Function GetActiveLayer
+ * returns the active layer
+ */
+ virtual LAYER_ID GetActiveLayer() const
+ {
+ return GetScreen()->m_Active_Layer;
+ }
+
+ void LoadSettings( wxConfigBase* aCfg ); // override virtual
+ void SaveSettings( wxConfigBase* aCfg ); // override virtual
+
+ bool InvokeDialogGrid();
+
+ void OnTogglePolarCoords( wxCommandEvent& aEvent );
+ void OnTogglePadDrawMode( wxCommandEvent& aEvent );
+
+ // User interface update event handlers.
+ void OnUpdateCoordType( wxUpdateUIEvent& aEvent );
+ void OnUpdatePadDrawMode( wxUpdateUIEvent& aEvent );
+ void OnUpdateSelectGrid( wxUpdateUIEvent& aEvent );
+ void OnUpdateSelectZoom( wxUpdateUIEvent& aEvent );
+
+ /**
+ * Function SetFastGrid1()
+ *
+ * Switches grid settings to the 1st "fast" setting predefined by user.
+ */
+ void SetFastGrid1();
+
+ /**
+ * Function SetFastGrid2()
+ *
+ * Switches grid settings to the 1st "fast" setting predefined by user.
+ */
+ void SetFastGrid2();
+
+ /**
+ * Virtual function SetNextGrid()
+ * changes the grid size settings to the next one available.
+ */
+ void SetNextGrid();
+
+ /**
+ * Virtual function SetPrevGrid()
+ * changes the grid size settings to the previous one available.
+ */
+ void SetPrevGrid();
+
+ void ClearSelection();
+
+ ///> @copydoc EDA_DRAW_FRAME::UseGalCanvas
+ virtual void UseGalCanvas( bool aEnable );
+
+ /**
+ * Function SwitchCanvas
+ * switches currently used canvas (default / Cairo / OpenGL).
+ */
+ void SwitchCanvas( wxCommandEvent& aEvent );
+
+ /**
+ * Function LoadCanvasTypeSetting()
+ * Returns the canvas type stored in the application settings.
+ */
+ EDA_DRAW_PANEL_GAL::GAL_TYPE LoadCanvasTypeSetting() const;
+
+ /**
+ * Function SaveCanvasTypeSetting()
+ * Stores the canvas type in the application settings.
+ */
+ bool SaveCanvasTypeSetting( EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType );
+
+ ///> Key in KifaceSettings to store the canvas type.
+ static const wxChar CANVAS_TYPE_KEY[];
+
+ DECLARE_EVENT_TABLE()
+};
+
+#endif // WX_BASE_PCB_FRAME_H_