Fixed some issues about trapezoidal pads. Better pad editor dialog. fixed other (very) minor bugs. Code cleaning
This commit is contained in:
parent
0c3541b7c1
commit
658ca2a21e
|
@ -29,7 +29,6 @@
|
||||||
double s_HerscheyScaleFactor = HERSHEY_SCALE_FACTOR;
|
double s_HerscheyScaleFactor = HERSHEY_SCALE_FACTOR;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Function GetPensizeForBold
|
/** Function GetPensizeForBold
|
||||||
* @return the "best" value for a pen size to draw/plot a bold text
|
* @return the "best" value for a pen size to draw/plot a bold text
|
||||||
* @param aTextSize = the char size (height or width)
|
* @param aTextSize = the char size (height or width)
|
||||||
|
@ -62,14 +61,15 @@ int Clamp_Text_PenSize( int aPenSize, int aSize, bool aBold )
|
||||||
return penSize;
|
return penSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int Clamp_Text_PenSize( int aPenSize, wxSize aSize, bool aBold )
|
int Clamp_Text_PenSize( int aPenSize, wxSize aSize, bool aBold )
|
||||||
{
|
{
|
||||||
int size = MIN( ABS( aSize.x ), ABS( aSize.y ) );
|
int size = MIN( ABS( aSize.x ), ABS( aSize.y ) );
|
||||||
|
|
||||||
return Clamp_Text_PenSize( aPenSize, size, aBold );;
|
return Clamp_Text_PenSize( aPenSize, size, aBold );;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Functions to draw / plot a string.
|
/* Functions to draw / plot a string.
|
||||||
* texts have only one line.
|
* texts have only one line.
|
||||||
* They can be in italic.
|
* They can be in italic.
|
||||||
|
@ -97,7 +97,6 @@ int NegableTextLength( const wxString& aText )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Function GetHersheyShapeDescription()
|
/* Function GetHersheyShapeDescription()
|
||||||
* return a pointer to the shape corresponding to unicode value AsciiCode
|
* return a pointer to the shape corresponding to unicode value AsciiCode
|
||||||
* Note we use the same font for Bold and Normal texts
|
* Note we use the same font for Bold and Normal texts
|
||||||
|
@ -108,6 +107,7 @@ static const char* GetHersheyShapeDescription( int AsciiCode )
|
||||||
{
|
{
|
||||||
/* calculate font length */
|
/* calculate font length */
|
||||||
int font_length_max = newstroke_font_bufsize;
|
int font_length_max = newstroke_font_bufsize;
|
||||||
|
|
||||||
if( AsciiCode >= (32 + font_length_max) )
|
if( AsciiCode >= (32 + font_length_max) )
|
||||||
AsciiCode = '?';
|
AsciiCode = '?';
|
||||||
if( AsciiCode < 32 )
|
if( AsciiCode < 32 )
|
||||||
|
@ -150,7 +150,7 @@ int ReturnGraphicTextWidth( const wxString& aText, int aXSize, bool aItalic, boo
|
||||||
|
|
||||||
/* Helper function for drawing character polygons */
|
/* Helper function for drawing character polygons */
|
||||||
static void DrawGraphicTextPline(
|
static void DrawGraphicTextPline(
|
||||||
WinEDA_DrawPanel* aPanel,
|
EDA_Rect* aClipBox,
|
||||||
wxDC* aDC,
|
wxDC* aDC,
|
||||||
EDA_Colors aColor,
|
EDA_Colors aColor,
|
||||||
int aWidth,
|
int aWidth,
|
||||||
|
@ -167,6 +167,7 @@ static void DrawGraphicTextPline(
|
||||||
{
|
{
|
||||||
plotter->line_to( coord[ik] );
|
plotter->line_to( coord[ik] );
|
||||||
}
|
}
|
||||||
|
|
||||||
plotter->pen_finish();
|
plotter->pen_finish();
|
||||||
}
|
}
|
||||||
else if( aCallback )
|
else if( aCallback )
|
||||||
|
@ -180,11 +181,11 @@ static void DrawGraphicTextPline(
|
||||||
else if( sketch_mode )
|
else if( sketch_mode )
|
||||||
{
|
{
|
||||||
for( int ik = 0; ik < (point_count - 1); ik++ )
|
for( int ik = 0; ik < (point_count - 1); ik++ )
|
||||||
GRCSegm( &aPanel->m_ClipBox, aDC, coord[ik].x, coord[ik].y,
|
GRCSegm( aClipBox, aDC, coord[ik].x, coord[ik].y,
|
||||||
coord[ik + 1].x, coord[ik + 1].y, aWidth, aColor );
|
coord[ik + 1].x, coord[ik + 1].y, aWidth, aColor );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
GRPoly( &aPanel->m_ClipBox, aDC, point_count, coord, 0,
|
GRPoly( aClipBox, aDC, point_count, coord, 0,
|
||||||
aWidth, aColor, aColor );
|
aWidth, aColor, aColor );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,8 +241,9 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel,
|
||||||
wxPoint overbar_pos; // Start point for the current overbar
|
wxPoint overbar_pos; // Start point for the current overbar
|
||||||
int overbars; // Number of ~ seen
|
int overbars; // Number of ~ seen
|
||||||
int overbar_italic_comp; // Italic compensation for overbar
|
int overbar_italic_comp; // Italic compensation for overbar
|
||||||
|
EDA_Rect* clipBox; // Clip box used in basic draw functions
|
||||||
|
|
||||||
|
clipBox = aPanel ? &aPanel->m_ClipBox : NULL;
|
||||||
#define BUF_SIZE 100
|
#define BUF_SIZE 100
|
||||||
wxPoint coord[BUF_SIZE + 1]; // Buffer coordinate used to draw polylines (one char shape)
|
wxPoint coord[BUF_SIZE + 1]; // Buffer coordinate used to draw polylines (one char shape)
|
||||||
bool sketch_mode = false;
|
bool sketch_mode = false;
|
||||||
|
@ -347,7 +349,8 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel,
|
||||||
RotatePoint( ¤t_char_pos, aPos, aOrient );
|
RotatePoint( ¤t_char_pos, aPos, aOrient );
|
||||||
RotatePoint( &end, aPos, aOrient );
|
RotatePoint( &end, aPos, aOrient );
|
||||||
|
|
||||||
if( plotter ) {
|
if( plotter )
|
||||||
|
{
|
||||||
plotter->move_to( current_char_pos );
|
plotter->move_to( current_char_pos );
|
||||||
plotter->finish_to( end );
|
plotter->finish_to( end );
|
||||||
}
|
}
|
||||||
|
@ -402,7 +405,7 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel,
|
||||||
RotatePoint( &overbar_pos, aPos, aOrient );
|
RotatePoint( &overbar_pos, aPos, aOrient );
|
||||||
coord[1] = overbar_pos;
|
coord[1] = overbar_pos;
|
||||||
/* Plot the overbar segment */
|
/* Plot the overbar segment */
|
||||||
DrawGraphicTextPline( aPanel, aDC, aColor, aWidth,
|
DrawGraphicTextPline( clipBox, aDC, aColor, aWidth,
|
||||||
sketch_mode, 2, coord, aCallback, plotter );
|
sketch_mode, 2, coord, aCallback, plotter );
|
||||||
}
|
}
|
||||||
continue; /* Skip ~ processing */
|
continue; /* Skip ~ processing */
|
||||||
|
@ -426,12 +429,13 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* End of character, insert a synthetic pen up */
|
// End of character, insert a synthetic pen up:
|
||||||
hc1 = ' ';
|
hc1 = ' ';
|
||||||
hc2 = 'R';
|
hc2 = 'R';
|
||||||
endcar = true;
|
endcar = true;
|
||||||
}
|
}
|
||||||
hc1 -= 'R'; hc2 -= 'R'; /* Do the Hershey decode thing: coordinates values are coded as <value> + 'R' */
|
// Do the Hershey decode thing: coordinates values are coded as <value> + 'R'
|
||||||
|
hc1 -= 'R'; hc2 -= 'R';
|
||||||
|
|
||||||
/* Pen up request */
|
/* Pen up request */
|
||||||
if( hc1 == -50 && hc2 == 0 )
|
if( hc1 == -50 && hc2 == 0 )
|
||||||
|
@ -440,7 +444,7 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel,
|
||||||
{
|
{
|
||||||
if( aWidth <= 1 )
|
if( aWidth <= 1 )
|
||||||
aWidth = 0;
|
aWidth = 0;
|
||||||
DrawGraphicTextPline( aPanel, aDC, aColor, aWidth,
|
DrawGraphicTextPline( clipBox, aDC, aColor, aWidth,
|
||||||
sketch_mode, point_count, coord,
|
sketch_mode, point_count, coord,
|
||||||
aCallback, plotter );
|
aCallback, plotter );
|
||||||
}
|
}
|
||||||
|
@ -483,7 +487,7 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel,
|
||||||
RotatePoint( &overbar_pos, aPos, aOrient );
|
RotatePoint( &overbar_pos, aPos, aOrient );
|
||||||
coord[1] = overbar_pos;
|
coord[1] = overbar_pos;
|
||||||
/* Plot the overbar segment */
|
/* Plot the overbar segment */
|
||||||
DrawGraphicTextPline( aPanel, aDC, aColor, aWidth,
|
DrawGraphicTextPline( clipBox, aDC, aColor, aWidth,
|
||||||
sketch_mode, 2, coord, aCallback, plotter );
|
sketch_mode, 2, coord, aCallback, plotter );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1138,6 +1138,9 @@ void GRSCSegm( EDA_Rect* ClipBox,
|
||||||
|
|
||||||
static bool IsGRSPolyDrawable( EDA_Rect* ClipBox, int n, wxPoint Points[] )
|
static bool IsGRSPolyDrawable( EDA_Rect* ClipBox, int n, wxPoint Points[] )
|
||||||
{
|
{
|
||||||
|
if( ! ClipBox )
|
||||||
|
return true;
|
||||||
|
|
||||||
int Xmin, Xmax, Ymin, Ymax;
|
int Xmin, Xmax, Ymin, Ymax;
|
||||||
|
|
||||||
Xmin = Xmax = Points[0].x;
|
Xmin = Xmax = Points[0].x;
|
||||||
|
|
|
@ -13,11 +13,6 @@
|
||||||
#include "cvpcb.h"
|
#include "cvpcb.h"
|
||||||
#include "protos.h"
|
#include "protos.h"
|
||||||
|
|
||||||
#define MAX_LEN_NETNAME 16
|
|
||||||
|
|
||||||
|
|
||||||
static void ChangePinNet( COMPONENT_LIST& list, wxString& PinNet,
|
|
||||||
int* netNumber, bool rightJustify );
|
|
||||||
static void WriteFootprintFilterInfos( FILE* dest, COMPONENT_LIST& list );
|
static void WriteFootprintFilterInfos( FILE* dest, COMPONENT_LIST& list );
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,7 +69,6 @@ int GenNetlistPcbnew( FILE* file, COMPONENT_LIST& list, bool isEESchemaNetlist,
|
||||||
{
|
{
|
||||||
#define NETLIST_HEAD_STRING "EESchema Netlist Version 1.1"
|
#define NETLIST_HEAD_STRING "EESchema Netlist Version 1.1"
|
||||||
char Line[1024];
|
char Line[1024];
|
||||||
int netNumber = 1;
|
|
||||||
|
|
||||||
DateAndTime( Line );
|
DateAndTime( Line );
|
||||||
|
|
||||||
|
@ -103,9 +97,6 @@ int GenNetlistPcbnew( FILE* file, COMPONENT_LIST& list, bool isEESchemaNetlist,
|
||||||
|
|
||||||
BOOST_FOREACH( PIN& pin, component.m_Pins )
|
BOOST_FOREACH( PIN& pin, component.m_Pins )
|
||||||
{
|
{
|
||||||
if( pin.m_Net.Len() > MAX_LEN_NETNAME )
|
|
||||||
ChangePinNet( list, pin.m_Net, &netNumber, rightJustify );
|
|
||||||
|
|
||||||
if( !pin.m_Net.IsEmpty() )
|
if( !pin.m_Net.IsEmpty() )
|
||||||
fprintf( file, " ( %s %s )\n",
|
fprintf( file, " ( %s %s )\n",
|
||||||
CONV_TO_UTF8( pin.m_Number ),
|
CONV_TO_UTF8( pin.m_Number ),
|
||||||
|
@ -161,42 +152,3 @@ void WriteFootprintFilterInfos( FILE* file, COMPONENT_LIST& list )
|
||||||
fprintf( file, "$endfootprintlist\n}\n" );
|
fprintf( file, "$endfootprintlist\n}\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ???
|
|
||||||
* Change le NetName PinNet par un nom compose des 8 derniers codes de PinNet
|
|
||||||
* suivi de _Xnnnnn ou nnnnn est un nom de 0 a 99999
|
|
||||||
*/
|
|
||||||
static void ChangePinNet( COMPONENT_LIST& list, wxString& PinNet,
|
|
||||||
int* netNumber, bool rightJustify )
|
|
||||||
{
|
|
||||||
wxASSERT( netNumber != NULL );
|
|
||||||
|
|
||||||
wxString OldName;
|
|
||||||
wxString NewName;
|
|
||||||
|
|
||||||
OldName = PinNet;
|
|
||||||
|
|
||||||
if( rightJustify ) /* Retain the last 8 letters of the name. */
|
|
||||||
{
|
|
||||||
NewName = OldName.Right( 8 );
|
|
||||||
NewName << *netNumber;
|
|
||||||
}
|
|
||||||
else /* Retain the first 8 letters of the name. */
|
|
||||||
{
|
|
||||||
NewName = OldName.Left( 8 );
|
|
||||||
NewName << *netNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
*netNumber = *netNumber + 1;
|
|
||||||
|
|
||||||
BOOST_FOREACH( COMPONENT& component, list )
|
|
||||||
{
|
|
||||||
BOOST_FOREACH( PIN& pin, component.m_Pins )
|
|
||||||
{
|
|
||||||
if( pin.m_Net != OldName )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
pin.m_Net = NewName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -41,11 +41,6 @@ private:
|
||||||
* orientation.
|
* orientation.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
//int m_Shape;
|
|
||||||
//bool m_IsDangling; // TRUE non connected
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SCH_SHEET_PIN( SCH_SHEET* parent,
|
SCH_SHEET_PIN( SCH_SHEET* parent,
|
||||||
const wxPoint& pos = wxPoint( 0, 0 ),
|
const wxPoint& pos = wxPoint( 0, 0 ),
|
||||||
|
@ -63,6 +58,19 @@ public:
|
||||||
|
|
||||||
SCH_SHEET_PIN* GenCopy();
|
SCH_SHEET_PIN* GenCopy();
|
||||||
|
|
||||||
|
virtual void Draw( WinEDA_DrawPanel* aPanel,
|
||||||
|
wxDC* aDC,
|
||||||
|
const wxPoint& aOffset,
|
||||||
|
int aDraw_mode,
|
||||||
|
int aColor = -1 );
|
||||||
|
|
||||||
|
/** function CreateGraphicShape (virual)
|
||||||
|
* Calculates the graphic shape (a polygon) associated to the text
|
||||||
|
* @param aCorner_list = a buffer to fill with polygon corners coordinates
|
||||||
|
* @param Pos = Position of the shape
|
||||||
|
*/
|
||||||
|
virtual void CreateGraphicShape( std::vector <wxPoint>& aCorner_list,
|
||||||
|
const wxPoint& Pos );
|
||||||
SCH_SHEET_PIN* Next()
|
SCH_SHEET_PIN* Next()
|
||||||
{
|
{
|
||||||
return (SCH_SHEET_PIN*) Pnext;
|
return (SCH_SHEET_PIN*) Pnext;
|
||||||
|
|
|
@ -60,6 +60,22 @@ SCH_SHEET_PIN* SCH_SHEET_PIN::GenCopy()
|
||||||
return newitem;
|
return newitem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** SCH_SHEET_PIN::Draw is the same as SCH_HIERLABEL::Draw
|
||||||
|
* but the graphic icon is slightly different
|
||||||
|
* for INPUT type the icon is the OUTPUT shape of SCH_HIERLABEL
|
||||||
|
* for OUTPUT type the icon is the INPUT shape of SCH_HIERLABEL
|
||||||
|
*/
|
||||||
|
void SCH_SHEET_PIN::Draw( WinEDA_DrawPanel* aPanel,
|
||||||
|
wxDC* aDC,
|
||||||
|
const wxPoint& aOffset,
|
||||||
|
int aDraw_mode,
|
||||||
|
int aColor )
|
||||||
|
{
|
||||||
|
// The icon selection is handle by the virtual method CreateGraphicShape
|
||||||
|
// called by ::Draw
|
||||||
|
SCH_HIERLABEL::Draw(aPanel, aDC, aOffset, aDraw_mode, aColor );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_SHEET_PIN::SwapData( SCH_SHEET_PIN* copyitem )
|
void SCH_SHEET_PIN::SwapData( SCH_SHEET_PIN* copyitem )
|
||||||
{
|
{
|
||||||
|
|
|
@ -1010,11 +1010,12 @@ bool SCH_HIERLABEL::HitTest( const wxPoint& aPosRef )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************************************/
|
/** Function SCH_LABEL::Draw
|
||||||
|
* a label is drawn like a text. So just call SCH_TEXT::Draw
|
||||||
|
*/
|
||||||
void SCH_LABEL::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset,
|
void SCH_LABEL::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset,
|
||||||
int DrawMode, int Color )
|
int DrawMode, int Color )
|
||||||
{
|
{
|
||||||
/*********************************************************************************************/
|
|
||||||
SCH_TEXT::Draw( panel, DC, offset, DrawMode, Color );
|
SCH_TEXT::Draw( panel, DC, offset, DrawMode, Color );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1028,8 +1029,8 @@ void SCH_HIERLABEL::Draw( WinEDA_DrawPanel* panel,
|
||||||
{
|
{
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
/* Texts type Global Label have 4 directions, and the Text origin is the
|
/* Hierarchical Label have a text and a graphic icon.
|
||||||
* graphic icon
|
* Texts type have 4 directions, and the text origin is the graphic icon
|
||||||
*/
|
*/
|
||||||
static std::vector <wxPoint> Poly;
|
static std::vector <wxPoint> Poly;
|
||||||
EDA_Colors color;
|
EDA_Colors color;
|
||||||
|
@ -1100,6 +1101,36 @@ void SCH_HIERLABEL::CreateGraphicShape( std::vector <wxPoint>& aCorner_list,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Virtual Function SCH_SHEET_PIN::CreateGraphicShape
|
||||||
|
* calculates the graphic shape (a polygon) associated to the text
|
||||||
|
* @param aCorner_list = a buffer to fill with polygon corners coordinates
|
||||||
|
* @param aPos = Position of the shape
|
||||||
|
*/
|
||||||
|
void SCH_SHEET_PIN::CreateGraphicShape( std::vector <wxPoint>& aCorner_list,
|
||||||
|
const wxPoint& aPos )
|
||||||
|
{
|
||||||
|
/* This is the same icon shapes as SCH_HIERLABEL
|
||||||
|
* but the graphic icon is slightly different in 2 cases:
|
||||||
|
* for INPUT type the icon is the OUTPUT shape of SCH_HIERLABEL
|
||||||
|
* for OUTPUT type the icon is the INPUT shape of SCH_HIERLABEL
|
||||||
|
*/
|
||||||
|
int tmp = m_Shape;
|
||||||
|
switch( m_Shape )
|
||||||
|
{
|
||||||
|
case NET_INPUT:
|
||||||
|
m_Shape = NET_OUTPUT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NET_OUTPUT:
|
||||||
|
m_Shape = NET_INPUT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SCH_HIERLABEL::CreateGraphicShape( aCorner_list, aPos );
|
||||||
|
m_Shape = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************/
|
/****************************************/
|
||||||
EDA_Rect SCH_HIERLABEL::GetBoundingBox()
|
EDA_Rect SCH_HIERLABEL::GetBoundingBox()
|
||||||
|
|
|
@ -93,6 +93,18 @@ public:
|
||||||
int draw_mode,
|
int draw_mode,
|
||||||
int Color = -1 );
|
int Color = -1 );
|
||||||
|
|
||||||
|
/** function CreateGraphicShape
|
||||||
|
* Calculates the graphic shape (a polygon) associated to the text
|
||||||
|
* @param aCorner_list = a buffer to fill with polygon corners coordinates
|
||||||
|
* @param Pos = Postion of the shape
|
||||||
|
* for texts and labels: do nothing
|
||||||
|
* Mainly for derived classes (SCH_SHEET_PIN and Hierarchical labels)
|
||||||
|
*/
|
||||||
|
virtual void CreateGraphicShape( std::vector <wxPoint>& aCorner_list,
|
||||||
|
const wxPoint& Pos )
|
||||||
|
{
|
||||||
|
aCorner_list.clear();
|
||||||
|
}
|
||||||
void SwapData( SCH_TEXT* copyitem );
|
void SwapData( SCH_TEXT* copyitem );
|
||||||
|
|
||||||
void Place( WinEDA_SchematicFrame* frame, wxDC* DC );
|
void Place( WinEDA_SchematicFrame* frame, wxDC* DC );
|
||||||
|
@ -291,13 +303,13 @@ public:
|
||||||
*/
|
*/
|
||||||
EDA_Rect GetBoundingBox();
|
EDA_Rect GetBoundingBox();
|
||||||
|
|
||||||
/** function CreateGraphicShape
|
/** function CreateGraphicShape (virual)
|
||||||
* Calculates the graphic shape (a polygon) associated to the text
|
* Calculates the graphic shape (a polygon) associated to the text
|
||||||
* @param aCorner_list = a buffer to fill with polygon corners coordinates
|
* @param aCorner_list = a buffer to fill with polygon corners coordinates
|
||||||
* @param Pos = Position of the shape
|
* @param aPos = Position of the shape
|
||||||
*/
|
*/
|
||||||
void CreateGraphicShape( std::vector <wxPoint>& aCorner_list,
|
virtual void CreateGraphicShape( std::vector <wxPoint>& aCorner_list,
|
||||||
const wxPoint& Pos );
|
const wxPoint& aPos );
|
||||||
|
|
||||||
/** virtual function Mirror_Y
|
/** virtual function Mirror_Y
|
||||||
* mirror item relative to an Y axis
|
* mirror item relative to an Y axis
|
||||||
|
@ -355,7 +367,7 @@ public:
|
||||||
* @param aCorner_list = a buffer to fill with polygon corners coordinates
|
* @param aCorner_list = a buffer to fill with polygon corners coordinates
|
||||||
* @param Pos = Postion of the shape
|
* @param Pos = Postion of the shape
|
||||||
*/
|
*/
|
||||||
void CreateGraphicShape( std::vector <wxPoint>& aCorner_list,
|
virtual void CreateGraphicShape( std::vector <wxPoint>& aCorner_list,
|
||||||
const wxPoint& Pos );
|
const wxPoint& Pos );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -27,31 +27,30 @@ enum End_Type {
|
||||||
SHEET_LABEL_END
|
SHEET_LABEL_END
|
||||||
};
|
};
|
||||||
|
|
||||||
class DanglingEndHandle
|
// A helper class to store a list of items that can be connected to something:
|
||||||
|
class DANGLING_END_ITEM
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const void* m_Item;
|
const void* m_Item; // a pointer to the parent
|
||||||
wxPoint m_Pos;
|
wxPoint m_Pos; // the position of the connecting point
|
||||||
int m_Type;
|
int m_Type; // type of parent
|
||||||
DanglingEndHandle* m_Pnext;
|
|
||||||
|
|
||||||
DanglingEndHandle( int type )
|
DANGLING_END_ITEM( int type, const void* aItem )
|
||||||
{
|
{
|
||||||
m_Item = NULL;
|
m_Item = aItem;
|
||||||
m_Type = type;
|
m_Type = type;
|
||||||
m_Pnext = NULL;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
DanglingEndHandle* ItemList;
|
static void TestWireForDangling( std::vector <DANGLING_END_ITEM>& aItemList,
|
||||||
|
SCH_LINE* DrawRef,
|
||||||
static void TestWireForDangling( SCH_LINE* DrawRef,
|
|
||||||
WinEDA_SchematicFrame* frame,
|
WinEDA_SchematicFrame* frame,
|
||||||
wxDC* DC );
|
wxDC* aDC );
|
||||||
void TestLabelForDangling( SCH_TEXT* label,
|
void TestLabelForDangling( std::vector <DANGLING_END_ITEM>& aItemList,
|
||||||
WinEDA_SchematicFrame* frame,
|
SCH_TEXT* aLabel,
|
||||||
wxDC* DC );
|
WinEDA_SchematicFrame* aFrame,
|
||||||
DanglingEndHandle* RebuildEndList( EDA_BaseStruct* DrawList );
|
wxDC* aDC );
|
||||||
|
void RebuildEndPointsList( std::vector <DANGLING_END_ITEM>& aItemList, SCH_ITEM* aDrawList );
|
||||||
|
|
||||||
|
|
||||||
/* Returns true if the point P is on the segment S. */
|
/* Returns true if the point P is on the segment S. */
|
||||||
|
@ -74,21 +73,10 @@ bool SegmentIntersect( wxPoint aSegStart, wxPoint aSegEnd, wxPoint aTestPoint )
|
||||||
|
|
||||||
void WinEDA_SchematicFrame::TestDanglingEnds( SCH_ITEM* DrawList, wxDC* DC )
|
void WinEDA_SchematicFrame::TestDanglingEnds( SCH_ITEM* DrawList, wxDC* DC )
|
||||||
{
|
{
|
||||||
if( ItemList )
|
// this list is static to avoid many useles memory allocation.
|
||||||
{
|
std::vector <DANGLING_END_ITEM> itemList;
|
||||||
const DanglingEndHandle* DanglingItem;
|
|
||||||
const DanglingEndHandle* nextitem;
|
|
||||||
|
|
||||||
for( DanglingItem = ItemList;
|
RebuildEndPointsList( itemList, DrawList );
|
||||||
DanglingItem != NULL;
|
|
||||||
DanglingItem = nextitem )
|
|
||||||
{
|
|
||||||
nextitem = DanglingItem->m_Pnext;
|
|
||||||
SAFE_DELETE( DanglingItem );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemList = RebuildEndList( DrawList );
|
|
||||||
|
|
||||||
for( SCH_ITEM* item = DrawList; item; item = item->Next() )
|
for( SCH_ITEM* item = DrawList; item; item = item->Next() )
|
||||||
{
|
{
|
||||||
|
@ -97,14 +85,17 @@ void WinEDA_SchematicFrame::TestDanglingEnds( SCH_ITEM* DrawList, wxDC* DC )
|
||||||
case TYPE_SCH_GLOBALLABEL:
|
case TYPE_SCH_GLOBALLABEL:
|
||||||
case TYPE_SCH_HIERLABEL:
|
case TYPE_SCH_HIERLABEL:
|
||||||
case TYPE_SCH_LABEL:
|
case TYPE_SCH_LABEL:
|
||||||
TestLabelForDangling( (SCH_LABEL*) item, this, DC );
|
TestLabelForDangling( itemList, (SCH_LABEL*) item, this, DC );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRAW_SHEET_STRUCT_TYPE:
|
case DRAW_SHEET_STRUCT_TYPE:
|
||||||
|
{
|
||||||
|
SCH_SHEET* sheet = (SCH_SHEET*) item;
|
||||||
// Read the hierarchical pins list and teast for dangling pins:
|
// Read the hierarchical pins list and teast for dangling pins:
|
||||||
BOOST_FOREACH( SCH_SHEET_PIN & sheetPin, ( (SCH_SHEET*) item )->GetSheetPins() ) {
|
BOOST_FOREACH( SCH_SHEET_PIN & pinsheet, sheet->GetSheetPins() )
|
||||||
TestLabelForDangling( &sheetPin, this, DC );
|
{
|
||||||
|
TestLabelForDangling( itemList, &pinsheet, this, DC );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -113,7 +104,7 @@ void WinEDA_SchematicFrame::TestDanglingEnds( SCH_ITEM* DrawList, wxDC* DC )
|
||||||
#define STRUCT ( (SCH_LINE*) item )
|
#define STRUCT ( (SCH_LINE*) item )
|
||||||
if( STRUCT->GetLayer() == LAYER_WIRE )
|
if( STRUCT->GetLayer() == LAYER_WIRE )
|
||||||
{
|
{
|
||||||
TestWireForDangling( STRUCT, this, DC );
|
TestWireForDangling( itemList, STRUCT, this, DC );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if( STRUCT->GetLayer() == LAYER_NOTES )
|
if( STRUCT->GetLayer() == LAYER_NOTES )
|
||||||
|
@ -165,24 +156,22 @@ LIB_PIN* WinEDA_SchematicFrame::LocatePinEnd( SCH_ITEM* DrawList,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TestWireForDangling( SCH_LINE* DrawRef, WinEDA_SchematicFrame* frame,
|
void TestWireForDangling( std::vector <DANGLING_END_ITEM>& aItemList,
|
||||||
|
SCH_LINE* DrawRef,
|
||||||
|
WinEDA_SchematicFrame* frame,
|
||||||
wxDC* DC )
|
wxDC* DC )
|
||||||
{
|
{
|
||||||
DanglingEndHandle* terminal_item;
|
|
||||||
bool Sdangstate = true, Edangstate = true;
|
bool Sdangstate = true, Edangstate = true;
|
||||||
|
|
||||||
for( terminal_item = ItemList; terminal_item != NULL;
|
BOOST_FOREACH( DANGLING_END_ITEM terminal_item, aItemList )
|
||||||
terminal_item = terminal_item->m_Pnext )
|
|
||||||
{
|
{
|
||||||
if( terminal_item->m_Item == DrawRef )
|
if( terminal_item.m_Item == DrawRef )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if( (DrawRef->m_Start.x == terminal_item->m_Pos.x)
|
if( DrawRef->m_Start == terminal_item.m_Pos )
|
||||||
&& (DrawRef->m_Start.y == terminal_item->m_Pos.y) )
|
|
||||||
Sdangstate = false;
|
Sdangstate = false;
|
||||||
|
|
||||||
if( (DrawRef->m_End.x == terminal_item->m_Pos.x)
|
if( DrawRef->m_End == terminal_item.m_Pos )
|
||||||
&& (DrawRef->m_End.y == terminal_item->m_Pos.y) )
|
|
||||||
Edangstate = false;
|
Edangstate = false;
|
||||||
|
|
||||||
if( (Sdangstate == false) && (Edangstate == false) )
|
if( (Sdangstate == false) && (Edangstate == false) )
|
||||||
|
@ -203,34 +192,40 @@ void TestWireForDangling( SCH_LINE* DrawRef, WinEDA_SchematicFrame* frame,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TestLabelForDangling( SCH_TEXT* label, WinEDA_SchematicFrame* frame,
|
void TestLabelForDangling( std::vector <DANGLING_END_ITEM>& aItemList,
|
||||||
wxDC* DC )
|
SCH_TEXT* aLabel,
|
||||||
|
WinEDA_SchematicFrame* aFrame,
|
||||||
|
wxDC* aDC )
|
||||||
{
|
{
|
||||||
DanglingEndHandle* terminal_item;
|
|
||||||
bool dangstate = true;
|
bool dangstate = true;
|
||||||
|
|
||||||
for( terminal_item = ItemList; terminal_item != NULL;
|
for( unsigned ii = 0; ii < aItemList.size(); ii++ )
|
||||||
terminal_item = terminal_item->m_Pnext )
|
|
||||||
{
|
{
|
||||||
if( terminal_item->m_Item == label )
|
DANGLING_END_ITEM & terminal_item = aItemList[ii];
|
||||||
|
|
||||||
|
if( terminal_item.m_Item == aLabel )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
switch( terminal_item->m_Type )
|
switch( terminal_item.m_Type )
|
||||||
{
|
{
|
||||||
case PIN_END:
|
case PIN_END:
|
||||||
case LABEL_END:
|
case LABEL_END:
|
||||||
case SHEET_LABEL_END:
|
case SHEET_LABEL_END:
|
||||||
if( ( label->m_Pos.x == terminal_item->m_Pos.x )
|
if( aLabel->m_Pos == terminal_item.m_Pos )
|
||||||
&& ( label->m_Pos.y == terminal_item->m_Pos.y ) )
|
|
||||||
dangstate = false;
|
dangstate = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WIRE_START_END:
|
case WIRE_START_END:
|
||||||
case BUS_START_END:
|
case BUS_START_END:
|
||||||
dangstate = !SegmentIntersect( terminal_item->m_Pos,
|
{
|
||||||
terminal_item->m_Pnext->m_Pos,
|
// these schematic items have created 2 DANGLING_END_ITEM
|
||||||
label->m_Pos );
|
// one per end.
|
||||||
terminal_item = terminal_item->m_Pnext;
|
ii++;
|
||||||
|
DANGLING_END_ITEM & next_terminal = aItemList[ii];
|
||||||
|
dangstate = !SegmentIntersect( terminal_item.m_Pos,
|
||||||
|
next_terminal.m_Pos,
|
||||||
|
aLabel->m_Pos );
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case UNKNOWN:
|
case UNKNOWN:
|
||||||
|
@ -245,13 +240,13 @@ void TestLabelForDangling( SCH_TEXT* label, WinEDA_SchematicFrame* frame,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( dangstate != label->m_IsDangling )
|
if( dangstate != aLabel->m_IsDangling )
|
||||||
{
|
{
|
||||||
if( DC )
|
if( aDC )
|
||||||
RedrawOneStruct( frame->DrawPanel, DC, label, g_XorMode );
|
RedrawOneStruct( aFrame->DrawPanel, aDC, aLabel, g_XorMode );
|
||||||
label->m_IsDangling = dangstate;
|
aLabel->m_IsDangling = dangstate;
|
||||||
if( DC )
|
if( aDC )
|
||||||
RedrawOneStruct( frame->DrawPanel, DC, label, GR_DEFAULT_DRAWMODE );
|
RedrawOneStruct( aFrame->DrawPanel, aDC, aLabel, GR_DEFAULT_DRAWMODE );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -273,99 +268,76 @@ wxPoint ReturnPinPhysicalPosition( LIB_PIN* Pin, SCH_COMPONENT* DrawLibItem )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DanglingEndHandle* RebuildEndList( EDA_BaseStruct* DrawList )
|
void RebuildEndPointsList( std::vector <DANGLING_END_ITEM>& aItemList, SCH_ITEM* aDrawList )
|
||||||
{
|
{
|
||||||
DanglingEndHandle* StartList = NULL, * item, * lastitem = NULL;
|
SCH_ITEM* schItem;
|
||||||
EDA_BaseStruct* DrawItem;
|
|
||||||
|
|
||||||
for( DrawItem = DrawList; DrawItem != NULL; DrawItem = DrawItem->Next() )
|
aItemList.clear();
|
||||||
|
|
||||||
|
for( schItem = aDrawList; schItem != NULL; schItem = schItem->Next() )
|
||||||
{
|
{
|
||||||
switch( DrawItem->Type() )
|
switch( schItem->Type() )
|
||||||
{
|
{
|
||||||
case TYPE_SCH_LABEL:
|
case TYPE_SCH_LABEL:
|
||||||
case TYPE_SCH_GLOBALLABEL:
|
case TYPE_SCH_GLOBALLABEL:
|
||||||
case TYPE_SCH_HIERLABEL:
|
case TYPE_SCH_HIERLABEL:
|
||||||
|
{
|
||||||
#undef STRUCT
|
#undef STRUCT
|
||||||
#define STRUCT ( (SCH_LABEL*) DrawItem )
|
#define STRUCT ( (SCH_LABEL*) schItem )
|
||||||
item = new DanglingEndHandle( LABEL_END );
|
DANGLING_END_ITEM item( LABEL_END, schItem );
|
||||||
|
item.m_Pos = STRUCT->m_Pos;
|
||||||
item->m_Item = DrawItem;
|
aItemList.push_back( item );
|
||||||
item->m_Pos = STRUCT->m_Pos;
|
}
|
||||||
if( lastitem )
|
|
||||||
lastitem->m_Pnext = item;
|
|
||||||
else
|
|
||||||
StartList = item;
|
|
||||||
lastitem = item;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRAW_SEGMENT_STRUCT_TYPE:
|
case DRAW_SEGMENT_STRUCT_TYPE:
|
||||||
#undef STRUCT
|
#undef STRUCT
|
||||||
#define STRUCT ( (SCH_LINE*) DrawItem )
|
#define STRUCT ( (SCH_LINE*) schItem )
|
||||||
if( STRUCT->GetLayer() == LAYER_NOTES )
|
if( STRUCT->GetLayer() == LAYER_NOTES )
|
||||||
break;
|
break;
|
||||||
if( ( STRUCT->GetLayer() == LAYER_BUS )
|
if( ( STRUCT->GetLayer() == LAYER_BUS )
|
||||||
|| (STRUCT->GetLayer() == LAYER_WIRE ) )
|
|| (STRUCT->GetLayer() == LAYER_WIRE ) )
|
||||||
{
|
{
|
||||||
item = new DanglingEndHandle(
|
DANGLING_END_ITEM item( (STRUCT->GetLayer() == LAYER_BUS) ?
|
||||||
(STRUCT->GetLayer() == LAYER_BUS) ?
|
BUS_START_END : WIRE_START_END, schItem );
|
||||||
BUS_START_END : WIRE_START_END );
|
item.m_Pos = STRUCT->m_Start;
|
||||||
|
DANGLING_END_ITEM item1( (STRUCT->GetLayer() == LAYER_BUS) ?
|
||||||
|
BUS_END_END : WIRE_END_END, schItem );
|
||||||
|
item1.m_Pos = STRUCT->m_End;
|
||||||
|
|
||||||
item->m_Item = DrawItem;
|
aItemList.push_back( item );
|
||||||
item->m_Pos = STRUCT->m_Start;
|
aItemList.push_back( item1 );
|
||||||
if( lastitem )
|
|
||||||
lastitem->m_Pnext = item;
|
|
||||||
else
|
|
||||||
StartList = item;
|
|
||||||
lastitem = item;
|
|
||||||
item =
|
|
||||||
new DanglingEndHandle( (STRUCT->GetLayer() == LAYER_BUS) ?
|
|
||||||
BUS_END_END : WIRE_END_END );
|
|
||||||
|
|
||||||
item->m_Item = DrawItem;
|
|
||||||
item->m_Pos = STRUCT->m_End;
|
|
||||||
lastitem->m_Pnext = item;
|
|
||||||
lastitem = item;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRAW_JUNCTION_STRUCT_TYPE:
|
case DRAW_JUNCTION_STRUCT_TYPE:
|
||||||
|
{
|
||||||
#undef STRUCT
|
#undef STRUCT
|
||||||
#define STRUCT ( (SCH_JUNCTION*) DrawItem )
|
#define STRUCT ( (SCH_JUNCTION*) schItem )
|
||||||
item = new DanglingEndHandle( JUNCTION_END );
|
DANGLING_END_ITEM item( JUNCTION_END, schItem );
|
||||||
|
item.m_Pos = STRUCT->m_Pos;
|
||||||
item->m_Item = DrawItem;
|
aItemList.push_back( item );
|
||||||
item->m_Pos = STRUCT->m_Pos;
|
}
|
||||||
if( lastitem )
|
|
||||||
lastitem->m_Pnext = item;
|
|
||||||
else
|
|
||||||
StartList = item;
|
|
||||||
lastitem = item;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRAW_BUSENTRY_STRUCT_TYPE:
|
case DRAW_BUSENTRY_STRUCT_TYPE:
|
||||||
|
{
|
||||||
#undef STRUCT
|
#undef STRUCT
|
||||||
#define STRUCT ( (SCH_BUS_ENTRY*) DrawItem )
|
#define STRUCT ( (SCH_BUS_ENTRY*) schItem )
|
||||||
item = new DanglingEndHandle( ENTRY_END );
|
DANGLING_END_ITEM item( ENTRY_END, schItem );
|
||||||
|
item.m_Pos = STRUCT->m_Pos;
|
||||||
|
|
||||||
item->m_Item = DrawItem;
|
DANGLING_END_ITEM item1( ENTRY_END, schItem );
|
||||||
item->m_Pos = STRUCT->m_Pos;
|
item1.m_Pos = STRUCT->m_End();
|
||||||
if( lastitem )
|
aItemList.push_back( item );
|
||||||
lastitem->m_Pnext = item;
|
aItemList.push_back( item1 );
|
||||||
else
|
}
|
||||||
StartList = item;
|
|
||||||
lastitem = item;
|
|
||||||
item = new DanglingEndHandle( ENTRY_END );
|
|
||||||
|
|
||||||
item->m_Item = DrawItem;
|
|
||||||
item->m_Pos = STRUCT->m_End();
|
|
||||||
lastitem->m_Pnext = item;
|
|
||||||
lastitem = item;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TYPE_SCH_COMPONENT:
|
case TYPE_SCH_COMPONENT:
|
||||||
{
|
{
|
||||||
#undef STRUCT
|
#undef STRUCT
|
||||||
#define STRUCT ( (SCH_COMPONENT*) DrawItem )
|
#define STRUCT ( (SCH_COMPONENT*) schItem )
|
||||||
LIB_COMPONENT* Entry;
|
LIB_COMPONENT* Entry;
|
||||||
Entry = CMP_LIBRARY::FindLibraryComponent( STRUCT->m_ChipName );
|
Entry = CMP_LIBRARY::FindLibraryComponent( STRUCT->m_ChipName );
|
||||||
if( Entry == NULL )
|
if( Entry == NULL )
|
||||||
|
@ -384,15 +356,9 @@ DanglingEndHandle* RebuildEndList( EDA_BaseStruct* DrawList )
|
||||||
&& ( STRUCT->m_Convert != Pin->m_Convert ) )
|
&& ( STRUCT->m_Convert != Pin->m_Convert ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
item = new DanglingEndHandle( PIN_END );
|
DANGLING_END_ITEM item( PIN_END, Pin );
|
||||||
|
item.m_Pos = ReturnPinPhysicalPosition( Pin, STRUCT );
|
||||||
item->m_Item = Pin;
|
aItemList.push_back( item );
|
||||||
item->m_Pos = ReturnPinPhysicalPosition( Pin, STRUCT );
|
|
||||||
if( lastitem )
|
|
||||||
lastitem->m_Pnext = item;
|
|
||||||
else
|
|
||||||
StartList = item;
|
|
||||||
lastitem = item;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -400,21 +366,18 @@ DanglingEndHandle* RebuildEndList( EDA_BaseStruct* DrawList )
|
||||||
|
|
||||||
case DRAW_SHEET_STRUCT_TYPE:
|
case DRAW_SHEET_STRUCT_TYPE:
|
||||||
{
|
{
|
||||||
SCH_SHEET* sheet = (SCH_SHEET*) DrawItem;
|
SCH_SHEET* sheet = (SCH_SHEET*) schItem;
|
||||||
|
|
||||||
BOOST_FOREACH( SCH_SHEET_PIN pinsheet, sheet->GetSheetPins() ) {
|
// Using BOOST_FOREACH here creates problems (bad pointer value to pinsheet).
|
||||||
|
// I do not know why.
|
||||||
|
for( unsigned ii = 0; ii < sheet->GetSheetPins().size(); ii++ )
|
||||||
|
{
|
||||||
|
SCH_SHEET_PIN &pinsheet = sheet->GetSheetPins()[ii];
|
||||||
wxASSERT( pinsheet.Type() == DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE );
|
wxASSERT( pinsheet.Type() == DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE );
|
||||||
|
|
||||||
item = new DanglingEndHandle( SHEET_LABEL_END );
|
DANGLING_END_ITEM item( SHEET_LABEL_END, &pinsheet );
|
||||||
item->m_Item = &pinsheet;
|
item.m_Pos = pinsheet.m_Pos;
|
||||||
item->m_Pos = pinsheet.m_Pos;
|
aItemList.push_back( item );
|
||||||
|
|
||||||
if( lastitem )
|
|
||||||
lastitem->m_Pnext = item;
|
|
||||||
else
|
|
||||||
StartList = item;
|
|
||||||
|
|
||||||
lastitem = item;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -423,6 +386,4 @@ DanglingEndHandle* RebuildEndList( EDA_BaseStruct* DrawList )
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return StartList;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,7 +107,7 @@ DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE( wx
|
||||||
m_PanelBasic->SetSizer( bSizerBasicPanel );
|
m_PanelBasic->SetSizer( bSizerBasicPanel );
|
||||||
m_PanelBasic->Layout();
|
m_PanelBasic->Layout();
|
||||||
bSizerBasicPanel->Fit( m_PanelBasic );
|
bSizerBasicPanel->Fit( m_PanelBasic );
|
||||||
m_NoteBook->AddPage( m_PanelBasic, _("Options"), false );
|
m_NoteBook->AddPage( m_PanelBasic, _("Options"), true );
|
||||||
m_PanelDoc = new wxPanel( m_NoteBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
|
m_PanelDoc = new wxPanel( m_NoteBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
|
||||||
wxBoxSizer* m_PanelDocBoxSizer;
|
wxBoxSizer* m_PanelDocBoxSizer;
|
||||||
m_PanelDocBoxSizer = new wxBoxSizer( wxVERTICAL );
|
m_PanelDocBoxSizer = new wxBoxSizer( wxVERTICAL );
|
||||||
|
@ -123,7 +123,7 @@ DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE( wx
|
||||||
|
|
||||||
m_staticTextKeywords = new wxStaticText( m_PanelDoc, wxID_ANY, _("Keywords:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_staticTextKeywords = new wxStaticText( m_PanelDoc, wxID_ANY, _("Keywords:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_staticTextKeywords->Wrap( -1 );
|
m_staticTextKeywords->Wrap( -1 );
|
||||||
m_staticTextKeywords->SetToolTip( _("Enter keys words that can be used to select this composant.\nKey words cannot have spaces and are separated by a space.") );
|
m_staticTextKeywords->SetToolTip( _("Enter key words that can be used to select this composant.\nKey words cannot have spaces and are separated by a space.") );
|
||||||
|
|
||||||
m_PanelDocBoxSizer->Add( m_staticTextKeywords, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
m_PanelDocBoxSizer->Add( m_staticTextKeywords, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
|
@ -153,7 +153,7 @@ DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE( wx
|
||||||
m_PanelDoc->SetSizer( m_PanelDocBoxSizer );
|
m_PanelDoc->SetSizer( m_PanelDocBoxSizer );
|
||||||
m_PanelDoc->Layout();
|
m_PanelDoc->Layout();
|
||||||
m_PanelDocBoxSizer->Fit( m_PanelDoc );
|
m_PanelDocBoxSizer->Fit( m_PanelDoc );
|
||||||
m_NoteBook->AddPage( m_PanelDoc, _("Description"), true );
|
m_NoteBook->AddPage( m_PanelDoc, _("Description"), false );
|
||||||
m_PanelAlias = new wxPanel( m_NoteBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
|
m_PanelAlias = new wxPanel( m_NoteBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
|
||||||
wxBoxSizer* bSizerMainPanelAlias;
|
wxBoxSizer* bSizerMainPanelAlias;
|
||||||
bSizerMainPanelAlias = new wxBoxSizer( wxHORIZONTAL );
|
bSizerMainPanelAlias = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
|
@ -128,7 +128,7 @@
|
||||||
<object class="notebookpage" expanded="1">
|
<object class="notebookpage" expanded="1">
|
||||||
<property name="bitmap"></property>
|
<property name="bitmap"></property>
|
||||||
<property name="label">Options</property>
|
<property name="label">Options</property>
|
||||||
<property name="select">0</property>
|
<property name="select">1</property>
|
||||||
<object class="wxPanel" expanded="1">
|
<object class="wxPanel" expanded="1">
|
||||||
<property name="bg"></property>
|
<property name="bg"></property>
|
||||||
<property name="context_help"></property>
|
<property name="context_help"></property>
|
||||||
|
@ -851,7 +851,7 @@
|
||||||
<object class="notebookpage" expanded="1">
|
<object class="notebookpage" expanded="1">
|
||||||
<property name="bitmap"></property>
|
<property name="bitmap"></property>
|
||||||
<property name="label">Description</property>
|
<property name="label">Description</property>
|
||||||
<property name="select">1</property>
|
<property name="select">0</property>
|
||||||
<object class="wxPanel" expanded="1">
|
<object class="wxPanel" expanded="1">
|
||||||
<property name="bg"></property>
|
<property name="bg"></property>
|
||||||
<property name="context_help"></property>
|
<property name="context_help"></property>
|
||||||
|
@ -1026,7 +1026,7 @@
|
||||||
<property name="size"></property>
|
<property name="size"></property>
|
||||||
<property name="style"></property>
|
<property name="style"></property>
|
||||||
<property name="subclass"></property>
|
<property name="subclass"></property>
|
||||||
<property name="tooltip">Enter keys words that can be used to select this composant.
Key words cannot have spaces and are separated by a space.</property>
|
<property name="tooltip">Enter key words that can be used to select this composant.
Key words cannot have spaces and are separated by a space.</property>
|
||||||
<property name="window_extra_style"></property>
|
<property name="window_extra_style"></property>
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
|
|
|
@ -288,20 +288,10 @@ static void PlotTextStruct( PLOTTER* plotter, SCH_TEXT* aSchText )
|
||||||
aSchText->m_Bold );
|
aSchText->m_Bold );
|
||||||
|
|
||||||
/* Draw graphic symbol for global or hierarchical labels */
|
/* Draw graphic symbol for global or hierarchical labels */
|
||||||
if( aSchText->Type() == TYPE_SCH_GLOBALLABEL )
|
aSchText->CreateGraphicShape( Poly, aSchText->m_Pos );
|
||||||
{
|
if( Poly.size() )
|
||||||
( (SCH_GLOBALLABEL*) aSchText )->CreateGraphicShape( Poly,
|
|
||||||
aSchText->m_Pos );
|
|
||||||
plotter->poly( Poly.size(), &Poly[0].x, NO_FILL );
|
plotter->poly( Poly.size(), &Poly[0].x, NO_FILL );
|
||||||
}
|
}
|
||||||
if( ( aSchText->Type() == TYPE_SCH_HIERLABEL )
|
|
||||||
|| ( aSchText->Type() == DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE) )
|
|
||||||
{
|
|
||||||
( (SCH_HIERLABEL*) aSchText )->CreateGraphicShape( Poly,
|
|
||||||
aSchText->m_Pos );
|
|
||||||
plotter->poly( Poly.size(), &Poly[0].x, NO_FILL );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void PlotSheetStruct( PLOTTER* plotter, SCH_SHEET* Struct )
|
static void PlotSheetStruct( PLOTTER* plotter, SCH_SHEET* Struct )
|
||||||
|
|
|
@ -392,7 +392,7 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !IsOK( this, _( "Do you wish to cleanup this sheet" ) ) )
|
if( !IsOK( this, _( "Do you wish to cleanup this sheet?" ) ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Save sheet in undo list before cleaning up unreferenced hierarchical labels. */
|
/* Save sheet in undo list before cleaning up unreferenced hierarchical labels. */
|
||||||
|
|
|
@ -71,11 +71,10 @@ int ChangeSideNumLayer( int oldlayer )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Change the mask layer during routing cu / cmp layers for
|
/* Calculate the mask layer when flipping a footprint
|
||||||
* Cu / CMP..
|
* BACK and FRONT copper layers , mask, paste, solder layers are swapped
|
||||||
* (Copper, mask, paste, solder)
|
|
||||||
*/
|
*/
|
||||||
static int ChangeSideMaskLayer( int masque )
|
int ChangeSideMaskLayer( int masque )
|
||||||
{
|
{
|
||||||
int newmasque;
|
int newmasque;
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
/***********************************************/
|
/***********************************************/
|
||||||
|
|
||||||
#include "fctsys.h"
|
#include "fctsys.h"
|
||||||
|
#include "PolyLine.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "confirm.h"
|
#include "confirm.h"
|
||||||
#include "kicad_string.h"
|
#include "kicad_string.h"
|
||||||
|
@ -176,7 +177,7 @@ void D_PAD::Copy( D_PAD* source )
|
||||||
m_Pos = source->m_Pos;
|
m_Pos = source->m_Pos;
|
||||||
m_Masque_Layer = source->m_Masque_Layer;
|
m_Masque_Layer = source->m_Masque_Layer;
|
||||||
|
|
||||||
memcpy( m_Padname, source->m_Padname, sizeof(m_Padname) );
|
m_NumPadName = source->m_NumPadName;
|
||||||
SetNet( source->GetNet() );
|
SetNet( source->GetNet() );
|
||||||
m_Drill = source->m_Drill;
|
m_Drill = source->m_Drill;
|
||||||
m_DrillShape = source->m_DrillShape;
|
m_DrillShape = source->m_DrillShape;
|
||||||
|
@ -779,6 +780,23 @@ bool D_PAD::HitTest( const wxPoint& ref_pos )
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PAD_TRAPEZOID:
|
||||||
|
{
|
||||||
|
wxPoint poly[4];
|
||||||
|
BuildPadPolygon( poly, wxSize(0,0), 0 );
|
||||||
|
// Build the same polygon with CPolyPt corners,
|
||||||
|
// to use TestPointInsidePolygon
|
||||||
|
static std::vector <CPolyPt> polysList; // Is static to avoid memory reallocation
|
||||||
|
polysList.clear();
|
||||||
|
for(int ii= 0; ii < 4; ii++ )
|
||||||
|
{
|
||||||
|
CPolyPt corner(poly[ii].x, poly[ii].y);
|
||||||
|
polysList.push_back(corner);
|
||||||
|
}
|
||||||
|
RotatePoint( &deltaX, &deltaY, -m_Orient );
|
||||||
|
return TestPointInsidePolygon( polysList, 0, 3, deltaX, deltaY );
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
RotatePoint( &deltaX, &deltaY, -m_Orient );
|
RotatePoint( &deltaX, &deltaY, -m_Orient );
|
||||||
if( (abs( deltaX ) <= dx ) && (abs( deltaY ) <= dy) )
|
if( (abs( deltaX ) <= dx ) && (abs( deltaY ) <= dy) )
|
||||||
|
|
|
@ -25,6 +25,28 @@ class Pcb3D_GLCanvas;
|
||||||
#define PAD_HOLE_NOT_PLATED_DEFAULT_LAYERS LAYER_BACK | SILKSCREEN_LAYER_FRONT | \
|
#define PAD_HOLE_NOT_PLATED_DEFAULT_LAYERS LAYER_BACK | SILKSCREEN_LAYER_FRONT | \
|
||||||
SOLDERMASK_LAYER_BACK | SOLDERMASK_LAYER_FRONT
|
SOLDERMASK_LAYER_BACK | SOLDERMASK_LAYER_FRONT
|
||||||
|
|
||||||
|
// Helper class to staore parameters used to draw a pad
|
||||||
|
class PAD_DRAWINFO
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
WinEDA_DrawPanel * m_DrawPanel; // the WinEDA_DrawPanel used to draw a PAD ; can be null
|
||||||
|
int m_DrawMode; // the draw mode
|
||||||
|
int m_Color; // color used to draw the pad shape , from pad layers and visible layers
|
||||||
|
int m_HoleColor; // color used to draw the pad hole
|
||||||
|
int m_PadClearance; // clearance value, used to draw the pad area outlines
|
||||||
|
wxSize m_Mask_margin; // margin, used to draw solder paste when only one layer is shown
|
||||||
|
bool m_Display_padnum; // true to show pad number
|
||||||
|
bool m_Display_netname; // true to show net name
|
||||||
|
bool m_ShowPadFilled; // true to show pad as solid area, false to show pas in sketch mode
|
||||||
|
bool m_ShowNCMark; // true to show pad not connected mark
|
||||||
|
bool m_IsPrinting; // true to print, false to display on screen.
|
||||||
|
wxPoint m_Offset; // general draw offset
|
||||||
|
#ifndef USE_WX_ZOOM
|
||||||
|
double m_Scale; // Draw scaling factor
|
||||||
|
#endif
|
||||||
|
PAD_DRAWINFO( );
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class D_PAD : public BOARD_CONNECTED_ITEM
|
class D_PAD : public BOARD_CONNECTED_ITEM
|
||||||
{
|
{
|
||||||
|
@ -210,6 +232,22 @@ public:
|
||||||
|
|
||||||
void Draw3D( Pcb3D_GLCanvas* glcanvas );
|
void Draw3D( Pcb3D_GLCanvas* glcanvas );
|
||||||
|
|
||||||
|
/** function DrawShape
|
||||||
|
* basic function to draw a pad.
|
||||||
|
* used by Draw after calculation of parameters (color, ) final orientation ...
|
||||||
|
*/
|
||||||
|
void DrawShape( EDA_Rect* aClipBox, wxDC* aDC, PAD_DRAWINFO& aDrawInfo );
|
||||||
|
|
||||||
|
/** function BuildPadPolygon
|
||||||
|
* Has meaning only for polygonal pads (trapeziod and rectangular)
|
||||||
|
* Build the Corner list of the polygonal shape,
|
||||||
|
* depending on shape, extra size (clearance ...) and orientation
|
||||||
|
* @param aCoord[4] = a buffer to fill.
|
||||||
|
* @param aInflateValue = wxSize: the clearance or margin value. value > 0: inflate, < 0 deflate
|
||||||
|
* @param aRotation = full rotation of the polygon
|
||||||
|
*/
|
||||||
|
void BuildPadPolygon( wxPoint aCoord[4], wxSize aInflateValue, int aRotation );
|
||||||
|
|
||||||
// others
|
// others
|
||||||
void SetPadName( const wxString& name ); // Change pad name
|
void SetPadName( const wxString& name ); // Change pad name
|
||||||
wxString ReturnStringPadName(); // Return pad name as string in a wxString
|
wxString ReturnStringPadName(); // Return pad name as string in a wxString
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
/*******************************/
|
/*******************************/
|
||||||
|
|
||||||
#include "fctsys.h"
|
#include "fctsys.h"
|
||||||
|
|
||||||
#include "gr_basic.h"
|
#include "gr_basic.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "trigo.h"
|
#include "trigo.h"
|
||||||
|
@ -20,27 +21,38 @@
|
||||||
* After testing this feature,I am not sure this is a good idea
|
* After testing this feature,I am not sure this is a good idea
|
||||||
* but the code is left here.
|
* but the code is left here.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//#define SHOW_PADMASK_REAL_SIZE_AND_COLOR
|
//#define SHOW_PADMASK_REAL_SIZE_AND_COLOR
|
||||||
|
|
||||||
/** Draw a pad:
|
|
||||||
* @param DC = device context
|
// Helper class to store parameters used to draw a pad
|
||||||
* @param offset = draw offset
|
PAD_DRAWINFO::PAD_DRAWINFO( )
|
||||||
* @param draw_mode = mode: GR_OR, GR_XOR, GR_AND...
|
{
|
||||||
*/
|
m_DrawPanel = NULL;
|
||||||
void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode,
|
m_DrawMode = 0;
|
||||||
const wxPoint& offset )
|
m_Color = BLACK;
|
||||||
|
m_HoleColor = BLACK; // could be DARKGRAY;
|
||||||
|
m_PadClearance = 0;
|
||||||
|
m_Display_padnum = true;
|
||||||
|
m_Display_netname = true;
|
||||||
|
m_ShowPadFilled = true;
|
||||||
|
m_ShowNCMark = true;
|
||||||
|
#ifndef USE_WX_ZOOM
|
||||||
|
m_Scale = 1.0;
|
||||||
|
#endif
|
||||||
|
m_IsPrinting = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Draw a pad:
|
||||||
|
* @param aDC = device context
|
||||||
|
* @param aDraw_mode = mode: GR_OR, GR_XOR, GR_AND...
|
||||||
|
* @param aOffset = draw offset
|
||||||
|
*/
|
||||||
|
void D_PAD::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, int aDraw_mode,
|
||||||
|
const wxPoint& aOffset )
|
||||||
{
|
{
|
||||||
int ii;
|
|
||||||
int color = 0;
|
int color = 0;
|
||||||
int ux0, uy0,
|
|
||||||
dx, dx0, dy, dy0,
|
|
||||||
rotdx,
|
|
||||||
delta_cx, delta_cy,
|
|
||||||
xc, yc;
|
|
||||||
int angle;
|
|
||||||
wxPoint coord[4];
|
|
||||||
int fillpad = 0;
|
|
||||||
wxPoint shape_pos;
|
|
||||||
wxSize mask_margin; // margin (clearance) used for some non copper layers
|
wxSize mask_margin; // margin (clearance) used for some non copper layers
|
||||||
int showActualMaskSize = 0; /* == layer number if the actual pad size on mask layer can be displayed
|
int showActualMaskSize = 0; /* == layer number if the actual pad size on mask layer can be displayed
|
||||||
* i.e. if only one layer is shown for this pad
|
* i.e. if only one layer is shown for this pad
|
||||||
|
@ -50,6 +62,10 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode,
|
||||||
if( m_Flags & DO_NOT_DRAW )
|
if( m_Flags & DO_NOT_DRAW )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
PAD_DRAWINFO drawInfo;
|
||||||
|
|
||||||
|
drawInfo.m_Offset = aOffset;
|
||||||
|
|
||||||
/* We can show/hide pads from the layer manager.
|
/* We can show/hide pads from the layer manager.
|
||||||
* options are show/hide pads on front and/or back side of the board
|
* options are show/hide pads on front and/or back side of the board
|
||||||
* For through pads, we hide them only if both sides are hidden.
|
* For through pads, we hide them only if both sides are hidden.
|
||||||
|
@ -90,14 +106,16 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
WinEDA_BasePcbFrame* frame = (WinEDA_BasePcbFrame*) panel->GetParent();
|
WinEDA_BasePcbFrame* frame = (WinEDA_BasePcbFrame*) aPanel->GetParent();
|
||||||
PCB_SCREEN* screen = frame->GetScreen();
|
PCB_SCREEN* screen = frame->GetScreen();
|
||||||
if( frame->m_DisplayPadFill == FILLED )
|
if( frame->m_DisplayPadFill == FILLED )
|
||||||
fillpad = 1;
|
drawInfo.m_ShowPadFilled = true;
|
||||||
|
else
|
||||||
|
drawInfo.m_ShowPadFilled = false;
|
||||||
|
|
||||||
#if defined(PCBNEW) || defined(__WXMAC__)
|
#if defined(PCBNEW) || defined(__WXMAC__)
|
||||||
if( m_Flags & IS_MOVED || !DisplayOpt.DisplayPadFill )
|
if( m_Flags & IS_MOVED || !DisplayOpt.DisplayPadFill )
|
||||||
fillpad = 0;
|
drawInfo.m_ShowPadFilled = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if( m_Masque_Layer & LAYER_FRONT )
|
if( m_Masque_Layer & LAYER_FRONT )
|
||||||
|
@ -285,9 +303,9 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if( draw_mode & GR_SURBRILL )
|
if( aDraw_mode & GR_SURBRILL )
|
||||||
{
|
{
|
||||||
if( draw_mode & GR_AND )
|
if( aDraw_mode & GR_AND )
|
||||||
color &= ~HIGHT_LIGHT_FLAG;
|
color &= ~HIGHT_LIGHT_FLAG;
|
||||||
else
|
else
|
||||||
color |= HIGHT_LIGHT_FLAG;
|
color |= HIGHT_LIGHT_FLAG;
|
||||||
|
@ -296,24 +314,20 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode,
|
||||||
if( color & HIGHT_LIGHT_FLAG )
|
if( color & HIGHT_LIGHT_FLAG )
|
||||||
color = ColorRefs[color & MASKCOLOR].m_LightColor;
|
color = ColorRefs[color & MASKCOLOR].m_LightColor;
|
||||||
|
|
||||||
GRSetDrawMode( DC, draw_mode ); /* mode de trace */
|
|
||||||
|
|
||||||
/* calcul du centre des pads en coordonnees Ecran : */
|
|
||||||
shape_pos = ReturnShapePos();
|
|
||||||
ux0 = shape_pos.x - offset.x;
|
|
||||||
uy0 = shape_pos.y - offset.y;
|
|
||||||
xc = ux0;
|
|
||||||
yc = uy0;
|
|
||||||
|
|
||||||
dx = dx0 = m_Size.x >> 1;
|
|
||||||
dy = dy0 = m_Size.y >> 1; /* demi dim dx et dy */
|
|
||||||
|
|
||||||
angle = m_Orient;
|
|
||||||
|
|
||||||
bool DisplayIsol = DisplayOpt.DisplayPadIsol;
|
bool DisplayIsol = DisplayOpt.DisplayPadIsol;
|
||||||
if( ( m_Masque_Layer & ALL_CU_LAYERS ) == 0 )
|
if( ( m_Masque_Layer & ALL_CU_LAYERS ) == 0 )
|
||||||
DisplayIsol = FALSE;
|
DisplayIsol = FALSE;
|
||||||
|
|
||||||
|
|
||||||
|
drawInfo.m_DrawMode = aDraw_mode;
|
||||||
|
drawInfo.m_Color = color;
|
||||||
|
drawInfo.m_DrawPanel = aPanel;
|
||||||
|
drawInfo.m_Mask_margin = mask_margin;
|
||||||
|
drawInfo.m_ShowNCMark = brd->IsElementVisible( PCB_VISIBLE( NO_CONNECTS_VISIBLE ) );
|
||||||
|
drawInfo.m_IsPrinting = screen->m_IsPrinting;
|
||||||
|
#ifndef USE_WX_ZOOM
|
||||||
|
drawInfo.m_Scale = (double)screen->Scale(1000) / 1000;
|
||||||
|
#endif
|
||||||
SetAlpha( &color, 170 );
|
SetAlpha( &color, 170 );
|
||||||
|
|
||||||
/* Get the pad clearance. This has a meaning only for Pcbnew.
|
/* Get the pad clearance. This has a meaning only for Pcbnew.
|
||||||
|
@ -321,126 +335,125 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode,
|
||||||
* there is no net classes so a call to GetClearance() is made only when
|
* there is no net classes so a call to GetClearance() is made only when
|
||||||
* needed (never needed in Cvpcb nor in Gerbview)
|
* needed (never needed in Cvpcb nor in Gerbview)
|
||||||
*/
|
*/
|
||||||
int padClearance = DisplayIsol ? GetClearance() : 0;
|
drawInfo.m_PadClearance = DisplayIsol ? GetClearance() : 0;
|
||||||
|
/* Draw the pad number */
|
||||||
|
if( frame && !frame->m_DisplayPadNum )
|
||||||
|
drawInfo.m_Display_padnum = false;
|
||||||
|
|
||||||
|
if( ( DisplayOpt.DisplayNetNamesMode == 0 )
|
||||||
|
|| ( DisplayOpt.DisplayNetNamesMode == 2 ) )
|
||||||
|
drawInfo.m_Display_netname = false;
|
||||||
|
|
||||||
|
// Display net names is restricted to pads that are on the active layer
|
||||||
|
// in cotranst mode displae
|
||||||
|
if( !IsOnLayer( screen->m_Active_Layer ) && DisplayOpt.ContrastModeDisplay )
|
||||||
|
drawInfo.m_Display_netname = false;
|
||||||
|
|
||||||
|
DrawShape( &aPanel->m_ClipBox, aDC, drawInfo );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** function DrawShape
|
||||||
|
* basic function to draw a pad.
|
||||||
|
* used by D_PAD::Draw after calculation of parameters (color, final orientation ...)
|
||||||
|
* this function can be called to draw a pad on a panel
|
||||||
|
* even if this panel is not a WinEDA_DrawPanel (for instance on a wxPanel inside the pad editor)
|
||||||
|
*/
|
||||||
|
void D_PAD::DrawShape( EDA_Rect* aClipBox, wxDC* aDC, PAD_DRAWINFO& aDrawInfo )
|
||||||
|
{
|
||||||
|
wxPoint coord[4];
|
||||||
|
int rotdx,
|
||||||
|
delta_cx, delta_cy;
|
||||||
|
int angle = m_Orient;
|
||||||
|
|
||||||
|
GRSetDrawMode(aDC, aDrawInfo.m_DrawMode );
|
||||||
|
|
||||||
|
// calculate pad shape position :
|
||||||
|
wxPoint shape_pos = ReturnShapePos() - aDrawInfo.m_Offset;
|
||||||
|
|
||||||
|
wxSize halfsize = m_Size;
|
||||||
|
halfsize.x >>= 1;
|
||||||
|
halfsize.y >>= 1;
|
||||||
switch( GetShape() )
|
switch( GetShape() )
|
||||||
{
|
{
|
||||||
case PAD_CIRCLE:
|
case PAD_CIRCLE:
|
||||||
if( fillpad )
|
if( aDrawInfo.m_ShowPadFilled )
|
||||||
GRFilledCircle( &panel->m_ClipBox, DC, xc, yc,
|
GRFilledCircle( aClipBox, aDC, shape_pos.x, shape_pos.y,
|
||||||
dx + mask_margin.x, 0, color, color );
|
halfsize.x + aDrawInfo.m_Mask_margin.x, 0,
|
||||||
|
aDrawInfo.m_Color, aDrawInfo.m_Color );
|
||||||
else
|
else
|
||||||
GRCircle( &panel->m_ClipBox, DC, xc, yc, dx + mask_margin.x,
|
GRCircle( aClipBox, aDC, shape_pos.x, shape_pos.y,
|
||||||
m_PadSketchModePenSize, color );
|
halfsize.x + aDrawInfo.m_Mask_margin.x,
|
||||||
|
m_PadSketchModePenSize, aDrawInfo.m_Color );
|
||||||
|
|
||||||
if( DisplayIsol )
|
if( aDrawInfo.m_PadClearance )
|
||||||
{
|
{
|
||||||
GRCircle( &panel->m_ClipBox,
|
GRCircle( aClipBox,
|
||||||
DC,
|
aDC, shape_pos.x, shape_pos.y,
|
||||||
xc,
|
halfsize.x + aDrawInfo.m_PadClearance,
|
||||||
yc,
|
|
||||||
dx + padClearance,
|
|
||||||
0,
|
0,
|
||||||
color );
|
aDrawInfo.m_Color );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PAD_OVAL:
|
case PAD_OVAL:
|
||||||
if( dx > dy ) /* horizontal */
|
if( halfsize.x > halfsize.y ) /* horizontal */
|
||||||
{
|
{
|
||||||
delta_cx = dx - dy;
|
delta_cx = halfsize.x - halfsize.y;
|
||||||
delta_cy = 0;
|
delta_cy = 0;
|
||||||
rotdx = m_Size.y + ( mask_margin.y * 2 );
|
rotdx = m_Size.y + ( aDrawInfo.m_Mask_margin.y * 2 );
|
||||||
}
|
}
|
||||||
else /* vertical */
|
else /* vertical */
|
||||||
{
|
{
|
||||||
delta_cx = 0;
|
delta_cx = 0;
|
||||||
delta_cy = dy - dx;
|
delta_cy = halfsize.y - halfsize.x;
|
||||||
rotdx = m_Size.x + ( mask_margin.x * 2 );
|
rotdx = m_Size.x + ( aDrawInfo.m_Mask_margin.x * 2 );
|
||||||
}
|
}
|
||||||
RotatePoint( &delta_cx, &delta_cy, angle );
|
RotatePoint( &delta_cx, &delta_cy, angle );
|
||||||
|
|
||||||
if( fillpad )
|
if( aDrawInfo.m_ShowPadFilled )
|
||||||
{
|
{
|
||||||
GRFillCSegm( &panel->m_ClipBox, DC,
|
GRFillCSegm( aClipBox, aDC,
|
||||||
ux0 + delta_cx, uy0 + delta_cy,
|
shape_pos.x + delta_cx, shape_pos.y + delta_cy,
|
||||||
ux0 - delta_cx, uy0 - delta_cy,
|
shape_pos.x - delta_cx, shape_pos.y - delta_cy,
|
||||||
rotdx, color );
|
rotdx, aDrawInfo.m_Color );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GRCSegm( &panel->m_ClipBox, DC,
|
GRCSegm( aClipBox, aDC,
|
||||||
ux0 + delta_cx, uy0 + delta_cy,
|
shape_pos.x + delta_cx, shape_pos.y + delta_cy,
|
||||||
ux0 - delta_cx, uy0 - delta_cy,
|
shape_pos.x - delta_cx, shape_pos.y - delta_cy,
|
||||||
rotdx, m_PadSketchModePenSize, color );
|
rotdx, m_PadSketchModePenSize, aDrawInfo.m_Color );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Draw the isolation line. */
|
/* Draw the isolation line. */
|
||||||
if( DisplayIsol )
|
if( aDrawInfo.m_PadClearance )
|
||||||
{
|
{
|
||||||
rotdx = rotdx + 2 * padClearance;
|
rotdx = rotdx + 2 * aDrawInfo.m_PadClearance;
|
||||||
|
|
||||||
GRCSegm( &panel->m_ClipBox, DC, ux0 + delta_cx, uy0 + delta_cy,
|
GRCSegm( aClipBox, aDC, shape_pos.x + delta_cx, shape_pos.y + delta_cy,
|
||||||
ux0 - delta_cx, uy0 - delta_cy,
|
shape_pos.x - delta_cx, shape_pos.y - delta_cy,
|
||||||
rotdx, color );
|
rotdx, aDrawInfo.m_Color );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PAD_RECT:
|
case PAD_RECT:
|
||||||
case PAD_TRAPEZOID:
|
case PAD_TRAPEZOID:
|
||||||
|
BuildPadPolygon( coord, aDrawInfo.m_Mask_margin, angle );
|
||||||
|
for( int ii = 0; ii < 4; ii++ )
|
||||||
|
coord[ii] += shape_pos;
|
||||||
|
|
||||||
|
GRClosedPoly( aClipBox, aDC, 4, coord, aDrawInfo.m_ShowPadFilled,
|
||||||
|
aDrawInfo.m_ShowPadFilled ? 0 : m_PadSketchModePenSize,
|
||||||
|
aDrawInfo.m_Color, aDrawInfo.m_Color );
|
||||||
|
|
||||||
|
if( aDrawInfo.m_PadClearance )
|
||||||
{
|
{
|
||||||
int ddx, ddy;
|
BuildPadPolygon( coord, wxSize(aDrawInfo.m_PadClearance,aDrawInfo.m_PadClearance), angle );
|
||||||
ddx = ( m_DeltaSize.x >> 1 );
|
for( int ii = 0; ii < 4; ii++ )
|
||||||
ddy = ( m_DeltaSize.y >> 1 );
|
coord[ii] += shape_pos;
|
||||||
|
|
||||||
coord[0].x = -dx - ddy - mask_margin.x; // lower left
|
GRClosedPoly( aClipBox, aDC, 4, coord, 0, aDrawInfo.m_Color, aDrawInfo.m_Color );
|
||||||
coord[0].y = +dy + ddx + mask_margin.y;
|
|
||||||
|
|
||||||
coord[1].x = -dx + ddy - mask_margin.x; // upper left
|
|
||||||
coord[1].y = -dy - ddx - mask_margin.y;
|
|
||||||
|
|
||||||
coord[2].x = +dx - ddy + mask_margin.x; // upper right
|
|
||||||
coord[2].y = -dy + ddx - mask_margin.y;
|
|
||||||
|
|
||||||
coord[3].x = +dx + ddy + mask_margin.x; // lower right
|
|
||||||
coord[3].y = +dy - ddx + mask_margin.y;
|
|
||||||
|
|
||||||
for( ii = 0; ii < 4; ii++ )
|
|
||||||
{
|
|
||||||
RotatePoint( &coord[ii].x, &coord[ii].y, angle );
|
|
||||||
coord[ii].x = coord[ii].x + ux0;
|
|
||||||
coord[ii].y = coord[ii].y + uy0;
|
|
||||||
}
|
|
||||||
|
|
||||||
GRClosedPoly( &panel->m_ClipBox, DC, 4, coord, fillpad,
|
|
||||||
fillpad ? 0 : m_PadSketchModePenSize, color, color );
|
|
||||||
|
|
||||||
if( DisplayIsol )
|
|
||||||
{
|
|
||||||
dx += padClearance;
|
|
||||||
dy += padClearance;
|
|
||||||
|
|
||||||
coord[0].x = -dx - ddy;
|
|
||||||
coord[0].y = dy + ddx;
|
|
||||||
|
|
||||||
coord[1].x = -dx + ddy;
|
|
||||||
coord[1].y = -dy - ddx;
|
|
||||||
|
|
||||||
coord[2].x = dx - ddy;
|
|
||||||
coord[2].y = -dy + ddx;
|
|
||||||
|
|
||||||
coord[3].x = dx + ddy;
|
|
||||||
coord[3].y = dy - ddx;
|
|
||||||
|
|
||||||
for( ii = 0; ii < 4; ii++ )
|
|
||||||
{
|
|
||||||
RotatePoint( &coord[ii].x, &coord[ii].y, angle );
|
|
||||||
coord[ii].x = coord[ii].x + ux0;
|
|
||||||
coord[ii].y = coord[ii].y + uy0;
|
|
||||||
}
|
|
||||||
|
|
||||||
GRClosedPoly( &panel->m_ClipBox, DC, 4, coord, 0, color, color );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -450,26 +463,23 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Draw the pad hole */
|
/* Draw the pad hole */
|
||||||
int cx0 = m_Pos.x - offset.x;
|
wxPoint holepos = m_Pos - aDrawInfo.m_Offset;
|
||||||
int cy0 = m_Pos.y - offset.y;
|
|
||||||
int hole = m_Drill.x >> 1;
|
int hole = m_Drill.x >> 1;
|
||||||
|
|
||||||
if( fillpad && hole )
|
if( aDrawInfo.m_ShowPadFilled && hole )
|
||||||
{
|
{
|
||||||
bool blackpenstate = false;
|
bool blackpenstate = false;
|
||||||
if( screen->m_IsPrinting )
|
if( aDrawInfo.m_IsPrinting )
|
||||||
{
|
{
|
||||||
blackpenstate = GetGRForceBlackPenState();
|
blackpenstate = GetGRForceBlackPenState();
|
||||||
GRForceBlackPen( false );
|
GRForceBlackPen( false );
|
||||||
color = g_DrawBgColor;
|
aDrawInfo.m_HoleColor = g_DrawBgColor;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
color = BLACK; // or DARKGRAY;
|
|
||||||
|
|
||||||
if( draw_mode != GR_XOR )
|
if( aDrawInfo.m_DrawMode != GR_XOR )
|
||||||
GRSetDrawMode( DC, GR_COPY );
|
GRSetDrawMode( aDC, GR_COPY );
|
||||||
else
|
else
|
||||||
GRSetDrawMode( DC, GR_XOR );
|
GRSetDrawMode( aDC, GR_XOR );
|
||||||
|
|
||||||
switch( m_DrillShape )
|
switch( m_DrillShape )
|
||||||
{
|
{
|
||||||
|
@ -478,78 +488,71 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode,
|
||||||
#ifdef USE_WX_ZOOM
|
#ifdef USE_WX_ZOOM
|
||||||
if( DC->LogicalToDeviceXRel( hole ) > 1 )
|
if( DC->LogicalToDeviceXRel( hole ) > 1 )
|
||||||
#else
|
#else
|
||||||
if( screen->Scale( hole ) > 1 ) /* draw hole if its size is enough */
|
if( aDrawInfo.m_Scale*hole > 1 ) /* draw hole if its size is enough */
|
||||||
#endif
|
#endif
|
||||||
GRFilledCircle( &panel->m_ClipBox, DC, cx0, cy0, hole, 0,
|
|
||||||
color, color );
|
GRFilledCircle( aClipBox, aDC, holepos.x, holepos.y, hole, 0,
|
||||||
|
aDrawInfo.m_Color, aDrawInfo.m_HoleColor );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PAD_OVAL:
|
case PAD_OVAL:
|
||||||
dx = m_Drill.x >> 1;
|
halfsize.x = m_Drill.x >> 1;
|
||||||
dy = m_Drill.y >> 1;
|
halfsize.y = m_Drill.y >> 1;
|
||||||
|
|
||||||
if( m_Drill.x > m_Drill.y ) /* horizontal */
|
if( m_Drill.x > m_Drill.y ) /* horizontal */
|
||||||
{
|
{
|
||||||
delta_cx = dx - dy;
|
delta_cx = halfsize.x - halfsize.y;
|
||||||
delta_cy = 0;
|
delta_cy = 0;
|
||||||
rotdx = m_Drill.y;
|
rotdx = m_Drill.y;
|
||||||
}
|
}
|
||||||
else /* vertical */
|
else /* vertical */
|
||||||
{
|
{
|
||||||
delta_cx = 0;
|
delta_cx = 0;
|
||||||
delta_cy = dy - dx;
|
delta_cy = halfsize.y - halfsize.x;
|
||||||
rotdx = m_Drill.x;
|
rotdx = m_Drill.x;
|
||||||
}
|
}
|
||||||
RotatePoint( &delta_cx, &delta_cy, angle );
|
RotatePoint( &delta_cx, &delta_cy, angle );
|
||||||
|
|
||||||
GRFillCSegm( &panel->m_ClipBox, DC, cx0 + delta_cx, cy0 + delta_cy,
|
GRFillCSegm( aClipBox, aDC, holepos.x + delta_cx, holepos.y + delta_cy,
|
||||||
cx0 - delta_cx, cy0 - delta_cy, rotdx, color );
|
holepos.x - delta_cx, holepos.y - delta_cy, rotdx,
|
||||||
|
aDrawInfo.m_HoleColor );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( screen->m_IsPrinting )
|
if( aDrawInfo.m_IsPrinting )
|
||||||
GRForceBlackPen( blackpenstate );
|
GRForceBlackPen( blackpenstate );
|
||||||
}
|
}
|
||||||
|
|
||||||
GRSetDrawMode( DC, draw_mode );
|
GRSetDrawMode( aDC, aDrawInfo.m_DrawMode );
|
||||||
|
|
||||||
/* Draw "No connect" ( / or \ or cross X ) if necessary. : */
|
/* Draw "No connect" ( / or \ or cross X ) if necessary. : */
|
||||||
if( m_Netname.IsEmpty() && brd->IsElementVisible( PCB_VISIBLE(NO_CONNECTS_VISIBLE) ) )
|
if( m_Netname.IsEmpty() && aDrawInfo.m_ShowNCMark )
|
||||||
{
|
{
|
||||||
dx0 = MIN( dx0, dy0 );
|
int dx0 = MIN( halfsize.x, halfsize.y );
|
||||||
int nc_color = BLUE;
|
int nc_color = BLUE;
|
||||||
|
|
||||||
if( m_Masque_Layer & LAYER_FRONT ) /* Draw \ */
|
if( m_Masque_Layer & LAYER_FRONT ) /* Draw \ */
|
||||||
GRLine( &panel->m_ClipBox, DC, cx0 - dx0, cy0 - dx0,
|
GRLine( aClipBox, aDC, holepos.x - dx0, holepos.y - dx0,
|
||||||
cx0 + dx0, cy0 + dx0, 0, nc_color );
|
holepos.x + dx0, holepos.y + dx0, 0, nc_color );
|
||||||
|
|
||||||
if( m_Masque_Layer & LAYER_BACK ) /* Draw / */
|
if( m_Masque_Layer & LAYER_BACK ) /* Draw / */
|
||||||
GRLine( &panel->m_ClipBox, DC, cx0 + dx0, cy0 - dx0,
|
GRLine( aClipBox, aDC, holepos.x + dx0, holepos.y - dx0,
|
||||||
cx0 - dx0, cy0 + dx0, 0, nc_color );
|
holepos.x - dx0, holepos.y + dx0, 0, nc_color );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Draw the pad number */
|
/* Draw the pad number */
|
||||||
bool display_padnum = true;
|
if( !aDrawInfo.m_Display_padnum && !aDrawInfo.m_Display_netname )
|
||||||
if( frame && !frame->m_DisplayPadNum )
|
|
||||||
display_padnum = false;
|
|
||||||
|
|
||||||
bool display_netname = true;
|
|
||||||
if( ( DisplayOpt.DisplayNetNamesMode == 0 )
|
|
||||||
|| ( DisplayOpt.DisplayNetNamesMode == 2 ) )
|
|
||||||
display_netname = false;
|
|
||||||
|
|
||||||
if( !display_padnum && !display_netname )
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wxPoint tpos0 = wxPoint( ux0, uy0 ); // Position of the centre of text
|
wxPoint tpos0 = shape_pos; // Position of the centre of text
|
||||||
wxPoint tpos = tpos0;
|
wxPoint tpos = tpos0;
|
||||||
wxSize AreaSize; // size of text area, normalized to
|
wxSize AreaSize; // size of text area, normalized to
|
||||||
// AreaSize.y < AreaSize.x
|
// AreaSize.y < AreaSize.x
|
||||||
int shortname_len = m_ShortNetname.Len();
|
int shortname_len = m_ShortNetname.Len();
|
||||||
if( !display_netname )
|
if( !aDrawInfo.m_Display_netname )
|
||||||
shortname_len = 0;
|
shortname_len = 0;
|
||||||
if( GetShape() == PAD_CIRCLE )
|
if( GetShape() == PAD_CIRCLE )
|
||||||
angle = 0;
|
angle = 0;
|
||||||
|
@ -572,7 +575,7 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode,
|
||||||
|
|
||||||
// Calculate the position of text, that is the middle point of the upper
|
// Calculate the position of text, that is the middle point of the upper
|
||||||
// area of the pad
|
// area of the pad
|
||||||
RotatePoint( &tpos, wxPoint( ux0, uy0 ), angle );
|
RotatePoint( &tpos, shape_pos, angle );
|
||||||
|
|
||||||
/* Draw text with an angle between -90 deg and + 90 deg */
|
/* Draw text with an angle between -90 deg and + 90 deg */
|
||||||
int t_angle = angle;
|
int t_angle = angle;
|
||||||
|
@ -586,7 +589,7 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode,
|
||||||
wxString buffer;
|
wxString buffer;
|
||||||
|
|
||||||
int tsize;
|
int tsize;
|
||||||
if( display_padnum )
|
if( aDrawInfo.m_Display_padnum )
|
||||||
{
|
{
|
||||||
ReturnStringPadName( buffer );
|
ReturnStringPadName( buffer );
|
||||||
int numpad_len = buffer.Len();
|
int numpad_len = buffer.Len();
|
||||||
|
@ -598,14 +601,12 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode,
|
||||||
#ifdef USE_WX_ZOOM
|
#ifdef USE_WX_ZOOM
|
||||||
if( DC->LogicalToDeviceXRel( tsize ) >= CHAR_SIZE_MIN ) // Not drawable when size too small.
|
if( DC->LogicalToDeviceXRel( tsize ) >= CHAR_SIZE_MIN ) // Not drawable when size too small.
|
||||||
#else
|
#else
|
||||||
if( screen->Scale( tsize ) >= CHAR_SIZE_MIN ) // Not drawable when size too small.
|
if( aDrawInfo.m_Scale*tsize >= CHAR_SIZE_MIN ) // Not drawable when size too small.
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
tsize = (int) ( tsize * 0.8 ); // reserve room for
|
// tsize reserve room for marges and segments thickness
|
||||||
// marges and segments
|
tsize = (int) ( tsize * 0.8 );
|
||||||
// thickness
|
DrawGraphicText( aDrawInfo.m_DrawPanel, aDC, tpos, WHITE, buffer, t_angle,
|
||||||
|
|
||||||
DrawGraphicText( panel, DC, tpos, WHITE, buffer, t_angle,
|
|
||||||
wxSize( tsize, tsize ), GR_TEXT_HJUSTIFY_CENTER,
|
wxSize( tsize, tsize ), GR_TEXT_HJUSTIFY_CENTER,
|
||||||
GR_TEXT_VJUSTIFY_CENTER, tsize / 7, false, false,
|
GR_TEXT_VJUSTIFY_CENTER, tsize / 7, false, false,
|
||||||
false );
|
false );
|
||||||
|
@ -622,22 +623,138 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode,
|
||||||
#ifdef USE_WX_ZOOM
|
#ifdef USE_WX_ZOOM
|
||||||
if( DC->LogicalToDeviceXRel( tsize ) >= CHAR_SIZE_MIN ) // Not drawable in size too small.
|
if( DC->LogicalToDeviceXRel( tsize ) >= CHAR_SIZE_MIN ) // Not drawable in size too small.
|
||||||
#else
|
#else
|
||||||
if( screen->Scale( tsize ) >= CHAR_SIZE_MIN ) // Not drawable in size too small.
|
if( aDrawInfo.m_Scale*tsize >= CHAR_SIZE_MIN ) // Not drawable in size too small.
|
||||||
#endif
|
#endif
|
||||||
{
|
|
||||||
if( !( !IsOnLayer( screen->m_Active_Layer )
|
|
||||||
&& DisplayOpt.ContrastModeDisplay ) )
|
|
||||||
{
|
{
|
||||||
tpos = tpos0;
|
tpos = tpos0;
|
||||||
if( display_padnum )
|
if( aDrawInfo.m_Display_padnum )
|
||||||
tpos.y += AreaSize.y / 2;
|
tpos.y += AreaSize.y / 2;
|
||||||
RotatePoint( &tpos, wxPoint( ux0, uy0 ), angle );
|
RotatePoint( &tpos, shape_pos, angle );
|
||||||
|
|
||||||
tsize = (int) ( tsize * 0.8 ); // reserve room for marges and
|
// tsize reserve room for marges and segments thickness
|
||||||
// segments thickness
|
tsize = (int) ( tsize * 0.8 );
|
||||||
DrawGraphicText( panel, DC, tpos, WHITE, m_ShortNetname, t_angle,
|
DrawGraphicText( aDrawInfo.m_DrawPanel, aDC, tpos, WHITE, m_ShortNetname, t_angle,
|
||||||
wxSize( tsize, tsize ), GR_TEXT_HJUSTIFY_CENTER,
|
wxSize( tsize, tsize ), GR_TEXT_HJUSTIFY_CENTER,
|
||||||
GR_TEXT_VJUSTIFY_CENTER, tsize / 7, false, false );
|
GR_TEXT_VJUSTIFY_CENTER, tsize / 7, false, false );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** function BuildPadPolygon
|
||||||
|
* Has meaning only for polygonal pads (trapeziod and rectangular)
|
||||||
|
* Build the Corner list of the polygonal shape,
|
||||||
|
* depending on shape, extra size (clearance ...) and orientation
|
||||||
|
* @param aCoord[4] = a buffer to fill.
|
||||||
|
* @param aInflateValue = wxSize: the clearance or margin value. value > 0: inflate, < 0 deflate
|
||||||
|
* @param aRotation = full rotation of the polygon, usually m_Orient
|
||||||
|
*/
|
||||||
|
void D_PAD::BuildPadPolygon( wxPoint aCoord[4], wxSize aInflateValue, int aRotation )
|
||||||
|
{
|
||||||
|
if( (GetShape() != PAD_RECT) && (GetShape() != PAD_TRAPEZOID) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
wxSize delta;
|
||||||
|
wxSize halfsize;
|
||||||
|
|
||||||
|
halfsize.x = m_Size.x >> 1;
|
||||||
|
halfsize.y = m_Size.y >> 1;
|
||||||
|
|
||||||
|
/* For rectangular shapes, inflate is easy
|
||||||
|
* Also if inflate values for X and Y directions are different
|
||||||
|
* the simplified inflate calculation is used for PAD_TRAPEZOID
|
||||||
|
* due to the complexity of offsetting a polygon with different values in X and Y
|
||||||
|
* (I even no be sure this has meaning)
|
||||||
|
*/
|
||||||
|
if( GetShape() == PAD_RECT )
|
||||||
|
{
|
||||||
|
halfsize += aInflateValue;
|
||||||
|
// Verify if do not deflate more than than size
|
||||||
|
// Only possible for inflate negative values.
|
||||||
|
if( halfsize.x < 0 )
|
||||||
|
halfsize.x = 0;
|
||||||
|
if( halfsize.y < 0 )
|
||||||
|
halfsize.y = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delta.x = ( m_DeltaSize.x >> 1 );
|
||||||
|
delta.y = ( m_DeltaSize.y >> 1 );
|
||||||
|
// be sure delta values are not to large
|
||||||
|
if( (delta.x < 0) && (delta.x <= -halfsize.y))
|
||||||
|
delta.x = -halfsize.y+1;
|
||||||
|
if( (delta.x > 0) && (delta.x >= halfsize.y))
|
||||||
|
delta.x = halfsize.y-1;
|
||||||
|
if( (delta.y < 0) && (delta.y <= -halfsize.x))
|
||||||
|
delta.y = -halfsize.x+1;
|
||||||
|
if( (delta.y > 0) && (delta.y >= halfsize.x))
|
||||||
|
delta.y = halfsize.x-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build the basic rectangular or trapezoid shape
|
||||||
|
aCoord[0].x = -halfsize.x - delta.y; // lower left
|
||||||
|
aCoord[0].y = +halfsize.y + delta.x;
|
||||||
|
|
||||||
|
aCoord[1].x = -halfsize.x + delta.y; // upper left
|
||||||
|
aCoord[1].y = -halfsize.y - delta.x;
|
||||||
|
|
||||||
|
aCoord[2].x = +halfsize.x - delta.y; // upper right
|
||||||
|
aCoord[2].y = -halfsize.y + delta.x;
|
||||||
|
|
||||||
|
aCoord[3].x = +halfsize.x + delta.y; // lower right
|
||||||
|
aCoord[3].y = +halfsize.y - delta.x;
|
||||||
|
|
||||||
|
// Offsetting the trapezoid shape id needed
|
||||||
|
// It is assumed delta.x or/and delta.y == 0
|
||||||
|
if( GetShape() == PAD_TRAPEZOID && (aInflateValue.x != 0 || aInflateValue.y != 0) )
|
||||||
|
{
|
||||||
|
double angle;
|
||||||
|
wxSize corr;
|
||||||
|
if( delta.y ) // lower and upper segment is horizontal
|
||||||
|
{
|
||||||
|
// Calculate angle of left (or right) segment with vertical axis
|
||||||
|
angle = atan2( delta.y, halfsize.y );
|
||||||
|
|
||||||
|
// left and right sides are moved by aInflateValue.x in their perpendicular direction
|
||||||
|
// We must calculate the corresponding displacement on the horizontal axis
|
||||||
|
// that is delta.x +- corr.x depending on the corner
|
||||||
|
corr.x = wxRound(tan(angle) * aInflateValue.x);
|
||||||
|
delta.x = wxRound( aInflateValue.x/cos(angle));
|
||||||
|
// Horizontal sides are moved up and down by aInflateValue.y
|
||||||
|
delta.y = aInflateValue.y;
|
||||||
|
// corr.y = 0 by the constructor
|
||||||
|
}
|
||||||
|
else if( delta.x ) // left and right segment is vertical
|
||||||
|
{
|
||||||
|
// Calculate angle of lower (or upper) segment with horizontal axis
|
||||||
|
angle = atan2( delta.x, halfsize.x);
|
||||||
|
// lower and upper sides are moved by aInflateValue.x in their perpendicular direction
|
||||||
|
// We must calculate the corresponding displacement on the vertical axis
|
||||||
|
// that is delta.y +- corr.y depending on the corner
|
||||||
|
corr.y = wxRound(tan(angle) * aInflateValue.y);
|
||||||
|
delta.y = wxRound( aInflateValue.y/cos(angle));
|
||||||
|
// Vertical sides are moved left and right by aInflateValue.x
|
||||||
|
delta.x = aInflateValue.x;
|
||||||
|
// corr.x = 0 by the constructor
|
||||||
|
}
|
||||||
|
else // the trapezoid is a rectangle
|
||||||
|
{
|
||||||
|
delta = aInflateValue; // Do nothing.
|
||||||
|
}
|
||||||
|
aCoord[0].x += -delta.x - corr.x; // lower left
|
||||||
|
aCoord[0].y += delta.y + corr.y;
|
||||||
|
|
||||||
|
aCoord[1].x += -delta.x + corr.x; // upper left
|
||||||
|
aCoord[1].y += -delta.y - corr.y;
|
||||||
|
|
||||||
|
aCoord[2].x += delta.x - corr.x; // upper right
|
||||||
|
aCoord[2].y += -delta.y + corr.y;
|
||||||
|
|
||||||
|
aCoord[3].x += delta.x + corr.x; // lower right
|
||||||
|
aCoord[3].y += delta.y - corr.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( aRotation )
|
||||||
|
{
|
||||||
|
for( int ii = 0; ii < 4; ii++ )
|
||||||
|
RotatePoint( &aCoord[ii], aRotation );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,7 +58,7 @@ DIALOG_GENDRILL_BASE::DIALOG_GENDRILL_BASE( wxWindow* parent, wxWindowID id, con
|
||||||
int m_Choice_Drill_MapNChoices = sizeof( m_Choice_Drill_MapChoices ) / sizeof( wxString );
|
int m_Choice_Drill_MapNChoices = sizeof( m_Choice_Drill_MapChoices ) / sizeof( wxString );
|
||||||
m_Choice_Drill_Map = new wxRadioBox( this, wxID_ANY, _("Drill Sheet:"), wxDefaultPosition, wxDefaultSize, m_Choice_Drill_MapNChoices, m_Choice_Drill_MapChoices, 1, wxRA_SPECIFY_COLS );
|
m_Choice_Drill_Map = new wxRadioBox( this, wxID_ANY, _("Drill Sheet:"), wxDefaultPosition, wxDefaultSize, m_Choice_Drill_MapNChoices, m_Choice_Drill_MapChoices, 1, wxRA_SPECIFY_COLS );
|
||||||
m_Choice_Drill_Map->SetSelection( 0 );
|
m_Choice_Drill_Map->SetSelection( 0 );
|
||||||
m_Choice_Drill_Map->SetToolTip( _("Creates a drill map in PS, HPGL or others formats") );
|
m_Choice_Drill_Map->SetToolTip( _("Creates a drill map in PS, HPGL or other formats") );
|
||||||
|
|
||||||
bMiddleBoxSizer->Add( m_Choice_Drill_Map, 0, wxALL|wxEXPAND, 5 );
|
bMiddleBoxSizer->Add( m_Choice_Drill_Map, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
|
@ -335,7 +335,7 @@
|
||||||
<property name="size"></property>
|
<property name="size"></property>
|
||||||
<property name="style">wxRA_SPECIFY_COLS</property>
|
<property name="style">wxRA_SPECIFY_COLS</property>
|
||||||
<property name="subclass"></property>
|
<property name="subclass"></property>
|
||||||
<property name="tooltip">Creates a drill map in PS, HPGL or others formats</property>
|
<property name="tooltip">Creates a drill map in PS, HPGL or other formats</property>
|
||||||
<property name="window_extra_style"></property>
|
<property name="window_extra_style"></property>
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
|
|
|
@ -9,13 +9,10 @@
|
||||||
#include "confirm.h"
|
#include "confirm.h"
|
||||||
#include "pcbnew.h"
|
#include "pcbnew.h"
|
||||||
#include "trigo.h"
|
#include "trigo.h"
|
||||||
|
#include <wx/dcbuffer.h>
|
||||||
/* Local variables */
|
|
||||||
static wxString Current_PadNetName;
|
|
||||||
|
|
||||||
|
|
||||||
#define NBSHAPES 4
|
#define NBSHAPES 4
|
||||||
int CodeShape[NBSHAPES] = /* Pad shapes. */
|
int CodeShape[NBSHAPES] = // list of pad shapes.
|
||||||
{
|
{
|
||||||
PAD_CIRCLE, PAD_OVAL, PAD_RECT, PAD_TRAPEZOID
|
PAD_CIRCLE, PAD_OVAL, PAD_RECT, PAD_TRAPEZOID
|
||||||
};
|
};
|
||||||
|
@ -27,7 +24,7 @@ int CodeType[NBTYPES] =
|
||||||
PAD_STANDARD, PAD_SMD, PAD_CONN, PAD_HOLE_NOT_PLATED
|
PAD_STANDARD, PAD_SMD, PAD_CONN, PAD_HOLE_NOT_PLATED
|
||||||
};
|
};
|
||||||
|
|
||||||
// Default mask layers for pads according to the pad type
|
// Default mask layers setup for pads according to the pad type
|
||||||
static long Std_Pad_Layers[NBTYPES] =
|
static long Std_Pad_Layers[NBTYPES] =
|
||||||
{
|
{
|
||||||
// PAD_STANDARD:
|
// PAD_STANDARD:
|
||||||
|
@ -46,54 +43,135 @@ static long Std_Pad_Layers[NBTYPES] =
|
||||||
|
|
||||||
#include "dialog_pad_properties_base.h"
|
#include "dialog_pad_properties_base.h"
|
||||||
|
|
||||||
|
extern int ChangeSideMaskLayer( int masque );
|
||||||
|
|
||||||
/********************************************************************/
|
|
||||||
/* class DIALOG_PAD_PROPERTIES, derived from DIALOG_PAD_PROPERTIES_BASE, */
|
/**
|
||||||
/* created by wxFormBuilder */
|
* class DIALOG_PAD_PROPERTIES, derived from DIALOG_PAD_PROPERTIES_BASE,
|
||||||
/********************************************************************/
|
* created by wxFormBuilder
|
||||||
|
*/
|
||||||
class DIALOG_PAD_PROPERTIES : public DIALOG_PAD_PROPERTIES_BASE
|
class DIALOG_PAD_PROPERTIES : public DIALOG_PAD_PROPERTIES_BASE
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
WinEDA_BasePcbFrame* m_Parent;
|
WinEDA_BasePcbFrame* m_Parent;
|
||||||
D_PAD* m_CurrentPad;
|
D_PAD* m_CurrentPad; // Pad currently edited
|
||||||
|
D_PAD* m_dummyPad; // a working copy used to show changes
|
||||||
BOARD* m_Board;
|
BOARD* m_Board;
|
||||||
|
bool m_isFlipped; /* true if the parent footprint (therefore pads) is flipped (mirrored)
|
||||||
|
* in this case, some Y coordinates values must be negated
|
||||||
|
*/
|
||||||
|
bool m_canUpdate;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DIALOG_PAD_PROPERTIES( WinEDA_BasePcbFrame* parent, D_PAD* Pad );
|
DIALOG_PAD_PROPERTIES( WinEDA_BasePcbFrame* parent, D_PAD* Pad );
|
||||||
|
~DIALOG_PAD_PROPERTIES()
|
||||||
|
{
|
||||||
|
delete m_dummyPad;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void InitDialog( );
|
void initValues();
|
||||||
void OnPadShapeSelection( wxCommandEvent& event );
|
void OnPadShapeSelection( wxCommandEvent& event );
|
||||||
void OnDrillShapeSelected( wxCommandEvent& event );
|
void OnDrillShapeSelected( wxCommandEvent& event );
|
||||||
void PadOrientEvent( wxCommandEvent& event );
|
void PadOrientEvent( wxCommandEvent& event );
|
||||||
void PadTypeSelected( wxCommandEvent& event );
|
void PadTypeSelected( wxCommandEvent& event );
|
||||||
void PadPropertiesAccept( wxCommandEvent& event );
|
void PadPropertiesAccept( wxCommandEvent& event );
|
||||||
void SetPadLayersList( long layer_mask );
|
void SetPadLayersList( long layer_mask );
|
||||||
|
void OnSetLayer( wxCommandEvent& event );
|
||||||
void OnCancelButtonClick( wxCommandEvent& event );
|
void OnCancelButtonClick( wxCommandEvent& event );
|
||||||
|
void OnPaintShowPanel( wxPaintEvent& event );
|
||||||
|
bool TransfertDataToPad( D_PAD* aPad, bool aPromptOnError = false );
|
||||||
|
void OnValuesChanged( wxCommandEvent& event );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_PAD_PROPERTIES::OnPaintShowPanel( wxPaintEvent& event )
|
||||||
|
{
|
||||||
|
wxPaintDC dc( m_panelShowPad );
|
||||||
|
PAD_DRAWINFO drawInfo;
|
||||||
|
|
||||||
|
int color = 0;
|
||||||
|
|
||||||
|
if( m_dummyPad->m_Masque_Layer & LAYER_FRONT )
|
||||||
|
{
|
||||||
|
color = m_Board->GetVisibleElementColor( PAD_FR_VISIBLE );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( m_dummyPad->m_Masque_Layer & LAYER_BACK )
|
||||||
|
{
|
||||||
|
color |= m_Board->GetVisibleElementColor( PAD_BK_VISIBLE );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( color == 0 )
|
||||||
|
color = LIGHTGRAY;
|
||||||
|
|
||||||
|
drawInfo.m_Color = color;
|
||||||
|
drawInfo.m_HoleColor = DARKGRAY;
|
||||||
|
drawInfo.m_Offset = m_dummyPad->m_Pos;
|
||||||
|
drawInfo.m_Display_padnum = true;
|
||||||
|
drawInfo.m_Display_netname = true;
|
||||||
|
|
||||||
|
// Shows the local pad clearance
|
||||||
|
drawInfo.m_PadClearance = m_dummyPad->m_LocalClearance;
|
||||||
|
|
||||||
|
wxSize dc_size = dc.GetSize();
|
||||||
|
dc.SetDeviceOrigin( dc_size.x / 2, dc_size.y / 2 );
|
||||||
|
|
||||||
|
// Calculate a suitable scale to fit the available draw area
|
||||||
|
double scale = (double) dc_size.x / (m_dummyPad->m_Size.x + m_dummyPad->m_LocalClearance);
|
||||||
|
double altscale = (double) dc_size.y / (m_dummyPad->m_Size.y + m_dummyPad->m_LocalClearance);
|
||||||
|
scale = MIN( scale, altscale );
|
||||||
|
|
||||||
|
// Give a margin
|
||||||
|
scale *= 0.7;
|
||||||
|
dc.SetUserScale( scale, scale );
|
||||||
|
drawInfo.m_Scale = scale;
|
||||||
|
|
||||||
|
#ifndef USE_WX_ZOOM
|
||||||
|
wxPoint org = ActiveScreen->m_DrawOrg;
|
||||||
|
wxPoint strt = ActiveScreen->m_StartVisu;
|
||||||
|
int pzoom = ActiveScreen->GetZoom();
|
||||||
|
ActiveScreen->m_DrawOrg = wxPoint( 0, 0 );
|
||||||
|
ActiveScreen->m_StartVisu = wxPoint( 0, 0 );
|
||||||
|
|
||||||
|
// Actual scaling factor is 10/Zoom
|
||||||
|
// We need a scale 1 , and therefore zoom = 10
|
||||||
|
ActiveScreen->SetZoom( 10 );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
m_dummyPad->DrawShape( NULL, &dc, drawInfo );
|
||||||
|
|
||||||
|
#ifndef USE_WX_ZOOM
|
||||||
|
ActiveScreen->m_DrawOrg = org;
|
||||||
|
ActiveScreen->m_StartVisu = strt;
|
||||||
|
ActiveScreen->SetZoom( pzoom );
|
||||||
|
#endif
|
||||||
|
event.Skip();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************************/
|
/*******************************************************************************************/
|
||||||
DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES( WinEDA_BasePcbFrame* parent, D_PAD* Pad ) :
|
DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES( WinEDA_BasePcbFrame* parent, D_PAD* Pad ) :
|
||||||
DIALOG_PAD_PROPERTIES_BASE( parent )
|
DIALOG_PAD_PROPERTIES_BASE( parent )
|
||||||
/*******************************************************************************************/
|
/*******************************************************************************************/
|
||||||
{
|
{
|
||||||
|
m_canUpdate = false;
|
||||||
m_Parent = parent;
|
m_Parent = parent;
|
||||||
m_CurrentPad = Pad;
|
m_CurrentPad = Pad;
|
||||||
m_Board = m_Parent->GetBoard();
|
m_Board = m_Parent->GetBoard();
|
||||||
|
m_dummyPad = new D_PAD( (MODULE*) NULL );
|
||||||
|
|
||||||
if( m_CurrentPad )
|
if( m_CurrentPad )
|
||||||
{
|
m_dummyPad->Copy( m_CurrentPad );
|
||||||
Current_PadNetName = m_CurrentPad->GetNetname();
|
else
|
||||||
g_Current_PadName = m_CurrentPad->ReturnStringPadName();
|
m_dummyPad->Copy( &g_Pad_Master );
|
||||||
}
|
|
||||||
|
initValues();
|
||||||
|
|
||||||
InitDialog( );
|
|
||||||
if( GetSizer() )
|
|
||||||
{
|
|
||||||
GetSizer()->SetSizeHints( this );
|
GetSizer()->SetSizeHints( this );
|
||||||
}
|
|
||||||
|
|
||||||
Center();
|
Center();
|
||||||
|
m_canUpdate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -105,22 +183,38 @@ void WinEDA_BasePcbFrame::InstallPadOptionsFrame( D_PAD* Pad )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************/
|
/***************************************/
|
||||||
void DIALOG_PAD_PROPERTIES::InitDialog( )
|
void DIALOG_PAD_PROPERTIES::initValues()
|
||||||
/**************************************************************/
|
/***************************************/
|
||||||
{
|
{
|
||||||
int tmp;
|
|
||||||
wxCommandEvent cmd_event;
|
|
||||||
int internalUnits = m_Parent->m_InternalUnits;
|
|
||||||
wxString msg;
|
|
||||||
|
|
||||||
SetFocus(); // Required under wxGTK if we want to demiss the dialog with the ESC key
|
SetFocus(); // Required under wxGTK if we want to demiss the dialog with the ESC key
|
||||||
|
|
||||||
m_PadNumCtrl->SetValue( g_Current_PadName );
|
int tmp;
|
||||||
m_PadNetNameCtrl->SetValue( Current_PadNetName );
|
int internalUnits = m_Parent->m_InternalUnits;
|
||||||
D_PAD* pad = m_CurrentPad;
|
wxString msg;
|
||||||
if( pad == NULL )
|
m_isFlipped = false;
|
||||||
pad = &g_Pad_Master;
|
if( m_CurrentPad )
|
||||||
|
{
|
||||||
|
MODULE* Module = (MODULE*) m_CurrentPad->GetParent();
|
||||||
|
if( Module->GetLayer() == LAYER_N_BACK )
|
||||||
|
{
|
||||||
|
m_isFlipped = true;
|
||||||
|
m_staticModuleSideValue->SetLabel( _( "Back side (footprint is mirrored)" ) );
|
||||||
|
}
|
||||||
|
msg.Printf( wxT( "%.1f" ), (double) Module->m_Orient / 10 );
|
||||||
|
m_staticModuleRotValue->SetLabel( msg );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( m_isFlipped )
|
||||||
|
{
|
||||||
|
NEGATE( m_dummyPad->m_Offset.y );
|
||||||
|
NEGATE( m_dummyPad->m_DeltaSize.y );
|
||||||
|
/* flip pads layers*/
|
||||||
|
m_dummyPad->m_Masque_Layer = ChangeSideMaskLayer( m_dummyPad->m_Masque_Layer );
|
||||||
|
}
|
||||||
|
|
||||||
|
m_PadNumCtrl->SetValue( m_dummyPad->ReturnStringPadName() );
|
||||||
|
m_PadNetNameCtrl->SetValue( m_dummyPad->GetNetname() );
|
||||||
|
|
||||||
// Display current unit name in dialog:
|
// Display current unit name in dialog:
|
||||||
m_PadPosX_Unit->SetLabel( GetUnitsLabel( g_UserUnit ) );
|
m_PadPosX_Unit->SetLabel( GetUnitsLabel( g_UserUnit ) );
|
||||||
|
@ -134,36 +228,43 @@ void DIALOG_PAD_PROPERTIES::InitDialog( )
|
||||||
m_PadShapeDeltaX_Unit->SetLabel( GetUnitsLabel( g_UserUnit ) );
|
m_PadShapeDeltaX_Unit->SetLabel( GetUnitsLabel( g_UserUnit ) );
|
||||||
m_PadShapeDeltaY_Unit->SetLabel( GetUnitsLabel( g_UserUnit ) );
|
m_PadShapeDeltaY_Unit->SetLabel( GetUnitsLabel( g_UserUnit ) );
|
||||||
m_NetClearanceUnits->SetLabel( GetUnitsLabel( g_UserUnit ) );
|
m_NetClearanceUnits->SetLabel( GetUnitsLabel( g_UserUnit ) );
|
||||||
|
|
||||||
// Display current pad masks clearances units
|
// Display current pad masks clearances units
|
||||||
m_NetClearanceUnits->SetLabel( GetUnitsLabel( g_UserUnit ) );
|
m_NetClearanceUnits->SetLabel( GetUnitsLabel( g_UserUnit ) );
|
||||||
m_SolderMaskMarginUnits->SetLabel( GetUnitsLabel( g_UserUnit ) );
|
m_SolderMaskMarginUnits->SetLabel( GetUnitsLabel( g_UserUnit ) );
|
||||||
m_SolderPasteMarginUnits->SetLabel( GetUnitsLabel( g_UserUnit ) );
|
m_SolderPasteMarginUnits->SetLabel( GetUnitsLabel( g_UserUnit ) );
|
||||||
|
|
||||||
// Display current pad parameters units:
|
// Display current pad parameters units:
|
||||||
PutValueInLocalUnits( *m_PadPosition_X_Ctrl, pad->m_Pos.x, internalUnits );
|
PutValueInLocalUnits( *m_PadPosition_X_Ctrl, m_dummyPad->m_Pos.x, internalUnits );
|
||||||
PutValueInLocalUnits( *m_PadPosition_Y_Ctrl, pad->m_Pos.y, internalUnits );
|
PutValueInLocalUnits( *m_PadPosition_Y_Ctrl, m_dummyPad->m_Pos.y, internalUnits );
|
||||||
|
|
||||||
PutValueInLocalUnits( *m_PadDrill_X_Ctrl, pad->m_Drill.x, internalUnits );
|
PutValueInLocalUnits( *m_PadDrill_X_Ctrl, m_dummyPad->m_Drill.x, internalUnits );
|
||||||
PutValueInLocalUnits( *m_PadDrill_Y_Ctrl, pad->m_Drill.y, internalUnits );
|
PutValueInLocalUnits( *m_PadDrill_Y_Ctrl, m_dummyPad->m_Drill.y, internalUnits );
|
||||||
|
|
||||||
PutValueInLocalUnits( *m_ShapeSize_X_Ctrl, pad->m_Size.x, internalUnits );
|
PutValueInLocalUnits( *m_ShapeSize_X_Ctrl, m_dummyPad->m_Size.x, internalUnits );
|
||||||
PutValueInLocalUnits( *m_ShapeSize_Y_Ctrl, pad->m_Size.y, internalUnits );
|
PutValueInLocalUnits( *m_ShapeSize_Y_Ctrl, m_dummyPad->m_Size.y, internalUnits );
|
||||||
|
|
||||||
PutValueInLocalUnits( *m_ShapeOffset_X_Ctrl, pad->m_Offset.x, internalUnits );
|
PutValueInLocalUnits( *m_ShapeOffset_X_Ctrl, m_dummyPad->m_Offset.x, internalUnits );
|
||||||
PutValueInLocalUnits( *m_ShapeOffset_Y_Ctrl, pad->m_Offset.y, internalUnits );
|
PutValueInLocalUnits( *m_ShapeOffset_Y_Ctrl, m_dummyPad->m_Offset.y, internalUnits );
|
||||||
|
|
||||||
PutValueInLocalUnits( *m_ShapeDelta_X_Ctrl, pad->m_DeltaSize.x, internalUnits );
|
PutValueInLocalUnits( *m_ShapeDelta_X_Ctrl, m_dummyPad->m_DeltaSize.x, internalUnits );
|
||||||
PutValueInLocalUnits( *m_ShapeDelta_Y_Ctrl, pad->m_DeltaSize.y, internalUnits );
|
PutValueInLocalUnits( *m_ShapeDelta_Y_Ctrl, m_dummyPad->m_DeltaSize.y, internalUnits );
|
||||||
|
|
||||||
|
PutValueInLocalUnits( *m_NetClearanceValueCtrl, m_dummyPad->m_LocalClearance, internalUnits );
|
||||||
|
PutValueInLocalUnits( *m_SolderMaskMarginCtrl,
|
||||||
|
m_dummyPad->m_LocalSolderMaskMargin,
|
||||||
|
internalUnits );
|
||||||
|
|
||||||
PutValueInLocalUnits( *m_NetClearanceValueCtrl, pad->m_LocalClearance, internalUnits );
|
|
||||||
PutValueInLocalUnits( *m_SolderMaskMarginCtrl, pad->m_LocalSolderMaskMargin, internalUnits );
|
|
||||||
// These 2 parameters are usually < 0, so prepare entering a negative value, if current is 0
|
// These 2 parameters are usually < 0, so prepare entering a negative value, if current is 0
|
||||||
PutValueInLocalUnits( *m_SolderPasteMarginCtrl, pad->m_LocalSolderPasteMargin, internalUnits );
|
PutValueInLocalUnits( *m_SolderPasteMarginCtrl,
|
||||||
if( pad->m_LocalSolderPasteMargin == 0 )
|
m_dummyPad->m_LocalSolderPasteMargin,
|
||||||
|
internalUnits );
|
||||||
|
if( m_dummyPad->m_LocalSolderPasteMargin == 0 )
|
||||||
m_SolderPasteMarginCtrl->SetValue( wxT( "-" ) + m_SolderPasteMarginCtrl->GetValue() );
|
m_SolderPasteMarginCtrl->SetValue( wxT( "-" ) + m_SolderPasteMarginCtrl->GetValue() );
|
||||||
msg.Printf( wxT( "%.1f" ), pad->m_LocalSolderPasteMarginRatio * 100.0 );
|
msg.Printf( wxT( "%.1f" ), m_dummyPad->m_LocalSolderPasteMarginRatio * 100.0 );
|
||||||
if( pad->m_LocalSolderPasteMarginRatio == 0.0 &&
|
|
||||||
msg[0] == '0') // Sometimes Printf add a sign if the value is small
|
if( m_dummyPad->m_LocalSolderPasteMarginRatio == 0.0
|
||||||
|
&& msg[0] == '0' ) // Sometimes Printf add a sign if the value is small
|
||||||
m_SolderPasteMarginRatioCtrl->SetValue( wxT( "-" ) + msg );
|
m_SolderPasteMarginRatioCtrl->SetValue( wxT( "-" ) + msg );
|
||||||
else
|
else
|
||||||
m_SolderPasteMarginRatioCtrl->SetValue( msg );
|
m_SolderPasteMarginRatioCtrl->SetValue( msg );
|
||||||
|
@ -171,39 +272,39 @@ void DIALOG_PAD_PROPERTIES::InitDialog( )
|
||||||
if( m_CurrentPad )
|
if( m_CurrentPad )
|
||||||
{
|
{
|
||||||
MODULE* Module = (MODULE*) m_CurrentPad->GetParent();
|
MODULE* Module = (MODULE*) m_CurrentPad->GetParent();
|
||||||
tmp = m_CurrentPad->m_Orient - Module->m_Orient;
|
m_dummyPad->m_Orient = m_CurrentPad->m_Orient - Module->m_Orient;
|
||||||
|
if( m_isFlipped )
|
||||||
|
NEGATE( m_dummyPad->m_Orient );
|
||||||
}
|
}
|
||||||
else
|
|
||||||
tmp = g_Pad_Master.m_Orient;
|
// adjust rotation agngle to -1800 to 1800 in internal units (0.1 deg)
|
||||||
|
NORMALIZE_ANGLE_180( m_dummyPad->m_Orient );
|
||||||
|
|
||||||
|
// Set layers used by this pad: :
|
||||||
|
SetPadLayersList( m_dummyPad->m_Masque_Layer );
|
||||||
|
|
||||||
msg.Clear();
|
msg.Clear();
|
||||||
msg << tmp;
|
msg << tmp;
|
||||||
m_PadOrientCtrl->SetValue( msg );
|
m_PadOrientCtrl->SetValue( msg );
|
||||||
|
|
||||||
|
|
||||||
// Pad Orient
|
// Pad Orient
|
||||||
switch( tmp )
|
switch( m_dummyPad->m_Orient )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
m_PadOrient->SetSelection( 0 );
|
m_PadOrient->SetSelection( 0 );
|
||||||
m_PadOrientCtrl->Enable( false );
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case - 2700:
|
|
||||||
case 900:
|
case 900:
|
||||||
m_PadOrient->SetSelection( 1 );
|
m_PadOrient->SetSelection( 1 );
|
||||||
m_PadOrientCtrl->Enable( false );
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case - 900:
|
case - 900:
|
||||||
case 2700:
|
|
||||||
m_PadOrient->SetSelection( 2 );
|
m_PadOrient->SetSelection( 2 );
|
||||||
m_PadOrientCtrl->Enable( false );
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1800:
|
case 1800:
|
||||||
case - 1800:
|
case - 1800:
|
||||||
m_PadOrient->SetSelection( 3 );
|
m_PadOrient->SetSelection( 3 );
|
||||||
m_PadOrientCtrl->Enable( false );
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -211,7 +312,7 @@ void DIALOG_PAD_PROPERTIES::InitDialog( )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( pad->m_PadShape )
|
switch( m_dummyPad->m_PadShape )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case PAD_CIRCLE:
|
case PAD_CIRCLE:
|
||||||
|
@ -231,35 +332,25 @@ void DIALOG_PAD_PROPERTIES::InitDialog( )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd_event.SetId( m_PadShape->GetSelection() );
|
msg.Printf( wxT( "%d" ), m_dummyPad->m_Orient );
|
||||||
OnPadShapeSelection( cmd_event );
|
m_PadOrientCtrl->SetValue( msg );
|
||||||
|
|
||||||
// Selection du type
|
// Selection du type
|
||||||
tmp = pad->m_Attribut;
|
tmp = m_dummyPad->m_Attribut;
|
||||||
m_PadType->SetSelection( 0 );
|
m_PadType->SetSelection( 0 );
|
||||||
for( int ii = 0; ii < NBTYPES; ii++ )
|
for( int ii = 0; ii < NBTYPES; ii++ )
|
||||||
{
|
{
|
||||||
if( CodeType[ii] == tmp )
|
if( CodeType[ii] == tmp )
|
||||||
{
|
{
|
||||||
m_PadType->SetSelection( ii ); break;
|
m_PadType->SetSelection( ii );
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( pad->m_DrillShape != PAD_OVAL )
|
if( m_dummyPad->m_DrillShape != PAD_OVAL )
|
||||||
m_DrillShapeCtrl->SetSelection( 0 );
|
m_DrillShapeCtrl->SetSelection( 0 );
|
||||||
else
|
else
|
||||||
m_DrillShapeCtrl->SetSelection( 1 );
|
m_DrillShapeCtrl->SetSelection( 1 );
|
||||||
cmd_event.SetId( m_DrillShapeCtrl->GetSelection() );
|
|
||||||
OnDrillShapeSelected( cmd_event );
|
|
||||||
|
|
||||||
// Set layers used by this pad: :
|
|
||||||
if( m_CurrentPad )
|
|
||||||
SetPadLayersList( m_CurrentPad->m_Masque_Layer );
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cmd_event.SetId( m_PadType->GetSelection() );
|
|
||||||
PadTypeSelected( cmd_event );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup layers names from board
|
// Setup layers names from board
|
||||||
m_PadLayerCu->SetLabel( m_Board->GetLayerName( LAYER_N_BACK ) );
|
m_PadLayerCu->SetLabel( m_Board->GetLayerName( LAYER_N_BACK ) );
|
||||||
|
@ -276,6 +367,13 @@ void DIALOG_PAD_PROPERTIES::InitDialog( )
|
||||||
m_PadLayerECO1->SetLabel( m_Board->GetLayerName( ECO1_N ) );
|
m_PadLayerECO1->SetLabel( m_Board->GetLayerName( ECO1_N ) );
|
||||||
m_PadLayerECO2->SetLabel( m_Board->GetLayerName( ECO2_N ) );
|
m_PadLayerECO2->SetLabel( m_Board->GetLayerName( ECO2_N ) );
|
||||||
m_PadLayerDraft->SetLabel( m_Board->GetLayerName( DRAW_N ) );
|
m_PadLayerDraft->SetLabel( m_Board->GetLayerName( DRAW_N ) );
|
||||||
|
|
||||||
|
/* All init are done,
|
||||||
|
* Update some dialog widgets state (Enable/disable options):
|
||||||
|
*/
|
||||||
|
wxCommandEvent cmd_event;
|
||||||
|
OnPadShapeSelection( cmd_event );
|
||||||
|
OnDrillShapeSelected( cmd_event );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -309,6 +407,9 @@ void DIALOG_PAD_PROPERTIES::OnPadShapeSelection( wxCommandEvent& event )
|
||||||
m_ShapeSize_Y_Ctrl->Enable( true );
|
m_ShapeSize_Y_Ctrl->Enable( true );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TransfertDataToPad( m_dummyPad );
|
||||||
|
m_panelShowPad->Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -317,11 +418,13 @@ void DIALOG_PAD_PROPERTIES::OnDrillShapeSelected( wxCommandEvent& event )
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
{
|
{
|
||||||
if( (m_PadType->GetSelection() == 1) || (m_PadType->GetSelection() == 2) )
|
if( (m_PadType->GetSelection() == 1) || (m_PadType->GetSelection() == 2) )
|
||||||
{ // pad type = SMD or CONN: no hole allowed
|
{
|
||||||
|
// pad type = SMD or CONN: no hole allowed
|
||||||
m_PadDrill_X_Ctrl->Enable( false );
|
m_PadDrill_X_Ctrl->Enable( false );
|
||||||
m_PadDrill_Y_Ctrl->Enable( false );
|
m_PadDrill_Y_Ctrl->Enable( false );
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
switch( m_DrillShapeCtrl->GetSelection() )
|
switch( m_DrillShapeCtrl->GetSelection() )
|
||||||
{
|
{
|
||||||
case 0: //CIRCLE:
|
case 0: //CIRCLE:
|
||||||
|
@ -336,6 +439,10 @@ void DIALOG_PAD_PROPERTIES::OnDrillShapeSelected( wxCommandEvent& event )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TransfertDataToPad( m_dummyPad );
|
||||||
|
m_panelShowPad->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************/
|
/*******************************************************************/
|
||||||
void DIALOG_PAD_PROPERTIES::PadOrientEvent( wxCommandEvent& event )
|
void DIALOG_PAD_PROPERTIES::PadOrientEvent( wxCommandEvent& event )
|
||||||
|
@ -344,29 +451,31 @@ void DIALOG_PAD_PROPERTIES::PadOrientEvent( wxCommandEvent& event )
|
||||||
switch( m_PadOrient->GetSelection() )
|
switch( m_PadOrient->GetSelection() )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
m_PadOrientCtrl->SetValue( wxT( "0" ) );
|
m_dummyPad->m_Orient = 0;
|
||||||
m_PadOrientCtrl->Enable( false );
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
m_PadOrientCtrl->SetValue( wxT( "900" ) );
|
m_dummyPad->m_Orient = 900;
|
||||||
m_PadOrientCtrl->Enable( false );
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
m_PadOrientCtrl->SetValue( wxT( "2700" ) );
|
m_dummyPad->m_Orient = -900;
|
||||||
m_PadOrientCtrl->Enable( false );
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
m_PadOrientCtrl->SetValue( wxT( "1800" ) );
|
m_dummyPad->m_Orient = 1800;
|
||||||
m_PadOrientCtrl->Enable( false );
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
m_PadOrientCtrl->Enable( true );
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxString msg;
|
||||||
|
msg.Printf( wxT( "%d" ), m_dummyPad->m_Orient );
|
||||||
|
m_PadOrientCtrl->SetValue( msg );
|
||||||
|
|
||||||
|
TransfertDataToPad( m_dummyPad );
|
||||||
|
m_panelShowPad->Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -424,106 +533,240 @@ void DIALOG_PAD_PROPERTIES::SetPadLayersList( long layer_mask )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Called when select/deselect a layer.
|
||||||
|
void DIALOG_PAD_PROPERTIES::OnSetLayer( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
TransfertDataToPad( m_dummyPad );
|
||||||
|
m_panelShowPad->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
void DIALOG_PAD_PROPERTIES::PadPropertiesAccept( wxCommandEvent& event )
|
void DIALOG_PAD_PROPERTIES::PadPropertiesAccept( wxCommandEvent& event )
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
/* Updates the different parameters for the component being edited.
|
/* Updates the different parameters for the component being edited.
|
||||||
*/
|
*/
|
||||||
|
{
|
||||||
|
bool rastnestIsChanged = false;
|
||||||
|
int isign = m_isFlipped ? -1 : 1;
|
||||||
|
|
||||||
|
bool success = TransfertDataToPad( m_dummyPad, true );
|
||||||
|
if( !success ) // An error on parameters has occured
|
||||||
|
return;
|
||||||
|
|
||||||
|
TransfertDataToPad( &g_Pad_Master, false );
|
||||||
|
g_Current_PadName = g_Pad_Master.ReturnStringPadName();
|
||||||
|
|
||||||
|
if( m_CurrentPad ) // Set current Pad parameters
|
||||||
|
{
|
||||||
|
MODULE* Module = (MODULE*) m_CurrentPad->GetParent();
|
||||||
|
m_Parent->SaveCopyInUndoList( Module, UR_CHANGED );
|
||||||
|
Module->m_LastEdit_Time = time( NULL );
|
||||||
|
|
||||||
|
// redraw the area where the pad was, without pad (delete pad on screen)
|
||||||
|
m_CurrentPad->m_Flags |= DO_NOT_DRAW;
|
||||||
|
m_Parent->DrawPanel->PostDirtyRect( m_CurrentPad->GetBoundingBox() );
|
||||||
|
m_CurrentPad->m_Flags &= ~DO_NOT_DRAW;
|
||||||
|
|
||||||
|
// Update values
|
||||||
|
m_CurrentPad->m_PadShape = g_Pad_Master.m_PadShape;
|
||||||
|
m_CurrentPad->m_Attribut = g_Pad_Master.m_Attribut;
|
||||||
|
if( m_CurrentPad->m_Pos != g_Pad_Master.m_Pos )
|
||||||
|
{
|
||||||
|
m_CurrentPad->m_Pos = g_Pad_Master.m_Pos;
|
||||||
|
rastnestIsChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* compute the pos 0 value, i.e. pad position for module orient = 0 i.e.
|
||||||
|
* refer to module origin (module position) */
|
||||||
|
m_CurrentPad->m_Pos0 = m_CurrentPad->m_Pos;
|
||||||
|
m_CurrentPad->m_Pos0 -= Module->m_Pos;
|
||||||
|
m_CurrentPad->m_Orient = (g_Pad_Master.m_Orient * isign) + Module->m_Orient;
|
||||||
|
RotatePoint( &m_CurrentPad->m_Pos0.x, &m_CurrentPad->m_Pos0.y, -Module->m_Orient );
|
||||||
|
|
||||||
|
m_CurrentPad->m_Size = g_Pad_Master.m_Size;
|
||||||
|
m_CurrentPad->m_DeltaSize = g_Pad_Master.m_DeltaSize;
|
||||||
|
m_CurrentPad->m_DeltaSize.y *= isign;
|
||||||
|
m_CurrentPad->m_Drill = g_Pad_Master.m_Drill;
|
||||||
|
m_CurrentPad->m_DrillShape = g_Pad_Master.m_DrillShape;
|
||||||
|
m_CurrentPad->m_Offset = g_Pad_Master.m_Offset;
|
||||||
|
m_CurrentPad->m_Offset.y *= isign;
|
||||||
|
if( m_CurrentPad->m_Masque_Layer != g_Pad_Master.m_Masque_Layer )
|
||||||
|
{
|
||||||
|
rastnestIsChanged = true;
|
||||||
|
m_CurrentPad->m_Masque_Layer = g_Pad_Master.m_Masque_Layer;
|
||||||
|
}
|
||||||
|
if( m_isFlipped )
|
||||||
|
m_CurrentPad->m_Masque_Layer = ChangeSideMaskLayer( m_CurrentPad->m_Masque_Layer );
|
||||||
|
|
||||||
|
m_CurrentPad->SetPadName( g_Pad_Master.ReturnStringPadName() );
|
||||||
|
|
||||||
|
if( m_CurrentPad->GetNetname() != g_Pad_Master.GetNetname() )
|
||||||
|
{
|
||||||
|
if( g_Pad_Master.GetNetname().IsEmpty() )
|
||||||
|
{
|
||||||
|
rastnestIsChanged = true;
|
||||||
|
m_CurrentPad->SetNet( 0 );
|
||||||
|
m_CurrentPad->SetNetname( wxEmptyString );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const NETINFO_ITEM* net = m_Parent->GetBoard()->FindNet( g_Pad_Master.GetNetname() );
|
||||||
|
if( net )
|
||||||
|
{
|
||||||
|
rastnestIsChanged = true;
|
||||||
|
m_CurrentPad->SetNetname( g_Pad_Master.GetNetname() );
|
||||||
|
m_CurrentPad->SetNet( net->GetNet() );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DisplayError( NULL, _( "Unknown netname, netname not changed" ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_CurrentPad->m_LocalClearance = g_Pad_Master.m_LocalClearance;
|
||||||
|
m_CurrentPad->m_LocalSolderMaskMargin = g_Pad_Master.m_LocalSolderMaskMargin;
|
||||||
|
m_CurrentPad->m_LocalSolderPasteMargin = g_Pad_Master.m_LocalSolderPasteMargin;
|
||||||
|
m_CurrentPad->m_LocalSolderPasteMarginRatio = g_Pad_Master.m_LocalSolderPasteMarginRatio;
|
||||||
|
|
||||||
|
m_CurrentPad->ComputeRayon();
|
||||||
|
|
||||||
|
Module->Set_Rectangle_Encadrement();
|
||||||
|
m_CurrentPad->DisplayInfo( m_Parent );
|
||||||
|
|
||||||
|
// redraw the area where the pad was
|
||||||
|
m_Parent->DrawPanel->PostDirtyRect( m_CurrentPad->GetBoundingBox() );
|
||||||
|
m_Parent->OnModify();
|
||||||
|
}
|
||||||
|
|
||||||
|
EndModal( wxID_OK );
|
||||||
|
|
||||||
|
if( rastnestIsChanged ) // The net ratsnest must be recalculated
|
||||||
|
m_Parent->GetBoard()->m_Status_Pcb = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool DIALOG_PAD_PROPERTIES::TransfertDataToPad( D_PAD* aPad, bool aPromptOnError )
|
||||||
{
|
{
|
||||||
long PadLayerMask;
|
long PadLayerMask;
|
||||||
bool RastnestIsChanged = false;
|
|
||||||
int internalUnits = m_Parent->m_InternalUnits;
|
int internalUnits = m_Parent->m_InternalUnits;
|
||||||
wxString msg;
|
wxString msg;
|
||||||
|
|
||||||
g_Pad_Master.m_Attribut = CodeType[m_PadType->GetSelection()];
|
aPad->m_Attribut = CodeType[m_PadType->GetSelection()];
|
||||||
g_Pad_Master.m_PadShape = CodeShape[m_PadShape->GetSelection()];
|
aPad->m_PadShape = CodeShape[m_PadShape->GetSelection()];
|
||||||
|
|
||||||
// Read pad clearances values:
|
// Read pad clearances values:
|
||||||
g_Pad_Master.m_LocalClearance = ReturnValueFromTextCtrl( *m_NetClearanceValueCtrl,
|
aPad->m_LocalClearance = ReturnValueFromTextCtrl( *m_NetClearanceValueCtrl,
|
||||||
internalUnits );
|
internalUnits );
|
||||||
g_Pad_Master.m_LocalSolderMaskMargin = ReturnValueFromTextCtrl( *m_SolderMaskMarginCtrl,
|
aPad->m_LocalSolderMaskMargin = ReturnValueFromTextCtrl( *m_SolderMaskMarginCtrl,
|
||||||
internalUnits );
|
internalUnits );
|
||||||
g_Pad_Master.m_LocalSolderPasteMargin = ReturnValueFromTextCtrl( *m_SolderPasteMarginCtrl,
|
aPad->m_LocalSolderPasteMargin = ReturnValueFromTextCtrl( *m_SolderPasteMarginCtrl,
|
||||||
internalUnits );
|
internalUnits );
|
||||||
double dtmp = 0.0;
|
double dtmp = 0.0;
|
||||||
msg = m_SolderPasteMarginRatioCtrl->GetValue();
|
msg = m_SolderPasteMarginRatioCtrl->GetValue();
|
||||||
msg.ToDouble( &dtmp );
|
msg.ToDouble( &dtmp );
|
||||||
|
|
||||||
// A margin ratio de -50% means no paste on a pad, the ratio must be >= 50 %
|
// A margin ratio de -50% means no paste on a pad, the ratio must be >= 50 %
|
||||||
if( dtmp < -50 )
|
if( dtmp < -50 )
|
||||||
dtmp = -50;
|
dtmp = -50;
|
||||||
if( dtmp > +100 )
|
if( dtmp > +100 )
|
||||||
dtmp = +100;
|
dtmp = +100;
|
||||||
g_Pad_Master.m_LocalSolderPasteMarginRatio = dtmp / 100;
|
aPad->m_LocalSolderPasteMarginRatio = dtmp / 100;
|
||||||
|
|
||||||
// Read pad position:
|
// Read pad position:
|
||||||
g_Pad_Master.m_Pos.x = ReturnValueFromTextCtrl( *m_PadPosition_X_Ctrl, internalUnits );
|
aPad->m_Pos.x = ReturnValueFromTextCtrl( *m_PadPosition_X_Ctrl, internalUnits );
|
||||||
g_Pad_Master.m_Pos.y = ReturnValueFromTextCtrl( *m_PadPosition_Y_Ctrl, internalUnits );
|
aPad->m_Pos.y = ReturnValueFromTextCtrl( *m_PadPosition_Y_Ctrl, internalUnits );
|
||||||
g_Pad_Master.m_Pos0 = g_Pad_Master.m_Pos;
|
aPad->m_Pos0 = aPad->m_Pos;
|
||||||
|
|
||||||
// Read pad drill:
|
// Read pad drill:
|
||||||
g_Pad_Master.m_Drill.x = ReturnValueFromTextCtrl( *m_PadDrill_X_Ctrl, internalUnits );
|
aPad->m_Drill.x = ReturnValueFromTextCtrl( *m_PadDrill_X_Ctrl, internalUnits );
|
||||||
g_Pad_Master.m_Drill.y = ReturnValueFromTextCtrl( *m_PadDrill_Y_Ctrl, internalUnits );
|
aPad->m_Drill.y = ReturnValueFromTextCtrl( *m_PadDrill_Y_Ctrl, internalUnits );
|
||||||
if( m_DrillShapeCtrl->GetSelection() == 0 )
|
if( m_DrillShapeCtrl->GetSelection() == 0 )
|
||||||
{
|
{
|
||||||
g_Pad_Master.m_DrillShape = PAD_CIRCLE;
|
aPad->m_DrillShape = PAD_CIRCLE;
|
||||||
g_Pad_Master.m_Drill.y = g_Pad_Master.m_Drill.x;
|
aPad->m_Drill.y = aPad->m_Drill.x;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
g_Pad_Master.m_DrillShape = PAD_OVAL;
|
aPad->m_DrillShape = PAD_OVAL;
|
||||||
|
|
||||||
// Read pad shape size:
|
// Read pad shape size:
|
||||||
g_Pad_Master.m_Size.x = ReturnValueFromTextCtrl( *m_ShapeSize_X_Ctrl, internalUnits );
|
aPad->m_Size.x = ReturnValueFromTextCtrl( *m_ShapeSize_X_Ctrl, internalUnits );
|
||||||
g_Pad_Master.m_Size.y = ReturnValueFromTextCtrl( *m_ShapeSize_Y_Ctrl, internalUnits );
|
aPad->m_Size.y = ReturnValueFromTextCtrl( *m_ShapeSize_Y_Ctrl, internalUnits );
|
||||||
if( g_Pad_Master.m_PadShape == PAD_CIRCLE )
|
if( aPad->m_PadShape == PAD_CIRCLE )
|
||||||
g_Pad_Master.m_Size.y = g_Pad_Master.m_Size.x;
|
aPad->m_Size.y = aPad->m_Size.x;
|
||||||
|
|
||||||
// Read pad shape delta size:
|
// Read pad shape delta size:
|
||||||
g_Pad_Master.m_DeltaSize.x = ReturnValueFromTextCtrl( *m_ShapeDelta_X_Ctrl, internalUnits );
|
// m_DeltaSize.x or m_DeltaSize.y must be NULL. for a trapezoid.
|
||||||
g_Pad_Master.m_DeltaSize.y = ReturnValueFromTextCtrl( *m_ShapeDelta_Y_Ctrl, internalUnits );
|
aPad->m_DeltaSize.x = ReturnValueFromTextCtrl( *m_ShapeDelta_X_Ctrl, internalUnits );
|
||||||
|
aPad->m_DeltaSize.y = ReturnValueFromTextCtrl( *m_ShapeDelta_Y_Ctrl, internalUnits );
|
||||||
|
|
||||||
|
// Test bad values (be sure delta values are not to large)
|
||||||
|
// rememver DeltaSize.x is the Y size variation
|
||||||
|
bool error = false;
|
||||||
|
if( (aPad->m_DeltaSize.x < 0) && (aPad->m_DeltaSize.x <= -aPad->m_Size.y) )
|
||||||
|
{
|
||||||
|
aPad->m_DeltaSize.x = -aPad->m_Size.y + 2;
|
||||||
|
error = true;
|
||||||
|
}
|
||||||
|
if( (aPad->m_DeltaSize.x > 0) && (aPad->m_DeltaSize.x >= aPad->m_Size.y) )
|
||||||
|
{
|
||||||
|
aPad->m_DeltaSize.x = aPad->m_Size.y - 2;
|
||||||
|
error = true;
|
||||||
|
}
|
||||||
|
if( (aPad->m_DeltaSize.y < 0) && (aPad->m_DeltaSize.y <= -aPad->m_Size.x) )
|
||||||
|
{
|
||||||
|
aPad->m_DeltaSize.y = -aPad->m_Size.x + 2;
|
||||||
|
error = true;
|
||||||
|
}
|
||||||
|
if( (aPad->m_DeltaSize.y > 0) && (aPad->m_DeltaSize.y >= aPad->m_Size.x) )
|
||||||
|
{
|
||||||
|
aPad->m_DeltaSize.y = aPad->m_Size.x - 2;
|
||||||
|
error = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Read pad shape offset:
|
// Read pad shape offset:
|
||||||
g_Pad_Master.m_Offset.x = ReturnValueFromTextCtrl( *m_ShapeOffset_X_Ctrl, internalUnits );
|
aPad->m_Offset.x = ReturnValueFromTextCtrl( *m_ShapeOffset_X_Ctrl, internalUnits );
|
||||||
g_Pad_Master.m_Offset.y = ReturnValueFromTextCtrl( *m_ShapeOffset_Y_Ctrl, internalUnits );
|
aPad->m_Offset.y = ReturnValueFromTextCtrl( *m_ShapeOffset_Y_Ctrl, internalUnits );
|
||||||
|
|
||||||
long orient_value = 0;
|
long orient_value = 0;
|
||||||
msg = m_PadOrientCtrl->GetValue();
|
msg = m_PadOrientCtrl->GetValue();
|
||||||
msg.ToLong( &orient_value );
|
msg.ToLong( &orient_value );
|
||||||
g_Pad_Master.m_Orient = orient_value;
|
aPad->m_Orient = orient_value;
|
||||||
|
|
||||||
g_Current_PadName = m_PadNumCtrl->GetValue().Left( 4 );
|
msg = m_PadNumCtrl->GetValue().Left( 4 );
|
||||||
Current_PadNetName = m_PadNetNameCtrl->GetValue();
|
aPad->SetPadName( msg );
|
||||||
|
aPad->SetNetname( m_PadNetNameCtrl->GetValue() );
|
||||||
|
|
||||||
// Clear some values, according to the pad type and shape
|
// Clear some values, according to the pad type and shape
|
||||||
switch( g_Pad_Master.m_PadShape )
|
switch( aPad->m_PadShape )
|
||||||
{
|
{
|
||||||
case PAD_CIRCLE:
|
case PAD_CIRCLE:
|
||||||
g_Pad_Master.m_Offset = wxSize( 0, 0 );
|
aPad->m_Offset = wxSize( 0, 0 );
|
||||||
g_Pad_Master.m_DeltaSize = wxSize( 0, 0 );
|
aPad->m_DeltaSize = wxSize( 0, 0 );
|
||||||
g_Pad_Master.m_Size.y = g_Pad_Master.m_Size.x;
|
aPad->m_Size.y = aPad->m_Size.x;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PAD_RECT:
|
case PAD_RECT:
|
||||||
g_Pad_Master.m_DeltaSize = wxSize( 0, 0 );
|
aPad->m_DeltaSize = wxSize( 0, 0 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PAD_OVAL:
|
case PAD_OVAL:
|
||||||
g_Pad_Master.m_DeltaSize = wxSize( 0, 0 );
|
aPad->m_DeltaSize = wxSize( 0, 0 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PAD_TRAPEZOID:
|
case PAD_TRAPEZOID:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( g_Pad_Master.m_Attribut )
|
switch( aPad->m_Attribut )
|
||||||
{
|
{
|
||||||
case PAD_STANDARD:
|
case PAD_STANDARD:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PAD_CONN:
|
case PAD_CONN:
|
||||||
case PAD_SMD:
|
case PAD_SMD:
|
||||||
g_Pad_Master.m_Offset = wxSize( 0, 0 );
|
aPad->m_Offset = wxSize( 0, 0 );
|
||||||
g_Pad_Master.m_Drill = wxSize( 0, 0 );
|
aPad->m_Drill = wxSize( 0, 0 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PAD_HOLE_NOT_PLATED:
|
case PAD_HOLE_NOT_PLATED:
|
||||||
|
@ -564,113 +807,63 @@ void DIALOG_PAD_PROPERTIES::PadPropertiesAccept( wxCommandEvent& event )
|
||||||
if( m_PadLayerDraft->GetValue() )
|
if( m_PadLayerDraft->GetValue() )
|
||||||
PadLayerMask |= DRAW_LAYER;
|
PadLayerMask |= DRAW_LAYER;
|
||||||
|
|
||||||
|
aPad->m_Masque_Layer = PadLayerMask;
|
||||||
|
|
||||||
/* Test for incorrect values */
|
/* Test for incorrect values */
|
||||||
if( (g_Pad_Master.m_Size.x < g_Pad_Master.m_Drill.x)
|
if( aPromptOnError )
|
||||||
|| (g_Pad_Master.m_Size.y < g_Pad_Master.m_Drill.y) )
|
{
|
||||||
|
if( (aPad->m_Size.x < aPad->m_Drill.x)
|
||||||
|
|| (aPad->m_Size.y < aPad->m_Drill.y) )
|
||||||
{
|
{
|
||||||
DisplayError( this, _( "Incorrect value for pad drill: pad drill bigger than pad size" ) );
|
DisplayError( this, _( "Incorrect value for pad drill: pad drill bigger than pad size" ) );
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int padlayers_mask = PadLayerMask & (LAYER_BACK | LAYER_FRONT);
|
int padlayers_mask = PadLayerMask & (LAYER_BACK | LAYER_FRONT);
|
||||||
if( padlayers_mask == 0 )
|
if( padlayers_mask == 0 )
|
||||||
{
|
{
|
||||||
if( g_Pad_Master.m_Drill.x || g_Pad_Master.m_Drill.y )
|
if( aPad->m_Drill.x || aPad->m_Drill.y )
|
||||||
{
|
{
|
||||||
DisplayError( this, _( "Error: pad is not on a copper layer and has a hole" ) );
|
DisplayError( this, _( "Error: pad is not on a copper layer and has a hole" ) );
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ( g_Pad_Master.m_Size.x / 2 <= ABS( g_Pad_Master.m_Offset.x ) )
|
if( ( aPad->m_Size.x / 2 <= ABS( aPad->m_Offset.x ) )
|
||||||
|| ( g_Pad_Master.m_Size.y / 2 <= ABS( g_Pad_Master.m_Offset.y ) ) )
|
|| ( aPad->m_Size.y / 2 <= ABS( aPad->m_Offset.y ) ) )
|
||||||
{
|
{
|
||||||
DisplayError( this, _( "Incorrect value for pad offset" ) );
|
DisplayError( this, _( "Incorrect value for pad offset" ) );
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( error )
|
||||||
g_Pad_Master.m_Masque_Layer = PadLayerMask;
|
|
||||||
|
|
||||||
if( m_CurrentPad ) // Set current Pad parameters
|
|
||||||
{
|
{
|
||||||
MODULE* Module = (MODULE*) m_CurrentPad->GetParent();
|
DisplayError( this, _( "Too large value for pad delta size" ) );
|
||||||
m_Parent->SaveCopyInUndoList( Module, UR_CHANGED );
|
return false;
|
||||||
Module->m_LastEdit_Time = time( NULL );
|
}
|
||||||
|
|
||||||
// redraw the area where the pad was, without pad (delete pad on screen)
|
if( aPad->m_DeltaSize.x && aPad->m_DeltaSize.y )
|
||||||
m_CurrentPad->m_Flags |= DO_NOT_DRAW;
|
|
||||||
m_Parent->DrawPanel->PostDirtyRect( m_CurrentPad->GetBoundingBox() );
|
|
||||||
m_CurrentPad->m_Flags &= ~DO_NOT_DRAW;
|
|
||||||
|
|
||||||
// Update values
|
|
||||||
m_CurrentPad->m_PadShape = g_Pad_Master.m_PadShape;
|
|
||||||
m_CurrentPad->m_Attribut = g_Pad_Master.m_Attribut;
|
|
||||||
if( m_CurrentPad->m_Pos != g_Pad_Master.m_Pos )
|
|
||||||
{
|
{
|
||||||
m_CurrentPad->m_Pos = g_Pad_Master.m_Pos;
|
DisplayError( this, _( "Incorrect value for pad delta size: X or Y value must be NULL" ) );
|
||||||
RastnestIsChanged = true;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* compute the pos 0 value, i.e. pad position for module orient = 0 i.e.
|
return true;
|
||||||
* refer to module origin (module position) */
|
}
|
||||||
m_CurrentPad->m_Pos0 = m_CurrentPad->m_Pos;
|
|
||||||
m_CurrentPad->m_Pos0 -= Module->m_Pos;
|
|
||||||
m_CurrentPad->m_Orient = g_Pad_Master.m_Orient + Module->m_Orient;
|
|
||||||
RotatePoint( &m_CurrentPad->m_Pos0.x, &m_CurrentPad->m_Pos0.y, -Module->m_Orient );
|
|
||||||
|
|
||||||
m_CurrentPad->m_Size = g_Pad_Master.m_Size;
|
|
||||||
m_CurrentPad->m_DeltaSize = g_Pad_Master.m_DeltaSize;
|
// Called when a dimension has change.
|
||||||
m_CurrentPad->m_Drill = g_Pad_Master.m_Drill;
|
// Update the pad dimensions shown in the panel.
|
||||||
m_CurrentPad->m_DrillShape = g_Pad_Master.m_DrillShape;
|
void DIALOG_PAD_PROPERTIES::OnValuesChanged( wxCommandEvent& event )
|
||||||
m_CurrentPad->m_Offset = g_Pad_Master.m_Offset;
|
|
||||||
if( m_CurrentPad->m_Masque_Layer != g_Pad_Master.m_Masque_Layer )
|
|
||||||
{
|
{
|
||||||
RastnestIsChanged = true;
|
if( m_canUpdate )
|
||||||
m_CurrentPad->m_Masque_Layer = g_Pad_Master.m_Masque_Layer;
|
|
||||||
}
|
|
||||||
m_CurrentPad->SetPadName( g_Current_PadName );
|
|
||||||
|
|
||||||
if( m_CurrentPad->GetNetname() != Current_PadNetName )
|
|
||||||
{
|
{
|
||||||
if( Current_PadNetName.IsEmpty() )
|
TransfertDataToPad( m_dummyPad );
|
||||||
{
|
m_panelShowPad->Refresh();
|
||||||
m_CurrentPad->SetNet( 0 );
|
|
||||||
m_CurrentPad->SetNetname( Current_PadNetName );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const NETINFO_ITEM* net = m_Parent->GetBoard()->FindNet( Current_PadNetName );
|
|
||||||
if( net )
|
|
||||||
{
|
|
||||||
RastnestIsChanged = true;
|
|
||||||
m_CurrentPad->SetNetname( Current_PadNetName );
|
|
||||||
m_CurrentPad->SetNet( net->GetNet() );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
DisplayError( NULL, _( "Unknown netname, no change" ) );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_CurrentPad->m_LocalClearance = g_Pad_Master.m_LocalClearance;
|
|
||||||
m_CurrentPad->m_LocalSolderMaskMargin = g_Pad_Master.m_LocalSolderMaskMargin;
|
|
||||||
m_CurrentPad->m_LocalSolderPasteMargin = g_Pad_Master.m_LocalSolderPasteMargin;
|
|
||||||
m_CurrentPad->m_LocalSolderPasteMarginRatio = g_Pad_Master.m_LocalSolderPasteMarginRatio;
|
|
||||||
|
|
||||||
m_CurrentPad->ComputeRayon();
|
|
||||||
|
|
||||||
Module->Set_Rectangle_Encadrement();
|
|
||||||
m_CurrentPad->DisplayInfo( m_Parent );
|
|
||||||
// redraw the area where the pad was
|
|
||||||
m_Parent->DrawPanel->PostDirtyRect( m_CurrentPad->GetBoundingBox() );
|
|
||||||
m_Parent->OnModify();
|
|
||||||
}
|
|
||||||
|
|
||||||
EndModal( wxID_OK );
|
|
||||||
|
|
||||||
if( RastnestIsChanged ) // The net ratsnest must be recalculated
|
|
||||||
m_Parent->GetBoard()->m_Status_Pcb = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************************************************/
|
/*********************************************************************/
|
||||||
void DIALOG_PAD_PROPERTIES::OnCancelButtonClick( wxCommandEvent& event )
|
void DIALOG_PAD_PROPERTIES::OnCancelButtonClick( wxCommandEvent& event )
|
||||||
|
@ -678,4 +871,3 @@ void DIALOG_PAD_PROPERTIES::OnCancelButtonClick( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
EndModal( wxID_CANCEL );
|
EndModal( wxID_CANCEL );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -176,7 +176,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
||||||
|
|
||||||
m_LeftBoxSizer->Add( sbSizer2, 1, wxEXPAND, 5 );
|
m_LeftBoxSizer->Add( sbSizer2, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
bGeneralSizer->Add( m_LeftBoxSizer, 0, wxBOTTOM|wxLEFT, 5 );
|
bGeneralSizer->Add( m_LeftBoxSizer, 0, wxBOTTOM|wxLEFT|wxEXPAND, 5 );
|
||||||
|
|
||||||
wxBoxSizer* bMiddleSizer;
|
wxBoxSizer* bMiddleSizer;
|
||||||
bMiddleSizer = new wxBoxSizer( wxVERTICAL );
|
bMiddleSizer = new wxBoxSizer( wxVERTICAL );
|
||||||
|
@ -196,14 +196,14 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
||||||
int m_DrillShapeCtrlNChoices = sizeof( m_DrillShapeCtrlChoices ) / sizeof( wxString );
|
int m_DrillShapeCtrlNChoices = sizeof( m_DrillShapeCtrlChoices ) / sizeof( wxString );
|
||||||
m_DrillShapeCtrl = new wxRadioBox( this, ID_RADIOBOX_DRILL_SHAPE, _("Drill Shape:"), wxDefaultPosition, wxDefaultSize, m_DrillShapeCtrlNChoices, m_DrillShapeCtrlChoices, 1, wxRA_SPECIFY_COLS );
|
m_DrillShapeCtrl = new wxRadioBox( this, ID_RADIOBOX_DRILL_SHAPE, _("Drill Shape:"), wxDefaultPosition, wxDefaultSize, m_DrillShapeCtrlNChoices, m_DrillShapeCtrlChoices, 1, wxRA_SPECIFY_COLS );
|
||||||
m_DrillShapeCtrl->SetSelection( 0 );
|
m_DrillShapeCtrl->SetSelection( 0 );
|
||||||
m_DrillShapeBoxSizer->Add( m_DrillShapeCtrl, 0, wxALL|wxEXPAND, 5 );
|
m_DrillShapeBoxSizer->Add( m_DrillShapeCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
bMiddleUpperSizer->Add( m_DrillShapeBoxSizer, 1, wxBOTTOM, 5 );
|
bMiddleUpperSizer->Add( m_DrillShapeBoxSizer, 0, wxBOTTOM, 5 );
|
||||||
|
|
||||||
wxBoxSizer* m_MiddleRightBoxSizer;
|
wxBoxSizer* m_MiddleRightBoxSizer;
|
||||||
m_MiddleRightBoxSizer = new wxBoxSizer( wxVERTICAL );
|
m_MiddleRightBoxSizer = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
wxString m_PadOrientChoices[] = { _("0"), _("90"), _("-90"), _("180"), _("User") };
|
wxString m_PadOrientChoices[] = { _("0"), _("90"), _("-90"), _("180"), _("Custom") };
|
||||||
int m_PadOrientNChoices = sizeof( m_PadOrientChoices ) / sizeof( wxString );
|
int m_PadOrientNChoices = sizeof( m_PadOrientChoices ) / sizeof( wxString );
|
||||||
m_PadOrient = new wxRadioBox( this, ID_LISTBOX_ORIENT_PAD, _("Pad Orient:"), wxDefaultPosition, wxDefaultSize, m_PadOrientNChoices, m_PadOrientChoices, 1, wxRA_SPECIFY_COLS );
|
m_PadOrient = new wxRadioBox( this, ID_LISTBOX_ORIENT_PAD, _("Pad Orient:"), wxDefaultPosition, wxDefaultSize, m_PadOrientNChoices, m_PadOrientChoices, 1, wxRA_SPECIFY_COLS );
|
||||||
m_PadOrient->SetSelection( 0 );
|
m_PadOrient->SetSelection( 0 );
|
||||||
|
@ -216,18 +216,52 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
||||||
m_PadOrientCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
m_PadOrientCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_MiddleRightBoxSizer->Add( m_PadOrientCtrl, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
m_MiddleRightBoxSizer->Add( m_PadOrientCtrl, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
bMiddleUpperSizer->Add( m_MiddleRightBoxSizer, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
bMiddleUpperSizer->Add( m_MiddleRightBoxSizer, 0, wxBOTTOM, 5 );
|
||||||
|
|
||||||
bMiddleSizer->Add( bMiddleUpperSizer, 0, wxEXPAND, 5 );
|
m_panelShowPad = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE|wxSIMPLE_BORDER|wxTAB_TRAVERSAL );
|
||||||
|
m_panelShowPad->SetBackgroundColour( wxColour( 0, 0, 0 ) );
|
||||||
|
|
||||||
|
bMiddleUpperSizer->Add( m_panelShowPad, 1, wxEXPAND | wxALL, 5 );
|
||||||
|
|
||||||
|
bMiddleSizer->Add( bMiddleUpperSizer, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
wxStaticBoxSizer* sbSizeModuleInfo;
|
||||||
|
sbSizeModuleInfo = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Footprint orientation") ), wxVERTICAL );
|
||||||
|
|
||||||
|
wxFlexGridSizer* fgSizer4;
|
||||||
|
fgSizer4 = new wxFlexGridSizer( 2, 2, 0, 0 );
|
||||||
|
fgSizer4->AddGrowableCol( 1 );
|
||||||
|
fgSizer4->SetFlexibleDirection( wxBOTH );
|
||||||
|
fgSizer4->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||||
|
|
||||||
|
m_staticTitleModuleRot = new wxStaticText( this, wxID_ANY, _("Rotation:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_staticTitleModuleRot->Wrap( -1 );
|
||||||
|
fgSizer4->Add( m_staticTitleModuleRot, 0, wxALIGN_RIGHT|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
|
m_staticModuleRotValue = new wxStaticText( this, wxID_ANY, _("0"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_staticModuleRotValue->Wrap( -1 );
|
||||||
|
fgSizer4->Add( m_staticModuleRotValue, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
|
m_staticTitleModuleSide = new wxStaticText( this, wxID_ANY, _("Board side:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_staticTitleModuleSide->Wrap( -1 );
|
||||||
|
fgSizer4->Add( m_staticTitleModuleSide, 0, wxALL|wxALIGN_RIGHT, 5 );
|
||||||
|
|
||||||
|
m_staticModuleSideValue = new wxStaticText( this, wxID_ANY, _("Front side"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_staticModuleSideValue->Wrap( -1 );
|
||||||
|
fgSizer4->Add( m_staticModuleSideValue, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
sbSizeModuleInfo->Add( fgSizer4, 0, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
bMiddleSizer->Add( sbSizeModuleInfo, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
wxStaticBoxSizer* sbClearancesSizer;
|
wxStaticBoxSizer* sbClearancesSizer;
|
||||||
sbClearancesSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Clearances:") ), wxVERTICAL );
|
sbClearancesSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Clearances:") ), wxVERTICAL );
|
||||||
|
|
||||||
m_staticText20 = new wxStaticText( this, wxID_ANY, _("Set these values to 0\nto use Parent footprint or global values"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_staticTextWarning = new wxStaticText( this, wxID_ANY, _("Set these values to 0\nto use Parent footprint or global values"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_staticText20->Wrap( -1 );
|
m_staticTextWarning->Wrap( -1 );
|
||||||
m_staticText20->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
|
m_staticTextWarning->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
|
||||||
|
|
||||||
sbClearancesSizer->Add( m_staticText20, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
sbClearancesSizer->Add( m_staticTextWarning, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
wxFlexGridSizer* fgClearancesGridSizer;
|
wxFlexGridSizer* fgClearancesGridSizer;
|
||||||
fgClearancesGridSizer = new wxFlexGridSizer( 5, 3, 0, 0 );
|
fgClearancesGridSizer = new wxFlexGridSizer( 5, 3, 0, 0 );
|
||||||
|
@ -248,13 +282,13 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
||||||
fgClearancesGridSizer->Add( m_NetClearanceUnits, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
|
fgClearancesGridSizer->Add( m_NetClearanceUnits, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||||
fgClearancesGridSizer->Add( m_staticline1, 0, wxEXPAND|wxALL, 5 );
|
fgClearancesGridSizer->Add( m_staticline1, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||||
fgClearancesGridSizer->Add( m_staticline2, 0, wxEXPAND | wxALL, 5 );
|
fgClearancesGridSizer->Add( m_staticline2, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||||
fgClearancesGridSizer->Add( m_staticline3, 0, wxEXPAND | wxALL, 5 );
|
fgClearancesGridSizer->Add( m_staticline3, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_MaskClearanceTitle = new wxStaticText( this, wxID_ANY, _("Solder mask clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_MaskClearanceTitle = new wxStaticText( this, wxID_ANY, _("Solder mask clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_MaskClearanceTitle->Wrap( -1 );
|
m_MaskClearanceTitle->Wrap( -1 );
|
||||||
|
@ -297,7 +331,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
||||||
|
|
||||||
sbClearancesSizer->Add( fgClearancesGridSizer, 1, wxEXPAND, 5 );
|
sbClearancesSizer->Add( fgClearancesGridSizer, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
bMiddleSizer->Add( sbClearancesSizer, 0, wxEXPAND, 5 );
|
bMiddleSizer->Add( sbClearancesSizer, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
bGeneralSizer->Add( bMiddleSizer, 1, wxEXPAND, 5 );
|
bGeneralSizer->Add( bMiddleSizer, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
@ -370,7 +404,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
||||||
|
|
||||||
m_RightBoxSizer->Add( m_LayersSizer, 0, 0, 5 );
|
m_RightBoxSizer->Add( m_LayersSizer, 0, 0, 5 );
|
||||||
|
|
||||||
bGeneralSizer->Add( m_RightBoxSizer, 0, wxBOTTOM|wxRIGHT, 5 );
|
bGeneralSizer->Add( m_RightBoxSizer, 0, wxBOTTOM|wxRIGHT|wxEXPAND, 5 );
|
||||||
|
|
||||||
m_MainSizer->Add( bGeneralSizer, 1, wxEXPAND, 5 );
|
m_MainSizer->Add( bGeneralSizer, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
@ -380,7 +414,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
||||||
m_sdbSizer1Cancel = new wxButton( this, wxID_CANCEL );
|
m_sdbSizer1Cancel = new wxButton( this, wxID_CANCEL );
|
||||||
m_sdbSizer1->AddButton( m_sdbSizer1Cancel );
|
m_sdbSizer1->AddButton( m_sdbSizer1Cancel );
|
||||||
m_sdbSizer1->Realize();
|
m_sdbSizer1->Realize();
|
||||||
m_MainSizer->Add( m_sdbSizer1, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
|
m_MainSizer->Add( m_sdbSizer1, 0, wxTOP|wxBOTTOM|wxEXPAND, 5 );
|
||||||
|
|
||||||
this->SetSizer( m_MainSizer );
|
this->SetSizer( m_MainSizer );
|
||||||
this->Layout();
|
this->Layout();
|
||||||
|
@ -388,10 +422,36 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
||||||
this->Centre( wxBOTH );
|
this->Centre( wxBOTH );
|
||||||
|
|
||||||
// Connect Events
|
// Connect Events
|
||||||
|
m_PadNumCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_PadNetNameCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_PadDrill_X_Ctrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_PadDrill_Y_Ctrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_ShapeSize_X_Ctrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_ShapeSize_Y_Ctrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_ShapeOffset_X_Ctrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_ShapeOffset_Y_Ctrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_ShapeDelta_X_Ctrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_ShapeDelta_Y_Ctrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
m_PadShape->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnPadShapeSelection ), NULL, this );
|
m_PadShape->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnPadShapeSelection ), NULL, this );
|
||||||
m_DrillShapeCtrl->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnDrillShapeSelected ), NULL, this );
|
m_DrillShapeCtrl->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnDrillShapeSelected ), NULL, this );
|
||||||
m_PadOrient->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::PadOrientEvent ), NULL, this );
|
m_PadOrient->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::PadOrientEvent ), NULL, this );
|
||||||
|
m_PadOrientCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_panelShowPad->Connect( wxEVT_PAINT, wxPaintEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnPaintShowPanel ), NULL, this );
|
||||||
|
m_NetClearanceValueCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
m_PadType->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::PadTypeSelected ), NULL, this );
|
m_PadType->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::PadTypeSelected ), NULL, this );
|
||||||
|
m_PadLayerCmp->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerCu->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerAdhCmp->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerAdhCu->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerPateCmp->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerPateCu->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerSilkCmp->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerSilkCu->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerMaskCmp->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerMaskCu->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerDraft->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerECO1->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerECO2->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnCancelButtonClick ), NULL, this );
|
m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnCancelButtonClick ), NULL, this );
|
||||||
m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::PadPropertiesAccept ), NULL, this );
|
m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::PadPropertiesAccept ), NULL, this );
|
||||||
}
|
}
|
||||||
|
@ -399,10 +459,36 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
||||||
DIALOG_PAD_PROPERTIES_BASE::~DIALOG_PAD_PROPERTIES_BASE()
|
DIALOG_PAD_PROPERTIES_BASE::~DIALOG_PAD_PROPERTIES_BASE()
|
||||||
{
|
{
|
||||||
// Disconnect Events
|
// Disconnect Events
|
||||||
|
m_PadNumCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_PadNetNameCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_PadDrill_X_Ctrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_PadDrill_Y_Ctrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_ShapeSize_X_Ctrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_ShapeSize_Y_Ctrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_ShapeOffset_X_Ctrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_ShapeOffset_Y_Ctrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_ShapeDelta_X_Ctrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_ShapeDelta_Y_Ctrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
m_PadShape->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnPadShapeSelection ), NULL, this );
|
m_PadShape->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnPadShapeSelection ), NULL, this );
|
||||||
m_DrillShapeCtrl->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnDrillShapeSelected ), NULL, this );
|
m_DrillShapeCtrl->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnDrillShapeSelected ), NULL, this );
|
||||||
m_PadOrient->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::PadOrientEvent ), NULL, this );
|
m_PadOrient->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::PadOrientEvent ), NULL, this );
|
||||||
|
m_PadOrientCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
|
m_panelShowPad->Disconnect( wxEVT_PAINT, wxPaintEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnPaintShowPanel ), NULL, this );
|
||||||
|
m_NetClearanceValueCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
|
||||||
m_PadType->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::PadTypeSelected ), NULL, this );
|
m_PadType->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::PadTypeSelected ), NULL, this );
|
||||||
|
m_PadLayerCmp->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerCu->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerAdhCmp->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerAdhCu->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerPateCmp->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerPateCu->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerSilkCmp->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerSilkCu->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerMaskCmp->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerMaskCu->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerDraft->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerECO1->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
|
m_PadLayerECO2->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayer ), NULL, this );
|
||||||
m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnCancelButtonClick ), NULL, this );
|
m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnCancelButtonClick ), NULL, this );
|
||||||
m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::PadPropertiesAccept ), NULL, this );
|
m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::PadPropertiesAccept ), NULL, this );
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
<property name="name">DIALOG_PAD_PROPERTIES_BASE</property>
|
<property name="name">DIALOG_PAD_PROPERTIES_BASE</property>
|
||||||
<property name="pos"></property>
|
<property name="pos"></property>
|
||||||
<property name="size">673,488</property>
|
<property name="size">733,486</property>
|
||||||
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
|
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
|
||||||
<property name="subclass"></property>
|
<property name="subclass"></property>
|
||||||
<property name="title">Pad Properties</property>
|
<property name="title">Pad Properties</property>
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
<property name="permission">none</property>
|
<property name="permission">none</property>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxBOTTOM|wxLEFT</property>
|
<property name="flag">wxBOTTOM|wxLEFT|wxEXPAND</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxBoxSizer" expanded="1">
|
<object class="wxBoxSizer" expanded="1">
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
|
@ -192,7 +192,7 @@
|
||||||
<event name="OnRightUp"></event>
|
<event name="OnRightUp"></event>
|
||||||
<event name="OnSetFocus"></event>
|
<event name="OnSetFocus"></event>
|
||||||
<event name="OnSize"></event>
|
<event name="OnSize"></event>
|
||||||
<event name="OnText"></event>
|
<event name="OnText">OnValuesChanged</event>
|
||||||
<event name="OnTextEnter"></event>
|
<event name="OnTextEnter"></event>
|
||||||
<event name="OnTextMaxLen"></event>
|
<event name="OnTextMaxLen"></event>
|
||||||
<event name="OnTextURL"></event>
|
<event name="OnTextURL"></event>
|
||||||
|
@ -298,7 +298,7 @@
|
||||||
<event name="OnRightUp"></event>
|
<event name="OnRightUp"></event>
|
||||||
<event name="OnSetFocus"></event>
|
<event name="OnSetFocus"></event>
|
||||||
<event name="OnSize"></event>
|
<event name="OnSize"></event>
|
||||||
<event name="OnText"></event>
|
<event name="OnText">OnValuesChanged</event>
|
||||||
<event name="OnTextEnter"></event>
|
<event name="OnTextEnter"></event>
|
||||||
<event name="OnTextMaxLen"></event>
|
<event name="OnTextMaxLen"></event>
|
||||||
<event name="OnTextURL"></event>
|
<event name="OnTextURL"></event>
|
||||||
|
@ -321,7 +321,7 @@
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND</property>
|
<property name="flag">wxEXPAND</property>
|
||||||
<property name="proportion">1</property>
|
<property name="proportion">1</property>
|
||||||
<object class="wxFlexGridSizer" expanded="1">
|
<object class="wxFlexGridSizer" expanded="0">
|
||||||
<property name="cols">3</property>
|
<property name="cols">3</property>
|
||||||
<property name="flexible_direction">wxBOTH</property>
|
<property name="flexible_direction">wxBOTH</property>
|
||||||
<property name="growablecols"></property>
|
<property name="growablecols"></property>
|
||||||
|
@ -893,7 +893,7 @@
|
||||||
<event name="OnRightUp"></event>
|
<event name="OnRightUp"></event>
|
||||||
<event name="OnSetFocus"></event>
|
<event name="OnSetFocus"></event>
|
||||||
<event name="OnSize"></event>
|
<event name="OnSize"></event>
|
||||||
<event name="OnText"></event>
|
<event name="OnText">OnValuesChanged</event>
|
||||||
<event name="OnTextEnter"></event>
|
<event name="OnTextEnter"></event>
|
||||||
<event name="OnTextMaxLen"></event>
|
<event name="OnTextMaxLen"></event>
|
||||||
<event name="OnTextURL"></event>
|
<event name="OnTextURL"></event>
|
||||||
|
@ -1050,7 +1050,7 @@
|
||||||
<event name="OnRightUp"></event>
|
<event name="OnRightUp"></event>
|
||||||
<event name="OnSetFocus"></event>
|
<event name="OnSetFocus"></event>
|
||||||
<event name="OnSize"></event>
|
<event name="OnSize"></event>
|
||||||
<event name="OnText"></event>
|
<event name="OnText">OnValuesChanged</event>
|
||||||
<event name="OnTextEnter"></event>
|
<event name="OnTextEnter"></event>
|
||||||
<event name="OnTextMaxLen"></event>
|
<event name="OnTextMaxLen"></event>
|
||||||
<event name="OnTextURL"></event>
|
<event name="OnTextURL"></event>
|
||||||
|
@ -1354,7 +1354,7 @@
|
||||||
<event name="OnRightUp"></event>
|
<event name="OnRightUp"></event>
|
||||||
<event name="OnSetFocus"></event>
|
<event name="OnSetFocus"></event>
|
||||||
<event name="OnSize"></event>
|
<event name="OnSize"></event>
|
||||||
<event name="OnText"></event>
|
<event name="OnText">OnValuesChanged</event>
|
||||||
<event name="OnTextEnter"></event>
|
<event name="OnTextEnter"></event>
|
||||||
<event name="OnTextMaxLen"></event>
|
<event name="OnTextMaxLen"></event>
|
||||||
<event name="OnTextURL"></event>
|
<event name="OnTextURL"></event>
|
||||||
|
@ -1511,7 +1511,7 @@
|
||||||
<event name="OnRightUp"></event>
|
<event name="OnRightUp"></event>
|
||||||
<event name="OnSetFocus"></event>
|
<event name="OnSetFocus"></event>
|
||||||
<event name="OnSize"></event>
|
<event name="OnSize"></event>
|
||||||
<event name="OnText"></event>
|
<event name="OnText">OnValuesChanged</event>
|
||||||
<event name="OnTextEnter"></event>
|
<event name="OnTextEnter"></event>
|
||||||
<event name="OnTextMaxLen"></event>
|
<event name="OnTextMaxLen"></event>
|
||||||
<event name="OnTextURL"></event>
|
<event name="OnTextURL"></event>
|
||||||
|
@ -1668,7 +1668,7 @@
|
||||||
<event name="OnRightUp"></event>
|
<event name="OnRightUp"></event>
|
||||||
<event name="OnSetFocus"></event>
|
<event name="OnSetFocus"></event>
|
||||||
<event name="OnSize"></event>
|
<event name="OnSize"></event>
|
||||||
<event name="OnText"></event>
|
<event name="OnText">OnValuesChanged</event>
|
||||||
<event name="OnTextEnter"></event>
|
<event name="OnTextEnter"></event>
|
||||||
<event name="OnTextMaxLen"></event>
|
<event name="OnTextMaxLen"></event>
|
||||||
<event name="OnTextURL"></event>
|
<event name="OnTextURL"></event>
|
||||||
|
@ -1825,7 +1825,7 @@
|
||||||
<event name="OnRightUp"></event>
|
<event name="OnRightUp"></event>
|
||||||
<event name="OnSetFocus"></event>
|
<event name="OnSetFocus"></event>
|
||||||
<event name="OnSize"></event>
|
<event name="OnSize"></event>
|
||||||
<event name="OnText"></event>
|
<event name="OnText">OnValuesChanged</event>
|
||||||
<event name="OnTextEnter"></event>
|
<event name="OnTextEnter"></event>
|
||||||
<event name="OnTextMaxLen"></event>
|
<event name="OnTextMaxLen"></event>
|
||||||
<event name="OnTextURL"></event>
|
<event name="OnTextURL"></event>
|
||||||
|
@ -1982,7 +1982,7 @@
|
||||||
<event name="OnRightUp"></event>
|
<event name="OnRightUp"></event>
|
||||||
<event name="OnSetFocus"></event>
|
<event name="OnSetFocus"></event>
|
||||||
<event name="OnSize"></event>
|
<event name="OnSize"></event>
|
||||||
<event name="OnText"></event>
|
<event name="OnText">OnValuesChanged</event>
|
||||||
<event name="OnTextEnter"></event>
|
<event name="OnTextEnter"></event>
|
||||||
<event name="OnTextMaxLen"></event>
|
<event name="OnTextMaxLen"></event>
|
||||||
<event name="OnTextURL"></event>
|
<event name="OnTextURL"></event>
|
||||||
|
@ -2139,7 +2139,7 @@
|
||||||
<event name="OnRightUp"></event>
|
<event name="OnRightUp"></event>
|
||||||
<event name="OnSetFocus"></event>
|
<event name="OnSetFocus"></event>
|
||||||
<event name="OnSize"></event>
|
<event name="OnSize"></event>
|
||||||
<event name="OnText"></event>
|
<event name="OnText">OnValuesChanged</event>
|
||||||
<event name="OnTextEnter"></event>
|
<event name="OnTextEnter"></event>
|
||||||
<event name="OnTextMaxLen"></event>
|
<event name="OnTextMaxLen"></event>
|
||||||
<event name="OnTextURL"></event>
|
<event name="OnTextURL"></event>
|
||||||
|
@ -2215,7 +2215,7 @@
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND</property>
|
<property name="flag">wxEXPAND</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">1</property>
|
||||||
<object class="wxBoxSizer" expanded="1">
|
<object class="wxBoxSizer" expanded="1">
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
<property name="name">bMiddleUpperSizer</property>
|
<property name="name">bMiddleUpperSizer</property>
|
||||||
|
@ -2224,7 +2224,7 @@
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxBOTTOM</property>
|
<property name="flag">wxBOTTOM</property>
|
||||||
<property name="proportion">1</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxBoxSizer" expanded="1">
|
<object class="wxBoxSizer" expanded="1">
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
<property name="name">m_DrillShapeBoxSizer</property>
|
<property name="name">m_DrillShapeBoxSizer</property>
|
||||||
|
@ -2286,7 +2286,7 @@
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL|wxEXPAND</property>
|
<property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxRadioBox" expanded="1">
|
<object class="wxRadioBox" expanded="1">
|
||||||
<property name="bg"></property>
|
<property name="bg"></property>
|
||||||
|
@ -2342,7 +2342,7 @@
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT</property>
|
<property name="flag">wxBOTTOM</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxBoxSizer" expanded="1">
|
<object class="wxBoxSizer" expanded="1">
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
|
@ -2355,7 +2355,7 @@
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxRadioBox" expanded="1">
|
<object class="wxRadioBox" expanded="1">
|
||||||
<property name="bg"></property>
|
<property name="bg"></property>
|
||||||
<property name="choices">"0" "90" "-90" "180" "User"</property>
|
<property name="choices">"0" "90" "-90" "180" "Custom"</property>
|
||||||
<property name="context_help"></property>
|
<property name="context_help"></property>
|
||||||
<property name="enabled">1</property>
|
<property name="enabled">1</property>
|
||||||
<property name="fg"></property>
|
<property name="fg"></property>
|
||||||
|
@ -2502,7 +2502,7 @@
|
||||||
<event name="OnRightUp"></event>
|
<event name="OnRightUp"></event>
|
||||||
<event name="OnSetFocus"></event>
|
<event name="OnSetFocus"></event>
|
||||||
<event name="OnSize"></event>
|
<event name="OnSize"></event>
|
||||||
<event name="OnText"></event>
|
<event name="OnText">OnValuesChanged</event>
|
||||||
<event name="OnTextEnter"></event>
|
<event name="OnTextEnter"></event>
|
||||||
<event name="OnTextMaxLen"></event>
|
<event name="OnTextMaxLen"></event>
|
||||||
<event name="OnTextURL"></event>
|
<event name="OnTextURL"></event>
|
||||||
|
@ -2511,11 +2511,295 @@
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxEXPAND | wxALL</property>
|
||||||
|
<property name="proportion">1</property>
|
||||||
|
<object class="wxPanel" expanded="1">
|
||||||
|
<property name="bg">0,0,0</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="name">m_panelShowPad</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="subclass"></property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style">wxFULL_REPAINT_ON_RESIZE|wxSIMPLE_BORDER|wxTAB_TRAVERSAL</property>
|
||||||
|
<event name="OnChar"></event>
|
||||||
|
<event name="OnEnterWindow"></event>
|
||||||
|
<event name="OnEraseBackground"></event>
|
||||||
|
<event name="OnKeyDown"></event>
|
||||||
|
<event name="OnKeyUp"></event>
|
||||||
|
<event name="OnKillFocus"></event>
|
||||||
|
<event name="OnLeaveWindow"></event>
|
||||||
|
<event name="OnLeftDClick"></event>
|
||||||
|
<event name="OnLeftDown"></event>
|
||||||
|
<event name="OnLeftUp"></event>
|
||||||
|
<event name="OnMiddleDClick"></event>
|
||||||
|
<event name="OnMiddleDown"></event>
|
||||||
|
<event name="OnMiddleUp"></event>
|
||||||
|
<event name="OnMotion"></event>
|
||||||
|
<event name="OnMouseEvents"></event>
|
||||||
|
<event name="OnMouseWheel"></event>
|
||||||
|
<event name="OnPaint">OnPaintShowPanel</event>
|
||||||
|
<event name="OnRightDClick"></event>
|
||||||
|
<event name="OnRightDown"></event>
|
||||||
|
<event name="OnRightUp"></event>
|
||||||
|
<event name="OnSetFocus"></event>
|
||||||
|
<event name="OnSize"></event>
|
||||||
|
<event name="OnUpdateUI"></event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxStaticBoxSizer" expanded="1">
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">Footprint orientation</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="name">sbSizeModuleInfo</property>
|
||||||
|
<property name="orient">wxVERTICAL</property>
|
||||||
|
<property name="permission">none</property>
|
||||||
|
<event name="OnUpdateUI"></event>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxEXPAND</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxFlexGridSizer" expanded="1">
|
||||||
|
<property name="cols">2</property>
|
||||||
|
<property name="flexible_direction">wxBOTH</property>
|
||||||
|
<property name="growablecols">1</property>
|
||||||
|
<property name="growablerows"></property>
|
||||||
|
<property name="hgap">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="name">fgSizer4</property>
|
||||||
|
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
|
||||||
|
<property name="permission">none</property>
|
||||||
|
<property name="rows">2</property>
|
||||||
|
<property name="vgap">0</property>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALIGN_RIGHT|wxTOP|wxRIGHT|wxLEFT</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxStaticText" expanded="1">
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">Rotation:</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="name">m_staticTitleModuleRot</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass"></property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<property name="wrap">-1</property>
|
||||||
|
<event name="OnChar"></event>
|
||||||
|
<event name="OnEnterWindow"></event>
|
||||||
|
<event name="OnEraseBackground"></event>
|
||||||
|
<event name="OnKeyDown"></event>
|
||||||
|
<event name="OnKeyUp"></event>
|
||||||
|
<event name="OnKillFocus"></event>
|
||||||
|
<event name="OnLeaveWindow"></event>
|
||||||
|
<event name="OnLeftDClick"></event>
|
||||||
|
<event name="OnLeftDown"></event>
|
||||||
|
<event name="OnLeftUp"></event>
|
||||||
|
<event name="OnMiddleDClick"></event>
|
||||||
|
<event name="OnMiddleDown"></event>
|
||||||
|
<event name="OnMiddleUp"></event>
|
||||||
|
<event name="OnMotion"></event>
|
||||||
|
<event name="OnMouseEvents"></event>
|
||||||
|
<event name="OnMouseWheel"></event>
|
||||||
|
<event name="OnPaint"></event>
|
||||||
|
<event name="OnRightDClick"></event>
|
||||||
|
<event name="OnRightDown"></event>
|
||||||
|
<event name="OnRightUp"></event>
|
||||||
|
<event name="OnSetFocus"></event>
|
||||||
|
<event name="OnSize"></event>
|
||||||
|
<event name="OnUpdateUI"></event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxStaticText" expanded="1">
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="name">m_staticModuleRotValue</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass"></property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<property name="wrap">-1</property>
|
||||||
|
<event name="OnChar"></event>
|
||||||
|
<event name="OnEnterWindow"></event>
|
||||||
|
<event name="OnEraseBackground"></event>
|
||||||
|
<event name="OnKeyDown"></event>
|
||||||
|
<event name="OnKeyUp"></event>
|
||||||
|
<event name="OnKillFocus"></event>
|
||||||
|
<event name="OnLeaveWindow"></event>
|
||||||
|
<event name="OnLeftDClick"></event>
|
||||||
|
<event name="OnLeftDown"></event>
|
||||||
|
<event name="OnLeftUp"></event>
|
||||||
|
<event name="OnMiddleDClick"></event>
|
||||||
|
<event name="OnMiddleDown"></event>
|
||||||
|
<event name="OnMiddleUp"></event>
|
||||||
|
<event name="OnMotion"></event>
|
||||||
|
<event name="OnMouseEvents"></event>
|
||||||
|
<event name="OnMouseWheel"></event>
|
||||||
|
<event name="OnPaint"></event>
|
||||||
|
<event name="OnRightDClick"></event>
|
||||||
|
<event name="OnRightDown"></event>
|
||||||
|
<event name="OnRightUp"></event>
|
||||||
|
<event name="OnSetFocus"></event>
|
||||||
|
<event name="OnSize"></event>
|
||||||
|
<event name="OnUpdateUI"></event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALL|wxALIGN_RIGHT</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxStaticText" expanded="1">
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">Board side:</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="name">m_staticTitleModuleSide</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass"></property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<property name="wrap">-1</property>
|
||||||
|
<event name="OnChar"></event>
|
||||||
|
<event name="OnEnterWindow"></event>
|
||||||
|
<event name="OnEraseBackground"></event>
|
||||||
|
<event name="OnKeyDown"></event>
|
||||||
|
<event name="OnKeyUp"></event>
|
||||||
|
<event name="OnKillFocus"></event>
|
||||||
|
<event name="OnLeaveWindow"></event>
|
||||||
|
<event name="OnLeftDClick"></event>
|
||||||
|
<event name="OnLeftDown"></event>
|
||||||
|
<event name="OnLeftUp"></event>
|
||||||
|
<event name="OnMiddleDClick"></event>
|
||||||
|
<event name="OnMiddleDown"></event>
|
||||||
|
<event name="OnMiddleUp"></event>
|
||||||
|
<event name="OnMotion"></event>
|
||||||
|
<event name="OnMouseEvents"></event>
|
||||||
|
<event name="OnMouseWheel"></event>
|
||||||
|
<event name="OnPaint"></event>
|
||||||
|
<event name="OnRightDClick"></event>
|
||||||
|
<event name="OnRightDown"></event>
|
||||||
|
<event name="OnRightUp"></event>
|
||||||
|
<event name="OnSetFocus"></event>
|
||||||
|
<event name="OnSize"></event>
|
||||||
|
<event name="OnUpdateUI"></event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALL</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxStaticText" expanded="1">
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">Front side</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="name">m_staticModuleSideValue</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass"></property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<property name="wrap">-1</property>
|
||||||
|
<event name="OnChar"></event>
|
||||||
|
<event name="OnEnterWindow"></event>
|
||||||
|
<event name="OnEraseBackground"></event>
|
||||||
|
<event name="OnKeyDown"></event>
|
||||||
|
<event name="OnKeyUp"></event>
|
||||||
|
<event name="OnKillFocus"></event>
|
||||||
|
<event name="OnLeaveWindow"></event>
|
||||||
|
<event name="OnLeftDClick"></event>
|
||||||
|
<event name="OnLeftDown"></event>
|
||||||
|
<event name="OnLeftUp"></event>
|
||||||
|
<event name="OnMiddleDClick"></event>
|
||||||
|
<event name="OnMiddleDown"></event>
|
||||||
|
<event name="OnMiddleUp"></event>
|
||||||
|
<event name="OnMotion"></event>
|
||||||
|
<event name="OnMouseEvents"></event>
|
||||||
|
<event name="OnMouseWheel"></event>
|
||||||
|
<event name="OnPaint"></event>
|
||||||
|
<event name="OnRightDClick"></event>
|
||||||
|
<event name="OnRightDown"></event>
|
||||||
|
<event name="OnRightUp"></event>
|
||||||
|
<event name="OnSetFocus"></event>
|
||||||
|
<event name="OnSize"></event>
|
||||||
|
<event name="OnUpdateUI"></event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND</property>
|
<property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxStaticBoxSizer" expanded="1">
|
<object class="wxStaticBoxSizer" expanded="1">
|
||||||
<property name="id">wxID_ANY</property>
|
<property name="id">wxID_ANY</property>
|
||||||
|
@ -2540,7 +2824,7 @@
|
||||||
<property name="label">Set these values to 0
to use Parent footprint or global values</property>
|
<property name="label">Set these values to 0
to use Parent footprint or global values</property>
|
||||||
<property name="maximum_size"></property>
|
<property name="maximum_size"></property>
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
<property name="name">m_staticText20</property>
|
<property name="name">m_staticTextWarning</property>
|
||||||
<property name="permission">protected</property>
|
<property name="permission">protected</property>
|
||||||
<property name="pos"></property>
|
<property name="pos"></property>
|
||||||
<property name="size"></property>
|
<property name="size"></property>
|
||||||
|
@ -2691,7 +2975,7 @@
|
||||||
<event name="OnRightUp"></event>
|
<event name="OnRightUp"></event>
|
||||||
<event name="OnSetFocus"></event>
|
<event name="OnSetFocus"></event>
|
||||||
<event name="OnSize"></event>
|
<event name="OnSize"></event>
|
||||||
<event name="OnText"></event>
|
<event name="OnText">OnValuesChanged</event>
|
||||||
<event name="OnTextEnter"></event>
|
<event name="OnTextEnter"></event>
|
||||||
<event name="OnTextMaxLen"></event>
|
<event name="OnTextMaxLen"></event>
|
||||||
<event name="OnTextURL"></event>
|
<event name="OnTextURL"></event>
|
||||||
|
@ -2751,7 +3035,7 @@
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND|wxALL</property>
|
<property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxStaticLine" expanded="1">
|
<object class="wxStaticLine" expanded="1">
|
||||||
<property name="bg"></property>
|
<property name="bg"></property>
|
||||||
|
@ -2800,7 +3084,7 @@
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND | wxALL</property>
|
<property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxStaticLine" expanded="1">
|
<object class="wxStaticLine" expanded="1">
|
||||||
<property name="bg"></property>
|
<property name="bg"></property>
|
||||||
|
@ -2849,7 +3133,7 @@
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND | wxALL</property>
|
<property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxStaticLine" expanded="1">
|
<object class="wxStaticLine" expanded="1">
|
||||||
<property name="bg"></property>
|
<property name="bg"></property>
|
||||||
|
@ -3375,7 +3659,7 @@
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxBOTTOM|wxRIGHT</property>
|
<property name="flag">wxBOTTOM|wxRIGHT|wxEXPAND</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxBoxSizer" expanded="0">
|
<object class="wxBoxSizer" expanded="0">
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
|
@ -3475,7 +3759,7 @@
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnCheckBox"></event>
|
<event name="OnCheckBox">OnSetLayer</event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
<event name="OnKeyDown"></event>
|
<event name="OnKeyDown"></event>
|
||||||
|
@ -3527,7 +3811,7 @@
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnCheckBox"></event>
|
<event name="OnCheckBox">OnSetLayer</event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
<event name="OnKeyDown"></event>
|
<event name="OnKeyDown"></event>
|
||||||
|
@ -3589,7 +3873,7 @@
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnCheckBox"></event>
|
<event name="OnCheckBox">OnSetLayer</event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
<event name="OnKeyDown"></event>
|
<event name="OnKeyDown"></event>
|
||||||
|
@ -3641,7 +3925,7 @@
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnCheckBox"></event>
|
<event name="OnCheckBox">OnSetLayer</event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
<event name="OnKeyDown"></event>
|
<event name="OnKeyDown"></event>
|
||||||
|
@ -3693,7 +3977,7 @@
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnCheckBox"></event>
|
<event name="OnCheckBox">OnSetLayer</event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
<event name="OnKeyDown"></event>
|
<event name="OnKeyDown"></event>
|
||||||
|
@ -3745,7 +4029,7 @@
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnCheckBox"></event>
|
<event name="OnCheckBox">OnSetLayer</event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
<event name="OnKeyDown"></event>
|
<event name="OnKeyDown"></event>
|
||||||
|
@ -3797,7 +4081,7 @@
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnCheckBox"></event>
|
<event name="OnCheckBox">OnSetLayer</event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
<event name="OnKeyDown"></event>
|
<event name="OnKeyDown"></event>
|
||||||
|
@ -3849,7 +4133,7 @@
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnCheckBox"></event>
|
<event name="OnCheckBox">OnSetLayer</event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
<event name="OnKeyDown"></event>
|
<event name="OnKeyDown"></event>
|
||||||
|
@ -3901,7 +4185,7 @@
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnCheckBox"></event>
|
<event name="OnCheckBox">OnSetLayer</event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
<event name="OnKeyDown"></event>
|
<event name="OnKeyDown"></event>
|
||||||
|
@ -3953,7 +4237,7 @@
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnCheckBox"></event>
|
<event name="OnCheckBox">OnSetLayer</event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
<event name="OnKeyDown"></event>
|
<event name="OnKeyDown"></event>
|
||||||
|
@ -4005,7 +4289,7 @@
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnCheckBox"></event>
|
<event name="OnCheckBox">OnSetLayer</event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
<event name="OnKeyDown"></event>
|
<event name="OnKeyDown"></event>
|
||||||
|
@ -4057,7 +4341,7 @@
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnCheckBox"></event>
|
<event name="OnCheckBox">OnSetLayer</event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
<event name="OnKeyDown"></event>
|
<event name="OnKeyDown"></event>
|
||||||
|
@ -4109,7 +4393,7 @@
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnCheckBox"></event>
|
<event name="OnCheckBox">OnSetLayer</event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
<event name="OnKeyDown"></event>
|
<event name="OnKeyDown"></event>
|
||||||
|
@ -4142,7 +4426,7 @@
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND|wxTOP|wxBOTTOM</property>
|
<property name="flag">wxTOP|wxBOTTOM|wxEXPAND</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxStdDialogButtonSizer" expanded="1">
|
<object class="wxStdDialogButtonSizer" expanded="1">
|
||||||
<property name="Apply">0</property>
|
<property name="Apply">0</property>
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <wx/sizer.h>
|
#include <wx/sizer.h>
|
||||||
#include <wx/statbox.h>
|
#include <wx/statbox.h>
|
||||||
#include <wx/radiobox.h>
|
#include <wx/radiobox.h>
|
||||||
|
#include <wx/panel.h>
|
||||||
#include <wx/checkbox.h>
|
#include <wx/checkbox.h>
|
||||||
#include <wx/button.h>
|
#include <wx/button.h>
|
||||||
#include <wx/dialog.h>
|
#include <wx/dialog.h>
|
||||||
|
@ -92,7 +93,12 @@ class DIALOG_PAD_PROPERTIES_BASE : public wxDialog
|
||||||
wxRadioBox* m_PadOrient;
|
wxRadioBox* m_PadOrient;
|
||||||
wxStaticText* m_PadOrientText;
|
wxStaticText* m_PadOrientText;
|
||||||
wxTextCtrl* m_PadOrientCtrl;
|
wxTextCtrl* m_PadOrientCtrl;
|
||||||
wxStaticText* m_staticText20;
|
wxPanel* m_panelShowPad;
|
||||||
|
wxStaticText* m_staticTitleModuleRot;
|
||||||
|
wxStaticText* m_staticModuleRotValue;
|
||||||
|
wxStaticText* m_staticTitleModuleSide;
|
||||||
|
wxStaticText* m_staticModuleSideValue;
|
||||||
|
wxStaticText* m_staticTextWarning;
|
||||||
wxStaticText* m_staticTextNetClearance;
|
wxStaticText* m_staticTextNetClearance;
|
||||||
wxTextCtrl* m_NetClearanceValueCtrl;
|
wxTextCtrl* m_NetClearanceValueCtrl;
|
||||||
wxStaticText* m_NetClearanceUnits;
|
wxStaticText* m_NetClearanceUnits;
|
||||||
|
@ -128,16 +134,19 @@ class DIALOG_PAD_PROPERTIES_BASE : public wxDialog
|
||||||
wxButton* m_sdbSizer1Cancel;
|
wxButton* m_sdbSizer1Cancel;
|
||||||
|
|
||||||
// Virtual event handlers, overide them in your derived class
|
// Virtual event handlers, overide them in your derived class
|
||||||
|
virtual void OnValuesChanged( wxCommandEvent& event ){ event.Skip(); }
|
||||||
virtual void OnPadShapeSelection( wxCommandEvent& event ){ event.Skip(); }
|
virtual void OnPadShapeSelection( wxCommandEvent& event ){ event.Skip(); }
|
||||||
virtual void OnDrillShapeSelected( wxCommandEvent& event ){ event.Skip(); }
|
virtual void OnDrillShapeSelected( wxCommandEvent& event ){ event.Skip(); }
|
||||||
virtual void PadOrientEvent( wxCommandEvent& event ){ event.Skip(); }
|
virtual void PadOrientEvent( wxCommandEvent& event ){ event.Skip(); }
|
||||||
|
virtual void OnPaintShowPanel( wxPaintEvent& event ){ event.Skip(); }
|
||||||
virtual void PadTypeSelected( wxCommandEvent& event ){ event.Skip(); }
|
virtual void PadTypeSelected( wxCommandEvent& event ){ event.Skip(); }
|
||||||
|
virtual void OnSetLayer( wxCommandEvent& event ){ event.Skip(); }
|
||||||
virtual void OnCancelButtonClick( wxCommandEvent& event ){ event.Skip(); }
|
virtual void OnCancelButtonClick( wxCommandEvent& event ){ event.Skip(); }
|
||||||
virtual void PadPropertiesAccept( wxCommandEvent& event ){ event.Skip(); }
|
virtual void PadPropertiesAccept( wxCommandEvent& event ){ event.Skip(); }
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWindowID id = wxID_DIALOG_EDIT_PAD, const wxString& title = _("Pad Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 673,488 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSUNKEN_BORDER );
|
DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWindowID id = wxID_DIALOG_EDIT_PAD, const wxString& title = _("Pad Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 733,486 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSUNKEN_BORDER );
|
||||||
~DIALOG_PAD_PROPERTIES_BASE();
|
~DIALOG_PAD_PROPERTIES_BASE();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -291,7 +291,7 @@ void WinEDA_PcbFrame::ReCreateMenuBar()
|
||||||
/* Swap Layers */
|
/* Swap Layers */
|
||||||
item = new wxMenuItem( editMenu, ID_MENU_PCB_SWAP_LAYERS,
|
item = new wxMenuItem( editMenu, ID_MENU_PCB_SWAP_LAYERS,
|
||||||
_( "&Swap Layers" ),
|
_( "&Swap Layers" ),
|
||||||
_( "Swap tracks on copper layers or drawings on others layers" ) );
|
_( "Swap tracks on copper layers or drawings on other layers" ) );
|
||||||
item->SetBitmap( swap_layer_xpm );
|
item->SetBitmap( swap_layer_xpm );
|
||||||
editMenu->Append( item );
|
editMenu->Append( item );
|
||||||
|
|
||||||
|
@ -309,7 +309,7 @@ void WinEDA_PcbFrame::ReCreateMenuBar()
|
||||||
* From hotkeys, zooming is made around the mouse cursor position
|
* From hotkeys, zooming is made around the mouse cursor position
|
||||||
* (obviously not possible from the toolbar or menubar command)
|
* (obviously not possible from the toolbar or menubar command)
|
||||||
*
|
*
|
||||||
* in others words HK_ZOOM_IN and HK_ZOOM_OUT *are NOT* accelerators
|
* in other words HK_ZOOM_IN and HK_ZOOM_OUT *are NOT* accelerators
|
||||||
* for Zoom in and Zoom out sub menus
|
* for Zoom in and Zoom out sub menus
|
||||||
*/
|
*/
|
||||||
/* Zoom in */
|
/* Zoom in */
|
||||||
|
|
Loading…
Reference in New Issue