Commit c58c388a authored by Wayne Stambaugh's avatar Wayne Stambaugh

Add PCBNew setting to remember last net list read and other minor fixes.

* PCBNew remembers last net list read during the current editing session
  as well as between project editing sessions.  Closes bug 576902.
* Separate PCBNew application settings from project file settings and
  allocate them dynamically instead of statically to make it easier to
  eliminate global variables.
parent 5849675a
......@@ -78,8 +78,9 @@ GerbView
* Add excellon2 drill file support (small good library)
* Fix the polygon bug.
* Switch to use ZONE instead of SEGZONE for polygons.
* Separate application settings and project configuration settings by converting
static list of parameters in gerbview_config.h to dynamically created lists of
settings. See eeschema/eeschema_config.cpp for an example.
......
......@@ -8,6 +8,7 @@
#include "wxstruct.h"
#include "base_struct.h"
#include "param_config.h"
#ifndef PCB_INTERNAL_UNIT
#define PCB_INTERNAL_UNIT 10000
......@@ -39,8 +40,7 @@ class PCB_LAYER_WIDGET;
/**
* @info see also class WinEDA_BasePcbFrame: Basic class for pcbnew and
*gerbview
* @info see also class WinEDA_BasePcbFrame: Basic class for pcbnew and gerbview.
*/
......@@ -57,6 +57,11 @@ protected:
DRC* m_drc; ///< the DRC controller, see drc.cpp
PARAM_CFG_ARRAY m_projectFileParams; ///< List of PCBNew project file settings.
PARAM_CFG_ARRAY m_configSettings; ///< List of PCBNew configuration settings.
wxString m_lastNetListRead; ///< Last net list read with relative path.
// 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 );
......@@ -156,8 +161,8 @@ public:
* @param aData = a pointer on an auxiliary data (NULL if not used)
*/
virtual void PrintPage( wxDC* aDC, bool aPrint_Sheet_Ref,
int aPrintMask, bool aPrintMirrorMode,
void * aData = NULL);
int aPrintMask, bool aPrintMirrorMode,
void * aData = NULL );
void GetKicadAbout( wxCommandEvent& event );
......@@ -168,7 +173,7 @@ public:
/** Function SetGridVisibility() , virtual
* It may be overloaded by derived classes
* if you want to store/retrieve the grid visiblity in configuration.
* if you want to store/retrieve the grid visibility in configuration.
* @param aVisible = true if the grid must be shown
*/
virtual void SetGridVisibility(bool aVisible);
......@@ -186,16 +191,67 @@ public:
// Configurations:
void InstallConfigFrame( const wxPoint& pos );
void Process_Config( wxCommandEvent& event );
void Update_config( wxWindow* displayframe );
/** Function Read_Config
* Read the project configuration file
* @param projectFileName = the config filename
* if not found use kicad.pro
* if not found : initialize default values
* @return true if the current config is modified, false if no change
PARAM_CFG_ARRAY& GetProjectFileParameters();
void SaveProjectSettings();
/**
* 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.
*/
bool LoadProjectSettings( const wxString& aProjectFileName );
/**
* Get the list of application specific settings.
*
* @return - Reference to the list of applications settings.
*/
PARAM_CFG_ARRAY& GetConfigurationSettings();
/**
* Load applications settings specific to PCBNew.
*
* This overrides the base class WinEDA_BasePcbFrame::LoadSettings() to
* handle settings specific common to the PCB layout application. It
* calls down to the base class to load settings common to all PCB type
* drawing frames. Please put your application settings for PCBNew here
* to avoid having application settings loaded all over the place.
*/
virtual void LoadSettings();
/**
* Save applications settings common to PCBNew.
*
* This overrides the base class WinEDA_BasePcbFrame::SaveSettings() to
* 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
* drawing frames. Please put your application settings for PCBNew here
* 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.
*/
bool Read_Config( const wxString& projectFileName );
wxString GetLastNetListRead();
/**
* Set the last net list successfully read by the net list dialog box.
*
* Note: the file path is converted to a path relative to the project file path. If
* the path cannot be made relative, than m_lastNetListRead is set to and empty
* string. This could happen when the net list file is on a different drive than
* the project file. The advantage of relative paths is that is more likely to
* work when opening the same project from both Windows and Linux.
*
* @param aNetListFile - The last net list file with full path successfully read.
*/
void SetLastNetListRead( const wxString& aNetListFile );
void OnHotKey( wxDC* DC,
int hotkey,
......@@ -287,7 +343,7 @@ public:
* Function OnRightClick
* populates a popup menu with the choices appropriate for the current
*context.
* The caller will add the ZOOM menu choices afterwards.
* The caller will add the ZOOM menu choices afterward.
* @param aMousePos The current mouse position
* @param aPopMenu The menu to add to.
*/
......@@ -331,7 +387,7 @@ public:
* @param aRedoCommand = a bool: true for redo, false for undo
* @param aRebuildRatsnet = a bool: true to rebuild ratsnet (normal use),
* false
* to just retrieve las state (used in abort commands that do not need to
* to just retrieve last state (used in abort commands that do not need to
* rebuild ratsnest)
*/
void PutDataInPreviousState( PICKED_ITEMS_LIST* aList,
......@@ -420,7 +476,7 @@ public:
void SetToolbars();
void Process_Settings( wxCommandEvent& event );
void InstallPcbOptionsFrame( int id );
void OnConfigurePcbOptions( wxCommandEvent& aEvent );
void InstallDisplayOptionsDialog( wxCommandEvent& aEvent );
void InstallPcbGlobalDeleteFrame( const wxPoint& pos );
......@@ -963,28 +1019,6 @@ public:
void Begin_Self( wxDC* DC );
MODULE* Genere_Self( wxDC* DC );
/**
* Load applications settings specific to the PCBNew.
*
* This overrides the base class WinEDA_BasePcbFrame::LoadSettings() to
* handle settings specific common to the PCB layout application. It
* calls down to the base class to load settings common to all PCB type
* drawing frames. Please put your application settings for PCBNew here
* to avoid having application settings loaded all over the place.
*/
virtual void LoadSettings();
/**
* Save applications settings common to PCB draw frame objects.
*
* This overrides the base class WinEDA_BasePcbFrame::SaveSettings() to
* 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
* drawing frames. Please put your application settings for PCBNew here
* to avoid having application settings saved all over the place.
*/
virtual void SaveSettings();
/** function SetLanguage
* called on a language menu selection
*/
......
......@@ -99,7 +99,7 @@ void Dialog_GeneralOptions::OnOkClick( wxCommandEvent& event )
g_MagneticPadOption = m_MagneticPadOptCtrl->GetSelection();
g_MagneticTrackOption = m_MagneticTrackOptCtrl->GetSelection();
EndModal( 1 );
EndModal( wxID_OK );
}
......
......@@ -16,21 +16,11 @@
extern int g_DrawDefaultLineThickness;
void WinEDA_PcbFrame::InstallPcbOptionsFrame( int id )
void WinEDA_PcbFrame::OnConfigurePcbOptions( wxCommandEvent& aEvent )
{
switch( id )
{
case ID_PCB_DRAWINGS_WIDTHS_SETUP:
{
DIALOG_GRAPHIC_ITEMS_OPTIONS dlg( this );
dlg.ShowModal();
}
break;
default:
wxMessageBox( wxT( "InstallPcbOptionsFrame() id error" ) );
break;
}
DIALOG_GRAPHIC_ITEMS_OPTIONS dlg( this );
dlg.ShowModal();
}
......@@ -143,7 +133,7 @@ void DIALOG_GRAPHIC_ITEMS_OPTIONS::OnOkClick( wxCommandEvent& event )
if( g_DrawDefaultLineThickness < 0 )
g_DrawDefaultLineThickness = 0;
EndModal( 1 );
EndModal( wxID_OK );
}
......
......@@ -18,14 +18,18 @@ extern void TestFor_Duplicate_Missing_And_Extra_Footprints( wxWindow* fram
/*************************************************************************/
void WinEDA_PcbFrame::InstallNetlistFrame( wxDC* DC, const wxPoint& pos )
/*************************************************************************/
{
/* Setup the default netlist file name according to the board file name */
wxFileName fn = GetScreen()->m_FileName;
/* Setup the netlist file name to the last net list file read or the board file
* name if no last file read is not set.
*/
wxFileName fn = GetLastNetListRead();
fn.SetExt( NetExtBuffer );
if( !fn.FileExists() )
{
fn = GetScreen()->m_FileName;
fn.SetExt( NetExtBuffer );
}
DIALOG_NETLIST frame( this, DC, fn.GetFullPath() );
......@@ -33,12 +37,13 @@ void WinEDA_PcbFrame::InstallNetlistFrame( wxDC* DC, const wxPoint& pos )
}
DIALOG_NETLIST::DIALOG_NETLIST( WinEDA_PcbFrame* aParent, wxDC * aDC, const wxString & aNetlistFull_Filename )
: DIALOG_NETLIST_FBP(aParent)
DIALOG_NETLIST::DIALOG_NETLIST( WinEDA_PcbFrame* aParent, wxDC * aDC,
const wxString & aNetlistFull_Filename )
: DIALOG_NETLIST_FBP( aParent )
{
m_Parent = aParent;
m_DC = aDC;
m_NetlistFilenameCtrl->SetValue(aNetlistFull_Filename);
m_NetlistFilenameCtrl->SetValue( aNetlistFull_Filename );
Init();
......@@ -54,18 +59,30 @@ void DIALOG_NETLIST::Init()
void DIALOG_NETLIST::OnOpenNelistClick( wxCommandEvent& event )
{
wxString fullfilename;
wxFileDialog FilesDialog( this, _( "Netlist Selection:" ), wxGetCwd(),
wxEmptyString, NetlistFileWildcard,
wxFD_DEFAULT_STYLE | wxFD_FILE_MUST_EXIST );
wxString lastPath = wxFileName::GetCwd();
wxString lastNetlistRead = m_Parent->GetLastNetListRead();
if( !lastNetlistRead.IsEmpty() && !wxFileName::FileExists( lastNetlistRead ) )
{
lastNetlistRead = wxEmptyString;
}
else
{
wxFileName fn = lastNetlistRead;
lastPath = fn.GetPath();
lastNetlistRead = fn.GetName();
}
wxLogDebug( wxT( "Last net list read path <%s>, file name <%s>." ),
GetChars( lastPath ), GetChars( lastNetlistRead ) );
wxFileDialog FilesDialog( this, _( "Select Netlist" ), lastPath, lastNetlistRead,
NetlistFileWildcard, wxFD_DEFAULT_STYLE | wxFD_FILE_MUST_EXIST );
if( FilesDialog.ShowModal() != wxID_OK )
return;
fullfilename = FilesDialog.GetPath( );
m_NetlistFilenameCtrl->SetValue( fullfilename );
m_NetlistFilenameCtrl->SetValue( FilesDialog.GetPath() );
}
......@@ -75,17 +92,18 @@ void DIALOG_NETLIST::OnReadNetlistFileClick( wxCommandEvent& event )
fn.SetExt( NetCmpExtBuffer );
m_Parent->ReadPcbNetlist( m_NetlistFilenameCtrl->GetValue(),
fn.GetFullPath(), m_MessageWindow,
m_ChangeExistingFootprintCtrl->GetSelection() == 1 ? TRUE : FALSE,
m_DeleteBadTracks->GetSelection() == 1 ? TRUE : FALSE,
m_RemoveExtraFootprintsCtrl->GetSelection() == 1 ? TRUE : FALSE,
m_Select_By_Timestamp->GetSelection() == 1 ? TRUE : FALSE );
fn.GetFullPath(), m_MessageWindow,
m_ChangeExistingFootprintCtrl->GetSelection() == 1 ? TRUE : FALSE,
m_DeleteBadTracks->GetSelection() == 1 ? TRUE : FALSE,
m_RemoveExtraFootprintsCtrl->GetSelection() == 1 ? TRUE : FALSE,
m_Select_By_Timestamp->GetSelection() == 1 ? TRUE : FALSE );
}
void DIALOG_NETLIST::OnTestFootprintsClick( wxCommandEvent& event )
{
TestFor_Duplicate_Missing_And_Extra_Footprints( this, m_NetlistFilenameCtrl->GetValue(), m_Parent->GetBoard() );
TestFor_Duplicate_Missing_And_Extra_Footprints( this, m_NetlistFilenameCtrl->GetValue(),
m_Parent->GetBoard() );
}
......
......@@ -97,11 +97,10 @@ DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES( WinEDA_BasePcbFrame* parent, D_PAD
}
/*************************************************************/
void WinEDA_BasePcbFrame::InstallPadOptionsFrame( D_PAD* Pad )
/*************************************************************/
{
DIALOG_PAD_PROPERTIES dlg( this, Pad );
dlg.ShowModal();
}
......@@ -441,9 +440,12 @@ void DIALOG_PAD_PROPERTIES::PadPropertiesAccept( wxCommandEvent& event )
g_Pad_Master.m_PadShape = CodeShape[m_PadShape->GetSelection()];
// Read pad clearances values:
g_Pad_Master.m_LocalClearance = ReturnValueFromTextCtrl( *m_NetClearanceValueCtrl, internalUnits );
g_Pad_Master.m_LocalSolderMaskMargin = ReturnValueFromTextCtrl( *m_SolderMaskMarginCtrl, internalUnits );
g_Pad_Master.m_LocalSolderPasteMargin = ReturnValueFromTextCtrl( *m_SolderPasteMarginCtrl, internalUnits );
g_Pad_Master.m_LocalClearance = ReturnValueFromTextCtrl( *m_NetClearanceValueCtrl,
internalUnits );
g_Pad_Master.m_LocalSolderMaskMargin = ReturnValueFromTextCtrl( *m_SolderMaskMarginCtrl,
internalUnits );
g_Pad_Master.m_LocalSolderPasteMargin = ReturnValueFromTextCtrl( *m_SolderPasteMarginCtrl,
internalUnits );
double dtmp = 0.0;
msg = m_SolderPasteMarginRatioCtrl->GetValue();
msg.ToDouble( &dtmp );
......@@ -664,7 +666,7 @@ void DIALOG_PAD_PROPERTIES::PadPropertiesAccept( wxCommandEvent& event )
m_Parent->OnModify();
}
EndModal(1);
EndModal( wxID_OK );
if( RastnestIsChanged ) // The net ratsnest must be recalculated
m_Parent->GetBoard()->m_Status_Pcb = 0;
......@@ -674,6 +676,6 @@ void DIALOG_PAD_PROPERTIES::PadPropertiesAccept( wxCommandEvent& event )
void DIALOG_PAD_PROPERTIES::OnCancelButtonClick( wxCommandEvent& event )
/*********************************************************************/
{
EndModal(0);
EndModal( wxID_CANCEL );
}
......@@ -128,7 +128,7 @@ void DIALOG_PCBNEW_CONFIG_LIBS::OnOkClick( wxCommandEvent& event )
g_LibName_List.Add(m_ListLibr->GetString(ii) );
}
m_Parent->Update_config( this );
m_Parent->SaveProjectSettings();
EndModal( wxID_OK );
}
......
......@@ -31,17 +31,14 @@ void WinEDA_PcbFrame::OnFileHistory( wxCommandEvent& event )
}
}
/****************************************************/
void WinEDA_PcbFrame::Files_io( wxCommandEvent& event )
/****************************************************/
/* Handle the read/write file commands
*/
void WinEDA_PcbFrame::Files_io( wxCommandEvent& event )
{
int id = event.GetId();
wxString msg;
// If an edition is in progress, stop it
DrawPanel->UnManageCursor( 0, wxCURSOR_ARROW );
......@@ -69,13 +66,13 @@ void WinEDA_PcbFrame::Files_io( wxCommandEvent& event )
if( !fn.FileExists() )
{
msg = _( "Recovery file " ) + fn.GetFullPath() + _( " not found" );
msg = _( "Recovery file " ) + fn.GetFullPath() + _( " not found." );
DisplayInfoMessage( this, msg );
break;
}
else
{
msg = _( "Ok to load Recovery file " ) + fn.GetFullPath();
msg = _( "OK to load recovery file " ) + fn.GetFullPath();
if( !IsOK( this, msg ) )
break;
}
......@@ -209,7 +206,7 @@ this file again."));
ReadPcbFile( source, true );
else
{
Read_Config( GetScreen()->m_FileName );
LoadProjectSettings( GetScreen()->m_FileName );
// Update the option toolbar
m_DisplayPcbTrackFill = DisplayOpt.DisplayPcbTrackFill;
......@@ -228,11 +225,11 @@ this file again."));
/* If append option: change the initial board name to <oldname>-append.brd */
if( Append )
{
wxString new_filename = GetScreen()->m_FileName.BeforeLast('.');
if ( ! new_filename.EndsWith(wxT("-append")) )
new_filename += wxT("-append");
wxString new_filename = GetScreen()->m_FileName.BeforeLast( '.' );
if ( ! new_filename.EndsWith( wxT( "-append" ) ) )
new_filename += wxT( "-append" );
new_filename += wxT(".") + PcbExtBuffer;
new_filename += wxT( "." ) + PcbExtBuffer;
OnModify();
GetScreen()->m_FileName = new_filename;
......@@ -251,11 +248,11 @@ this file again."));
* if board items are not visible after loading a board...
* Grid and ratsnest can be left to their previous state
*/
bool showGrid = IsElementVisible(GRID_VISIBLE);
bool showRats = IsElementVisible(RATSNEST_VISIBLE);
SetVisibleAlls( );
SetElementVisibility(GRID_VISIBLE, showGrid);
SetElementVisibility(RATSNEST_VISIBLE, showRats);
bool showGrid = IsElementVisible( GRID_VISIBLE );
bool showRats = IsElementVisible( RATSNEST_VISIBLE );
SetVisibleAlls();
SetElementVisibility( GRID_VISIBLE, showGrid );
SetElementVisibility( RATSNEST_VISIBLE, showRats );
// Update info shown by the horizontal toolbars
GetBoard()->SetCurrentNetClass( NETCLASS::Default );
......@@ -265,7 +262,7 @@ this file again."));
ReCreateLayerBox( NULL );
AuxiliaryToolBar_Update_UI();
syncLayerWidget( );
syncLayerWidget();
// Display the loaded board:
Zoom_Automatique( false );
......@@ -294,12 +291,9 @@ this file again."));
}
/***********************************************************/
bool WinEDA_PcbFrame::SavePcbFile( const wxString& FileName )
/************************************************************/
/* Write the board file
*/
bool WinEDA_PcbFrame::SavePcbFile( const wxString& FileName )
{
wxFileName backupFileName;
wxFileName pcbFileName;
......
......@@ -116,8 +116,7 @@ FILE * OpenNetlistFile( const wxString& aFullFileName )
if( netfile == NULL )
{
wxString msg;
msg.Printf( _( "Netlist file %s not found" ),
GetChars( aFullFileName ) );
msg.Printf( _( "Netlist file %s not found" ), GetChars( aFullFileName ) );
DisplayError( NULL, msg );
}
......@@ -149,14 +148,13 @@ FILE * OpenNetlistFile( const wxString& aFullFileName )
* }
* #End
*/
bool WinEDA_PcbFrame::ReadPcbNetlist(
const wxString& aNetlistFullFilename,
const wxString& aCmpFullFileName,
wxTextCtrl* aMessageWindow,
bool aChangeFootprint,
bool aDeleteBadTracks,
bool aDeleteExtraFootprints,
bool aSelect_By_Timestamp )
bool WinEDA_PcbFrame::ReadPcbNetlist( const wxString& aNetlistFullFilename,
const wxString& aCmpFullFileName,
wxTextCtrl* aMessageWindow,
bool aChangeFootprint,
bool aDeleteBadTracks,
bool aDeleteExtraFootprints,
bool aSelect_By_Timestamp )
{
int State, Comment;
MODULE* Module = NULL;
......@@ -168,11 +166,12 @@ bool WinEDA_PcbFrame::ReadPcbNetlist(
if( !netfile )
return false;
SetLastNetListRead( aNetlistFullFilename );
if( aMessageWindow )
{
wxString msg;
msg.Printf( _( "Reading Netlist \"%s\"" ),
GetChars( aNetlistFullFilename ) );
msg.Printf( _( "Reading Netlist \"%s\"" ), GetChars( aNetlistFullFilename ) );
aMessageWindow->AppendText( msg + wxT( "\n" ) );
}
......@@ -181,7 +180,8 @@ bool WinEDA_PcbFrame::ReadPcbNetlist(
OnModify();
GetBoard()->m_Status_Pcb = 0;
State = 0; Comment = 0;
State = 0;
Comment = 0;
s_NbNewModules = 0;
wxBusyCursor dummy; // Shows an hourglass while calculating
......
......@@ -47,6 +47,8 @@
#include "dialog_design_rules.h"
#include "class_pcb_layer_widget.h"
#include "hotkeys.h"
#include "pcbnew_config.h"
extern int g_DrawDefaultLineThickness;
......@@ -109,30 +111,24 @@ BEGIN_EVENT_TABLE( WinEDA_PcbFrame, WinEDA_BasePcbFrame )
EVT_MENU( wxID_EXIT, WinEDA_PcbFrame::OnQuit )
// menu Config
EVT_MENU( ID_CONFIG_REQ,
WinEDA_PcbFrame::Process_Config )
EVT_MENU( ID_CONFIG_SAVE,
WinEDA_PcbFrame::Process_Config )
EVT_MENU( ID_CONFIG_READ,
WinEDA_PcbFrame::Process_Config )
EVT_MENU( ID_PCB_DRAWINGS_WIDTHS_SETUP, WinEDA_PcbFrame::OnConfigurePcbOptions )
EVT_MENU( ID_CONFIG_REQ, WinEDA_PcbFrame::Process_Config )
EVT_MENU( ID_CONFIG_SAVE, WinEDA_PcbFrame::Process_Config )
EVT_MENU( ID_CONFIG_READ, WinEDA_PcbFrame::Process_Config )
EVT_MENU_RANGE( ID_PREFERENCES_HOTKEY_START,
ID_PREFERENCES_HOTKEY_END,
WinEDA_PcbFrame::Process_Config )
EVT_MENU( ID_MENU_PCB_SHOW_HIDE_LAYERS_MANAGER_DIALOG,
WinEDA_PcbFrame::Process_Config )
WinEDA_PcbFrame::Process_Config )
EVT_MENU( ID_OPTIONS_SETUP, WinEDA_PcbFrame::Process_Config )
EVT_MENU( ID_PCB_LAYERS_SETUP, WinEDA_PcbFrame::Process_Config )
EVT_MENU( ID_PCB_MASK_CLEARANCE, WinEDA_PcbFrame::Process_Config )
EVT_MENU( ID_PCB_DRAWINGS_WIDTHS_SETUP, WinEDA_PcbFrame::Process_Config )
EVT_MENU( ID_PCB_PAD_SETUP, WinEDA_PcbFrame::Process_Config )
EVT_MENU( ID_CONFIG_SAVE, WinEDA_PcbFrame::Process_Config )
EVT_MENU( ID_CONFIG_READ, WinEDA_PcbFrame::Process_Config )
EVT_MENU( ID_PCB_DISPLAY_OPTIONS_SETUP,
WinEDA_PcbFrame::InstallDisplayOptionsDialog )
EVT_MENU( ID_PCB_USER_GRID_SETUP,
WinEDA_PcbFrame::Process_Special_Functions )
EVT_MENU( ID_PCB_USER_GRID_SETUP, WinEDA_PcbFrame::Process_Special_Functions )
EVT_MENU_RANGE( ID_LANGUAGE_CHOICE, ID_LANGUAGE_CHOICE_END,
WinEDA_PcbFrame::SetLanguage )
......@@ -390,9 +386,6 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father,
WinEDA_PcbFrame::~WinEDA_PcbFrame()
{
extern PARAM_CFG_BASE* ParamCfgList[];
wxGetApp().SaveCurrentSetupValues( ParamCfgList );
delete m_drc;
}
......@@ -417,7 +410,7 @@ void WinEDA_PcbFrame::ReFillLayerWidget()
void WinEDA_PcbFrame::OnQuit( wxCommandEvent & WXUNUSED(event) )
{
Close(true);
Close( true );
}
void WinEDA_PcbFrame::OnCloseWindow( wxCloseEvent& Event )
......@@ -450,6 +443,13 @@ void WinEDA_PcbFrame::OnCloseWindow( wxCloseEvent& Event )
}
}
if( !GetScreen()->m_FileName.IsEmpty() )
{
wxFileName fn = GetScreen()->m_FileName;
fn.SetExt( ProjectFileExtension );
wxGetApp().WriteProjectConfig( fn.GetFullPath(), GROUP, GetProjectFileParameters() );
}
SaveSettings();
// do not show the window because ScreenPcb will be deleted and we do not
......@@ -499,6 +499,11 @@ void WinEDA_PcbFrame::LoadSettings()
if( config == NULL )
return;
/* The configuration setting that used to be mixed in with the project
* file settings.
*/
wxGetApp().ReadCurrentSetupValues( GetConfigurationSettings() );
WinEDA_BasePcbFrame::LoadSettings();
long tmp;
......@@ -519,6 +524,11 @@ void WinEDA_PcbFrame::SaveSettings()
if( config == NULL )
return;
/* The configuration setting that used to be mixed in with the project
* file settings.
*/
wxGetApp().SaveCurrentSetupValues( GetConfigurationSettings() );
WinEDA_BasePcbFrame::SaveSettings();
wxRealPoint GridSize = GetScreen()->GetGridSize();
......@@ -639,3 +649,32 @@ void WinEDA_PcbFrame::SetLanguage( wxCommandEvent& event )
if( m_ModuleEditFrame )
m_ModuleEditFrame->WinEDA_DrawFrame::SetLanguage( event );
}
wxString WinEDA_PcbFrame::GetLastNetListRead()
{
wxFileName absoluteFileName = m_lastNetListRead;
wxFileName pcbFileName = GetScreen()->m_FileName;
if( !absoluteFileName.MakeAbsolute( pcbFileName.GetPath() )
|| !absoluteFileName.FileExists() )
{
absoluteFileName.Clear();
m_lastNetListRead = wxEmptyString;
}
return absoluteFileName.GetFullPath();
}
void WinEDA_PcbFrame::SetLastNetListRead( const wxString& aLastNetListRead )
{
wxFileName relativeFileName = aLastNetListRead;
wxFileName pcbFileName = GetScreen()->m_FileName;
if( relativeFileName.MakeRelativeTo( pcbFileName.GetPath() )
&& relativeFileName.GetFullPath() != aLastNetListRead )
{
m_lastNetListRead = relativeFileName.GetFullPath();
}
}
......@@ -63,8 +63,7 @@ wxPoint g_Offset_Module; /* Offset de trace du modul en depl
wxString g_Current_PadName; // Last used pad name (pad num)
// Wildcard for footprint libraries filesnames
const wxString g_FootprintLibFileWildcard( wxT(
"Kicad footprint library file (*.mod)|*.mod" ) );
const wxString g_FootprintLibFileWildcard( wxT( "Kicad footprint library file (*.mod)|*.mod" ) );
/* Name of the document footprint list
* usually located in share/modules/footprints_doc
......@@ -126,10 +125,8 @@ bool WinEDA_App::OnInit()
if( fn.GetExt() != BoardFileExtension )
{
wxLogDebug( wxT(
"PcbNew file <%s> has the wrong extension.\
Changing extension to .brd." ),
GetChars( fn.GetFullPath() ) );
wxLogDebug( wxT( "PcbNew file <%s> has the wrong extension. \
Changing extension to .brd." ), GetChars( fn.GetFullPath() ) );
fn.SetExt( BoardFileExtension );
}
......@@ -137,7 +134,6 @@ Changing extension to .brd."
wxSetWorkingDirectory( fn.GetPath() );
}
wxGetApp().ReadCurrentSetupValues( ParamCfgList );
g_DrawBgColor = BLACK;
Read_Hotkey_Config( frame, false ); /* Must be called before creating the
* main frame in order to display the
......@@ -145,7 +141,7 @@ Changing extension to .brd."
frame = new WinEDA_PcbFrame( NULL, wxT( "PcbNew" ),
wxPoint( 0, 0 ), wxSize( 600, 400 ) );
wxPoint( 0, 0 ), wxSize( 600, 400 ) );
frame->SetTitle( GetTitle() + wxT( " " ) + GetBuildVersion() );
ActiveScreen = ScreenPcb;
......@@ -157,7 +153,7 @@ Changing extension to .brd."
SetupServerFunction( RemoteCommand );
}
frame->Read_Config( fn.GetFullPath() );
frame->LoadProjectSettings( fn.GetFullPath() );
frame->Zoom_Automatique( true );
......
......@@ -42,8 +42,10 @@ void WinEDA_PcbFrame::Process_Config( wxCommandEvent& event )
if( m_OptionsToolBar )
{ //This command is same as the Options Vertical Toolbar
// tool Show/hide layers manager
bool state = m_OptionsToolBar->GetToolState(ID_TB_OPTIONS_SHOW_MANAGE_LAYERS_VERTICAL_TOOLBAR);
m_OptionsToolBar->ToggleTool(ID_TB_OPTIONS_SHOW_MANAGE_LAYERS_VERTICAL_TOOLBAR, !state);
bool state =
m_OptionsToolBar->GetToolState( ID_TB_OPTIONS_SHOW_MANAGE_LAYERS_VERTICAL_TOOLBAR );
m_OptionsToolBar->ToggleTool( ID_TB_OPTIONS_SHOW_MANAGE_LAYERS_VERTICAL_TOOLBAR,
!state );
wxCommandEvent event( wxEVT_COMMAND_TOOL_CLICKED,
ID_TB_OPTIONS_SHOW_MANAGE_LAYERS_VERTICAL_TOOLBAR );
wxPostEvent( this, event );
......@@ -72,16 +74,12 @@ void WinEDA_PcbFrame::Process_Config( wxCommandEvent& event )
}
break;
case ID_PCB_DRAWINGS_WIDTHS_SETUP:
InstallPcbOptionsFrame( id );
break;
case ID_PCB_PAD_SETUP:
InstallPadOptionsFrame( NULL );
break;
case ID_CONFIG_SAVE:
Update_config( this );
SaveProjectSettings();
break;
case ID_CONFIG_READ:
......@@ -104,15 +102,14 @@ void WinEDA_PcbFrame::Process_Config( wxCommandEvent& event )
break;
}
Read_Config( dlg.GetPath() );
LoadProjectSettings( dlg.GetPath() );
break;
}
case ID_PREFERENCES_HOTKEY_CREATE_CONFIG:
fn.SetPath( ReturnHotkeyConfigFilePath( g_ConfigFileLocationChoice ) );
fn.SetName( HOTKEY_FILENAME );
fn.SetExt( DEFAULT_HOTKEY_FILENAME_EXT );
WriteHotkeyConfigFile( fn.GetFullPath(), s_Pcbnew_Editor_Hokeys_Descr,
true );
WriteHotkeyConfigFile( fn.GetFullPath(), s_Pcbnew_Editor_Hokeys_Descr, true );
break;
case ID_PREFERENCES_HOTKEY_READ_CONFIG:
......@@ -141,8 +138,7 @@ void WinEDA_PcbFrame::Process_Config( wxCommandEvent& event )
break;
default:
DisplayError( this,
wxT( "WinEDA_PcbFrame::Process_Config internal error" ) );
DisplayError( this, wxT( "WinEDA_PcbFrame::Process_Config internal error" ) );
}
}
......@@ -152,28 +148,26 @@ void WinEDA_PcbFrame::Process_Config( wxCommandEvent& event )
*/
bool Read_Hotkey_Config( WinEDA_DrawFrame* frame, bool verbose )
{
wxString FullFileName = ReturnHotkeyConfigFilePath(
g_ConfigFileLocationChoice );
wxString FullFileName = ReturnHotkeyConfigFilePath( g_ConfigFileLocationChoice );
FullFileName += HOTKEY_FILENAME;
FullFileName += wxT(".");
FullFileName += wxT( "." );
FullFileName += DEFAULT_HOTKEY_FILENAME_EXT;
return frame->ReadHotkeyConfigFile( FullFileName,
s_Pcbnew_Editor_Hokeys_Descr,
verbose );
return frame->ReadHotkeyConfigFile( FullFileName, s_Pcbnew_Editor_Hokeys_Descr, verbose );
}
/** Function Read_Config
* Read the project configuration file
* @param projectFileName = the config filename
* if not found use kicad.pro
* if not found : initialize default values
* @return true if the current config is modified, false if no change
/**
* Read the project configuration file settings.
*
* @param aProjectFileName = The project file name to load. If aProjectFileName
* is not found load the default project file kicad.pro
* and initialize setting to their default value.
* @return Always returns true.
*/
bool WinEDA_PcbFrame::Read_Config( const wxString& projectFileName )
bool WinEDA_PcbFrame::LoadProjectSettings( const wxString& aProjectFileName )
{
wxFileName fn = projectFileName;
wxFileName fn = aProjectFileName;
if( fn.GetExt() != ProjectFileExtension )
fn.SetExt( ProjectFileExtension );
......@@ -183,8 +177,7 @@ bool WinEDA_PcbFrame::Read_Config( const wxString& projectFileName )
/* Initialize default values. */
g_LibName_List.Clear();
wxGetApp().ReadProjectConfig( fn.GetFullPath(),
GROUP, ParamCfgList, FALSE );
wxGetApp().ReadProjectConfig( fn.GetFullPath(), GROUP, GetProjectFileParameters(), FALSE );
/* User library path takes precedent over default library search paths. */
wxGetApp().InsertLibraryPath( g_UserLibDirBuffer, 1 );
......@@ -194,29 +187,254 @@ bool WinEDA_PcbFrame::Read_Config( const wxString& projectFileName )
* if board items are not visible after loading a board...
* Grid and ratsnest can be left to their previous state
*/
bool showGrid = IsElementVisible(GRID_VISIBLE);
bool showRats = IsElementVisible(RATSNEST_VISIBLE);
SetVisibleAlls( );
SetElementVisibility(GRID_VISIBLE, showGrid);
SetElementVisibility(RATSNEST_VISIBLE, showRats);
bool showGrid = IsElementVisible( GRID_VISIBLE );
bool showRats = IsElementVisible( RATSNEST_VISIBLE );
SetVisibleAlls();
SetElementVisibility( GRID_VISIBLE, showGrid );
SetElementVisibility( RATSNEST_VISIBLE, showRats );
return TRUE;
}
void WinEDA_PcbFrame::Update_config( wxWindow* displayframe )
void WinEDA_PcbFrame::SaveProjectSettings()
{
wxFileName fn;
fn = GetScreen()->m_FileName;
fn.SetExt( ProjectFileExtension );
wxFileDialog dlg( this, _( "Save Project File" ), fn.GetPath(),
fn.GetFullName(), ProjectFileWildcard,
wxFD_SAVE | wxFD_CHANGE_DIR );
wxFileDialog dlg( this, _( "Save Project File" ), fn.GetPath(), fn.GetFullName(),
ProjectFileWildcard, wxFD_SAVE | wxFD_CHANGE_DIR );
if( dlg.ShowModal() == wxID_CANCEL )
return;
wxGetApp().WriteProjectConfig( fn.GetFullPath(), wxT( "/pcbnew" ),
ParamCfgList );
wxGetApp().WriteProjectConfig( dlg.GetPath(), GROUP, GetProjectFileParameters() );
}
/**
* Return project file parameter list for PCBNew.
*
* Populate the project file parameter array specific to PCBNew if it hasn't
* already been populated and return a reference to the array to the caller.
* Creating the parameter list at run time has the advantage of being able
* to define local variables. The old method of statically building the array
* at compile time requiring global variable definitions by design.
*/
PARAM_CFG_ARRAY& WinEDA_PcbFrame::GetProjectFileParameters()
{
if( !m_projectFileParams.empty() )
return m_projectFileParams;
m_projectFileParams.push_back( new PARAM_CFG_WXSTRING( wxT( "LibDir" ),&g_UserLibDirBuffer,
GROUPLIB ) );
m_projectFileParams.push_back( new PARAM_CFG_LIBNAME_LIST( wxT( "LibName" ), &g_LibName_List,
GROUPLIB ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "PadDrlX" ), &g_Pad_Master.m_Drill.x,
320, 0, 0x7FFF ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "PadDimH" ), &g_Pad_Master.m_Size.x,
550, 0, 0x7FFF ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "PadDimV" ), &g_Pad_Master.m_Size.y,
550, 0, 0x7FFF ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "BoardThickness" ),
&boardDesignSettings.m_BoardThickness,
630, 0, 0xFFFF ) );
m_projectFileParams.push_back( new PARAM_CFG_BOOL( wxT( "SgPcb45" ), &Segments_45_Only,
TRUE ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "TxtPcbV" ),
&boardDesignSettings.m_PcbTextSize.y,
600, TEXTS_MIN_SIZE, TEXTS_MAX_SIZE ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "TxtPcbH" ),
&boardDesignSettings.m_PcbTextSize.x,
600, TEXTS_MIN_SIZE, TEXTS_MAX_SIZE ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "TxtModV" ), &ModuleTextSize.y,
500, TEXTS_MIN_SIZE, TEXTS_MAX_SIZE ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "TxtModH" ), &ModuleTextSize.x,
500, TEXTS_MIN_SIZE, TEXTS_MAX_SIZE ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "TxtModW" ), &ModuleTextWidth,
100, 1, TEXTS_MAX_WIDTH ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "VEgarde" ),
&boardDesignSettings.m_SolderMaskMargin,
100, 0, 10000 ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "DrawLar" ),
&boardDesignSettings.m_DrawSegmentWidth,
120, 0, 0xFFFF ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "EdgeLar" ),
&boardDesignSettings.m_EdgeSegmentWidth,
120, 0, 0xFFFF ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "TxtLar" ),
&boardDesignSettings.m_PcbTextWidth,
120, 0, 0xFFFF ) );
m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "MSegLar" ), &ModuleSegmentWidth,
120, 0, 0xFFFF ) );
m_projectFileParams.push_back( new PARAM_CFG_WXSTRING( wxT( "LastNetListRead" ),
&m_lastNetListRead ) );
return m_projectFileParams;
}
/*
* Return the PCBNew applications settings list.
*
* This replaces the old statically define list that had the project
* file settings and the application settings mixed together. This
* was confusing and caused some settings to get saved and loaded
* incorrectly. Currently, only the settings that are needed at start
* up by the main window are defined here. There are other locally used
* settings are scattered throughout the PCBNew source code. If you need
* to define a configuration setting that need to be loaded at run time,
* this is the place to define it.
*
* @todo: Define the configuration variables as member variables instead of
* global variables or move them to the object class where they are
* used.
*/
PARAM_CFG_ARRAY& WinEDA_PcbFrame::GetConfigurationSettings()
{
if( !m_configSettings.empty() )
return m_configSettings;
m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "ViaSHole" ),
&DisplayOpt.m_DisplayViaMode,
VIA_SPECIAL_HOLE_SHOW, VIA_HOLE_NOT_SHOW,
OPT_VIA_HOLE_END - 1 ) );
m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "ShowNetNamesMode" ),
&DisplayOpt.DisplayNetNamesMode, 3, 0, 3 ) );
m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "Unite" ), &g_UnitMetric, FALSE ) );
m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "SegFill" ),
&DisplayOpt.DisplayPcbTrackFill, TRUE ) );
m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "TrackDisplayClearance" ),
&DisplayOpt.ShowTrackClearanceMode,
SHOW_CLEARANCE_NEW_TRACKS_AND_VIA_AREAS ) );
m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "PadFill" ),
&DisplayOpt.DisplayPadFill, TRUE ) );
m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "ViaFill" ),
&DisplayOpt.DisplayViaFill, TRUE ) );
m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "PadAffG" ),
&DisplayOpt.DisplayPadIsol, TRUE ) );
m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "PadSNum" ),
&DisplayOpt.DisplayPadNum, TRUE ) );
m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "ModAffC" ),
&DisplayOpt.DisplayModEdge, FILLED, 0, 2 ) );
m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "ModAffT" ),
&DisplayOpt.DisplayModText, FILLED, 0, 2 ) );
m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "PcbAffT" ),
&DisplayOpt.DisplayDrawItems, FILLED, 0, 2 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLay0" ), LOC_COLOR( 0 ),
GREEN ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLay1" ), LOC_COLOR( 1 ),
BLUE ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLay2" ), LOC_COLOR( 2 ),
LIGHTGRAY ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLay3" ), LOC_COLOR( 3 ),
5 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLay4" ), LOC_COLOR( 4 ),
4 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLay5" ), LOC_COLOR( 5 ),
5 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLay6" ), LOC_COLOR( 6 ),
6 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLay7" ), LOC_COLOR( 7 ),
5 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLay8" ), LOC_COLOR( 8 ),
7 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLay9" ), LOC_COLOR( 9 ),
1 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayA" ), LOC_COLOR( 10 ),
2 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayB" ), LOC_COLOR( 11 ),
3 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayC" ), LOC_COLOR( 12 ),
12 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayD" ), LOC_COLOR( 13 ),
13 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayE" ), LOC_COLOR( 14 ),
14 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayF" ), LOC_COLOR( 15 ),
RED ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayG" ), LOC_COLOR( 16 ),
1 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayH" ), LOC_COLOR( 17 ),
5 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayI" ), LOC_COLOR( 18 ),
11 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayJ" ), LOC_COLOR( 19 ),
4 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayK" ), LOC_COLOR( 20 ),
5 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayL" ), LOC_COLOR( 21 ),
3 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayM" ), LOC_COLOR( 22 ),
6 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayN" ), LOC_COLOR( 23 ),
5 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayO" ), LOC_COLOR( 24 ),
LIGHTGRAY ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayP" ), LOC_COLOR( 25 ),
1 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayQ" ), LOC_COLOR( 26 ),
2 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayR" ), LOC_COLOR( 27 ),
14 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayS" ), LOC_COLOR( 28 ),
YELLOW ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayT" ), LOC_COLOR( 29 ),
13 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayU" ), LOC_COLOR( 30 ),
14 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColLayV" ), LOC_COLOR( 31 ),
7 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "CTxtMoC" ),
ITEM_COLOR( MOD_TEXT_FR_VISIBLE ),
LIGHTGRAY ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "CTxtMoS" ),
ITEM_COLOR( MOD_TEXT_BK_VISIBLE ),
BLUE ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "CTxtVis" ),
ITEM_COLOR( MOD_TEXT_INVISIBLE ),
DARKGRAY ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "CAncreM" ),
ITEM_COLOR( ANCHOR_VISIBLE ), BLUE ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "CoPadCu" ),
ITEM_COLOR( PAD_BK_VISIBLE ), GREEN ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "CoPadCm" ),
ITEM_COLOR( PAD_FR_VISIBLE ), RED ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "CoViaTh" ),
ITEM_COLOR( VIA_THROUGH_VISIBLE ),
LIGHTGRAY ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "CoViaBu" ),
ITEM_COLOR( VIA_BBLIND_VISIBLE ),
BROWN ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "CoViaMi" ),
ITEM_COLOR( VIA_MICROVIA_VISIBLE ),
CYAN ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "CoRatsN" ),
ITEM_COLOR( RATSNEST_VISIBLE ),
WHITE ) );
m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "HPGLnum" ),
&g_pcb_plot_options.HPGL_Pen_Num,
1, 1, 16 ) );
m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "HPGdiam" ),
&g_pcb_plot_options.HPGL_Pen_Diam,
15, 0, 100 ) );
m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "HPGLSpd" ),
&g_pcb_plot_options.HPGL_Pen_Speed,
20, 0, 1000 ) );
m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "HPGLrec" ),
&g_pcb_plot_options.HPGL_Pen_Recouvrement,
2, 0, 0x100 ) );
m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "TimeOut" ), &g_TimeOut,
600, 0, 60000 ) );
m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "DPolair" ),
&DisplayOpt.DisplayPolarCood, FALSE ) );
m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "MaxLnkS" ), &g_MaxLinksShowed,
3, 0, 15 ) );
m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "ShowMRa" ),
&g_Show_Module_Ratsnest, TRUE ) );
m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "TwoSegT" ),
&g_TwoSegmentTrackBuild, TRUE ) );
return m_configSettings;
}
/*****************************************************/
/** pcbcfg.h : configuration parameters for PCBNew **/
/*****************************************************/
/************************************************************/
/** pcbnew_config.h : configuration parameters for PCBNew **/
/************************************************************/
#include "param_config.h"
#include "colors_selection.h"
......@@ -9,800 +9,9 @@
#define GROUPLIB wxT( "/pcbnew/libraries" )
#define GROUPCOMMON wxT( "/common" )
// Flag for member .m_Setup
// .m_Setup = TRUE: write info in user config
// (i.e. for all project, in registry base or equivalent)
// .m_Setup = FALSE: write info in project config (i.e. only for this
// project, in .pro file)
#define INSETUP TRUE
/* Useful macro : */
#define LOC_COLOR(layer) &g_ColorsSettings.m_LayersColors[layer]
#define ITEM_COLOR(item_visible) &g_ColorsSettings.m_ItemsColors[item_visible]
/* Configuration parameters. */
extern BOARD_DESIGN_SETTINGS boardDesignSettings;
static PARAM_CFG_WXSTRING UserLibDirBufCfg
(
wxT( "LibDir" ),
&g_UserLibDirBuffer,
GROUPLIB
);
static PARAM_CFG_LIBNAME_LIST LibNameBufCfg
(
wxT( "LibName" ),
&g_LibName_List,
GROUPLIB
);
static PARAM_CFG_INT PadDrillCfg
(
wxT( "PadDrlX" ),
&g_Pad_Master.m_Drill.x,
320,
0, 0x7FFF
);
static PARAM_CFG_INT PadDimHCfg //Pad Diameter / H Size
(
wxT( "PadDimH" ),
&g_Pad_Master.m_Size.x,
550,
0, 0x7FFF
);
static PARAM_CFG_INT PadDimVCfg
(
wxT( "PadDimV" ),
&g_Pad_Master.m_Size.y,
550,
0, 0x7FFF
);
static PARAM_CFG_INT BoardThicknessCfg
(
wxT( "BoardThickness" ),
&boardDesignSettings.m_BoardThickness,
630,
0, 0xFFFF
);
static PARAM_CFG_INT ViaShowHoleCfg
(
INSETUP,
wxT( "ViaSHole" ),
&DisplayOpt.m_DisplayViaMode,
VIA_SPECIAL_HOLE_SHOW,
VIA_HOLE_NOT_SHOW,
OPT_VIA_HOLE_END - 1
);
static PARAM_CFG_INT ShowNetNamesModeCfg
(
INSETUP,
wxT( "ShowNetNamesMode" ),
&DisplayOpt.DisplayNetNamesMode,
3,
0,
3
);
static PARAM_CFG_INT RouteLayTopCfg // First current working layer
(
wxT( "RouteTo" ),
&Route_Layer_TOP,
15,
0, 15
);
static PARAM_CFG_INT RouteLayBotCfg // second current working layer
(
wxT( "RouteBo" ),
&Route_Layer_BOTTOM,
0,
0, 15
);
static PARAM_CFG_BOOL Segm45Cfg // 0, 90, and 45 degrees are the only
( // valid segment orientations.
wxT( "Segm45" ),
&Track_45_Only,
TRUE
);
static PARAM_CFG_BOOL Raccord45Cfg // Generate connections at 45 degrees
( // only.
wxT( "Racc45" ),
&g_Raccord_45_Auto,
TRUE
);
static PARAM_CFG_INT UnitCfg // Units: 0 inch, 1 mm
(
INSETUP,
wxT( "Unite" ),
&g_UnitMetric,
FALSE
);
static PARAM_CFG_BOOL SegmFillCfg
(
INSETUP,
wxT( "SegFill" ),
&DisplayOpt.DisplayPcbTrackFill,
TRUE
);
static PARAM_CFG_INT TrackDisplayClearanceCfg
(
INSETUP,
wxT( "TrackDisplayClearance" ),
&DisplayOpt.ShowTrackClearanceMode,
SHOW_CLEARANCE_NEW_TRACKS_AND_VIA_AREAS
);
static PARAM_CFG_BOOL PadFillCfg
(
INSETUP,
wxT( "PadFill" ),
&DisplayOpt.DisplayPadFill,
TRUE
);
static PARAM_CFG_BOOL ViaFillCfg
(
INSETUP,
wxT( "ViaFill" ),
&DisplayOpt.DisplayViaFill,
TRUE
);
static PARAM_CFG_BOOL PadAfficheGardeCfg
(
INSETUP,
wxT( "PadAffG" ),
&DisplayOpt.DisplayPadIsol,
TRUE
);
static PARAM_CFG_BOOL PadShowNumCfg
(
INSETUP,
wxT( "PadSNum" ),
&DisplayOpt.DisplayPadNum,
TRUE
);
static PARAM_CFG_INT AfficheContourModuleCfg // Module Edges: fill/line/sketch
(
INSETUP,
wxT( "ModAffC" ),
&DisplayOpt.DisplayModEdge,
FILLED,
0, 2
);
static PARAM_CFG_INT AfficheTexteModuleCfg // Module Texts: fill/line/sketch
(
INSETUP,
wxT( "ModAffT" ),
&DisplayOpt.DisplayModText,
FILLED,
0, 2
);
static PARAM_CFG_INT AffichePcbTextCfg // PCB Texts: fill/line/sketch
(
INSETUP,
wxT( "PcbAffT" ),
&DisplayOpt.DisplayDrawItems,
FILLED,
0, 2
);
static PARAM_CFG_BOOL SegmPcb45Cfg // Force 45 degrees for segments
(
wxT( "SgPcb45" ),
&Segments_45_Only,
TRUE
);
static PARAM_CFG_INT PcbTextDimVCfg
(
wxT( "TxtPcbV" ),
&boardDesignSettings.m_PcbTextSize.y,
600,
TEXTS_MIN_SIZE, TEXTS_MAX_SIZE
);
static PARAM_CFG_INT PcbTextDimHCfg
(
wxT( "TxtPcbH" ),
&boardDesignSettings.m_PcbTextSize.x,
600,
TEXTS_MIN_SIZE, TEXTS_MAX_SIZE
);
static PARAM_CFG_SETCOLOR ColorLayer0Cfg // CU Layer Color
(
INSETUP,
wxT( "ColLay0" ),
LOC_COLOR(0),
GREEN
);
static PARAM_CFG_SETCOLOR ColorLayer1Cfg
(
INSETUP,
wxT( "ColLay1" ),
LOC_COLOR(1),
BLUE
);
static PARAM_CFG_SETCOLOR ColorLayer2Cfg
(
INSETUP,
wxT( "ColLay2" ),
LOC_COLOR(2),
LIGHTGRAY
);
static PARAM_CFG_SETCOLOR ColorLayer3Cfg
(
INSETUP,
wxT( "ColLay3" ),
LOC_COLOR(3),
5
);
static PARAM_CFG_SETCOLOR ColorLayer4Cfg
(
INSETUP,
wxT( "ColLay4" ),
LOC_COLOR(4),
4
);
static PARAM_CFG_SETCOLOR ColorLayer5Cfg
(
INSETUP,
wxT( "ColLay5" ),
LOC_COLOR(5),
5
);
static PARAM_CFG_SETCOLOR ColorLayer6Cfg
(
INSETUP,
wxT( "ColLay6" ),
LOC_COLOR(6),
6
);
static PARAM_CFG_SETCOLOR ColorLayer7Cfg
(
INSETUP,
wxT( "ColLay7" ),
LOC_COLOR(7),
5
);
static PARAM_CFG_SETCOLOR ColorLayer8Cfg
(
INSETUP,
wxT( "ColLay8" ),
LOC_COLOR(8),
7
);
static PARAM_CFG_SETCOLOR ColorLayer9Cfg
(
INSETUP,
wxT( "ColLay9" ),
LOC_COLOR(9),
1
);
static PARAM_CFG_SETCOLOR ColorLayer10Cfg
(
INSETUP,
wxT( "ColLayA" ),
LOC_COLOR(10),
2
);
static PARAM_CFG_SETCOLOR ColorLayer11Cfg
(
INSETUP,
wxT( "ColLayB" ),
LOC_COLOR(11),
3
);
static PARAM_CFG_SETCOLOR ColorLayer12Cfg
(
INSETUP,
wxT( "ColLayC" ),
LOC_COLOR(12),
12
);
static PARAM_CFG_SETCOLOR ColorLayer13Cfg
(
INSETUP,
wxT( "ColLayD" ),
LOC_COLOR(13),
13
);
static PARAM_CFG_SETCOLOR ColorLayer14Cfg
(
INSETUP,
wxT( "ColLayE" ),
LOC_COLOR(14),
14
);
static PARAM_CFG_SETCOLOR ColorLayer15Cfg // CMP Layer Color
(
INSETUP,
wxT( "ColLayF" ),
LOC_COLOR(15),
RED
);
static PARAM_CFG_SETCOLOR ColorLayer16Cfg // Adhesive CU Layer Color
(
INSETUP,
wxT( "ColLayG" ),
LOC_COLOR(16),
1
);
static PARAM_CFG_SETCOLOR ColorLayer17Cfg // Adhesive CMP Layer Color
(
INSETUP,
wxT( "ColLayH" ),
LOC_COLOR(17),
5
);
static PARAM_CFG_SETCOLOR ColorLayer18Cfg // Solder Mask CU Layer Color
(
INSETUP,
wxT( "ColLayI" ),
LOC_COLOR(18),
11
);
static PARAM_CFG_SETCOLOR ColorLayer19Cfg // Solder Mask CMP Layer Color
(
INSETUP,
wxT( "ColLayJ" ),
LOC_COLOR(19),
4
);
static PARAM_CFG_SETCOLOR ColorLayer20Cfg // Silk Screen CU Layer Color
(
INSETUP,
wxT( "ColLayK" ),
LOC_COLOR(20),
5
);
static PARAM_CFG_SETCOLOR ColorLayer21Cfg // Silk Screen CMP Layer Color
(
INSETUP,
wxT( "ColLayL" ),
LOC_COLOR(21),
3
);
static PARAM_CFG_SETCOLOR ColorLayer22Cfg // Mask CU Layer Color
(
INSETUP,
wxT( "ColLayM" ),
LOC_COLOR(22),
6
);
static PARAM_CFG_SETCOLOR ColorLayer23Cfg // Mask CMP Layer Color
(
INSETUP,
wxT( "ColLayN" ),
LOC_COLOR(23),
5
);
static PARAM_CFG_SETCOLOR ColorLayer24Cfg // DRAW Layer Color
(
INSETUP,
wxT( "ColLayO" ),
LOC_COLOR(24),
LIGHTGRAY
);
static PARAM_CFG_SETCOLOR ColorLayer25Cfg // Comment Layer Color
(
INSETUP,
wxT( "ColLayP" ),
LOC_COLOR(25),
1
);
static PARAM_CFG_SETCOLOR ColorLayer26Cfg // ECO1 Layer Color
(
INSETUP,
wxT( "ColLayQ" ),
LOC_COLOR(26),
2
);
static PARAM_CFG_SETCOLOR ColorLayer27Cfg //ECO2 Layer Color
(
INSETUP,
wxT( "ColLayR" ),
LOC_COLOR(27),
14
);
static PARAM_CFG_SETCOLOR ColorLayer28Cfg // EDGES Layer Color
(
INSETUP,
wxT( "ColLayS" ),
LOC_COLOR(28),
YELLOW
);
static PARAM_CFG_SETCOLOR ColorLayer29Cfg
(
INSETUP,
wxT( "ColLayT" ),
LOC_COLOR(29),
13
);
static PARAM_CFG_SETCOLOR ColorLayer30Cfg
(
INSETUP,
wxT( "ColLayU" ),
LOC_COLOR(30),
14
);
static PARAM_CFG_SETCOLOR ColorLayer31Cfg
(
INSETUP,
wxT( "ColLayV" ),
LOC_COLOR(31),
7
);
static PARAM_CFG_SETCOLOR ColorTxtModCmpCfg
(
INSETUP,
wxT( "CTxtMoC" ),
ITEM_COLOR(MOD_TEXT_FR_VISIBLE),
LIGHTGRAY
);
static PARAM_CFG_SETCOLOR ColorTxtModCuCfg
(
INSETUP,
wxT( "CTxtMoS" ),
ITEM_COLOR(MOD_TEXT_BK_VISIBLE),
BLUE
);
static PARAM_CFG_SETCOLOR VisibleTxtModCfg
(
INSETUP,
wxT( "CTxtVis" ),
ITEM_COLOR(MOD_TEXT_INVISIBLE),
DARKGRAY
);
static PARAM_CFG_INT TexteModDimVCfg
(
wxT( "TxtModV" ),
&ModuleTextSize.y,
500,
TEXTS_MIN_SIZE, TEXTS_MAX_SIZE
);
static PARAM_CFG_INT TexteModDimHCfg
(
wxT( "TxtModH" ),
&ModuleTextSize.x,
500,
TEXTS_MIN_SIZE, TEXTS_MAX_SIZE
);
static PARAM_CFG_INT TexteModWidthCfg
(
wxT( "TxtModW" ),
&ModuleTextWidth,
100,
1, TEXTS_MAX_WIDTH
);
static PARAM_CFG_SETCOLOR ColorAncreModCfg
(
INSETUP,
wxT( "CAncreM" ),
ITEM_COLOR(ANCHOR_VISIBLE),
BLUE
);
static PARAM_CFG_SETCOLOR ColorPadCuCfg
(
INSETUP,
wxT( "CoPadCu" ),
ITEM_COLOR(PAD_BK_VISIBLE),
GREEN
);
static PARAM_CFG_SETCOLOR ColorPadCmpCfg
(
INSETUP,
wxT( "CoPadCm" ),
ITEM_COLOR(PAD_FR_VISIBLE),
RED
);
static PARAM_CFG_SETCOLOR ColorViaThroughCfg
(
INSETUP,
wxT( "CoViaTh" ),
ITEM_COLOR(VIA_THROUGH_VISIBLE),
LIGHTGRAY
);
static PARAM_CFG_SETCOLOR ColorViaBlindBuriedCfg
(
INSETUP,
wxT( "CoViaBu" ),
ITEM_COLOR(VIA_BBLIND_VISIBLE),
BROWN
);
static PARAM_CFG_SETCOLOR ColorViaMicroViaCfg // Buried Via Color
(
INSETUP,
wxT( "CoViaMi" ),
ITEM_COLOR(VIA_MICROVIA_VISIBLE),
CYAN
);
static PARAM_CFG_SETCOLOR ColorCheveluCfg
(
INSETUP,
wxT( "CoRatsN" ),
ITEM_COLOR(RATSNEST_VISIBLE),
WHITE
);
static PARAM_CFG_INT HPGLpenNumCfg
(
INSETUP,
wxT( "HPGLnum" ),
&g_pcb_plot_options.HPGL_Pen_Num,
1,
1, 16
);
static PARAM_CFG_INT HPGLdiamCfg // HPGL pen size (mils)
(
INSETUP,
wxT( "HPGdiam" ),
&g_pcb_plot_options.HPGL_Pen_Diam,
15,
0, 100
);
static PARAM_CFG_INT HPGLspeedCfg //HPGL pen speed (cm/s)
(
INSETUP,
wxT( "HPGLSpd" ),
&g_pcb_plot_options.HPGL_Pen_Speed,
20,
0, 1000
);
static PARAM_CFG_INT HPGLrecouvrementCfg
(
INSETUP,
wxT( "HPGLrec" ),
&g_pcb_plot_options.HPGL_Pen_Recouvrement,
2,
0, 0x100
);
static PARAM_CFG_INT VernisEpargneGardeCfg
(
wxT( "VEgarde" ),
&boardDesignSettings.m_SolderMaskMargin,
100,
0, 10000
);
static PARAM_CFG_INT DrawSegmLargeurCfg
(
wxT( "DrawLar" ),
&boardDesignSettings.m_DrawSegmentWidth,
120,
0, 0xFFFF
);
static PARAM_CFG_INT EdgeSegmLargeurCfg
(
wxT( "EdgeLar" ),
&boardDesignSettings.m_EdgeSegmentWidth,
120,
0, 0xFFFF
);
static PARAM_CFG_INT TexteSegmLargeurCfg
(
wxT( "TxtLar" ),
&boardDesignSettings.m_PcbTextWidth,
120,
0, 0xFFFF
);
static PARAM_CFG_INT ModuleSegmWidthCfg
(
wxT( "MSegLar" ),
&ModuleSegmentWidth,
120,
0, 0xFFFF
);
static PARAM_CFG_INT WTraitSerigraphiePlotCfg
(
wxT( "WpenSer" ),
&g_pcb_plot_options.PlotLine_Width,
10,
1, 10000
);
static PARAM_CFG_INT TimeOutCfg // Automatic backup duration time in
( // seconds.
INSETUP,
wxT( "TimeOut" ),
&g_TimeOut,
600,
0, 60000
);
static PARAM_CFG_BOOL DisplPolairCfg
(
INSETUP,
wxT( "DPolair" ),
&DisplayOpt.DisplayPolarCood,
FALSE
);
static PARAM_CFG_INT PrmMaxLinksShowed
(
INSETUP,
wxT( "MaxLnkS" ),
&g_MaxLinksShowed,
3,
0, 15
);
static PARAM_CFG_BOOL ShowModuleRatsnestCfg
(
INSETUP,
wxT( "ShowMRa" ),
&g_Show_Module_Ratsnest,
TRUE
);
static PARAM_CFG_BOOL TwoSegmentTrackBuildCfg
(
INSETUP,
wxT( "TwoSegT" ),
&g_TwoSegmentTrackBuild,
TRUE
);
/* parameters in this list will be saved on request (when saving config).
*/
PARAM_CFG_BASE* ParamCfgList[] =
{
&UserLibDirBufCfg,
&LibNameBufCfg,
&PadDrillCfg,
&PadDimHCfg,
&PadDimVCfg,
&ViaShowHoleCfg,
&ShowNetNamesModeCfg,
&BoardThicknessCfg,
&RouteLayTopCfg,
&RouteLayBotCfg,
&Segm45Cfg,
&Raccord45Cfg,
&UnitCfg,
&SegmFillCfg,
&TrackDisplayClearanceCfg,
&PadFillCfg,
&ViaFillCfg,
&PadAfficheGardeCfg,
&PadShowNumCfg,
&AfficheContourModuleCfg,
&AfficheTexteModuleCfg,
&AffichePcbTextCfg,
&SegmPcb45Cfg,
&PcbTextDimVCfg,
&PcbTextDimHCfg,
&ColorLayer0Cfg,
&ColorLayer1Cfg,
&ColorLayer2Cfg,
&ColorLayer3Cfg,
&ColorLayer4Cfg,
&ColorLayer5Cfg,
&ColorLayer6Cfg,
&ColorLayer7Cfg,
&ColorLayer8Cfg,
&ColorLayer9Cfg,
&ColorLayer10Cfg,
&ColorLayer11Cfg,
&ColorLayer12Cfg,
&ColorLayer13Cfg,
&ColorLayer14Cfg,
&ColorLayer15Cfg,
&ColorLayer16Cfg,
&ColorLayer17Cfg,
&ColorLayer18Cfg,
&ColorLayer19Cfg,
&ColorLayer20Cfg,
&ColorLayer21Cfg,
&ColorLayer22Cfg,
&ColorLayer23Cfg,
&ColorLayer24Cfg,
&ColorLayer25Cfg,
&ColorLayer26Cfg,
&ColorLayer27Cfg,
&ColorLayer28Cfg,
&ColorLayer29Cfg,
&ColorLayer30Cfg,
&ColorLayer31Cfg,
&ColorTxtModCmpCfg,
&ColorTxtModCuCfg,
&VisibleTxtModCfg,
&TexteModDimVCfg,
&TexteModDimHCfg,
&TexteModWidthCfg,
&ColorAncreModCfg,
&ColorPadCuCfg,
&ColorPadCmpCfg,
&ColorViaThroughCfg,
&ColorViaBlindBuriedCfg,
&ColorViaMicroViaCfg,
&ColorCheveluCfg,
&HPGLpenNumCfg,
&HPGLdiamCfg,
&HPGLspeedCfg,
&HPGLrecouvrementCfg,
&VernisEpargneGardeCfg,
&DrawSegmLargeurCfg,
&EdgeSegmLargeurCfg,
&TexteSegmLargeurCfg,
&ModuleSegmWidthCfg,
&WTraitSerigraphiePlotCfg,
&TimeOutCfg,
&DisplPolairCfg,
&PrmMaxLinksShowed,
&ShowModuleRatsnestCfg,
&TwoSegmentTrackBuildCfg,
NULL
};
......@@ -38,7 +38,7 @@ void WinEDA_PcbFrame::ToolOnRightClick( wxCommandEvent& event )
case ID_PCB_ADD_LINE_BUTT:
case ID_PCB_DIMENSION_BUTT:
case ID_PCB_ADD_TEXT_BUTT:
InstallPcbOptionsFrame( ID_PCB_DRAWINGS_WIDTHS_SETUP );
OnConfigurePcbOptions( event );
break;
default:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment