layer names in *.brd file

This commit is contained in:
dickelbeck 2008-03-04 04:22:27 +00:00
parent 7c482f68b3
commit 10e13ae50a
39 changed files with 1703 additions and 1547 deletions

View File

@ -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().

View File

@ -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 )
* (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 )
_( "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 )
} }
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
} }

View File

@ -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

View File

@ -20,13 +20,14 @@
/**************************************************/ /**************************************************/
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;
@ -38,8 +39,11 @@ wxString FullFileName = FileName ;
g_EDA_Appl->ReadProjectConfig( FullFileName, g_EDA_Appl->ReadProjectConfig( FullFileName,
GROUP, ParamCfgList, FALSE ); GROUP, ParamCfgList, FALSE );
if ( PkgInExtBuffer.IsEmpty() ) PkgInExtBuffer = wxT(".pkg"); if( PkgInExtBuffer.IsEmpty() )
if ( NetInExtBuffer.IsEmpty() ) NetInExtBuffer = wxT(".net"), PkgInExtBuffer = wxT( ".pkg" );
if( NetInExtBuffer.IsEmpty() )
NetInExtBuffer = wxT( ".net" );
/* Inits autres variables */ /* Inits autres variables */
SetRealLibraryPath( wxT( "modules" ) ); SetRealLibraryPath( wxT( "modules" ) );
@ -49,19 +53,22 @@ wxString FullFileName = FileName ;
/************************************************************/ /************************************************************/
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( "*" ) ); wxString mask( wxT( "*" ) );
FullFileName = FFileName; FullFileName = FFileName;
@ -77,9 +84,10 @@ wxString mask( wxT("*"));
wxFD_SAVE, wxFD_SAVE,
TRUE TRUE
); );
if ( FullFileName.IsEmpty()) return;
if( FullFileName.IsEmpty() )
return;
/* ecriture de la configuration */ /* ecriture de la configuration */
g_EDA_Appl->WriteProjectConfig( FullFileName, GROUP, ParamCfgList ); g_EDA_Appl->WriteProjectConfig( FullFileName, GROUP, ParamCfgList );
} }

View File

@ -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 )

View File

@ -16,13 +16,16 @@
#include "protos.h" #include "protos.h"
/* Routines Locales */
/* Variables locales */
#define HOTKEY_FILENAME wxT( "gerbview" ) #define HOTKEY_FILENAME wxT( "gerbview" )
/* Routines Locales */
/* Variables locales */
/*************************************************************/ /*************************************************************/
void WinEDA_GerberFrame::Process_Config( wxCommandEvent& event ) 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 )
{ {

View File

@ -14,6 +14,7 @@
/* 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 ButtonTable[32]; // Indexes buttons to Gerber layers
static int LayerLookUpTable[32]; // Indexes Gerber layers to PCB file layers static int LayerLookUpTable[32]; // Indexes Gerber layers to PCB file layers
wxStaticText* layer_list[32]; // Indexes text strings to buttons wxStaticText* layer_list[32]; // Indexes text strings to buttons
@ -75,6 +76,7 @@ int * InstallDialogLayerPairChoice(WinEDA_GerberFrame * parent)
*/ */
{ {
WinEDA_SwapLayerFrame * frame = new WinEDA_SwapLayerFrame(parent); WinEDA_SwapLayerFrame * frame = new WinEDA_SwapLayerFrame(parent);
int ii = frame->ShowModal(); int ii = frame->ShowModal();
frame->Destroy(); frame->Destroy();
if( ii >= 0 ) if( ii >= 0 )
@ -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;

View File

@ -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:
// 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

View File

@ -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;

View File

@ -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 )
/**************************************/ /**************************************/

View File

@ -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,29 +86,97 @@ 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) );) {
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 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() )
{
m_Layer[aLayerIndex].m_Type = aLayerType;
return true; 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);
}
int BOARD::GetCopperLayerCount() const int BOARD::GetCopperLayerCount() const

View File

@ -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:
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:
return wxT( "BOARD" ); return wxT( "BOARD" );
} }
#if defined(DEBUG) #if defined(DEBUG)
/** /**
* Function Show * Function Show

View File

@ -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 )
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 );

View File

@ -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 )
} }
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[] )

View File

@ -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

View File

@ -167,6 +167,9 @@ 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 )
@ -175,7 +178,7 @@ void TEXTE_PCB::Display_Infos( WinEDA_DrawFrame* frame )
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 );

View File

@ -338,9 +338,14 @@ void TEXTE_MODULE::Display_Infos( WinEDA_DrawFrame* frame )
MODULE* module = (MODULE*) m_Parent; MODULE* module = (MODULE*) m_Parent;
wxASSERT( module );
if( !module ) if( !module )
return; return;
BOARD* board = (BOARD*) module->m_Parent;
wxASSERT( board );
static const wxString text_type_msg[3] = { static const wxString text_type_msg[3] = {
_( "Ref." ), _( "Value" ), _( "Text" ) }; _( "Ref." ), _( "Value" ), _( "Text" ) };
@ -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 );

View File

@ -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 )
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;

View File

@ -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()
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()
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)

View File

@ -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 );

View File

@ -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 )
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();

View File

@ -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
@ -310,18 +312,22 @@ void WinEDA_ZoneFrame::CreateControls()
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 ) if( m_Zone_Container->GetLayer() == layer_number )
@ -335,15 +341,18 @@ void WinEDA_ZoneFrame::CreateControls()
} }
m_NetSortingOption->SetSelection(m_NetSorting == BOARD::ALPHA_SORT ? 0 : 1 ); m_NetSortingOption->SetSelection(m_NetSorting == BOARD::ALPHA_SORT ? 0 : 1 );
wxString NetNameFilter; wxString NetNameFilter;
if( m_Parent->m_Parent->m_EDA_Config ) 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(); wxString Filter = m_NetNameFilter->GetValue();
@ -363,6 +372,7 @@ void WinEDA_ZoneFrame::CreateControls()
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 );
@ -563,7 +573,6 @@ void WinEDA_ZoneFrame::OnNetSortingOptionSelected( wxCommandEvent& event )
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() );
} }
} }

View File

@ -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;

View File

@ -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 )
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 */

View File

@ -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);
if( data )
{
wxString layerName = CONV_FROM_UTF8( data ); wxString layerName = CONV_FROM_UTF8( data );
m_Pcb->SetLayerName( layer, layerName ); 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 )
#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
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 )
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 );

View File

@ -27,55 +27,6 @@ wxPoint inline RefPos( int typeloc )
} }
/*************************************************************/
MODULE* ReturnModule( BOARD* pcb, const wxString& reference )
/*************************************************************/
/*
* Recherche d'un module par sa reference
* Retourne:
* un pointeur sur le module
* Null si pas localis<EFBFBD>
*/
{
MODULE* Module = pcb->m_Modules;
for( ; Module != NULL; Module = (MODULE*) Module->Pnext )
{
if( reference.CmpNoCase( Module->m_Reference->m_Text ) == 0 )
return Module;
}
return NULL;
}
/********************************************************/
D_PAD* ReturnPad( MODULE* module, const wxString& name )
/********************************************************/
/* Recherche d'un pad par son nom, pour le module Module
*/
{
D_PAD* pt_pad;
wxString buf;
if( module == NULL )
return NULL;
pt_pad = module->m_Pads;
for( ; pt_pad != NULL; pt_pad = (D_PAD*) pt_pad->Pnext )
{
pt_pad->ReturnStringPadName( buf );
if( buf.CmpNoCase( name ) == 0 )
return pt_pad;
}
return NULL;
}
/*******************************************************************/ /*******************************************************************/
TRACK* Locate_Via( BOARD* Pcb, const wxPoint& pos, int layer ) TRACK* Locate_Via( BOARD* Pcb, const wxPoint& pos, int layer )
/*******************************************************************/ /*******************************************************************/

View File

@ -201,6 +201,8 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father, WinEDA_App* parent,
m_drc = new DRC( this ); // these 2 objects point to each other m_drc = new DRC( this ); // these 2 objects point to each other
SetBOARD( new BOARD( NULL, this ) );
m_DisplayPcbTrackFill = DisplayOpt.DisplayPcbTrackFill; m_DisplayPcbTrackFill = DisplayOpt.DisplayPcbTrackFill;
m_DisplayPadFill = DisplayOpt.DisplayPadFill; m_DisplayPadFill = DisplayOpt.DisplayPadFill;
m_DisplayPadNum = DisplayOpt.DisplayPadNum; m_DisplayPadNum = DisplayOpt.DisplayPadNum;
@ -247,6 +249,7 @@ WinEDA_PcbFrame::~WinEDA_PcbFrame()
m_Parent->m_PcbFrame = NULL; m_Parent->m_PcbFrame = NULL;
m_CurrentScreen = ScreenPcb; m_CurrentScreen = ScreenPcb;
delete m_drc; delete m_drc;
delete m_Pcb;
} }

View File

@ -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 );

View File

@ -28,8 +28,7 @@ static bool s_PlotOriginIsAuxAxis = FALSE;
// Routines Locales // Routines Locales
enum id_plotps enum id_plotps {
{
ID_CLOSE_PLOT = 8020, ID_CLOSE_PLOT = 8020,
ID_DRILL_SHAPE_OPT, ID_DRILL_SHAPE_OPT,
ID_SCALE_OPT, ID_SCALE_OPT,
@ -99,6 +98,7 @@ private:
void SetCommands( wxCommandEvent& event ); void SetCommands( wxCommandEvent& event );
void SaveOptPlot( wxCommandEvent& event ); void SaveOptPlot( wxCommandEvent& event );
void CreateDrillFile( wxCommandEvent& event ); void CreateDrillFile( wxCommandEvent& event );
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
@ -126,30 +126,45 @@ wxButton * Button;
int ii; int ii;
m_Parent = parent; m_Parent = parent;
BOARD* board = parent->m_Pcb;
SetFont( *g_DialogFont ); SetFont( *g_DialogFont );
Centre(); Centre();
m_PlotFormat = format_plot; m_PlotFormat = format_plot;
m_Plot_Sheet_Ref = NULL; m_Plot_Sheet_Ref = NULL;
wxBoxSizer* MainBoxSizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* MainBoxSizer = new wxBoxSizer( wxHORIZONTAL );
SetSizer( MainBoxSizer ); SetSizer( MainBoxSizer );
wxBoxSizer* RightBoxSizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* RightBoxSizer = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* MidRightBoxSizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* MidRightBoxSizer = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* MidLeftBoxSizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* MidLeftBoxSizer = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* LeftBoxSizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* LeftBoxSizer = new wxBoxSizer( wxVERTICAL );
MainBoxSizer->Add( LeftBoxSizer, 0, wxGROW | wxALL, 5 ); MainBoxSizer->Add( LeftBoxSizer, 0, wxGROW | wxALL, 5 );
MainBoxSizer->Add( MidLeftBoxSizer, 0, wxGROW | wxALL, 5 ); MainBoxSizer->Add( MidLeftBoxSizer, 0, wxGROW | wxALL, 5 );
MainBoxSizer->Add( MidRightBoxSizer, 0, wxGROW | wxALL, 5 ); MainBoxSizer->Add( MidRightBoxSizer, 0, wxGROW | wxALL, 5 );
MainBoxSizer->Add( RightBoxSizer, 0, wxGROW | wxALL, 5 ); MainBoxSizer->Add( RightBoxSizer, 0, wxGROW | wxALL, 5 );
wxBoxSizer* LayersBoxSizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* LayersBoxSizer = new wxBoxSizer( wxHORIZONTAL );
LeftBoxSizer->Add( LayersBoxSizer, 0, wxGROW | wxALL, 5 ); LeftBoxSizer->Add( LayersBoxSizer, 0, wxGROW | wxALL, 5 );
wxString fmtmsg[4] = { wxT("HPGL"), wxT("Gerber"), wxT("Postscript"), wxT("Postscript A4") }; static const wxString fmtmsg[4] = {
wxT( "HPGL" ), wxT( "Gerber" ), wxT( "Postscript" ), wxT( "Postscript A4" )
};
m_PlotFormatOpt = new wxRadioBox( this, ID_SEL_PLOT_FORMAT, m_PlotFormatOpt = new wxRadioBox( this, ID_SEL_PLOT_FORMAT,
_( "Plot Format" ), wxDefaultPosition, wxSize( -1, -1 ), _( "Plot Format" ), wxDefaultPosition, wxSize( -1, -1 ),
4, fmtmsg, 1, wxRA_SPECIFY_COLS ); 4, fmtmsg, 1, wxRA_SPECIFY_COLS );
MidRightBoxSizer->Add( m_PlotFormatOpt, 0, wxGROW | wxALL, 5 ); MidRightBoxSizer->Add( m_PlotFormatOpt, 0, wxGROW | wxALL, 5 );
switch( m_PlotFormat ) switch( m_PlotFormat )
{ {
case PLOT_FORMAT_HPGL: case PLOT_FORMAT_HPGL:
@ -174,32 +189,42 @@ wxString fmtmsg[4] = { wxT("HPGL"), wxT("Gerber"), wxT("Postscript"), wxT("Posts
// Creation des menus d'option du format GERBER // Creation des menus d'option du format GERBER
m_GerbSpotSizeMinOpt = new WinEDA_ValueCtrl( this, _( "Spot min" ), m_GerbSpotSizeMinOpt = new WinEDA_ValueCtrl( this, _( "Spot min" ),
spot_mini, g_UnitMetric, MidRightBoxSizer, UNITS_MILS); spot_mini, g_UnitMetric, MidRightBoxSizer,
UNITS_MILS );
// Creation des menus d'option du format HPGL // Creation des menus d'option du format HPGL
m_HPGLPenSizeOpt = new WinEDA_ValueCtrl( this, _( "Pen Size" ), m_HPGLPenSizeOpt = new WinEDA_ValueCtrl( this, _( "Pen Size" ),
g_HPGL_Pen_Diam, g_UnitMetric, MidRightBoxSizer, UNITS_MILS); g_HPGL_Pen_Diam, g_UnitMetric, MidRightBoxSizer,
UNITS_MILS );
// unites standards = cm pour vitesse plume en HPGL // unites standards = cm pour vitesse plume en HPGL
m_HPGLPenSpeedOpt = new WinEDA_ValueCtrl( this, _( "Pen Speed (cm/s)" ), m_HPGLPenSpeedOpt = new WinEDA_ValueCtrl( this, _( "Pen Speed (cm/s)" ),
g_HPGL_Pen_Speed, CENTIMETRE, MidRightBoxSizer, 1); g_HPGL_Pen_Speed, CENTIMETRE, MidRightBoxSizer,
1 );
m_HPGLPenSpeedOpt->SetToolTip( _( "Set pen speed in cm/s" ) ); m_HPGLPenSpeedOpt->SetToolTip( _( "Set pen speed in cm/s" ) );
m_HPGLPenOverlayOpt = new WinEDA_ValueCtrl( this, _( "Pen Ovr" ), m_HPGLPenOverlayOpt = new WinEDA_ValueCtrl( this, _( "Pen Ovr" ),
g_HPGL_Pen_Recouvrement, g_UnitMetric, MidRightBoxSizer, UNITS_MILS); g_HPGL_Pen_Recouvrement, g_UnitMetric,
MidRightBoxSizer, UNITS_MILS );
m_HPGLPenOverlayOpt->SetToolTip( _( "Set plot overlay for filling" ) ); m_HPGLPenOverlayOpt->SetToolTip( _( "Set plot overlay for filling" ) );
m_LinesWidth = new WinEDA_ValueCtrl( this, _( "Lines Width" ), m_LinesWidth = new WinEDA_ValueCtrl( this, _( "Lines Width" ),
g_PlotLine_Width, g_UnitMetric, MidRightBoxSizer, PCB_INTERNAL_UNIT); g_PlotLine_Width, g_UnitMetric, MidRightBoxSizer,
PCB_INTERNAL_UNIT );
m_LinesWidth->SetToolTip( _( "Set width for lines in Line plot mode" ) ); m_LinesWidth->SetToolTip( _( "Set width for lines in Line plot mode" ) );
// Create the right column commands // Create the right column commands
wxString choice_plot_offset_msg[] = static const wxString choice_plot_offset_msg[] =
{ _( "Absolute" ), _( "Auxiliary axis" ) }; { _( "Absolute" ), _( "Auxiliary axis" ) };
m_Choice_Plot_Offset = new wxRadioBox( this, ID_SEL_PLOT_OFFSET_OPTION, m_Choice_Plot_Offset = new wxRadioBox( this, ID_SEL_PLOT_OFFSET_OPTION,
_( "Plot Origin" ), _( "Plot Origin" ),
wxDefaultPosition, wxSize( -1, -1 ), wxDefaultPosition, wxSize( -1, -1 ),
2, choice_plot_offset_msg, 1, wxRA_SPECIFY_COLS ); 2, choice_plot_offset_msg, 1, wxRA_SPECIFY_COLS );
if( s_PlotOriginIsAuxAxis ) if( s_PlotOriginIsAuxAxis )
m_Choice_Plot_Offset->SetSelection( 1 ); m_Choice_Plot_Offset->SetSelection( 1 );
RightBoxSizer->Add( m_Choice_Plot_Offset, 0, wxGROW | wxALL, 5 ); RightBoxSizer->Add( m_Choice_Plot_Offset, 0, wxGROW | wxALL, 5 );
@ -208,18 +233,22 @@ wxString choice_plot_offset_msg[] =
/* Create the command buttons */ /* Create the command buttons */
Button = new wxButton( this, ID_EXEC_PLOT, _( "Plot" ) ); Button = new wxButton( this, ID_EXEC_PLOT, _( "Plot" ) );
Button->SetForegroundColour( *wxRED ); Button->SetForegroundColour( *wxRED );
RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 ); RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
Button = new wxButton( this, ID_CLOSE_PLOT, _( "Close" ) ); Button = new wxButton( this, ID_CLOSE_PLOT, _( "Close" ) );
Button->SetForegroundColour( *wxBLUE ); Button->SetForegroundColour( *wxBLUE );
RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 ); RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
Button = new wxButton( this, ID_SAVE_OPT_PLOT, _( "Save options" ) ); Button = new wxButton( this, ID_SAVE_OPT_PLOT, _( "Save options" ) );
Button->SetForegroundColour( wxColour( 0, 80, 0 ) ); Button->SetForegroundColour( wxColour( 0, 80, 0 ) );
RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 ); RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
Button = new wxButton( this, ID_CREATE_DRILL_FILE, _( "Create Drill File" ) ); Button = new wxButton( this, ID_CREATE_DRILL_FILE, _( "Create Drill File" ) );
Button->SetForegroundColour( wxColour( 0, 80, 80 ) ); Button->SetForegroundColour( wxColour( 0, 80, 80 ) );
RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 ); RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
@ -231,28 +260,39 @@ wxString choice_plot_offset_msg[] =
m_Parent->m_Parent->m_EDA_Config->Read( PLOT_XFINESCALE_ADJ_KEY, &m_XScaleAdjust ); m_Parent->m_Parent->m_EDA_Config->Read( PLOT_XFINESCALE_ADJ_KEY, &m_XScaleAdjust );
m_Parent->m_Parent->m_EDA_Config->Read( PLOT_XFINESCALE_ADJ_KEY, &m_YScaleAdjust ); m_Parent->m_Parent->m_EDA_Config->Read( PLOT_XFINESCALE_ADJ_KEY, &m_YScaleAdjust );
} }
m_FineAdjustXscaleOpt = new WinEDA_DFloatValueCtrl(this, _("X Scale Adjust"), m_XScaleAdjust, RightBoxSizer); m_FineAdjustXscaleOpt = new WinEDA_DFloatValueCtrl( this, _(
"X Scale Adjust" ), m_XScaleAdjust,
RightBoxSizer );
m_FineAdjustXscaleOpt->SetToolTip( _( "Set X scale adjust for exact scale plotting" ) ); m_FineAdjustXscaleOpt->SetToolTip( _( "Set X scale adjust for exact scale plotting" ) );
m_FineAdjustYscaleOpt = new WinEDA_DFloatValueCtrl(this, _("Y Scale Adjust"), m_YScaleAdjust, RightBoxSizer); m_FineAdjustYscaleOpt = new WinEDA_DFloatValueCtrl( this, _(
"Y Scale Adjust" ), m_YScaleAdjust,
RightBoxSizer );
m_FineAdjustYscaleOpt->SetToolTip( _( "Set Y scale adjust for exact scale plotting" ) ); m_FineAdjustYscaleOpt->SetToolTip( _( "Set Y scale adjust for exact scale plotting" ) );
m_Plot_PS_Negative = new wxCheckBox( this, -1, _( "Plot Negative" ) ); m_Plot_PS_Negative = new wxCheckBox( this, -1, _( "Plot Negative" ) );
m_Plot_PS_Negative->SetValue( g_Plot_PS_Negative ); m_Plot_PS_Negative->SetValue( g_Plot_PS_Negative );
RightBoxSizer->Add( m_Plot_PS_Negative, 0, wxGROW | wxALL, 5 ); RightBoxSizer->Add( m_Plot_PS_Negative, 0, wxGROW | wxALL, 5 );
// Creation de la liste des layers // Creation de la liste des layers
int mask = 1; int mask = 1;
wxBoxSizer* OneColonLayerBoxSizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* OneColonLayerBoxSizer = new wxBoxSizer( wxVERTICAL );
LayersBoxSizer->Add( OneColonLayerBoxSizer, 0, wxGROW | wxALL, 5 ); LayersBoxSizer->Add( OneColonLayerBoxSizer, 0, wxGROW | wxALL, 5 );
for( ii = 0; ii < NB_LAYERS; ii++, mask <<= 1 ) for( ii = 0; ii < NB_LAYERS; ii++, mask <<= 1 )
{ {
if( ii == 16 ) if( ii == 16 )
{ {
OneColonLayerBoxSizer = new wxBoxSizer( wxVERTICAL ); OneColonLayerBoxSizer = new wxBoxSizer( wxVERTICAL );
LayersBoxSizer->Add( OneColonLayerBoxSizer, 0, wxGROW | wxALL, 5 ); LayersBoxSizer->Add( OneColonLayerBoxSizer, 0, wxGROW | wxALL, 5 );
} }
m_BoxSelecLayer[ii] = new wxCheckBox(this, -1, ReturnPcbLayerName(ii)); m_BoxSelecLayer[ii] = new wxCheckBox( this, -1, board->GetLayerName (ii) );
if( mask & s_SelectedLayers ) if( mask & s_SelectedLayers )
m_BoxSelecLayer[ii]->SetValue( true ); m_BoxSelecLayer[ii]->SetValue( true );
OneColonLayerBoxSizer->Add( m_BoxSelecLayer[ii], 0, wxGROW | wxALL, 1 ); OneColonLayerBoxSizer->Add( m_BoxSelecLayer[ii], 0, wxGROW | wxALL, 1 );
@ -262,6 +302,7 @@ wxString choice_plot_offset_msg[] =
m_Exclude_Edges_Pcb = new wxCheckBox( this, m_Exclude_Edges_Pcb = new wxCheckBox( this,
ID_EXCLUDE_EDGES_PCB, _( "Exclude Edges Pcb Layer" ) ); ID_EXCLUDE_EDGES_PCB, _( "Exclude Edges Pcb Layer" ) );
m_Exclude_Edges_Pcb->SetValue( g_Exclude_Edges_Pcb ); m_Exclude_Edges_Pcb->SetValue( g_Exclude_Edges_Pcb );
m_Exclude_Edges_Pcb->SetToolTip( m_Exclude_Edges_Pcb->SetToolTip(
_( "Exclude contents of Edges Pcb layer from all other layers" ) ); _( "Exclude contents of Edges Pcb layer from all other layers" ) );
@ -271,6 +312,7 @@ wxString choice_plot_offset_msg[] =
if( m_Parent->m_Print_Sheet_Ref ) if( m_Parent->m_Print_Sheet_Ref )
{ {
m_Plot_Sheet_Ref = new wxCheckBox( this, ID_PRINT_REF, _( "Print Sheet Ref" ) ); m_Plot_Sheet_Ref = new wxCheckBox( this, ID_PRINT_REF, _( "Print Sheet Ref" ) );
m_Plot_Sheet_Ref->SetValue( Plot_Sheet_Ref ); m_Plot_Sheet_Ref->SetValue( Plot_Sheet_Ref );
LeftBoxSizer->Add( m_Plot_Sheet_Ref, 0, wxGROW | wxALL, 1 ); LeftBoxSizer->Add( m_Plot_Sheet_Ref, 0, wxGROW | wxALL, 1 );
} }
@ -279,7 +321,9 @@ wxString choice_plot_offset_msg[] =
// Option d'impression des pads sur toutes les couches // Option d'impression des pads sur toutes les couches
m_Plot_Pads_on_Silkscreen = new wxCheckBox( this, m_Plot_Pads_on_Silkscreen = new wxCheckBox( this,
ID_PRINT_PAD_ON_SILKSCREEN, _("Print Pads on Silkscreen") ); ID_PRINT_PAD_ON_SILKSCREEN, _(
"Print Pads on Silkscreen" ) );
m_Plot_Pads_on_Silkscreen->SetValue( PlotPadsOnSilkLayer ); m_Plot_Pads_on_Silkscreen->SetValue( PlotPadsOnSilkLayer );
m_Plot_Pads_on_Silkscreen->SetToolTip( m_Plot_Pads_on_Silkscreen->SetToolTip(
_( "Enable/disable print/plot pads on Silkscreen layers" ) ); _( "Enable/disable print/plot pads on Silkscreen layers" ) );
@ -287,18 +331,21 @@ wxString choice_plot_offset_msg[] =
m_Force_Plot_Pads = new wxCheckBox( this, ID_FORCE_PRINT_PAD, m_Force_Plot_Pads = new wxCheckBox( this, ID_FORCE_PRINT_PAD,
_( "Always Print Pads" ) ); _( "Always Print Pads" ) );
m_Force_Plot_Pads->SetValue( Plot_Pads_All_Layers ); m_Force_Plot_Pads->SetValue( Plot_Pads_All_Layers );
m_Force_Plot_Pads->SetToolTip( _( "Force print/plot pads on ALL layers" ) ); m_Force_Plot_Pads->SetToolTip( _( "Force print/plot pads on ALL layers" ) );
LeftBoxSizer->Add( m_Force_Plot_Pads, 0, wxGROW | wxALL, 1 ); LeftBoxSizer->Add( m_Force_Plot_Pads, 0, wxGROW | wxALL, 1 );
// Options d'impression des textes modules // Options d'impression des textes modules
m_Plot_Text_Value = new wxCheckBox( this, ID_PRINT_VALUE, _( "Print Module Value" ) ); m_Plot_Text_Value = new wxCheckBox( this, ID_PRINT_VALUE, _( "Print Module Value" ) );
m_Plot_Text_Value->SetValue( Sel_Texte_Valeur ); m_Plot_Text_Value->SetValue( Sel_Texte_Valeur );
m_Plot_Text_Value->SetToolTip( m_Plot_Text_Value->SetToolTip(
_( "Enable/disable print/plot module value on Silkscreen layers" ) ); _( "Enable/disable print/plot module value on Silkscreen layers" ) );
LeftBoxSizer->Add( m_Plot_Text_Value, 0, wxGROW | wxALL, 1 ); LeftBoxSizer->Add( m_Plot_Text_Value, 0, wxGROW | wxALL, 1 );
m_Plot_Text_Ref = new wxCheckBox( this, ID_PRINT_REF, _( "Print Module Reference" ) ); m_Plot_Text_Ref = new wxCheckBox( this, ID_PRINT_REF, _( "Print Module Reference" ) );
m_Plot_Text_Ref->SetValue( Sel_Texte_Reference ); m_Plot_Text_Ref->SetValue( Sel_Texte_Reference );
m_Plot_Text_Ref->SetToolTip( m_Plot_Text_Ref->SetToolTip(
_( "Enable/disable print/plot module reference on Silkscreen layers" ) ); _( "Enable/disable print/plot module reference on Silkscreen layers" ) );
@ -306,48 +353,57 @@ wxString choice_plot_offset_msg[] =
m_Plot_Text_Div = new wxCheckBox( this, ID_PRINT_MODULE_TEXTS, m_Plot_Text_Div = new wxCheckBox( this, ID_PRINT_MODULE_TEXTS,
_( "Print other Module texts" ) ); _( "Print other Module texts" ) );
m_Plot_Text_Div->SetValue( Sel_Texte_Divers ); m_Plot_Text_Div->SetValue( Sel_Texte_Divers );
m_Plot_Text_Div->SetToolTip( m_Plot_Text_Div->SetToolTip(
_( "Enable/disable print/plot module field texts on Silkscreen layers" ) ); _( "Enable/disable print/plot module field texts on Silkscreen layers" ) );
LeftBoxSizer->Add( m_Plot_Text_Div, 0, wxGROW | wxALL, 1 ); LeftBoxSizer->Add( m_Plot_Text_Div, 0, wxGROW | wxALL, 1 );
m_Plot_Invisible_Text = new wxCheckBox( this, m_Plot_Invisible_Text = new wxCheckBox( this,
ID_FORCE_PRINT_INVISIBLE_TEXT, _("Force Print Invisible Texts") ); ID_FORCE_PRINT_INVISIBLE_TEXT, _(
"Force Print Invisible Texts" ) );
m_Plot_Invisible_Text->SetValue( Sel_Texte_Invisible ); m_Plot_Invisible_Text->SetValue( Sel_Texte_Invisible );
m_Plot_Invisible_Text->SetToolTip( m_Plot_Invisible_Text->SetToolTip(
_( "Force print/plot module invisible texts on Silkscreen layers" ) ); _( "Force print/plot module invisible texts on Silkscreen layers" ) );
LeftBoxSizer->Add( m_Plot_Invisible_Text, 0, wxGROW | wxALL, 1 ); LeftBoxSizer->Add( m_Plot_Invisible_Text, 0, wxGROW | wxALL, 1 );
wxString drillmsg[3] = { _("No Drill mark"), _("Small mark"), _("Real Drill") }; static const wxString drillmsg[3] = { _( "No Drill mark" ), _( "Small mark" ), _( "Real Drill" ) };
m_Drill_Shape_Opt = new wxRadioBox( this, ID_DRILL_SHAPE_OPT, m_Drill_Shape_Opt = new wxRadioBox( this, ID_DRILL_SHAPE_OPT,
_( "Pads Drill Opt" ), wxDefaultPosition, wxSize( -1, -1 ), _( "Pads Drill Opt" ), wxDefaultPosition, wxSize( -1, -1 ),
3, drillmsg, 1, wxRA_SPECIFY_COLS ); 3, drillmsg, 1, wxRA_SPECIFY_COLS );
m_Drill_Shape_Opt->SetSelection( g_DrillShapeOpt ); m_Drill_Shape_Opt->SetSelection( g_DrillShapeOpt );
MidLeftBoxSizer->Add( m_Drill_Shape_Opt, 0, wxGROW | wxALL, 5 ); MidLeftBoxSizer->Add( m_Drill_Shape_Opt, 0, wxGROW | wxALL, 5 );
wxString scalemsg[5] = static const wxString scalemsg[5] =
{ _( "Auto scale" ), _( "Scale 1" ), _( "Scale 1.5" ), _( "Scale 2" ), _( "Scale 3" ) }; { _( "Auto scale" ), _( "Scale 1" ), _( "Scale 1.5" ), _( "Scale 2" ), _( "Scale 3" ) };
m_Scale_Opt = new wxRadioBox( this, ID_SCALE_OPT, m_Scale_Opt = new wxRadioBox( this, ID_SCALE_OPT,
_( "Scale Opt" ), wxDefaultPosition, wxSize( -1, -1 ), _( "Scale Opt" ), wxDefaultPosition, wxSize( -1, -1 ),
5, scalemsg, 1, wxRA_SPECIFY_COLS ); 5, scalemsg, 1, wxRA_SPECIFY_COLS );
m_Scale_Opt->SetSelection( g_PlotScaleOpt ); m_Scale_Opt->SetSelection( g_PlotScaleOpt );
MidLeftBoxSizer->Add( m_Scale_Opt, 0, wxGROW | wxALL, 5 ); MidLeftBoxSizer->Add( m_Scale_Opt, 0, wxGROW | wxALL, 5 );
wxString list_opt3[3] = {_("Line"), _("Filled"), _("Sketch") }; static const wxString list_opt3[3] = { _( "Line" ), _( "Filled" ), _( "Sketch" ) };
m_PlotModeOpt = new wxRadioBox( this, ID_PLOT_MODE_OPT, _( "Plot Mode" ), m_PlotModeOpt = new wxRadioBox( this, ID_PLOT_MODE_OPT, _( "Plot Mode" ),
wxDefaultPosition, wxDefaultSize, wxDefaultPosition, wxDefaultSize,
3, list_opt3, 1 ); 3, list_opt3, 1 );
m_PlotModeOpt->SetSelection( Plot_Mode ); m_PlotModeOpt->SetSelection( Plot_Mode );
MidLeftBoxSizer->Add( m_PlotModeOpt, 0, wxGROW | wxALL, 5 ); MidLeftBoxSizer->Add( m_PlotModeOpt, 0, wxGROW | wxALL, 5 );
m_PlotMirorOpt = new wxCheckBox( this, ID_MIROR_OPT, m_PlotMirorOpt = new wxCheckBox( this, ID_MIROR_OPT,
_( "Plot Mirror" ) ); _( "Plot Mirror" ) );
m_PlotMirorOpt->SetValue( Plot_Set_MIROIR ); m_PlotMirorOpt->SetValue( Plot_Set_MIROIR );
MidLeftBoxSizer->Add( m_PlotMirorOpt, 0, wxGROW | wxALL, 5 ); MidLeftBoxSizer->Add( m_PlotMirorOpt, 0, wxGROW | wxALL, 5 );
m_PlotNoViaOnMaskOpt = new wxCheckBox( this, ID_MASKVIA_OPT, m_PlotNoViaOnMaskOpt = new wxCheckBox( this, ID_MASKVIA_OPT,
_( "Vias on Mask" ) ); _( "Vias on Mask" ) );
m_PlotNoViaOnMaskOpt->SetValue( g_DrawViaOnMaskLayer ); m_PlotNoViaOnMaskOpt->SetValue( g_DrawViaOnMaskLayer );
m_PlotNoViaOnMaskOpt->SetToolTip( m_PlotNoViaOnMaskOpt->SetToolTip(
_( "Print/plot vias on mask layers. They are in this case not protected" ) ); _( "Print/plot vias on mask layers. They are in this case not protected" ) );
@ -355,9 +411,11 @@ wxString list_opt3[3] = {_("Line"), _("Filled"), _("Sketch") };
m_HPGL_PlotCenter_Opt = new wxCheckBox( this, ID_PLOT_CENTRE_OPT, m_HPGL_PlotCenter_Opt = new wxCheckBox( this, ID_PLOT_CENTRE_OPT,
_( "Org = Centre" ) ); _( "Org = Centre" ) );
m_HPGL_PlotCenter_Opt->SetValue( HPGL_Org_Centre ); m_HPGL_PlotCenter_Opt->SetValue( HPGL_Org_Centre );
m_HPGL_PlotCenter_Opt->SetToolTip( _( "Draw origin ( 0,0 ) in sheet center" ) ); m_HPGL_PlotCenter_Opt->SetToolTip( _( "Draw origin ( 0,0 ) in sheet center" ) );
MidLeftBoxSizer->Add( m_HPGL_PlotCenter_Opt, 0, wxGROW | wxALL, 5 ); MidLeftBoxSizer->Add( m_HPGL_PlotCenter_Opt, 0, wxGROW | wxALL, 5 );
// Mise a jour des activations des menus: // Mise a jour des activations des menus:
wxCommandEvent event; wxCommandEvent event;
SetCommands( event ); SetCommands( event );
@ -408,8 +466,10 @@ void WinEDA_PlotFrame::SetCommands(wxCommandEvent & event)
*/ */
{ {
int format; int format;
int format_list[] =
{PLOT_FORMAT_HPGL, PLOT_FORMAT_GERBER, PLOT_FORMAT_POST, PLOT_FORMAT_POST_A4 static const int format_list[] = {
PLOT_FORMAT_HPGL, PLOT_FORMAT_GERBER,
PLOT_FORMAT_POST, PLOT_FORMAT_POST_A4
}; };
format = format_list[m_PlotFormatOpt->GetSelection()]; format = format_list[m_PlotFormatOpt->GetSelection()];
@ -479,6 +539,7 @@ int format_list[] =
m_Plot_PS_Negative->Enable( false ); m_Plot_PS_Negative->Enable( false );
break; break;
} }
format_plot = m_PlotFormat; format_plot = m_PlotFormat;
} }
@ -540,6 +601,8 @@ int layer_to_plot;
wxString FullFileName, BaseFileName; wxString FullFileName, BaseFileName;
wxString ext; wxString ext;
BOARD* board = m_Parent->m_Pcb;
SaveOptPlot( event ); SaveOptPlot( event );
switch( g_PlotScaleOpt ) switch( g_PlotScaleOpt )
@ -590,8 +653,10 @@ wxString ext;
if( m_BoxSelecLayer[layer_to_plot]->GetValue() ) if( m_BoxSelecLayer[layer_to_plot]->GetValue() )
{ {
s_SelectedLayers |= mask; s_SelectedLayers |= mask;
// Calcul du nom du fichier // Calcul du nom du fichier
FullFileName = BaseFileName + ReturnPcbLayerName(layer_to_plot, true) + ext; FullFileName = BaseFileName + board->GetLayerName( layer_to_plot ) + ext;
switch( m_PlotFormat ) switch( m_PlotFormat )
{ {
case PLOT_FORMAT_POST: case PLOT_FORMAT_POST:
@ -608,6 +673,7 @@ wxString ext;
} }
} }
} }
// Close(true); // Close(true);
} }
@ -617,6 +683,6 @@ void WinEDA_BasePcbFrame::ToPlotter(wxCommandEvent& event)
/***************************************************************/ /***************************************************************/
{ {
WinEDA_PlotFrame* frame = new WinEDA_PlotFrame( this ); WinEDA_PlotFrame* frame = new WinEDA_PlotFrame( this );
frame->ShowModal(); frame->Destroy(); frame->ShowModal(); frame->Destroy();
} }

View File

@ -90,8 +90,11 @@ WinEDA_TextPCBPropertiesFrame::WinEDA_TextPCBPropertiesFrame( WinEDA_PcbFrame* p
/************************************************************************************/ /************************************************************************************/
{ {
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
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 );

View File

@ -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 );
/*****************/ /*****************/
/* SET_COLOR.CPP */ /* SET_COLOR.CPP */
/*****************/ /*****************/
void DisplayColorSetupFrame( WinEDA_DrawFrame* parent, void DisplayColorSetupFrame( WinEDA_PcbFrame* parent,
const wxPoint& framepos ); const wxPoint& framepos );

View File

@ -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,
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;
@ -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
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 )

View File

@ -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()
// 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()
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() );

View File

@ -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:
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();
}; };

View File

@ -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";

View File

@ -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 ) :
} }
// 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 ) :
// 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;
} }
@ -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) );

View File

@ -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 );

View File

@ -101,9 +101,11 @@ public:
WinEDA_DrawFrame* m_Parent; WinEDA_DrawFrame* m_Parent;
WinEDA_PrintFrame* m_PrintFrame; WinEDA_PrintFrame* m_PrintFrame;
EDA_Printout(WinEDA_PrintFrame * print_frame, WinEDA_DrawFrame * parent, const wxString & title, bool print_ref): EDA_Printout( WinEDA_PrintFrame * print_frame,
wxPrintout(title) WinEDA_DrawFrame * parent,
{ const wxString &title,
bool print_ref ) :
wxPrintout( title ) {
m_PrintFrame = print_frame; m_PrintFrame = print_frame;
m_Parent = parent; m_Parent = parent;
s_PrintMaskLayer = 0xFFFFFFFF; s_PrintMaskLayer = 0xFFFFFFFF;
@ -121,8 +123,9 @@ public:
/*******************************************************/ /*******************************************************/
void WinEDA_DrawFrame::ToPrinter( wxCommandEvent& event ) void WinEDA_DrawFrame::ToPrinter( wxCommandEvent& event )
/*******************************************************/ /*******************************************************/
/* Prepare les structures de donn<6E>es de gestion de l'impression /* Prepare les structures de donn<6E>es de gestion de l'impression
et affiche la fenetre de dialogue de gestion de l'impression des feuilles * et affiche la fenetre de dialogue de gestion de l'impression des feuilles
*/ */
{ {
wxPoint pos = GetPosition(); wxPoint pos = GetPosition();
@ -132,6 +135,7 @@ bool PrinterError = FALSE;
if( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur ) if( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur )
{ {
wxClientDC dc( DrawPanel ); wxClientDC dc( DrawPanel );
DrawPanel->PrepareDC( dc ); DrawPanel->PrepareDC( dc );
DrawPanel->ForceCloseManageCurseur( DrawPanel, &dc ); DrawPanel->ForceCloseManageCurseur( DrawPanel, &dc );
} }
@ -140,6 +144,7 @@ bool PrinterError = FALSE;
if( g_PrintData == NULL ) // First print if( g_PrintData == NULL ) // First print
{ {
g_PrintData = new wxPrintData(); g_PrintData = new wxPrintData();
if( !g_PrintData->Ok() ) if( !g_PrintData->Ok() )
{ {
PrinterError = TRUE; PrinterError = TRUE;
@ -152,6 +157,7 @@ bool PrinterError = FALSE;
pos.x += 10; pos.y += 10; pos.x += 10; pos.y += 10;
WinEDA_PrintFrame* frame = new WinEDA_PrintFrame( this ); WinEDA_PrintFrame* frame = new WinEDA_PrintFrame( this );
frame->ShowModal(); frame->Destroy(); frame->ShowModal(); frame->Destroy();
#ifdef EESCHEMA #ifdef EESCHEMA
g_PrintFillMask = 0; g_PrintFillMask = 0;
@ -169,17 +175,25 @@ void WinEDA_PrintFrame::SetOthersDatas()
m_FineAdjustXscaleOpt->SetToolTip( _( "Set X scale adjust for exact scale plotting" ) ); m_FineAdjustXscaleOpt->SetToolTip( _( "Set X scale adjust for exact scale plotting" ) );
m_FineAdjustYscaleOpt->SetToolTip( _( "Set Y scale adjust for exact scale plotting" ) ); m_FineAdjustYscaleOpt->SetToolTip( _( "Set Y scale adjust for exact scale plotting" ) );
if ( s_Print_Black_and_White ) m_ColorOption->SetSelection(1); if( s_Print_Black_and_White )
m_ColorOption->SetSelection( 1 );
#ifdef PCBNEW #ifdef PCBNEW
m_PagesOptionEeschema->Show( false ); m_PagesOptionEeschema->Show( false );
m_PagesOption = m_PagesOptionPcb; m_PagesOption = m_PagesOptionPcb;
/* Create layer list */ /* Create layer list */
int mask = 1, ii; int mask = 1, ii;
for( ii = 0; ii < NB_LAYERS; ii++, mask <<= 1 ) for( ii = 0; ii < NB_LAYERS; ii++, mask <<= 1 )
{ {
m_BoxSelecLayer[ii] = new wxCheckBox( this, -1, m_BoxSelecLayer[ii] = new wxCheckBox( this, -1,
ReturnPcbLayerName(ii)); #if defined(PCBNEW)
if ( mask & s_SelectedLayers) m_BoxSelecLayer[ii]->SetValue(TRUE); ((WinEDA_PcbFrame*)m_Parent)->m_Pcb->GetLayerName(ii) );
#else
ReturnLayerName( ii ) );
#endif
if( mask & s_SelectedLayers )
m_BoxSelecLayer[ii]->SetValue( TRUE );
if( ii < 16 ) if( ii < 16 )
m_CopperLayersBoxSizer->Add( m_BoxSelecLayer[ii], m_CopperLayersBoxSizer->Add( m_BoxSelecLayer[ii],
wxGROW | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE ); wxGROW | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE );
@ -187,6 +201,7 @@ void WinEDA_PrintFrame::SetOthersDatas()
m_TechLayersBoxSizer->Add( m_BoxSelecLayer[ii], m_TechLayersBoxSizer->Add( m_BoxSelecLayer[ii],
wxGROW | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE ); wxGROW | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE );
} }
// Read the scale adjust option // Read the scale adjust option
if( m_Parent->m_Parent->m_EDA_Config ) if( m_Parent->m_Parent->m_EDA_Config )
{ {
@ -215,6 +230,7 @@ void WinEDA_PrintFrame::SetOthersDatas()
#endif #endif
} }
/**********************************************************/ /**********************************************************/
int WinEDA_PrintFrame::SetLayerMaskFromListSelection() int WinEDA_PrintFrame::SetLayerMaskFromListSelection()
/**********************************************************/ /**********************************************************/
@ -232,12 +248,14 @@ int ii;
s_PrintMaskLayer |= 1 << ii; s_PrintMaskLayer |= 1 << ii;
} }
} }
#else #else
page_count = 1; page_count = 1;
#endif #endif
return page_count; return page_count;
} }
/************************************************************/ /************************************************************/
void WinEDA_PrintFrame::SetColorOrBlack( wxCommandEvent& event ) void WinEDA_PrintFrame::SetColorOrBlack( wxCommandEvent& event )
/************************************************************/ /************************************************************/
@ -245,13 +263,16 @@ void WinEDA_PrintFrame::SetColorOrBlack(wxCommandEvent& event)
s_Print_Black_and_White = m_ColorOption->GetSelection(); s_Print_Black_and_White = m_ColorOption->GetSelection();
} }
/****************************************************/ /****************************************************/
void WinEDA_PrintFrame::OnClosePrintDialog() void WinEDA_PrintFrame::OnClosePrintDialog()
/****************************************************/ /****************************************************/
/* called when WinEDA_PrintFrame is closed /* called when WinEDA_PrintFrame is closed
*/ */
{ {
wxConfig* Config = m_Parent->m_Parent->m_EDA_Config; wxConfig* Config = m_Parent->m_Parent->m_EDA_Config;
if( Config ) if( Config )
{ {
Config->Write( wxT( "PrintPenWidth" ), s_PrintPenMinWidth ); Config->Write( wxT( "PrintPenWidth" ), s_PrintPenMinWidth );
@ -278,6 +299,7 @@ void WinEDA_PrintFrame::OnClosePrintDialog()
/************************************************/ /************************************************/
wxString WinEDA_PrintFrame::BuildPrintTitle() wxString WinEDA_PrintFrame::BuildPrintTitle()
/************************************************/ /************************************************/
/* return a valid filename to create a print file /* return a valid filename to create a print file
*/ */
{ {
@ -289,6 +311,7 @@ wxString name, ext;
return name; return name;
} }
/******************************************************/ /******************************************************/
void WinEDA_PrintFrame::SetScale( wxCommandEvent& event ) void WinEDA_PrintFrame::SetScale( wxCommandEvent& event )
/******************************************************/ /******************************************************/
@ -305,11 +328,13 @@ void WinEDA_PrintFrame::SetScale(wxCommandEvent& event)
#endif #endif
} }
/****************************************/ /****************************************/
void WinEDA_PrintFrame::SetPenWidth() void WinEDA_PrintFrame::SetPenWidth()
/****************************************/ /****************************************/
/* Get the new pen width value, and verify min et max value /* Get the new pen width value, and verify min et max value
NOTE: s_PrintPenMinWidth is in internal units * NOTE: s_PrintPenMinWidth is in internal units
*/ */
{ {
s_PrintPenMinWidth = m_DialogPenWidth->GetValue(); s_PrintPenMinWidth = m_DialogPenWidth->GetValue();
@ -328,24 +353,29 @@ void WinEDA_PrintFrame::SetPenWidth()
/**********************************************************/ /**********************************************************/
void WinEDA_PrintFrame::OnPrintSetup( wxCommandEvent& event ) void WinEDA_PrintFrame::OnPrintSetup( wxCommandEvent& event )
/**********************************************************/ /**********************************************************/
/* Open a dialog box for printer setup (printer options, page size ...) /* Open a dialog box for printer setup (printer options, page size ...)
*/ */
{ {
wxPrintDialogData printDialogData( * g_PrintData ); wxPrintDialogData printDialogData( * g_PrintData );
if( printDialogData.Ok() ) if( printDialogData.Ok() )
{ {
wxPrintDialog printerDialog( this,& printDialogData ); wxPrintDialog printerDialog( this,& printDialogData );
printerDialog.ShowModal(); printerDialog.ShowModal();
*g_PrintData = printerDialog.GetPrintDialogData().GetPrintData(); *g_PrintData = printerDialog.GetPrintDialogData().GetPrintData();
} }
else DisplayError(this, _("Printer Problem!") ); else
DisplayError( this, _( "Printer Problem!" ) );
} }
/************************************************************/ /************************************************************/
void WinEDA_PrintFrame::OnPrintPreview( wxCommandEvent& event ) void WinEDA_PrintFrame::OnPrintPreview( wxCommandEvent& event )
/************************************************************/ /************************************************************/
/* Open and display a previewer frame for printing /* Open and display a previewer frame for printing
*/ */
{ {
@ -368,13 +398,15 @@ wxString title = BuildPrintTitle();
wxPrintPreview* preview = wxPrintPreview* preview =
new wxPrintPreview( new EDA_Printout (this, m_Parent, title, print_ref), new wxPrintPreview( new EDA_Printout (this, m_Parent, title, print_ref),
new EDA_Printout (this, m_Parent, title, print_ref), g_PrintData ); new EDA_Printout (this, m_Parent, title, print_ref), g_PrintData );
if( preview == NULL ) if( preview == NULL )
{ {
DisplayError( this, _( "There was a problem previewing" ) ); DisplayError( this, _( "There was a problem previewing" ) );
return; return;
} }
#ifdef PCBNEW #ifdef PCBNEW
if ( s_OptionPrintPage ) SetLayerMaskFromListSelection(); if( s_OptionPrintPage )
SetLayerMaskFromListSelection();
#endif #endif
m_Parent->GetPosition( &x, &y ); m_Parent->GetPosition( &x, &y );
@ -387,6 +419,7 @@ wxString title = BuildPrintTitle();
wxPreviewFrame* frame = new wxPreviewFrame( preview, this, wxPreviewFrame* frame = new wxPreviewFrame( preview, this,
title, WPos, WSize ); title, WPos, WSize );
frame->Initialize(); frame->Initialize();
frame->Show( TRUE ); frame->Show( TRUE );
} }
@ -395,6 +428,7 @@ wxString title = BuildPrintTitle();
/**********************************************************/ /**********************************************************/
void WinEDA_PrintFrame::EDA_PrintPage( wxCommandEvent& event ) void WinEDA_PrintFrame::EDA_PrintPage( wxCommandEvent& event )
/**********************************************************/ /**********************************************************/
/* Called on activate "Print CURRENT" button /* Called on activate "Print CURRENT" button
*/ */
{ {
@ -410,7 +444,8 @@ bool print_ref = TRUE;
print_ref = FALSE; print_ref = FALSE;
#ifdef PCBNEW #ifdef PCBNEW
if ( s_OptionPrintPage ) SetLayerMaskFromListSelection(); if( s_OptionPrintPage )
SetLayerMaskFromListSelection();
#endif #endif
SetPenWidth(); SetPenWidth();
@ -440,7 +475,6 @@ wxString title = BuildPrintTitle();
} }
/***************************************/ /***************************************/
bool EDA_Printout::OnPrintPage( int page ) bool EDA_Printout::OnPrintPage( int page )
/***************************************/ /***************************************/
@ -461,7 +495,8 @@ BASE_SCREEN *oldscreen = screen;
screen = ScreenList.GetScreen( page - 1 ); screen = ScreenList.GetScreen( page - 1 );
} }
if (screen == NULL) return FALSE; if( screen == NULL )
return FALSE;
ActiveScreen = (SCH_SCREEN*) screen; ActiveScreen = (SCH_SCREEN*) screen;
DrawPage(); DrawPage();
ActiveScreen = (SCH_SCREEN*) oldscreen; ActiveScreen = (SCH_SCREEN*) oldscreen;
@ -478,7 +513,8 @@ BASE_SCREEN *oldscreen = screen;
int ii, jj, mask = 1; int ii, jj, mask = 1;
for( ii = 0, jj = 0; ii < NB_LAYERS; ii++ ) for( ii = 0, jj = 0; ii < NB_LAYERS; ii++ )
{ {
if ( s_PrintMaskLayer & mask ) jj++; if( s_PrintMaskLayer & mask )
jj++;
if( jj == page ) if( jj == page )
{ {
s_PrintMaskLayer = mask; s_PrintMaskLayer = mask;
@ -486,7 +522,9 @@ BASE_SCREEN *oldscreen = screen;
} }
mask <<= 1; mask <<= 1;
} }
if ( ii == NB_LAYERS ) return FALSE;
if( ii == NB_LAYERS )
return FALSE;
} }
} }
DrawPage(); DrawPage();
@ -495,12 +533,14 @@ BASE_SCREEN *oldscreen = screen;
return TRUE; return TRUE;
} }
/*********************************************************/ /*********************************************************/
void EDA_Printout::GetPageInfo( int* minPage, int* maxPage, void EDA_Printout::GetPageInfo( int* minPage, int* maxPage,
int* selPageFrom, int* selPageTo ) int* selPageFrom, int* selPageTo )
/*********************************************************/ /*********************************************************/
{ {
int ii = 1; int ii = 1;
*minPage = 1; *minPage = 1;
*selPageFrom = 1; *selPageFrom = 1;
@ -513,15 +553,18 @@ int ii = 1;
#endif #endif
#ifdef PCBNEW #ifdef PCBNEW
switch( s_OptionPrintPage ) switch( s_OptionPrintPage )
{ {
case 0 :ii = m_PrintFrame->SetLayerMaskFromListSelection(); case 0:
ii = m_PrintFrame->SetLayerMaskFromListSelection();
break; break;
case 1: case 1:
ii = 1; ii = 1;
break; break;
} }
#endif #endif
*maxPage = ii; *maxPage = ii;
@ -538,7 +581,8 @@ int PageCount;
EDA_ScreenList ScreenList; EDA_ScreenList ScreenList;
PageCount = ScreenList.GetCount(); PageCount = ScreenList.GetCount();
if( PageCount >= pageNum ) return TRUE; if( PageCount >= pageNum )
return TRUE;
return FALSE; return FALSE;
#endif #endif
@ -548,6 +592,7 @@ int PageCount;
#endif #endif
} }
/*************************************************************/ /*************************************************************/
bool EDA_Printout::OnBeginDocument( int startPage, int endPage ) bool EDA_Printout::OnBeginDocument( int startPage, int endPage )
/*************************************************************/ /*************************************************************/
@ -558,11 +603,13 @@ bool EDA_Printout::OnBeginDocument(int startPage, int endPage)
return TRUE; return TRUE;
} }
/********************************/ /********************************/
void EDA_Printout::DrawPage() void EDA_Printout::DrawPage()
/********************************/ /********************************/
/* /*
This is the real print function: print the active screen * This is the real print function: print the active screen
*/ */
{ {
int tmpzoom; int tmpzoom;
@ -612,8 +659,8 @@ wxDC * dc = GetDC();
userscale = 0.99; userscale = 0.99;
} }
if ( (s_ScaleList[s_Scale_Select] > 1.0) || // scale > 1 -> Recadrage if( (s_ScaleList[s_Scale_Select] > 1.0) // scale > 1 -> Recadrage
(s_ScaleList[s_Scale_Select] == 0) ) // fit in page || (s_ScaleList[s_Scale_Select] == 0) ) // fit in page
{ {
DrawOffset.x += pcbframe->m_Pcb->m_BoundaryBox.Centre().x; DrawOffset.x += pcbframe->m_Pcb->m_BoundaryBox.Centre().x;
DrawOffset.y += pcbframe->m_Pcb->m_BoundaryBox.Centre().y; DrawOffset.y += pcbframe->m_Pcb->m_BoundaryBox.Centre().y;
@ -632,6 +679,7 @@ wxDC * dc = GetDC();
double accurate_Xscale, accurate_Yscale; double accurate_Xscale, accurate_Yscale;
dc->SetUserScale( DrawZoom / scale * m_PrintFrame->m_XScaleAdjust, dc->SetUserScale( DrawZoom / scale * m_PrintFrame->m_XScaleAdjust,
DrawZoom / scale * m_PrintFrame->m_YScaleAdjust ); DrawZoom / scale * m_PrintFrame->m_YScaleAdjust );
// Compute Accurate scale 1 // Compute Accurate scale 1
{ {
int w, h; int w, h;
@ -654,8 +702,8 @@ double accurate_Xscale, accurate_Yscale;
#endif #endif
#ifdef PCBNEW #ifdef PCBNEW
if ( (s_ScaleList[s_Scale_Select] > 1.0) || // scale > 1 -> Recadrage if( (s_ScaleList[s_Scale_Select] > 1.0) // scale > 1 -> Recadrage
(s_ScaleList[s_Scale_Select] == 0) ) // fit in page || (s_ScaleList[s_Scale_Select] == 0) ) // fit in page
{ {
DrawOffset.x -= (int) ( (PlotAreaSize.x / 2) * scale ); DrawOffset.x -= (int) ( (PlotAreaSize.x / 2) * scale );
DrawOffset.y -= (int) ( (PlotAreaSize.y / 3) * scale ); DrawOffset.y -= (int) ( (PlotAreaSize.y / 3) * scale );
@ -667,17 +715,20 @@ double accurate_Xscale, accurate_Yscale;
ActiveScreen->m_DrawOrg = DrawOffset; ActiveScreen->m_DrawOrg = DrawOffset;
GRResetPenAndBrush( dc ); GRResetPenAndBrush( dc );
if( s_Print_Black_and_White ) GRForceBlackPen(TRUE); if( s_Print_Black_and_White )
GRForceBlackPen( TRUE );
#ifdef EESCHEMA #ifdef EESCHEMA
/* set Pen min width */ /* set Pen min width */
double ftmp, xdcscale, ydcscale; double ftmp, xdcscale, ydcscale;
// s_PrintPenMinWidth is in internal units ( 1/1000 inch), and must be converted in pixels // s_PrintPenMinWidth is in internal units ( 1/1000 inch), and must be converted in pixels
ftmp = (float) s_PrintPenMinWidth * 25.4 / EESCHEMA_INTERNAL_UNIT; // ftmp est en mm ftmp = (float) s_PrintPenMinWidth * 25.4 / EESCHEMA_INTERNAL_UNIT; // ftmp est en mm
ftmp *= (float) PlotAreaSize.x / PageSize_in_mm.x; /* ftmp is in pixels */ ftmp *= (float) PlotAreaSize.x / PageSize_in_mm.x; /* ftmp is in pixels */
/* because the pen size will be scaled by the dc scale, we modify the size /* because the pen size will be scaled by the dc scale, we modify the size
in order to keep the requested value */ * in order to keep the requested value */
dc->GetUserScale( &xdcscale, &ydcscale ); dc->GetUserScale( &xdcscale, &ydcscale );
ftmp /= xdcscale; ftmp /= xdcscale;
SetPenMinWidth( (int) round( ftmp ) ); SetPenMinWidth( (int) round( ftmp ) );
@ -713,19 +764,22 @@ EDA_Rect tmp = panel->m_ClipBox;
dc->GetUserScale( &sx, &sy ); dc->GetUserScale( &sx, &sy );
dc->SetAxisOrientation( TRUE, TRUE ); dc->SetAxisOrientation( TRUE, TRUE );
if ( userscale < 1.0 ) sy /= userscale; if( userscale < 1.0 )
sy /= userscale;
/* Plot offset y is moved by the y plot area size in order to have /* Plot offset y is moved by the y plot area size in order to have
the old draw area in the new draw area, because the draw origin has not moved * the old draw area in the new draw area, because the draw origin has not moved
(this is the upper left corner) but the Y axis is reversed, therefore the plotting area * (this is the upper left corner) but the Y axis is reversed, therefore the plotting area
is the y coordinate values from - PlotAreaSize.y to 0 */ * is the y coordinate values from - PlotAreaSize.y to 0 */
int ysize = (int) ( PlotAreaSize.y / sy ); int ysize = (int) ( PlotAreaSize.y / sy );
DrawOffset.y += ysize; DrawOffset.y += ysize;
/* in order to keep the board position in the sheet /* in order to keep the board position in the sheet
(when user scale <= 1) the y offset in moved by the distance between * (when user scale <= 1) the y offset in moved by the distance between
the middle of the page and the middle of the board * the middle of the page and the middle of the board
This is equivalent to put the mirror axis to the board centre * This is equivalent to put the mirror axis to the board centre
for scales > 1, the DrawOffset was already computed to have the board centre * for scales > 1, the DrawOffset was already computed to have the board centre
to the middle of the page. * to the middle of the page.
*/ */
wxPoint pcb_centre = pcbframe->m_Pcb->m_BoundaryBox.Centre(); wxPoint pcb_centre = pcbframe->m_Pcb->m_BoundaryBox.Centre();
if( userscale <= 1.0 ) if( userscale <= 1.0 )
@ -754,4 +808,3 @@ EDA_Rect tmp = panel->m_ClipBox;
ActiveScreen->m_DrawOrg = old_org; ActiveScreen->m_DrawOrg = old_org;
ActiveScreen->SetZoom( tmpzoom ); ActiveScreen->SetZoom( tmpzoom );
} }