kicad/pcbnew/pcbnew_config.cpp

230 lines
6.5 KiB
C++

/****************************************/
/** pcbnew_config.cpp : configuration **/
/****************************************/
#include "fctsys.h"
#include "appl_wxstruct.h"
#include "common.h"
#include "class_drawpanel.h"
#include "confirm.h"
#include "gestfich.h"
#include "pcbnew.h"
#include "wxPcbStruct.h"
#include "class_board_design_settings.h"
#include "pcbplot.h"
#include "pcbnew_config.h"
#include "worksheet.h"
#include "pcbnew_id.h"
#include "hotkeys.h"
#include "protos.h"
#include "dialog_mask_clearance.h"
#include "dialog_general_options.h"
#define HOTKEY_FILENAME wxT( "pcbnew" )
void WinEDA_PcbFrame::Process_Config( wxCommandEvent& event )
{
int id = event.GetId();
wxPoint pos;
wxClientDC dc( DrawPanel );
wxFileName fn;
DrawPanel->PrepareGraphicContext( &dc );
pos = GetPosition();
pos.x += 20;
pos.y += 20;
switch( id )
{
case ID_COLORS_SETUP:
DisplayColorSetupFrame( this, pos );
break;
case ID_PCB_LAYERS_SETUP:
DisplayDialogLayerSetup( this );
break;
case ID_CONFIG_REQ:
InstallConfigFrame( pos );
break;
case ID_PCB_MASK_CLEARANCE:
{
DIALOG_PADS_MASK_CLEARANCE dlg( this );
dlg.ShowModal();
}
break;
case ID_OPTIONS_SETUP:
{
Dialog_GeneralOptions dlg( this, &dc );
dlg.ShowModal();
}
break;
case ID_PCB_DRAWINGS_WIDTHS_SETUP:
InstallPcbOptionsFrame( pos, &dc, id );
break;
case ID_PCB_PAD_SETUP:
InstallPadOptionsFrame( NULL, NULL, pos );
break;
case ID_CONFIG_SAVE:
Update_config( this );
break;
case ID_CONFIG_READ:
{
fn = GetScreen()->m_FileName;
fn.SetExt( ProjectFileExtension );
wxFileDialog dlg( this, _( "Read Project File" ), fn.GetPath(),
fn.GetFullName(), ProjectFileWildcard,
wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_CHANGE_DIR );
if( dlg.ShowModal() == wxID_CANCEL )
break;
if( !wxFileExists( dlg.GetPath() ) )
{
wxString msg;
msg.Printf( _( "File %s not found" ), GetChars( dlg.GetPath() ) );
DisplayError( this, msg );
break;
}
Read_Config( 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 );
break;
case ID_PREFERENCES_HOTKEY_READ_CONFIG:
Read_Hotkey_Config( this, true );
break;
case ID_PREFERENCES_HOTKEY_EDIT_CONFIG:
{
fn.SetPath( ReturnHotkeyConfigFilePath( g_ConfigFileLocationChoice ) );
fn.SetName( HOTKEY_FILENAME );
fn.SetExt( DEFAULT_HOTKEY_FILENAME_EXT );
wxString editorname = wxGetApp().GetEditorName();
if( !editorname.IsEmpty() )
ExecuteFile( this, editorname, QuoteFullPath( fn ) );
break;
}
case ID_PREFERENCES_HOTKEY_PATH_IS_HOME:
case ID_PREFERENCES_HOTKEY_PATH_IS_KICAD:
HandleHotkeyConfigMenuSelection( this, id );
break;
case ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST:
DisplayHotkeyList( this, s_Board_Editor_Hokeys_Descr );
break;
default:
DisplayError( this,
wxT( "WinEDA_PcbFrame::Process_Config internal error" ) );
}
}
/*
* Read the hotkey files config for pcbnew and module_edit
*/
bool Read_Hotkey_Config( WinEDA_DrawFrame* frame, bool verbose )
{
wxString FullFileName = ReturnHotkeyConfigFilePath(
g_ConfigFileLocationChoice );
FullFileName += HOTKEY_FILENAME;
FullFileName += wxT(".");
FullFileName += DEFAULT_HOTKEY_FILENAME_EXT;
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
*/
bool WinEDA_PcbFrame::Read_Config( const wxString& projectFileName )
{
wxFileName fn = projectFileName;
if( fn.GetExt() != ProjectFileExtension )
fn.SetExt( ProjectFileExtension );
wxGetApp().RemoveLibraryPath( g_UserLibDirBuffer );
/* Initialize default values. */
g_LibName_List.Clear();
wxGetApp().ReadProjectConfig( fn.GetFullPath(),
GROUP, ParamCfgList, FALSE );
/* User library path takes precedent over default library search paths. */
wxGetApp().InsertLibraryPath( g_UserLibDirBuffer, 1 );
/* Reset the items visibility flag when loading a new config
* Because it could creates SERIOUS mistakes for the user,
* if some items are not visible after loading a board...
*/
g_DesignSettings.SetVisibleLayers( FULL_LAYERS );
DisplayOpt.Show_Modules_Cmp = true;
DisplayOpt.Show_Modules_Cu = true;
g_DesignSettings.SetElementVisibility( MODULE_TEXT_NOV_VISIBLE, true );
g_DesignSettings.SetElementVisibility( MODULE_TEXT_CMP_VISIBLE, true );
g_DesignSettings.SetElementVisibility( MODULE_TEXT_CU_VISIBLE, true );
g_DesignSettings.SetElementVisibility( PAD_CMP_VISIBLE, true );
g_DesignSettings.SetElementVisibility( PAD_CU_VISIBLE, true );
g_DesignSettings.SetElementVisibility( VIA_THROUGH_VISIBLE, true );
g_DesignSettings.SetElementVisibility( VIA_BLIND_BURIED_VISIBLE, true );
g_DesignSettings.SetElementVisibility( VIA_MICROVIA_VISIBLE, true );
// Items that can remain not visible: comment them if you want.
g_DesignSettings.SetElementVisibility( ANCHOR_VISIBLE, true );
DisplayOpt.DisplayPadNoConn = true;
return TRUE;
}
void WinEDA_PcbFrame::Update_config( wxWindow* displayframe )
{
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 );
if( dlg.ShowModal() == wxID_CANCEL )
return;
wxGetApp().WriteProjectConfig( fn.GetFullPath(), wxT( "/pcbnew" ),
ParamCfgList );
}