Commit 10e13ae5 authored by dickelbeck's avatar dickelbeck

layer names in *.brd file

parent 7c482f68
...@@ -5,16 +5,27 @@ Started 2007-June-11 ...@@ -5,16 +5,27 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with
email address. email address.
2008-Mar-3 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+pcbnew
Completed transision to BOARD::GetLayerName() and away from ReturnPcbLayerName().
LayerNames and LAYER_T are saved int the *.brd file and may be edited
there with a text editor until the UI is in place to edit them in PCBNEW.
To understand the strategy, see BOARD::GetLayerName() in class_board.cpp
and see WinEDA_BasePcbFrame::ReadSetup(). I will be adding "Board" menu
item to Preferences, but there is more to come before the UI gets done:
net classes.
2008-mars-03 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr> 2008-mars-03 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================ ================================================================================
3d display: 3d display:
Added Jonas Diemer's patch (enhanced movings from mouse and tools) Added Jonas Diemer's patch (enhanced movings from mouse and tools)
2008-Mar-1 UPDATE Dick Hollenbeck <dick@softplc.com> 2008-Mar-1 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================ ================================================================================
+pcbnew +pcbnew
Changed ioascii.cpp to save and load board specific layer names, for DEBUG Changed ioascii.cpp to save and load board specific layer names, for DEBUG
build only. I want to add class LAYER, see below. Added build only. I want to add class LAYER, see below. Added
BOARD::SetLayerName(), BOARD::SetLayerType(), and BOARD::GetLayerType(). BOARD::SetLayerName(), BOARD::SetLayerType(), and BOARD::GetLayerType().
......
...@@ -265,8 +265,6 @@ void MyFree( void* pt_mem ) ...@@ -265,8 +265,6 @@ void MyFree( void* pt_mem )
} }
/**************************************************************/ /**************************************************************/
wxString ReturnPcbLayerName( int layer_number, bool omitSpacePadding ) wxString ReturnPcbLayerName( int layer_number, bool omitSpacePadding )
/**************************************************************/ /**************************************************************/
...@@ -276,32 +274,11 @@ wxString ReturnPcbLayerName( int layer_number, bool omitSpacePadding ) ...@@ -276,32 +274,11 @@ wxString ReturnPcbLayerName( int layer_number, bool omitSpacePadding )
* (not internatinalized, no space) * (not internatinalized, no space)
*/ */
{ {
#if 1 && defined(DEBUG)
// Dick: this code is working fine, but we have no place to store the layer names yet.
const unsigned LAYER_LIMIT = 29; const unsigned LAYER_LIMIT = 29;
// @todo: these layer names should be configurable on a per project basis. // These are only default layer names. For PCBNEW, the copper names
// In anticipation of that enhancement, here is a different strategy for // may be over-ridden in the BOARD file *.brd.
// deriving the file names from the "configured" layer names.
// The main idea is to use a single array of names, and then remove
// spaces on the fly from the names when writing to disk.
#if 1 // my specific layer names
static const wxString layer_name_list[] = {
_( "H2 Bottom" ), _( "Power" ), _( "V2 Signal" ), _( "H1 Signal" ),
_( "Ground" ), _( "Inner L5" ), _( "Inner L6" ), _( "Inner L7" ),
_( "Inner L8" ), _( "Inner L9" ), _( "Inner L10" ), _( "Inner L11" ),
_( "Inner L12" ), _( "Inner L13" ), _( "Inner L14" ), _( "Component" ),
_( "Adhes Cop" ), _( "Adhes Cmp" ), _( "SoldP Cop" ), _( "SoldP Cmp" ),
_( "SilkS Cop" ), _( "SilkS Cmp" ), _( "Mask Cop" ), _( "Mask Cmp" ),
_( "Drawings " ), _( "Comments" ), _( "Eco1" ), _( "Eco2" ),
_( "Edges Pcb" ), _( "BAD INDEX" ),
};
#else
static const wxString layer_name_list[] = { static const wxString layer_name_list[] = {
_( "Copper " ), _( "Inner L1 " ), _( "Inner L2 " ), _( "Inner L3 " ), _( "Copper " ), _( "Inner L1 " ), _( "Inner L2 " ), _( "Inner L3 " ),
_( "Inner L4 " ), _( "Inner L5 " ), _( "Inner L6 " ), _( "Inner L7 " ), _( "Inner L4 " ), _( "Inner L5 " ), _( "Inner L6 " ), _( "Inner L7 " ),
...@@ -313,8 +290,6 @@ wxString ReturnPcbLayerName( int layer_number, bool omitSpacePadding ) ...@@ -313,8 +290,6 @@ wxString ReturnPcbLayerName( int layer_number, bool omitSpacePadding )
_( "Edges Pcb" ), _( "BAD INDEX" ), _( "Edges Pcb" ), _( "BAD INDEX" ),
}; };
#endif
if( (unsigned) layer_number > LAYER_LIMIT ) if( (unsigned) layer_number > LAYER_LIMIT )
layer_number = LAYER_LIMIT; layer_number = LAYER_LIMIT;
...@@ -332,42 +307,6 @@ wxString ReturnPcbLayerName( int layer_number, bool omitSpacePadding ) ...@@ -332,42 +307,6 @@ wxString ReturnPcbLayerName( int layer_number, bool omitSpacePadding )
} }
else else
return *p; return *p;
#else // long standing established code:
static const wxString layer_name_list[] = {
_( "Copper " ), _( "Inner L1 " ), _( "Inner L2 " ), _( "Inner L3 " ),
_( "Inner L4 " ), _( "Inner L5 " ), _( "Inner L6 " ), _( "Inner L7 " ),
_( "Inner L8 " ), _( "Inner L9 " ), _( "Inner L10" ), _( "Inner L11" ),
_( "Inner L12" ), _( "Inner L13" ), _( "Inner L14" ), _( "Component" ),
_( "Adhes Cop" ), _( "Adhes Cmp" ), _( "SoldP Cop" ), _( "SoldP Cmp" ),
_( "SilkS Cop" ), _( "SilkS Cmp" ), _( "Mask Cop " ), _( "Mask Cmp " ),
_( "Drawings " ), _( "Comments " ), _( "Eco1 " ), _( "Eco2 " ),
_( "Edges Pcb" ), _( "--- " ), _( "--- " ), _( "--- " )
};
// Same as layer_name_list, without space, not internationalized
static const wxString layer_name_list_for_filename[] = {
wxT( "Copper" ), wxT( "InnerL1" ), wxT( "InnerL2" ), wxT( "InnerL3" ),
wxT( "InnerL4" ), wxT( "InnerL5" ), wxT( "InnerL6" ), wxT( "InnerL7" ),
wxT( "InnerL8" ), wxT( "InnerL9" ), wxT( "InnerL10" ), wxT( "InnerL11" ),
wxT( "InnerL12" ), wxT( "InnerL13" ), wxT( "InnerL14" ), wxT( "Component" ),
wxT( "AdhesCop" ), wxT( "AdhesCmp" ), wxT( "SoldPCop" ), wxT( "SoldPCmp" ),
wxT( "SilkSCop" ), wxT( "SilkSCmp" ), wxT( "MaskCop" ), wxT( "MaskCmp" ),
wxT( "Drawings" ), wxT( "Comments" ), wxT( "Eco1" ), wxT( "Eco2" ),
wxT( "EdgesPcb" ), wxT( "---" ), wxT( "---" ), wxT( "---" )
};
if( (unsigned) layer_number >= 31u )
layer_number = 31;
return omitSpacePadding ?
layer_name_list_for_filename[layer_number] :
layer_name_list[layer_number];
#endif
} }
......
...@@ -125,8 +125,8 @@ void WinEDA_App::WriteProjectConfig( const wxString& local_config_filename, ...@@ -125,8 +125,8 @@ void WinEDA_App::WriteProjectConfig( const wxString& local_config_filename,
switch( pt_cfg->m_Type ) switch( pt_cfg->m_Type )
{ {
case PARAM_INT: case PARAM_INT:
#undef PTCFG #undef PTCFG
#define PTCFG ( (PARAM_CFG_INT*) pt_cfg ) #define PTCFG ( (PARAM_CFG_INT*) pt_cfg )
if( PTCFG->m_Pt_param == NULL ) if( PTCFG->m_Pt_param == NULL )
break; break;
...@@ -319,7 +319,8 @@ bool WinEDA_App::ReadProjectConfig( const wxString& local_config_filename, ...@@ -319,7 +319,8 @@ bool WinEDA_App::ReadProjectConfig( const wxString& local_config_filename,
{ {
#undef PTCFG #undef PTCFG
#define PTCFG ( (PARAM_CFG_DOUBLE*) pt_cfg ) #define PTCFG ( (PARAM_CFG_DOUBLE*) pt_cfg )
double ftmp = 0; wxString msg; double ftmp = 0;
wxString msg;
if( pt_cfg->m_Setup ) if( pt_cfg->m_Setup )
msg = m_EDA_Config->Read( pt_cfg->m_Ident, wxT( "" ) ); msg = m_EDA_Config->Read( pt_cfg->m_Ident, wxT( "" ) );
else else
......
/***************************************/ /***************************************/
/** cfg.cpp : configuration de CVPCB **/ /** cfg.cpp : configuration de CVPCB **/
/***************************************/ /***************************************/
/* lit ou met a jour la configuration de CVPCB */ /* lit ou met a jour la configuration de CVPCB */
...@@ -18,68 +18,76 @@ ...@@ -18,68 +18,76 @@
/**************************************************/ /**************************************************/
void Read_Config( const wxString & FileName ) void Read_Config( const wxString& FileName )
/**************************************************/ /**************************************************/
/* lit la configuration
1 - lit cvpcb.cnf
2 - si non trouve lit <chemin de cvpcb.exe>/cvpcb.cnf
3 - si non trouve: init des variables aux valeurs par defaut
Remarque: /* lit la configuration
le chemin de l'executable cvpcb.exe doit etre dans BinDir * 1 - lit cvpcb.cnf
*/ * 2 - si non trouve lit <chemin de cvpcb.exe>/cvpcb.cnf
* 3 - si non trouve: init des variables aux valeurs par defaut
*
* Remarque:
* le chemin de l'executable cvpcb.exe doit etre dans BinDir
*/
{ {
wxString FullFileName = FileName ; wxString FullFileName = FileName;
/* Init des valeurs par defaut */
g_LibName_List.Clear();
g_ListName_Equ.Clear();
/* Init des valeurs par defaut */ g_EDA_Appl->ReadProjectConfig( FullFileName,
g_LibName_List.Clear(); GROUP, ParamCfgList, FALSE );
g_ListName_Equ.Clear();
g_EDA_Appl->ReadProjectConfig(FullFileName, if( PkgInExtBuffer.IsEmpty() )
GROUP, ParamCfgList, FALSE); PkgInExtBuffer = wxT( ".pkg" );
if ( PkgInExtBuffer.IsEmpty() ) PkgInExtBuffer = wxT(".pkg"); if( NetInExtBuffer.IsEmpty() )
if ( NetInExtBuffer.IsEmpty() ) NetInExtBuffer = wxT(".net"), NetInExtBuffer = wxT( ".net" );
/* Inits autres variables */ /* Inits autres variables */
SetRealLibraryPath( wxT("modules")); SetRealLibraryPath( wxT( "modules" ) );
} }
/************************************************************/ /************************************************************/
void WinEDA_CvpcbFrame::Update_Config(wxCommandEvent& event) void WinEDA_CvpcbFrame::Update_Config( wxCommandEvent& event )
/************************************************************/ /************************************************************/
/* fonction relai d'appel a Save_Config, /* fonction relai d'appel a Save_Config,
la vraie fonction de sauvegarde de la config * la vraie fonction de sauvegarde de la config
*/ */
{ {
Save_Config(this); Save_Config( this );
} }
/************************************/ /************************************/
void Save_Config(wxWindow * parent) void Save_Config( wxWindow* parent )
/************************************/ /************************************/
/* enregistrement de la config */ /* enregistrement de la config */
{ {
wxString path, FullFileName; wxString path, FullFileName;
wxString mask( wxT("*"));
FullFileName = FFileName;
ChangeFileNameExt( FullFileName, g_Prj_Config_Filename_ext );
path = wxGetCwd();
FullFileName = EDA_FileSelector(_("Save preferences"),
path, /* Chemin par defaut */
FullFileName, /* nom fichier par defaut */
g_Prj_Config_Filename_ext, /* extension par defaut */
mask, /* Masque d'affichage */
parent,
wxFD_SAVE,
TRUE
);
if ( FullFileName.IsEmpty()) return;
/* ecriture de la configuration */
g_EDA_Appl->WriteProjectConfig(FullFileName, GROUP, ParamCfgList);
}
wxString mask( wxT( "*" ) );
FullFileName = FFileName;
ChangeFileNameExt( FullFileName, g_Prj_Config_Filename_ext );
path = wxGetCwd();
FullFileName = EDA_FileSelector( _( "Save preferences" ),
path, /* Chemin par defaut */
FullFileName, /* nom fichier par defaut */
g_Prj_Config_Filename_ext, /* extension par defaut */
mask, /* Masque d'affichage */
parent,
wxFD_SAVE,
TRUE
);
if( FullFileName.IsEmpty() )
return;
/* ecriture de la configuration */
g_EDA_Appl->WriteProjectConfig( FullFileName, GROUP, ParamCfgList );
}
...@@ -51,7 +51,7 @@ WinEDA_DisplayFrame::WinEDA_DisplayFrame( wxWindow* father, WinEDA_App* parent, ...@@ -51,7 +51,7 @@ WinEDA_DisplayFrame::WinEDA_DisplayFrame( wxWindow* father, WinEDA_App* parent,
#endif #endif
SetTitle( title ); SetTitle( title );
m_Pcb = new BOARD( NULL, this ); m_Pcb = new BOARD( NULL, this );
m_CurrentScreen = new PCB_SCREEN( CVPCB_DISPLAY_FRAME ); m_CurrentScreen = new PCB_SCREEN( CVPCB_DISPLAY_FRAME );
......
...@@ -55,8 +55,6 @@ bool WinEDA_App::OnInit() ...@@ -55,8 +55,6 @@ bool WinEDA_App::OnInit()
SetTopWindow( m_GerberFrame ); SetTopWindow( m_GerberFrame );
m_GerberFrame->Show( TRUE ); m_GerberFrame->Show( TRUE );
m_GerberFrame->m_Pcb = new BOARD( NULL, m_GerberFrame );
m_GerberFrame->Zoom_Automatique( TRUE ); m_GerberFrame->Zoom_Automatique( TRUE );
if( argc > 1 ) if( argc > 1 )
......
...@@ -16,11 +16,14 @@ ...@@ -16,11 +16,14 @@
#include "protos.h" #include "protos.h"
#define HOTKEY_FILENAME wxT( "gerbview" )
/* Routines Locales */ /* Routines Locales */
/* Variables locales */
#define HOTKEY_FILENAME wxT( "gerbview" ) /* Variables locales */
/*************************************************************/ /*************************************************************/
...@@ -32,7 +35,8 @@ void WinEDA_GerberFrame::Process_Config( wxCommandEvent& event ) ...@@ -32,7 +35,8 @@ void WinEDA_GerberFrame::Process_Config( wxCommandEvent& event )
wxString FullFileName; wxString FullFileName;
pos = GetPosition(); pos = GetPosition();
pos.x += 20; pos.y += 20; pos.x += 20;
pos.y += 20;
switch( id ) switch( id )
{ {
...@@ -69,7 +73,7 @@ void WinEDA_GerberFrame::Process_Config( wxCommandEvent& event ) ...@@ -69,7 +73,7 @@ void WinEDA_GerberFrame::Process_Config( wxCommandEvent& event )
case ID_PREFERENCES_HOTKEY_PATH_IS_HOME: case ID_PREFERENCES_HOTKEY_PATH_IS_HOME:
case ID_PREFERENCES_HOTKEY_PATH_IS_KICAD: case ID_PREFERENCES_HOTKEY_PATH_IS_KICAD:
HandleHotkeyConfigMenuSelection( this, id ); HandleHotkeyConfigMenuSelection( this, id );
break; break;
default: default:
......
...@@ -13,10 +13,11 @@ ...@@ -13,10 +13,11 @@
#include "wx/statline.h" #include "wx/statline.h"
/* Variables locales */ /* Variables locales */
#define LAYER_UNSELECTED NB_LAYERS #define LAYER_UNSELECTED NB_LAYERS
static int ButtonTable[32]; // Indexes buttons to Gerber layers
static int LayerLookUpTable[32]; // Indexes Gerber layers to PCB file layers static int ButtonTable[32]; // Indexes buttons to Gerber layers
wxStaticText* layer_list[32]; // Indexes text strings to buttons static int LayerLookUpTable[32]; // Indexes Gerber layers to PCB file layers
wxStaticText* layer_list[32]; // Indexes text strings to buttons
enum swap_layer_id { enum swap_layer_id {
ID_WINEDA_SWAPLAYERFRAME = 1800, ID_WINEDA_SWAPLAYERFRAME = 1800,
...@@ -75,12 +76,13 @@ int * InstallDialogLayerPairChoice(WinEDA_GerberFrame * parent) ...@@ -75,12 +76,13 @@ int * InstallDialogLayerPairChoice(WinEDA_GerberFrame * parent)
*/ */
{ {
WinEDA_SwapLayerFrame * frame = new WinEDA_SwapLayerFrame(parent); WinEDA_SwapLayerFrame * frame = new WinEDA_SwapLayerFrame(parent);
int ii = frame->ShowModal();
frame->Destroy(); int ii = frame->ShowModal();
if( ii >= 0 ) frame->Destroy();
return LayerLookUpTable; if( ii >= 0 )
else return LayerLookUpTable;
return NULL; else
return NULL;
} }
...@@ -138,7 +140,6 @@ WinEDA_SwapLayerFrame::WinEDA_SwapLayerFrame(WinEDA_GerberFrame *parent) : ...@@ -138,7 +140,6 @@ WinEDA_SwapLayerFrame::WinEDA_SwapLayerFrame(WinEDA_GerberFrame *parent) :
int pcb_layer_number = 0; int pcb_layer_number = 0;
for( nb_items = 0, ii = 0; ii < 32; ii++ ) for( nb_items = 0, ii = 0; ii < 32; ii++ )
{ {
if( g_GERBER_Descr_List[ii] == NULL ) if( g_GERBER_Descr_List[ii] == NULL )
continue; continue;
...@@ -353,8 +354,8 @@ void WinEDA_SwapLayerFrame::OnCancelClick(wxCommandEvent& event) ...@@ -353,8 +354,8 @@ void WinEDA_SwapLayerFrame::OnCancelClick(wxCommandEvent& event)
void WinEDA_SwapLayerFrame::OnOkClick(wxCommandEvent& event) void WinEDA_SwapLayerFrame::OnOkClick(wxCommandEvent& event)
/*********************************************************/ /*********************************************************/
{ {
int ii; int ii;
bool AsCmpLayer = false; bool AsCmpLayer = false;
/* Compute the number of copper layers /* Compute the number of copper layers
* this is the max layer number + 1 (if some internal layers exist) * this is the max layer number + 1 (if some internal layers exist)
......
...@@ -148,38 +148,6 @@ struct CHEVELU; ...@@ -148,38 +148,6 @@ struct CHEVELU;
/* Class to handle a board */ /* Class to handle a board */
#include "class_board.h" #include "class_board.h"
/**
* Class LAYER
* holds information pertinent to a layer of a BOARD.
*/
class LAYER
{
wxString m_Name;
LAYER_T m_Type;
int m_Color;
bool m_Visible; // ? use flags in m_Color instead ?
public:
bool SetName( const wxString& aLayerName );
const wxString& GetName();
bool SetType( LAYER_T aLayerType );
LAYER_T GetType();
int GetColor() { return m_Color; }
void SetColor( int aColor ) { m_Color = aColor; }
bool IsVisible();
void SetVisible( bool isVisible );
};
// Class for handle current printed board design settings // Class for handle current printed board design settings
#define HISTORY_NUMBER 8 #define HISTORY_NUMBER 8
class EDA_BoardDesignSettings class EDA_BoardDesignSettings
...@@ -207,7 +175,9 @@ public: ...@@ -207,7 +175,9 @@ public:
// Color options for screen display of the Printed Board: // Color options for screen display of the Printed Board:
int m_PcbGridColor; // Grid color int m_PcbGridColor; // Grid color
int m_LayerColor[32]; // Layer colors (tracks and graphic items) int m_LayerColor[32]; // Layer colors (tracks and graphic items)
int m_ViaColor[4]; // Via color (depending on is type) int m_ViaColor[4]; // Via color (depending on is type)
int m_ModuleTextCMPColor; // Text module color for modules on the COMPONENT layer int m_ModuleTextCMPColor; // Text module color for modules on the COMPONENT layer
int m_ModuleTextCUColor; // Text module color for modules on the COPPER layer int m_ModuleTextCUColor; // Text module color for modules on the COPPER layer
......
...@@ -74,6 +74,14 @@ public: ...@@ -74,6 +74,14 @@ public:
~WinEDA_BasePcbFrame(); ~WinEDA_BasePcbFrame();
/**
* Function SetBOARD
* sets the m_Pcb member in such as way as to ensure deleting any previous
* BOARD.
* @param aBoard The BOARD to put into the frame.
*/
void SetBOARD( BOARD* aBoard );
// General // General
virtual void OnCloseWindow( wxCloseEvent& Event ) = 0; virtual void OnCloseWindow( wxCloseEvent& Event ) = 0;
virtual void Process_Special_Functions( wxCommandEvent& event ) = 0; virtual void Process_Special_Functions( wxCommandEvent& event ) = 0;
...@@ -378,7 +386,7 @@ public: ...@@ -378,7 +386,7 @@ public:
bool RecreateCmpFileFromBoard(); bool RecreateCmpFileFromBoard();
void ExportToGenCAD( wxCommandEvent& event ); void ExportToGenCAD( wxCommandEvent& event );
/** /**
* Function ExporttoSPECCTRA * Function ExporttoSPECCTRA
* will export the current BOARD to a specctra dsn file. See * will export the current BOARD to a specctra dsn file. See
...@@ -389,7 +397,7 @@ public: ...@@ -389,7 +397,7 @@ public:
/** /**
* Function ImportSpecctraSession * Function ImportSpecctraSession
* will import a specctra *.ses file and use it to relocate MODULEs and * will import a specctra *.ses file and use it to relocate MODULEs and
* to replace all vias and tracks in an existing and loaded BOARD. * to replace all vias and tracks in an existing and loaded BOARD.
* See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the * See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the
* specification. * specification.
...@@ -398,13 +406,13 @@ public: ...@@ -398,13 +406,13 @@ public:
/** /**
* Function ImportSpecctraDesign * Function ImportSpecctraDesign
* will import a specctra *.dsn file and use it to replace an entire BOARD. * will import a specctra *.dsn file and use it to replace an entire BOARD.
* The new board will not have any graphics, only components, tracks and vias. * The new board will not have any graphics, only components, tracks and vias.
* See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the * See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the
* specification. * specification.
*/ */
void ImportSpecctraDesign( wxCommandEvent& event ); void ImportSpecctraDesign( wxCommandEvent& event );
/* Fonctions specifiques */ /* Fonctions specifiques */
MODULE* ListAndSelectModuleName(); MODULE* ListAndSelectModuleName();
void Liste_Equipot( wxCommandEvent& event ); void Liste_Equipot( wxCommandEvent& event );
...@@ -499,12 +507,12 @@ public: ...@@ -499,12 +507,12 @@ public:
/** Function Delete_LastCreatedCorner /** Function Delete_LastCreatedCorner
* Used only while creating a new zone outline * Used only while creating a new zone outline
* Remove and delete the current outline segment in progress * Remove and delete the current outline segment in progress
* @return 0 if no corner in list, or corner number * @return 0 if no corner in list, or corner number
*/ */
int Delete_LastCreatedCorner( wxDC* DC); int Delete_LastCreatedCorner( wxDC* DC);
/** /**
* Function Begin_Zone * Function Begin_Zone
...@@ -517,7 +525,7 @@ public: ...@@ -517,7 +525,7 @@ public:
* Function End_Zone * Function End_Zone
* terminates (if no DRC error ) the zone edge creation process * terminates (if no DRC error ) the zone edge creation process
* @param DC = current Device Context * @param DC = current Device Context
* @return true if Ok, false if DRC error * @return true if Ok, false if DRC error
*/ */
bool End_Zone( wxDC* DC ); bool End_Zone( wxDC* DC );
...@@ -586,11 +594,11 @@ public: ...@@ -586,11 +594,11 @@ public:
ZONE_CONTAINER* zone_container, ZONE_CONTAINER* zone_container,
int corner_id ); int corner_id );
/** /**
* Function End_Move_Zone_Corner_Or_Outlines * Function End_Move_Zone_Corner_Or_Outlines
* Terminates a move corner in a zone outline, or a move zone outlines * Terminates a move corner in a zone outline, or a move zone outlines
* @param DC = current Device Context (can be NULL) * @param DC = current Device Context (can be NULL)
* @param zone_container: the given zone * @param zone_container: the given zone
*/ */
void End_Move_Zone_Corner_Or_Outlines( wxDC* DC, ZONE_CONTAINER* zone_container ); void End_Move_Zone_Corner_Or_Outlines( wxDC* DC, ZONE_CONTAINER* zone_container );
...@@ -612,13 +620,13 @@ public: ...@@ -612,13 +620,13 @@ public:
*/ */
void Delete_Zone_Contour( wxDC* DC, ZONE_CONTAINER* zone_container ); void Delete_Zone_Contour( wxDC* DC, ZONE_CONTAINER* zone_container );
/** /**
* Function Start_Move_Zone_Outlines * Function Start_Move_Zone_Outlines
* Initialise parametres to move an existing zone outlines. * Initialise parametres to move an existing zone outlines.
* @param DC = current Device Context (can be NULL) * @param DC = current Device Context (can be NULL)
* @param zone_container: the given zone to move * @param zone_container: the given zone to move
*/ */
void Start_Move_Zone_Outlines( wxDC* DC, ZONE_CONTAINER* zone_container ); void Start_Move_Zone_Outlines( wxDC* DC, ZONE_CONTAINER* zone_container );
// Target handling // Target handling
MIREPCB* Create_Mire( wxDC* DC ); MIREPCB* Create_Mire( wxDC* DC );
...@@ -725,7 +733,7 @@ public: ...@@ -725,7 +733,7 @@ public:
int BestZoom(); // Retourne le meilleur zoom int BestZoom(); // Retourne le meilleur zoom
void OnSelectOptionToolbar( wxCommandEvent& event ); void OnSelectOptionToolbar( wxCommandEvent& event );
void OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct ); void OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct );
PCB_SCREEN* GetPCBScreen(){ return (PCB_SCREEN*)GetScreen(); } PCB_SCREEN* GetPCBScreen(){ return (PCB_SCREEN*)GetScreen(); }
EDA_BaseStruct* GerberGeneralLocateAndDisplay(); EDA_BaseStruct* GerberGeneralLocateAndDisplay();
EDA_BaseStruct* Locate( int typeloc ); EDA_BaseStruct* Locate( int typeloc );
......
...@@ -66,6 +66,13 @@ WinEDA_BasePcbFrame::~WinEDA_BasePcbFrame( void ) ...@@ -66,6 +66,13 @@ WinEDA_BasePcbFrame::~WinEDA_BasePcbFrame( void )
} }
void WinEDA_BasePcbFrame::SetBOARD( BOARD* aBoard )
{
delete m_Pcb;
m_Pcb = aBoard;
}
/**************************************/ /**************************************/
int WinEDA_BasePcbFrame::BestZoom( void ) int WinEDA_BasePcbFrame::BestZoom( void )
/**************************************/ /**************************************/
...@@ -102,7 +109,7 @@ void WinEDA_BasePcbFrame::CursorGoto( const wxPoint& aPos ) ...@@ -102,7 +109,7 @@ void WinEDA_BasePcbFrame::CursorGoto( const wxPoint& aPos )
{ {
// factored out of pcbnew/find.cpp // factored out of pcbnew/find.cpp
PCB_SCREEN* screen = (PCB_SCREEN*)GetScreen(); PCB_SCREEN* screen = (PCB_SCREEN*)GetScreen();
wxClientDC dc( DrawPanel ); wxClientDC dc( DrawPanel );
......
...@@ -38,6 +38,12 @@ BOARD::BOARD( EDA_BaseStruct* parent, WinEDA_BasePcbFrame* frame ) : ...@@ -38,6 +38,12 @@ BOARD::BOARD( EDA_BaseStruct* parent, WinEDA_BasePcbFrame* frame ) :
m_LocalRatsnest = NULL; // pointeur liste rats local m_LocalRatsnest = NULL; // pointeur liste rats local
m_CurrentZoneContour = NULL; // This ZONE_CONTAINER handle the zone contour cuurently in progress m_CurrentZoneContour = NULL; // This ZONE_CONTAINER handle the zone contour cuurently in progress
// de determination des contours de zone // de determination des contours de zone
for( int layer=0; layer<NB_COPPER_LAYERS; ++layer )
{
m_Layer[layer].m_Name = ReturnPcbLayerName( layer );
m_Layer[layer].m_Type = LT_SIGNAL;
}
} }
...@@ -80,28 +86,96 @@ BOARD::~BOARD() ...@@ -80,28 +86,96 @@ BOARD::~BOARD()
wxString BOARD::GetLayerName( int aLayerIndex ) const wxString BOARD::GetLayerName( int aLayerIndex ) const
{ {
// copper layer names are stored in the BOARD.
if( (unsigned) aLayerIndex < (unsigned) GetCopperLayerCount() )
{
// default names were set in BOARD::BOARD() but they may be
// over-ridden by BOARD::SetLayerName()
return m_Layer[aLayerIndex].m_Name;
}
return ReturnPcbLayerName( aLayerIndex, true ); return ReturnPcbLayerName( aLayerIndex, true );
} }
bool BOARD::SetLayerName( int aLayerIndex, const wxString& aLayerName ) bool BOARD::SetLayerName( int aLayerIndex, const wxString& aLayerName )
{ {
// a dummy temporarily. if( (unsigned) aLayerIndex < (unsigned) GetCopperLayerCount() )
D(printf("SetLayerName( %d, %s )\n", aLayerIndex, CONV_TO_UTF8(aLayerName) );) {
return true; if( aLayerName == wxEmptyString || aLayerName.Len() > 20 )
return false;
// no quote chars in the name allowed
if( aLayerName.Find( wxChar('"') ) != wxNOT_FOUND )
return false;
// ensure unique-ness of layer names
for( int layer=0; layer<GetCopperLayerCount(); ++layer )
{
if( layer!=aLayerIndex && aLayerName == m_Layer[layer].m_Name )
return false;
}
m_Layer[aLayerIndex].m_Name = aLayerName;
// replace any spaces with underscores
m_Layer[aLayerIndex].m_Name.Replace( wxT(" "), wxT("_") );
return true;
}
return false;
} }
LAYER_T BOARD::GetLayerType( int aLayerIndex ) const LAYER_T BOARD::GetLayerType( int aLayerIndex ) const
{ {
if( (unsigned) aLayerIndex < (unsigned) GetCopperLayerCount() )
return m_Layer[aLayerIndex].m_Type;
return LT_SIGNAL; return LT_SIGNAL;
} }
bool BOARD::SetLayerType( int aLayerIndex, LAYER_T aLayerType ) bool BOARD::SetLayerType( int aLayerIndex, LAYER_T aLayerType )
{ {
// a dummy temporarily. if( (unsigned) aLayerIndex < (unsigned) GetCopperLayerCount() )
return true; {
m_Layer[aLayerIndex].m_Type = aLayerType;
return true;
}
return false;
}
const char* LAYER::ShowType( LAYER_T aType )
{
const char* cp;
switch( aType )
{
default:
case LT_SIGNAL: cp = "signal"; break;
case LT_POWER: cp = "power"; break;
case LT_MIXED: cp = "mixed"; break;
case LT_JUMPER: cp = "jumper"; break;
}
return cp;
}
LAYER_T LAYER::ParseType( const char* aType )
{
if( strcmp( aType, "signal" ) == 0 )
return LT_SIGNAL;
else if( strcmp( aType, "power" ) == 0 )
return LT_POWER;
else if( strcmp( aType, "mixed" ) == 0 )
return LT_MIXED;
else if( strcmp( aType, "jumper" ) == 0 )
return LT_JUMPER;
else
return LAYER_T(-1);
} }
......
...@@ -18,14 +18,49 @@ enum LAYER_T ...@@ -18,14 +18,49 @@ enum LAYER_T
LT_SIGNAL, LT_SIGNAL,
LT_POWER, LT_POWER,
LT_MIXED, LT_MIXED,
LT_JUMPER,
}; };
/***********************************************/ /**
/* class BOARD : handle datas to build a board */ * Struct LAYER
/***********************************************/ * holds information pertinent to a layer of a BOARD.
*/
struct LAYER
{
/** The name of the layer, there should be no spaces in this name. */
wxString m_Name;
/** The type of the layer */
LAYER_T m_Type;
// int m_Color;
// bool m_Visible; // ? use flags in m_Color instead ?
/**
* Function ShowType
* converts a LAYER_T enum to a const char*
* @param aType The LAYER_T to convert
* @return const char* - The string representation of the layer type.
*/
static const char* ShowType( LAYER_T aType );
/**
* Function ParseType
* converts a string to a LAYER_T
* @param aType The const char* to convert
* @return LAYER_T - The binary representation of the layer type, or
* LAYER_T(-1) if the string is invalid
*/
static LAYER_T ParseType( const char* aType );
};
/**
* Class BOARD
* holds information pertinent to a PCBNEW printed circuit board.
*/
class BOARD : public BOARD_ITEM class BOARD : public BOARD_ITEM
{ {
friend class WinEDA_PcbFrame; friend class WinEDA_PcbFrame;
...@@ -37,6 +72,8 @@ private: ...@@ -37,6 +72,8 @@ private:
typedef std::vector<ZONE_CONTAINER*> ZONE_CONTAINERS; // @todo: switch to boost::ptr_vector, and change ~BOARD() typedef std::vector<ZONE_CONTAINER*> ZONE_CONTAINERS; // @todo: switch to boost::ptr_vector, and change ~BOARD()
ZONE_CONTAINERS m_ZoneDescriptorList; ///< edge zone descriptors, owned by pointer ZONE_CONTAINERS m_ZoneDescriptorList; ///< edge zone descriptors, owned by pointer
LAYER m_Layer[NB_COPPER_LAYERS];
public: public:
WinEDA_BasePcbFrame* m_PcbFrame; // Window de visualisation WinEDA_BasePcbFrame* m_PcbFrame; // Window de visualisation
EDA_Rect m_BoundaryBox; // Board size and position EDA_Rect m_BoundaryBox; // Board size and position
...@@ -294,6 +331,7 @@ public: ...@@ -294,6 +331,7 @@ public:
return wxT( "BOARD" ); return wxT( "BOARD" );
} }
#if defined(DEBUG) #if defined(DEBUG)
/** /**
* Function Show * Function Show
......
...@@ -150,6 +150,9 @@ void DRAWSEGMENT::Display_Infos( WinEDA_DrawFrame* frame ) ...@@ -150,6 +150,9 @@ void DRAWSEGMENT::Display_Infos( WinEDA_DrawFrame* frame )
int itype; int itype;
wxString msg; wxString msg;
BOARD* board = (BOARD*) m_Parent;
wxASSERT( board );
frame->MsgPanel->EraseMsgBox(); frame->MsgPanel->EraseMsgBox();
itype = m_Type & 0x0F; itype = m_Type & 0x0F;
...@@ -173,7 +176,7 @@ void DRAWSEGMENT::Display_Infos( WinEDA_DrawFrame* frame ) ...@@ -173,7 +176,7 @@ void DRAWSEGMENT::Display_Infos( WinEDA_DrawFrame* frame )
Affiche_1_Parametre( frame, -1, wxEmptyString, _( "Segment" ), RED ); Affiche_1_Parametre( frame, -1, wxEmptyString, _( "Segment" ), RED );
Affiche_1_Parametre( frame, 48, _( "Layer" ), Affiche_1_Parametre( frame, 48, _( "Layer" ),
ReturnPcbLayerName( m_Layer ), BROWN ); board->GetLayerName( m_Layer ), BROWN );
valeur_param( (unsigned) m_Width, msg ); valeur_param( (unsigned) m_Width, msg );
Affiche_1_Parametre( frame, 60, _( "Width" ), msg, DARKCYAN ); Affiche_1_Parametre( frame, 60, _( "Width" ), msg, DARKCYAN );
......
...@@ -1135,15 +1135,6 @@ bool MODULE::HitTest( const wxPoint& refPos ) ...@@ -1135,15 +1135,6 @@ bool MODULE::HitTest( const wxPoint& refPos )
if( m_BoundaryBox.Inside( spot_cX, spot_cY ) ) if( m_BoundaryBox.Inside( spot_cX, spot_cY ) )
return true; return true;
/* no
// The GENERAL_COLLECTOR needs these two tests in order to find a MODULE
// when the user clicks on its text. Keep these 2, needed in OnRightClick().
if( m_Reference->HitTest( refPos ) )
return true;
if( m_Value->HitTest( refPos ) )
return true;
*/
return false; return false;
} }
...@@ -1173,6 +1164,25 @@ bool MODULE::HitTest( EDA_Rect& refArea ) ...@@ -1173,6 +1164,25 @@ bool MODULE::HitTest( EDA_Rect& refArea )
} }
D_PAD* MODULE::FindPadByName( const wxString& aPadName ) const
{
wxString buf;
for( D_PAD* pad = m_Pads; pad; pad = pad->Next() )
{
pad->ReturnStringPadName( buf );
#if 1
if( buf.CmpNoCase( aPadName ) == 0 ) // why case insensitive?
#else
if( buf == aPadName )
#endif
return pad;
}
return NULL;
}
// see class_module.h // see class_module.h
SEARCH_RESULT MODULE::Visit( INSPECTOR* inspector, const void* testData, SEARCH_RESULT MODULE::Visit( INSPECTOR* inspector, const void* testData,
const KICAD_T scanTypes[] ) const KICAD_T scanTypes[] )
......
...@@ -65,7 +65,7 @@ public: ...@@ -65,7 +65,7 @@ public:
unsigned long m_Link; // variable temporaire ( pour editions, ...) unsigned long m_Link; // variable temporaire ( pour editions, ...)
long m_LastEdit_Time; // Date de la derniere modification du module (gestion de librairies) long m_LastEdit_Time; // Date de la derniere modification du module (gestion de librairies)
wxString m_Path; wxString m_Path;
wxString m_Doc; // Texte de description du module wxString m_Doc; // Texte de description du module
wxString m_KeyWord; // Liste des mots cles relatifs au module wxString m_KeyWord; // Liste des mots cles relatifs au module
...@@ -197,6 +197,17 @@ public: ...@@ -197,6 +197,17 @@ public:
return m_Value->m_Text; return m_Value->m_Text;
} }
/**
* Function FindPadByName
* returns a D_PAD* with a matching name. Note that names may not be
* unique, depending on how the foot print was created.
* @param
* @return D_PAD* - The first matching name is returned, or NULL if not found.
*/
D_PAD* FindPadByName( const wxString& aPadName ) const;
/** /**
* Function Visit * Function Visit
* should be re-implemented for each derived class in order to handle * should be re-implemented for each derived class in order to handle
......
...@@ -119,26 +119,26 @@ bool TEXTE_PCB::Save( FILE* aFile ) const ...@@ -119,26 +119,26 @@ bool TEXTE_PCB::Save( FILE* aFile ) const
if( m_Text.IsEmpty() ) if( m_Text.IsEmpty() )
return true; return true;
bool rc = false; bool rc = false;
if( fprintf( aFile, "$TEXTPCB\n" ) != sizeof("$TEXTPCB\n")-1 ) if( fprintf( aFile, "$TEXTPCB\n" ) != sizeof("$TEXTPCB\n")-1 )
goto out; goto out;
fprintf( aFile, "Te \"%s\"\n", CONV_TO_UTF8( m_Text ) ); fprintf( aFile, "Te \"%s\"\n", CONV_TO_UTF8( m_Text ) );
fprintf( aFile, "Po %d %d %d %d %d %d\n", fprintf( aFile, "Po %d %d %d %d %d %d\n",
m_Pos.x, m_Pos.y, m_Size.x, m_Size.y, m_Width, m_Orient ); m_Pos.x, m_Pos.y, m_Size.x, m_Size.y, m_Width, m_Orient );
fprintf( aFile, "De %d %d %lX %d\n", m_Layer, m_Miroir, m_TimeStamp, 0 ); fprintf( aFile, "De %d %d %lX %d\n", m_Layer, m_Miroir, m_TimeStamp, 0 );
if( fprintf( aFile, "$EndTEXTPCB\n" ) != sizeof("$EndTEXTPCB\n")-1 ) if( fprintf( aFile, "$EndTEXTPCB\n" ) != sizeof("$EndTEXTPCB\n")-1 )
goto out; goto out;
rc = true; rc = true;
out: out:
return rc; return rc;
} }
/**********************************************************************/ /**********************************************************************/
...@@ -167,15 +167,18 @@ void TEXTE_PCB::Display_Infos( WinEDA_DrawFrame* frame ) ...@@ -167,15 +167,18 @@ void TEXTE_PCB::Display_Infos( WinEDA_DrawFrame* frame )
{ {
wxString msg; wxString msg;
BOARD* board = (BOARD*) m_Parent;
wxASSERT( board );
frame->MsgPanel->EraseMsgBox(); frame->MsgPanel->EraseMsgBox();
if( m_Parent && m_Parent->Type() == TYPECOTATION ) if( m_Parent && m_Parent->Type() == TYPECOTATION )
Affiche_1_Parametre( frame, 1, _( "COTATION" ), m_Text, DARKGREEN ); Affiche_1_Parametre( frame, 1, _( "COTATION" ), m_Text, DARKGREEN );
else else
Affiche_1_Parametre( frame, 1, _( "PCB Text" ), m_Text, DARKGREEN ); Affiche_1_Parametre( frame, 1, _( "PCB Text" ), m_Text, DARKGREEN );
Affiche_1_Parametre( frame, 28, _( "Layer" ), Affiche_1_Parametre( frame, 28, _( "Layer" ),
ReturnPcbLayerName( m_Layer ), board->GetLayerName( m_Layer ),
g_DesignSettings.m_LayerColor[m_Layer] & MASKCOLOR ); g_DesignSettings.m_LayerColor[m_Layer] & MASKCOLOR );
Affiche_1_Parametre( frame, 36, _( "Mirror" ), wxEmptyString, GREEN ); Affiche_1_Parametre( frame, 36, _( "Mirror" ), wxEmptyString, GREEN );
...@@ -203,7 +206,7 @@ void TEXTE_PCB::Display_Infos( WinEDA_DrawFrame* frame ) ...@@ -203,7 +206,7 @@ void TEXTE_PCB::Display_Infos( WinEDA_DrawFrame* frame )
/** /**
* Function Show * Function Show
* is used to output the object tree, currently for debugging only. * is used to output the object tree, currently for debugging only.
* @param nestLevel An aid to prettier tree indenting, and is the level * @param nestLevel An aid to prettier tree indenting, and is the level
* of nesting of this object within the overall tree. * of nesting of this object within the overall tree.
* @param os The ostream& to output to. * @param os The ostream& to output to.
*/ */
...@@ -211,8 +214,8 @@ void TEXTE_PCB::Show( int nestLevel, std::ostream& os ) ...@@ -211,8 +214,8 @@ void TEXTE_PCB::Show( int nestLevel, std::ostream& os )
{ {
// for now, make it look like XML: // for now, make it look like XML:
NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() << NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() <<
" string=\"" << m_Text.mb_str() << "\"/>\n"; " string=\"" << m_Text.mb_str() << "\"/>\n";
// NestedSpace( nestLevel, os ) << "</" << GetClass().Lower().mb_str() << ">\n"; // NestedSpace( nestLevel, os ) << "</" << GetClass().Lower().mb_str() << ">\n";
} }
......
...@@ -41,21 +41,21 @@ TEXTE_MODULE::TEXTE_MODULE( MODULE* parent, int text_type ) : ...@@ -41,21 +41,21 @@ TEXTE_MODULE::TEXTE_MODULE( MODULE* parent, int text_type ) :
m_Orient = 0; /* en 1/10 degre */ m_Orient = 0; /* en 1/10 degre */
m_Miroir = 1; // Mode normal (pas de miroir) m_Miroir = 1; // Mode normal (pas de miroir)
m_Unused = 0; m_Unused = 0;
SetLayer( SILKSCREEN_N_CMP ); SetLayer( SILKSCREEN_N_CMP );
if( Module && (Module->Type() == TYPEMODULE) ) if( Module && (Module->Type() == TYPEMODULE) )
{ {
m_Pos = Module->m_Pos; m_Pos = Module->m_Pos;
int moduleLayer = Module->GetLayer(); int moduleLayer = Module->GetLayer();
if( moduleLayer == COPPER_LAYER_N ) if( moduleLayer == COPPER_LAYER_N )
SetLayer( SILKSCREEN_N_CU ); SetLayer( SILKSCREEN_N_CU );
else if( moduleLayer == CMP_N ) else if( moduleLayer == CMP_N )
SetLayer( SILKSCREEN_N_CMP ); SetLayer( SILKSCREEN_N_CMP );
else else
SetLayer( moduleLayer ); SetLayer( moduleLayer );
if( moduleLayer == SILKSCREEN_N_CU if( moduleLayer == SILKSCREEN_N_CU
|| moduleLayer == ADHESIVE_N_CU || moduleLayer == ADHESIVE_N_CU
|| moduleLayer == COPPER_LAYER_N ) || moduleLayer == COPPER_LAYER_N )
...@@ -75,20 +75,20 @@ bool TEXTE_MODULE::Save( FILE* aFile ) const ...@@ -75,20 +75,20 @@ bool TEXTE_MODULE::Save( FILE* aFile ) const
{ {
MODULE* parent = (MODULE*) GetParent(); MODULE* parent = (MODULE*) GetParent();
int orient = m_Orient; int orient = m_Orient;
if( parent ) if( parent )
orient += parent->m_Orient; orient += parent->m_Orient;
int ret = fprintf( aFile, "T%d %d %d %d %d %d %d %c %c %d \"%.16s\"\n", int ret = fprintf( aFile, "T%d %d %d %d %d %d %d %c %c %d \"%.16s\"\n",
m_Type, m_Type,
m_Pos0.x, m_Pos0.y, m_Pos0.x, m_Pos0.y,
m_Size.y, m_Size.x, m_Size.y, m_Size.x,
orient, orient,
m_Width, m_Width,
m_Miroir ? 'N' : 'M', m_NoShow ? 'I' : 'V', m_Miroir ? 'N' : 'M', m_NoShow ? 'I' : 'V',
GetLayer(), GetLayer(),
CONV_TO_UTF8( m_Text ) ); CONV_TO_UTF8( m_Text ) );
return (ret > 20); return (ret > 20);
} }
...@@ -209,11 +209,11 @@ bool TEXTE_MODULE::HitTest( const wxPoint& posref ) ...@@ -209,11 +209,11 @@ bool TEXTE_MODULE::HitTest( const wxPoint& posref )
/* le point de reference est tourn�de - angle /* le point de reference est tourn�de - angle
* pour se ramener a un rectangle de reference horizontal */ * pour se ramener a un rectangle de reference horizontal */
mX = posref.x - m_Pos.x; mX = posref.x - m_Pos.x;
mY = posref.y - m_Pos.y; mY = posref.y - m_Pos.y;
RotatePoint( &mX, &mY, -angle ); RotatePoint( &mX, &mY, -angle );
/* le point de reference est-il dans ce rectangle */ /* le point de reference est-il dans ce rectangle */
if( ( abs( mX ) <= abs( dx ) ) && ( abs( mY ) <= abs( dy ) ) ) if( ( abs( mX ) <= abs( dx ) ) && ( abs( mY ) <= abs( dy ) ) )
{ {
...@@ -257,7 +257,7 @@ void TEXTE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, wxPoint offset, int ...@@ -257,7 +257,7 @@ void TEXTE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, wxPoint offset, int
orient = GetDrawRotation(); orient = GetDrawRotation();
miroir = m_Miroir & 1; // = 0 si vu en miroir miroir = m_Miroir & 1; // = 0 si vu en miroir
width = m_Width; width = m_Width;
if( (frame->m_DisplayModText == FILAIRE) || ( (width / zoom) < L_MIN_DESSIN ) ) if( (frame->m_DisplayModText == FILAIRE) || ( (width / zoom) < L_MIN_DESSIN ) )
width = 0; width = 0;
else if( frame->m_DisplayModText == SKETCH ) else if( frame->m_DisplayModText == SKETCH )
...@@ -281,7 +281,7 @@ void TEXTE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, wxPoint offset, int ...@@ -281,7 +281,7 @@ void TEXTE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, wxPoint offset, int
if( Module && Module->GetLayer() == COPPER_LAYER_N ) if( Module && Module->GetLayer() == COPPER_LAYER_N )
color = g_ModuleTextCUColor; color = g_ModuleTextCUColor;
else if( Module && Module->GetLayer() == CMP_N ) else if( Module && Module->GetLayer() == CMP_N )
color = g_ModuleTextCMPColor; color = g_ModuleTextCMPColor;
...@@ -290,7 +290,7 @@ void TEXTE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, wxPoint offset, int ...@@ -290,7 +290,7 @@ void TEXTE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, wxPoint offset, int
if( m_NoShow ) if( m_NoShow )
color = g_ModuleTextNOVColor; color = g_ModuleTextNOVColor;
if( (color & ITEM_NOT_SHOW) != 0 ) if( (color & ITEM_NOT_SHOW) != 0 )
return; return;
...@@ -330,20 +330,25 @@ int TEXTE_MODULE::GetDrawRotation() ...@@ -330,20 +330,25 @@ int TEXTE_MODULE::GetDrawRotation()
} }
// see class_text_mod.h // see class_text_mod.h
void TEXTE_MODULE::Display_Infos( WinEDA_DrawFrame* frame ) void TEXTE_MODULE::Display_Infos( WinEDA_DrawFrame* frame )
{ {
wxString msg, Line; wxString msg, Line;
int ii; int ii;
MODULE* module = (MODULE*) m_Parent; MODULE* module = (MODULE*) m_Parent;
wxASSERT( module );
if( !module ) if( !module )
return; return;
static const wxString text_type_msg[3] = { BOARD* board = (BOARD*) module->m_Parent;
wxASSERT( board );
static const wxString text_type_msg[3] = {
_( "Ref." ), _( "Value" ), _( "Text" ) }; _( "Ref." ), _( "Value" ), _( "Text" ) };
frame->MsgPanel->EraseMsgBox(); frame->MsgPanel->EraseMsgBox();
Line = module->m_Reference->m_Text; Line = module->m_Reference->m_Text;
...@@ -352,10 +357,10 @@ void TEXTE_MODULE::Display_Infos( WinEDA_DrawFrame* frame ) ...@@ -352,10 +357,10 @@ void TEXTE_MODULE::Display_Infos( WinEDA_DrawFrame* frame )
Line = m_Text; Line = m_Text;
Affiche_1_Parametre( frame, 10, _( "Text" ), Line, YELLOW ); Affiche_1_Parametre( frame, 10, _( "Text" ), Line, YELLOW );
ii = m_Type; ii = m_Type;
if( ii > 2 ) if( ii > 2 )
ii = 2; ii = 2;
Affiche_1_Parametre( frame, 20, _( "Type" ), text_type_msg[ii], DARKGREEN ); Affiche_1_Parametre( frame, 20, _( "Type" ), text_type_msg[ii], DARKGREEN );
Affiche_1_Parametre( frame, 25, _( "Display" ), wxEmptyString, DARKGREEN ); Affiche_1_Parametre( frame, 25, _( "Display" ), wxEmptyString, DARKGREEN );
...@@ -366,7 +371,7 @@ void TEXTE_MODULE::Display_Infos( WinEDA_DrawFrame* frame ) ...@@ -366,7 +371,7 @@ void TEXTE_MODULE::Display_Infos( WinEDA_DrawFrame* frame )
ii = m_Layer; ii = m_Layer;
if( ii < NB_LAYERS ) if( ii < NB_LAYERS )
Affiche_1_Parametre( frame, 28, _( "Layer" ), ReturnPcbLayerName( ii ), DARKGREEN ); Affiche_1_Parametre( frame, 28, _( "Layer" ), board->GetLayerName( ii ), DARKGREEN );
else else
{ {
msg.Printf( wxT( "%d" ), ii ); msg.Printf( wxT( "%d" ), ii );
...@@ -376,7 +381,7 @@ void TEXTE_MODULE::Display_Infos( WinEDA_DrawFrame* frame ) ...@@ -376,7 +381,7 @@ void TEXTE_MODULE::Display_Infos( WinEDA_DrawFrame* frame )
msg = wxT( " Yes" ); msg = wxT( " Yes" );
if( m_Miroir & 1 ) if( m_Miroir & 1 )
msg = wxT( " No" ); msg = wxT( " No" );
Affiche_1_Parametre( frame, 36, _( "Mirror" ), msg, DARKGREEN ); Affiche_1_Parametre( frame, 36, _( "Mirror" ), msg, DARKGREEN );
msg.Printf( wxT( "%.1f" ), (float) m_Orient / 10 ); msg.Printf( wxT( "%.1f" ), (float) m_Orient / 10 );
...@@ -402,27 +407,27 @@ bool TEXTE_MODULE::IsOnLayer( int aLayer ) const ...@@ -402,27 +407,27 @@ bool TEXTE_MODULE::IsOnLayer( int aLayer ) const
/* test the parent, which is a MODULE */ /* test the parent, which is a MODULE */
if( aLayer == GetParent()->GetLayer() ) if( aLayer == GetParent()->GetLayer() )
return true; return true;
if( aLayer == COPPER_LAYER_N ) if( aLayer == COPPER_LAYER_N )
{ {
if( m_Layer==ADHESIVE_N_CU || m_Layer==SILKSCREEN_N_CU ) if( m_Layer==ADHESIVE_N_CU || m_Layer==SILKSCREEN_N_CU )
return true; return true;
} }
else if( aLayer == CMP_N ) else if( aLayer == CMP_N )
{ {
if( m_Layer==ADHESIVE_N_CMP || m_Layer==SILKSCREEN_N_CMP ) if( m_Layer==ADHESIVE_N_CMP || m_Layer==SILKSCREEN_N_CMP )
return true; return true;
} }
return false; return false;
} }
/* see class_text_mod.h /* see class_text_mod.h
bool TEXTE_MODULE::IsOnOneOfTheseLayers( int aLayerMask ) const bool TEXTE_MODULE::IsOnOneOfTheseLayers( int aLayerMask ) const
{ {
} }
*/ */
...@@ -431,7 +436,7 @@ bool TEXTE_MODULE::IsOnOneOfTheseLayers( int aLayerMask ) const ...@@ -431,7 +436,7 @@ bool TEXTE_MODULE::IsOnOneOfTheseLayers( int aLayerMask ) const
/** /**
* Function Show * Function Show
* is used to output the object tree, currently for debugging only. * is used to output the object tree, currently for debugging only.
* @param nestLevel An aid to prettier tree indenting, and is the level * @param nestLevel An aid to prettier tree indenting, and is the level
* of nesting of this object within the overall tree. * of nesting of this object within the overall tree.
* @param os The ostream& to output to. * @param os The ostream& to output to.
*/ */
...@@ -439,8 +444,8 @@ void TEXTE_MODULE::Show( int nestLevel, std::ostream& os ) ...@@ -439,8 +444,8 @@ void TEXTE_MODULE::Show( int nestLevel, std::ostream& os )
{ {
// for now, make it look like XML: // for now, make it look like XML:
NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() << NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() <<
" string=\"" << m_Text.mb_str() << "\"/>\n"; " string=\"" << m_Text.mb_str() << "\"/>\n";
// NestedSpace( nestLevel, os ) << "</" << GetClass().Lower().mb_str() << ">\n"; // NestedSpace( nestLevel, os ) << "</" << GetClass().Lower().mb_str() << ">\n";
} }
#endif #endif
...@@ -248,7 +248,7 @@ void ZONE_CONTAINER::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& off ...@@ -248,7 +248,7 @@ void ZONE_CONTAINER::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& off
if( DC == NULL ) if( DC == NULL )
return; return;
wxPoint seg_start, seg_end; wxPoint seg_start, seg_end;
int curr_layer = ( (PCB_SCREEN*) panel->GetScreen() )->m_Active_Layer; int curr_layer = ( (PCB_SCREEN*) panel->GetScreen() )->m_Active_Layer;
int color = g_DesignSettings.m_LayerColor[m_Layer]; int color = g_DesignSettings.m_LayerColor[m_Layer];
...@@ -319,9 +319,9 @@ void ZONE_CONTAINER::DrawWhileCreateOutline( WinEDA_DrawPanel* panel, wxDC* DC, ...@@ -319,9 +319,9 @@ void ZONE_CONTAINER::DrawWhileCreateOutline( WinEDA_DrawPanel* panel, wxDC* DC,
* @param draw_mode = draw mode: OR, XOR .. * @param draw_mode = draw mode: OR, XOR ..
*/ */
{ {
int current_gr_mode = draw_mode; int current_gr_mode = draw_mode;
bool is_close_segment = false; bool is_close_segment = false;
wxPoint seg_start, seg_end; wxPoint seg_start, seg_end;
if( DC == NULL ) if( DC == NULL )
return; return;
...@@ -339,7 +339,7 @@ void ZONE_CONTAINER::DrawWhileCreateOutline( WinEDA_DrawPanel* panel, wxDC* DC, ...@@ -339,7 +339,7 @@ void ZONE_CONTAINER::DrawWhileCreateOutline( WinEDA_DrawPanel* panel, wxDC* DC,
// draw the lines // draw the lines
wxPoint start_contour_pos = GetCornerPosition(0); wxPoint start_contour_pos = GetCornerPosition(0);
for( int ic = 0; ic < GetNumCorners(); ic++ ) for( int ic = 0; ic < GetNumCorners(); ic++ )
{ {
int xi = GetCornerPosition(ic).x; int xi = GetCornerPosition(ic).x;
...@@ -347,27 +347,27 @@ void ZONE_CONTAINER::DrawWhileCreateOutline( WinEDA_DrawPanel* panel, wxDC* DC, ...@@ -347,27 +347,27 @@ void ZONE_CONTAINER::DrawWhileCreateOutline( WinEDA_DrawPanel* panel, wxDC* DC,
int xf, yf; int xf, yf;
if( m_Poly->corner[ic].end_contour == FALSE && ic < GetNumCorners() - 1 ) if( m_Poly->corner[ic].end_contour == FALSE && ic < GetNumCorners() - 1 )
{ {
is_close_segment = false; is_close_segment = false;
xf = GetCornerPosition(ic + 1).x; xf = GetCornerPosition(ic + 1).x;
yf = GetCornerPosition(ic + 1).y; yf = GetCornerPosition(ic + 1).y;
if ( (m_Poly->corner[ic + 1].end_contour) || (ic == GetNumCorners() - 2) ) if ( (m_Poly->corner[ic + 1].end_contour) || (ic == GetNumCorners() - 2) )
current_gr_mode = GR_XOR; current_gr_mode = GR_XOR;
else else
current_gr_mode = draw_mode; current_gr_mode = draw_mode;
} }
else else
{ {
is_close_segment = true; is_close_segment = true;
current_gr_mode = GR_XOR; current_gr_mode = GR_XOR;
xf = start_contour_pos.x; xf = start_contour_pos.x;
yf = start_contour_pos.y; yf = start_contour_pos.y;
start_contour_pos = GetCornerPosition(ic + 1); start_contour_pos = GetCornerPosition(ic + 1);
} }
GRSetDrawMode( DC, current_gr_mode ); GRSetDrawMode( DC, current_gr_mode );
if ( is_close_segment ) if ( is_close_segment )
GRLine( &panel->m_ClipBox, DC, xi, yi, xf, yf, 0, WHITE ); GRLine( &panel->m_ClipBox, DC, xi, yi, xf, yf, 0, WHITE );
else else
GRLine( &panel->m_ClipBox, DC, xi, yi, xf, yf, 0, color ); GRLine( &panel->m_ClipBox, DC, xi, yi, xf, yf, 0, color );
} }
} }
...@@ -514,6 +514,10 @@ void ZONE_CONTAINER::Display_Infos( WinEDA_DrawFrame* frame ) ...@@ -514,6 +514,10 @@ void ZONE_CONTAINER::Display_Infos( WinEDA_DrawFrame* frame )
wxString msg; wxString msg;
int text_pos; int text_pos;
BOARD* board = (BOARD*) m_Parent;
wxASSERT( board );
frame->MsgPanel->EraseMsgBox(); frame->MsgPanel->EraseMsgBox();
msg = _( "Zone Outline" ); msg = _( "Zone Outline" );
...@@ -551,7 +555,7 @@ void ZONE_CONTAINER::Display_Infos( WinEDA_DrawFrame* frame ) ...@@ -551,7 +555,7 @@ void ZONE_CONTAINER::Display_Infos( WinEDA_DrawFrame* frame )
Affiche_1_Parametre( frame, text_pos, _( "NetCode" ), msg, RED ); Affiche_1_Parametre( frame, text_pos, _( "NetCode" ), msg, RED );
text_pos += 8; text_pos += 8;
msg = ReturnPcbLayerName( m_Layer ); msg = board->GetLayerName( m_Layer );
Affiche_1_Parametre( frame, text_pos, _( "Layer" ), msg, BROWN ); Affiche_1_Parametre( frame, text_pos, _( "Layer" ), msg, BROWN );
text_pos += 8; text_pos += 8;
...@@ -588,19 +592,19 @@ void ZONE_CONTAINER::Move( const wxPoint& offset ) ...@@ -588,19 +592,19 @@ void ZONE_CONTAINER::Move( const wxPoint& offset )
*/ */
void ZONE_CONTAINER::MoveEdge( const wxPoint& offset ) void ZONE_CONTAINER::MoveEdge( const wxPoint& offset )
{ {
int ii = m_CornerSelection; int ii = m_CornerSelection;
// Move the start point of the selected edge: // Move the start point of the selected edge:
SetCornerPosition(ii, GetCornerPosition(ii) + offset); SetCornerPosition(ii, GetCornerPosition(ii) + offset);
// Move the end point of the selected edge: // Move the end point of the selected edge:
if ( m_Poly->corner[ii].end_contour || ii == GetNumCorners() - 1) if ( m_Poly->corner[ii].end_contour || ii == GetNumCorners() - 1)
{ {
int icont = m_Poly->GetContour( ii ); int icont = m_Poly->GetContour( ii );
ii = m_Poly->GetContourStart( icont ); ii = m_Poly->GetContourStart( icont );
} }
else else
ii++; ii++;
SetCornerPosition(ii, GetCornerPosition(ii) + offset); SetCornerPosition(ii, GetCornerPosition(ii) + offset);
m_Poly->Hatch(); m_Poly->Hatch();
......
...@@ -156,6 +156,7 @@ EDA_BoardDesignSettings::EDA_BoardDesignSettings() ...@@ -156,6 +156,7 @@ EDA_BoardDesignSettings::EDA_BoardDesignSettings()
m_MicroViaDrill = 50; // micro via drill (for the entire board) m_MicroViaDrill = 50; // micro via drill (for the entire board)
m_CurrentMicroViaSize = 150; // Current micro via size m_CurrentMicroViaSize = 150; // Current micro via size
m_MicroViasAllowed = false; // true to allow micro vias m_MicroViasAllowed = false; // true to allow micro vias
for( ii = 0; ii < HISTORY_NUMBER; ii++ ) for( ii = 0; ii < HISTORY_NUMBER; ii++ )
{ {
m_TrackWidthHistory[ii] = 0; // Last HISTORY_NUMBER used track widths m_TrackWidthHistory[ii] = 0; // Last HISTORY_NUMBER used track widths
...@@ -171,6 +172,7 @@ EDA_BoardDesignSettings::EDA_BoardDesignSettings() ...@@ -171,6 +172,7 @@ EDA_BoardDesignSettings::EDA_BoardDesignSettings()
m_MaskMargin = 150; // Solder mask margin m_MaskMargin = 150; // Solder mask margin
/* Color options for screen display of the Printed Board: */ /* Color options for screen display of the Printed Board: */
m_PcbGridColor = DARKGRAY; // Grid color m_PcbGridColor = DARKGRAY; // Grid color
for( ii = 0; ii < 32; ii++ ) for( ii = 0; ii < 32; ii++ )
m_LayerColor[ii] = default_layer_color[ii]; m_LayerColor[ii] = default_layer_color[ii];
...@@ -179,6 +181,7 @@ EDA_BoardDesignSettings::EDA_BoardDesignSettings() ...@@ -179,6 +181,7 @@ EDA_BoardDesignSettings::EDA_BoardDesignSettings()
m_ViaColor[VIA_MICROVIA] = CYAN; m_ViaColor[VIA_MICROVIA] = CYAN;
m_ViaColor[VIA_BLIND_BURIED] = BROWN; m_ViaColor[VIA_BLIND_BURIED] = BROWN;
m_ViaColor[VIA_THROUGH] = WHITE; m_ViaColor[VIA_THROUGH] = WHITE;
m_ModuleTextCMPColor = LIGHTGRAY; // Text module color for modules on the COMPONENT layer m_ModuleTextCMPColor = LIGHTGRAY; // Text module color for modules on the COMPONENT layer
m_ModuleTextCUColor = MAGENTA; // Text module color for modules on the COPPER layer m_ModuleTextCUColor = MAGENTA; // Text module color for modules on the COPPER layer
m_ModuleTextNOVColor = DARKGRAY; // Text module color for "invisible" texts (must be BLACK if really not displayed) m_ModuleTextNOVColor = DARKGRAY; // Text module color for "invisible" texts (must be BLACK if really not displayed)
......
...@@ -22,12 +22,12 @@ static int status_cotation; /* = 0 : pas de cotation en cours ...@@ -22,12 +22,12 @@ static int status_cotation; /* = 0 : pas de cotation en cours
/* /*
* Les routines generent une cotation de la forme * Les routines generent une cotation de la forme
* - cote usuelle: * - cote usuelle:
* *
| | | |
| dist | | dist |
|<---------->| |<---------->|
| | | |
* *
*/ */
#define MAX_CHAR 40 /* longueur maxi de la cotation */ #define MAX_CHAR 40 /* longueur maxi de la cotation */
...@@ -135,10 +135,10 @@ WinEDA_CotationPropertiesFrame::WinEDA_CotationPropertiesFrame( WinEDA_PcbFrame* ...@@ -135,10 +135,10 @@ WinEDA_CotationPropertiesFrame::WinEDA_CotationPropertiesFrame( WinEDA_PcbFrame*
m_SelLayerBox = new WinEDAChoiceBox( this, ID_TEXTPCB_SELECT_LAYER, m_SelLayerBox = new WinEDAChoiceBox( this, ID_TEXTPCB_SELECT_LAYER,
wxDefaultPosition, wxDefaultSize ); wxDefaultPosition, wxDefaultSize );
LeftBoxSizer->Add( m_SelLayerBox, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 ); LeftBoxSizer->Add( m_SelLayerBox, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
int ii;
for( ii = FIRST_NO_COPPER_LAYER; ii < NB_LAYERS; ii++ ) for( int layer = FIRST_NO_COPPER_LAYER; layer<NB_LAYERS; layer++ )
{ {
m_SelLayerBox->Append( ReturnPcbLayerName( ii ) ); m_SelLayerBox->Append( parent->m_Pcb->GetLayerName( layer ) );
} }
m_SelLayerBox->SetSelection( Cotation->GetLayer() - FIRST_NO_COPPER_LAYER ); m_SelLayerBox->SetSelection( Cotation->GetLayer() - FIRST_NO_COPPER_LAYER );
...@@ -174,8 +174,8 @@ void WinEDA_CotationPropertiesFrame::OnOkClick( wxCommandEvent& event ) ...@@ -174,8 +174,8 @@ void WinEDA_CotationPropertiesFrame::OnOkClick( wxCommandEvent& event )
CurrentCotation->m_Text->m_Width = CurrentCotation->m_Width = CurrentCotation->m_Text->m_Width = CurrentCotation->m_Width =
m_TxtWidthCtrl->GetValue(); m_TxtWidthCtrl->GetValue();
CurrentCotation->m_Text->m_Miroir = (m_Mirror->GetSelection() == 0) ? 1 : 0; CurrentCotation->m_Text->m_Miroir = (m_Mirror->GetSelection() == 0) ? 1 : 0;
CurrentCotation->SetLayer( m_SelLayerBox->GetChoice() + FIRST_NO_COPPER_LAYER ); CurrentCotation->SetLayer( m_SelLayerBox->GetChoice() + FIRST_NO_COPPER_LAYER );
CurrentCotation->m_Text->SetLayer( m_SelLayerBox->GetChoice() + FIRST_NO_COPPER_LAYER ); CurrentCotation->m_Text->SetLayer( m_SelLayerBox->GetChoice() + FIRST_NO_COPPER_LAYER );
CurrentCotation->m_Text->CreateDrawData(); CurrentCotation->m_Text->CreateDrawData();
...@@ -213,7 +213,7 @@ static void Exit_EditCotation( WinEDA_DrawPanel* Panel, wxDC* DC ) ...@@ -213,7 +213,7 @@ static void Exit_EditCotation( WinEDA_DrawPanel* Panel, wxDC* DC )
status_cotation = 0; status_cotation = 0;
Panel->ManageCurseur = NULL; Panel->ManageCurseur = NULL;
Panel->ForceCloseManageCurseur = NULL; Panel->ForceCloseManageCurseur = NULL;
((WinEDA_PcbFrame*)Panel->m_Parent)->SetCurItem(NULL); ((WinEDA_PcbFrame*)Panel->m_Parent)->SetCurItem(NULL);
} }
......
...@@ -48,7 +48,7 @@ void RemoteCommand( const char* cmdline ) ...@@ -48,7 +48,7 @@ void RemoteCommand( const char* cmdline )
{ {
modName = CONV_FROM_UTF8( text ); modName = CONV_FROM_UTF8( text );
module = ReturnModule( frame->m_Pcb, modName ); module = frame->m_Pcb->FindModuleByReference( modName );
if( module ) if( module )
msg.Printf( _( "%s found" ), modName.GetData() ); msg.Printf( _( "%s found" ), modName.GetData() );
...@@ -86,9 +86,9 @@ void RemoteCommand( const char* cmdline ) ...@@ -86,9 +86,9 @@ void RemoteCommand( const char* cmdline )
modName = CONV_FROM_UTF8( text ); modName = CONV_FROM_UTF8( text );
module = ReturnModule( frame->m_Pcb, modName ); module = frame->m_Pcb->FindModuleByReference( modName );
if( module ) if( module )
pad = ReturnPad( module, pinName ); pad = module->FindPadByName( pinName );
if( pad ) if( pad )
netcode = pad->GetNet(); netcode = pad->GetNet();
......
...@@ -68,7 +68,7 @@ WinEDA_ZoneFrame::WinEDA_ZoneFrame() ...@@ -68,7 +68,7 @@ WinEDA_ZoneFrame::WinEDA_ZoneFrame()
WinEDA_ZoneFrame::WinEDA_ZoneFrame( WinEDA_PcbFrame* parent, WinEDA_ZoneFrame::WinEDA_ZoneFrame( WinEDA_PcbFrame* parent,
ZONE_CONTAINER * zone_container, ZONE_CONTAINER * zone_container,
wxWindowID id, wxWindowID id,
const wxString& caption, const wxString& caption,
const wxPoint& pos, const wxPoint& pos,
...@@ -76,14 +76,14 @@ WinEDA_ZoneFrame::WinEDA_ZoneFrame( WinEDA_PcbFrame* parent, ...@@ -76,14 +76,14 @@ WinEDA_ZoneFrame::WinEDA_ZoneFrame( WinEDA_PcbFrame* parent,
long style ) long style )
{ {
m_Parent = parent; m_Parent = parent;
m_Zone_Container = zone_container; m_Zone_Container = zone_container;
if( m_Parent->m_Parent->m_EDA_Config ) if( m_Parent->m_Parent->m_EDA_Config )
{ {
m_NetSorting = m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_SORT_OPTION_KEY, (long) BOARD::PAD_CNT_SORT ); m_NetSorting = m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_SORT_OPTION_KEY, (long) BOARD::PAD_CNT_SORT );
} }
Create( parent, id, caption, pos, size, style ); Create( parent, id, caption, pos, size, style );
SetReturnCode(ZONE_ABORT); // Will be changed on buttons click SetReturnCode(ZONE_ABORT); // Will be changed on buttons click
} }
...@@ -110,7 +110,7 @@ bool WinEDA_ZoneFrame::Create( wxWindow* parent, ...@@ -110,7 +110,7 @@ bool WinEDA_ZoneFrame::Create( wxWindow* parent,
m_ListNetNameSelection = NULL; m_ListNetNameSelection = NULL;
m_LayerSelectionCtrl = NULL; m_LayerSelectionCtrl = NULL;
////@end WinEDA_ZoneFrame member initialisation ////@end WinEDA_ZoneFrame member initialisation
////@begin WinEDA_ZoneFrame creation ////@begin WinEDA_ZoneFrame creation
SetExtraStyle(wxWS_EX_BLOCK_EVENTS); SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
wxDialog::Create( parent, id, caption, pos, size, style ); wxDialog::Create( parent, id, caption, pos, size, style );
...@@ -133,6 +133,8 @@ bool WinEDA_ZoneFrame::Create( wxWindow* parent, ...@@ -133,6 +133,8 @@ bool WinEDA_ZoneFrame::Create( wxWindow* parent,
void WinEDA_ZoneFrame::CreateControls() void WinEDA_ZoneFrame::CreateControls()
{ {
BOARD* board = m_Parent->m_Pcb;
SetFont( *g_DialogFont ); SetFont( *g_DialogFont );
////@begin WinEDA_ZoneFrame content construction ////@begin WinEDA_ZoneFrame content construction
...@@ -244,8 +246,8 @@ void WinEDA_ZoneFrame::CreateControls() ...@@ -244,8 +246,8 @@ void WinEDA_ZoneFrame::CreateControls()
m_NetSortingOption->SetValidator( wxGenericValidator(& m_NetSorting) ); m_NetSortingOption->SetValidator( wxGenericValidator(& m_NetSorting) );
////@end WinEDA_ZoneFrame content construction ////@end WinEDA_ZoneFrame content construction
// Initialise options // Initialise options
wxString title = _( "Zone clearance value:" ) + ReturnUnitSymbol( g_UnitMetric ); wxString title = _( "Zone clearance value:" ) + ReturnUnitSymbol( g_UnitMetric );
m_ClearanceValueTitle->SetLabel( title ); m_ClearanceValueTitle->SetLabel( title );
title = _( "Grid :" ) + ReturnUnitSymbol( g_UnitMetric );; title = _( "Grid :" ) + ReturnUnitSymbol( g_UnitMetric );;
...@@ -280,89 +282,97 @@ void WinEDA_ZoneFrame::CreateControls() ...@@ -280,89 +282,97 @@ void WinEDA_ZoneFrame::CreateControls()
{ {
case ZONE_CONTAINER::PAD_NOT_IN_ZONE: // Pads are not covered case ZONE_CONTAINER::PAD_NOT_IN_ZONE: // Pads are not covered
m_FillOpt->SetSelection( 2 ); m_FillOpt->SetSelection( 2 );
break; break;
case ZONE_CONTAINER::THERMAL_PAD: // Use thermal relief for pads case ZONE_CONTAINER::THERMAL_PAD: // Use thermal relief for pads
m_FillOpt->SetSelection( 1 ); m_FillOpt->SetSelection( 1 );
break; break;
case ZONE_CONTAINER::PAD_IN_ZONE: // pads are covered by copper case ZONE_CONTAINER::PAD_IN_ZONE: // pads are covered by copper
m_FillOpt->SetSelection( 0 ); m_FillOpt->SetSelection( 0 );
break; break;
} }
if ( m_Zone_Container ) if ( m_Zone_Container )
s_Zone_Hatching = m_Zone_Container->m_Poly->GetHatchStyle(); s_Zone_Hatching = m_Zone_Container->m_Poly->GetHatchStyle();
else else
s_Zone_Hatching = m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_OUTLINES_HATCH_OPTION_KEY, s_Zone_Hatching = m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_OUTLINES_HATCH_OPTION_KEY,
(long) CPolyLine::DIAGONAL_EDGE ); (long) CPolyLine::DIAGONAL_EDGE );
switch( s_Zone_Hatching ) switch( s_Zone_Hatching )
{ {
case CPolyLine::NO_HATCH: case CPolyLine::NO_HATCH:
m_OutlineAppearanceCtrl->SetSelection(0); m_OutlineAppearanceCtrl->SetSelection(0);
break; break;
case CPolyLine::DIAGONAL_EDGE: case CPolyLine::DIAGONAL_EDGE:
m_OutlineAppearanceCtrl->SetSelection(1); m_OutlineAppearanceCtrl->SetSelection(1);
break; break;
case CPolyLine::DIAGONAL_FULL: case CPolyLine::DIAGONAL_FULL:
m_OutlineAppearanceCtrl->SetSelection(2); m_OutlineAppearanceCtrl->SetSelection(2);
break; break;
} }
int layer_cnt = g_DesignSettings.m_CopperLayerCount; int layer_cnt = board->GetCopperLayerCount();
for( int ii = 0; ii < g_DesignSettings.m_CopperLayerCount; ii++ ) for( int ii = 0; ii < board->GetCopperLayerCount(); ii++ )
{ {
wxString msg; wxString msg;
int layer_number = COPPER_LAYER_N; int layer_number = COPPER_LAYER_N;
if( layer_cnt == 0 || ii < layer_cnt - 1 ) if( layer_cnt == 0 || ii < layer_cnt - 1 )
layer_number = ii; layer_number = ii;
else if( ii == layer_cnt - 1 ) else if( ii == layer_cnt - 1 )
layer_number = LAYER_CMP_N; layer_number = LAYER_CMP_N;
m_LayerId[ii] = layer_number; m_LayerId[ii] = layer_number;
msg = ReturnPcbLayerName( layer_number ).Trim();
msg = board->GetLayerName( layer_number ).Trim();
m_LayerSelectionCtrl->InsertItems( 1, &msg, ii ); m_LayerSelectionCtrl->InsertItems( 1, &msg, ii );
if ( m_Zone_Container )
{ if( m_Zone_Container )
if( m_Zone_Container->GetLayer() == layer_number ) {
m_LayerSelectionCtrl->SetSelection( ii ); if( m_Zone_Container->GetLayer() == layer_number )
} m_LayerSelectionCtrl->SetSelection( ii );
else }
{ else
if( ((PCB_SCREEN*)(m_Parent->GetScreen()))->m_Active_Layer == layer_number ) {
m_LayerSelectionCtrl->SetSelection( ii ); if( ((PCB_SCREEN*)(m_Parent->GetScreen()))->m_Active_Layer == layer_number )
} m_LayerSelectionCtrl->SetSelection( ii );
}
} }
m_NetSortingOption->SetSelection(m_NetSorting == BOARD::ALPHA_SORT ? 0 : 1 ); m_NetSortingOption->SetSelection(m_NetSorting == BOARD::ALPHA_SORT ? 0 : 1 );
wxString NetNameFilter;
if( m_Parent->m_Parent->m_EDA_Config ) wxString NetNameFilter;
if( m_Parent->m_Parent->m_EDA_Config )
{ {
NetNameFilter = m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_FILTER_STRING_KEY, wxT("N_0*") ); NetNameFilter = m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_FILTER_STRING_KEY, wxT("N_0*") );
} }
m_NetNameFilter->SetValue(NetNameFilter);
m_NetNameFilter->SetValue(NetNameFilter);
wxArrayString ListNetName; wxArrayString ListNetName;
m_Parent->m_Pcb->ReturnSortedNetnamesList( ListNetName, m_Parent->m_Pcb->ReturnSortedNetnamesList( ListNetName,
m_NetSorting == 0 ? BOARD::ALPHA_SORT : BOARD::PAD_CNT_SORT ); m_NetSorting == 0 ? BOARD::ALPHA_SORT : BOARD::PAD_CNT_SORT );
if ( m_NetSorting != 0 )
{ if ( m_NetSorting != 0 )
wxString Filter = m_NetNameFilter->GetValue(); {
for (unsigned ii = 0; ii < ListNetName.GetCount(); ii ++ ) wxString Filter = m_NetNameFilter->GetValue();
{ for( unsigned ii = 0; ii < ListNetName.GetCount(); ii++ )
if ( ListNetName[ii].Matches(Filter.GetData() ) ) {
{ if( ListNetName[ii].Matches(Filter.GetData() ) )
ListNetName. RemoveAt(ii); {
ii--; ListNetName. RemoveAt(ii);
} ii--;
} }
} }
}
m_ListNetNameSelection->InsertItems( ListNetName, 0 ); m_ListNetNameSelection->InsertItems( ListNetName, 0 );
// Select net: // Select net:
int net_select = g_HightLigth_NetCode; int net_select = g_HightLigth_NetCode;
if ( m_Zone_Container ) if( m_Zone_Container )
net_select = m_Zone_Container->GetNet(); net_select = m_Zone_Container->GetNet();
if( net_select > 0 ) if( net_select > 0 )
{ {
EQUIPOT* equipot = m_Parent->m_Pcb->FindNet( net_select ); EQUIPOT* equipot = m_Parent->m_Pcb->FindNet( net_select );
...@@ -468,8 +478,8 @@ bool WinEDA_ZoneFrame::AcceptOptions(bool aPromptForErrors) ...@@ -468,8 +478,8 @@ bool WinEDA_ZoneFrame::AcceptOptions(bool aPromptForErrors)
if( m_Parent->m_Parent->m_EDA_Config ) if( m_Parent->m_Parent->m_EDA_Config )
{ {
m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_OUTLINES_HATCH_OPTION_KEY, (long)s_Zone_Hatching); m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_OUTLINES_HATCH_OPTION_KEY, (long)s_Zone_Hatching);
} }
switch( m_GridCtrl->GetSelection() ) switch( m_GridCtrl->GetSelection() )
{ {
...@@ -481,7 +491,7 @@ bool WinEDA_ZoneFrame::AcceptOptions(bool aPromptForErrors) ...@@ -481,7 +491,7 @@ bool WinEDA_ZoneFrame::AcceptOptions(bool aPromptForErrors)
g_GridRoutingSize = 50; g_GridRoutingSize = 50;
break; break;
default: default:
case 2: case 2:
g_GridRoutingSize = 100; g_GridRoutingSize = 100;
break; break;
...@@ -521,7 +531,7 @@ bool WinEDA_ZoneFrame::AcceptOptions(bool aPromptForErrors) ...@@ -521,7 +531,7 @@ bool WinEDA_ZoneFrame::AcceptOptions(bool aPromptForErrors)
/* Search net_code for this net */ /* Search net_code for this net */
EQUIPOT* net; EQUIPOT* net;
s_NetcodeSelection = 0; s_NetcodeSelection = 0;
for( net = m_Parent->m_Pcb->m_Equipots; net; net = net->Next() ) for( net = m_Parent->m_Pcb->m_Equipots; net; net = net->Next() )
{ {
if( net->m_Netname == net_name ) if( net->m_Netname == net_name )
{ {
...@@ -529,8 +539,8 @@ bool WinEDA_ZoneFrame::AcceptOptions(bool aPromptForErrors) ...@@ -529,8 +539,8 @@ bool WinEDA_ZoneFrame::AcceptOptions(bool aPromptForErrors)
break; break;
} }
} }
return true; return true;
} }
...@@ -541,29 +551,28 @@ bool WinEDA_ZoneFrame::AcceptOptions(bool aPromptForErrors) ...@@ -541,29 +551,28 @@ bool WinEDA_ZoneFrame::AcceptOptions(bool aPromptForErrors)
void WinEDA_ZoneFrame::OnNetSortingOptionSelected( wxCommandEvent& event ) void WinEDA_ZoneFrame::OnNetSortingOptionSelected( wxCommandEvent& event )
{ {
wxArrayString ListNetName; wxArrayString ListNetName;
m_NetSorting = m_NetSortingOption->GetSelection(); m_NetSorting = m_NetSortingOption->GetSelection();
m_Parent->m_Pcb->ReturnSortedNetnamesList( ListNetName, m_Parent->m_Pcb->ReturnSortedNetnamesList( ListNetName,
m_NetSorting == 0 ? BOARD::ALPHA_SORT : BOARD::PAD_CNT_SORT ); m_NetSorting == 0 ? BOARD::ALPHA_SORT : BOARD::PAD_CNT_SORT );
if ( m_NetSorting != 0 ) if ( m_NetSorting != 0 )
{ {
wxString Filter = m_NetNameFilter->GetValue(); wxString Filter = m_NetNameFilter->GetValue();
for (unsigned ii = 0; ii < ListNetName.GetCount(); ii ++ ) for (unsigned ii = 0; ii < ListNetName.GetCount(); ii ++ )
{ {
if ( ListNetName[ii].Matches(Filter.GetData() ) ) if ( ListNetName[ii].Matches(Filter.GetData() ) )
{ {
ListNetName. RemoveAt(ii); ListNetName. RemoveAt(ii);
ii--; ii--;
} }
} }
} }
m_ListNetNameSelection->Clear(); m_ListNetNameSelection->Clear();
m_ListNetNameSelection->InsertItems( ListNetName, 0 ); m_ListNetNameSelection->InsertItems( ListNetName, 0 );
if( m_Parent->m_Parent->m_EDA_Config ) if( m_Parent->m_Parent->m_EDA_Config )
{ {
m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_SORT_OPTION_KEY, (long) m_NetSorting ); m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_SORT_OPTION_KEY, (long) m_NetSorting );
m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_FILTER_STRING_KEY, m_NetNameFilter->GetValue() ); m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_FILTER_STRING_KEY, m_NetNameFilter->GetValue() );
} }
} }
...@@ -573,7 +582,7 @@ void WinEDA_ZoneFrame::OnNetSortingOptionSelected( wxCommandEvent& event ) ...@@ -573,7 +582,7 @@ void WinEDA_ZoneFrame::OnNetSortingOptionSelected( wxCommandEvent& event )
void WinEDA_ZoneFrame::OnOkClick( wxCommandEvent& event ) void WinEDA_ZoneFrame::OnOkClick( wxCommandEvent& event )
{ {
if ( AcceptOptions(true) ) if ( AcceptOptions(true) )
EndModal( ZONE_OK ); EndModal( ZONE_OK );
} }
...@@ -174,7 +174,7 @@ void WinEDA_PcbFrame::Delete_Drawings_All_Layer( DRAWSEGMENT* Segment, wxDC* DC ...@@ -174,7 +174,7 @@ void WinEDA_PcbFrame::Delete_Drawings_All_Layer( DRAWSEGMENT* Segment, wxDC* DC
return; return;
} }
wxString msg = _( "Delete Layer " ) + ReturnPcbLayerName( layer ); wxString msg = _( "Delete Layer " ) + m_Pcb->GetLayerName( layer );
if( !IsOK( this, msg ) ) if( !IsOK( this, msg ) )
return; return;
......
...@@ -127,26 +127,9 @@ bool WinEDA_BasePcbFrame::Clear_Pcb( bool query ) ...@@ -127,26 +127,9 @@ bool WinEDA_BasePcbFrame::Clear_Pcb( bool query )
} }
} }
/* Suppression des listes chainees */ // delete the old BOARD and create a new BOARD so that the default
m_Pcb->m_Equipots->DeleteStructList(); // layer names are put into the BOARD.
m_Pcb->m_Equipots = NULL; SetBOARD( new BOARD( NULL, this ) );
m_Pcb->m_Drawings->DeleteStructList();
m_Pcb->m_Drawings = NULL;
m_Pcb->m_Modules->DeleteStructList();
m_Pcb->m_Modules = NULL;
m_Pcb->m_Track->DeleteStructList();
m_Pcb->m_Track = NULL;
m_Pcb->m_NbSegmTrack = 0;
m_Pcb->m_Zone->DeleteStructList();
m_Pcb->m_Zone = NULL;
m_Pcb->m_NbSegmZone = 0;
m_Pcb->DeleteMARKERs();
m_Pcb->DeleteZONEOutlines();
for( ; g_UnDeleteStackPtr != 0; ) for( ; g_UnDeleteStackPtr != 0; )
{ {
...@@ -159,30 +142,6 @@ bool WinEDA_BasePcbFrame::Clear_Pcb( bool query ) ...@@ -159,30 +142,6 @@ bool WinEDA_BasePcbFrame::Clear_Pcb( bool query )
memset( buf_work, 0, BUFMEMSIZE ); memset( buf_work, 0, BUFMEMSIZE );
adr_lowmem = adr_max = buf_work; adr_lowmem = adr_max = buf_work;
if( m_Pcb->m_Pads )
{
MyFree( m_Pcb->m_Pads );
m_Pcb->m_Pads = NULL;
}
if( m_Pcb->m_Ratsnest )
MyFree( m_Pcb->m_Ratsnest );
if( m_Pcb->m_LocalRatsnest )
MyFree( m_Pcb->m_LocalRatsnest );
m_Pcb->m_Ratsnest = NULL;
m_Pcb->m_LocalRatsnest = NULL;
/* remise a 0 ou a une valeur initiale des variables de la structure */
m_Pcb->m_BoundaryBox.SetOrigin( wxPoint( 0, 0 ) );
m_Pcb->m_BoundaryBox.SetSize( wxSize( 0, 0 ) );
m_Pcb->m_Status_Pcb = 0;
m_Pcb->m_NbLoclinks = 0;
m_Pcb->m_NbLinks = 0;
m_Pcb->m_NbPads = 0;
m_Pcb->m_NbNets = 0;
m_Pcb->m_NbNodes = 0;
m_Pcb->m_NbNoconnect = 0;
m_Pcb->m_NbSegmTrack = 0;
m_Pcb->m_NbSegmZone = 0;
SetCurItem( NULL ); SetCurItem( NULL );
/* Init parametres de gestion */ /* Init parametres de gestion */
...@@ -219,8 +178,8 @@ void WinEDA_PcbFrame::Erase_Zones( bool query ) ...@@ -219,8 +178,8 @@ void WinEDA_PcbFrame::Erase_Zones( bool query )
m_Pcb->m_Zone = NULL; m_Pcb->m_Zone = NULL;
m_Pcb->m_NbSegmZone = 0; m_Pcb->m_NbSegmZone = 0;
} }
m_Pcb->DeleteZONEOutlines(); m_Pcb->DeleteZONEOutlines();
GetScreen()->SetModify(); GetScreen()->SetModify();
} }
...@@ -291,10 +250,10 @@ void WinEDA_PcbFrame::Erase_Pistes( wxDC * DC, int masque_type, bool query ) ...@@ -291,10 +250,10 @@ void WinEDA_PcbFrame::Erase_Pistes( wxDC * DC, int masque_type, bool query )
for( pt_segm = m_Pcb->m_Track; pt_segm != NULL; pt_segm = (TRACK*) PtNext ) for( pt_segm = m_Pcb->m_Track; pt_segm != NULL; pt_segm = (TRACK*) PtNext )
{ {
PtNext = (TRACK*) pt_segm->Pnext; PtNext = (TRACK*) pt_segm->Pnext;
if( pt_segm->GetState( SEGM_FIXE | SEGM_AR ) & masque_type ) if( pt_segm->GetState( SEGM_FIXE | SEGM_AR ) & masque_type )
continue; continue;
pt_segm->DeleteStructure(); pt_segm->DeleteStructure();
} }
......
...@@ -308,11 +308,25 @@ int WinEDA_BasePcbFrame::ReadSetup( FILE* File, int* LineNum ) ...@@ -308,11 +308,25 @@ int WinEDA_BasePcbFrame::ReadSetup( FILE* File, int* LineNum )
if( strncmp( Line, "Layer[", LAYERKEYZ ) == 0 ) if( strncmp( Line, "Layer[", LAYERKEYZ ) == 0 )
{ {
const char* cp = Line + LAYERKEYZ; // parse:
// Layer[n] "a Layer name" <LAYER_T>
char* cp = Line + LAYERKEYZ;
int layer = atoi(cp); int layer = atoi(cp);
wxString layerName = CONV_FROM_UTF8( data ); if( data )
m_Pcb->SetLayerName( layer, layerName ); {
wxString layerName = CONV_FROM_UTF8( data );
m_Pcb->SetLayerName( layer, layerName );
data = strtok( NULL, " " );
if( data )
{
LAYER_T type = LAYER::ParseType( data );
m_Pcb->SetLayerType( layer, type );
}
}
continue; continue;
} }
...@@ -500,13 +514,9 @@ int WinEDA_BasePcbFrame::ReadSetup( FILE* File, int* LineNum ) ...@@ -500,13 +514,9 @@ int WinEDA_BasePcbFrame::ReadSetup( FILE* File, int* LineNum )
#ifdef PCBNEW #ifdef PCBNEW
/***************************************************************/ /******************************************************************************/
static int WriteSetup( FILE* aFile, WinEDA_BasePcbFrame* aFrame static int WriteSetup( FILE* aFile, WinEDA_BasePcbFrame* aFrame, BOARD* aBoard )
#if defined(DEBUG) /******************************************************************************/
, BOARD* aBoard
#endif
)
/***************************************************************/
{ {
char text[1024]; char text[1024];
int ii, jj; int ii, jj;
...@@ -533,18 +543,14 @@ static int WriteSetup( FILE* aFile, WinEDA_BasePcbFrame* aFrame ...@@ -533,18 +543,14 @@ static int WriteSetup( FILE* aFile, WinEDA_BasePcbFrame* aFrame
fprintf( aFile, "ZoneGridSize %d\n", g_GridRoutingSize ); fprintf( aFile, "ZoneGridSize %d\n", g_GridRoutingSize );
#if defined(DEBUG)
fprintf( aFile, "Layers %d\n", aBoard->GetCopperLayerCount() ); fprintf( aFile, "Layers %d\n", aBoard->GetCopperLayerCount() );
for( int layer=0; layer<aBoard->GetCopperLayerCount(); ++layer ) for( int layer=0; layer<aBoard->GetCopperLayerCount(); ++layer )
{ {
fprintf( aFile, "Layer[%d] %s\n", layer, CONV_TO_UTF8( aBoard->GetLayerName(layer) ) ); fprintf( aFile, "Layer[%d] %s %s\n", layer,
CONV_TO_UTF8( aBoard->GetLayerName(layer) ),
LAYER::ShowType( aBoard->GetLayerType( layer ) ) );
} }
#else
fprintf( aFile, "Layers %d\n", g_DesignSettings.m_CopperLayerCount );
#endif
fprintf( aFile, "TrackWidth %d\n", g_DesignSettings.m_CurrentTrackWidth ); fprintf( aFile, "TrackWidth %d\n", g_DesignSettings.m_CurrentTrackWidth );
for( ii = 0; ii < HISTORY_NUMBER; ii++ ) for( ii = 0; ii < HISTORY_NUMBER; ii++ )
{ {
...@@ -1057,11 +1063,7 @@ int WinEDA_PcbFrame::SavePcbFormatAscii( FILE* aFile ) ...@@ -1057,11 +1063,7 @@ int WinEDA_PcbFrame::SavePcbFormatAscii( FILE* aFile )
WriteGeneralDescrPcb( aFile ); WriteGeneralDescrPcb( aFile );
WriteSheetDescr( m_CurrentScreen, aFile ); WriteSheetDescr( m_CurrentScreen, aFile );
WriteSetup( aFile, this WriteSetup( aFile, this, m_Pcb );
#if defined(DEBUG)
, m_Pcb
#endif
);
rc = m_Pcb->Save( aFile ); rc = m_Pcb->Save( aFile );
......
This diff is collapsed.
This diff is collapsed.
...@@ -75,7 +75,6 @@ bool WinEDA_App::OnInit() ...@@ -75,7 +75,6 @@ bool WinEDA_App::OnInit()
wxString Title = g_Main_Title + wxT( " " ) + GetBuildVersion(); wxString Title = g_Main_Title + wxT( " " ) + GetBuildVersion();
m_PcbFrame->SetTitle( Title ); m_PcbFrame->SetTitle( Title );
ActiveScreen = ScreenPcb; ActiveScreen = ScreenPcb;
m_PcbFrame->m_Pcb = new BOARD( NULL, m_PcbFrame );
SetTopWindow( m_PcbFrame ); SetTopWindow( m_PcbFrame );
m_PcbFrame->Show( TRUE ); m_PcbFrame->Show( TRUE );
......
This diff is collapsed.
...@@ -89,9 +89,12 @@ WinEDA_TextPCBPropertiesFrame::WinEDA_TextPCBPropertiesFrame( WinEDA_PcbFrame* p ...@@ -89,9 +89,12 @@ WinEDA_TextPCBPropertiesFrame::WinEDA_TextPCBPropertiesFrame( WinEDA_PcbFrame* p
DIALOG_STYLE ) DIALOG_STYLE )
/************************************************************************************/ /************************************************************************************/
{ {
wxButton* Button; wxButton* Button;
BOARD* board = parent->m_Pcb;
m_Parent = parent; m_Parent = parent;
SetFont( *g_DialogFont ); SetFont( *g_DialogFont );
m_DC = DC; m_DC = DC;
Centre(); Centre();
...@@ -139,16 +142,17 @@ WinEDA_TextPCBPropertiesFrame::WinEDA_TextPCBPropertiesFrame( WinEDA_PcbFrame* p ...@@ -139,16 +142,17 @@ WinEDA_TextPCBPropertiesFrame::WinEDA_TextPCBPropertiesFrame( WinEDA_PcbFrame* p
wxDefaultPosition, wxDefaultSize ); wxDefaultPosition, wxDefaultSize );
MiddleBoxSizer->Add( m_SelLayerBox, 0, wxGROW | wxALL, 5 ); MiddleBoxSizer->Add( m_SelLayerBox, 0, wxGROW | wxALL, 5 );
int ii; for( int layer=0; layer<NB_LAYERS; ++layer )
for( ii = 0; ii < NB_LAYERS; ii++ )
{ {
m_SelLayerBox->Append( ReturnPcbLayerName( ii ) ); m_SelLayerBox->Append( board->GetLayerName( layer ) );
} }
m_SelLayerBox->SetSelection( TextPCB->GetLayer() ); m_SelLayerBox->SetSelection( TextPCB->GetLayer() );
wxString orient_msg[4] = { wxT( "0" ), wxT( "90" ), wxT( "180" ), wxT( "-90" ) }; static const wxString orient_msg[4] = {
wxT( "0" ), wxT( "90" ), wxT( "180" ), wxT( "-90" ) };
m_Orient = new wxRadioBox( this, -1, _( "Orientation" ), m_Orient = new wxRadioBox( this, -1, _( "Orientation" ),
wxDefaultPosition, wxSize( -1, -1 ), 4, orient_msg, wxDefaultPosition, wxSize( -1, -1 ), 4, orient_msg,
1, wxRA_SPECIFY_COLS ); 1, wxRA_SPECIFY_COLS );
......
...@@ -71,12 +71,8 @@ void Trace_Pads_Only( WinEDA_DrawPanel* panel, wxDC* DC, MODULE* Module, int ox, ...@@ -71,12 +71,8 @@ void Trace_Pads_Only( WinEDA_DrawPanel* panel, wxDC* DC, MODULE* Module, int ox,
/* LOCATE.CPP : */ /* LOCATE.CPP : */
/****************/ /****************/
MODULE* ReturnModule( BOARD* Pcb, const wxString& name );
/* Recherche d'une empreinte par son nom */ /* Recherche d'une empreinte par son nom */
D_PAD* ReturnPad( MODULE* Module, const wxString& name );
/* Recherche d'un pad par son nom, pour le module Module */ /* Recherche d'un pad par son nom, pour le module Module */
TRACK* Locate_Via( BOARD* Pcb, const wxPoint& pos, int layer = -1 ); TRACK* Locate_Via( BOARD* Pcb, const wxPoint& pos, int layer = -1 );
...@@ -417,7 +413,7 @@ MODULE* ListAndSelectModuleName( COMMAND* Cmd ); ...@@ -417,7 +413,7 @@ MODULE* ListAndSelectModuleName( COMMAND* Cmd );
/*****************/ /*****************/
/* SET_COLOR.CPP */ /* SET_COLOR.CPP */
/*****************/ /*****************/
void DisplayColorSetupFrame( WinEDA_DrawFrame* parent, void DisplayColorSetupFrame( WinEDA_PcbFrame* parent,
const wxPoint& framepos ); const wxPoint& framepos );
......
...@@ -40,15 +40,15 @@ public: ...@@ -40,15 +40,15 @@ public:
private: private:
void Sel_Layer( wxCommandEvent& event ); void Sel_Layer( wxCommandEvent& event );
void OnCancelClick( wxCommandEvent& event ); void OnCancelClick( wxCommandEvent& event );
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
/* Table des evenements pour WinEDA_SelLayerFrame */ /* Table des evenements pour WinEDA_SelLayerFrame */
BEGIN_EVENT_TABLE( WinEDA_SelLayerFrame, wxDialog ) BEGIN_EVENT_TABLE( WinEDA_SelLayerFrame, wxDialog )
EVT_BUTTON( wxID_OK, WinEDA_SelLayerFrame::Sel_Layer ) EVT_BUTTON( wxID_OK, WinEDA_SelLayerFrame::Sel_Layer )
EVT_BUTTON( wxID_CANCEL, WinEDA_SelLayerFrame::OnCancelClick ) EVT_BUTTON( wxID_CANCEL, WinEDA_SelLayerFrame::OnCancelClick )
EVT_RADIOBOX( ID_LAYER_SELECT, WinEDA_SelLayerFrame::Sel_Layer ) EVT_RADIOBOX( ID_LAYER_SELECT, WinEDA_SelLayerFrame::Sel_Layer )
END_EVENT_TABLE() END_EVENT_TABLE()
...@@ -101,6 +101,7 @@ WinEDA_SelLayerFrame::WinEDA_SelLayerFrame( WinEDA_BasePcbFrame* parent, ...@@ -101,6 +101,7 @@ WinEDA_SelLayerFrame::WinEDA_SelLayerFrame( WinEDA_BasePcbFrame* parent,
* to the right of that radiobox. * to the right of that radiobox.
*/ */
{ {
BOARD* board = parent->m_Pcb;
wxButton* Button; wxButton* Button;
int ii; int ii;
wxString LayerList[NB_LAYERS + 1]; // One extra element for "(Deselect)" radiobutton wxString LayerList[NB_LAYERS + 1]; // One extra element for "(Deselect)" radiobutton
...@@ -123,7 +124,7 @@ WinEDA_SelLayerFrame::WinEDA_SelLayerFrame( WinEDA_BasePcbFrame* parent, ...@@ -123,7 +124,7 @@ WinEDA_SelLayerFrame::WinEDA_SelLayerFrame( WinEDA_BasePcbFrame* parent,
if( (max_layer >= 0) && (max_layer < ii) ) if( (max_layer >= 0) && (max_layer < ii) )
break; break;
LayerList[LayerCount] = ReturnPcbLayerName( ii ); LayerList[LayerCount] = board->GetLayerName( ii );
if( ii == default_layer ) if( ii == default_layer )
LayerSelect = LayerCount; LayerSelect = LayerCount;
...@@ -207,8 +208,8 @@ public: ...@@ -207,8 +208,8 @@ public:
~WinEDA_SelLayerPairFrame() { }; ~WinEDA_SelLayerPairFrame() { };
private: private:
void OnOkClick( wxCommandEvent& event ); void OnOkClick( wxCommandEvent& event );
void OnCancelClick( wxCommandEvent& event ); void OnCancelClick( wxCommandEvent& event );
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
...@@ -216,8 +217,8 @@ private: ...@@ -216,8 +217,8 @@ private:
/* Table des evenements pour WinEDA_SelLayerPairFrame */ /* Table des evenements pour WinEDA_SelLayerPairFrame */
BEGIN_EVENT_TABLE( WinEDA_SelLayerPairFrame, wxDialog ) BEGIN_EVENT_TABLE( WinEDA_SelLayerPairFrame, wxDialog )
EVT_BUTTON( wxID_OK, WinEDA_SelLayerPairFrame::OnOkClick ) EVT_BUTTON( wxID_OK, WinEDA_SelLayerPairFrame::OnOkClick )
EVT_BUTTON( wxID_CANCEL, WinEDA_SelLayerPairFrame::OnCancelClick ) EVT_BUTTON( wxID_CANCEL, WinEDA_SelLayerPairFrame::OnCancelClick )
END_EVENT_TABLE() END_EVENT_TABLE()
...@@ -249,8 +250,8 @@ void WinEDA_BasePcbFrame::SelectLayerPair() ...@@ -249,8 +250,8 @@ void WinEDA_BasePcbFrame::SelectLayerPair()
DrawPanel->MouseToCursorSchema(); DrawPanel->MouseToCursorSchema();
SetToolbars(); SetToolbars();
// if user changed colors and we are in high contrast mode, then redraw // if user changed colors and we are in high contrast mode, then redraw
// because the PAD_SMD pads may change color. // because the PAD_SMD pads may change color.
if( result >= 0 && DisplayOpt.ContrastModeDisplay ) if( result >= 0 && DisplayOpt.ContrastModeDisplay )
{ {
ReDrawPanel(); ReDrawPanel();
...@@ -264,6 +265,7 @@ WinEDA_SelLayerPairFrame::WinEDA_SelLayerPairFrame( WinEDA_BasePcbFrame* parent ...@@ -264,6 +265,7 @@ WinEDA_SelLayerPairFrame::WinEDA_SelLayerPairFrame( WinEDA_BasePcbFrame* parent
wxSize( 470, 250 ), DIALOG_STYLE ) wxSize( 470, 250 ), DIALOG_STYLE )
/*******************************************************************************/ /*******************************************************************************/
{ {
BOARD* board = parent->m_Pcb;
wxButton* Button; wxButton* Button;
int ii, LayerCount; int ii, LayerCount;
wxString LayerList[NB_COPPER_LAYERS]; wxString LayerList[NB_COPPER_LAYERS];
...@@ -281,7 +283,7 @@ WinEDA_SelLayerPairFrame::WinEDA_SelLayerPairFrame( WinEDA_BasePcbFrame* parent ...@@ -281,7 +283,7 @@ WinEDA_SelLayerPairFrame::WinEDA_SelLayerPairFrame( WinEDA_BasePcbFrame* parent
m_LayerId[ii] = 0; m_LayerId[ii] = 0;
if( (g_TabOneLayerMask[ii] & Masque_Layer) ) if( (g_TabOneLayerMask[ii] & Masque_Layer) )
{ {
LayerList[LayerCount] = ReturnPcbLayerName( ii ); LayerList[LayerCount] = board->GetLayerName( ii );
if( ii == screen->m_Route_Layer_TOP ) if( ii == screen->m_Route_Layer_TOP )
LayerTopSelect = LayerCount; LayerTopSelect = LayerCount;
if( ii == screen->m_Route_Layer_BOTTOM ) if( ii == screen->m_Route_Layer_BOTTOM )
......
...@@ -51,7 +51,7 @@ END_EVENT_TABLE() ...@@ -51,7 +51,7 @@ END_EVENT_TABLE()
/*****************************************************/ /*****************************************************/
void DisplayColorSetupFrame( WinEDA_DrawFrame* parent, void DisplayColorSetupFrame( WinEDA_PcbFrame* parent,
const wxPoint& framepos ) const wxPoint& framepos )
/*****************************************************/ /*****************************************************/
{ {
...@@ -72,7 +72,7 @@ WinEDA_SetColorsFrame::WinEDA_SetColorsFrame() ...@@ -72,7 +72,7 @@ WinEDA_SetColorsFrame::WinEDA_SetColorsFrame()
// Standard Constructor // Standard Constructor
WinEDA_SetColorsFrame::WinEDA_SetColorsFrame( WinEDA_DrawFrame* parent, WinEDA_SetColorsFrame::WinEDA_SetColorsFrame( WinEDA_PcbFrame* parent,
const wxPoint& framepos ) const wxPoint& framepos )
{ {
m_Parent = parent; m_Parent = parent;
...@@ -225,7 +225,7 @@ void WinEDA_SetColorsFrame::CreateControls() ...@@ -225,7 +225,7 @@ void WinEDA_SetColorsFrame::CreateControls()
if( laytool_list[lyr]->m_Title == wxT( "*" ) ) if( laytool_list[lyr]->m_Title == wxT( "*" ) )
msg = g_ViaType_Name[laytool_list[lyr]->m_LayerNumber]; msg = g_ViaType_Name[laytool_list[lyr]->m_LayerNumber];
else else
msg = ReturnPcbLayerName( laytool_list[lyr]->m_LayerNumber ); msg = m_Parent->m_Pcb->GetLayerName( laytool_list[lyr]->m_LayerNumber );
} }
else else
msg = wxGetTranslation( laytool_list[lyr]->m_Title.GetData() ); msg = wxGetTranslation( laytool_list[lyr]->m_Title.GetData() );
......
...@@ -492,7 +492,7 @@ static ColorButton* laytool_list[] = { ...@@ -492,7 +492,7 @@ static ColorButton* laytool_list[] = {
&VIA_THROUGH_Butt, &VIA_THROUGH_Butt,
&VIA_BLIND_BURIED_Butt, &VIA_BLIND_BURIED_Butt,
&MICRO_VIA_Butt, &MICRO_VIA_Butt,
&Ratsnest_Butt, &Ratsnest_Butt,
&Pad_Cu_Butt, &Pad_Cu_Butt,
&Pad_Cmp_Butt, &Pad_Cmp_Butt,
...@@ -526,7 +526,7 @@ private: ...@@ -526,7 +526,7 @@ private:
DECLARE_DYNAMIC_CLASS( WinEDA_SetColorsFrame ) DECLARE_DYNAMIC_CLASS( WinEDA_SetColorsFrame )
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
WinEDA_DrawFrame* m_Parent; WinEDA_PcbFrame* m_Parent;
wxBoxSizer* OuterBoxSizer; wxBoxSizer* OuterBoxSizer;
wxBoxSizer* MainBoxSizer; wxBoxSizer* MainBoxSizer;
wxFlexGridSizer* FlexColumnBoxSizer; wxFlexGridSizer* FlexColumnBoxSizer;
...@@ -566,7 +566,7 @@ private: ...@@ -566,7 +566,7 @@ private:
public: public:
// Constructors and destructor // Constructors and destructor
WinEDA_SetColorsFrame(); WinEDA_SetColorsFrame();
WinEDA_SetColorsFrame( WinEDA_DrawFrame* parent, const wxPoint& framepos ); WinEDA_SetColorsFrame( WinEDA_PcbFrame* parent, const wxPoint& framepos );
~WinEDA_SetColorsFrame(); ~WinEDA_SetColorsFrame();
}; };
......
...@@ -826,6 +826,17 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) throw( IOError ) ...@@ -826,6 +826,17 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) throw( IOError )
layer->name = layerIds[pcbNdx]; layer->name = layerIds[pcbNdx];
DSN_T layerType;
switch( aBoard->GetLayerType( pcbLayer2kicad[pcbNdx] ) )
{
default:
case LT_SIGNAL: layerType = T_signal; break;
case LT_POWER: layerType = T_power; break;
case LT_MIXED: layerType = T_mixed; break;
}
layer->layer_type = layerType;
layer->properties.push_back( PROPERTY() ); layer->properties.push_back( PROPERTY() );
PROPERTY* property = &layer->properties.back(); PROPERTY* property = &layer->properties.back();
property->name = "index"; property->name = "index";
......
...@@ -71,6 +71,8 @@ WinEDA_SwapLayerFrame::WinEDA_SwapLayerFrame( WinEDA_BasePcbFrame* parent ) : ...@@ -71,6 +71,8 @@ WinEDA_SwapLayerFrame::WinEDA_SwapLayerFrame( WinEDA_BasePcbFrame* parent ) :
wxDefaultSize, wxDEFAULT_DIALOG_STYLE|MAYBE_RESIZE_BORDER ) wxDefaultSize, wxDEFAULT_DIALOG_STYLE|MAYBE_RESIZE_BORDER )
/*************************************************************************/ /*************************************************************************/
{ {
BOARD* board = parent->m_Pcb;
OuterBoxSizer = NULL; OuterBoxSizer = NULL;
MainBoxSizer = NULL; MainBoxSizer = NULL;
FlexColumnBoxSizer = NULL; FlexColumnBoxSizer = NULL;
...@@ -154,7 +156,8 @@ WinEDA_SwapLayerFrame::WinEDA_SwapLayerFrame( WinEDA_BasePcbFrame* parent ) : ...@@ -154,7 +156,8 @@ WinEDA_SwapLayerFrame::WinEDA_SwapLayerFrame( WinEDA_BasePcbFrame* parent ) :
} }
// Provide a text string to identify this layer (with trailing spaces within that string being purged) // Provide a text string to identify this layer (with trailing spaces within that string being purged)
label = new wxStaticText( this, wxID_STATIC, ReturnPcbLayerName( ii ).Trim(), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); label = new wxStaticText( this, wxID_STATIC, board->GetLayerName( ii ),
wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
FlexColumnBoxSizer->Add(label, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxLEFT|wxBOTTOM, 5); FlexColumnBoxSizer->Add(label, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxLEFT|wxBOTTOM, 5);
// Provide a button for this layer (which will invoke a child dialog box) // Provide a button for this layer (which will invoke a child dialog box)
...@@ -177,11 +180,11 @@ WinEDA_SwapLayerFrame::WinEDA_SwapLayerFrame( WinEDA_BasePcbFrame* parent ) : ...@@ -177,11 +180,11 @@ WinEDA_SwapLayerFrame::WinEDA_SwapLayerFrame( WinEDA_BasePcbFrame* parent ) :
// strings to be truncated after different layers are selected.) // strings to be truncated after different layers are selected.)
if( ii == 0 ) if( ii == 0 )
{ {
text = new wxStaticText( this, item_ID, ReturnPcbLayerName( 0 ), wxDefaultPosition, wxDefaultSize, 0 ); text = new wxStaticText( this, item_ID, board->GetLayerName( 0 ), wxDefaultPosition, wxDefaultSize, 0 );
goodSize = text->GetSize(); goodSize = text->GetSize();
for( int jj = 1; jj < NB_LAYERS; jj++ ) for( int jj = 1; jj < NB_LAYERS; jj++ )
{ {
text->SetLabel( ReturnPcbLayerName( jj ) ); text->SetLabel( board->GetLayerName( jj ) );
if( goodSize.x < text->GetSize().x ) if( goodSize.x < text->GetSize().x )
goodSize.x = text->GetSize().x; goodSize.x = text->GetSize().x;
} }
...@@ -252,7 +255,7 @@ void WinEDA_SwapLayerFrame::Sel_Layer( wxCommandEvent& event ) ...@@ -252,7 +255,7 @@ void WinEDA_SwapLayerFrame::Sel_Layer( wxCommandEvent& event )
if( (jj < 0) || (jj > NB_LAYERS) ) if( (jj < 0) || (jj > NB_LAYERS) )
jj = LAYER_NO_CHANGE; // (Defaults to "No Change".) jj = LAYER_NO_CHANGE; // (Defaults to "No Change".)
jj = m_Parent->SelectLayer( jj, -1, -1, true ); jj = m_Parent->SelectLayer( jj, -1, -1, true );
if( (jj < 0) || (jj > NB_LAYERS) ) if( (jj < 0) || (jj > NB_LAYERS) )
return; return;
...@@ -280,7 +283,7 @@ void WinEDA_SwapLayerFrame::Sel_Layer( wxCommandEvent& event ) ...@@ -280,7 +283,7 @@ void WinEDA_SwapLayerFrame::Sel_Layer( wxCommandEvent& event )
} }
else else
{ {
layer_list[ii]->SetLabel( ReturnPcbLayerName( jj ) ); layer_list[ii]->SetLabel( m_Parent->m_Pcb->GetLayerName( jj ) );
// Change the text color to fushia (to highlight // Change the text color to fushia (to highlight
// that this layer *is* being swapped) // that this layer *is* being swapped)
layer_list[ii]->SetForegroundColour( wxColour(255, 0, 128) ); layer_list[ii]->SetForegroundColour( wxColour(255, 0, 128) );
......
...@@ -691,7 +691,7 @@ WinEDAChoiceBox* WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent ) ...@@ -691,7 +691,7 @@ WinEDAChoiceBox* WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent )
if( (g_TabOneLayerMask[ii] & Masque_Layer) ) if( (g_TabOneLayerMask[ii] & Masque_Layer) )
{ {
wxString msg = ReturnPcbLayerName( ii, false ); wxString msg = m_Pcb->GetLayerName( ii );
msg = AddHotkeyName( msg, s_Board_Editor_Hokeys_Descr, HK_SwitchLayer[ii] ); msg = AddHotkeyName( msg, s_Board_Editor_Hokeys_Descr, HK_SwitchLayer[ii] );
m_SelLayerBox->Append( msg ); m_SelLayerBox->Append( msg );
m_SelLayerBox->SetClientData( jj, (void*) ii ); m_SelLayerBox->SetClientData( jj, (void*) ii );
......
This diff is collapsed.
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