2011-10-13 19:56:32 +00:00
|
|
|
/*
|
|
|
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
|
|
|
*
|
|
|
|
* Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
|
|
|
* Copyright (C) 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
|
|
|
|
*/
|
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
/**
|
|
|
|
* @file wxPcbStruct.h
|
|
|
|
*/
|
2008-01-01 11:58:14 +00:00
|
|
|
|
|
|
|
#ifndef WXPCB_STRUCT_H
|
|
|
|
#define WXPCB_STRUCT_H
|
|
|
|
|
|
|
|
|
2011-09-20 13:57:40 +00:00
|
|
|
#include "wxBasePcbFrame.h"
|
2010-04-23 14:46:00 +00:00
|
|
|
#include "param_config.h"
|
2011-03-23 08:00:53 +00:00
|
|
|
#include "class_layer_box_selector.h"
|
2011-09-07 09:27:02 +00:00
|
|
|
#include "class_macros_record.h"
|
2011-09-20 13:57:40 +00:00
|
|
|
#include "class_undoredo_container.h"
|
|
|
|
|
2008-01-01 11:58:14 +00:00
|
|
|
|
|
|
|
#ifndef PCB_INTERNAL_UNIT
|
2009-01-15 08:12:03 +00:00
|
|
|
#define PCB_INTERNAL_UNIT 10000
|
2008-01-01 11:58:14 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* Forward declarations of classes. */
|
|
|
|
class PCB_SCREEN;
|
|
|
|
class BOARD;
|
|
|
|
class TEXTE_PCB;
|
|
|
|
class MODULE;
|
|
|
|
class TRACK;
|
|
|
|
class SEGZONE;
|
|
|
|
class SEGVIA;
|
|
|
|
class D_PAD;
|
|
|
|
class TEXTE_MODULE;
|
2011-09-07 19:41:04 +00:00
|
|
|
class PCB_TARGET;
|
2010-04-23 09:54:40 +00:00
|
|
|
class DIMENSION;
|
2008-01-01 11:58:14 +00:00
|
|
|
class EDGE_MODULE;
|
|
|
|
class DRC;
|
|
|
|
class ZONE_CONTAINER;
|
2009-02-04 15:25:03 +00:00
|
|
|
class DRAWSEGMENT;
|
|
|
|
class GENERAL_COLLECTOR;
|
|
|
|
class GENERAL_COLLECTORS_GUIDE;
|
2010-01-24 02:05:07 +00:00
|
|
|
class PCB_LAYER_WIDGET;
|
2011-09-20 13:57:40 +00:00
|
|
|
class MARKER_PCB;
|
|
|
|
class BOARD_ITEM;
|
2008-01-01 11:58:14 +00:00
|
|
|
|
|
|
|
|
2009-07-30 11:04:07 +00:00
|
|
|
/**
|
2011-09-26 20:32:56 +00:00
|
|
|
* class PCB_EDIT_FRAME
|
2011-09-30 18:15:37 +00:00
|
|
|
* the main frame for Pcbnew
|
2011-09-26 20:32:56 +00:00
|
|
|
*
|
2011-09-30 18:15:37 +00:00
|
|
|
* See also class PCB_BASE_FRAME(): Basic class for Pcbnew and GerbView.
|
2009-11-23 20:18:47 +00:00
|
|
|
*/
|
2011-03-01 19:26:17 +00:00
|
|
|
class PCB_EDIT_FRAME : public PCB_BASE_FRAME
|
2008-01-01 11:58:14 +00:00
|
|
|
{
|
2010-01-24 02:05:07 +00:00
|
|
|
friend class PCB_LAYER_WIDGET;
|
|
|
|
|
2011-02-21 13:54:29 +00:00
|
|
|
void updateTraceWidthSelectBox();
|
|
|
|
void updateViaSizeSelectBox();
|
|
|
|
|
2011-09-07 09:27:02 +00:00
|
|
|
int m_RecordingMacros;
|
|
|
|
MACROS_RECORDED m_Macros[10];
|
|
|
|
|
2011-12-16 13:32:23 +00:00
|
|
|
/// The command ID of the current auto place mode which will be set for either
|
|
|
|
/// automatic placement of tracks or modules.
|
|
|
|
int m_autoPlaceModeId;
|
|
|
|
|
2011-12-14 20:03:15 +00:00
|
|
|
/// The auxiliary right vertical tool bar used to access the microwave tools.
|
2011-12-16 13:32:23 +00:00
|
|
|
wxAuiToolBar* m_microWaveToolBar;
|
2011-12-14 20:03:15 +00:00
|
|
|
|
2010-01-21 07:41:30 +00:00
|
|
|
protected:
|
|
|
|
|
2010-01-24 02:05:07 +00:00
|
|
|
PCB_LAYER_WIDGET* m_Layers;
|
|
|
|
|
2011-02-21 13:54:29 +00:00
|
|
|
DRC* m_drc; ///< the DRC controller, see drc.cpp
|
2010-01-24 02:05:07 +00:00
|
|
|
|
2011-09-30 18:15:37 +00:00
|
|
|
PARAM_CFG_ARRAY m_configSettings; ///< List of Pcbnew configuration settings.
|
2010-04-23 14:46:00 +00:00
|
|
|
|
|
|
|
wxString m_lastNetListRead; ///< Last net list read with relative path.
|
|
|
|
|
2010-01-24 02:05:07 +00:00
|
|
|
// we'll use lower case function names for private member functions.
|
|
|
|
void createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu* aPopMenu );
|
|
|
|
void createPopUpMenuForFootprints( MODULE* aModule, wxMenu* aPopMenu );
|
|
|
|
void createPopUpMenuForFpTexts( TEXTE_MODULE* aText, wxMenu* aPopMenu );
|
|
|
|
void createPopUpMenuForFpPads( D_PAD* aPad, wxMenu* aPopMenu );
|
|
|
|
void createPopupMenuForTracks( TRACK* aTrack, wxMenu* aPopMenu );
|
|
|
|
void createPopUpMenuForTexts( TEXTE_PCB* Text, wxMenu* menu );
|
|
|
|
void createPopUpBlockMenu( wxMenu* menu );
|
|
|
|
void createPopUpMenuForMarkers( MARKER_PCB* aMarker, wxMenu* aPopMenu );
|
|
|
|
|
2010-01-21 07:41:30 +00:00
|
|
|
/**
|
2010-01-24 02:05:07 +00:00
|
|
|
* Function setActiveLayer
|
|
|
|
* will change the currently active layer to \a aLayer and also
|
|
|
|
* update the PCB_LAYER_WIDGET.
|
2010-01-21 07:41:30 +00:00
|
|
|
*/
|
2010-01-24 02:05:07 +00:00
|
|
|
void setActiveLayer( int aLayer, bool doLayerWidgetUpdate = true )
|
2010-01-21 07:41:30 +00:00
|
|
|
{
|
2010-01-24 02:05:07 +00:00
|
|
|
( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = aLayer;
|
|
|
|
|
|
|
|
if( doLayerWidgetUpdate )
|
|
|
|
syncLayerWidget();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Function getActiveLayer
|
|
|
|
* returns the active layer
|
|
|
|
*/
|
|
|
|
int getActiveLayer()
|
|
|
|
{
|
|
|
|
return ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Function syncLayerWidget
|
|
|
|
* updates the currently "selected" layer within the PCB_LAYER_WIDGET.
|
|
|
|
* The currently active layer is defined by the return value of getActiveLayer().
|
|
|
|
* <p>
|
|
|
|
* This function cannot be inline without including layer_widget.h in
|
|
|
|
* here and we do not want to do that.
|
2011-02-21 13:54:29 +00:00
|
|
|
* </p>
|
2010-01-24 02:05:07 +00:00
|
|
|
*/
|
2011-08-26 17:01:17 +00:00
|
|
|
void syncLayerWidget();
|
2010-01-24 02:05:07 +00:00
|
|
|
|
2011-03-01 19:26:17 +00:00
|
|
|
virtual void unitsChangeRefresh();
|
2010-01-21 07:41:30 +00:00
|
|
|
|
2011-10-13 19:56:32 +00:00
|
|
|
/**
|
|
|
|
* 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.
|
|
|
|
*/
|
|
|
|
virtual bool doAutoSave();
|
|
|
|
|
|
|
|
/**
|
2011-10-15 13:25:57 +00:00
|
|
|
* Function isautoSaveRequired
|
2011-10-13 19:56:32 +00:00
|
|
|
* returns true if the board has been modified.
|
|
|
|
*/
|
2011-10-15 13:25:57 +00:00
|
|
|
virtual bool isAutoSaveRequired() const;
|
2011-10-13 19:56:32 +00:00
|
|
|
|
2011-12-12 14:02:37 +00:00
|
|
|
/**
|
|
|
|
* Function propagate
|
|
|
|
* Used now only in autoplace calculations
|
|
|
|
* Uses the routing matrix to fill the cells within the zone
|
|
|
|
* Search and mark cells within the zone, and agree with DRC options.
|
|
|
|
* Requirements:
|
|
|
|
* Start from an initial point, to fill zone
|
|
|
|
* The zone must have no "copper island"
|
|
|
|
* Algorithm:
|
|
|
|
* If the current cell has a neighbor flagged as "cell in the zone", it
|
|
|
|
* become a cell in the zone
|
|
|
|
* The first point in the zone is the starting point
|
|
|
|
* 4 searches within the matrix are made:
|
|
|
|
* 1 - Left to right and top to bottom
|
|
|
|
* 2 - Right to left and top to bottom
|
|
|
|
* 3 - bottom to top and Right to left
|
|
|
|
* 4 - bottom to top and Left to right
|
|
|
|
* Given the current cell, for each search, we consider the 2 neighbor cells
|
|
|
|
* the previous cell on the same line and the previous cell on the same column.
|
|
|
|
*
|
|
|
|
* This function can request some iterations
|
|
|
|
* Iterations are made until no cell is added to the zone.
|
|
|
|
* @return: added cells count (i.e. which the attribute CELL_is_ZONE is set)
|
|
|
|
*/
|
|
|
|
int propagate();
|
|
|
|
|
2008-01-01 11:58:14 +00:00
|
|
|
public:
|
2011-04-19 19:19:41 +00:00
|
|
|
LAYER_BOX_SELECTOR* m_SelLayerBox; // a combo box to display and select active layer
|
|
|
|
wxComboBox* m_SelTrackWidthBox; // a combo box to display and select current track width
|
|
|
|
wxComboBox* m_SelViaSizeBox; // a combo box to display and select current via diameter
|
2009-11-23 20:18:47 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
bool m_show_microwave_tools;
|
|
|
|
bool m_show_layer_manager_tools;
|
2009-10-14 19:43:31 +00:00
|
|
|
|
2008-01-01 11:58:14 +00:00
|
|
|
|
|
|
|
public:
|
2011-03-01 19:26:17 +00:00
|
|
|
PCB_EDIT_FRAME( wxWindow* father, const wxString& title,
|
|
|
|
const wxPoint& pos, const wxSize& size,
|
|
|
|
long style = KICAD_DEFAULT_DRAWFRAME_STYLE );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
2011-03-01 19:26:17 +00:00
|
|
|
~PCB_EDIT_FRAME();
|
2008-01-01 11:58:14 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void OnQuit( wxCommandEvent& event );
|
2010-01-18 19:33:45 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function ToPlotter
|
2010-01-01 13:30:39 +00:00
|
|
|
* Open a dialog frame to create plot and drill files
|
|
|
|
* relative to the current board
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void ToPlotter( wxCommandEvent& event );
|
2010-01-01 13:30:39 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function ToPrinter
|
2010-01-01 13:30:39 +00:00
|
|
|
* Install the print dialog
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void ToPrinter( wxCommandEvent& event );
|
2010-01-01 13:30:39 +00:00
|
|
|
|
2011-08-26 17:01:17 +00:00
|
|
|
/**
|
|
|
|
* Function SVG_Print
|
|
|
|
* shows the print SVG file dialog.
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void SVG_Print( wxCommandEvent& event );
|
2010-11-17 21:47:27 +00:00
|
|
|
|
2011-02-21 13:54:29 +00:00
|
|
|
// User interface update command event handlers.
|
|
|
|
void OnUpdateSave( wxUpdateUIEvent& aEvent );
|
2011-03-01 19:26:17 +00:00
|
|
|
void OnUpdateLayerPair( wxUpdateUIEvent& aEvent );
|
|
|
|
void OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent );
|
2011-02-21 13:54:29 +00:00
|
|
|
void OnUpdateDrcEnable( wxUpdateUIEvent& aEvent );
|
|
|
|
void OnUpdateShowBoardRatsnest( wxUpdateUIEvent& aEvent );
|
|
|
|
void OnUpdateShowModuleRatsnest( wxUpdateUIEvent& aEvent );
|
|
|
|
void OnUpdateAutoDeleteTrack( wxUpdateUIEvent& aEvent );
|
|
|
|
void OnUpdateViaDrawMode( wxUpdateUIEvent& aEvent );
|
|
|
|
void OnUpdateTraceDrawMode( wxUpdateUIEvent& aEvent );
|
|
|
|
void OnUpdateHighContrastDisplayMode( wxUpdateUIEvent& aEvent );
|
|
|
|
void OnUpdateShowLayerManager( wxUpdateUIEvent& aEvent );
|
2011-03-03 19:08:13 +00:00
|
|
|
void OnUpdateShowMicrowaveToolbar( wxUpdateUIEvent& aEvent );
|
2011-02-21 13:54:29 +00:00
|
|
|
void OnUpdateVerticalToolbar( wxUpdateUIEvent& aEvent );
|
2011-03-01 19:26:17 +00:00
|
|
|
void OnUpdateSelectViaSize( wxUpdateUIEvent& aEvent );
|
2011-02-21 13:54:29 +00:00
|
|
|
void OnUpdateZoneDisplayStyle( wxUpdateUIEvent& aEvent );
|
2011-03-01 19:26:17 +00:00
|
|
|
void OnUpdateSelectTrackWidth( wxUpdateUIEvent& aEvent );
|
|
|
|
void OnUpdateSelectAutoTrackWidth( wxUpdateUIEvent& aEvent );
|
2011-12-16 13:32:23 +00:00
|
|
|
void OnUpdateAutoPlaceModulesMode( wxUpdateUIEvent& aEvent );
|
|
|
|
void OnUpdateAutoPlaceTracksMode( wxUpdateUIEvent& aEvent );
|
2011-02-21 13:54:29 +00:00
|
|
|
|
2011-09-07 09:27:02 +00:00
|
|
|
/**
|
2011-09-29 16:49:40 +00:00
|
|
|
* Function RecordMacros.
|
|
|
|
* records sequence of hotkeys and cursor positions to a macro.
|
|
|
|
* @param aDC = current device context
|
|
|
|
* @param aNumber The current number macros.
|
2011-09-07 09:27:02 +00:00
|
|
|
*/
|
2011-09-29 16:49:40 +00:00
|
|
|
void RecordMacros( wxDC* aDC, int aNumber );
|
2011-09-07 09:27:02 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function CallMacros
|
2011-09-29 16:49:40 +00:00
|
|
|
* play hotkeys and cursor position from a recorded macro.
|
|
|
|
* @param aDC = current device context
|
|
|
|
* @param aPosition The current cursor position in logical (drawing) units.
|
|
|
|
* @param aNumber The current number macros.
|
2011-09-07 09:27:02 +00:00
|
|
|
*/
|
2011-09-29 16:49:40 +00:00
|
|
|
void CallMacros( wxDC* aDC, const wxPoint& aPosition, int aNumber );
|
2011-09-07 09:27:02 +00:00
|
|
|
|
|
|
|
void SaveMacros();
|
|
|
|
|
|
|
|
void ReadMacros();
|
|
|
|
|
2010-11-17 21:47:27 +00:00
|
|
|
/**
|
|
|
|
* Function PrintPage , virtual
|
2010-03-18 20:35:29 +00:00
|
|
|
* used to print a page
|
2011-02-01 15:46:25 +00:00
|
|
|
* Print the page pointed by the current screen, set by the calling print function
|
2010-03-18 20:35:29 +00:00
|
|
|
* @param aDC = wxDC given by the calling print function
|
2010-12-29 17:47:32 +00:00
|
|
|
* @param aPrintMaskLayer = a 32 bits mask: bit n = 1 -> layer n is printed
|
|
|
|
* @param aPrintMirrorMode = true to plot mirrored
|
2010-03-18 20:35:29 +00:00
|
|
|
* @param aData = a pointer on an auxiliary data (NULL if not used)
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
virtual void PrintPage( wxDC* aDC, int aPrintMaskLayer, bool aPrintMirrorMode,
|
2010-04-23 14:46:00 +00:00
|
|
|
void * aData = NULL );
|
2010-03-18 20:35:29 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void GetKicadAbout( wxCommandEvent& event );
|
2008-05-30 18:06:21 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function IsGridVisible() , virtual
|
2010-02-01 21:23:27 +00:00
|
|
|
* @return true if the grid must be shown
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
virtual bool IsGridVisible();
|
2010-02-01 21:23:27 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function SetGridVisibility() , virtual
|
2010-02-01 21:23:27 +00:00
|
|
|
* It may be overloaded by derived classes
|
2010-04-23 14:46:00 +00:00
|
|
|
* if you want to store/retrieve the grid visibility in configuration.
|
2010-02-01 21:23:27 +00:00
|
|
|
* @param aVisible = true if the grid must be shown
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
virtual void SetGridVisibility( bool aVisible );
|
2010-02-01 21:23:27 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function GetGridColor() , virtual
|
2010-02-01 21:23:27 +00:00
|
|
|
* @return the color of the grid
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
virtual int GetGridColor();
|
2010-02-01 21:23:27 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function SetGridColor() , virtual
|
2010-02-01 21:23:27 +00:00
|
|
|
* @param aColor = the new color of the grid
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
virtual void SetGridColor(int aColor);
|
2010-02-01 21:23:27 +00:00
|
|
|
|
2008-01-01 11:58:14 +00:00
|
|
|
// Configurations:
|
2011-09-15 17:58:35 +00:00
|
|
|
void InstallConfigFrame();
|
|
|
|
void Process_Config( wxCommandEvent& event );
|
2009-11-23 20:18:47 +00:00
|
|
|
|
2011-09-26 20:32:56 +00:00
|
|
|
/**
|
|
|
|
* Function GetProjectFileParameters
|
++PCBNew
* Removed Pcb_Frame argument from BOARD() constructor, since it precludes
having a BOARD being edited by more than one editor, it was a bad design.
And this meant removing m_PcbFrame from BOARD.
* removed BOARD::SetWindowFrame(), and BOARD::m_PcbFrame
* Removed the global BOARD_DESIGN_SETTINGS which was in class_board.cpp
* added BOARD_DESIGN_SETTINGS to the BOARD class, a full instance
* a couple dialogs now only change BOARD_DESIGN_SETTINGS when OK is pressed,
such as dialog_mask_clearance, dialog_drc, etc.
* Removed common/pcbcommon.cpp's int g_CurrentVersionPCB = 1 and replaced it
with build_version.h's #define BOARD_FILE_VERSION, although there may be a
better place for this constant.
* Made the public functions in PARAM_CFG_ARRAY be type const.
void SaveParam(..) const and void ReadParam(..) const
* PARAM_CFG_BASE now has virtual destructor since we have various way of
destroying the derived class and boost::ptr_vector must be told about this.
* Pass const PARAM_CFG_ARRAY& instead of PARAM_CFG_ARRAY so that we can use
an automatic PARAM_CFG_ARRAY which is on the stack.\
* PCB_EDIT_FRAME::GetProjectFileParameters() may no longer cache the array,
since it has to access the current BOARD and the BOARD can change.
Remember BOARD_DESIGN_SETTINGS are now in the BOARD.
* Made the m_BoundingBox member private, this was a brutally hard task,
and indicative of the lack of commitment to accessors and object oriented
design on the part of KiCad developers. We must do better.
Added BOARD::GetBoundingBox, SetBoundingBox(), ComputeBoundingBox().
* Added PCB_BASE_FRAME::GetBoardBoundingBox() which calls BOARD::ComputeBoundingBox()
2011-12-05 06:15:33 +00:00
|
|
|
* returns a project file parameter list for Pcbnew.
|
2011-09-26 20:32:56 +00:00
|
|
|
* <p>
|
++PCBNew
* Removed Pcb_Frame argument from BOARD() constructor, since it precludes
having a BOARD being edited by more than one editor, it was a bad design.
And this meant removing m_PcbFrame from BOARD.
* removed BOARD::SetWindowFrame(), and BOARD::m_PcbFrame
* Removed the global BOARD_DESIGN_SETTINGS which was in class_board.cpp
* added BOARD_DESIGN_SETTINGS to the BOARD class, a full instance
* a couple dialogs now only change BOARD_DESIGN_SETTINGS when OK is pressed,
such as dialog_mask_clearance, dialog_drc, etc.
* Removed common/pcbcommon.cpp's int g_CurrentVersionPCB = 1 and replaced it
with build_version.h's #define BOARD_FILE_VERSION, although there may be a
better place for this constant.
* Made the public functions in PARAM_CFG_ARRAY be type const.
void SaveParam(..) const and void ReadParam(..) const
* PARAM_CFG_BASE now has virtual destructor since we have various way of
destroying the derived class and boost::ptr_vector must be told about this.
* Pass const PARAM_CFG_ARRAY& instead of PARAM_CFG_ARRAY so that we can use
an automatic PARAM_CFG_ARRAY which is on the stack.\
* PCB_EDIT_FRAME::GetProjectFileParameters() may no longer cache the array,
since it has to access the current BOARD and the BOARD can change.
Remember BOARD_DESIGN_SETTINGS are now in the BOARD.
* Made the m_BoundingBox member private, this was a brutally hard task,
and indicative of the lack of commitment to accessors and object oriented
design on the part of KiCad developers. We must do better.
Added BOARD::GetBoundingBox, SetBoundingBox(), ComputeBoundingBox().
* Added PCB_BASE_FRAME::GetBoardBoundingBox() which calls BOARD::ComputeBoundingBox()
2011-12-05 06:15:33 +00:00
|
|
|
* Populate a project file parameter array specific to Pcbnew.
|
2011-09-26 20:32:56 +00:00
|
|
|
* 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.
|
|
|
|
* </p>
|
++PCBNew
* Removed Pcb_Frame argument from BOARD() constructor, since it precludes
having a BOARD being edited by more than one editor, it was a bad design.
And this meant removing m_PcbFrame from BOARD.
* removed BOARD::SetWindowFrame(), and BOARD::m_PcbFrame
* Removed the global BOARD_DESIGN_SETTINGS which was in class_board.cpp
* added BOARD_DESIGN_SETTINGS to the BOARD class, a full instance
* a couple dialogs now only change BOARD_DESIGN_SETTINGS when OK is pressed,
such as dialog_mask_clearance, dialog_drc, etc.
* Removed common/pcbcommon.cpp's int g_CurrentVersionPCB = 1 and replaced it
with build_version.h's #define BOARD_FILE_VERSION, although there may be a
better place for this constant.
* Made the public functions in PARAM_CFG_ARRAY be type const.
void SaveParam(..) const and void ReadParam(..) const
* PARAM_CFG_BASE now has virtual destructor since we have various way of
destroying the derived class and boost::ptr_vector must be told about this.
* Pass const PARAM_CFG_ARRAY& instead of PARAM_CFG_ARRAY so that we can use
an automatic PARAM_CFG_ARRAY which is on the stack.\
* PCB_EDIT_FRAME::GetProjectFileParameters() may no longer cache the array,
since it has to access the current BOARD and the BOARD can change.
Remember BOARD_DESIGN_SETTINGS are now in the BOARD.
* Made the m_BoundingBox member private, this was a brutally hard task,
and indicative of the lack of commitment to accessors and object oriented
design on the part of KiCad developers. We must do better.
Added BOARD::GetBoundingBox, SetBoundingBox(), ComputeBoundingBox().
* Added PCB_BASE_FRAME::GetBoardBoundingBox() which calls BOARD::ComputeBoundingBox()
2011-12-05 06:15:33 +00:00
|
|
|
* @return PARAM_CFG_ARRAY - it is only good until SetBoard() is called, so
|
|
|
|
* don't keep it around past that event.
|
2011-09-26 20:32:56 +00:00
|
|
|
*/
|
++PCBNew
* Removed Pcb_Frame argument from BOARD() constructor, since it precludes
having a BOARD being edited by more than one editor, it was a bad design.
And this meant removing m_PcbFrame from BOARD.
* removed BOARD::SetWindowFrame(), and BOARD::m_PcbFrame
* Removed the global BOARD_DESIGN_SETTINGS which was in class_board.cpp
* added BOARD_DESIGN_SETTINGS to the BOARD class, a full instance
* a couple dialogs now only change BOARD_DESIGN_SETTINGS when OK is pressed,
such as dialog_mask_clearance, dialog_drc, etc.
* Removed common/pcbcommon.cpp's int g_CurrentVersionPCB = 1 and replaced it
with build_version.h's #define BOARD_FILE_VERSION, although there may be a
better place for this constant.
* Made the public functions in PARAM_CFG_ARRAY be type const.
void SaveParam(..) const and void ReadParam(..) const
* PARAM_CFG_BASE now has virtual destructor since we have various way of
destroying the derived class and boost::ptr_vector must be told about this.
* Pass const PARAM_CFG_ARRAY& instead of PARAM_CFG_ARRAY so that we can use
an automatic PARAM_CFG_ARRAY which is on the stack.\
* PCB_EDIT_FRAME::GetProjectFileParameters() may no longer cache the array,
since it has to access the current BOARD and the BOARD can change.
Remember BOARD_DESIGN_SETTINGS are now in the BOARD.
* Made the m_BoundingBox member private, this was a brutally hard task,
and indicative of the lack of commitment to accessors and object oriented
design on the part of KiCad developers. We must do better.
Added BOARD::GetBoundingBox, SetBoundingBox(), ComputeBoundingBox().
* Added PCB_BASE_FRAME::GetBoardBoundingBox() which calls BOARD::ComputeBoundingBox()
2011-12-05 06:15:33 +00:00
|
|
|
PARAM_CFG_ARRAY GetProjectFileParameters();
|
2011-09-26 20:32:56 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void SaveProjectSettings();
|
2010-04-23 14:46:00 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Load the project file configuration settings.
|
|
|
|
*
|
|
|
|
* @param aProjectFileName = The project filename.
|
|
|
|
* if not found use kicad.pro and initialize default values
|
|
|
|
* @return always returns true.
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
bool LoadProjectSettings( const wxString& aProjectFileName );
|
2010-04-23 14:46:00 +00:00
|
|
|
|
|
|
|
/**
|
2011-09-26 20:32:56 +00:00
|
|
|
* Function GetConfigurationSettings
|
2011-09-30 18:15:37 +00:00
|
|
|
* returns the Pcbnew applications settings list.
|
2011-09-26 20:32:56 +00:00
|
|
|
*
|
++PCBNew
* Removed Pcb_Frame argument from BOARD() constructor, since it precludes
having a BOARD being edited by more than one editor, it was a bad design.
And this meant removing m_PcbFrame from BOARD.
* removed BOARD::SetWindowFrame(), and BOARD::m_PcbFrame
* Removed the global BOARD_DESIGN_SETTINGS which was in class_board.cpp
* added BOARD_DESIGN_SETTINGS to the BOARD class, a full instance
* a couple dialogs now only change BOARD_DESIGN_SETTINGS when OK is pressed,
such as dialog_mask_clearance, dialog_drc, etc.
* Removed common/pcbcommon.cpp's int g_CurrentVersionPCB = 1 and replaced it
with build_version.h's #define BOARD_FILE_VERSION, although there may be a
better place for this constant.
* Made the public functions in PARAM_CFG_ARRAY be type const.
void SaveParam(..) const and void ReadParam(..) const
* PARAM_CFG_BASE now has virtual destructor since we have various way of
destroying the derived class and boost::ptr_vector must be told about this.
* Pass const PARAM_CFG_ARRAY& instead of PARAM_CFG_ARRAY so that we can use
an automatic PARAM_CFG_ARRAY which is on the stack.\
* PCB_EDIT_FRAME::GetProjectFileParameters() may no longer cache the array,
since it has to access the current BOARD and the BOARD can change.
Remember BOARD_DESIGN_SETTINGS are now in the BOARD.
* Made the m_BoundingBox member private, this was a brutally hard task,
and indicative of the lack of commitment to accessors and object oriented
design on the part of KiCad developers. We must do better.
Added BOARD::GetBoundingBox, SetBoundingBox(), ComputeBoundingBox().
* Added PCB_BASE_FRAME::GetBoardBoundingBox() which calls BOARD::ComputeBoundingBox()
2011-12-05 06:15:33 +00:00
|
|
|
* This replaces the old statically defined list that had the project
|
2011-09-26 20:32:56 +00:00
|
|
|
* 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
|
++PCBNew
* Removed Pcb_Frame argument from BOARD() constructor, since it precludes
having a BOARD being edited by more than one editor, it was a bad design.
And this meant removing m_PcbFrame from BOARD.
* removed BOARD::SetWindowFrame(), and BOARD::m_PcbFrame
* Removed the global BOARD_DESIGN_SETTINGS which was in class_board.cpp
* added BOARD_DESIGN_SETTINGS to the BOARD class, a full instance
* a couple dialogs now only change BOARD_DESIGN_SETTINGS when OK is pressed,
such as dialog_mask_clearance, dialog_drc, etc.
* Removed common/pcbcommon.cpp's int g_CurrentVersionPCB = 1 and replaced it
with build_version.h's #define BOARD_FILE_VERSION, although there may be a
better place for this constant.
* Made the public functions in PARAM_CFG_ARRAY be type const.
void SaveParam(..) const and void ReadParam(..) const
* PARAM_CFG_BASE now has virtual destructor since we have various way of
destroying the derived class and boost::ptr_vector must be told about this.
* Pass const PARAM_CFG_ARRAY& instead of PARAM_CFG_ARRAY so that we can use
an automatic PARAM_CFG_ARRAY which is on the stack.\
* PCB_EDIT_FRAME::GetProjectFileParameters() may no longer cache the array,
since it has to access the current BOARD and the BOARD can change.
Remember BOARD_DESIGN_SETTINGS are now in the BOARD.
* Made the m_BoundingBox member private, this was a brutally hard task,
and indicative of the lack of commitment to accessors and object oriented
design on the part of KiCad developers. We must do better.
Added BOARD::GetBoundingBox, SetBoundingBox(), ComputeBoundingBox().
* Added PCB_BASE_FRAME::GetBoardBoundingBox() which calls BOARD::ComputeBoundingBox()
2011-12-05 06:15:33 +00:00
|
|
|
* 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,
|
2011-09-26 20:32:56 +00:00
|
|
|
* this is the place to define it.
|
2010-04-23 14:46:00 +00:00
|
|
|
*
|
2011-09-26 20:32:56 +00:00
|
|
|
* @todo: Define the configuration variables as member variables instead of
|
|
|
|
* global variables or move them to the object class where they are
|
|
|
|
* used.
|
2010-04-23 14:46:00 +00:00
|
|
|
* @return - Reference to the list of applications settings.
|
|
|
|
*/
|
|
|
|
PARAM_CFG_ARRAY& GetConfigurationSettings();
|
|
|
|
|
|
|
|
/**
|
2011-09-26 20:32:56 +00:00
|
|
|
* Function LoadSettings
|
2011-09-30 18:15:37 +00:00
|
|
|
* loads applications settings specific to Pcbnew.
|
2010-04-23 14:46:00 +00:00
|
|
|
*
|
2011-03-01 19:26:17 +00:00
|
|
|
* This overrides the base class PCB_BASE_FRAME::LoadSettings() to
|
2010-04-23 14:46:00 +00:00
|
|
|
* handle settings specific common to the PCB layout application. It
|
|
|
|
* calls down to the base class to load settings common to all PCB type
|
2011-09-30 18:15:37 +00:00
|
|
|
* drawing frames. Please put your application settings for Pcbnew here
|
2010-04-23 14:46:00 +00:00
|
|
|
* to avoid having application settings loaded all over the place.
|
|
|
|
*/
|
|
|
|
virtual void LoadSettings();
|
|
|
|
|
|
|
|
/**
|
2011-09-26 20:32:56 +00:00
|
|
|
* Function SaveSettings
|
2011-09-30 18:15:37 +00:00
|
|
|
* saves applications settings common to Pcbnew.
|
2010-04-23 14:46:00 +00:00
|
|
|
*
|
2011-03-01 19:26:17 +00:00
|
|
|
* This overrides the base class PCB_BASE_FRAME::SaveSettings() to
|
2010-04-23 14:46:00 +00:00
|
|
|
* save settings specific to the PCB layout application main window. It
|
|
|
|
* calls down to the base class to save settings common to all PCB type
|
2011-09-30 18:15:37 +00:00
|
|
|
* drawing frames. Please put your application settings for Pcbnew here
|
2010-04-23 14:46:00 +00:00
|
|
|
* to avoid having application settings saved all over the place.
|
|
|
|
*/
|
|
|
|
virtual void SaveSettings();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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.
|
2009-10-21 19:16:25 +00:00
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
wxString GetLastNetListRead();
|
2010-04-23 14:46:00 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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.
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void SetLastNetListRead( const wxString& aNetListFile );
|
2009-10-21 19:16:25 +00:00
|
|
|
|
2011-05-03 12:57:44 +00:00
|
|
|
/**
|
|
|
|
* Function Test_Duplicate_Missing_And_Extra_Footprints
|
|
|
|
* Build a list of duplicate, missing and extra footprints
|
|
|
|
* from the current board and a netlist netlist :
|
|
|
|
* Shows 3 lists:
|
|
|
|
* 1 - duplicate footprints on board
|
|
|
|
* 2 - missing footprints (found in netlist but not on board)
|
|
|
|
* 3 - footprints not in netlist but on board
|
|
|
|
* @param aNetlistFullFilename = the full filename netlist
|
|
|
|
*/
|
|
|
|
void Test_Duplicate_Missing_And_Extra_Footprints( const wxString& aNetlistFullFilename );
|
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function OnHotKey.
|
2010-08-12 19:41:13 +00:00
|
|
|
* ** Commands are case insensitive **
|
|
|
|
* Some commands are relatives to the item under the mouse cursor
|
2011-02-02 19:01:21 +00:00
|
|
|
* @param aDC = current device context
|
|
|
|
* @param aHotkeyCode = hotkey code (ascii or wxWidget code for special keys)
|
|
|
|
* @param aPosition The cursor position in logical (drawing) units.
|
|
|
|
* @param aItem = NULL or pointer on a EDA_ITEM under the mouse cursor
|
2010-08-12 19:41:13 +00:00
|
|
|
*/
|
2011-02-02 19:01:21 +00:00
|
|
|
void OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
|
2010-08-12 19:41:13 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function OnHotkeyDeleteItem
|
2010-08-12 19:41:13 +00:00
|
|
|
* Delete the item found under the mouse cursor
|
|
|
|
* Depending on the current active tool::
|
|
|
|
* Tool track
|
|
|
|
* if a track is in progress: Delete the last segment
|
2011-09-15 17:58:35 +00:00
|
|
|
* else delete the entire track
|
2010-08-12 19:41:13 +00:00
|
|
|
* Tool module (footprint):
|
|
|
|
* Delete the module.
|
|
|
|
* @param aDC = current device context
|
|
|
|
* @return true if an item was deleted
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
bool OnHotkeyDeleteItem( wxDC* aDC );
|
2010-08-12 19:41:13 +00:00
|
|
|
|
2011-09-16 14:13:02 +00:00
|
|
|
/**
|
|
|
|
* Function OnHotkeyPlaceItem
|
|
|
|
* Place the item (footprint, track, text .. ) found under the mouse cursor
|
|
|
|
* An item can be placed only if there is this item currently edited
|
|
|
|
* Only a footprint, a pad or a track can be placed
|
|
|
|
* @param aDC = current device context
|
2011-09-26 20:32:56 +00:00
|
|
|
* @return true if an item was placed
|
2011-09-16 14:13:02 +00:00
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
bool OnHotkeyPlaceItem( wxDC* aDC );
|
2011-09-07 09:27:02 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
bool OnHotkeyEditItem( int aIdCommand );
|
2010-09-02 08:23:38 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function OnHotkeyMoveItem
|
2010-08-12 19:41:13 +00:00
|
|
|
* Moves or drag the item (footprint, track, text .. ) found under the mouse cursor
|
|
|
|
* Only a footprint or a track can be dragged
|
|
|
|
* @param aIdCommand = the hotkey command id
|
|
|
|
* @return true if an item was moved
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
bool OnHotkeyMoveItem( int aIdCommand );
|
2010-08-12 19:41:13 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function OnHotkeyRotateItem
|
2010-08-12 19:41:13 +00:00
|
|
|
* Rotate the item (text or footprint) found under the mouse cursor
|
2011-09-16 14:13:02 +00:00
|
|
|
* @note This command can be used with an item currently in edit.
|
|
|
|
* Only some items can be rotated (footprints and texts).
|
2010-08-12 19:41:13 +00:00
|
|
|
* @param aIdCommand = the hotkey command id
|
|
|
|
* @return true if an item was moved
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
bool OnHotkeyRotateItem( int aIdCommand );
|
2009-01-15 08:12:03 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void OnCloseWindow( wxCloseEvent& Event );
|
|
|
|
void Process_Special_Functions( wxCommandEvent& event );
|
|
|
|
void Tracks_and_Vias_Size_Event( wxCommandEvent& event );
|
|
|
|
void OnSelectTool( wxCommandEvent& aEvent );
|
2009-01-15 08:12:03 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void ProcessMuWaveFunctions( wxCommandEvent& event );
|
|
|
|
void MuWaveCommand( wxDC* DC, const wxPoint& MousePos );
|
2009-01-15 08:12:03 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void RedrawActiveWindow( wxDC* DC, bool EraseBg );
|
|
|
|
void ReCreateHToolbar();
|
|
|
|
void ReCreateAuxiliaryToolbar();
|
|
|
|
void ReCreateVToolbar();
|
|
|
|
void ReCreateMicrowaveVToolbar();
|
|
|
|
void ReCreateOptToolbar();
|
|
|
|
void ReCreateMenuBar();
|
2011-12-16 13:32:23 +00:00
|
|
|
LAYER_BOX_SELECTOR* ReCreateLayerBox( wxAuiToolBar* parent );
|
2008-04-29 13:35:26 +00:00
|
|
|
|
2011-08-26 17:01:17 +00:00
|
|
|
/**
|
|
|
|
* Function OnModify
|
|
|
|
* must be called after a board change to set the modified flag.
|
|
|
|
* <p>
|
|
|
|
* Reloads the 3D view if required and calls the base PCB_BASE_FRAME::OnModify function
|
|
|
|
* to update auxiliary information.
|
2011-09-15 17:58:35 +00:00
|
|
|
* </p>
|
2010-05-01 12:46:33 +00:00
|
|
|
*/
|
2011-08-26 17:01:17 +00:00
|
|
|
virtual void OnModify();
|
2010-05-01 12:46:33 +00:00
|
|
|
|
2010-01-21 20:53:01 +00:00
|
|
|
/**
|
2010-01-30 20:17:56 +00:00
|
|
|
* Function IsElementVisible
|
|
|
|
* tests whether a given element category is visible. Keep this as an
|
|
|
|
* inline function.
|
2011-09-20 13:57:40 +00:00
|
|
|
* @param aElement is from the enum by the same name
|
2010-01-30 20:17:56 +00:00
|
|
|
* @return bool - true if the element is visible.
|
|
|
|
* @see enum PCB_VISIBLE
|
|
|
|
*/
|
2011-09-20 13:57:40 +00:00
|
|
|
bool IsElementVisible( int aElement );
|
2010-01-30 20:17:56 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function SetElementVisibility
|
|
|
|
* changes the visibility of an element category
|
2011-09-20 13:57:40 +00:00
|
|
|
* @param aElement is from the enum by the same name
|
2010-01-30 20:17:56 +00:00
|
|
|
* @param aNewState = The new visibility state of the element category
|
|
|
|
* @see enum PCB_VISIBLE
|
|
|
|
*/
|
2011-09-20 13:57:40 +00:00
|
|
|
void SetElementVisibility( int aElement, bool aNewState );
|
2010-01-30 20:17:56 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function SetVisibleAlls
|
|
|
|
* Set the status of all visible element categories and layers to VISIBLE
|
|
|
|
*/
|
2011-08-26 17:01:17 +00:00
|
|
|
void SetVisibleAlls();
|
2010-01-30 20:17:56 +00:00
|
|
|
|
|
|
|
/**
|
2010-01-21 20:53:01 +00:00
|
|
|
* Function ReFillLayerWidget
|
|
|
|
* changes out all the layers in m_Layers and may be called upon
|
|
|
|
* loading a new BOARD.
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void ReFillLayerWidget();
|
2010-01-21 20:53:01 +00:00
|
|
|
|
2011-08-26 17:01:17 +00:00
|
|
|
/**
|
|
|
|
* Function Show3D_Frame
|
|
|
|
* displays the 3D view of current printed circuit board.
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void Show3D_Frame( wxCommandEvent& event );
|
|
|
|
void GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
|
2009-02-05 20:53:08 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function ShowDesignRulesEditor
|
2011-08-26 17:01:17 +00:00
|
|
|
* displays the Design Rules Editor.
|
2009-07-18 11:44:19 +00:00
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void ShowDesignRulesEditor( wxCommandEvent& event );
|
2009-07-18 11:44:19 +00:00
|
|
|
|
2009-09-27 11:00:21 +00:00
|
|
|
/* toolbars update UI functions: */
|
2009-11-23 20:18:47 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void PrepareLayerIndicator();
|
2009-09-27 11:00:21 +00:00
|
|
|
|
|
|
|
/* mouse functions events: */
|
2011-09-15 17:58:35 +00:00
|
|
|
void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
|
|
|
|
void OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function OnRightClick
|
2011-02-21 13:54:29 +00:00
|
|
|
* populates a popup menu with the choices appropriate for the current context.
|
2010-04-23 14:46:00 +00:00
|
|
|
* The caller will add the ZOOM menu choices afterward.
|
2008-01-01 11:58:14 +00:00
|
|
|
* @param aMousePos The current mouse position
|
|
|
|
* @param aPopMenu The menu to add to.
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
bool OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void OnSelectOptionToolbar( wxCommandEvent& event );
|
|
|
|
void ToolOnRightClick( wxCommandEvent& event );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function SaveCopyInUndoList.
|
2009-07-29 13:10:36 +00:00
|
|
|
* 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
|
2011-04-05 14:46:51 +00:00
|
|
|
* @param aTypeCommand = command type (see enum UNDO_REDO_T)
|
2009-11-23 20:18:47 +00:00
|
|
|
* @param aTransformPoint = the reference point of the transformation, for
|
2011-02-21 13:54:29 +00:00
|
|
|
* commands like move
|
2009-07-29 13:10:36 +00:00
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
virtual void SaveCopyInUndoList( BOARD_ITEM* aItemToCopy,
|
|
|
|
UNDO_REDO_T aTypeCommand,
|
|
|
|
const wxPoint& aTransformPoint = wxPoint( 0, 0 ) );
|
2009-07-29 13:10:36 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function SaveCopyInUndoList (overloaded).
|
2009-07-29 13:10:36 +00:00
|
|
|
* 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
|
2011-04-05 14:46:51 +00:00
|
|
|
* @param aTypeCommand = command type (see enum UNDO_REDO_T)
|
2009-11-23 20:18:47 +00:00
|
|
|
* @param aTransformPoint = the reference point of the transformation, for
|
2011-02-21 13:54:29 +00:00
|
|
|
* commands like move
|
2009-07-29 13:10:36 +00:00
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
virtual void SaveCopyInUndoList( PICKED_ITEMS_LIST& aItemsList,
|
2011-04-05 14:46:51 +00:00
|
|
|
UNDO_REDO_T aTypeCommand,
|
2010-12-14 15:56:30 +00:00
|
|
|
const wxPoint& aTransformPoint = wxPoint( 0, 0 ) );
|
2009-07-29 13:10:36 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
2010-11-12 16:59:16 +00:00
|
|
|
* Function PutDataInPreviousState
|
2009-08-01 19:26:05 +00:00
|
|
|
* Used in undo or redo command.
|
2011-02-21 13:54:29 +00:00
|
|
|
* Put data pointed by List in the previous state, i.e. the state memorized by List
|
|
|
|
* @param aList = a PICKED_ITEMS_LIST pointer to the list of items to undo/redo
|
2009-08-01 19:26:05 +00:00
|
|
|
* @param aRedoCommand = a bool: true for redo, false for undo
|
2011-09-15 17:58:35 +00:00
|
|
|
* @param aRebuildRatsnet = a bool: true to rebuild ratsnest (normal use), false
|
2010-04-23 14:46:00 +00:00
|
|
|
* to just retrieve last state (used in abort commands that do not need to
|
2009-11-23 20:18:47 +00:00
|
|
|
* rebuild ratsnest)
|
2009-08-01 19:26:05 +00:00
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
void PutDataInPreviousState( PICKED_ITEMS_LIST* aList,
|
|
|
|
bool aRedoCommand,
|
|
|
|
bool aRebuildRatsnet = true );
|
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function GetBoardFromRedoList
|
2009-08-01 19:26:05 +00:00
|
|
|
* Redo the last edition:
|
|
|
|
* - Save the current board in Undo list
|
|
|
|
* - Get an old version of the board from Redo list
|
|
|
|
* @return none
|
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
void GetBoardFromRedoList( wxCommandEvent& event );
|
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function GetBoardFromUndoList
|
2009-08-01 19:26:05 +00:00
|
|
|
* Undo the last edition:
|
|
|
|
* - Save the current board in Redo list
|
|
|
|
* - Get an old version of the board from Undo list
|
|
|
|
* @return none
|
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
void GetBoardFromUndoList( wxCommandEvent& event );
|
2009-01-15 08:12:03 +00:00
|
|
|
|
2009-07-31 05:33:11 +00:00
|
|
|
/* Block operations: */
|
2009-11-23 20:18:47 +00:00
|
|
|
|
2010-11-13 11:02:24 +00:00
|
|
|
/**
|
|
|
|
* Function ReturnBlockCommand
|
|
|
|
* Returns the block command internat code (BLOCK_MOVE, BLOCK_COPY...)
|
|
|
|
* corresponding to the keys pressed (ALT, SHIFT, SHIFT ALT ..) when
|
|
|
|
* block command is started by dragging the mouse.
|
|
|
|
* @param aKey = the key modifiers (Alt, Shift ...)
|
|
|
|
* @return the block command id (BLOCK_MOVE, BLOCK_COPY...)
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
virtual int ReturnBlockCommand( int aKey );
|
2010-11-13 11:02:24 +00:00
|
|
|
|
|
|
|
/**
|
2011-08-26 17:01:17 +00:00
|
|
|
* Function HandleBlockPlace()
|
2010-11-13 11:02:24 +00:00
|
|
|
* Called after HandleBlockEnd, when a block command needs to be
|
|
|
|
* executed after the block is moved to its new place
|
|
|
|
* (bloc move, drag, copy .. )
|
|
|
|
* Parameters must be initialized in GetScreen()->m_BlockLocate
|
|
|
|
*/
|
|
|
|
virtual void HandleBlockPlace( wxDC* DC );
|
|
|
|
|
|
|
|
/**
|
2011-08-26 17:01:17 +00:00
|
|
|
* Function HandleBlockEnd()
|
2010-11-13 11:02:24 +00:00
|
|
|
* 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 );
|
2009-11-23 20:18:47 +00:00
|
|
|
|
2009-08-01 19:26:05 +00:00
|
|
|
/**
|
|
|
|
* Function Block_SelectItems
|
|
|
|
* Uses GetScreen()->m_BlockLocate
|
|
|
|
* select items within the selected block.
|
|
|
|
* selected items are put in the pick list
|
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
void Block_SelectItems();
|
2009-08-01 19:26:05 +00:00
|
|
|
|
2009-07-31 05:33:11 +00:00
|
|
|
/**
|
|
|
|
* Function Block_Delete
|
2009-08-01 19:26:05 +00:00
|
|
|
* deletes all items within the selected block.
|
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
void Block_Delete();
|
|
|
|
|
2009-08-01 19:26:05 +00:00
|
|
|
/**
|
|
|
|
* Function Block_Rotate
|
|
|
|
* Rotate all items within the selected block.
|
2009-11-23 20:18:47 +00:00
|
|
|
* The rotation center is the center of the block
|
2009-08-01 19:26:05 +00:00
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
void Block_Rotate();
|
|
|
|
|
2009-08-01 19:26:05 +00:00
|
|
|
/**
|
|
|
|
* Function Block_Flip
|
|
|
|
* Flip items within the selected block.
|
2009-11-23 20:18:47 +00:00
|
|
|
* The flip center is the center of the block
|
2009-07-31 05:33:11 +00:00
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
void Block_Flip();
|
|
|
|
|
2009-07-31 05:33:11 +00:00
|
|
|
/**
|
|
|
|
* Function Block_Move
|
2009-08-01 19:26:05 +00:00
|
|
|
* move all items within the selected block.
|
2009-11-23 20:18:47 +00:00
|
|
|
* New location is determined by the current offset from the selected
|
2010-12-14 15:56:30 +00:00
|
|
|
* block's original location.
|
2009-07-31 05:33:11 +00:00
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
void Block_Move();
|
|
|
|
|
2009-07-31 05:33:11 +00:00
|
|
|
/**
|
|
|
|
* Function Block_Mirror_X
|
2009-08-01 19:26:05 +00:00
|
|
|
* mirrors all items within the currently selected block in the X axis.
|
2009-07-31 05:33:11 +00:00
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
void Block_Mirror_X();
|
|
|
|
|
2009-07-31 05:33:11 +00:00
|
|
|
/**
|
|
|
|
* Function Block_Duplicate
|
2009-08-01 19:26:05 +00:00
|
|
|
* Duplicate all items within the selected block.
|
2009-11-23 20:18:47 +00:00
|
|
|
* New location is determined by the current offset from the selected
|
|
|
|
* block's original location.
|
2009-07-31 05:33:11 +00:00
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
void Block_Duplicate();
|
2009-07-31 05:33:11 +00:00
|
|
|
|
2009-11-23 20:18:47 +00:00
|
|
|
void Process_Settings( wxCommandEvent& event );
|
2010-04-23 14:46:00 +00:00
|
|
|
void OnConfigurePcbOptions( wxCommandEvent& aEvent );
|
2009-11-23 20:18:47 +00:00
|
|
|
void InstallDisplayOptionsDialog( wxCommandEvent& aEvent );
|
|
|
|
void InstallPcbGlobalDeleteFrame( const wxPoint& pos );
|
2010-11-18 21:16:28 +00:00
|
|
|
bool InstallDialogNonCopperZonesEditor( ZONE_CONTAINER* aZone );
|
|
|
|
void InstallDialogLayerSetup();
|
2009-01-15 08:12:03 +00:00
|
|
|
|
2009-11-23 20:18:47 +00:00
|
|
|
void GenModulesPosition( wxCommandEvent& event );
|
|
|
|
void GenModuleReport( wxCommandEvent& event );
|
|
|
|
void InstallDrillFrame( wxCommandEvent& event );
|
|
|
|
void ToPostProcess( wxCommandEvent& event );
|
2009-01-15 08:12:03 +00:00
|
|
|
|
2009-11-23 20:18:47 +00:00
|
|
|
void OnFileHistory( wxCommandEvent& event );
|
2011-08-26 17:01:17 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function Files_io
|
|
|
|
* is the command event handler for read and write file commands.
|
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
void Files_io( wxCommandEvent& event );
|
2010-05-17 20:35:46 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function LoadOnePcbFile
|
2011-09-30 18:15:37 +00:00
|
|
|
* loads a KiCad board (.brd) from \a aFileName.
|
2010-05-17 20:35:46 +00:00
|
|
|
*
|
|
|
|
* @param aFileName - File name including path. If empty, a file dialog will
|
|
|
|
* be displayed.
|
|
|
|
* @param aAppend - Append board file aFileName to the currently loaded file if true.
|
2010-05-30 09:46:37 +00:00
|
|
|
* Default = false.
|
2010-05-17 20:35:46 +00:00
|
|
|
* @param aForceFileDialog - Display the file open dialog even if aFullFileName is
|
2010-05-30 09:46:37 +00:00
|
|
|
* valid if true; Default = false.
|
2010-05-17 20:35:46 +00:00
|
|
|
*
|
2011-02-21 13:54:29 +00:00
|
|
|
* @return False if file load fails or is canceled by the user, otherwise true.
|
2010-05-17 20:35:46 +00:00
|
|
|
*/
|
2010-05-30 09:46:37 +00:00
|
|
|
bool LoadOnePcbFile( const wxString& aFileName, bool aAppend = false,
|
2010-05-17 20:35:46 +00:00
|
|
|
bool aForceFileDialog = false );
|
2010-01-21 07:41:30 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function ReadPcbFile
|
2010-12-14 15:56:30 +00:00
|
|
|
* reads a board file <file>.brd
|
2011-02-22 16:43:03 +00:00
|
|
|
* @param aReader The line reader object to read from.
|
2010-01-21 07:41:30 +00:00
|
|
|
* @param Append if 0: a previously loaded board is deleted before loading
|
|
|
|
* the file else all items of the board file are added to the
|
|
|
|
* existing board
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
int ReadPcbFile( LINE_READER* aReader, bool Append );
|
2010-01-21 07:41:30 +00:00
|
|
|
|
2011-08-26 17:01:17 +00:00
|
|
|
/**
|
|
|
|
* Function SavePcbFile
|
|
|
|
* writes the board data structures to \a a aFileName
|
|
|
|
*
|
|
|
|
* @param aFileName The file name to write or wxEmptyString to prompt user for
|
|
|
|
* file name.
|
2011-10-13 19:56:32 +00:00
|
|
|
* @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.
|
2011-08-26 17:01:17 +00:00
|
|
|
* @return True if file was saved successfully.
|
|
|
|
*/
|
2011-10-13 19:56:32 +00:00
|
|
|
bool SavePcbFile( const wxString& aFileName, bool aCreateBackupFile = CREATE_BACKUP_FILE );
|
2011-08-26 17:01:17 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
int SavePcbFormatAscii( FILE* File );
|
2009-11-23 20:18:47 +00:00
|
|
|
bool WriteGeneralDescrPcb( FILE* File );
|
2009-03-30 15:36:41 +00:00
|
|
|
|
2009-08-06 15:42:09 +00:00
|
|
|
// BOARD handling
|
2009-11-23 20:18:47 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
2010-11-12 16:59:16 +00:00
|
|
|
* Function Clear_Pcb
|
2009-08-06 15:42:09 +00:00
|
|
|
* delete all and reinitialize the current board
|
2011-02-21 13:54:29 +00:00
|
|
|
* @param aQuery = true to prompt user for confirmation, false to initialize silently
|
2009-08-06 15:42:09 +00:00
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
bool Clear_Pcb( bool aQuery );
|
2009-09-22 12:27:57 +00:00
|
|
|
|
2009-09-10 13:04:04 +00:00
|
|
|
// Drc control
|
2009-11-23 20:18:47 +00:00
|
|
|
|
2009-09-10 13:04:04 +00:00
|
|
|
/* function GetDrcController
|
|
|
|
* @return the DRC controller
|
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
DRC* GetDrcController() { return m_drc; }
|
2009-08-06 15:42:09 +00:00
|
|
|
|
2009-03-30 15:36:41 +00:00
|
|
|
/**
|
|
|
|
* Function RecreateBOMFileFromBoard
|
|
|
|
* Recreates a .cmp file from the current loaded board
|
2011-09-30 18:15:37 +00:00
|
|
|
* this is the same as created by CvPcb.
|
2009-03-30 15:36:41 +00:00
|
|
|
* can be used if this file is lost
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void RecreateCmpFileFromBoard( wxCommandEvent& aEvent );
|
2009-03-30 15:36:41 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function RecreateBOMFileFromBoard
|
|
|
|
* Creates a BOM file from the current loaded board
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void RecreateBOMFileFromBoard( wxCommandEvent& aEvent );
|
2009-01-15 08:12:03 +00:00
|
|
|
|
2011-11-10 15:55:05 +00:00
|
|
|
/**
|
|
|
|
* Function ExportToGenCAD
|
|
|
|
* creates a file in GenCAD 1.4 format from the current board.
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void ExportToGenCAD( wxCommandEvent& event );
|
2008-03-04 04:22:27 +00:00
|
|
|
|
2010-04-19 06:21:56 +00:00
|
|
|
/**
|
|
|
|
* 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.
|
|
|
|
* @param aFullFileName = the full filename of the file to create
|
|
|
|
* @param aScale = the general scaling factor. 1.0 to export in inches
|
|
|
|
* @param aExport3DFiles = true to copy 3D shapes in the subir a3D_Subdir
|
2011-08-26 17:01:17 +00:00
|
|
|
* @param a3D_Subdir = sub directory where 3D shapes files are copied
|
2010-04-19 06:21:56 +00:00
|
|
|
* used only when aExport3DFiles == true
|
|
|
|
* @return true if Ok.
|
|
|
|
*/
|
|
|
|
bool ExportVRML_File( const wxString & aFullFileName, double aScale,
|
2010-12-14 15:56:30 +00:00
|
|
|
bool aExport3DFiles, const wxString & a3D_Subdir );
|
2010-04-19 06:21:56 +00:00
|
|
|
|
2008-01-21 22:16:45 +00:00
|
|
|
/**
|
|
|
|
* Function ExporttoSPECCTRA
|
|
|
|
* will export the current BOARD to a specctra dsn file. See
|
|
|
|
* See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the
|
|
|
|
* specification.
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void ExportToSpecctra( wxCommandEvent& event );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
2008-02-06 22:32:15 +00:00
|
|
|
/**
|
|
|
|
* Function ImportSpecctraSession
|
2008-03-04 04:22:27 +00:00
|
|
|
* will import a specctra *.ses file and use it to relocate MODULEs and
|
2008-02-06 22:32:15 +00:00
|
|
|
* to replace all vias and tracks in an existing and loaded BOARD.
|
|
|
|
* See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the
|
|
|
|
* specification.
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void ImportSpecctraSession( wxCommandEvent& event );
|
2008-02-06 22:32:15 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function ImportSpecctraDesign
|
2008-03-04 04:22:27 +00:00
|
|
|
* will import a specctra *.dsn file and use it to replace an entire BOARD.
|
2009-11-23 20:18:47 +00:00
|
|
|
* The new board will not have any graphics, only components, tracks and
|
|
|
|
* vias.
|
2008-02-06 22:32:15 +00:00
|
|
|
* See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the
|
|
|
|
* specification.
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void ImportSpecctraDesign( wxCommandEvent& event );
|
2008-03-04 04:22:27 +00:00
|
|
|
|
2008-03-22 05:55:06 +00:00
|
|
|
/**
|
2008-03-14 10:09:39 +00:00
|
|
|
* Function Access_to_External_Tool
|
2008-03-22 05:55:06 +00:00
|
|
|
* Run an external tool (like freeroute )
|
2009-01-15 08:12:03 +00:00
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void Access_to_External_Tool( wxCommandEvent& event );
|
2008-03-14 10:09:39 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
MODULE* ListAndSelectModuleName();
|
2009-05-28 08:42:24 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function ListNetsAndSelect
|
2009-05-28 08:42:24 +00:00
|
|
|
* called by a command event
|
|
|
|
* displays the sorted list of nets in a dialog frame
|
2009-11-23 20:18:47 +00:00
|
|
|
* If a net is selected, it is highlighted
|
2009-05-28 08:42:24 +00:00
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void ListNetsAndSelect( wxCommandEvent& event );
|
2009-05-28 08:42:24 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void Swap_Layers( wxCommandEvent& event );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
|
|
|
// Handling texts on the board
|
2011-09-15 17:58:35 +00:00
|
|
|
void Rotate_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC );
|
2009-11-23 20:18:47 +00:00
|
|
|
TEXTE_PCB* Create_Texte_Pcb( wxDC* DC );
|
2011-09-15 17:58:35 +00:00
|
|
|
void Delete_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC );
|
|
|
|
void StartMoveTextePcb( TEXTE_PCB* TextePcb, wxDC* DC );
|
|
|
|
void Place_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC );
|
|
|
|
void InstallTextPCBOptionsFrame( TEXTE_PCB* TextPCB, wxDC* DC );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
|
|
|
// Graphic Segments type DRAWSEGMENT
|
2011-09-15 17:58:35 +00:00
|
|
|
void Start_Move_DrawItem( DRAWSEGMENT* drawitem, wxDC* DC );
|
|
|
|
void Place_DrawItem( DRAWSEGMENT* drawitem, wxDC* DC );
|
|
|
|
void InstallGraphicItemPropertiesDialog( DRAWSEGMENT* aItem, wxDC* aDC );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
2011-03-01 19:26:17 +00:00
|
|
|
// Footprint edition (see also PCB_BASE_FRAME)
|
2011-09-15 17:58:35 +00:00
|
|
|
void InstallModuleOptionsFrame( MODULE* Module, wxDC* DC );
|
|
|
|
void StartMove_Module( MODULE* module, wxDC* DC );
|
2010-12-29 17:47:32 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function Delete Module
|
|
|
|
* Remove a footprint from m_Modules linked list and put it in undelete buffer
|
|
|
|
* The ratsnest and pad list are recalculated
|
|
|
|
* @param aModule = footprint to delete
|
|
|
|
* @param aDC = currentDevice Context. if NULL: do not redraw new ratsnest
|
|
|
|
* @param aAskBeforeDeleting : if true: ask for confirmation before deleting
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
bool Delete_Module( MODULE* aModule, wxDC* aDC, bool aAskBeforeDeleting );
|
2010-12-29 17:47:32 +00:00
|
|
|
|
2011-09-16 14:13:02 +00:00
|
|
|
/**
|
|
|
|
* Function Change_Side_Module
|
|
|
|
* Flip a footprint (switch layer from component or component to copper)
|
|
|
|
* The mirroring is made from X axis
|
|
|
|
* if a footprint is not on copper or component layer it is not flipped
|
|
|
|
* (it could be on an adhesive layer, not supported at this time)
|
|
|
|
* @param Module the footprint to flip
|
|
|
|
* @param DC Current Device Context. if NULL, no redraw
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void Change_Side_Module( MODULE* Module, wxDC* DC );
|
2009-11-23 20:18:47 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void InstallExchangeModuleFrame( MODULE* ExchangeModuleModule );
|
2009-08-06 07:11:04 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function Exchange_Module
|
2009-08-06 07:11:04 +00:00
|
|
|
* Replaces OldModule by NewModule, using OldModule settings:
|
|
|
|
* position, orientation, pad netnames ...)
|
|
|
|
* OldModule is deleted or put in undo list.
|
|
|
|
* @param aOldModule = footprint to replace
|
|
|
|
* @param aNewModule = footprint to put
|
2009-11-23 20:18:47 +00:00
|
|
|
* @param aUndoPickList = the undo list used to save OldModule. If null,
|
|
|
|
* OldModule is deleted
|
2009-08-06 07:11:04 +00:00
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void Exchange_Module( MODULE* aOldModule, MODULE* aNewModule,
|
|
|
|
PICKED_ITEMS_LIST* aUndoPickList );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
2011-03-01 19:26:17 +00:00
|
|
|
// loading modules: see PCB_BASE_FRAME
|
2008-01-01 11:58:14 +00:00
|
|
|
|
|
|
|
// Board handling
|
2011-09-15 17:58:35 +00:00
|
|
|
void RemoveStruct( BOARD_ITEM* Item, wxDC* DC );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function OnEditItemRequest
|
2010-08-10 18:34:26 +00:00
|
|
|
* Install the corresponding dialog editor for the given item
|
2011-02-22 16:43:03 +00:00
|
|
|
* @param aDC = the current device context
|
2010-08-10 18:34:26 +00:00
|
|
|
* @param aItem = a pointer to the BOARD_ITEM to edit
|
|
|
|
*/
|
2011-02-22 16:43:03 +00:00
|
|
|
void OnEditItemRequest( wxDC* aDC, BOARD_ITEM* aItem );
|
2010-08-10 18:34:26 +00:00
|
|
|
|
2011-10-17 20:01:27 +00:00
|
|
|
/**
|
|
|
|
* Locate track or pad and highlight the corresponding net.
|
|
|
|
* @return The Netcode, or -1 if no net located.
|
|
|
|
*/
|
|
|
|
int SelectHighLight( wxDC* DC );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Function HighLight.
|
|
|
|
* highlights the net at the current cursor position.
|
|
|
|
*/
|
|
|
|
void HighLight( wxDC* DC );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
|
|
|
// Track and via edition:
|
2011-10-17 20:01:27 +00:00
|
|
|
void Via_Edit_Control( wxCommandEvent& event );
|
2008-01-05 13:37:51 +00:00
|
|
|
|
2011-08-26 17:01:17 +00:00
|
|
|
/**
|
|
|
|
* Function IsMicroViaAcceptable
|
|
|
|
* return true if a microvia can be placed on the board.
|
|
|
|
* <p>
|
2010-01-31 20:01:46 +00:00
|
|
|
* A microvia is a small via restricted to 2 near neighbor layers
|
|
|
|
* because its is hole is made by laser which can penetrate only one layer
|
|
|
|
* It is mainly used to connect BGA to the first inner layer
|
|
|
|
* And it is allowed from an external layer to the first inner layer
|
2011-08-26 17:01:17 +00:00
|
|
|
* </p>
|
2010-01-31 20:01:46 +00:00
|
|
|
*/
|
|
|
|
bool IsMicroViaAcceptable( void );
|
|
|
|
|
2008-01-01 11:58:14 +00:00
|
|
|
/**
|
|
|
|
* Function Other_Layer_Route
|
2009-11-23 20:18:47 +00:00
|
|
|
* operates in one of two ways. If argument track is NULL, then swap the
|
|
|
|
* active layer between m_Route_Layer_TOP and m_Route_Layer_BOTTOM. If a
|
|
|
|
* track is in progress (track is not NULL), and if DRC allows it, place
|
|
|
|
* a via on the end of the current track, and then swap the current active
|
|
|
|
* layer and start a new segment on the new layer.
|
2008-01-01 11:58:14 +00:00
|
|
|
* @param track A TRACK* to append the via to or NULL.
|
|
|
|
* @param DC A device context to draw on.
|
|
|
|
* @return bool - true if the operation was successful, else false such as
|
2009-11-23 20:18:47 +00:00
|
|
|
* the case where DRC would not allow a via.
|
2008-01-05 13:37:51 +00:00
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
bool Other_Layer_Route( TRACK* track, wxDC* DC );
|
|
|
|
void HighlightUnconnectedPads( wxDC* DC );
|
2011-09-14 20:04:58 +00:00
|
|
|
|
2011-10-17 20:01:27 +00:00
|
|
|
/**
|
|
|
|
* Function Delete_Segment
|
2011-12-04 17:57:03 +00:00
|
|
|
* removes a track segment.
|
|
|
|
* If a new track is in progress: delete the current new segment.
|
|
|
|
* Otherwise, delete segment under the mouse cursor.
|
2011-10-17 20:01:27 +00:00
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
TRACK* Delete_Segment( wxDC* DC, TRACK* Track );
|
2011-10-17 20:01:27 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void Delete_Track( wxDC* DC, TRACK* Track );
|
|
|
|
void Delete_net( wxDC* DC, TRACK* Track );
|
2011-10-17 20:01:27 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function Remove_One_Track
|
|
|
|
* removes 1 track/
|
|
|
|
* The leading segment is removed and all adjacent segments
|
|
|
|
* until a pad or a junction point of more than 2 segments is found
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void Remove_One_Track( wxDC* DC, TRACK* pt_segm );
|
2009-10-30 17:58:15 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function Reset_All_Tracks_And_Vias_To_Netclass_Values
|
2009-10-30 17:58:15 +00:00
|
|
|
* Reset all tracks width and/or vias diameters and drill
|
|
|
|
* to their default Netclass value
|
|
|
|
* @param aTrack : bool true to modify tracks
|
|
|
|
* @param aVia : bool true to modify vias
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
bool Reset_All_Tracks_And_Vias_To_Netclass_Values( bool aTrack, bool aVia );
|
2009-10-30 17:58:15 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function Change_Net_Tracks_And_Vias_Sizes
|
2009-10-30 17:58:15 +00:00
|
|
|
* Reset all tracks width and vias diameters and drill
|
2009-11-23 20:18:47 +00:00
|
|
|
* to their default Netclass value or current values
|
2009-10-30 17:58:15 +00:00
|
|
|
* @param aNetcode : the netcode of the net to edit
|
2009-11-23 20:18:47 +00:00
|
|
|
* @param aUseNetclassValue : bool. True to use netclass values, false to
|
|
|
|
* use current values
|
2009-10-30 17:58:15 +00:00
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
bool Change_Net_Tracks_And_Vias_Sizes( int aNetcode, bool aUseNetclassValue );
|
2009-08-08 06:07:08 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function Edit_Track_Width
|
2009-08-08 06:07:08 +00:00
|
|
|
* Modify a full track width (using DRC control).
|
2009-11-23 20:18:47 +00:00
|
|
|
* a full track is the set of track segments between 2 ends: pads or a
|
|
|
|
* point that has more than 2 segments ends connected
|
2010-12-21 12:41:17 +00:00
|
|
|
* @param aDC = the curred device context (can be NULL)
|
2009-08-08 06:07:08 +00:00
|
|
|
* @param aTrackSegment = a segment or via on the track to change
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void Edit_Track_Width( wxDC* aDC, TRACK* aTrackSegment );
|
2009-08-08 06:07:08 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function Edit_TrackSegm_Width
|
2009-08-08 06:07:08 +00:00
|
|
|
* Modify one track segment width or one via diameter (using DRC control).
|
2010-12-21 12:41:17 +00:00
|
|
|
* @param aDC = the current device context (can be NULL)
|
2009-08-08 06:07:08 +00:00
|
|
|
* @param aTrackItem = the track segment or via to modify
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void Edit_TrackSegm_Width( wxDC* aDC, TRACK* aTrackItem );
|
2010-12-21 12:41:17 +00:00
|
|
|
|
2011-04-14 18:44:46 +00:00
|
|
|
/**
|
|
|
|
* Function Begin_Route
|
|
|
|
* Starts a new track and/or establish of a new track point.
|
|
|
|
*
|
|
|
|
* For a new track:
|
|
|
|
* - Search the netname of the new track from the starting point
|
|
|
|
* if it is on a pad or an existing track
|
|
|
|
* - Highlight all this net
|
|
|
|
* If a track is in progress:
|
|
|
|
* - Call DRC
|
|
|
|
* - If DRC is OK: finish the track segment and starts a new one.
|
|
|
|
* @param aTrack = the current track segment, or NULL to start a new track
|
|
|
|
* @param aDC = the current device context
|
|
|
|
* @return a pointer to the new track segment or null if not created (DRC error)
|
|
|
|
*/
|
|
|
|
TRACK* Begin_Route( TRACK* aTrack, wxDC* aDC );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Function End_Route
|
|
|
|
* Terminates a track currently being created
|
|
|
|
* @param aTrack = the current track segment in progress
|
|
|
|
* @param aDC = the current device context
|
|
|
|
* @return true if the track was created, false if not (due to a DRC error)
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
bool End_Route( TRACK* aTrack, wxDC* aDC );
|
2011-04-14 18:44:46 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void Attribut_Segment( TRACK* track, wxDC* DC, bool Flag_On );
|
|
|
|
void Attribut_Track( TRACK* track, wxDC* DC, bool Flag_On );
|
|
|
|
void Attribut_net( wxDC* DC, int net_code, bool Flag_On );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Function StartMoveOneNodeOrSegment
|
|
|
|
* initializes the parameters to move one via or/and a terminal point of a track segment
|
|
|
|
* The terminal point of other connected segments (if any) are moved too.
|
|
|
|
*/
|
|
|
|
void StartMoveOneNodeOrSegment( TRACK* aTrack, wxDC* aDC, int aCommand );
|
|
|
|
|
|
|
|
bool PlaceDraggedOrMovedTrackSegment( TRACK* Track, wxDC* DC );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @todo This function is broken, because it merge segments having different
|
|
|
|
* widths or without any connectivity test.
|
|
|
|
* 2 collinear segments can be merged only if no other segment or via is
|
|
|
|
* connected to the common point and if they have the same width. See
|
|
|
|
* cleanup.cpp for merge functions and consider MarkTrace() to locate segments
|
|
|
|
* that can be merged
|
|
|
|
*/
|
|
|
|
bool MergeCollinearTracks( TRACK* track, wxDC* DC, int end );
|
|
|
|
|
|
|
|
void Start_DragTrackSegmentAndKeepSlope( TRACK* track, wxDC* DC );
|
|
|
|
void SwitchLayer( wxDC* DC, int layer );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Function Add45DegreeSegment
|
|
|
|
* adds a track segment between 2 tracks segments if these 2 segments
|
|
|
|
* make a 90 deg angle, in order to have 45 deg track segments
|
|
|
|
* Its only works on horizontal or vertical segments.
|
|
|
|
*
|
|
|
|
* @param aDC The wxDC device context to draw on.
|
|
|
|
* @return A bool value true if ok or false if not.
|
|
|
|
*/
|
|
|
|
bool Add45DegreeSegment( wxDC* aDC );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function EraseRedundantTrack
|
2009-08-08 06:07:08 +00:00
|
|
|
* Called after creating a track
|
2009-11-23 20:18:47 +00:00
|
|
|
* Remove (if exists) the old track that have the same starting and the
|
|
|
|
* same ending point as the new created track
|
2009-08-08 06:07:08 +00:00
|
|
|
* (this is the redunding track)
|
|
|
|
* @param aDC = the current device context (can be NULL)
|
2009-11-23 20:18:47 +00:00
|
|
|
* @param aNewTrack = the new created track (a pointer to a segment of the
|
|
|
|
* track list)
|
2009-08-08 06:07:08 +00:00
|
|
|
* @param aNewTrackSegmentsCount = number of segments in this new track
|
2009-11-23 20:18:47 +00:00
|
|
|
* @param aItemsListPicker = the list picker to use for an undo command
|
|
|
|
* (can be NULL)
|
2009-09-10 13:04:04 +00:00
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
int EraseRedundantTrack( wxDC* aDC,
|
|
|
|
TRACK* aNewTrack,
|
|
|
|
int aNewTrackSegmentsCount,
|
|
|
|
PICKED_ITEMS_LIST* aItemsListPicker );
|
2009-08-08 06:07:08 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function SetTrackSegmentWidth
|
2009-08-08 06:07:08 +00:00
|
|
|
* Modify one track segment width or one via diameter (using DRC control).
|
|
|
|
* Basic routine used by other routines when editing tracks or vias
|
|
|
|
* @param aTrackItem = the track segment or via to modify
|
2009-11-23 20:18:47 +00:00
|
|
|
* @param aItemsListPicker = the list picker to use for an undo command
|
|
|
|
* (can be NULL)
|
|
|
|
* @param aUseNetclassValue = true to use NetClass value, false to use
|
2010-01-31 20:01:46 +00:00
|
|
|
* current designSettings value
|
2009-08-08 06:07:08 +00:00
|
|
|
* @return true if done, false if no not change (because DRC error)
|
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
bool SetTrackSegmentWidth( TRACK* aTrackItem,
|
|
|
|
PICKED_ITEMS_LIST* aItemsListPicker,
|
|
|
|
bool aUseNetclassValue );
|
2009-08-08 06:07:08 +00:00
|
|
|
|
|
|
|
|
2008-01-01 11:58:14 +00:00
|
|
|
// zone handling
|
2008-01-05 13:37:51 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
2011-07-16 16:04:49 +00:00
|
|
|
* Function Delete_OldZone_Fill (obsolete)
|
|
|
|
* Used for compatibility with old boards
|
2009-11-23 20:18:47 +00:00
|
|
|
* Remove the zone filling which include the segment aZone, or the zone
|
2011-07-16 16:04:49 +00:00
|
|
|
* which have the given time stamp.
|
|
|
|
* For old boards, a zone is a group of SEGZONE segments which have the same TimeStamp
|
2008-01-05 13:37:51 +00:00
|
|
|
* @param aZone = zone segment within the zone to delete. Can be NULL
|
2009-11-23 20:18:47 +00:00
|
|
|
* @param aTimestamp = Timestamp for the zone to delete, used if aZone ==
|
|
|
|
* NULL
|
2008-01-05 13:37:51 +00:00
|
|
|
*/
|
2011-07-16 16:04:49 +00:00
|
|
|
void Delete_OldZone_Fill( SEGZONE* aZone, long aTimestamp = 0 );
|
2008-01-31 20:53:44 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function Delete_LastCreatedCorner
|
2008-03-04 04:22:27 +00:00
|
|
|
* Used only while creating a new zone outline
|
|
|
|
* Remove and delete the current outline segment in progress
|
|
|
|
* @return 0 if no corner in list, or corner number
|
|
|
|
*/
|
2011-10-17 20:01:27 +00:00
|
|
|
int Delete_LastCreatedCorner( wxDC* DC );
|
2008-01-05 13:37:51 +00:00
|
|
|
|
2008-01-01 11:58:14 +00:00
|
|
|
/**
|
|
|
|
* Function Begin_Zone
|
2011-10-17 20:01:27 +00:00
|
|
|
* either initializes the first segment of a new zone, or adds an
|
|
|
|
* intermediate segment.
|
|
|
|
* A new zone can be:
|
|
|
|
* created from scratch: the user will be prompted to define parameters (layer, clearence ...)
|
|
|
|
* created from a similar zone (s_CurrentZone is used): parameters are copied from
|
|
|
|
* s_CurrentZone
|
|
|
|
* created as a cutout (an hole) inside s_CurrentZone
|
2008-01-01 11:58:14 +00:00
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
int Begin_Zone( wxDC* DC );
|
2008-01-05 13:37:51 +00:00
|
|
|
|
2008-01-01 11:58:14 +00:00
|
|
|
/**
|
|
|
|
* Function End_Zone
|
2008-01-20 19:55:22 +00:00
|
|
|
* terminates (if no DRC error ) the zone edge creation process
|
2008-01-05 13:37:51 +00:00
|
|
|
* @param DC = current Device Context
|
2008-03-04 04:22:27 +00:00
|
|
|
* @return true if Ok, false if DRC error
|
2008-01-01 11:58:14 +00:00
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
bool End_Zone( wxDC* DC );
|
2008-01-05 13:37:51 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
2010-11-12 16:59:16 +00:00
|
|
|
* Function Fill_Zone
|
2008-01-05 13:37:51 +00:00
|
|
|
* Calculate the zone filling for the outline zone_container
|
|
|
|
* The zone outline is a frontier, and can be complex (with holes)
|
|
|
|
* The filling starts from starting points like pads, tracks.
|
|
|
|
* If exists the old filling is removed
|
2011-11-10 08:21:11 +00:00
|
|
|
* @param aZone = zone to fill
|
2008-01-05 13:37:51 +00:00
|
|
|
* @return error level (0 = no error)
|
|
|
|
*/
|
2011-11-10 08:21:11 +00:00
|
|
|
int Fill_Zone( ZONE_CONTAINER* aZone );
|
2008-01-05 13:37:51 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
2010-11-12 16:59:16 +00:00
|
|
|
* Function Fill_All_Zones
|
2008-01-05 13:37:51 +00:00
|
|
|
* Fill all zones on the board
|
|
|
|
* The old fillings are removed
|
2011-11-10 08:21:11 +00:00
|
|
|
* @param aActiveWindow = the current active window, if a progress bar is shown
|
|
|
|
* = NULL to do not display a progress bar
|
|
|
|
* @param aVerbose = true to show error messages
|
2008-01-05 13:37:51 +00:00
|
|
|
*/
|
2011-11-10 08:21:11 +00:00
|
|
|
int Fill_All_Zones( wxWindow * aActiveWindow, bool aVerbose = true );
|
2008-01-05 13:37:51 +00:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Function Add_Zone_Cutout
|
|
|
|
* Add a cutout zone to a given zone outline
|
|
|
|
* @param DC = current Device Context
|
|
|
|
* @param zone_container = parent zone outline
|
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
void Add_Zone_Cutout( wxDC* DC, ZONE_CONTAINER* zone_container );
|
2008-01-05 13:37:51 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function Add_Similar_Zone
|
|
|
|
* Add a zone to a given zone outline.
|
2009-11-23 20:18:47 +00:00
|
|
|
* if the zones are overlapping they will be merged
|
2008-01-05 13:37:51 +00:00
|
|
|
* @param DC = current Device Context
|
|
|
|
* @param zone_container = parent zone outline
|
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
void Add_Similar_Zone( wxDC* DC, ZONE_CONTAINER* zone_container );
|
2008-01-05 13:37:51 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function Edit_Zone_Params
|
|
|
|
* Edit params (layer, clearance, ...) for a zone outline
|
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
void Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* zone_container );
|
2008-01-05 13:37:51 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function Start_Move_Zone_Corner
|
|
|
|
* Prepares a move corner in a zone outline,
|
|
|
|
* called from a move corner command (IsNewCorner = false),
|
|
|
|
* or a create new cornet command (IsNewCorner = true )
|
|
|
|
*/
|
2009-11-23 20:18:47 +00:00
|
|
|
void Start_Move_Zone_Corner( wxDC* DC,
|
|
|
|
ZONE_CONTAINER* zone_container,
|
|
|
|
int corner_id,
|
|
|
|
bool IsNewCorner );
|
2008-01-05 13:37:51 +00:00
|
|
|
|
|
|
|
/**
|
2008-02-01 21:30:45 +00:00
|
|
|
* Function Start_Move_Zone_Corner
|
|
|
|
* Prepares a drag edge in an existing zone outline,
|
|
|
|
*/
|
2010-12-14 15:56:30 +00:00
|
|
|
void Start_Move_Zone_Drag_Outline_Edge( wxDC* DC,
|
|
|
|
ZONE_CONTAINER* zone_container,
|
|
|
|
int corner_id );
|
2008-02-01 21:30:45 +00:00
|
|
|
|
2008-03-04 04:22:27 +00:00
|
|
|
/**
|
|
|
|
* Function End_Move_Zone_Corner_Or_Outlines
|
|
|
|
* Terminates a move corner in a zone outline, or a move zone outlines
|
|
|
|
* @param DC = current Device Context (can be NULL)
|
|
|
|
* @param zone_container: the given zone
|
2008-01-05 13:37:51 +00:00
|
|
|
*/
|
2010-12-14 15:56:30 +00:00
|
|
|
void End_Move_Zone_Corner_Or_Outlines( wxDC* DC, ZONE_CONTAINER* zone_container );
|
2008-01-05 13:37:51 +00:00
|
|
|
|
|
|
|
/**
|
2008-01-16 20:37:50 +00:00
|
|
|
* Function End_Move_Zone_Corner_Or_Outlines
|
2008-01-05 13:37:51 +00:00
|
|
|
* Remove the currently selected corner in a zone outline
|
|
|
|
* the .m_CornerSelection is used as corner selection
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void Remove_Zone_Corner( wxDC* DC, ZONE_CONTAINER* zone_container );
|
2008-01-05 13:37:51 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function Delete_Zone
|
2009-11-23 20:18:47 +00:00
|
|
|
* Remove the zone which include the segment aZone, or the zone which have
|
|
|
|
* the given time stamp. A zone is a group of segments which have the
|
|
|
|
* same TimeStamp
|
2008-01-05 13:37:51 +00:00
|
|
|
* @param DC = current Device Context (can be NULL)
|
|
|
|
* @param zone_container = zone to modify
|
|
|
|
* the member .m_CornerSelection is used to find the outline to remove.
|
|
|
|
* if the outline is the main outline, all the zone is removed
|
|
|
|
* otherwise, the hole is deleted
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void Delete_Zone_Contour( wxDC* DC, ZONE_CONTAINER* zone_container );
|
2008-01-05 13:37:51 +00:00
|
|
|
|
2008-03-04 04:22:27 +00:00
|
|
|
/**
|
|
|
|
* Function Start_Move_Zone_Outlines
|
2009-11-23 20:18:47 +00:00
|
|
|
* Initialize parameters to move an existing zone outlines.
|
2008-01-16 20:37:50 +00:00
|
|
|
* @param DC = current Device Context (can be NULL)
|
2008-03-04 04:22:27 +00:00
|
|
|
* @param zone_container: the given zone to move
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void Start_Move_Zone_Outlines( wxDC* DC, ZONE_CONTAINER* zone_container );
|
2008-01-16 20:37:50 +00:00
|
|
|
|
2009-01-15 08:12:03 +00:00
|
|
|
// Target handling
|
2011-09-15 17:58:35 +00:00
|
|
|
PCB_TARGET* CreateTarget( wxDC* DC );
|
|
|
|
void DeleteTarget( PCB_TARGET* aTarget, wxDC* DC );
|
|
|
|
void BeginMoveTarget( PCB_TARGET* aTarget, wxDC* DC );
|
|
|
|
void PlaceTarget( PCB_TARGET* aTarget, wxDC* DC );
|
|
|
|
void ShowTargetOptionsDialog( PCB_TARGET* aTarget, wxDC* DC );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
|
|
|
// Graphic segments type DRAWSEGMENT handling:
|
2009-01-15 08:12:03 +00:00
|
|
|
DRAWSEGMENT* Begin_DrawSegment( DRAWSEGMENT* Segment, int shape, wxDC* DC );
|
2011-09-15 17:58:35 +00:00
|
|
|
void End_Edge( DRAWSEGMENT* Segment, wxDC* DC );
|
|
|
|
void Delete_Segment_Edge( DRAWSEGMENT* Segment, wxDC* DC );
|
|
|
|
void Delete_Drawings_All_Layer( int aLayer );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
|
|
|
// Dimension handling:
|
2011-09-20 15:07:52 +00:00
|
|
|
void ShowDimensionPropertyDialog( DIMENSION* aDimension, wxDC* aDC );
|
|
|
|
DIMENSION* EditDimension( DIMENSION* aDimension, wxDC* aDC );
|
|
|
|
void DeleteDimension( DIMENSION* aDimension, wxDC* aDC );
|
2011-11-24 19:57:41 +00:00
|
|
|
void BeginMoveDimensionText( DIMENSION* aItem, wxDC* DC );
|
|
|
|
void PlaceDimensionText( DIMENSION* aItem, wxDC* DC );
|
|
|
|
|
2008-01-01 11:58:14 +00:00
|
|
|
|
|
|
|
// netlist handling:
|
2011-09-15 17:58:35 +00:00
|
|
|
void InstallNetlistFrame( wxDC* DC );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function ReadPcbNetlist
|
2011-05-03 12:57:44 +00:00
|
|
|
* Update footprints (load missing footprints and delete on demand extra
|
2010-04-16 16:28:35 +00:00
|
|
|
* footprints)
|
2011-05-03 12:57:44 +00:00
|
|
|
* Update connectivity info, references, values and "TIME STAMP"
|
2010-04-16 16:28:35 +00:00
|
|
|
* @param aNetlistFullFilename = netlist file name (*.net)
|
2011-05-03 12:57:44 +00:00
|
|
|
* @param aCmpFullFileName = cmp/footprint link file name (*.cmp).
|
|
|
|
* if not found, only the netlist will be used
|
2011-02-21 13:54:29 +00:00
|
|
|
* @param aMessageWindow = a reference to a wxTextCtrl where to display messages.
|
2010-12-21 12:41:17 +00:00
|
|
|
* can be NULL
|
|
|
|
* @param aChangeFootprint if true, footprints that have changed in netlist will be changed
|
|
|
|
* @param aDeleteBadTracks if true, erroneous tracks will be deleted
|
|
|
|
* @param aDeleteExtraFootprints if true, remove unlocked footprints that are not in netlist
|
2011-02-21 13:54:29 +00:00
|
|
|
* @param aSelect_By_Timestamp if true, use timestamp instead of reference to identify
|
|
|
|
* footprints from components (use after reannotation of the
|
|
|
|
* schematic)
|
2010-04-16 16:28:35 +00:00
|
|
|
* @return true if Ok
|
|
|
|
*/
|
2010-12-14 15:56:30 +00:00
|
|
|
bool ReadPcbNetlist( const wxString& aNetlistFullFilename,
|
2010-04-16 16:28:35 +00:00
|
|
|
const wxString& aCmpFullFileName,
|
|
|
|
wxTextCtrl* aMessageWindow,
|
|
|
|
bool aChangeFootprint,
|
|
|
|
bool aDeleteBadTracks,
|
|
|
|
bool aDeleteExtraFootprints,
|
|
|
|
bool aSelect_By_Timestamp );
|
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function RemoveMisConnectedTracks
|
2010-04-16 16:28:35 +00:00
|
|
|
* finds all track segments which are mis-connected (to more than one net).
|
|
|
|
* When such a bad segment is found, mark it as needing to be removed.
|
|
|
|
* and remove all tracks having at least one flagged segment.
|
|
|
|
* @param aDC = the current device context (can be NULL)
|
|
|
|
* @return true if any change is made
|
|
|
|
*/
|
2010-11-21 18:28:32 +00:00
|
|
|
bool RemoveMisConnectedTracks( wxDC* aDC );
|
2010-04-16 16:28:35 +00:00
|
|
|
|
|
|
|
|
2008-01-01 11:58:14 +00:00
|
|
|
// Autoplacement:
|
2011-09-15 17:58:35 +00:00
|
|
|
void AutoPlace( wxCommandEvent& event );
|
2009-01-15 08:12:03 +00:00
|
|
|
|
2011-12-16 13:32:23 +00:00
|
|
|
void OnSelectAutoPlaceMode( wxCommandEvent& aEvent );
|
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function OnOrientFootprints
|
2009-11-23 20:18:47 +00:00
|
|
|
* install the dialog box for the common Orient Footprints
|
2008-07-12 07:25:35 +00:00
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void OnOrientFootprints( wxCommandEvent& event );
|
2009-01-15 08:12:03 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function ReOrientModules
|
2008-07-12 07:25:35 +00:00
|
|
|
* Set the orientation of footprints
|
|
|
|
* @param ModuleMask = mask (wildcard allowed) selection
|
|
|
|
* @param Orient = new orientation
|
|
|
|
* @param include_fixe = true to orient locked footprints
|
2010-11-26 17:47:35 +00:00
|
|
|
* @return true if some footprints modified, false if no change
|
2008-07-12 07:25:35 +00:00
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
bool ReOrientModules( const wxString& ModuleMask, int Orient,
|
2009-01-15 08:12:03 +00:00
|
|
|
bool include_fixe );
|
2011-09-15 17:58:35 +00:00
|
|
|
void LockModule( MODULE* aModule, bool aLocked );
|
|
|
|
void AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb );
|
2011-11-10 15:55:05 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function AutoPlaceModule
|
|
|
|
* automatically places footprints within the confines of the PCB edges.
|
|
|
|
* The components with the FIXED status are not moved. If the menu is
|
|
|
|
* calling the placement of 1 module, it will be replaced.
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC );
|
2011-09-20 13:57:40 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function GetOptimalModulePlacement
|
|
|
|
* searches for the optimal position of the \a aModule.
|
|
|
|
*
|
|
|
|
* @param aModule A pointer to the MODULE object to get the optimal placement.
|
|
|
|
* @param aDC The device context to draw on.
|
|
|
|
* @return 1 if placement impossible or 0 if OK.
|
|
|
|
*/
|
|
|
|
int GetOptimalModulePlacement( MODULE* aModule, wxDC* aDC );
|
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void GenModuleOnBoard( MODULE* Module );
|
2011-11-10 15:55:05 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function Compute_Ratsnest_PlaceModule
|
|
|
|
* displays the module's ratsnest during displacement, and assess the "cost"
|
|
|
|
* of the position.
|
|
|
|
*
|
|
|
|
* The cost is the longest ratsnest distance with penalty for connections
|
|
|
|
* approaching 45 degrees.
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
float Compute_Ratsnest_PlaceModule( wxDC* DC );
|
2011-09-20 13:57:40 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function GenPlaceBoard
|
|
|
|
* generates board board (component side copper + rating):
|
|
|
|
* Allocate the memory needed to represent in "bitmap" on the grid
|
|
|
|
* Current:
|
|
|
|
* - The size of clearance area of component (the board)
|
|
|
|
* - The bitmap PENALTIES
|
|
|
|
* And initialize the cells of the board has
|
|
|
|
* - Hole in the cells occupied by a segment EDGE
|
|
|
|
* - CELL_is_ZONE for cell internal contour EDGE (if closed)
|
|
|
|
*
|
|
|
|
* Placement surface (board) gives the cells internal to the contour
|
|
|
|
* PCB, and among the latter the free cells and cells already occupied
|
|
|
|
*
|
|
|
|
* The bitmap PENALTIES give cells occupied by the modules,
|
|
|
|
* Plus a surface penalty related to the number of pads of the module
|
|
|
|
*
|
|
|
|
* Bitmap of the penalty is set to 0
|
|
|
|
* Occupation cell is a 0 leaves
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
int GenPlaceBoard();
|
2011-09-20 13:57:40 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void DrawInfoPlace( wxDC* DC );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
|
|
|
// Autorouting:
|
2011-09-15 17:58:35 +00:00
|
|
|
int Solve( wxDC* DC, int two_sides );
|
|
|
|
void Reset_Noroutable( wxDC* DC );
|
|
|
|
void Autoroute( wxDC* DC, int mode );
|
|
|
|
void ReadAutoroutedTracks( wxDC* DC );
|
|
|
|
void GlobalRoute( wxDC* DC );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
2011-09-14 20:04:58 +00:00
|
|
|
/**
|
|
|
|
* Function Show_1_Ratsnest
|
|
|
|
* draw ratsnest.
|
|
|
|
*
|
|
|
|
* The net edge pad with mouse or module locates the mouse.
|
|
|
|
* Delete the ratsnest if no module or pad is selected.
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void Show_1_Ratsnest( EDA_ITEM* item, wxDC* DC );
|
2011-09-14 20:04:58 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void Clean_Pcb( wxDC* DC );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void InstallFindFrame( const wxPoint& pos, wxDC* DC );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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
|
2011-09-30 18:15:37 +00:00
|
|
|
* @param objectToSync The object whose reference is used to synchronize Eeschema.
|
2008-01-01 11:58:14 +00:00
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void SendMessageToEESCHEMA( BOARD_ITEM* objectToSync );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
2011-11-10 15:55:05 +00:00
|
|
|
/**
|
|
|
|
* Function Edit_Gap
|
|
|
|
* edits the GAP module if it has changed the position and/or size of the pads that
|
|
|
|
* form the gap get a new value.
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
void Edit_Gap( wxDC* DC, MODULE* Module );
|
2011-11-10 15:55:05 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function Create_MuWaveBasicShape
|
|
|
|
* create a footprint with pad_count pads for micro wave applications.
|
|
|
|
* This footprint has pad_count pads:
|
|
|
|
* PAD_SMD, rectangular, H size = V size = current track width.
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
MODULE* Create_MuWaveBasicShape( const wxString& name, int pad_count );
|
2011-11-10 15:55:05 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Create_MuWaveComponent
|
|
|
|
* creates a module "GAP" or "STUB" used in micro wave designs.
|
|
|
|
* This module has 2 pads:
|
|
|
|
* PAD_SMD, rectangular, H size = V size = current track width.
|
|
|
|
* the "gap" is isolation created between this 2 pads
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
MODULE* Create_MuWaveComponent( int shape_type );
|
2011-11-10 15:55:05 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
MODULE* Create_MuWavePolygonShape();
|
2011-11-10 15:55:05 +00:00
|
|
|
|
2011-09-15 17:58:35 +00:00
|
|
|
void Begin_Self( wxDC* DC );
|
2011-11-10 15:55:05 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Function Genre_Self
|
|
|
|
* creates a self-shaped coil for microwave applications.
|
|
|
|
* - Length Mself.lng
|
|
|
|
* - Extremities Mself.m_Start and Mself.m_End
|
|
|
|
*
|
|
|
|
* We must determine:
|
|
|
|
* Mself.nbrin = number of segments perpendicular to the direction
|
|
|
|
* (The coil nbrin will demicercles + 1 + 2 1 / 4 circle)
|
|
|
|
* Mself.lbrin = length of a strand
|
|
|
|
* Mself.radius = radius of rounded parts of the coil
|
|
|
|
* Mself.delta = segments extremities connection between him and the coil even
|
|
|
|
*
|
|
|
|
* The equations are
|
|
|
|
* Mself.m_Size.x = 2 * Mself.radius + Mself.lbrin
|
|
|
|
* Mself.m_Size.y * Mself.delta = 2 + 2 * Mself.nbrin * Mself.radius
|
|
|
|
* Mself.lng = 2 * Mself.delta / / connections to the coil
|
|
|
|
+ (Mself.nbrin-2) * Mself.lbrin / / length of the strands except 1st and last
|
|
|
|
+ (Mself.nbrin 1) * (PI * Mself.radius) / / length of rounded
|
|
|
|
* Mself.lbrin + / 2 - Melf.radius * 2) / / length of 1st and last bit
|
|
|
|
*
|
|
|
|
* The constraints are:
|
|
|
|
* Nbrin >= 2
|
|
|
|
* Mself.radius < Mself.m_Size.x
|
|
|
|
* Mself.m_Size.y = Mself.radius * 4 + 2 * Mself.raccord
|
|
|
|
* Mself.lbrin> Mself.radius * 2
|
|
|
|
*
|
|
|
|
* The calculation is conducted in the following way:
|
|
|
|
* Initially:
|
|
|
|
* Nbrin = 2
|
|
|
|
* Radius = 4 * m_Size.x (arbitrarily fixed value)
|
|
|
|
* Then:
|
|
|
|
* Increasing the number of segments to the desired length
|
|
|
|
* (Radius decreases if necessary)
|
|
|
|
*
|
|
|
|
*/
|
2011-09-15 17:58:35 +00:00
|
|
|
MODULE* Genere_Self( wxDC* DC );
|
2008-01-01 11:58:14 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
|
|
|
* Function SetLanguage
|
2010-02-26 15:39:10 +00:00
|
|
|
* called on a language menu selection
|
|
|
|
*/
|
|
|
|
virtual void SetLanguage( wxCommandEvent& event );
|
2010-04-16 16:28:35 +00:00
|
|
|
|
2011-08-26 17:01:17 +00:00
|
|
|
/**
|
|
|
|
* Function UpdateTitle
|
|
|
|
* sets the main window title bar text.
|
|
|
|
* <p>
|
|
|
|
* 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.
|
2011-09-15 17:58:35 +00:00
|
|
|
* </p>
|
2011-08-26 17:01:17 +00:00
|
|
|
*/
|
|
|
|
void UpdateTitle();
|
|
|
|
|
2008-01-01 11:58:14 +00:00
|
|
|
DECLARE_EVENT_TABLE()
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* WXPCB_STRUCT_H */
|