bug fixes and merging my development with svn rep.

This commit is contained in:
charras 2007-06-13 15:35:40 +00:00
parent 13f2e75bfa
commit 89b3eb5aa5
39 changed files with 1669 additions and 2440 deletions

View File

@ -4,6 +4,23 @@ 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.
2007-June-13 RELEASE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+All:
merging my development with svn version
+ pcbnew:
bug fix (problem in postscript generation due to the internationalization
of floating point number notation )
added tool to select layer pair and monitor active layer
+ eeschema
bug fix:
crash libedit when loading certain components (linux only)
incomplete generation of erc file list
2007-June-13 UPDATE Richard A Burton <richardaburton@gmail.com> 2007-June-13 UPDATE Richard A Burton <richardaburton@gmail.com>
================================================================================ ================================================================================
+ build: + build:

View File

@ -117,14 +117,20 @@ bool success = FALSE;
fullfilename.Replace(WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP); fullfilename.Replace(WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP);
#endif #endif
wxString mask(wxT("*")), extension;
#ifdef __WINDOWS__
mask += wxT(".*");
extension = wxT(".*");
#endif
if ( wxIsWild(fullfilename) ) if ( wxIsWild(fullfilename) )
{ {
fullfilename = fullfilename =
EDA_FileSelector(_("Doc Files"), /* Titre de la fenetre */ EDA_FileSelector(_("Doc Files"), /* Titre de la fenetre */
wxPathOnly(fullfilename), /* Chemin par defaut */ wxPathOnly(fullfilename), /* Chemin par defaut */
fullfilename, /* nom fichier par defaut */ fullfilename, /* nom fichier par defaut */
wxEmptyString, /* extension par defaut */ extension, /* extension par defaut */
wxEmptyString, /* Masque d'affichage */ mask, /* Masque d'affichage */
frame, /* parent frame */ frame, /* parent frame */
wxFD_OPEN, /* wxSAVE, wxFD_OPEN ..*/ wxFD_OPEN, /* wxSAVE, wxFD_OPEN ..*/
TRUE, /* true = ne change pas le repertoire courant */ TRUE, /* true = ne change pas le repertoire courant */

View File

@ -77,9 +77,6 @@ WinEDA_App::WinEDA_App(void)
m_Locale = NULL; m_Locale = NULL;
m_PdfBrowserIsDefault = TRUE; m_PdfBrowserIsDefault = TRUE;
/* Init de variables globales d'interet general: */
g_FloatSeparator = '.'; // Nombres flottants = 0.1 par exemple
} }
/*****************************/ /*****************************/
@ -161,9 +158,6 @@ bool succes = SetLanguage(TRUE);
{ {
} }
if ( atof("0,1") ) g_FloatSeparator = ','; // Nombres flottants = 0,1
else g_FloatSeparator = '.';
#ifdef KICAD_PYTHON #ifdef KICAD_PYTHON
PyHandler::GetInstance()->SetAppName( name ); PyHandler::GetInstance()->SetAppName( name );
#endif #endif
@ -380,9 +374,6 @@ wxString dic_path;
SetLanguageList(NULL); SetLanguageList(NULL);
if ( atof("0,1") ) g_FloatSeparator = ','; // Nombres flottants = 0,1
else g_FloatSeparator = '.';
return m_Locale->IsOk(); return m_Locale->IsOk();
} }

View File

@ -39,6 +39,7 @@ static wxString s_HelpPathList[] = {
wxT("d:/kicad/help/"), wxT("d:/kicad/help/"),
#else #else
wxT("/usr/local/kicad/help/"), wxT("/usr/local/kicad/help/"),
wxT("/usr/share/doc/kicad/help"),
wxT("/usr/share/doc/kicad/"), wxT("/usr/share/doc/kicad/"),
#endif #endif
wxT("end_list") // End of list symbol, do not change wxT("end_list") // End of list symbol, do not change

View File

@ -289,7 +289,7 @@ void ChangeSpaces(char * Text, int NewChar)
char * to_point(char * Text) char * to_point(char * Text)
/**************************/ /**************************/
/* convertit les , en . dans une chaine. utilisé pour compenser /* convertit les , en . dans une chaine. utilisé pour compenser
l'internalisation imbecile de la fct printf l'internalisationde la fct printf
qui genere les flottants avec une virgule au lieu du point qui genere les flottants avec une virgule au lieu du point
*/ */
{ {
@ -297,7 +297,9 @@ char * line = Text;
if ( Text == NULL ) return NULL; if ( Text == NULL ) return NULL;
for ( ; *Text != 0; Text++ ) for ( ; *Text != 0; Text++ )
if (*Text == g_FloatSeparator) *Text = '.'; {
if (*Text == ',') *Text = '.';
}
return line; return line;
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,974 +0,0 @@
/********************************************************/
/* Module to handle libraries (second part - drawing ). */
/********************************************************/
#include "fctsys.h"
#include "gr_basic.h"
#include "common.h"
#include "program.h"
#include "libcmp.h"
#include "component_class.h"
#include "general.h"
#include "trigo.h"
#include "protos.h"
#define UNVISIBLE_COLOR DARKGRAY
//#define DRAW_ARC_WITH_ANGLE // pour trace arc avec routine utilsant les angles
/* Fonctions locales */
/* Description du composant <DUMMY> utilisé lorsque des composants non trouvés
en librarie doivent etre dessinés */
/*
ce composant est un rectangle de 400 mils de coté avec le texte ?? au centre
DEF DUMMY U 0 40 Y Y 1 0 N
F0 "U" 0 -350 60 H V
F1 "DUMMY" 0 350 60 H V
DRAW
T 0 0 0 150 0 0 0 ??
S -200 200 200 -200 0 1 0
ENDDRAW
ENDDEF
*/
static int s_ItemSelectColor = BROWN;
static EDA_LibComponentStruct * DummyCmp;
static int * Buf_Poly_Drawings, Buf_Poly_Size; // Used fo polyline drawings
static void DrawLibPartAux(WinEDA_DrawPanel * panel, wxDC * DC,
EDA_SchComponentStruct *Component,
EDA_LibComponentStruct *Entry,
const wxPoint & Pos,
int TransMat[2][2],
int Multi, int convert,
int DrawMode, int Color = -1, bool DrawPinText = TRUE);
/******************************/
static void CreateDummyCmp(void)
/******************************/
{
DummyCmp = new EDA_LibComponentStruct( NULL);
LibDrawSquare * Square = new LibDrawSquare();
Square->m_Start = wxPoint(- 200,200);
Square->m_End = wxPoint(200, - 200);
Square->m_Width = 4;
LibDrawText * Text = new LibDrawText();
Text->m_Size.x = Text->m_Size.y = 150;
Text->m_Text = wxT("??");
DummyCmp->m_Drawings = Square;
Square->Pnext = Text;
}
/*************************************************************/
void DrawLibEntry(WinEDA_DrawPanel * panel,wxDC * DC,
EDA_LibComponentStruct *LibEntry,
int posX, int posY,
int Multi, int convert,
int DrawMode, int Color)
/**************************************************************/
/* Routine de dessin d'un composant d'une librairie
LibEntry = pointeur sur la description en librairie
posX, posY = position du composant
DrawMode = GrOR ..
Color = 0 : dessin en vraies couleurs, sinon couleur = Color
Une croix symbolise le point d'accrochage (ref position) du composant
Le composant est toujours trace avec orientation 0
*/
{
int color;
int TransMat[2][2];
wxString Prefix;
LibDrawField * Field;
wxPoint text_pos;
/* Orientation normale */
TransMat[0][0] = 1; TransMat[1][1] = -1;
TransMat[1][0] = TransMat[0][1] = 0;
DrawLibPartAux(panel, DC, NULL, LibEntry, wxPoint(posX, posY),
TransMat, Multi,
convert, DrawMode, Color);
/* Trace des 2 champs ref et value (Attention aux coord: la matrice
de transformation change de signe les coord Y */
GRSetDrawMode(DC, DrawMode);
if( LibEntry->m_Prefix.m_Attributs & TEXT_NO_VISIBLE )
{
if( Color >= 0 ) color = Color;
else color = UNVISIBLE_COLOR;
}
else {
if( Color >= 0) color = Color;
else color = ReturnLayerColor(LAYER_REFERENCEPART);
}
if (LibEntry->m_UnitCount > 1)
Prefix.Printf( wxT("%s?%c"),LibEntry->m_Prefix.m_Text.GetData(),Multi + 'A' - 1);
else Prefix = LibEntry->m_Prefix.m_Text + wxT("?");
text_pos.x = LibEntry->m_Prefix.m_Pos.x + posX;
text_pos.y = posY - LibEntry->m_Prefix.m_Pos.y;
DrawGraphicText(panel, DC, text_pos,
color,LibEntry->m_Prefix.m_Text.GetData(),
LibEntry->m_Prefix.m_Orient ? TEXT_ORIENT_VERT : TEXT_ORIENT_HORIZ,
LibEntry->m_Prefix.m_Size,
LibEntry->m_Prefix.m_HJustify, LibEntry->m_Prefix.m_VJustify);
if( LibEntry->m_Name.m_Attributs & TEXT_NO_VISIBLE )
{
if( Color >= 0) color = Color;
else color = UNVISIBLE_COLOR;
}
else {
if( Color >= 0 ) color = Color;
else color = ReturnLayerColor(LAYER_VALUEPART);
}
text_pos.x = LibEntry->m_Name.m_Pos.x + posX;
text_pos.y = posY - LibEntry->m_Name.m_Pos.y;
DrawGraphicText(panel, DC, text_pos,
color, LibEntry->m_Name.m_Text.GetData(),
LibEntry->m_Name.m_Orient ? TEXT_ORIENT_VERT : TEXT_ORIENT_HORIZ,
LibEntry->m_Name.m_Size,
LibEntry->m_Name.m_HJustify, LibEntry->m_Name.m_VJustify);
for( Field = LibEntry->Fields; Field != NULL; Field = (LibDrawField *)Field->Pnext )
{
if( Field->m_Text.IsEmpty() ) return;
if( Field->m_Attributs & TEXT_NO_VISIBLE )
{
if( Color >= 0) color = Color;
else color = UNVISIBLE_COLOR;
}
else {
if( Color >= 0) color = Color;
else color = ReturnLayerColor(LAYER_FIELDS);
}
text_pos.x = Field->m_Pos.x + posX;
text_pos.y = posY - Field->m_Pos.y;
DrawGraphicText(panel, DC, text_pos,
color, Field->m_Text,
Field->m_Orient ? TEXT_ORIENT_VERT : TEXT_ORIENT_HORIZ,
Field->m_Size,
Field->m_HJustify, Field->m_VJustify);
}
// Tracé de l'ancre
int len = 3 * panel->GetZoom();
GRLine(&panel->m_ClipBox, DC, posX, posY - len, posX, posY + len, color);
GRLine(&panel->m_ClipBox, DC, posX - len, posY, posX + len, posY, color);
}
/*****************************************************************************
* Routine to draw the given part at given position, transformed/mirror as *
* specified, and in the given drawing mode. Only this one is visible... *
*****************************************************************************/
void EDA_SchComponentStruct::Draw(WinEDA_DrawPanel * panel,wxDC * DC,
const wxPoint & offset, int DrawMode, int Color)
{
EDA_LibComponentStruct *Entry;
int ii;
bool dummy = FALSE;
if( (Entry = FindLibPart(m_ChipName.GetData(),wxEmptyString,FIND_ROOT)) == NULL)
{ /* composant non trouvé, on affiche un composant "dummy" */
dummy = TRUE;
if( DummyCmp == NULL ) CreateDummyCmp();
Entry = DummyCmp;
}
DrawLibPartAux(panel, DC, this, Entry, m_Pos + offset,
m_Transform,
dummy ? 0 : m_Multi,
dummy ? 0 : m_Convert,
DrawMode);
/* Trace des champs, avec placement et orientation selon orient. du
composant
*/
if( ((m_Field[REFERENCE].m_Attributs & TEXT_NO_VISIBLE) == 0)
&& ! (m_Field[REFERENCE].m_Flags & IS_MOVED) )
{
if ( Entry->m_UnitCount > 1 )
DrawTextField(panel, DC, &m_Field[REFERENCE],1,DrawMode);
else
DrawTextField(panel, DC, &m_Field[REFERENCE],0,DrawMode);
}
for( ii = VALUE; ii < NUMBER_OF_FIELDS; ii++ )
{
if (m_Field[ii].m_Flags & IS_MOVED) continue;
DrawTextField(panel, DC, &m_Field[ii],0,DrawMode);
}
}
/***********************************************************/
void DrawTextField(WinEDA_DrawPanel * panel,wxDC * DC,
PartTextStruct * Field, int IsMulti, int DrawMode)
/***********************************************************/
/* Routine de trace des textes type Field du composant.
entree:
IsMulti: flag Non Null si il y a plusieurs parts par boitier.
n'est utile que pour le champ reference pour ajouter a celui ci
l'identification de la part ( A, B ... )
DrawMode: mode de trace
*/
{
int orient, color;
wxPoint pos; /* Position des textes */
EDA_SchComponentStruct *DrawLibItem = (EDA_SchComponentStruct *) Field->m_Parent;
int hjustify, vjustify;
if( Field->m_Attributs & TEXT_NO_VISIBLE ) return;
if( Field->IsVoid() ) return;
GRSetDrawMode(DC, DrawMode);
/* Calcul de la position des textes, selon orientation du composant */
orient = Field->m_Orient;
hjustify = Field->m_HJustify; vjustify = Field->m_VJustify;
pos.x = Field->m_Pos.x - DrawLibItem->m_Pos.x;
pos.y = Field->m_Pos.y - DrawLibItem->m_Pos.y;
pos = DrawLibItem->GetScreenCoord(pos);
pos.x += DrawLibItem->m_Pos.x;
pos.y += DrawLibItem->m_Pos.y;
/* Y a t-il rotation (pour l'orientation, la justification)*/
if(DrawLibItem->m_Transform[0][1]) // Rotation du composant de 90deg
{
if ( orient == TEXT_ORIENT_HORIZ) orient = TEXT_ORIENT_VERT;
else orient = TEXT_ORIENT_HORIZ;
/* Y a t-il rotation, miroir (pour les justifications)*/
EXCHG(hjustify, vjustify);
if (DrawLibItem->m_Transform[1][0] < 0 ) vjustify = - vjustify;
if (DrawLibItem->m_Transform[1][0] > 0 ) hjustify = - hjustify;
}
else
{ /* Texte horizontal: Y a t-il miroir (pour les justifications)*/
if (DrawLibItem->m_Transform[0][0] < 0 )
hjustify = - hjustify;
if (DrawLibItem->m_Transform[1][1] > 0 )
vjustify = - vjustify;
}
if( Field->m_FieldId == REFERENCE )
color = ReturnLayerColor(LAYER_REFERENCEPART);
else if( Field->m_FieldId == VALUE )
color = ReturnLayerColor(LAYER_VALUEPART);
else color = ReturnLayerColor(LAYER_FIELDS);
if( !IsMulti || (Field->m_FieldId != REFERENCE) )
{
DrawGraphicText(panel, DC, pos, color, Field->m_Text.GetData(),
orient ? TEXT_ORIENT_VERT : TEXT_ORIENT_HORIZ,
Field->m_Size,
hjustify, vjustify);
}
else /* Le champ est la reference, et il y a plusieurs parts par boitier */
{/* On ajoute alors A ou B ... a la reference */
wxString fulltext = Field->m_Text;
fulltext.Append('A' - 1 + DrawLibItem->m_Multi);
DrawGraphicText(panel, DC, pos, color, fulltext.GetData(),
orient ? TEXT_ORIENT_VERT : TEXT_ORIENT_HORIZ,
Field->m_Size,
hjustify, vjustify);
}
}
/********************************************************************************/
EDA_LibComponentStruct *FindLibPart(const wxChar *Name, const wxString & LibName, int Alias)
/********************************************************************************/
/*
Routine to find a part in one of the libraries given its name.
Name = Name of part.
LibName = Name of Lib; if "": seach in all libs
Alias = Flag: si flag != 0, retourne un pointeur sur une part ou un alias
si flag = 0, retourne un pointeur sur une part meme si le nom
correspond a un alias
Alias = FIND_ROOT, ou Alias = FIND_ALIAS
*/
{
EDA_LibComponentStruct *Entry;
static EDA_LibComponentStruct DummyEntry(wxEmptyString); /* Used only to call PQFind. */
LibraryStruct *Lib = g_LibraryList;
DummyEntry.m_Drawings = NULL; /* Used only to call PQFind. */
DummyEntry.m_Name.m_Text = Name;
PQCompFunc((PQCompFuncType) LibraryEntryCompare);
Entry = NULL; FindLibName.Empty();
while (Lib)
{
if( ! LibName.IsEmpty() )
{
if( Lib->m_Name != LibName )
{
Lib = Lib->m_Pnext; continue ;
}
}
if( Lib == NULL ) break;
Entry = (EDA_LibComponentStruct*)PQFind(Lib->m_Entries, &DummyEntry);
if( Entry != NULL)
{
FindLibName = Lib->m_Name;
break;
}
Lib = Lib->m_Pnext;
}
/* Si le nom est un alias, recherche du vrai composant */
if( Entry )
{
if( (Entry->Type != ROOT ) && (Alias == FIND_ROOT) )
Entry = FindLibPart( ((EDA_LibCmpAliasStruct*)Entry)->m_RootName.GetData() ,
Lib->m_Name, FIND_ROOT);
}
return (Entry);
}
/*****************************************************************************
* Routine to draw the given part at given position, transformed/mirror as
* specified, and in the given drawing mode.
* if Color < 0: Draw in normal color
* else draw in color = Color
*****************************************************************************/
/* DrawMode = GrXOR, GrOR ..*/
void DrawLibPartAux(WinEDA_DrawPanel * panel,wxDC * DC,
EDA_SchComponentStruct *Component,
EDA_LibComponentStruct *Entry,
const wxPoint & Pos,
int TransMat[2][2],
int Multi, int convert, int DrawMode,
int Color, bool DrawPinText)
{
int i, x1, y1, x2, y2, t1, t2, orient;
LibEDA_BaseStruct *DEntry = NULL;
int CharColor;
int fill_option;
int SetHightColor;
//#define GETCOLOR(l) Color < 0 ? (ReturnLayerColor(l)| SetHightColor) : Color;
#define GETCOLOR(l) Color < 0 ? SetHightColor ? s_ItemSelectColor : (ReturnLayerColor(l)| SetHightColor) : Color;
if (Entry->m_Drawings == NULL) return;
GRSetDrawMode(DC, DrawMode);
for( DEntry = Entry->m_Drawings; DEntry != NULL;DEntry = DEntry->Next())
{
/* Elimination des elements non relatifs a l'unite */
if( Multi && DEntry->m_Unit && (DEntry->m_Unit != Multi) ) continue;
if( convert && DEntry->m_Convert && (DEntry->m_Convert != convert) )
continue;
if ( DEntry->m_Flags & IS_MOVED ) continue; // Element en deplacement non trace
SetHightColor = (DEntry->m_Selected & IS_SELECTED) ? HIGHT_LIGHT_FLAG : 0;
switch (DEntry->m_StructType)
{
case COMPONENT_ARC_DRAW_TYPE:
{
int xc,yc, x2, y2;
LibDrawArc * Arc = (LibDrawArc *) DEntry;
CharColor = GETCOLOR(LAYER_DEVICE);
xc = Pos.x + TransMat[0][0] * Arc->m_Pos.x +
TransMat[0][1] * Arc->m_Pos.y;
yc = Pos.y + TransMat[1][0] * Arc->m_Pos.x +
TransMat[1][1] * Arc->m_Pos.y;
x2 = Pos.x + TransMat[0][0] * Arc->m_Start.x +
TransMat[0][1] * Arc->m_Start.y;;
y2 = Pos.y + TransMat[1][0] * Arc->m_Start.x +
TransMat[1][1] * Arc->m_Start.y;
x1 = Pos.x + TransMat[0][0] * Arc->m_End.x +
TransMat[0][1] * Arc->m_End.y;;
y1 = Pos.y + TransMat[1][0] * Arc->m_End.x +
TransMat[1][1] * Arc->m_End.y;
t1 = Arc->t1; t2 = Arc->t2;
bool swap = MapAngles(&t1, &t2, TransMat);
if ( swap ) { EXCHG(x1,x2); EXCHG(y1, y2) }
fill_option = Arc->m_Fill & (~g_PrintFillMask);
if ( Color < 0 ) // Normal Color Layer
{
if ( (fill_option == FILLED_WITH_BG_BODYCOLOR) && ! g_IsPrinting )
GRFilledArc(&panel->m_ClipBox, DC, xc, yc, t1, t2,
Arc->m_Rayon, CharColor,
ReturnLayerColor(LAYER_DEVICE_BACKGROUND));
else if ( fill_option == FILLED_SHAPE)
GRFilledArc(&panel->m_ClipBox, DC, xc, yc, t1, t2,
Arc->m_Rayon, CharColor, CharColor);
#ifdef DRAW_ARC_WITH_ANGLE
else GRArc(&panel->m_ClipBox, DC, xc, yc, t1, t2,
Arc->m_Rayon, CharColor);
#else
else GRArc1(&panel->m_ClipBox, DC, x1, y1, x2, y2,
xc, yc , CharColor);
#endif
}
#ifdef DRAW_ARC_WITH_ANGLE
else GRArc(&panel->m_ClipBox, DC, xc, yc, t1, t2,
Arc->m_Rayon, CharColor);
#else
else GRArc1(&panel->m_ClipBox, DC, x1, y1, x2, y2,
xc, yc, CharColor);
#endif
}
break;
case COMPONENT_CIRCLE_DRAW_TYPE:
{
LibDrawCircle * Circle = (LibDrawCircle *) DEntry;
CharColor = GETCOLOR(LAYER_DEVICE);
x1 = Pos.x + TransMat[0][0] * Circle->m_Pos.x +
TransMat[0][1] * Circle->m_Pos.y;
y1 = Pos.y + TransMat[1][0] * Circle->m_Pos.x +
TransMat[1][1] * Circle->m_Pos.y;
fill_option = Circle->m_Fill & (~g_PrintFillMask);
if ( Color < 0 )
{
if ( (fill_option == FILLED_WITH_BG_BODYCOLOR) && ! g_IsPrinting )
GRFilledCircle(&panel->m_ClipBox, DC, x1, y1,
Circle->m_Rayon, CharColor,
ReturnLayerColor(LAYER_DEVICE_BACKGROUND));
else if ( fill_option == FILLED_SHAPE)
GRFilledCircle(&panel->m_ClipBox, DC, x1, y1,
Circle->m_Rayon, CharColor, CharColor);
else GRCircle(&panel->m_ClipBox, DC, x1, y1,
Circle->m_Rayon, CharColor);
}
else GRCircle(&panel->m_ClipBox, DC, x1, y1,
Circle->m_Rayon, CharColor);
}
break;
case COMPONENT_GRAPHIC_TEXT_DRAW_TYPE:
{
LibDrawText * Text = (LibDrawText *) DEntry;
CharColor = GETCOLOR(LAYER_DEVICE);
/* The text orientation may need to be flipped if the
transformation matrix cuases xy axes to be flipped. */
t1 = (TransMat[0][0] != 0) ^ (Text->m_Horiz != 0);
x1 = Pos.x + TransMat[0][0] * Text->m_Pos.x
+ TransMat[0][1] * Text->m_Pos.y;
y1 = Pos.y + TransMat[1][0] * Text->m_Pos.x
+ TransMat[1][1] * Text->m_Pos.y;
PutTextInfo(panel, DC, t1 ? TEXT_ORIENT_HORIZ : TEXT_ORIENT_VERT,
wxPoint(x1, y1),
Text->m_Size,
Text->m_Text, DrawMode,CharColor);
}
break;
case COMPONENT_RECT_DRAW_TYPE:
{
LibDrawSquare * Square = (LibDrawSquare *) DEntry;
CharColor = GETCOLOR(LAYER_DEVICE);
x1 = Pos.x + TransMat[0][0] * Square->m_Start.x
+ TransMat[0][1] * Square->m_Start.y;
y1 = Pos.y + TransMat[1][0] * Square->m_Start.x
+ TransMat[1][1] * Square->m_Start.y;
x2 = Pos.x + TransMat[0][0] * Square->m_End.x
+ TransMat[0][1] * Square->m_End.y;
y2 = Pos.y + TransMat[1][0] * Square->m_End.x
+ TransMat[1][1] * Square->m_End.y;
fill_option = Square->m_Fill & (~g_PrintFillMask);
if ( Color < 0 )
{
if ( (fill_option == FILLED_WITH_BG_BODYCOLOR) && ! g_IsPrinting )
GRFilledRect(&panel->m_ClipBox, DC, x1, y1, x2, y2,
CharColor,
ReturnLayerColor(LAYER_DEVICE_BACKGROUND));
else if ( fill_option == FILLED_SHAPE)
GRFilledRect(&panel->m_ClipBox, DC, x1, y1, x2, y2,
CharColor, CharColor);
else GRRect(&panel->m_ClipBox, DC, x1, y1, x2, y2,
CharColor);
}
else GRRect(&panel->m_ClipBox, DC, x1, y1, x2, y2,
CharColor);
}
break;
case COMPONENT_PIN_DRAW_TYPE: /* Trace des Pins */
{
LibDrawPin * Pin = (LibDrawPin *) DEntry;
if(Pin->m_Attributs & PINNOTDRAW)
{
if( (ActiveScreen->m_Type == SCHEMATIC_FRAME) &&
!g_ShowAllPins )
break;
}
/* Calcul de l'orientation reelle de la Pin */
orient = Pin->ReturnPinDrawOrient(TransMat);
/* Calcul de la position du point de reference */
x2 = Pos.x + (TransMat[0][0] * Pin->m_Pos.x)
+ (TransMat[0][1] * Pin->m_Pos.y);
y2 = Pos.y + (TransMat[1][0] * Pin->m_Pos.x)
+ (TransMat[1][1] * Pin->m_Pos.y);
/* Dessin de la pin et du symbole special associe */
CharColor = GETCOLOR(LAYER_PIN);
DrawPinSymbol(panel, DC, x2, y2, Pin->m_PinLen, orient,
Pin->m_PinShape, DrawMode,
CharColor );
if ( DrawPinText )
{
wxPoint pinpos(x2,y2);
CharColor = SetHightColor ? s_ItemSelectColor : Color;
Pin->DrawPinTexts(panel, DC, pinpos, orient,
Entry->m_TextInside,
Entry->m_DrawPinNum,Entry->m_DrawPinName,
CharColor, DrawMode);
}
}
break;
case COMPONENT_POLYLINE_DRAW_TYPE:
{
LibDrawPolyline * polyline = (LibDrawPolyline *) DEntry;
CharColor = GETCOLOR(LAYER_DEVICE);
if ( Buf_Poly_Drawings == NULL )
{
Buf_Poly_Size = polyline->n;
Buf_Poly_Drawings = (int *) MyMalloc(sizeof(int) * 2 * Buf_Poly_Size);
}
else if ( Buf_Poly_Size < polyline->n )
{
Buf_Poly_Size = polyline->n;
Buf_Poly_Drawings = (int *) realloc(Buf_Poly_Drawings,
sizeof(int) * 2 * Buf_Poly_Size);
}
for (i = 0; i < polyline->n; i++)
{
Buf_Poly_Drawings[i * 2] = Pos.x +
TransMat[0][0] * polyline->PolyList[i * 2] +
TransMat[0][1] * polyline->PolyList[i * 2 + 1];
Buf_Poly_Drawings[i * 2 + 1] = Pos.y +
TransMat[1][0] * polyline->PolyList[i * 2] +
TransMat[1][1] * polyline->PolyList[i * 2 + 1];
}
fill_option = polyline->m_Fill & (~g_PrintFillMask);
if ( Color < 0 )
{
if ( (fill_option == FILLED_WITH_BG_BODYCOLOR) && ! g_IsPrinting )
GRPoly(&panel->m_ClipBox, DC, polyline->n,
Buf_Poly_Drawings, 1, CharColor,
ReturnLayerColor(LAYER_DEVICE_BACKGROUND));
else if ( fill_option == FILLED_SHAPE)
GRPoly(&panel->m_ClipBox, DC, polyline->n,
Buf_Poly_Drawings, 1, CharColor, CharColor);
else GRPoly(&panel->m_ClipBox, DC, polyline->n,
Buf_Poly_Drawings, 0, CharColor, CharColor);
}
else GRPoly(&panel->m_ClipBox, DC, polyline->n,
Buf_Poly_Drawings, 0, CharColor, CharColor);
}
break;
default:
wxBell();
break;
} /* Fin Switch */
} /* Fin Boucle de dessin */
if ( g_DebugLevel > 4 ) /* Draw the component boundary box */
{
EDA_Rect BoundaryBox;
if ( Component ) BoundaryBox = Component->GetBoundaryBox();
else BoundaryBox = Entry->GetBoundaryBox(Multi, convert);
x1 = BoundaryBox.GetX();
y1 = BoundaryBox.GetY();
x2 = BoundaryBox.GetRight();
y2 = BoundaryBox.GetBottom();
GRRect(&panel->m_ClipBox, DC, x1, y1, x2, y2, BROWN);
BoundaryBox = Component->m_Field[REFERENCE].GetBoundaryBox();
x1 = BoundaryBox.GetX();
y1 = BoundaryBox.GetY();
x2 = BoundaryBox.GetRight();
y2 = BoundaryBox.GetBottom();
GRRect(&panel->m_ClipBox, DC, x1, y1, x2, y2, BROWN);
BoundaryBox = Component->m_Field[VALUE].GetBoundaryBox();
x1 = BoundaryBox.GetX();
y1 = BoundaryBox.GetY();
x2 = BoundaryBox.GetRight();
y2 = BoundaryBox.GetBottom();
GRRect(&panel->m_ClipBox, DC, x1, y1, x2, y2, BROWN);
}
}
/*******************************************************/
void DrawPinSymbol(WinEDA_DrawPanel * panel, wxDC * DC,
int posX, int posY, int len, int orient,
int Shape, int DrawMode, int Color)
/*******************************************************/
/* Dessine la pin du symbole en cours de trace
si Color != 0 dessin en couleur Color, sinon en couleurs standard.
*/
{
int MapX1, MapY1, x1, y1;
int color;
if( Color >= 0) color = Color;
else color = ReturnLayerColor(LAYER_PIN);
GRSetDrawMode(DC, DrawMode);
MapX1 = MapY1 = 0; x1 = posX; y1 = posY;
switch ( orient )
{
case PIN_UP:
y1 = posY - len; MapY1 = 1;
break;
case PIN_DOWN:
y1 = posY + len; MapY1 = -1;
break;
case PIN_LEFT:
x1 = posX - len, MapX1 = 1;
break;
case PIN_RIGHT:
x1 = posX + len; MapX1 = -1;
break;
}
if( Shape & INVERT)
{
GRCircle(&panel->m_ClipBox, DC, MapX1 * INVERT_PIN_RADIUS + x1,
MapY1 * INVERT_PIN_RADIUS + y1,
INVERT_PIN_RADIUS, color);
GRMoveTo(MapX1 * INVERT_PIN_RADIUS * 2 + x1,
MapY1 * INVERT_PIN_RADIUS * 2 + y1);
GRLineTo(&panel->m_ClipBox, DC, posX, posY, color);
}
else
{
GRMoveTo(x1, y1);
GRLineTo(&panel->m_ClipBox, DC, posX, posY, color);
}
if(Shape & CLOCK)
{
if(MapY1 == 0 ) /* MapX1 = +- 1 */
{
GRMoveTo(x1, y1 + CLOCK_PIN_DIM);
GRLineTo(&panel->m_ClipBox, DC, x1 - MapX1 * CLOCK_PIN_DIM, y1, color);
GRLineTo(&panel->m_ClipBox, DC, x1, y1 - CLOCK_PIN_DIM, color);
}
else /* MapX1 = 0 */
{
GRMoveTo(x1 + CLOCK_PIN_DIM, y1 );
GRLineTo(&panel->m_ClipBox, DC, x1, y1 - MapY1 * CLOCK_PIN_DIM, color);
GRLineTo(&panel->m_ClipBox, DC, x1 - CLOCK_PIN_DIM, y1, color);
}
}
if(Shape & LOWLEVEL_IN) /* IEEE symbol "Active Low Input" */
{
if(MapY1 == 0 ) /* MapX1 = +- 1 */
{
GRMoveTo(x1 + MapX1 * IEEE_SYMBOL_PIN_DIM*2, y1);
GRLineTo(&panel->m_ClipBox, DC, x1 + MapX1 * IEEE_SYMBOL_PIN_DIM*2,
y1 - IEEE_SYMBOL_PIN_DIM, color);
GRLineTo(&panel->m_ClipBox, DC, x1, y1, color);
}
else /* MapX1 = 0 */
{
GRMoveTo(x1, y1 + MapY1 * IEEE_SYMBOL_PIN_DIM*2);
GRLineTo(&panel->m_ClipBox, DC, x1 - IEEE_SYMBOL_PIN_DIM,
y1 + MapY1 * IEEE_SYMBOL_PIN_DIM*2, color);
GRLineTo(&panel->m_ClipBox, DC, x1 , y1, color);
}
}
if(Shape & LOWLEVEL_OUT) /* IEEE symbol "Active Low Output" */
{
if(MapY1 == 0 ) /* MapX1 = +- 1 */
{
GRMoveTo(x1, y1 - IEEE_SYMBOL_PIN_DIM);
GRLineTo(&panel->m_ClipBox, DC, x1 + MapX1 * IEEE_SYMBOL_PIN_DIM*2, y1, color);
}
else /* MapX1 = 0 */
{
GRMoveTo(x1 - IEEE_SYMBOL_PIN_DIM, y1);
GRLineTo(&panel->m_ClipBox, DC, x1 , y1 + MapY1 * IEEE_SYMBOL_PIN_DIM*2, color);
}
}
/* Draw the pin end target (active end of the pin) */
if ( ! g_IsPrinting ) // Draw but do not print the pin end target */
GRCircle(&panel->m_ClipBox, DC, posX,posY,TARGET_PIN_DIAM, color);
}
/*****************************************************************************
* Routine to rotate the given angular direction by the given Transformation. *
* Input (and output) angles must be as follows: *
* Unit is 0.1 degre *
* Angle1 in [0..3600], Angle2 > Angle1 in [0..7200]. Arc is assumed to be less *
* than 180.0 degrees. *
* Algorithm: *
* Map the angles to a point on the unit circle which is mapped using the *
* transform (only mirror and rotate so it remains on the unit circle) to *
* a new point which is used to detect new angle. *
*****************************************************************************/
bool MapAngles(int *Angle1, int *Angle2, int TransMat[2][2])
{
int Angle, Delta;
double x, y, t;
bool swap = FALSE;
Delta = *Angle2 - *Angle1;
if ( Delta >= 1800 )
{
*Angle1 -=1;
*Angle2 +=1;
}
x = cos(*Angle1 * M_PI / 1800.0);
y = sin(*Angle1 * M_PI / 1800.0);
t = x * TransMat[0][0] + y * TransMat[0][1];
y = x * TransMat[1][0] + y * TransMat[1][1];
x = t;
*Angle1 = (int) (atan2(y, x) * 1800.0 / M_PI + 0.5);
x = cos(*Angle2 * M_PI / 1800.0);
y = sin(*Angle2 * M_PI / 1800.0);
t = x * TransMat[0][0] + y * TransMat[0][1];
y = x * TransMat[1][0] + y * TransMat[1][1];
x = t;
*Angle2 = (int) (atan2(y, x) * 1800.0 / M_PI + 0.5);
NORMALIZE_ANGLE(*Angle1);
NORMALIZE_ANGLE(*Angle2);
if (*Angle2 < *Angle1) *Angle2 += 3600;
if (*Angle2 - *Angle1 > 1800)
{ /* Need to swap the two angles. */
Angle = (*Angle1);
*Angle1 = (*Angle2);
*Angle2 = Angle;
NORMALIZE_ANGLE(*Angle1);
NORMALIZE_ANGLE(*Angle2);
if (*Angle2 < *Angle1) *Angle2 += 3600;
swap = TRUE;
}
if ( Delta >= 1800 )
{
*Angle1 +=1;
*Angle2 -=1;
}
return swap;
}
/*****************************************************************************
* Routine to display an outline version of given library entry. *
* This routine is applied by the PlaceLibItem routine above. *
*****************************************************************************/
void DrawingLibInGhost(WinEDA_DrawPanel * panel, wxDC * DC,
EDA_LibComponentStruct *LibEntry,
EDA_SchComponentStruct *DrawLibItem, int PartX, int PartY,
int multi, int convert, int Color, bool DrawPinText)
{
int DrawMode = g_XorMode;
DrawLibPartAux(panel, DC, DrawLibItem, LibEntry, wxPoint(PartX, PartY),
DrawLibItem->m_Transform,
multi, convert, DrawMode, Color, DrawPinText);
}
/************************************************************/
/* Routine to draw One LibraryDrawStruct at given position, */
/* matrice de transformation 1 0 0 -1 (normale) */
/* DrawMode = GrXOR, GrOR .. */
/************************************************************/
/* Utilise en LibEdit et Lib Browse */
void DrawLibraryDrawStruct(WinEDA_DrawPanel * panel, wxDC * DC,
EDA_LibComponentStruct *LibEntry,
int PartX, int PartY,
LibEDA_BaseStruct *DrawItem, int Multi,
int DrawMode, int Color)
{
int i, x1, y1, x2, y2, t1, t2, orient;
int CharColor;
int TransMat[2][2];
int fill_option;
#undef GETCOLOR
#define GETCOLOR(l) Color < 0 ? ReturnLayerColor(l) : Color;
Multi = 0; /* unused */
/* Trace de la structure */
CharColor = GETCOLOR(LAYER_DEVICE);
GRSetDrawMode(DC, DrawMode);
TransMat[0][0] = 1;
TransMat[0][1] = TransMat[1][0] = 0;
TransMat[1][1] = -1;
switch (DrawItem->m_StructType)
{
case COMPONENT_ARC_DRAW_TYPE:
{
int xc,yc, x2,y2;
LibDrawArc * Arc = (LibDrawArc *) DrawItem;
t1 = Arc->t1; t2 = Arc->t2;
bool swap = MapAngles(&t1, &t2, TransMat);
xc = PartX + Arc->m_Pos.x;
yc = PartY - Arc->m_Pos.y;
x2 = PartX + Arc->m_Start.x;
y2 = PartY - Arc->m_Start.y;
x1 = PartX + Arc->m_End.x;
y1 = PartY - Arc->m_End.y;
if ( swap ) { EXCHG(x1,x2); EXCHG(y1, y2)}
fill_option = Arc->m_Fill & (~g_PrintFillMask);
if ( (Arc->m_Fill == FILLED_WITH_BG_BODYCOLOR) && ! g_IsPrinting )
GRFilledArc(&panel->m_ClipBox, DC, xc, yc, t1, t2,
Arc->m_Rayon, CharColor,
ReturnLayerColor(LAYER_DEVICE_BACKGROUND));
else if ( Arc->m_Fill == FILLED_SHAPE)
GRFilledArc(&panel->m_ClipBox, DC, xc, yc, t1, t2,
Arc->m_Rayon, CharColor, CharColor);
#ifdef DRAW_ARC_WITH_ANGLE
else GRArc(&panel->m_ClipBox, DC, xc, yc, t1, t2,
Arc->m_Rayon, CharColor);
#else
else GRArc1(&panel->m_ClipBox, DC, x1, y1, x2, y2,
xc, yc, CharColor);
#endif
}
break;
case COMPONENT_CIRCLE_DRAW_TYPE:
{
LibDrawCircle * Circle = (LibDrawCircle *) DrawItem;
x1 = PartX + Circle->m_Pos.x;
y1 = PartY - Circle->m_Pos.y;
fill_option = Circle->m_Fill & (~g_PrintFillMask);
if ( (fill_option == FILLED_WITH_BG_BODYCOLOR) && ! g_IsPrinting )
GRFilledCircle(&panel->m_ClipBox, DC, x1, y1,
Circle->m_Rayon, CharColor,
ReturnLayerColor(LAYER_DEVICE_BACKGROUND));
else if ( fill_option == FILLED_SHAPE)
GRFilledCircle(&panel->m_ClipBox, DC, x1, y1,
Circle->m_Rayon, CharColor, CharColor);
else GRCircle(&panel->m_ClipBox, DC, x1, y1,
Circle->m_Rayon, CharColor);
}
break;
case COMPONENT_GRAPHIC_TEXT_DRAW_TYPE:
{
LibDrawText * Text = (LibDrawText *) DrawItem;
x1 = PartX + Text->m_Pos.x;
y1 = PartY - Text->m_Pos.y;
PutTextInfo(panel, DC, Text->m_Horiz, wxPoint(x1, y1),
Text->m_Size, Text->m_Text,
DrawMode,CharColor);
}
break;
case COMPONENT_RECT_DRAW_TYPE:
{
LibDrawSquare * Square = (LibDrawSquare *) DrawItem;
x1 = PartX + Square->m_Start.x;
y1 = PartY - Square->m_Start.y;
x2 = PartX + Square->m_End.x;
y2 = PartY - Square->m_End.y;
fill_option = Square->m_Fill & (~g_PrintFillMask);
if ( (fill_option == FILLED_WITH_BG_BODYCOLOR) && ! g_IsPrinting )
GRFilledRect(&panel->m_ClipBox, DC, x1, y1, x2, y2,
CharColor,
ReturnLayerColor(LAYER_DEVICE_BACKGROUND));
else if ( fill_option == FILLED_SHAPE)
GRFilledRect(&panel->m_ClipBox, DC, x1, y1, x2, y2,
CharColor, CharColor);
else GRRect(&panel->m_ClipBox, DC, x1, y1, x2, y2,
CharColor);
}
break;
case COMPONENT_PIN_DRAW_TYPE: /* Trace des Pins */
{
LibDrawPin * Pin = (LibDrawPin *) DrawItem;
x2 = PartX + Pin->m_Pos.x;
y2 = PartY - Pin->m_Pos.y;
/* Compute the real pin orientation, i.e. pin orient + component orient */
orient = Pin->ReturnPinDrawOrient(TransMat);
/* Dessin de la pin et du symbole special associe */
if( Pin->m_Attributs & PINNOTDRAW) CharColor = DARKGRAY;
else CharColor = -1;
DrawPinSymbol(panel, DC, x2, y2, Pin->m_PinLen, orient,
Pin->m_PinShape, DrawMode);
wxPoint pinpos(x2,y2);
Pin->DrawPinTexts(panel, DC, pinpos, orient,
LibEntry->m_TextInside,
LibEntry->m_DrawPinNum,LibEntry->m_DrawPinName,
CharColor, DrawMode);
}
break;
case COMPONENT_POLYLINE_DRAW_TYPE:
{
LibDrawPolyline * polyline = (LibDrawPolyline *) DrawItem;
if ( Buf_Poly_Drawings == NULL )
{
Buf_Poly_Size = polyline->n;
Buf_Poly_Drawings = (int *) MyMalloc(sizeof(int) * 2 * Buf_Poly_Size);
}
else if ( Buf_Poly_Size < polyline->n )
{
Buf_Poly_Size = polyline->n;
Buf_Poly_Drawings = (int *) realloc(Buf_Poly_Drawings,
sizeof(int) * 2 * Buf_Poly_Size);
}
for (i = 0; i < polyline->n; i++)
{
Buf_Poly_Drawings[i * 2] = PartX + polyline->PolyList[i * 2];
Buf_Poly_Drawings[i * 2 + 1] = PartY - polyline->PolyList[i * 2 + 1];
}
fill_option = polyline->m_Fill & (~g_PrintFillMask);
if ( (fill_option == FILLED_WITH_BG_BODYCOLOR) && ! g_IsPrinting )
GRPoly(&panel->m_ClipBox, DC, polyline->n,
Buf_Poly_Drawings, 1, CharColor,
ReturnLayerColor(LAYER_DEVICE_BACKGROUND));
else if ( fill_option == FILLED_SHAPE)
GRPoly(&panel->m_ClipBox, DC, polyline->n,
Buf_Poly_Drawings, 1, CharColor, CharColor);
else GRPoly(&panel->m_ClipBox, DC, polyline->n,
Buf_Poly_Drawings, 0, CharColor, CharColor);
break;
}
}
}

View File

@ -161,8 +161,7 @@ void InstallErcFrame(WinEDA_SchematicFrame *parent, wxPoint & pos)
/*********************************************/ /*********************************************/
void WinEDA_ErcFrame::ReBuildMatrixPanel(void) void WinEDA_ErcFrame::ReBuildMatrixPanel(void)
/*********************************************/ /*********************************************/
/* construit ou reconstruit le panel d'affichage de la matrice de /* Build or rebuild the panel showing the ERC matrix
controle ERC
*/ */
{ {
int ii, jj, event_id, text_height; int ii, jj, event_id, text_height;
@ -666,10 +665,9 @@ int ref_elect_type, jj, erc = OK, local_minconn;
/********************************************************/ /********************************************************/
static bool WriteDiagnosticERC(const wxString & FullFileName) static bool WriteDiagnosticERC(const wxString & FullFileName)
/*********************************************************/ /*********************************************************/
/* Genere le fichier des diagnostics /* Create the Diagnostic file (<xxx>.erc file)
*/ */
{ {
SCH_SCREEN * Window;
EDA_BaseStruct * DrawStruct; EDA_BaseStruct * DrawStruct;
DrawMarkerStruct * Marker; DrawMarkerStruct * Marker;
char Line[256]; char Line[256];
@ -683,22 +681,22 @@ wxString msg;
msg = _("ERC control"); msg = _("ERC control");
fprintf( OutErc, "%s (%s)\n", CONV_TO_UTF8(msg), Line); fprintf( OutErc, "%s (%s)\n", CONV_TO_UTF8(msg), Line);
for( Window = ScreenSch; Window != NULL; Window = (SCH_SCREEN*)Window->Pnext ) EDA_ScreenList ScreenList(NULL);
{ for ( SCH_SCREEN * Screen = ScreenList.GetFirst(); Screen != NULL; Screen = ScreenList.GetNext() )
Sheet = (DrawSheetStruct *) Window->m_Parent; {
Sheet = (DrawSheetStruct*) Screen;
msg.Printf( _("\n***** Sheet %d (%s)\n"), msg.Printf( _("\n***** Sheet %d (%s)\n"),
Window->m_SheetNumber, Sheet->m_SheetNumber,
Sheet ? Sheet->m_SheetName.GetData() : _("Root")); Screen == ScreenSch ? _("Root") : Sheet->m_SheetName.GetData());
fprintf( OutErc, "%s", CONV_TO_UTF8(msg)); fprintf( OutErc, "%s", CONV_TO_UTF8(msg));
DrawStruct = Window->EEDrawList; DrawStruct = Screen->EEDrawList;
for ( ; DrawStruct != NULL; DrawStruct = DrawStruct->Pnext) for ( ; DrawStruct != NULL; DrawStruct = DrawStruct->Pnext)
{ {
if(DrawStruct->m_StructType != DRAW_MARKER_STRUCT_TYPE ) if(DrawStruct->m_StructType != DRAW_MARKER_STRUCT_TYPE )
continue; continue;
/* Marqueur trouve */
/* Marqueur trouve */
Marker = (DrawMarkerStruct * ) DrawStruct; Marker = (DrawMarkerStruct * ) DrawStruct;
if( Marker->m_Type != MARQ_ERC ) continue; if( Marker->m_Type != MARQ_ERC ) continue;
/* Write diag marqueur */ /* Write diag marqueur */
@ -707,8 +705,8 @@ wxString msg;
(float)Marker->m_Pos.x / 1000, (float)Marker->m_Pos.x / 1000,
(float)Marker->m_Pos.y / 1000); (float)Marker->m_Pos.y / 1000);
fprintf( OutErc, "%s", CONV_TO_UTF8(msg)); fprintf( OutErc, "%s", CONV_TO_UTF8(msg));
}
} }
}
msg.Printf( _("\n >> Errors ERC: %d\n"), g_EESchemaVar.NbErrorErc); msg.Printf( _("\n >> Errors ERC: %d\n"), g_EESchemaVar.NbErrorErc);
fprintf( OutErc, "%s", CONV_TO_UTF8(msg)); fprintf( OutErc, "%s", CONV_TO_UTF8(msg));
fclose ( OutErc ); fclose ( OutErc );

View File

@ -174,7 +174,7 @@ void InstallNetlistFrame(WinEDA_SchematicFrame *parent, wxPoint & pos)
} }
#define H_SIZE 370 #define H_SIZE 370
#define V_SIZE 260 #define V_SIZE 300
/*************************************************************************************/ /*************************************************************************************/
WinEDA_NetlistFrame::WinEDA_NetlistFrame(WinEDA_SchematicFrame *parent, wxPoint& framepos): WinEDA_NetlistFrame::WinEDA_NetlistFrame(WinEDA_SchematicFrame *parent, wxPoint& framepos):

View File

@ -528,8 +528,10 @@ int margin;
PlotFileName = MakeFileName(dirbuf, ShortFileName, wxT(".plt")); PlotFileName = MakeFileName(dirbuf, ShortFileName, wxT(".plt"));
else PlotFileName = MakeFileName(dirbuf, g_DefaultSchematicFileName, wxT(".plt")); else PlotFileName = MakeFileName(dirbuf, g_DefaultSchematicFileName, wxT(".plt"));
setlocale(LC_NUMERIC, "C");
InitPlotParametresHPGL(PlotOffset, g_PlotScaleX, g_PlotScaleY); InitPlotParametresHPGL(PlotOffset, g_PlotScaleX, g_PlotScaleY);
Plot_1_Page_HPGL(PlotFileName,screen); Plot_1_Page_HPGL(PlotFileName,screen);
setlocale(LC_NUMERIC, "");
screen = (BASE_SCREEN*)screen->Pnext; screen = (BASE_SCREEN*)screen->Pnext;
if ( Select_PlotAll == FALSE ) break; if ( Select_PlotAll == FALSE ) break;
} }

View File

@ -391,6 +391,7 @@ wxPoint StartPos, EndPos;
return ; return ;
} }
setlocale(LC_NUMERIC, "C");
Line.Printf(_("Plot: %s\n"), FileName.GetData()) ; Line.Printf(_("Plot: %s\n"), FileName.GetData()) ;
m_MsgBox->AppendText(Line); m_MsgBox->AppendText(Line);
@ -507,6 +508,7 @@ wxPoint StartPos, EndPos;
/* fin */ /* fin */
CloseFilePS(PlotOutput); CloseFilePS(PlotOutput);
setlocale(LC_NUMERIC, "");
m_MsgBox->AppendText( wxT("Ok\n")); m_MsgBox->AppendText( wxT("Ok\n"));
} }

View File

@ -233,12 +233,14 @@ int ii;
/* Update the part selection box */ /* Update the part selection box */
int jj = 1; int jj = 1;
if( CurrentLibEntry ) jj = CurrentLibEntry->m_UnitCount; if( CurrentLibEntry ) jj = CurrentLibEntry->m_UnitCount;
for ( ii = 0; ii < jj ; ii ++ ) if ( jj > 1 )
{ for ( ii = 0; ii < jj ; ii ++ )
wxString msg; {
msg.Printf(_("Part %c"), 'A' + ii); wxString msg;
m_SelpartBox->Append(msg); msg.Printf(_("Part %c"), 'A' + ii);
} m_SelpartBox->Append(msg);
}
else m_SelpartBox->Append( wxEmptyString );
m_SelpartBox->SetSelection( ( CurrentUnit > 0 ) ? CurrentUnit-1 : 0); m_SelpartBox->SetSelection( ( CurrentUnit > 0 ) ? CurrentUnit-1 : 0);
if( CurrentLibEntry) if( CurrentLibEntry)

View File

@ -1,139 +0,0 @@
/////////////////////////////////////////////////////////////////////////////
// Name: xx.cpp
// Purpose:
// Author: jean-pierre Charras
// Modified by:
// Created: 02/03/2006 09:16:35
// RCS-ID:
// Copyright: License GNU
// Licence:
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 02/03/2006 09:16:35
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "xx.h"
#endif
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
////@begin includes
////@end includes
#include "xx.h"
////@begin XPM images
////@end XPM images
/*!
* xx type definition
*/
IMPLEMENT_DYNAMIC_CLASS( xx, wxDialog )
/*!
* xx event table definition
*/
BEGIN_EVENT_TABLE( xx, wxDialog )
////@begin xx event table entries
////@end xx event table entries
END_EVENT_TABLE()
/*!
* xx constructors
*/
xx::xx( )
{
}
xx::xx( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{
Create(parent, id, caption, pos, size, style);
}
/*!
* xx creator
*/
bool xx::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{
////@begin xx member initialisation
////@end xx member initialisation
////@begin xx creation
SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS);
wxDialog::Create( parent, id, caption, pos, size, style );
CreateControls();
GetSizer()->Fit(this);
GetSizer()->SetSizeHints(this);
Centre();
////@end xx creation
return true;
}
/*!
* Control creation for xx
*/
void xx::CreateControls()
{
////@begin xx content construction
// Generated by DialogBlocks, 02/03/2006 09:16:35 (unregistered)
xx* itemDialog1 = this;
wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
itemDialog1->SetSizer(itemBoxSizer2);
////@end xx content construction
}
/*!
* Should we show tooltips?
*/
bool xx::ShowToolTips()
{
return true;
}
/*!
* Get bitmap resources
*/
wxBitmap xx::GetBitmapResource( const wxString& name )
{
// Bitmap retrieval
////@begin xx bitmap retrieval
wxUnusedVar(name);
return wxNullBitmap;
////@end xx bitmap retrieval
}
/*!
* Get icon resources
*/
wxIcon xx::GetIconResource( const wxString& name )
{
// Icon retrieval
////@begin xx icon retrieval
wxUnusedVar(name);
return wxNullIcon;
////@end xx icon retrieval
}

View File

@ -1,95 +0,0 @@
/////////////////////////////////////////////////////////////////////////////
// Name: xx.h
// Purpose:
// Author: jean-pierre Charras
// Modified by:
// Created: 02/03/2006 09:16:35
// RCS-ID:
// Copyright: License GNU
// Licence:
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 02/03/2006 09:16:35
#ifndef _XX_H_
#define _XX_H_
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma interface "xx.h"
#endif
/*!
* Includes
*/
////@begin includes
////@end includes
/*!
* Forward declarations
*/
////@begin forward declarations
////@end forward declarations
/*!
* Control identifiers
*/
////@begin control identifiers
#define ID_DIALOG 10015
#define SYMBOL_XX_STYLE wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX
#define SYMBOL_XX_TITLE _("xx")
#define SYMBOL_XX_IDNAME ID_DIALOG
#define SYMBOL_XX_SIZE wxSize(400, 300)
#define SYMBOL_XX_POSITION wxDefaultPosition
////@end control identifiers
/*!
* Compatibility
*/
#ifndef wxCLOSE_BOX
#define wxCLOSE_BOX 0x1000
#endif
/*!
* xx class declaration
*/
class xx: public wxDialog
{
DECLARE_DYNAMIC_CLASS( xx )
DECLARE_EVENT_TABLE()
public:
/// Constructors
xx( );
xx( wxWindow* parent, wxWindowID id = SYMBOL_XX_IDNAME, const wxString& caption = SYMBOL_XX_TITLE, const wxPoint& pos = SYMBOL_XX_POSITION, const wxSize& size = SYMBOL_XX_SIZE, long style = SYMBOL_XX_STYLE );
/// Creation
bool Create( wxWindow* parent, wxWindowID id = SYMBOL_XX_IDNAME, const wxString& caption = SYMBOL_XX_TITLE, const wxPoint& pos = SYMBOL_XX_POSITION, const wxSize& size = SYMBOL_XX_SIZE, long style = SYMBOL_XX_STYLE );
/// Creates the controls and sizers
void CreateControls();
////@begin xx event handler declarations
////@end xx event handler declarations
////@begin xx member function declarations
/// Retrieves bitmap resources
wxBitmap GetBitmapResource( const wxString& name );
/// Retrieves icon resources
wxIcon GetIconResource( const wxString& name );
////@end xx member function declarations
/// Should we show tooltips?
static bool ShowToolTips();
////@begin xx member variables
////@end xx member variables
};
#endif
// _XX_H_

View File

@ -69,7 +69,6 @@ char text[1024];
fprintf(File,"$SETUP\n"); fprintf(File,"$SETUP\n");
sprintf(text, "InternalUnit %f INCH\n", 1.0/PCB_INTERNAL_UNIT); sprintf(text, "InternalUnit %f INCH\n", 1.0/PCB_INTERNAL_UNIT);
to_point(text);
fprintf(File, text); fprintf(File, text);
Pcb->m_BoardSettings->m_CopperLayerCount = g_DesignSettings.m_CopperLayerCount; Pcb->m_BoardSettings->m_CopperLayerCount = g_DesignSettings.m_CopperLayerCount;

View File

@ -109,7 +109,6 @@ bool WinEDA_GerberFrame::Read_GERBER_File(wxDC * DC,
/* Lecture de 1 fichier gerber. /* Lecture de 1 fichier gerber.
Format Format
Imperial Imperial
2.3
Absolu Absolu
fin de bloc = * fin de bloc = *
CrLf apres chaque commande CrLf apres chaque commande
@ -148,6 +147,7 @@ int error = 0;
wxSetWorkingDirectory(wxPathOnly(GERBER_FullFileName)); wxSetWorkingDirectory(wxPathOnly(GERBER_FullFileName));
wxBusyCursor show_wait; wxBusyCursor show_wait;
setlocale(LC_NUMERIC, "C");
while( TRUE ) while( TRUE )
{ {
@ -237,6 +237,8 @@ wxBusyCursor show_wait;
} }
fclose(gerber_layer->m_Current_File) ; fclose(gerber_layer->m_Current_File) ;
setlocale(LC_NUMERIC, "");
/* Init tableau des DCodes et Lecture fichier DCODES */ /* Init tableau des DCodes et Lecture fichier DCODES */
if ( !gerber_layer->m_As_DCode ) if ( !gerber_layer->m_As_DCode )
{ {
@ -266,7 +268,6 @@ wxBusyCursor show_wait;
} }
} }
return TRUE; return TRUE;
} }

View File

@ -101,17 +101,14 @@ char buf[256], * ptchar;
ptchar = buf; ptchar = buf;
while ( text && *text == ' ' ) text++; // Skip blanks before number while ( text && *text == ' ' ) text++; // Skip blanks before number
while ( text && *text) while ( text && *text)
{ {
if ( IsNumber(*text) ) if ( IsNumber(*text) )
{ {
* ptchar = * text; * ptchar = * text;
if ( * ptchar =='.' || *ptchar == ',' ) * ptchar = g_FloatSeparator;
text++; ptchar ++; text++; ptchar ++;
}
else break;
} }
else break;
}
*ptchar = 0; *ptchar = 0;
nb = atof(buf); nb = atof(buf);

View File

@ -5,7 +5,7 @@
COMMON_GLOBL wxString g_BuildVersion COMMON_GLOBL wxString g_BuildVersion
#ifdef EDA_BASE #ifdef EDA_BASE
(wxT("(2007-05-25)")) (wxT("(2007-06-12)"))
#endif #endif
; ;

View File

@ -273,7 +273,6 @@ COMMON_GLOBL wxString g_UserLibDirBuffer; // Chemin des librairies de module don
/* variables globales generales */ /* variables globales generales */
COMMON_GLOBL int g_FloatSeparator; // = '.' ou = ',' selon locale pour l'ecriture des nombres flotttant
COMMON_GLOBL int g_DebugLevel; // 0= Pas de debug */ COMMON_GLOBL int g_DebugLevel; // 0= Pas de debug */
COMMON_GLOBL int g_MouseOldButtons; COMMON_GLOBL int g_MouseOldButtons;
COMMON_GLOBL int g_KeyPressed; COMMON_GLOBL int g_KeyPressed;
@ -352,7 +351,7 @@ class WinEDA_DrawPanel;
/* COMMON.CPP */ /* COMMON.CPP */
wxString ReturnPcbLayerName(int layer_number, bool is_filename = FALSE); wxString ReturnPcbLayerName(int layer_number, bool is_filename = FALSE, bool is_gui = FALSE);
/* Return the name of the layer number "layer_number". /* Return the name of the layer number "layer_number".
if "is_filename" == TRUE, the name can be used for a file name if "is_filename" == TRUE, the name can be used for a file name
(not internatinalized, no space)*/ (not internatinalized, no space)*/

View File

@ -698,7 +698,7 @@ enum main_id {
ID_AUX_TOOLBAR_PCB_VIA_SIZE, ID_AUX_TOOLBAR_PCB_VIA_SIZE,
ID_AUX_TOOLBAR_PCB_TRACK_WIDTH, ID_AUX_TOOLBAR_PCB_TRACK_WIDTH,
ID_AUX_TOOLBAR_PCB_UNUSED1, ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR,
ID_AUX_TOOLBAR_PCB_UNUSED2, ID_AUX_TOOLBAR_PCB_UNUSED2,
ID_AUX_TOOLBAR_PCB_UNUSED3, ID_AUX_TOOLBAR_PCB_UNUSED3,
ID_AUX_TOOLBAR_PCB_UNUSED4, ID_AUX_TOOLBAR_PCB_UNUSED4,

View File

@ -479,6 +479,7 @@ public:
// Gestion des layers: // Gestion des layers:
int SelectLayer(int default_layer, int min_layer, int max_layer); int SelectLayer(int default_layer, int min_layer, int max_layer);
void SelectLayerPair(void); void SelectLayerPair(void);
void SwitchLayer(wxDC *DC, int layer);
// divers // divers
void AddHistory(int value, DrawStructureType type); // Add value in data list history void AddHistory(int value, DrawStructureType type); // Add value in data list history
@ -528,6 +529,7 @@ public:
void ReCreateOptToolbar(void); void ReCreateOptToolbar(void);
void ReCreateMenuBar(void); void ReCreateMenuBar(void);
WinEDAChoiceBox * ReCreateLayerBox( WinEDA_Toolbar * parent); WinEDAChoiceBox * ReCreateLayerBox( WinEDA_Toolbar * parent);
void PrepareLayerIndicator(void);
void OnLeftClick(wxDC * DC, const wxPoint& MousePos); void OnLeftClick(wxDC * DC, const wxPoint& MousePos);
void OnLeftDClick(wxDC * DC, const wxPoint& MousePos); void OnLeftDClick(wxDC * DC, const wxPoint& MousePos);
void OnRightClick(const wxPoint& MousePos, wxMenu * PopMenu); void OnRightClick(const wxPoint& MousePos, wxMenu * PopMenu);
@ -627,6 +629,7 @@ public:
void Start_MoveOneNodeOrSegment(TRACK * track, wxDC * DC, int command); void Start_MoveOneNodeOrSegment(TRACK * track, wxDC * DC, int command);
bool PlaceDraggedTrackSegment(TRACK * Track, wxDC * DC); bool PlaceDraggedTrackSegment(TRACK * Track, wxDC * DC);
void Start_DragTrackSegmentAndKeepSlope(TRACK * track, wxDC * DC); void Start_DragTrackSegmentAndKeepSlope(TRACK * track, wxDC * DC);
void SwitchLayer(wxDC *DC, int layer);
// Edition des zones // Edition des zones
EDGE_ZONE * Del_SegmEdgeZone(wxDC * DC, EDGE_ZONE * edge_zone); EDGE_ZONE * Del_SegmEdgeZone(wxDC * DC, EDGE_ZONE * edge_zone);

View File

@ -0,0 +1,255 @@
/////////////////////////////////////////////////////////////////////////////
// Name: cleaningoptions_dialog.cpp
// Purpose:
// Author: jean-pierre Charras
// Modified by:
// Created: 25/05/2007 14:24:54
// RCS-ID:
// Copyright: GNU License
// Licence:
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 25/05/2007 14:24:54
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "cleaningoptions_dialog.h"
#endif
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
////@begin includes
////@end includes
#include "cleaningoptions_dialog.h"
////@begin XPM images
////@end XPM images
/*!
* WinEDA_CleaningOptionsFrame type definition
*/
IMPLEMENT_DYNAMIC_CLASS( WinEDA_CleaningOptionsFrame, wxDialog )
/*!
* WinEDA_CleaningOptionsFrame event table definition
*/
BEGIN_EVENT_TABLE( WinEDA_CleaningOptionsFrame, wxDialog )
////@begin WinEDA_CleaningOptionsFrame event table entries
EVT_CLOSE( WinEDA_CleaningOptionsFrame::OnCloseWindow )
EVT_BUTTON( ID_BUTTON_EXECUTE, WinEDA_CleaningOptionsFrame::OnButtonExecuteClick )
////@end WinEDA_CleaningOptionsFrame event table entries
END_EVENT_TABLE()
/*!
* WinEDA_CleaningOptionsFrame constructors
*/
WinEDA_CleaningOptionsFrame::WinEDA_CleaningOptionsFrame()
{
Init();
}
WinEDA_CleaningOptionsFrame::WinEDA_CleaningOptionsFrame( WinEDA_PcbFrame* parent, wxDC * DC, wxWindowID id,
const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{
Init();
m_Parent = parent;
m_DC = DC;
Create(parent, id, caption, pos, size, style);
}
/*!
* WinEDA_CleaningOptionsFrame creator
*/
bool WinEDA_CleaningOptionsFrame::Create( wxWindow * parent, wxWindowID id,
const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{
////@begin WinEDA_CleaningOptionsFrame creation
SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
wxDialog::Create( parent, id, caption, pos, size, style );
CreateControls();
if (GetSizer())
{
GetSizer()->SetSizeHints(this);
}
Centre();
////@end WinEDA_CleaningOptionsFrame creation
return true;
}
/*!
* WinEDA_CleaningOptionsFrame destructor
*/
WinEDA_CleaningOptionsFrame::~WinEDA_CleaningOptionsFrame()
{
////@begin WinEDA_CleaningOptionsFrame destruction
////@end WinEDA_CleaningOptionsFrame destruction
}
/*!
* Member initialisation
*/
void WinEDA_CleaningOptionsFrame::Init()
{
m_Parent = NULL;
////@begin WinEDA_CleaningOptionsFrame member initialisation
m_CleanViasOpt = NULL;
m_MergetSegmOpt = NULL;
m_DeleteunconnectedOpt = NULL;
m_ConnectToPadsOpt = NULL;
////@end WinEDA_CleaningOptionsFrame member initialisation
}
/*!
* Control creation for WinEDA_CleaningOptionsFrame
*/
void WinEDA_CleaningOptionsFrame::CreateControls()
{
////@begin WinEDA_CleaningOptionsFrame content construction
// Generated by DialogBlocks, 28/05/2007 19:08:46 (unregistered)
WinEDA_CleaningOptionsFrame* itemDialog1 = this;
wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
itemDialog1->SetSizer(itemBoxSizer2);
wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxHORIZONTAL);
itemBoxSizer2->Add(itemBoxSizer3, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxStaticBox* itemStaticBoxSizer4Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Static"));
wxStaticBoxSizer* itemStaticBoxSizer4 = new wxStaticBoxSizer(itemStaticBoxSizer4Static, wxVERTICAL);
itemBoxSizer3->Add(itemStaticBoxSizer4, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_CleanViasOpt = new wxCheckBox( itemDialog1, ID_CHECKBOX_CLEAN_VIAS, _("Delete redundant vias"), wxDefaultPosition, wxDefaultSize, 0 );
m_CleanViasOpt->SetValue(false);
itemStaticBoxSizer4->Add(m_CleanViasOpt, 0, wxALIGN_LEFT|wxALL, 5);
m_MergetSegmOpt = new wxCheckBox( itemDialog1, ID_CHECKBOX_MERGE_SEGMENTS, _("Merge segments"), wxDefaultPosition, wxDefaultSize, 0 );
m_MergetSegmOpt->SetValue(false);
itemStaticBoxSizer4->Add(m_MergetSegmOpt, 0, wxALIGN_LEFT|wxALL, 5);
m_DeleteunconnectedOpt = new wxCheckBox( itemDialog1, ID_CHECKBOX1, _("Delete unconnected tracks"), wxDefaultPosition, wxDefaultSize, 0 );
m_DeleteunconnectedOpt->SetValue(false);
itemStaticBoxSizer4->Add(m_DeleteunconnectedOpt, 0, wxALIGN_LEFT|wxALL, 5);
m_ConnectToPadsOpt = new wxCheckBox( itemDialog1, ID_CHECKBOX, _("Connect stubs to Pads"), wxDefaultPosition, wxDefaultSize, 0 );
m_ConnectToPadsOpt->SetValue(false);
itemStaticBoxSizer4->Add(m_ConnectToPadsOpt, 0, wxALIGN_LEFT|wxALL, 5);
wxBoxSizer* itemBoxSizer9 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer3->Add(itemBoxSizer9, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxButton* itemButton10 = new wxButton( itemDialog1, ID_BUTTON_EXECUTE, _("Clean pcb"), wxDefaultPosition, wxDefaultSize, 0 );
itemButton10->SetDefault();
itemBoxSizer9->Add(itemButton10, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
// Set validators
m_CleanViasOpt->SetValidator( wxGenericValidator(& s_CleanVias) );
m_MergetSegmOpt->SetValidator( wxGenericValidator(& s_MergeSegments) );
m_DeleteunconnectedOpt->SetValidator( wxGenericValidator(& s_DeleteUnconnectedSegm) );
////@end WinEDA_CleaningOptionsFrame content construction
}
/*!
* Should we show tooltips?
*/
bool WinEDA_CleaningOptionsFrame::ShowToolTips()
{
return true;
}
/*!
* Get bitmap resources
*/
wxBitmap WinEDA_CleaningOptionsFrame::GetBitmapResource( const wxString& name )
{
// Bitmap retrieval
////@begin WinEDA_CleaningOptionsFrame bitmap retrieval
wxUnusedVar(name);
return wxNullBitmap;
////@end WinEDA_CleaningOptionsFrame bitmap retrieval
}
/*!
* Get icon resources
*/
wxIcon WinEDA_CleaningOptionsFrame::GetIconResource( const wxString& name )
{
// Icon retrieval
////@begin WinEDA_CleaningOptionsFrame icon retrieval
wxUnusedVar(name);
return wxNullIcon;
////@end WinEDA_CleaningOptionsFrame icon retrieval
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_EXECUTE
*/
void WinEDA_CleaningOptionsFrame::OnButtonExecuteClick( wxCommandEvent& event )
{
s_CleanVias = m_CleanViasOpt->GetValue();
s_MergeSegments = m_MergetSegmOpt->GetValue();
s_DeleteUnconnectedSegm = m_DeleteunconnectedOpt->GetValue();
s_ConnectToPads = m_ConnectToPadsOpt->GetValue();
Clean_Pcb_Items(m_Parent, m_DC );
Close(TRUE);
}
/*!
* wxEVT_CLOSE_WINDOW event handler for ID_WIN_EDA_CLEANINGOPTIONSFRAME
*/
void WinEDA_CleaningOptionsFrame::OnCloseWindow( wxCloseEvent& event )
{
s_CleanVias = m_CleanViasOpt->GetValue();
s_MergeSegments = m_MergetSegmOpt->GetValue();
s_DeleteUnconnectedSegm = m_DeleteunconnectedOpt->GetValue();
s_ConnectToPads = m_ConnectToPadsOpt->GetValue();
event.Skip();
}

View File

@ -0,0 +1,115 @@
/////////////////////////////////////////////////////////////////////////////
// Name: cleaningoptions_dialog.h
// Purpose:
// Author: jean-pierre Charras
// Modified by:
// Created: 25/05/2007 14:24:54
// RCS-ID:
// Copyright: GNU License
// Licence:
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 25/05/2007 14:24:54
#ifndef _CLEANINGOPTIONS_DIALOG_H_
#define _CLEANINGOPTIONS_DIALOG_H_
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma interface "cleaningoptions_dialog.h"
#endif
/*!
* Includes
*/
////@begin includes
#include "wx/valgen.h"
////@end includes
/*!
* Forward declarations
*/
////@begin forward declarations
////@end forward declarations
/*!
* Control identifiers
*/
////@begin control identifiers
#define ID_WIN_EDA_CLEANINGOPTIONSFRAME 10000
#define ID_CHECKBOX_CLEAN_VIAS 10001
#define ID_CHECKBOX_MERGE_SEGMENTS 10003
#define ID_CHECKBOX1 10005
#define ID_CHECKBOX 10004
#define ID_BUTTON_EXECUTE 10006
#define SYMBOL_WINEDA_CLEANINGOPTIONSFRAME_STYLE wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX
#define SYMBOL_WINEDA_CLEANINGOPTIONSFRAME_TITLE _("Cleaning options")
#define SYMBOL_WINEDA_CLEANINGOPTIONSFRAME_IDNAME ID_WIN_EDA_CLEANINGOPTIONSFRAME
#define SYMBOL_WINEDA_CLEANINGOPTIONSFRAME_SIZE wxSize(400, 300)
#define SYMBOL_WINEDA_CLEANINGOPTIONSFRAME_POSITION wxDefaultPosition
////@end control identifiers
/*!
* WinEDA_CleaningOptionsFrame class declaration
*/
class WinEDA_CleaningOptionsFrame: public wxDialog
{
DECLARE_DYNAMIC_CLASS( WinEDA_CleaningOptionsFrame )
DECLARE_EVENT_TABLE()
public:
/// Constructors
WinEDA_CleaningOptionsFrame();
WinEDA_CleaningOptionsFrame( WinEDA_PcbFrame * parent, wxDC * DC,
wxWindowID id = SYMBOL_WINEDA_CLEANINGOPTIONSFRAME_IDNAME, const wxString& caption = SYMBOL_WINEDA_CLEANINGOPTIONSFRAME_TITLE, const wxPoint& pos = SYMBOL_WINEDA_CLEANINGOPTIONSFRAME_POSITION, const wxSize& size = SYMBOL_WINEDA_CLEANINGOPTIONSFRAME_SIZE, long style = SYMBOL_WINEDA_CLEANINGOPTIONSFRAME_STYLE );
/// Creation
bool Create( wxWindow* parent, wxWindowID id = SYMBOL_WINEDA_CLEANINGOPTIONSFRAME_IDNAME, const wxString& caption = SYMBOL_WINEDA_CLEANINGOPTIONSFRAME_TITLE, const wxPoint& pos = SYMBOL_WINEDA_CLEANINGOPTIONSFRAME_POSITION, const wxSize& size = SYMBOL_WINEDA_CLEANINGOPTIONSFRAME_SIZE, long style = SYMBOL_WINEDA_CLEANINGOPTIONSFRAME_STYLE );
/// Destructor
~WinEDA_CleaningOptionsFrame();
/// Initialises member variables
void Init();
/// Creates the controls and sizers
void CreateControls();
////@begin WinEDA_CleaningOptionsFrame event handler declarations
/// wxEVT_CLOSE_WINDOW event handler for ID_WIN_EDA_CLEANINGOPTIONSFRAME
void OnCloseWindow( wxCloseEvent& event );
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_EXECUTE
void OnButtonExecuteClick( wxCommandEvent& event );
////@end WinEDA_CleaningOptionsFrame event handler declarations
////@begin WinEDA_CleaningOptionsFrame member function declarations
/// Retrieves bitmap resources
wxBitmap GetBitmapResource( const wxString& name );
/// Retrieves icon resources
wxIcon GetIconResource( const wxString& name );
////@end WinEDA_CleaningOptionsFrame member function declarations
/// Should we show tooltips?
static bool ShowToolTips();
////@begin WinEDA_CleaningOptionsFrame member variables
wxCheckBox* m_CleanViasOpt;
wxCheckBox* m_MergetSegmOpt;
wxCheckBox* m_DeleteunconnectedOpt;
wxCheckBox* m_ConnectToPadsOpt;
////@end WinEDA_CleaningOptionsFrame member variables
WinEDA_PcbFrame * m_Parent;
wxDC * m_DC;
};
#endif
// _CLEANINGOPTIONS_DIALOG_H_

View File

@ -134,7 +134,13 @@ int CurrentTime = time(NULL);
{ {
wxString tmpFileName = GetScreen()->m_FileName; wxString tmpFileName = GetScreen()->m_FileName;
wxString filename = g_SaveFileName + PcbExtBuffer; wxString filename = g_SaveFileName + PcbExtBuffer;
bool flgmodify = GetScreen()->IsModify();
((WinEDA_PcbFrame*)this)->SavePcbFile(filename); ((WinEDA_PcbFrame*)this)->SavePcbFile(filename);
if( flgmodify ) // Set the flags m_Modify cleared by SavePcbFile()
{
GetScreen()->SetModify();
GetScreen()->SetSave();// Set the flags m_FlagSave cleared by SetModify()
}
GetScreen()->m_FileName = tmpFileName; GetScreen()->m_FileName = tmpFileName;
SetTitle(GetScreen()->m_FileName); SetTitle(GetScreen()->m_FileName);
} }
@ -355,19 +361,19 @@ int CurrentTime = time(NULL);
OnHotKey(DC, hotkey, NULL); OnHotKey(DC, hotkey, NULL);
} }
} }
/****************************************************************/ /****************************************************************/
void WinEDA_BasePcbFrame::SwitchLayer(wxDC *DC, int layer) void WinEDA_BasePcbFrame::SwitchLayer(wxDC *DC, int layer)
/*****************************************************************/ /*****************************************************************/
{ {
//overridden in WinEDA_PcbFrame; //Note: overridden in WinEDA_PcbFrame;
int preslayer = GetScreen()->m_Active_Layer; int preslayer = GetScreen()->m_Active_Layer;
//if there is only one layer, don't switch. //if there is only one layer, don't switch.
if ( m_Pcb->m_BoardSettings->m_CopperLayerCount <= 1) if ( m_Pcb->m_BoardSettings->m_CopperLayerCount <= 1)
return; layer = LAYER_CUIVRE_N; // Of course we select the copper layer
//otherwise, must be at least 2 layers..see if it is possible. //otherwise, we select the requested layer only if it is possible
if(layer != LAYER_CUIVRE_N || layer != LAYER_CMP_N || if( layer != LAYER_CMP_N && layer >= m_Pcb->m_BoardSettings->m_CopperLayerCount-1 )
layer >= m_Pcb->m_BoardSettings->m_CopperLayerCount-1) return;
return;
if(preslayer == layer) if(preslayer == layer)
return; return;

703
pcbnew/dialog_clean_pcb.pjd Normal file
View File

@ -0,0 +1,703 @@
<?xml version="1.0" encoding="UTF-8"?>
<anthemion-project version="1.0.0.0" xmlns="http://www.anthemion.co.uk">
<header>
<long name="name_counter">0</long>
<string name="html_path">""</string>
<string name="title">""</string>
<string name="author">""</string>
<string name="description">""</string>
<string name="xrc_filename">""</string>
<bool name="convert_images_to_xpm">0</bool>
<bool name="inline_images">0</bool>
<bool name="generate_cpp_for_xrc">0</bool>
<bool name="use_help_text_for_tooltips">1</bool>
<bool name="translate_strings">1</bool>
<bool name="extract_strings">0</bool>
<string name="user_name">"jean-pierre Charras"</string>
<string name="copyright_string">"GNU License"</string>
<string name="resource_prefix">""</string>
<bool name="use_two_step_construction">0</bool>
<bool name="use_enums">0</bool>
<string name="current_platform">"&lt;All platforms&gt;"</string>
<string name="target_wx_version">"2.8.3"</string>
<string name="cpp_header_comment">"/////////////////////////////////////////////////////////////////////////////
// Name: %HEADER-FILENAME%
// Purpose:
// Author: %AUTHOR%
// Modified by:
// Created: %DATE%
// RCS-ID:
// Copyright: %COPYRIGHT%
// Licence:
/////////////////////////////////////////////////////////////////////////////
"</string>
<string name="cpp_implementation_comment">"/////////////////////////////////////////////////////////////////////////////
// Name: %SOURCE-FILENAME%
// Purpose:
// Author: %AUTHOR%
// Modified by:
// Created: %DATE%
// RCS-ID:
// Copyright: %COPYRIGHT%
// Licence:
/////////////////////////////////////////////////////////////////////////////
"</string>
<string name="cpp_symbols_file_comment">"/////////////////////////////////////////////////////////////////////////////
// Name: %SYMBOLS-FILENAME%
// Purpose: Symbols file
// Author: %AUTHOR%
// Modified by:
// Created: %DATE%
// RCS-ID:
// Copyright: %COPYRIGHT%
// Licence:
/////////////////////////////////////////////////////////////////////////////
"</string>
<string name="cpp_header_preamble">"#if defined(__GNUG__) &amp;&amp; !defined(NO_GCC_PRAGMA)
#pragma interface &quot;%HEADER-FILENAME%&quot;
#endif
"</string>
<string name="cpp_implementation_preamble">"#if defined(__GNUG__) &amp;&amp; !defined(NO_GCC_PRAGMA)
#pragma implementation &quot;%HEADER-FILENAME%&quot;
#endif
// For compilers that support precompilation, includes &quot;wx/wx.h&quot;.
#include &quot;wx/wxprec.h&quot;
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include &quot;wx/wx.h&quot;
#endif
"</string>
<string name="cpp_function_declaration_comment">" /// %BODY%
"</string>
<string name="cpp_function_implementation_comment">"
/*!
* %BODY%
*/
"</string>
<string name="resource_file_header">"app_resources.h"</string>
<string name="resource_file_implementation">"app_resources.cpp"</string>
<string name="resource_class_name">"AppResources"</string>
<string name="app_file_header">"app.h"</string>
<string name="app_file_implementation">"app.cpp"</string>
<string name="app_class_name">"Application"</string>
<bool name="generate_app_class">0</bool>
<string name="external_symbol_filenames">""</string>
<string name="configuration">"&lt;None&gt;"</string>
<string name="source_encoding">"iso-8859-1"</string>
<string name="xrc_encoding">"utf-8"</string>
<string name="project_encoding">"utf-8"</string>
<string name="resource_archive">""</string>
<long name="text_file_type">0</long>
<bool name="use_tabs">0</bool>
<long name="indent_size">4</long>
<string name="whitespace_after_return_type">" "</string>
<string name="resource_xrc_cpp">""</string>
<bool name="use_resource_archive">0</bool>
<bool name="use_generated_xrc_cpp">0</bool>
<bool name="always_generate_xrc">1</bool>
<bool name="archive_xrc_files">1</bool>
<bool name="archive_image_files">1</bool>
<bool name="archive_all_image_files">0</bool>
<bool name="xrc_retain_relative_paths">1</bool>
</header>
<data>
<document>
<string name="title">""</string>
<string name="type">"data-document"</string>
<string name="filename">""</string>
<string name="icon-name">""</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<document>
<string name="title">"Configurations"</string>
<string name="type">"config-data-document"</string>
<string name="filename">""</string>
<string name="icon-name">""</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="template-name">""</string>
<bool name="dirty">1</bool>
<string name="Compiler name">""</string>
<string name="Build mode">"Debug"</string>
<string name="Unicode mode">"ANSI"</string>
<string name="Shared mode">"Static"</string>
<string name="Modularity">"Modular"</string>
<string name="GUI mode">"GUI"</string>
<string name="Toolkit">"wxMSW"</string>
<string name="Runtime linking">"Dynamic"</string>
<string name="Use exceptions">"Yes"</string>
<string name="Use ODBC">"No"</string>
<string name="Use OpenGL">"No"</string>
<string name="wxWidgets version">"%WXVERSION%"</string>
<string name="Executable name">"%EXECUTABLE%"</string>
<string name="Program arguments">""</string>
<string name="Working path">"%AUTO%"</string>
<string name="Output path">"%AUTO%"</string>
<string name="Objects path">"%AUTO%"</string>
<string name="Compiler location">"%AUTO%"</string>
<string name="wxWidgets location">"%AUTO%"</string>
<string name="C++ command">"%AUTO%"</string>
<string name="Resource compiler">"%AUTO%"</string>
<string name="Make command">"%AUTO%"</string>
<string name="Project makefile">"%AUTO%"</string>
<string name="wxWidgets makefile">"%AUTO%"</string>
<string name="Compiler bin path">"%AUTO%"</string>
<string name="Compiler include path">"%AUTO%"</string>
<string name="Compiler lib path">"%AUTO%"</string>
<string name="Preprocessor flags">"%AUTO%"</string>
<string name="Optimizations">"%AUTO%"</string>
<string name="Warnings">"%AUTO%"</string>
<string name="Debug flags">"%AUTO%"</string>
<string name="Libraries">"%AUTO%"</string>
<string name="Library path">"%AUTO%"</string>
<string name="Linker flags">"%AUTO%"</string>
<string name="Include path">"%AUTO%"</string>
<string name="Resource flags">"%AUTO%"</string>
<string name="Resource path">"%AUTO%"</string>
<string name="wxWidgets build path">"%AUTO%"</string>
<string name="wxWidgets build command">"%AUTO%"</string>
<string name="wxWidgets clean command">"%AUTO%"</string>
<string name="PATH variable">"%AUTO%"</string>
</document>
</document>
</data>
<documents>
<document>
<string name="title">"Projects"</string>
<string name="type">"root-document"</string>
<string name="filename">""</string>
<string name="icon-name">"project"</string>
<long name="is-transient">1</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">1</long>
<document>
<string name="title">"Windows"</string>
<string name="type">"html-document"</string>
<string name="filename">""</string>
<string name="icon-name">"dialogsfolder"</string>
<long name="is-transient">1</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">1</long>
<document>
<string name="title">"Cleaning options"</string>
<string name="type">"dialog-document"</string>
<string name="filename">""</string>
<string name="icon-name">"dialog"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"25/5/2007"</string>
<string name="proxy-type">"wbDialogProxy"</string>
<long name="base-id">10000</long>
<bool name="use-id-prefix">0</bool>
<string name="id-prefix">""</string>
<bool name="use-id-suffix">0</bool>
<string name="id-suffix">""</string>
<long name="use-xrc">0</long>
<string name="event-handler-0">"wxEVT_CLOSE_WINDOW|OnCloseWindow|NONE||"</string>
<string name="proxy-Id name">"ID_WIN_EDA_CLEANINGOPTIONSFRAME"</string>
<long name="proxy-Id value">10000</long>
<string name="proxy-Class">"WinEDA_CleaningOptionsFrame"</string>
<string name="proxy-Base class">"wxDialog"</string>
<string name="proxy-Window kind">"wxDialog"</string>
<string name="proxy-Implementation filename">"cleaningoptions_dialog.cpp"</string>
<string name="proxy-Header filename">"cleaningoptions_dialog.h"</string>
<string name="proxy-XRC filename">""</string>
<string name="proxy-Title">"Cleaning options"</string>
<bool name="proxy-Centre">1</bool>
<string name="proxy-Icon">""</string>
<bool name="proxy-Dialog units">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxDEFAULT_DIALOG_STYLE">0</bool>
<bool name="proxy-wxCAPTION">1</bool>
<bool name="proxy-wxRESIZE_BORDER">1</bool>
<bool name="proxy-wxTHICK_FRAME">0</bool>
<bool name="proxy-wxSYSTEM_MENU">1</bool>
<bool name="proxy-wxSTAY_ON_TOP">0</bool>
<bool name="proxy-wxDIALOG_NO_PARENT">0</bool>
<bool name="proxy-wxCLOSE_BOX">1</bool>
<bool name="proxy-wxMAXIMIZE_BOX">0</bool>
<bool name="proxy-wxMINIMIZE_BOX">0</bool>
<bool name="proxy-wxDIALOG_MODAL">1</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxSIMPLE_BORDER">0</bool>
<bool name="proxy-wxDOUBLE_BORDER">0</bool>
<bool name="proxy-wxSUNKEN_BORDER">0</bool>
<bool name="proxy-wxRAISED_BORDER">0</bool>
<bool name="proxy-wxSTATIC_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxCLIP_CHILDREN">0</bool>
<bool name="proxy-wxTAB_TRAVERSAL">0</bool>
<bool name="proxy-wxWS_EX_VALIDATE_RECURSIVELY">0</bool>
<bool name="proxy-wxWS_EX_BLOCK_EVENTS">1</bool>
<bool name="proxy-wxWS_EX_TRANSIENT">0</bool>
<string name="proxy-Custom styles">""</string>
<bool name="proxy-wxDIALOG_EX_CONTEXTHELP">0</bool>
<bool name="proxy-Fit to content">1</bool>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">400</long>
<long name="proxy-Height">300</long>
<bool name="proxy-AUI manager">0</bool>
<string name="proxy-Event sources">""</string>
<document>
<string name="title">"wxBoxSizer V"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sizer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="proxy-type">"wbBoxSizerProxy"</string>
<string name="proxy-Orientation">"Vertical"</string>
<string name="proxy-Member variable name">""</string>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document>
<string name="title">"wxBoxSizer H"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sizer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"25/5/2007"</string>
<string name="proxy-type">"wbBoxSizerProxy"</string>
<string name="proxy-Orientation">"Horizontal"</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document>
<string name="title">"wxStaticBoxSizer V"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sizer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"25/5/2007"</string>
<string name="proxy-type">"wbStaticBoxSizerProxy"</string>
<string name="proxy-Id name">"wxID_ANY"</string>
<long name="proxy-Id value">-1</long>
<string name="proxy-Label">"Static"</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-Sizer member variable name">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Static box class">"wxStaticBox"</string>
<string name="proxy-Orientation">"Vertical"</string>
<string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX_CLEAN_VIAS"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"25/5/2007"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX_CLEAN_VIAS"</string>
<long name="proxy-Id value">10001</long>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Base class">"wxCheckBox"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_CleanViasOpt"</string>
<string name="proxy-Label">"Delete redundant vias"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">"s_CleanVias"</string>
<string name="proxy-Data validator">"wxGenericValidator(&amp; %VARIABLE%)"</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">0</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Left"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX_MERGE_SEGMENTS"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"25/5/2007"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX_MERGE_SEGMENTS"</string>
<long name="proxy-Id value">10003</long>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Base class">"wxCheckBox"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_MergetSegmOpt"</string>
<string name="proxy-Label">"Merge segments"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">"s_MergeSegments"</string>
<string name="proxy-Data validator">"wxGenericValidator(&amp; %VARIABLE%)"</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">0</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Left"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX1"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"25/5/2007"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX1"</string>
<long name="proxy-Id value">10005</long>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Base class">"wxCheckBox"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_DeleteunconnectedOpt"</string>
<string name="proxy-Label">"Delete unconnected tracks"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">"s_DeleteUnconnectedSegm"</string>
<string name="proxy-Data validator">"wxGenericValidator(&amp; %VARIABLE%)"</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">0</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Left"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"25/5/2007"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX"</string>
<long name="proxy-Id value">10004</long>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Base class">"wxCheckBox"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_ConnectToPadsOpt"</string>
<string name="proxy-Label">"Connect to Pads"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">0</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Left"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
</document>
<document>
<string name="title">"wxBoxSizer V"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sizer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"25/5/2007"</string>
<string name="proxy-type">"wbBoxSizerProxy"</string>
<string name="proxy-Orientation">"Vertical"</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document>
<string name="title">"wxButton: ID_BUTTON_EXECUTE"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"dialogcontrol"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"25/5/2007"</string>
<string name="proxy-type">"wbButtonProxy"</string>
<string name="event-handler-0">"wxEVT_COMMAND_BUTTON_CLICKED|OnButtonExecuteClick|NONE||"</string>
<string name="proxy-Id name">"ID_BUTTON_EXECUTE"</string>
<long name="proxy-Id value">10006</long>
<string name="proxy-Class">"wxButton"</string>
<string name="proxy-Base class">"wxButton"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-Label">"Clean pcb"</string>
<bool name="proxy-Default">1</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxBU_LEFT">0</bool>
<bool name="proxy-wxBU_RIGHT">0</bool>
<bool name="proxy-wxBU_TOP">0</bool>
<bool name="proxy-wxBU_BOTTOM">0</bool>
<bool name="proxy-wxBU_EXACTFIT">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
</document>
</document>
</document>
</document>
</document>
<document>
<string name="title">"Sources"</string>
<string name="type">"html-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sourcesfolder"</string>
<long name="is-transient">1</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">1</long>
<document>
<string name="title">"dialog_clean_pcb.rc"</string>
<string name="type">"source-editor-document"</string>
<string name="filename">"dialog_clean_pcb.rc"</string>
<string name="icon-name">"source-editor"</string>
<long name="is-transient">0</long>
<long name="owns-file">0</long>
<long name="title-mode">1</long>
<long name="locked">0</long>
<string name="created">"25/5/2007"</string>
<string name="language">""</string>
</document>
</document>
<document>
<string name="title">"Images"</string>
<string name="type">"html-document"</string>
<string name="filename">""</string>
<string name="icon-name">"bitmapsfolder"</string>
<long name="is-transient">1</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">1</long>
</document>
</document>
</documents>
</anthemion-project>

View File

@ -869,6 +869,10 @@ int itmp;
DrawPanel->MouseToCursorSchema(); DrawPanel->MouseToCursorSchema();
break; break;
case ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR:
SelectLayerPair();
break;
case ID_POPUP_PCB_SELECT_NO_CU_LAYER: case ID_POPUP_PCB_SELECT_NO_CU_LAYER:
itmp = SelectLayer(GetScreen()->m_Active_Layer, CMP_N+1, -1); itmp = SelectLayer(GetScreen()->m_Active_Layer, CMP_N+1, -1);
if ( itmp >= 0 ) GetScreen()->m_Active_Layer = itmp; if ( itmp >= 0 ) GetScreen()->m_Active_Layer = itmp;

View File

@ -17,7 +17,7 @@
static void Exit_Editrack(WinEDA_DrawPanel * panel, wxDC *DC); static void Exit_Editrack(WinEDA_DrawPanel * panel, wxDC *DC);
void ShowNewTrackWhenMovingCursor(WinEDA_DrawPanel * panel, void ShowNewTrackWhenMovingCursor(WinEDA_DrawPanel * panel,
wxDC * DC, bool erase); wxDC * DC, bool erase);
static int Met_Coude_a_45(WinEDA_BasePcbFrame * frame, wxDC * DC, static int Add_45_degrees_Segment(WinEDA_BasePcbFrame * frame, wxDC * DC,
TRACK * ptfinsegment); TRACK * ptfinsegment);
static void ComputeBreakPoint( TRACK * track, int n ); static void ComputeBreakPoint( TRACK * track, int n );
static TRACK * DeleteNullTrackSegments(BOARD * pcb, TRACK * track, int * segmcount); static TRACK * DeleteNullTrackSegments(BOARD * pcb, TRACK * track, int * segmcount);
@ -188,7 +188,7 @@ wxPoint pos = GetScreen()->m_Curseur;
if( g_Raccord_45_Auto ) if( g_Raccord_45_Auto )
{ {
if( Met_Coude_a_45(this, DC, g_CurrentTrackSegment) != 0 ) if( Add_45_degrees_Segment(this, DC, g_CurrentTrackSegment) != 0 )
g_TrackSegmentCount++; g_TrackSegmentCount++;
} }
Track = g_CurrentTrackSegment->Copy(); Track = g_CurrentTrackSegment->Copy();
@ -221,7 +221,7 @@ wxPoint pos = GetScreen()->m_Curseur;
/**************************************************************************/ /**************************************************************************/
int Met_Coude_a_45(WinEDA_BasePcbFrame * frame, wxDC * DC, TRACK * pt_segm) int Add_45_degrees_Segment(WinEDA_BasePcbFrame * frame, wxDC * DC, TRACK * pt_segm)
/***************************************************************************/ /***************************************************************************/
/* rectifie un virage a 90 et le modifie par 2 coudes a 45 /* rectifie un virage a 90 et le modifie par 2 coudes a 45
n'opere que sur des segments horizontaux ou verticaux. n'opere que sur des segments horizontaux ou verticaux.
@ -476,6 +476,15 @@ PCB_SCREEN * screen = (PCB_SCREEN *) panel->GetScreen();
/* dessin de la nouvelle piste : mise a jour du point d'arrivee */ /* dessin de la nouvelle piste : mise a jour du point d'arrivee */
g_CurrentTrackSegment->m_Layer = screen->m_Active_Layer; g_CurrentTrackSegment->m_Layer = screen->m_Active_Layer;
g_CurrentTrackSegment->m_Width = g_DesignSettings.m_CurrentTrackWidth; g_CurrentTrackSegment->m_Width = g_DesignSettings.m_CurrentTrackWidth;
if ( g_TwoSegmentTrackBuild )
{
TRACK * previous_track = (TRACK *)g_CurrentTrackSegment->Pback;
if ( previous_track && (previous_track->m_StructType == TYPETRACK) )
{
previous_track->m_Layer = screen->m_Active_Layer;
previous_track->m_Width = g_DesignSettings.m_CurrentTrackWidth;
}
}
if (Track_45_Only) if (Track_45_Only)
{ {

View File

@ -135,8 +135,11 @@ EDA_BaseStruct * item;
} }
/* Search for a footprint text */ /* Search for a footprint text */
// First search: locate texts for footprints on copper or component layer
// Priority to the active layer (component or copper.
// this is useful for small smd components when 2 texts overlap but are not on the same layer
if ( (LayerSearch == LAYER_CUIVRE_N) || (LayerSearch == CMP_N )) if ( (LayerSearch == LAYER_CUIVRE_N) || (LayerSearch == CMP_N ))
{ // Search texts for footprints on copper or component layer only {
for (module = m_Pcb->m_Modules; module != NULL; module = (MODULE*)module->Pnext) for (module = m_Pcb->m_Modules; module != NULL; module = (MODULE*)module->Pnext)
{ {
TEXTE_MODULE * pt_texte; TEXTE_MODULE * pt_texte;
@ -149,17 +152,16 @@ EDA_BaseStruct * item;
} }
} }
} }
else // Search footprint texts on all layers
// Now Search footprint texts on all layers
module = NULL;
{ {
module = NULL; TEXTE_MODULE * pt_texte;
pt_texte = LocateTexteModule(m_Pcb, &module, typeloc);
if( pt_texte != NULL )
{ {
TEXTE_MODULE * pt_texte; Affiche_Infos_E_Texte(this, module, pt_texte);
pt_texte = LocateTexteModule(m_Pcb, &module, typeloc); return pt_texte;
if( pt_texte != NULL )
{
Affiche_Infos_E_Texte(this, module, pt_texte);
return pt_texte;
}
} }
} }
@ -170,6 +172,7 @@ EDA_BaseStruct * item;
return module; return module;
} }
/* Search for zones */
if( (TrackLocate = Locate_Zone((TRACK*)m_Pcb->m_Zone, if( (TrackLocate = Locate_Zone((TRACK*)m_Pcb->m_Zone,
GetScreen()->m_Active_Layer,typeloc)) != NULL ) GetScreen()->m_Active_Layer,typeloc)) != NULL )
{ {

View File

@ -233,7 +233,7 @@ drc.o: drc.cpp dialog_drc.cpp dialog_drc.h autorout.h $(COMMON)
block.o: block.cpp $(COMMON) block.o: block.cpp $(COMMON)
clean.o: clean.cpp $(COMMON) clean.o: clean.cpp cleaningoptions_dialog.cpp cleaningoptions_dialog.h $(COMMON)
pcbplot.o: pcbplot.cpp pcbplot.h $(COMMON) pcbplot.o: pcbplot.cpp pcbplot.h $(COMMON)

View File

@ -869,9 +869,16 @@ wxPoint OldPos = m_Parent->m_CurrentScreen->m_Curseur;
{ {
if( (ii == 0) || ( ref->m_LibName != cmp->m_LibName) ) if( (ii == 0) || ( ref->m_LibName != cmp->m_LibName) )
{ /* Nouveau Module a charger */ { /* Nouveau Module a charger */
Module = m_Parent->Get_Librairie_Module(this, wxEmptyString, cmp->m_LibName, TRUE ); Module = m_Parent->Get_Librairie_Module(this, wxEmptyString, cmp->m_LibName, FALSE );
ref = cmp; ref = cmp;
if ( Module == NULL ) continue; if ( Module == NULL )
{
wxString msg;
msg.Printf(_("Component [%s]: footprint <%s> not found"),
cmp->m_CmpName.GetData(), cmp->m_LibName.GetData());
DisplayError(this, msg);
continue;
}
m_Parent->Place_Module(Module, DC); m_Parent->Place_Module(Module, DC);
/* mise a jour des reperes ( nom et ref "Time Stamp") /* mise a jour des reperes ( nom et ref "Time Stamp")
si module charge */ si module charge */

View File

@ -109,6 +109,7 @@ BEGIN_EVENT_TABLE(WinEDA_PcbFrame, wxFrame)
EVT_TOOL(ID_FIND_ITEMS, WinEDA_PcbFrame::Process_Special_Functions) EVT_TOOL(ID_FIND_ITEMS, WinEDA_PcbFrame::Process_Special_Functions)
EVT_TOOL(ID_GET_NETLIST, WinEDA_PcbFrame::Process_Special_Functions) EVT_TOOL(ID_GET_NETLIST, WinEDA_PcbFrame::Process_Special_Functions)
EVT_TOOL(ID_DRC_CONTROL, WinEDA_PcbFrame::Process_Special_Functions) EVT_TOOL(ID_DRC_CONTROL, WinEDA_PcbFrame::Process_Special_Functions)
EVT_TOOL(ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR, WinEDA_PcbFrame::Process_Special_Functions)
EVT_KICAD_CHOICEBOX(ID_TOOLBARH_PCB_SELECT_LAYER, EVT_KICAD_CHOICEBOX(ID_TOOLBARH_PCB_SELECT_LAYER,
WinEDA_PcbFrame::Process_Special_Functions) WinEDA_PcbFrame::Process_Special_Functions)
EVT_KICAD_CHOICEBOX(ID_AUX_TOOLBAR_PCB_TRACK_WIDTH, EVT_KICAD_CHOICEBOX(ID_AUX_TOOLBAR_PCB_TRACK_WIDTH,
@ -159,7 +160,7 @@ BEGIN_EVENT_TABLE(WinEDA_PcbFrame, wxFrame)
EVT_MENU_RANGE(ID_POPUP_GENERAL_START_RANGE, ID_POPUP_GENERAL_END_RANGE, EVT_MENU_RANGE(ID_POPUP_GENERAL_START_RANGE, ID_POPUP_GENERAL_END_RANGE,
WinEDA_PcbFrame::Process_Special_Functions ) WinEDA_PcbFrame::Process_Special_Functions )
// PopUp Menus pour Zooms trait<EFBFBD>s dans drawpanel.cpp // PopUp Menus pour Zooms traites dans drawpanel.cpp
END_EVENT_TABLE() END_EVENT_TABLE()
@ -178,7 +179,7 @@ WinEDA_PcbFrame::WinEDA_PcbFrame(wxWindow * father, WinEDA_App *parent,
m_FrameName = wxT("PcbFrame"); m_FrameName = wxT("PcbFrame");
m_Draw_Axis = TRUE; // TRUE pour avoir les axes dessines m_Draw_Axis = TRUE; // TRUE pour avoir les axes dessines
m_Draw_Grid = g_ShowGrid; // TRUE pour avoir la grille dessinee m_Draw_Grid = g_ShowGrid; // TRUE pour avoir la grille dessinee
m_Draw_Sheet_Ref = TRUE; // TRUE pour avoir le cartouche dessin<EFBFBD> m_Draw_Sheet_Ref = TRUE; // TRUE pour avoir le cartouche dessine
m_Draw_Auxiliary_Axis = TRUE; m_Draw_Auxiliary_Axis = TRUE;
m_SelTrackWidthBox = NULL; m_SelTrackWidthBox = NULL;
m_SelViaSizeBox = NULL; m_SelViaSizeBox = NULL;
@ -275,7 +276,7 @@ PCB_SCREEN * screen;
} }
/* Reselection de l'ecran de base, /* Reselection de l'ecran de base,
pour les evenements de refresh g<EFBFBD>n<EFBFBD>r<EFBFBD>s par wxWindows */ pour les evenements de refresh generes par wxWindows */
m_CurrentScreen = ActiveScreen = ScreenPcb; m_CurrentScreen = ActiveScreen = ScreenPcb;
SaveSettings(); SaveSettings();
@ -483,6 +484,7 @@ int ii, jj;
} }
ReCreateLayerBox(NULL); ReCreateLayerBox(NULL);
PrepareLayerIndicator();
DisplayUnitsMsg(); DisplayUnitsMsg();
} }

View File

@ -66,11 +66,6 @@ int tracevia = 1;
g_PlotOffset = m_Auxiliary_Axis_Position; g_PlotOffset = m_Auxiliary_Axis_Position;
} }
InitPlotParametresGERBER(g_PlotOffset, scale_x, scale_y);
/* Clear the memory used for handle the D_CODE (aperture) list */
Init_ApertureList();
dest = wxFopen(FullFileName, wxT("wt")); dest = wxFopen(FullFileName, wxT("wt"));
if (dest == NULL) if (dest == NULL)
{ {
@ -78,6 +73,13 @@ int tracevia = 1;
DisplayError(this, msg); return ; DisplayError(this, msg); return ;
} }
setlocale(LC_NUMERIC, "C");
InitPlotParametresGERBER(g_PlotOffset, scale_x, scale_y);
/* Clear the memory used for handle the D_CODE (aperture) list */
Init_ApertureList();
Affiche_1_Parametre(this, 0, _("File"),FullFileName,CYAN) ; Affiche_1_Parametre(this, 0, _("File"),FullFileName,CYAN) ;
Init_Trace_GERBER(this, dest) ; Init_Trace_GERBER(this, dest) ;
@ -124,6 +126,7 @@ int tracevia = 1;
} }
Fin_Trace_GERBER(this, dest) ; Fin_Trace_GERBER(this, dest) ;
setlocale(LC_NUMERIC, "");
} }

View File

@ -67,6 +67,8 @@ bool Center = FALSE;
return ; return ;
} }
setlocale(LC_NUMERIC, "C");
Affiche_1_Parametre(this, 0,_("File"),FullFileName,CYAN) ; Affiche_1_Parametre(this, 0,_("File"),FullFileName,CYAN) ;
PrintHeaderHPGL(dest, g_HPGL_Pen_Speed,g_HPGL_Pen_Num); PrintHeaderHPGL(dest, g_HPGL_Pen_Speed,g_HPGL_Pen_Num);
@ -168,6 +170,8 @@ bool Center = FALSE;
} }
/* fin */ /* fin */
CloseFileHPGL(dest) ; CloseFileHPGL(dest) ;
setlocale(LC_NUMERIC, "");
} }

View File

@ -48,6 +48,8 @@ int PlotMarge_in_mils = 0;
DisplayError(this, msg); return ; DisplayError(this, msg); return ;
} }
setlocale(LC_NUMERIC, "C");
Affiche_1_Parametre(this, 0,_("File"),FullFileName,CYAN) ; Affiche_1_Parametre(this, 0,_("File"),FullFileName,CYAN) ;
if( g_PlotScaleOpt != 1 ) Center = TRUE; // Echelle != 1 donc trace centree du PCB if( g_PlotScaleOpt != 1 ) Center = TRUE; // Echelle != 1 donc trace centree du PCB
@ -201,6 +203,7 @@ int PlotMarge_in_mils = 0;
} }
/* fin */ /* fin */
CloseFilePS(dest) ; CloseFilePS(dest) ;
setlocale(LC_NUMERIC, "");
} }

View File

@ -187,6 +187,7 @@ void WinEDA_BasePcbFrame::SelectLayerPair(void)
new WinEDA_SelLayerPairFrame(this); new WinEDA_SelLayerPairFrame(this);
frame->ShowModal(); frame->Destroy(); frame->ShowModal(); frame->Destroy();
DrawPanel->MouseToCursorSchema(); DrawPanel->MouseToCursorSchema();
SetToolbars();
} }

View File

@ -729,7 +729,6 @@ int w = BUTT_SIZE_X, h = BUTT_SIZE_Y;
iconDC.SelectObject( ButtBitmap ); iconDC.SelectObject( ButtBitmap );
int buttcolor = *laytool_list[ii]->m_Color; int buttcolor = *laytool_list[ii]->m_Color;
wxBrush Brush; wxBrush Brush;
iconDC.SelectObject( ButtBitmap );
iconDC.SetPen(*wxBLACK_PEN); iconDC.SetPen(*wxBLACK_PEN);
Brush.SetColour( Brush.SetColour(
ColorRefs[buttcolor].m_Red, ColorRefs[buttcolor].m_Red,

View File

@ -46,6 +46,127 @@
#include "general_ratsnet.xpm" #include "general_ratsnet.xpm"
#include "add_cotation.xpm" #include "add_cotation.xpm"
/* Data to build the layer pair indicator button */
static wxBitmap * LayerPairBitmap = NULL;
static char s_BitmapLayerIcon[16][16] = {
{0,0,0,0,0,0,0,3,3,3,1,1,1,1,0,0},
{0,0,0,0,0,0,3,3,3,3,3,1,1,0,0,0},
{0,0,0,0,0,3,3,0,1,1,3,3,0,0,0,0},
{2,2,2,2,3,3,0,1,1,1,1,3,3,2,2,2},
{2,2,2,2,3,3,1,1,1,0,0,3,3,2,2,2},
{2,2,2,2,3,3,1,1,1,1,0,3,3,2,2,2},
{0,0,0,0,0,3,3,1,1,0,3,3,0,0,0,0},
{0,0,0,0,0,1,3,3,3,3,3,0,0,0,0,0},
{0,0,0,0,0,1,1,3,3,3,0,0,0,0,0,0},
{0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0},
{0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0},
{0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0},
{0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0},
{0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0},
{0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0},
{0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0}
};
/************************************************************/
void WinEDA_PcbFrame::PrepareLayerIndicator(void)
/************************************************************/
/* Draw the icon for the "Select layet pair" bitmap tool
*/
{
int ii, jj;
static int previous_active_layer_color, previous_Route_Layer_TOP_color,
previous_Route_Layer_BOTTOM_color, previous_via_color;
int active_layer_color, Route_Layer_TOP_color,
Route_Layer_BOTTOM_color, via_color;
bool change = false;
/* get colors, and redraw bitmap button only on changes */
active_layer_color = g_DesignSettings.m_LayerColor[GetScreen()->m_Active_Layer];
if ( previous_active_layer_color != active_layer_color )
{
previous_active_layer_color = active_layer_color;
change = TRUE;
}
Route_Layer_TOP_color = g_DesignSettings.m_LayerColor[GetScreen()->m_Route_Layer_TOP];
if ( previous_Route_Layer_TOP_color != Route_Layer_TOP_color )
{
previous_Route_Layer_TOP_color = Route_Layer_TOP_color;
change = TRUE;
}
Route_Layer_BOTTOM_color = g_DesignSettings.m_LayerColor[GetScreen()->m_Route_Layer_BOTTOM];
if ( previous_Route_Layer_BOTTOM_color != Route_Layer_BOTTOM_color )
{
previous_Route_Layer_BOTTOM_color = Route_Layer_BOTTOM_color;
change = TRUE;
}
via_color = g_DesignSettings.m_ViaColor[g_DesignSettings.m_CurrentViaType ];
if ( previous_via_color != via_color )
{
previous_via_color = via_color;
change = TRUE;
}
if ( ! change && (LayerPairBitmap != NULL) ) return;
/* Creat the bitmap too and its Memory DC, if not already made */
if ( LayerPairBitmap == NULL )
{
LayerPairBitmap = new wxBitmap(16, 16);
}
/* Draw the icon, witj colors according to the active layer and layer pairs for
via command (change layer) */
wxMemoryDC iconDC;
iconDC.SelectObject( *LayerPairBitmap );
int buttcolor = -1;
wxPen pen;
for ( ii = 0; ii < 16; ii++ )
{
for ( jj = 0; jj < 16; jj++ )
{
if ( s_BitmapLayerIcon[ii][jj] != buttcolor )
{
buttcolor = s_BitmapLayerIcon[ii][jj];
int color;
switch ( buttcolor )
{
default:
case 0:
color = active_layer_color;
break;
case 1:
color = Route_Layer_TOP_color;
break;
case 2:
color = Route_Layer_BOTTOM_color;
break;
case 3:
color = via_color;
break;
}
color &= MASKCOLOR;
pen.SetColour(
ColorRefs[color].m_Red,
ColorRefs[color].m_Green,
ColorRefs[color].m_Blue
);
iconDC.SetPen(pen);
}
iconDC.DrawPoint(jj,ii);
}
}
/* Deselect the Tool Bitmap from DC,
in order to delete the MemoryDC safely without deleting the bitmap */
iconDC.SelectObject( wxNullBitmap );
if ( ! m_HToolBar ) return;
{
m_HToolBar->SetToolNormalBitmap(ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR, *LayerPairBitmap);
}
}
/******************************************/ /******************************************/
void WinEDA_PcbFrame::ReCreateHToolbar(void) void WinEDA_PcbFrame::ReCreateHToolbar(void)
/******************************************/ /******************************************/
@ -122,6 +243,9 @@ int ii;
m_HToolBar->AddSeparator(); m_HToolBar->AddSeparator();
ReCreateLayerBox(m_HToolBar); ReCreateLayerBox(m_HToolBar);
PrepareLayerIndicator(); // Initialise the bitmap with current active layer colors for the next tool
m_HToolBar->AddTool(ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR, wxEmptyString, * LayerPairBitmap,
_("Show active layer selections\nand select layer pair for route and place via"));
m_HToolBar->AddSeparator(); m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_TOOLBARH_PCB_AUTOPLACE, wxEmptyString, BITMAP(mode_module_xpm), m_HToolBar->AddTool(ID_TOOLBARH_PCB_AUTOPLACE, wxEmptyString, BITMAP(mode_module_xpm),
@ -409,9 +533,9 @@ wxString msg;
} }
/**********************************************************************/ /**************************************************************************/
WinEDAChoiceBox * WinEDA_PcbFrame::ReCreateLayerBox(WinEDA_Toolbar * parent) WinEDAChoiceBox * WinEDA_PcbFrame::ReCreateLayerBox(WinEDA_Toolbar * parent)
/**********************************************************************/ /**************************************************************************/
{ {
int ii, jj, ll; int ii, jj, ll;
bool rebuild = FALSE; bool rebuild = FALSE;
@ -425,7 +549,7 @@ long current_mask_layer;
parent->AddControl(m_SelLayerBox); parent->AddControl(m_SelLayerBox);
} }
// Test si reconstruction de la liste n<EFBFBD>cessaire // Test si reconstruction de la liste necessaire
current_mask_layer = 0; current_mask_layer = 0;
int Masque_Layer = g_TabAllCopperLayerMask[g_DesignSettings.m_CopperLayerCount-1]; int Masque_Layer = g_TabAllCopperLayerMask[g_DesignSettings.m_CopperLayerCount-1];
Masque_Layer |= ALL_NO_CU_LAYERS; Masque_Layer |= ALL_NO_CU_LAYERS;

View File

@ -0,0 +1,220 @@
/////////////////////////////////////////////////////////////////////////////
// Name: win_eda_cleaningoptionsframe.cpp
// Purpose:
// Author: jean-pierre Charras
// Modified by:
// Created: 25/05/2007 13:39:29
// RCS-ID:
// Copyright: GNU License
// Licence:
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 25/05/2007 13:39:29
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "win_eda_cleaningoptionsframe.h"
#endif
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
////@begin includes
////@end includes
#include "win_eda_cleaningoptionsframe.h"
////@begin XPM images
////@end XPM images
/*!
* Win_EDA_CleaningOptionsFrame type definition
*/
IMPLEMENT_DYNAMIC_CLASS( Win_EDA_CleaningOptionsFrame, wxDialog )
/*!
* Win_EDA_CleaningOptionsFrame event table definition
*/
BEGIN_EVENT_TABLE( Win_EDA_CleaningOptionsFrame, wxDialog )
////@begin Win_EDA_CleaningOptionsFrame event table entries
////@end Win_EDA_CleaningOptionsFrame event table entries
END_EVENT_TABLE()
/*!
* Win_EDA_CleaningOptionsFrame constructors
*/
Win_EDA_CleaningOptionsFrame::Win_EDA_CleaningOptionsFrame()
{
Init();
}
Win_EDA_CleaningOptionsFrame::Win_EDA_CleaningOptionsFrame( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{
Init();
Create(parent, id, caption, pos, size, style);
}
/*!
* Win_EDA_CleaningOptionsFrame creator
*/
bool Win_EDA_CleaningOptionsFrame::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{
////@begin Win_EDA_CleaningOptionsFrame creation
SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
wxDialog::Create( parent, id, caption, pos, size, style );
CreateControls();
if (GetSizer())
{
GetSizer()->SetSizeHints(this);
}
Centre();
////@end Win_EDA_CleaningOptionsFrame creation
return true;
}
/*!
* Win_EDA_CleaningOptionsFrame destructor
*/
Win_EDA_CleaningOptionsFrame::~Win_EDA_CleaningOptionsFrame()
{
////@begin Win_EDA_CleaningOptionsFrame destruction
////@end Win_EDA_CleaningOptionsFrame destruction
}
/*!
* Member initialisation
*/
void Win_EDA_CleaningOptionsFrame::Init()
{
////@begin Win_EDA_CleaningOptionsFrame member initialisation
m_CleanViasOpt = NULL;
m_MergetSegmOpt = NULL;
m_DeleteNullSegmOpt = NULL;
m_DeleteunconnectedOpt = NULL;
m_ConnectToPadsOpt = NULL;
////@end Win_EDA_CleaningOptionsFrame member initialisation
}
/*!
* Control creation for Win_EDA_CleaningOptionsFrame
*/
void Win_EDA_CleaningOptionsFrame::CreateControls()
{
////@begin Win_EDA_CleaningOptionsFrame content construction
// Generated by DialogBlocks, 25/05/2007 13:58:52 (unregistered)
Win_EDA_CleaningOptionsFrame* itemDialog1 = this;
wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
itemDialog1->SetSizer(itemBoxSizer2);
wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxHORIZONTAL);
itemBoxSizer2->Add(itemBoxSizer3, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxStaticBox* itemStaticBoxSizer4Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Static"));
wxStaticBoxSizer* itemStaticBoxSizer4 = new wxStaticBoxSizer(itemStaticBoxSizer4Static, wxVERTICAL);
itemBoxSizer3->Add(itemStaticBoxSizer4, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_CleanViasOpt = new wxCheckBox( itemDialog1, ID_CHECKBOX_CLEAN_VIAS, _("Delete redundant vias"), wxDefaultPosition, wxDefaultSize, 0 );
m_CleanViasOpt->SetValue(true);
itemStaticBoxSizer4->Add(m_CleanViasOpt, 0, wxALIGN_LEFT|wxALL, 5);
m_MergetSegmOpt = new wxCheckBox( itemDialog1, ID_CHECKBOX_MERGE_SEGMENTS, _("Merge segments"), wxDefaultPosition, wxDefaultSize, 0 );
m_MergetSegmOpt->SetValue(true);
itemStaticBoxSizer4->Add(m_MergetSegmOpt, 0, wxALIGN_LEFT|wxALL, 5);
m_DeleteNullSegmOpt = new wxCheckBox( itemDialog1, ID_CHECKBOX_DELETE_NULL_SEGM, _("Delete 0 lenght segments"), wxDefaultPosition, wxDefaultSize, 0 );
m_DeleteNullSegmOpt->SetValue(true);
itemStaticBoxSizer4->Add(m_DeleteNullSegmOpt, 0, wxALIGN_LEFT|wxALL, 5);
m_DeleteunconnectedOpt = new wxCheckBox( itemDialog1, ID_CHECKBOX1, _("Delete unconnected tracks"), wxDefaultPosition, wxDefaultSize, 0 );
m_DeleteunconnectedOpt->SetValue(true);
itemStaticBoxSizer4->Add(m_DeleteunconnectedOpt, 0, wxALIGN_LEFT|wxALL, 5);
m_ConnectToPadsOpt = new wxCheckBox( itemDialog1, ID_CHECKBOX, _("Connect to Pads"), wxDefaultPosition, wxDefaultSize, 0 );
m_ConnectToPadsOpt->SetValue(false);
itemStaticBoxSizer4->Add(m_ConnectToPadsOpt, 0, wxALIGN_LEFT|wxALL, 5);
wxStaticBox* itemStaticBoxSizer10Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Static"));
wxStaticBoxSizer* itemStaticBoxSizer10 = new wxStaticBoxSizer(itemStaticBoxSizer10Static, wxVERTICAL);
itemBoxSizer3->Add(itemStaticBoxSizer10, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxButton* itemButton11 = new wxButton( itemDialog1, ID_BUTTON_EXECUTE, _("Clean pcb"), wxDefaultPosition, wxDefaultSize, 0 );
itemButton11->SetDefault();
itemStaticBoxSizer10->Add(itemButton11, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
itemBoxSizer2->Add(5, 5, 0, wxGROW|wxALL, 5);
wxStaticText* itemStaticText13 = new wxStaticText( itemDialog1, wxID_STATIC, _("Infos:"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer2->Add(itemStaticText13, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
wxTextCtrl* itemTextCtrl14 = new wxTextCtrl( itemDialog1, ID_TEXTCTRL1, _T(""), wxDefaultPosition, wxSize(-1, 120), wxTE_MULTILINE );
itemBoxSizer2->Add(itemTextCtrl14, 0, wxGROW|wxALL, 5);
// Set validators
m_CleanViasOpt->SetValidator( wxGenericValidator(& s_CleanVias) );
m_MergetSegmOpt->SetValidator( wxGenericValidator(& s_MergeSegments) );
m_DeleteNullSegmOpt->SetValidator( wxGenericValidator(& s_Delete0lenSegm) );
m_DeleteunconnectedOpt->SetValidator( wxGenericValidator(& s_DeleteUnconnectedSegm) );
////@end Win_EDA_CleaningOptionsFrame content construction
}
/*!
* Should we show tooltips?
*/
bool Win_EDA_CleaningOptionsFrame::ShowToolTips()
{
return true;
}
/*!
* Get bitmap resources
*/
wxBitmap Win_EDA_CleaningOptionsFrame::GetBitmapResource( const wxString& name )
{
// Bitmap retrieval
////@begin Win_EDA_CleaningOptionsFrame bitmap retrieval
wxUnusedVar(name);
return wxNullBitmap;
////@end Win_EDA_CleaningOptionsFrame bitmap retrieval
}
/*!
* Get icon resources
*/
wxIcon Win_EDA_CleaningOptionsFrame::GetIconResource( const wxString& name )
{
// Icon retrieval
////@begin Win_EDA_CleaningOptionsFrame icon retrieval
wxUnusedVar(name);
return wxNullIcon;
////@end Win_EDA_CleaningOptionsFrame icon retrieval
}

View File

@ -0,0 +1,109 @@
/////////////////////////////////////////////////////////////////////////////
// Name: win_eda_cleaningoptionsframe.h
// Purpose:
// Author: jean-pierre Charras
// Modified by:
// Created: 25/05/2007 13:39:29
// RCS-ID:
// Copyright: GNU License
// Licence:
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 25/05/2007 13:39:29
#ifndef _WIN_EDA_CLEANINGOPTIONSFRAME_H_
#define _WIN_EDA_CLEANINGOPTIONSFRAME_H_
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma interface "win_eda_cleaningoptionsframe.h"
#endif
/*!
* Includes
*/
////@begin includes
#include "wx/valgen.h"
////@end includes
/*!
* Forward declarations
*/
////@begin forward declarations
////@end forward declarations
/*!
* Control identifiers
*/
////@begin control identifiers
#define ID_WIN_EDA_CLEANINGOPTIONSFRAME 10000
#define ID_CHECKBOX_CLEAN_VIAS 10001
#define ID_CHECKBOX_MERGE_SEGMENTS 10003
#define ID_CHECKBOX_DELETE_NULL_SEGM 10002
#define ID_CHECKBOX1 10005
#define ID_CHECKBOX 10004
#define ID_BUTTON_EXECUTE 10006
#define ID_TEXTCTRL1 10007
#define SYMBOL_WIN_EDA_CLEANINGOPTIONSFRAME_STYLE wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX
#define SYMBOL_WIN_EDA_CLEANINGOPTIONSFRAME_TITLE _("Cleaning options")
#define SYMBOL_WIN_EDA_CLEANINGOPTIONSFRAME_IDNAME ID_WIN_EDA_CLEANINGOPTIONSFRAME
#define SYMBOL_WIN_EDA_CLEANINGOPTIONSFRAME_SIZE wxSize(400, 300)
#define SYMBOL_WIN_EDA_CLEANINGOPTIONSFRAME_POSITION wxDefaultPosition
////@end control identifiers
/*!
* Win_EDA_CleaningOptionsFrame class declaration
*/
class Win_EDA_CleaningOptionsFrame: public wxDialog
{
DECLARE_DYNAMIC_CLASS( Win_EDA_CleaningOptionsFrame )
DECLARE_EVENT_TABLE()
public:
/// Constructors
Win_EDA_CleaningOptionsFrame();
Win_EDA_CleaningOptionsFrame( wxWindow* parent, wxWindowID id = SYMBOL_WIN_EDA_CLEANINGOPTIONSFRAME_IDNAME, const wxString& caption = SYMBOL_WIN_EDA_CLEANINGOPTIONSFRAME_TITLE, const wxPoint& pos = SYMBOL_WIN_EDA_CLEANINGOPTIONSFRAME_POSITION, const wxSize& size = SYMBOL_WIN_EDA_CLEANINGOPTIONSFRAME_SIZE, long style = SYMBOL_WIN_EDA_CLEANINGOPTIONSFRAME_STYLE );
/// Creation
bool Create( wxWindow* parent, wxWindowID id = SYMBOL_WIN_EDA_CLEANINGOPTIONSFRAME_IDNAME, const wxString& caption = SYMBOL_WIN_EDA_CLEANINGOPTIONSFRAME_TITLE, const wxPoint& pos = SYMBOL_WIN_EDA_CLEANINGOPTIONSFRAME_POSITION, const wxSize& size = SYMBOL_WIN_EDA_CLEANINGOPTIONSFRAME_SIZE, long style = SYMBOL_WIN_EDA_CLEANINGOPTIONSFRAME_STYLE );
/// Destructor
~Win_EDA_CleaningOptionsFrame();
/// Initialises member variables
void Init();
/// Creates the controls and sizers
void CreateControls();
////@begin Win_EDA_CleaningOptionsFrame event handler declarations
////@end Win_EDA_CleaningOptionsFrame event handler declarations
////@begin Win_EDA_CleaningOptionsFrame member function declarations
/// Retrieves bitmap resources
wxBitmap GetBitmapResource( const wxString& name );
/// Retrieves icon resources
wxIcon GetIconResource( const wxString& name );
////@end Win_EDA_CleaningOptionsFrame member function declarations
/// Should we show tooltips?
static bool ShowToolTips();
////@begin Win_EDA_CleaningOptionsFrame member variables
wxCheckBox* m_CleanViasOpt;
wxCheckBox* m_MergetSegmOpt;
wxCheckBox* m_DeleteNullSegmOpt;
wxCheckBox* m_DeleteunconnectedOpt;
wxCheckBox* m_ConnectToPadsOpt;
////@end Win_EDA_CleaningOptionsFrame member variables
};
#endif
// _WIN_EDA_CLEANINGOPTIONSFRAME_H_