Commit 8e0937e6 authored by jean-pierre charras's avatar jean-pierre charras

Pcbnew: code cleaning, dialogs converted from Dialogblocks to wxFormBuilder,...

Pcbnew: code cleaning, dialogs converted from Dialogblocks to wxFormBuilder, file housekeeping. Add patch from Manveru.
parents 6963001a 8a0b632a
...@@ -605,7 +605,7 @@ void Pcb3D_GLCanvas::Draw3D_DrawText( TEXTE_PCB* text ) ...@@ -605,7 +605,7 @@ void Pcb3D_GLCanvas::Draw3D_DrawText( TEXTE_PCB* text )
SetGLColor( color ); SetGLColor( color );
s_Text3DZPos = g_Parm_3D_Visu.m_LayerZcoord[layer]; s_Text3DZPos = g_Parm_3D_Visu.m_LayerZcoord[layer];
s_Text3DWidth = text->m_Width * g_Parm_3D_Visu.m_BoardScale; s_Text3DWidth = text->m_Thickness * g_Parm_3D_Visu.m_BoardScale;
glNormal3f( 0.0, 0.0, Get3DLayerSide( layer ) ); glNormal3f( 0.0, 0.0, Get3DLayerSide( layer ) );
wxSize size = text->m_Size; wxSize size = text->m_Size;
if( text->m_Mirror ) if( text->m_Mirror )
...@@ -625,7 +625,7 @@ void Pcb3D_GLCanvas::Draw3D_DrawText( TEXTE_PCB* text ) ...@@ -625,7 +625,7 @@ void Pcb3D_GLCanvas::Draw3D_DrawText( TEXTE_PCB* text )
DrawGraphicText( NULL, NULL, pos, (EDA_Colors) color, DrawGraphicText( NULL, NULL, pos, (EDA_Colors) color,
txt, text->m_Orient, size, txt, text->m_Orient, size,
text->m_HJustify, text->m_VJustify, text->m_HJustify, text->m_VJustify,
text->m_Width, text->m_Italic, text->m_Thickness, text->m_Italic,
true, Draw3dTextSegm ); true, Draw3dTextSegm );
pos += offset; pos += offset;
} }
...@@ -636,7 +636,7 @@ void Pcb3D_GLCanvas::Draw3D_DrawText( TEXTE_PCB* text ) ...@@ -636,7 +636,7 @@ void Pcb3D_GLCanvas::Draw3D_DrawText( TEXTE_PCB* text )
DrawGraphicText( NULL, NULL, text->m_Pos, (EDA_Colors) color, DrawGraphicText( NULL, NULL, text->m_Pos, (EDA_Colors) color,
text->m_Text, text->m_Orient, size, text->m_Text, text->m_Orient, size,
text->m_HJustify, text->m_VJustify, text->m_HJustify, text->m_VJustify,
text->m_Width, text->m_Italic, text->m_Thickness, text->m_Italic,
true, true,
Draw3dTextSegm ); Draw3dTextSegm );
} }
......
...@@ -182,7 +182,7 @@ EDA_TextStruct::EDA_TextStruct( const wxString& text ) ...@@ -182,7 +182,7 @@ EDA_TextStruct::EDA_TextStruct( const wxString& text )
m_Mirror = false; // display mirror if true m_Mirror = false; // display mirror if true
m_HJustify = GR_TEXT_HJUSTIFY_CENTER; m_HJustify = GR_TEXT_HJUSTIFY_CENTER;
m_VJustify = GR_TEXT_VJUSTIFY_CENTER; /* Justifications Horiz et Vert du texte */ m_VJustify = GR_TEXT_VJUSTIFY_CENTER; /* Justifications Horiz et Vert du texte */
m_Width = 0; /* thickness */ m_Thickness = 0; /* thickness */
m_Italic = false; /* true = italic shape */ m_Italic = false; /* true = italic shape */
m_Bold = false; m_Bold = false;
m_MultilineAllowed = false; // Set to true only for texts that can use multiline. m_MultilineAllowed = false; // Set to true only for texts that can use multiline.
...@@ -203,7 +203,7 @@ EDA_TextStruct::~EDA_TextStruct() ...@@ -203,7 +203,7 @@ EDA_TextStruct::~EDA_TextStruct()
*/ */
int EDA_TextStruct::LenSize( const wxString& aLine ) const int EDA_TextStruct::LenSize( const wxString& aLine ) const
{ {
return ReturnGraphicTextWidth(aLine, m_Size.x, m_Italic, m_Bold ) + m_Width; return ReturnGraphicTextWidth(aLine, m_Size.x, m_Italic, m_Bold ) + m_Thickness;
} }
...@@ -262,7 +262,7 @@ EDA_Rect EDA_TextStruct::GetTextBox( int aLine ) ...@@ -262,7 +262,7 @@ EDA_Rect EDA_TextStruct::GetTextBox( int aLine )
delete list; delete list;
rect.SetSize( textsize ); rect.SetSize( textsize );
rect.Inflate( m_Width/2 ); // ensure a small margin rect.Inflate( m_Thickness/2 ); // ensure a small margin
/* Now, calculate the rect origin, according to text justification /* Now, calculate the rect origin, according to text justification
* At this point the rectangle origin is the text origin (m_Pos). * At this point the rectangle origin is the text origin (m_Pos).
...@@ -284,7 +284,7 @@ EDA_Rect EDA_TextStruct::GetTextBox( int aLine ) ...@@ -284,7 +284,7 @@ EDA_Rect EDA_TextStruct::GetTextBox( int aLine )
break; break;
} }
dy = m_Size.y + m_Width; dy = m_Size.y + m_Thickness;
switch( m_VJustify ) switch( m_VJustify )
{ {
case GR_TEXT_VJUSTIFY_TOP: case GR_TEXT_VJUSTIFY_TOP:
...@@ -419,7 +419,7 @@ void EDA_TextStruct::DrawOneLineOfText( WinEDA_DrawPanel* aPanel, wxDC* aDC, ...@@ -419,7 +419,7 @@ void EDA_TextStruct::DrawOneLineOfText( WinEDA_DrawPanel* aPanel, wxDC* aDC,
GRTraceMode aFillMode, EDA_Colors aAnchor_color, GRTraceMode aFillMode, EDA_Colors aAnchor_color,
wxString& aText, wxPoint aPos ) wxString& aText, wxPoint aPos )
{ {
int width = m_Width; int width = m_Thickness;
if( aFillMode == FILAIRE ) if( aFillMode == FILAIRE )
width = 0; width = 0;
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
#include "colors_selection.h" #include "colors_selection.h"
#include "bitmaps.h" #include "bitmaps.h"
#include "pcbnew_id.h"
#include "hotkeys.h" #include "hotkeys.h"
#include "help_common_strings.h" #include "help_common_strings.h"
......
...@@ -224,12 +224,12 @@ void DialogLabelEditor::TextPropertiesAccept( wxCommandEvent& aEvent ) ...@@ -224,12 +224,12 @@ void DialogLabelEditor::TextPropertiesAccept( wxCommandEvent& aEvent )
if( ( style & 2 ) ) if( ( style & 2 ) )
{ {
m_CurrentText->m_Bold = true; m_CurrentText->m_Bold = true;
m_CurrentText->m_Width = GetPenSizeForBold( m_CurrentText->m_Size.x ); m_CurrentText->m_Thickness = GetPenSizeForBold( m_CurrentText->m_Size.x );
} }
else else
{ {
m_CurrentText->m_Bold = false; m_CurrentText->m_Bold = false;
m_CurrentText->m_Width = 0; m_CurrentText->m_Thickness = 0;
} }
m_Parent->OnModify(); m_Parent->OnModify();
......
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project> <wxFormBuilder_Project>
<FileVersion major="1" minor="9" /> <FileVersion major="1" minor="10" />
<object class="Project" expanded="1"> <object class="Project" expanded="1">
<property name="class_decoration"></property> <property name="class_decoration" />
<property name="code_generation">C++</property> <property name="code_generation">C++</property>
<property name="disconnect_events">1</property> <property name="disconnect_events">1</property>
<property name="encoding">UTF-8</property> <property name="encoding">UTF-8</property>
...@@ -12,66 +12,66 @@ ...@@ -12,66 +12,66 @@
<property name="help_provider">none</property> <property name="help_provider">none</property>
<property name="internationalize">1</property> <property name="internationalize">1</property>
<property name="name">dialog_edit_label_base</property> <property name="name">dialog_edit_label_base</property>
<property name="namespace"></property> <property name="namespace" />
<property name="path">.</property> <property name="path">.</property>
<property name="precompiled_header"></property> <property name="precompiled_header" />
<property name="relative_path">1</property> <property name="relative_path">1</property>
<property name="use_enum">1</property> <property name="use_enum">1</property>
<property name="use_microsoft_bom">0</property> <property name="use_microsoft_bom">0</property>
<object class="Dialog" expanded="1"> <object class="Dialog" expanded="1">
<property name="bg"></property> <property name="bg" />
<property name="center"></property> <property name="center" />
<property name="context_help"></property> <property name="context_help" />
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="extra_style"></property> <property name="extra_style" />
<property name="fg"></property> <property name="fg" />
<property name="font"></property> <property name="font" />
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
<property name="maximum_size"></property> <property name="maximum_size" />
<property name="minimum_size"></property> <property name="minimum_size" />
<property name="name">DialogLabelEditor_Base</property> <property name="name">DialogLabelEditor_Base</property>
<property name="pos"></property> <property name="pos" />
<property name="size">359,347</property> <property name="size">359,347</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 name="title">Text Editor</property> <property name="title">Text Editor</property>
<property name="tooltip"></property> <property name="tooltip" />
<property name="window_extra_style"></property> <property name="window_extra_style" />
<property name="window_name"></property> <property name="window_name" />
<property name="window_style"></property> <property name="window_style" />
<event name="OnActivate"></event> <event name="OnActivate" />
<event name="OnActivateApp"></event> <event name="OnActivateApp" />
<event name="OnChar"></event> <event name="OnChar" />
<event name="OnClose"></event> <event name="OnClose" />
<event name="OnEnterWindow"></event> <event name="OnEnterWindow" />
<event name="OnEraseBackground"></event> <event name="OnEraseBackground" />
<event name="OnHibernate"></event> <event name="OnHibernate" />
<event name="OnIconize"></event> <event name="OnIconize" />
<event name="OnIdle"></event> <event name="OnIdle" />
<event name="OnInitDialog"></event> <event name="OnInitDialog" />
<event name="OnKeyDown"></event> <event name="OnKeyDown" />
<event name="OnKeyUp"></event> <event name="OnKeyUp" />
<event name="OnKillFocus"></event> <event name="OnKillFocus" />
<event name="OnLeaveWindow"></event> <event name="OnLeaveWindow" />
<event name="OnLeftDClick"></event> <event name="OnLeftDClick" />
<event name="OnLeftDown"></event> <event name="OnLeftDown" />
<event name="OnLeftUp"></event> <event name="OnLeftUp" />
<event name="OnMiddleDClick"></event> <event name="OnMiddleDClick" />
<event name="OnMiddleDown"></event> <event name="OnMiddleDown" />
<event name="OnMiddleUp"></event> <event name="OnMiddleUp" />
<event name="OnMotion"></event> <event name="OnMotion" />
<event name="OnMouseEvents"></event> <event name="OnMouseEvents" />
<event name="OnMouseWheel"></event> <event name="OnMouseWheel" />
<event name="OnPaint"></event> <event name="OnPaint" />
<event name="OnRightDClick"></event> <event name="OnRightDClick" />
<event name="OnRightDown"></event> <event name="OnRightDown" />
<event name="OnRightUp"></event> <event name="OnRightUp" />
<event name="OnSetFocus"></event> <event name="OnSetFocus" />
<event name="OnSize"></event> <event name="OnSize" />
<event name="OnUpdateUI"></event> <event name="OnUpdateUI" />
<object class="wxBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property> <property name="minimum_size" />
<property name="name">bMainSizer</property> <property name="name">bMainSizer</property>
<property name="orient">wxVERTICAL</property> <property name="orient">wxVERTICAL</property>
<property name="permission">none</property> <property name="permission">none</property>
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
<property name="growablecols">1</property> <property name="growablecols">1</property>
<property name="growablerows">0</property> <property name="growablerows">0</property>
<property name="hgap">3</property> <property name="hgap">3</property>
<property name="minimum_size"></property> <property name="minimum_size" />
<property name="name">m_textControlSizer</property> <property name="name">m_textControlSizer</property>
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property> <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
<property name="permission">protected</property> <property name="permission">protected</property>
...@@ -96,50 +96,50 @@ ...@@ -96,50 +96,50 @@
<property name="flag">wxRIGHT</property> <property name="flag">wxRIGHT</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxStaticText" expanded="1"> <object class="wxStaticText" expanded="1">
<property name="bg"></property> <property name="bg" />
<property name="context_help"></property> <property name="context_help" />
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg" />
<property name="font"></property> <property name="font" />
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
<property name="label">&amp;Text:</property> <property name="label">&amp;Text:</property>
<property name="maximum_size"></property> <property name="maximum_size" />
<property name="minimum_size"></property> <property name="minimum_size" />
<property name="name">m_staticText1</property> <property name="name">m_staticText1</property>
<property name="permission">protected</property> <property name="permission">protected</property>
<property name="pos"></property> <property name="pos" />
<property name="size"></property> <property name="size" />
<property name="style"></property> <property name="style" />
<property name="subclass"></property> <property name="subclass" />
<property name="tooltip">Enter the text to be used within the schematic</property> <property name="tooltip">Enter the text to be used within the schematic</property>
<property name="window_extra_style"></property> <property name="window_extra_style" />
<property name="window_name"></property> <property name="window_name" />
<property name="window_style"></property> <property name="window_style" />
<property name="wrap">-1</property> <property name="wrap">-1</property>
<event name="OnChar"></event> <event name="OnChar" />
<event name="OnEnterWindow"></event> <event name="OnEnterWindow" />
<event name="OnEraseBackground"></event> <event name="OnEraseBackground" />
<event name="OnKeyDown"></event> <event name="OnKeyDown" />
<event name="OnKeyUp"></event> <event name="OnKeyUp" />
<event name="OnKillFocus"></event> <event name="OnKillFocus" />
<event name="OnLeaveWindow"></event> <event name="OnLeaveWindow" />
<event name="OnLeftDClick"></event> <event name="OnLeftDClick" />
<event name="OnLeftDown"></event> <event name="OnLeftDown" />
<event name="OnLeftUp"></event> <event name="OnLeftUp" />
<event name="OnMiddleDClick"></event> <event name="OnMiddleDClick" />
<event name="OnMiddleDown"></event> <event name="OnMiddleDown" />
<event name="OnMiddleUp"></event> <event name="OnMiddleUp" />
<event name="OnMotion"></event> <event name="OnMotion" />
<event name="OnMouseEvents"></event> <event name="OnMouseEvents" />
<event name="OnMouseWheel"></event> <event name="OnMouseWheel" />
<event name="OnPaint"></event> <event name="OnPaint" />
<event name="OnRightDClick"></event> <event name="OnRightDClick" />
<event name="OnRightDown"></event> <event name="OnRightDown" />
<event name="OnRightUp"></event> <event name="OnRightUp" />
<event name="OnSetFocus"></event> <event name="OnSetFocus" />
<event name="OnSize"></event> <event name="OnSize" />
<event name="OnUpdateUI"></event> <event name="OnUpdateUI" />
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
...@@ -147,7 +147,7 @@ ...@@ -147,7 +147,7 @@
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND</property>
<property name="proportion">1</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 name="name">bSizeText</property> <property name="name">bSizeText</property>
<property name="orient">wxVERTICAL</property> <property name="orient">wxVERTICAL</property>
<property name="permission">none</property> <property name="permission">none</property>
...@@ -156,54 +156,54 @@ ...@@ -156,54 +156,54 @@
<property name="flag">wxEXPAND|wxLEFT</property> <property name="flag">wxEXPAND|wxLEFT</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxTextCtrl" expanded="1"> <object class="wxTextCtrl" expanded="1">
<property name="bg"></property> <property name="bg" />
<property name="context_help"></property> <property name="context_help" />
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg" />
<property name="font"></property> <property name="font" />
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">wxID_VALUESINGLE</property> <property name="id">wxID_VALUESINGLE</property>
<property name="maximum_size"></property> <property name="maximum_size" />
<property name="maxlength">0</property> <property name="maxlength">0</property>
<property name="minimum_size"></property> <property name="minimum_size" />
<property name="name">m_textLabelSingleLine</property> <property name="name">m_textLabelSingleLine</property>
<property name="permission">protected</property> <property name="permission">protected</property>
<property name="pos"></property> <property name="pos" />
<property name="size"></property> <property name="size" />
<property name="style">wxTE_PROCESS_ENTER</property> <property name="style">wxTE_PROCESS_ENTER</property>
<property name="subclass"></property> <property name="subclass" />
<property name="tooltip"></property> <property name="tooltip" />
<property name="value"></property> <property name="value" />
<property name="window_extra_style"></property> <property name="window_extra_style" />
<property name="window_name"></property> <property name="window_name" />
<property name="window_style"></property> <property name="window_style" />
<event name="OnChar"></event> <event name="OnChar" />
<event name="OnEnterWindow"></event> <event name="OnEnterWindow" />
<event name="OnEraseBackground"></event> <event name="OnEraseBackground" />
<event name="OnKeyDown"></event> <event name="OnKeyDown" />
<event name="OnKeyUp"></event> <event name="OnKeyUp" />
<event name="OnKillFocus"></event> <event name="OnKillFocus" />
<event name="OnLeaveWindow"></event> <event name="OnLeaveWindow" />
<event name="OnLeftDClick"></event> <event name="OnLeftDClick" />
<event name="OnLeftDown"></event> <event name="OnLeftDown" />
<event name="OnLeftUp"></event> <event name="OnLeftUp" />
<event name="OnMiddleDClick"></event> <event name="OnMiddleDClick" />
<event name="OnMiddleDown"></event> <event name="OnMiddleDown" />
<event name="OnMiddleUp"></event> <event name="OnMiddleUp" />
<event name="OnMotion"></event> <event name="OnMotion" />
<event name="OnMouseEvents"></event> <event name="OnMouseEvents" />
<event name="OnMouseWheel"></event> <event name="OnMouseWheel" />
<event name="OnPaint"></event> <event name="OnPaint" />
<event name="OnRightDClick"></event> <event name="OnRightDClick" />
<event name="OnRightDown"></event> <event name="OnRightDown" />
<event name="OnRightUp"></event> <event name="OnRightUp" />
<event name="OnSetFocus"></event> <event name="OnSetFocus" />
<event name="OnSize"></event> <event name="OnSize" />
<event name="OnText"></event> <event name="OnText" />
<event name="OnTextEnter">OnEnterKey</event> <event name="OnTextEnter">OnEnterKey</event>
<event name="OnTextMaxLen"></event> <event name="OnTextMaxLen" />
<event name="OnTextURL"></event> <event name="OnTextURL" />
<event name="OnUpdateUI"></event> <event name="OnUpdateUI" />
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
...@@ -211,54 +211,54 @@ ...@@ -211,54 +211,54 @@
<property name="flag">wxEXPAND|wxLEFT</property> <property name="flag">wxEXPAND|wxLEFT</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxTextCtrl" expanded="1"> <object class="wxTextCtrl" expanded="1">
<property name="bg"></property> <property name="bg" />
<property name="context_help"></property> <property name="context_help" />
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg" />
<property name="font"></property> <property name="font" />
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">wxID_VALUEMULTI</property> <property name="id">wxID_VALUEMULTI</property>
<property name="maximum_size"></property> <property name="maximum_size" />
<property name="maxlength">0</property> <property name="maxlength">0</property>
<property name="minimum_size">-1,60</property> <property name="minimum_size">-1,60</property>
<property name="name">m_textLabelMultiLine</property> <property name="name">m_textLabelMultiLine</property>
<property name="permission">protected</property> <property name="permission">protected</property>
<property name="pos"></property> <property name="pos" />
<property name="size"></property> <property name="size" />
<property name="style">wxTE_MULTILINE|wxTE_PROCESS_ENTER</property> <property name="style">wxTE_MULTILINE|wxTE_PROCESS_ENTER</property>
<property name="subclass"></property> <property name="subclass" />
<property name="tooltip"></property> <property name="tooltip" />
<property name="value"></property> <property name="value" />
<property name="window_extra_style"></property> <property name="window_extra_style" />
<property name="window_name"></property> <property name="window_name" />
<property name="window_style"></property> <property name="window_style" />
<event name="OnChar"></event> <event name="OnChar" />
<event name="OnEnterWindow"></event> <event name="OnEnterWindow" />
<event name="OnEraseBackground"></event> <event name="OnEraseBackground" />
<event name="OnKeyDown"></event> <event name="OnKeyDown" />
<event name="OnKeyUp"></event> <event name="OnKeyUp" />
<event name="OnKillFocus"></event> <event name="OnKillFocus" />
<event name="OnLeaveWindow"></event> <event name="OnLeaveWindow" />
<event name="OnLeftDClick"></event> <event name="OnLeftDClick" />
<event name="OnLeftDown"></event> <event name="OnLeftDown" />
<event name="OnLeftUp"></event> <event name="OnLeftUp" />
<event name="OnMiddleDClick"></event> <event name="OnMiddleDClick" />
<event name="OnMiddleDown"></event> <event name="OnMiddleDown" />
<event name="OnMiddleUp"></event> <event name="OnMiddleUp" />
<event name="OnMotion"></event> <event name="OnMotion" />
<event name="OnMouseEvents"></event> <event name="OnMouseEvents" />
<event name="OnMouseWheel"></event> <event name="OnMouseWheel" />
<event name="OnPaint"></event> <event name="OnPaint" />
<event name="OnRightDClick"></event> <event name="OnRightDClick" />
<event name="OnRightDown"></event> <event name="OnRightDown" />
<event name="OnRightUp"></event> <event name="OnRightUp" />
<event name="OnSetFocus"></event> <event name="OnSetFocus" />
<event name="OnSize"></event> <event name="OnSize" />
<event name="OnText"></event> <event name="OnText" />
<event name="OnTextEnter">OnEnterKey</event> <event name="OnTextEnter">OnEnterKey</event>
<event name="OnTextMaxLen"></event> <event name="OnTextMaxLen" />
<event name="OnTextURL"></event> <event name="OnTextURL" />
<event name="OnUpdateUI"></event> <event name="OnUpdateUI" />
</object> </object>
</object> </object>
</object> </object>
...@@ -268,50 +268,50 @@ ...@@ -268,50 +268,50 @@
<property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT</property> <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxStaticText" expanded="1"> <object class="wxStaticText" expanded="1">
<property name="bg"></property> <property name="bg" />
<property name="context_help"></property> <property name="context_help" />
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg" />
<property name="font"></property> <property name="font" />
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
<property name="label">&amp;Size:</property> <property name="label">&amp;Size:</property>
<property name="maximum_size"></property> <property name="maximum_size" />
<property name="minimum_size"></property> <property name="minimum_size" />
<property name="name">m_SizeTitle</property> <property name="name">m_SizeTitle</property>
<property name="permission">protected</property> <property name="permission">protected</property>
<property name="pos"></property> <property name="pos" />
<property name="size"></property> <property name="size" />
<property name="style"></property> <property name="style" />
<property name="subclass"></property> <property name="subclass" />
<property name="tooltip"></property> <property name="tooltip" />
<property name="window_extra_style"></property> <property name="window_extra_style" />
<property name="window_name"></property> <property name="window_name" />
<property name="window_style"></property> <property name="window_style" />
<property name="wrap">-1</property> <property name="wrap">-1</property>
<event name="OnChar"></event> <event name="OnChar" />
<event name="OnEnterWindow"></event> <event name="OnEnterWindow" />
<event name="OnEraseBackground"></event> <event name="OnEraseBackground" />
<event name="OnKeyDown"></event> <event name="OnKeyDown" />
<event name="OnKeyUp"></event> <event name="OnKeyUp" />
<event name="OnKillFocus"></event> <event name="OnKillFocus" />
<event name="OnLeaveWindow"></event> <event name="OnLeaveWindow" />
<event name="OnLeftDClick"></event> <event name="OnLeftDClick" />
<event name="OnLeftDown"></event> <event name="OnLeftDown" />
<event name="OnLeftUp"></event> <event name="OnLeftUp" />
<event name="OnMiddleDClick"></event> <event name="OnMiddleDClick" />
<event name="OnMiddleDown"></event> <event name="OnMiddleDown" />
<event name="OnMiddleUp"></event> <event name="OnMiddleUp" />
<event name="OnMotion"></event> <event name="OnMotion" />
<event name="OnMouseEvents"></event> <event name="OnMouseEvents" />
<event name="OnMouseWheel"></event> <event name="OnMouseWheel" />
<event name="OnPaint"></event> <event name="OnPaint" />
<event name="OnRightDClick"></event> <event name="OnRightDClick" />
<event name="OnRightDown"></event> <event name="OnRightDown" />
<event name="OnRightUp"></event> <event name="OnRightUp" />
<event name="OnSetFocus"></event> <event name="OnSetFocus" />
<event name="OnSize"></event> <event name="OnSize" />
<event name="OnUpdateUI"></event> <event name="OnUpdateUI" />
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
...@@ -319,7 +319,7 @@ ...@@ -319,7 +319,7 @@
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND</property>
<property name="proportion">1</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 name="name">bSizeCtrlSizer</property> <property name="name">bSizeCtrlSizer</property>
<property name="orient">wxHORIZONTAL</property> <property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property> <property name="permission">none</property>
...@@ -328,54 +328,54 @@ ...@@ -328,54 +328,54 @@
<property name="flag">wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT</property> <property name="flag">wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxTextCtrl" expanded="1"> <object class="wxTextCtrl" expanded="1">
<property name="bg"></property> <property name="bg" />
<property name="context_help"></property> <property name="context_help" />
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg" />
<property name="font"></property> <property name="font" />
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">wxID_SIZE</property> <property name="id">wxID_SIZE</property>
<property name="maximum_size"></property> <property name="maximum_size" />
<property name="maxlength">0</property> <property name="maxlength">0</property>
<property name="minimum_size"></property> <property name="minimum_size" />
<property name="name">m_TextSize</property> <property name="name">m_TextSize</property>
<property name="permission">protected</property> <property name="permission">protected</property>
<property name="pos"></property> <property name="pos" />
<property name="size"></property> <property name="size" />
<property name="style"></property> <property name="style" />
<property name="subclass"></property> <property name="subclass" />
<property name="tooltip"></property> <property name="tooltip" />
<property name="value"></property> <property name="value" />
<property name="window_extra_style"></property> <property name="window_extra_style" />
<property name="window_name"></property> <property name="window_name" />
<property name="window_style"></property> <property name="window_style" />
<event name="OnChar"></event> <event name="OnChar" />
<event name="OnEnterWindow"></event> <event name="OnEnterWindow" />
<event name="OnEraseBackground"></event> <event name="OnEraseBackground" />
<event name="OnKeyDown"></event> <event name="OnKeyDown" />
<event name="OnKeyUp"></event> <event name="OnKeyUp" />
<event name="OnKillFocus"></event> <event name="OnKillFocus" />
<event name="OnLeaveWindow"></event> <event name="OnLeaveWindow" />
<event name="OnLeftDClick"></event> <event name="OnLeftDClick" />
<event name="OnLeftDown"></event> <event name="OnLeftDown" />
<event name="OnLeftUp"></event> <event name="OnLeftUp" />
<event name="OnMiddleDClick"></event> <event name="OnMiddleDClick" />
<event name="OnMiddleDown"></event> <event name="OnMiddleDown" />
<event name="OnMiddleUp"></event> <event name="OnMiddleUp" />
<event name="OnMotion"></event> <event name="OnMotion" />
<event name="OnMouseEvents"></event> <event name="OnMouseEvents" />
<event name="OnMouseWheel"></event> <event name="OnMouseWheel" />
<event name="OnPaint"></event> <event name="OnPaint" />
<event name="OnRightDClick"></event> <event name="OnRightDClick" />
<event name="OnRightDown"></event> <event name="OnRightDown" />
<event name="OnRightUp"></event> <event name="OnRightUp" />
<event name="OnSetFocus"></event> <event name="OnSetFocus" />
<event name="OnSize"></event> <event name="OnSize" />
<event name="OnText"></event> <event name="OnText" />
<event name="OnTextEnter"></event> <event name="OnTextEnter" />
<event name="OnTextMaxLen"></event> <event name="OnTextMaxLen" />
<event name="OnTextURL"></event> <event name="OnTextURL" />
<event name="OnUpdateUI"></event> <event name="OnUpdateUI" />
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
...@@ -383,50 +383,50 @@ ...@@ -383,50 +383,50 @@
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property> <property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxStaticText" expanded="1"> <object class="wxStaticText" expanded="1">
<property name="bg"></property> <property name="bg" />
<property name="context_help"></property> <property name="context_help" />
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg" />
<property name="font"></property> <property name="font" />
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
<property name="label">units</property> <property name="label">units</property>
<property name="maximum_size"></property> <property name="maximum_size" />
<property name="minimum_size"></property> <property name="minimum_size" />
<property name="name">m_staticSizeUnits</property> <property name="name">m_staticSizeUnits</property>
<property name="permission">protected</property> <property name="permission">protected</property>
<property name="pos"></property> <property name="pos" />
<property name="size"></property> <property name="size" />
<property name="style"></property> <property name="style" />
<property name="subclass"></property> <property name="subclass" />
<property name="tooltip"></property> <property name="tooltip" />
<property name="window_extra_style"></property> <property name="window_extra_style" />
<property name="window_name"></property> <property name="window_name" />
<property name="window_style"></property> <property name="window_style" />
<property name="wrap">-1</property> <property name="wrap">-1</property>
<event name="OnChar"></event> <event name="OnChar" />
<event name="OnEnterWindow"></event> <event name="OnEnterWindow" />
<event name="OnEraseBackground"></event> <event name="OnEraseBackground" />
<event name="OnKeyDown"></event> <event name="OnKeyDown" />
<event name="OnKeyUp"></event> <event name="OnKeyUp" />
<event name="OnKillFocus"></event> <event name="OnKillFocus" />
<event name="OnLeaveWindow"></event> <event name="OnLeaveWindow" />
<event name="OnLeftDClick"></event> <event name="OnLeftDClick" />
<event name="OnLeftDown"></event> <event name="OnLeftDown" />
<event name="OnLeftUp"></event> <event name="OnLeftUp" />
<event name="OnMiddleDClick"></event> <event name="OnMiddleDClick" />
<event name="OnMiddleDown"></event> <event name="OnMiddleDown" />
<event name="OnMiddleUp"></event> <event name="OnMiddleUp" />
<event name="OnMotion"></event> <event name="OnMotion" />
<event name="OnMouseEvents"></event> <event name="OnMouseEvents" />
<event name="OnMouseWheel"></event> <event name="OnMouseWheel" />
<event name="OnPaint"></event> <event name="OnPaint" />
<event name="OnRightDClick"></event> <event name="OnRightDClick" />
<event name="OnRightDown"></event> <event name="OnRightDown" />
<event name="OnRightUp"></event> <event name="OnRightUp" />
<event name="OnSetFocus"></event> <event name="OnSetFocus" />
<event name="OnSize"></event> <event name="OnSize" />
<event name="OnUpdateUI"></event> <event name="OnUpdateUI" />
</object> </object>
</object> </object>
</object> </object>
...@@ -438,7 +438,7 @@ ...@@ -438,7 +438,7 @@
<property name="flag">wxEXPAND|wxLEFT|wxRIGHT|wxTOP</property> <property name="flag">wxEXPAND|wxLEFT|wxRIGHT|wxTOP</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 name="name">m_OptionsSizer</property> <property name="name">m_OptionsSizer</property>
<property name="orient">wxHORIZONTAL</property> <property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property> <property name="permission">none</property>
...@@ -447,53 +447,53 @@ ...@@ -447,53 +447,53 @@
<property name="flag">wxRIGHT|wxTOP</property> <property name="flag">wxRIGHT|wxTOP</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxRadioBox" expanded="1"> <object class="wxRadioBox" expanded="1">
<property name="bg"></property> <property name="bg" />
<property name="choices">&quot;Right&quot; &quot;Up&quot; &quot;Left&quot; &quot;Down&quot;</property> <property name="choices">&quot;Right&quot; &quot;Up&quot; &quot;Left&quot; &quot;Down&quot;</property>
<property name="context_help"></property> <property name="context_help" />
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg" />
<property name="font"></property> <property name="font" />
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
<property name="label">O&amp;rientation</property> <property name="label">O&amp;rientation</property>
<property name="majorDimension">1</property> <property name="majorDimension">1</property>
<property name="maximum_size"></property> <property name="maximum_size" />
<property name="minimum_size"></property> <property name="minimum_size" />
<property name="name">m_TextOrient</property> <property name="name">m_TextOrient</property>
<property name="permission">protected</property> <property name="permission">protected</property>
<property name="pos"></property> <property name="pos" />
<property name="selection">0</property> <property name="selection">0</property>
<property name="size"></property> <property name="size" />
<property name="style">wxRA_SPECIFY_COLS</property> <property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass"></property> <property name="subclass" />
<property name="tooltip"></property> <property name="tooltip" />
<property name="window_extra_style"></property> <property name="window_extra_style" />
<property name="window_name"></property> <property name="window_name" />
<property name="window_style"></property> <property name="window_style" />
<event name="OnChar"></event> <event name="OnChar" />
<event name="OnEnterWindow"></event> <event name="OnEnterWindow" />
<event name="OnEraseBackground"></event> <event name="OnEraseBackground" />
<event name="OnKeyDown"></event> <event name="OnKeyDown" />
<event name="OnKeyUp"></event> <event name="OnKeyUp" />
<event name="OnKillFocus"></event> <event name="OnKillFocus" />
<event name="OnLeaveWindow"></event> <event name="OnLeaveWindow" />
<event name="OnLeftDClick"></event> <event name="OnLeftDClick" />
<event name="OnLeftDown"></event> <event name="OnLeftDown" />
<event name="OnLeftUp"></event> <event name="OnLeftUp" />
<event name="OnMiddleDClick"></event> <event name="OnMiddleDClick" />
<event name="OnMiddleDown"></event> <event name="OnMiddleDown" />
<event name="OnMiddleUp"></event> <event name="OnMiddleUp" />
<event name="OnMotion"></event> <event name="OnMotion" />
<event name="OnMouseEvents"></event> <event name="OnMouseEvents" />
<event name="OnMouseWheel"></event> <event name="OnMouseWheel" />
<event name="OnPaint"></event> <event name="OnPaint" />
<event name="OnRadioBox"></event> <event name="OnRadioBox" />
<event name="OnRightDClick"></event> <event name="OnRightDClick" />
<event name="OnRightDown"></event> <event name="OnRightDown" />
<event name="OnRightUp"></event> <event name="OnRightUp" />
<event name="OnSetFocus"></event> <event name="OnSetFocus" />
<event name="OnSize"></event> <event name="OnSize" />
<event name="OnUpdateUI"></event> <event name="OnUpdateUI" />
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
...@@ -501,53 +501,53 @@ ...@@ -501,53 +501,53 @@
<property name="flag">wxLEFT|wxRIGHT|wxTOP</property> <property name="flag">wxLEFT|wxRIGHT|wxTOP</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxRadioBox" expanded="1"> <object class="wxRadioBox" expanded="1">
<property name="bg"></property> <property name="bg" />
<property name="choices">&quot;Normal&quot; &quot;Italic&quot; &quot;Bold&quot; &quot;Bold Italic&quot;</property> <property name="choices">&quot;Normal&quot; &quot;Italic&quot; &quot;Bold&quot; &quot;Bold Italic&quot;</property>
<property name="context_help"></property> <property name="context_help" />
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg" />
<property name="font"></property> <property name="font" />
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
<property name="label">St&amp;yle</property> <property name="label">St&amp;yle</property>
<property name="majorDimension">1</property> <property name="majorDimension">1</property>
<property name="maximum_size"></property> <property name="maximum_size" />
<property name="minimum_size"></property> <property name="minimum_size" />
<property name="name">m_TextStyle</property> <property name="name">m_TextStyle</property>
<property name="permission">protected</property> <property name="permission">protected</property>
<property name="pos"></property> <property name="pos" />
<property name="selection">0</property> <property name="selection">0</property>
<property name="size"></property> <property name="size" />
<property name="style">wxRA_SPECIFY_COLS</property> <property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass"></property> <property name="subclass" />
<property name="tooltip"></property> <property name="tooltip" />
<property name="window_extra_style"></property> <property name="window_extra_style" />
<property name="window_name"></property> <property name="window_name" />
<property name="window_style"></property> <property name="window_style" />
<event name="OnChar"></event> <event name="OnChar" />
<event name="OnEnterWindow"></event> <event name="OnEnterWindow" />
<event name="OnEraseBackground"></event> <event name="OnEraseBackground" />
<event name="OnKeyDown"></event> <event name="OnKeyDown" />
<event name="OnKeyUp"></event> <event name="OnKeyUp" />
<event name="OnKillFocus"></event> <event name="OnKillFocus" />
<event name="OnLeaveWindow"></event> <event name="OnLeaveWindow" />
<event name="OnLeftDClick"></event> <event name="OnLeftDClick" />
<event name="OnLeftDown"></event> <event name="OnLeftDown" />
<event name="OnLeftUp"></event> <event name="OnLeftUp" />
<event name="OnMiddleDClick"></event> <event name="OnMiddleDClick" />
<event name="OnMiddleDown"></event> <event name="OnMiddleDown" />
<event name="OnMiddleUp"></event> <event name="OnMiddleUp" />
<event name="OnMotion"></event> <event name="OnMotion" />
<event name="OnMouseEvents"></event> <event name="OnMouseEvents" />
<event name="OnMouseWheel"></event> <event name="OnMouseWheel" />
<event name="OnPaint"></event> <event name="OnPaint" />
<event name="OnRadioBox"></event> <event name="OnRadioBox" />
<event name="OnRightDClick"></event> <event name="OnRightDClick" />
<event name="OnRightDown"></event> <event name="OnRightDown" />
<event name="OnRightUp"></event> <event name="OnRightUp" />
<event name="OnSetFocus"></event> <event name="OnSetFocus" />
<event name="OnSize"></event> <event name="OnSize" />
<event name="OnUpdateUI"></event> <event name="OnUpdateUI" />
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
...@@ -555,53 +555,53 @@ ...@@ -555,53 +555,53 @@
<property name="flag">wxALL|wxLEFT|wxTOP</property> <property name="flag">wxALL|wxLEFT|wxTOP</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxRadioBox" expanded="1"> <object class="wxRadioBox" expanded="1">
<property name="bg"></property> <property name="bg" />
<property name="choices">&quot;Input&quot; &quot;Output&quot; &quot;Bidirectional&quot; &quot;Tri-State&quot; &quot;Passive&quot;</property> <property name="choices">&quot;Input&quot; &quot;Output&quot; &quot;Bidirectional&quot; &quot;Tri-State&quot; &quot;Passive&quot;</property>
<property name="context_help"></property> <property name="context_help" />
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg" />
<property name="font"></property> <property name="font" />
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
<property name="label">S&amp;hape</property> <property name="label">S&amp;hape</property>
<property name="majorDimension">1</property> <property name="majorDimension">1</property>
<property name="maximum_size"></property> <property name="maximum_size" />
<property name="minimum_size"></property> <property name="minimum_size" />
<property name="name">m_TextShape</property> <property name="name">m_TextShape</property>
<property name="permission">protected</property> <property name="permission">protected</property>
<property name="pos"></property> <property name="pos" />
<property name="selection">0</property> <property name="selection">0</property>
<property name="size"></property> <property name="size" />
<property name="style">wxRA_SPECIFY_COLS</property> <property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass"></property> <property name="subclass" />
<property name="tooltip"></property> <property name="tooltip" />
<property name="window_extra_style"></property> <property name="window_extra_style" />
<property name="window_name"></property> <property name="window_name" />
<property name="window_style"></property> <property name="window_style" />
<event name="OnChar"></event> <event name="OnChar" />
<event name="OnEnterWindow"></event> <event name="OnEnterWindow" />
<event name="OnEraseBackground"></event> <event name="OnEraseBackground" />
<event name="OnKeyDown"></event> <event name="OnKeyDown" />
<event name="OnKeyUp"></event> <event name="OnKeyUp" />
<event name="OnKillFocus"></event> <event name="OnKillFocus" />
<event name="OnLeaveWindow"></event> <event name="OnLeaveWindow" />
<event name="OnLeftDClick"></event> <event name="OnLeftDClick" />
<event name="OnLeftDown"></event> <event name="OnLeftDown" />
<event name="OnLeftUp"></event> <event name="OnLeftUp" />
<event name="OnMiddleDClick"></event> <event name="OnMiddleDClick" />
<event name="OnMiddleDown"></event> <event name="OnMiddleDown" />
<event name="OnMiddleUp"></event> <event name="OnMiddleUp" />
<event name="OnMotion"></event> <event name="OnMotion" />
<event name="OnMouseEvents"></event> <event name="OnMouseEvents" />
<event name="OnMouseWheel"></event> <event name="OnMouseWheel" />
<event name="OnPaint"></event> <event name="OnPaint" />
<event name="OnRadioBox"></event> <event name="OnRadioBox" />
<event name="OnRightDClick"></event> <event name="OnRightDClick" />
<event name="OnRightDown"></event> <event name="OnRightDown" />
<event name="OnRightUp"></event> <event name="OnRightUp" />
<event name="OnSetFocus"></event> <event name="OnSetFocus" />
<event name="OnSize"></event> <event name="OnSize" />
<event name="OnUpdateUI"></event> <event name="OnUpdateUI" />
</object> </object>
</object> </object>
</object> </object>
...@@ -619,17 +619,17 @@ ...@@ -619,17 +619,17 @@
<property name="OK">1</property> <property name="OK">1</property>
<property name="Save">0</property> <property name="Save">0</property>
<property name="Yes">0</property> <property name="Yes">0</property>
<property name="minimum_size"></property> <property name="minimum_size" />
<property name="name">m_sdbSizer1</property> <property name="name">m_sdbSizer1</property>
<property name="permission">protected</property> <property name="permission">protected</property>
<event name="OnApplyButtonClick"></event> <event name="OnApplyButtonClick" />
<event name="OnCancelButtonClick">OnCancelClick</event> <event name="OnCancelButtonClick">OnCancelClick</event>
<event name="OnContextHelpButtonClick"></event> <event name="OnContextHelpButtonClick" />
<event name="OnHelpButtonClick"></event> <event name="OnHelpButtonClick" />
<event name="OnNoButtonClick"></event> <event name="OnNoButtonClick" />
<event name="OnOKButtonClick">OnOkClick</event> <event name="OnOKButtonClick">OnOkClick</event>
<event name="OnSaveButtonClick"></event> <event name="OnSaveButtonClick" />
<event name="OnYesButtonClick"></event> <event name="OnYesButtonClick" />
</object> </object>
</object> </object>
</object> </object>
......
...@@ -304,7 +304,7 @@ void WinEDA_SchematicFrame::ConvertTextType( SCH_TEXT* Text, wxDC* DC, int newty ...@@ -304,7 +304,7 @@ void WinEDA_SchematicFrame::ConvertTextType( SCH_TEXT* Text, wxDC* DC, int newty
newtext->m_Shape = Text->m_Shape; newtext->m_Shape = Text->m_Shape;
newtext->SetSchematicTextOrientation( Text->GetSchematicTextOrientation() ); newtext->SetSchematicTextOrientation( Text->GetSchematicTextOrientation() );
newtext->m_Size = Text->m_Size; newtext->m_Size = Text->m_Size;
newtext->m_Width = Text->m_Width; newtext->m_Thickness = Text->m_Thickness;
newtext->m_Italic = Text->m_Italic; newtext->m_Italic = Text->m_Italic;
newtext->m_Bold = Text->m_Bold; newtext->m_Bold = Text->m_Bold;
......
/**********************/ /**********************/
/** class LIB_BEZIER **/ /** class LIB_BEZIER **/
/**********************/ /**********************/
#include "fctsys.h" #include "fctsys.h"
#include "gr_basic.h" #include "gr_basic.h"
#include "common.h" #include "common.h"
#include "macros.h" #include "macros.h"
#include "class_drawpanel.h" #include "class_drawpanel.h"
#include "plot_common.h" #include "plot_common.h"
#include "trigo.h" #include "trigo.h"
#include "wxstruct.h" #include "wxstruct.h"
#include "bezier_curves.h" #include "bezier_curves.h"
#include "general.h" #include "general.h"
#include "protos.h" #include "protos.h"
#include "lib_bezier.h" #include "lib_bezier.h"
#include "transform.h" #include "transform.h"
LIB_BEZIER::LIB_BEZIER( LIB_COMPONENT* aParent ) : LIB_BEZIER::LIB_BEZIER( LIB_COMPONENT* aParent ) :
LIB_DRAW_ITEM( COMPONENT_BEZIER_DRAW_TYPE, aParent ) LIB_DRAW_ITEM( COMPONENT_BEZIER_DRAW_TYPE, aParent )
{ {
m_Fill = NO_FILL; m_Fill = NO_FILL;
m_Width = 0; m_Width = 0;
m_isFillable = true; m_isFillable = true;
m_typeName = _( "Bezier" ); m_typeName = _( "Bezier" );
} }
LIB_BEZIER::LIB_BEZIER( const LIB_BEZIER& aBezier ) : LIB_DRAW_ITEM( aBezier ) LIB_BEZIER::LIB_BEZIER( const LIB_BEZIER& aBezier ) : LIB_DRAW_ITEM( aBezier )
{ {
m_PolyPoints = aBezier.m_PolyPoints; m_PolyPoints = aBezier.m_PolyPoints;
m_BezierPoints = aBezier.m_BezierPoints; // Vector copy m_BezierPoints = aBezier.m_BezierPoints; // Vector copy
m_Width = aBezier.m_Width; m_Width = aBezier.m_Width;
m_Fill = aBezier.m_Fill; m_Fill = aBezier.m_Fill;
} }
bool LIB_BEZIER::Save( FILE* aFile ) bool LIB_BEZIER::Save( FILE* aFile )
{ {
int ccount = GetCornerCount(); int ccount = GetCornerCount();
if( fprintf( aFile, "B %d %d %d %d", ccount, m_Unit, m_Convert, m_Width ) < 0 ) if( fprintf( aFile, "B %d %d %d %d", ccount, m_Unit, m_Convert, m_Width ) < 0 )
return false; return false;
for( unsigned i = 0; i < GetCornerCount(); i++ ) for( unsigned i = 0; i < GetCornerCount(); i++ )
{ {
if( fprintf( aFile, " %d %d", m_BezierPoints[i].x, m_BezierPoints[i].y ) < 0 ) if( fprintf( aFile, " %d %d", m_BezierPoints[i].x, m_BezierPoints[i].y ) < 0 )
return false; return false;
} }
if( fprintf( aFile, " %c\n", fill_tab[m_Fill] ) < 0 ) if( fprintf( aFile, " %c\n", fill_tab[m_Fill] ) < 0 )
return false; return false;
return true; return true;
} }
bool LIB_BEZIER::Load( char* aLine, wxString& aErrorMsg ) bool LIB_BEZIER::Load( char* aLine, wxString& aErrorMsg )
{ {
char* p; char* p;
int i, ccount = 0; int i, ccount = 0;
wxPoint pt; wxPoint pt;
i = sscanf( &aLine[2], "%d %d %d %d", &ccount, &m_Unit, &m_Convert, &m_Width ); i = sscanf( &aLine[2], "%d %d %d %d", &ccount, &m_Unit, &m_Convert, &m_Width );
if( i !=4 ) if( i !=4 )
{ {
aErrorMsg.Printf( _( "Bezier only had %d parameters of the required 4" ), i ); aErrorMsg.Printf( _( "Bezier only had %d parameters of the required 4" ), i );
return false; return false;
} }
if( ccount <= 0 ) if( ccount <= 0 )
{ {
aErrorMsg.Printf( _( "Bezier count parameter %d is invalid" ), ccount ); aErrorMsg.Printf( _( "Bezier count parameter %d is invalid" ), ccount );
return false; return false;
} }
p = strtok( &aLine[2], " \t\n" ); p = strtok( &aLine[2], " \t\n" );
p = strtok( NULL, " \t\n" ); p = strtok( NULL, " \t\n" );
p = strtok( NULL, " \t\n" ); p = strtok( NULL, " \t\n" );
p = strtok( NULL, " \t\n" ); p = strtok( NULL, " \t\n" );
for( i = 0; i < ccount; i++ ) for( i = 0; i < ccount; i++ )
{ {
wxPoint point; wxPoint point;
p = strtok( NULL, " \t\n" ); p = strtok( NULL, " \t\n" );
if( sscanf( p, "%d", &pt.x ) != 1 ) if( sscanf( p, "%d", &pt.x ) != 1 )
{ {
aErrorMsg.Printf( _( "Bezier point %d X position not defined" ), i ); aErrorMsg.Printf( _( "Bezier point %d X position not defined" ), i );
return false; return false;
} }
p = strtok( NULL, " \t\n" ); p = strtok( NULL, " \t\n" );
if( sscanf( p, "%d", &pt.y ) != 1 ) if( sscanf( p, "%d", &pt.y ) != 1 )
{ {
aErrorMsg.Printf( _( "Bezier point %d Y position not defined" ), i ); aErrorMsg.Printf( _( "Bezier point %d Y position not defined" ), i );
return false; return false;
} }
m_BezierPoints.push_back( pt ); m_BezierPoints.push_back( pt );
} }
m_Fill = NO_FILL; m_Fill = NO_FILL;
if( ( p = strtok( NULL, " \t\n" ) ) != NULL ) if( ( p = strtok( NULL, " \t\n" ) ) != NULL )
{ {
if( p[0] == 'F' ) if( p[0] == 'F' )
m_Fill = FILLED_SHAPE; m_Fill = FILLED_SHAPE;
if( p[0] == 'f' ) if( p[0] == 'f' )
m_Fill = FILLED_WITH_BG_BODYCOLOR; m_Fill = FILLED_WITH_BG_BODYCOLOR;
} }
return true; return true;
} }
LIB_DRAW_ITEM* LIB_BEZIER::DoGenCopy() LIB_DRAW_ITEM* LIB_BEZIER::DoGenCopy()
{ {
LIB_BEZIER* newitem = new LIB_BEZIER(GetParent()); LIB_BEZIER* newitem = new LIB_BEZIER(GetParent());
newitem->m_BezierPoints = m_BezierPoints; // Vector copy newitem->m_BezierPoints = m_BezierPoints; // Vector copy
newitem->m_Width = m_Width; newitem->m_Width = m_Width;
newitem->m_Unit = m_Unit; newitem->m_Unit = m_Unit;
newitem->m_Convert = m_Convert; newitem->m_Convert = m_Convert;
newitem->m_Flags = m_Flags; newitem->m_Flags = m_Flags;
newitem->m_Fill = m_Fill; newitem->m_Fill = m_Fill;
return (LIB_DRAW_ITEM*) newitem; return (LIB_DRAW_ITEM*) newitem;
} }
int LIB_BEZIER::DoCompare( const LIB_DRAW_ITEM& aOther ) const int LIB_BEZIER::DoCompare( const LIB_DRAW_ITEM& aOther ) const
{ {
wxASSERT( aOther.Type() == COMPONENT_BEZIER_DRAW_TYPE ); wxASSERT( aOther.Type() == COMPONENT_BEZIER_DRAW_TYPE );
const LIB_BEZIER* tmp = ( LIB_BEZIER* ) &aOther; const LIB_BEZIER* tmp = ( LIB_BEZIER* ) &aOther;
if( m_BezierPoints.size() != tmp->m_BezierPoints.size() ) if( m_BezierPoints.size() != tmp->m_BezierPoints.size() )
return m_BezierPoints.size() - tmp->m_BezierPoints.size(); return m_BezierPoints.size() - tmp->m_BezierPoints.size();
for( size_t i = 0; i < m_BezierPoints.size(); i++ ) for( size_t i = 0; i < m_BezierPoints.size(); i++ )
{ {
if( m_BezierPoints[i].x != tmp->m_BezierPoints[i].x ) if( m_BezierPoints[i].x != tmp->m_BezierPoints[i].x )
return m_BezierPoints[i].x - tmp->m_BezierPoints[i].x; return m_BezierPoints[i].x - tmp->m_BezierPoints[i].x;
if( m_BezierPoints[i].y != tmp->m_BezierPoints[i].y ) if( m_BezierPoints[i].y != tmp->m_BezierPoints[i].y )
return m_BezierPoints[i].y - tmp->m_BezierPoints[i].y; return m_BezierPoints[i].y - tmp->m_BezierPoints[i].y;
} }
return 0; return 0;
} }
void LIB_BEZIER::DoOffset( const wxPoint& aOffset ) void LIB_BEZIER::DoOffset( const wxPoint& aOffset )
{ {
size_t i; size_t i;
for( i = 0; i < m_BezierPoints.size(); i++ ) for( i = 0; i < m_BezierPoints.size(); i++ )
m_BezierPoints[i] += aOffset; m_BezierPoints[i] += aOffset;
for( i = 0; i < m_PolyPoints.size(); i++ ) for( i = 0; i < m_PolyPoints.size(); i++ )
m_PolyPoints[i] += aOffset; m_PolyPoints[i] += aOffset;
} }
bool LIB_BEZIER::DoTestInside( EDA_Rect& aRect ) const bool LIB_BEZIER::DoTestInside( EDA_Rect& aRect ) const
{ {
for( size_t i = 0; i < m_PolyPoints.size(); i++ ) for( size_t i = 0; i < m_PolyPoints.size(); i++ )
{ {
if( aRect.Inside( m_PolyPoints[i].x, -m_PolyPoints[i].y ) ) if( aRect.Inside( m_PolyPoints[i].x, -m_PolyPoints[i].y ) )
return true; return true;
} }
return false; return false;
} }
void LIB_BEZIER::DoMove( const wxPoint& aPosition ) void LIB_BEZIER::DoMove( const wxPoint& aPosition )
{ {
DoOffset( aPosition - m_PolyPoints[0] ); DoOffset( aPosition - m_PolyPoints[0] );
} }
void LIB_BEZIER::DoMirrorHorizontal( const wxPoint& aCenter ) void LIB_BEZIER::DoMirrorHorizontal( const wxPoint& aCenter )
{ {
size_t i, imax = m_PolyPoints.size(); size_t i, imax = m_PolyPoints.size();
for( i = 0; i < imax; i++ ) for( i = 0; i < imax; i++ )
{ {
m_PolyPoints[i].x -= aCenter.x; m_PolyPoints[i].x -= aCenter.x;
m_PolyPoints[i].x *= -1; m_PolyPoints[i].x *= -1;
m_PolyPoints[i].x += aCenter.x; m_PolyPoints[i].x += aCenter.x;
} }
imax = m_BezierPoints.size(); imax = m_BezierPoints.size();
for( i = 0; i < imax; i++ ) for( i = 0; i < imax; i++ )
{ {
m_BezierPoints[i].x -= aCenter.x; m_BezierPoints[i].x -= aCenter.x;
m_BezierPoints[i].x *= -1; m_BezierPoints[i].x *= -1;
m_BezierPoints[i].x += aCenter.x; m_BezierPoints[i].x += aCenter.x;
} }
} }
void LIB_BEZIER::DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, void LIB_BEZIER::DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ) const TRANSFORM& aTransform )
{ {
wxASSERT( aPlotter != NULL ); wxASSERT( aPlotter != NULL );
size_t i; size_t i;
int* Poly = (int*) MyMalloc( sizeof(int) * 2 * GetCornerCount() ); int* Poly = (int*) MyMalloc( sizeof(int) * 2 * GetCornerCount() );
if( Poly == NULL ) if( Poly == NULL )
return; return;
for( i = 0; i < m_PolyPoints.size(); i++ ) for( i = 0; i < m_PolyPoints.size(); i++ )
{ {
wxPoint pos = m_PolyPoints[i]; wxPoint pos = m_PolyPoints[i];
pos = aTransform.TransformCoordinate( pos ) + aOffset; pos = aTransform.TransformCoordinate( pos ) + aOffset;
Poly[i * 2] = pos.x; Poly[i * 2] = pos.x;
Poly[i * 2 + 1] = pos.y; Poly[i * 2 + 1] = pos.y;
} }
if( aFill && m_Fill == FILLED_WITH_BG_BODYCOLOR ) if( aFill && m_Fill == FILLED_WITH_BG_BODYCOLOR )
{ {
aPlotter->set_color( ReturnLayerColor( LAYER_DEVICE_BACKGROUND ) ); aPlotter->set_color( ReturnLayerColor( LAYER_DEVICE_BACKGROUND ) );
aPlotter->poly( i, Poly, FILLED_WITH_BG_BODYCOLOR, 0 ); aPlotter->poly( i, Poly, FILLED_WITH_BG_BODYCOLOR, 0 );
} }
bool already_filled = m_Fill == FILLED_WITH_BG_BODYCOLOR; bool already_filled = m_Fill == FILLED_WITH_BG_BODYCOLOR;
aPlotter->set_color( ReturnLayerColor( LAYER_DEVICE ) ); aPlotter->set_color( ReturnLayerColor( LAYER_DEVICE ) );
aPlotter->poly( i, Poly, already_filled ? NO_FILL : m_Fill, GetPenSize() ); aPlotter->poly( i, Poly, already_filled ? NO_FILL : m_Fill, GetPenSize() );
MyFree( Poly ); MyFree( Poly );
} }
/** /**
* Function GetPenSize * Function GetPenSize
* @return the size of the "pen" that be used to draw or plot this item * @return the size of the "pen" that be used to draw or plot this item
*/ */
int LIB_BEZIER::GetPenSize() int LIB_BEZIER::GetPenSize()
{ {
return ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width; return ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width;
} }
void LIB_BEZIER::drawGraphic( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset, void LIB_BEZIER::drawGraphic( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aColor, int aDrawMode, void* aData, const TRANSFORM& aTransform ) int aColor, int aDrawMode, void* aData, const TRANSFORM& aTransform )
{ {
wxPoint pos1; wxPoint pos1;
std::vector<wxPoint> PolyPointsTraslated; std::vector<wxPoint> PolyPointsTraslated;
int color = ReturnLayerColor( LAYER_DEVICE ); int color = ReturnLayerColor( LAYER_DEVICE );
m_PolyPoints = Bezier2Poly( m_BezierPoints[0], m_PolyPoints = Bezier2Poly( m_BezierPoints[0],
m_BezierPoints[1], m_BezierPoints[1],
m_BezierPoints[2], m_BezierPoints[2],
m_BezierPoints[3] ); m_BezierPoints[3] );
PolyPointsTraslated.clear(); PolyPointsTraslated.clear();
for( unsigned int i = 0; i < m_PolyPoints.size() ; i++ ) for( unsigned int i = 0; i < m_PolyPoints.size() ; i++ )
PolyPointsTraslated.push_back( aTransform.TransformCoordinate( m_PolyPoints[i] ) + PolyPointsTraslated.push_back( aTransform.TransformCoordinate( m_PolyPoints[i] ) +
aOffset ); aOffset );
if( aColor < 0 ) // Used normal color or selected color if( aColor < 0 ) // Used normal color or selected color
{ {
if( m_Selected & IS_SELECTED ) if( m_Selected & IS_SELECTED )
color = g_ItemSelectetColor; color = g_ItemSelectetColor;
} }
else else
color = aColor; color = aColor;
FILL_T fill = aData ? NO_FILL : m_Fill; FILL_T fill = aData ? NO_FILL : m_Fill;
if( aColor >= 0 ) if( aColor >= 0 )
fill = NO_FILL; fill = NO_FILL;
GRSetDrawMode( aDC, aDrawMode ); GRSetDrawMode( aDC, aDrawMode );
if( fill == FILLED_WITH_BG_BODYCOLOR ) if( fill == FILLED_WITH_BG_BODYCOLOR )
GRPoly( &aPanel->m_ClipBox, aDC, m_PolyPoints.size(), GRPoly( &aPanel->m_ClipBox, aDC, m_PolyPoints.size(),
&PolyPointsTraslated[0], 1, GetPenSize(), &PolyPointsTraslated[0], 1, GetPenSize(),
(m_Flags & IS_MOVED) ? color : ReturnLayerColor( LAYER_DEVICE_BACKGROUND ), (m_Flags & IS_MOVED) ? color : ReturnLayerColor( LAYER_DEVICE_BACKGROUND ),
ReturnLayerColor( LAYER_DEVICE_BACKGROUND ) ); ReturnLayerColor( LAYER_DEVICE_BACKGROUND ) );
else if( fill == FILLED_SHAPE ) else if( fill == FILLED_SHAPE )
GRPoly( &aPanel->m_ClipBox, aDC, m_PolyPoints.size(), GRPoly( &aPanel->m_ClipBox, aDC, m_PolyPoints.size(),
&PolyPointsTraslated[0], 1, GetPenSize(), color, color ); &PolyPointsTraslated[0], 1, GetPenSize(), color, color );
else else
GRPoly( &aPanel->m_ClipBox, aDC, m_PolyPoints.size(), GRPoly( &aPanel->m_ClipBox, aDC, m_PolyPoints.size(),
&PolyPointsTraslated[0], 0, GetPenSize(), color, color ); &PolyPointsTraslated[0], 0, GetPenSize(), color, color );
/* Set to one (1) to draw bounding box around bezier curve to validate /* Set to one (1) to draw bounding box around bezier curve to validate
* bounding box calculation. */ * bounding box calculation. */
#if 0 #if 0
EDA_Rect bBox = GetBoundingBox(); EDA_Rect bBox = GetBoundingBox();
bBox.Inflate( m_Width + 1, m_Width + 1 ); bBox.Inflate( m_Thickness + 1, m_Thickness + 1 );
GRRect( &aPanel->m_ClipBox, aDC, bBox.GetOrigin().x, bBox.GetOrigin().y, GRRect( &aPanel->m_ClipBox, aDC, bBox.GetOrigin().x, bBox.GetOrigin().y,
bBox.GetEnd().x, bBox.GetEnd().y, 0, LIGHTMAGENTA ); bBox.GetEnd().x, bBox.GetEnd().y, 0, LIGHTMAGENTA );
#endif #endif
} }
/** /**
* Function HitTest * Function HitTest
* tests if the given wxPoint is within the bounds of this object. * tests if the given wxPoint is within the bounds of this object.
* @param aRefPos A wxPoint to test * @param aRefPos A wxPoint to test
* @return true if a hit, else false * @return true if a hit, else false
*/ */
bool LIB_BEZIER::HitTest( const wxPoint& aRefPos ) bool LIB_BEZIER::HitTest( const wxPoint& aRefPos )
{ {
int mindist = m_Width ? m_Width / 2 : g_DrawDefaultLineThickness / 2; int mindist = m_Width ? m_Width / 2 : g_DrawDefaultLineThickness / 2;
// Have a minimal tolerance for hit test // Have a minimal tolerance for hit test
if ( mindist < MINIMUM_SELECTION_DISTANCE ) if ( mindist < MINIMUM_SELECTION_DISTANCE )
mindist = MINIMUM_SELECTION_DISTANCE; mindist = MINIMUM_SELECTION_DISTANCE;
return HitTest( aRefPos, mindist, DefaultTransform ); return HitTest( aRefPos, mindist, DefaultTransform );
} }
/** /**
* Function HitTest * Function HitTest
* @return if the point aPosRef is near a segment * @return if the point aPosRef is near a segment
* @param aPosRef = a wxPoint to test * @param aPosRef = a wxPoint to test
* @param aThreshold = max distance to a segment * @param aThreshold = max distance to a segment
* @param aTransMat = the transform matrix * @param aTransMat = the transform matrix
*/ */
bool LIB_BEZIER::HitTest( wxPoint aPosRef, int aThreshold, const TRANSFORM& aTransform ) bool LIB_BEZIER::HitTest( wxPoint aPosRef, int aThreshold, const TRANSFORM& aTransform )
{ {
wxPoint ref, start, end; wxPoint ref, start, end;
for( unsigned ii = 1; ii < GetCornerCount(); ii++ ) for( unsigned ii = 1; ii < GetCornerCount(); ii++ )
{ {
start = aTransform.TransformCoordinate( m_PolyPoints[ii - 1] ); start = aTransform.TransformCoordinate( m_PolyPoints[ii - 1] );
end = aTransform.TransformCoordinate( m_PolyPoints[ii] ); end = aTransform.TransformCoordinate( m_PolyPoints[ii] );
if ( TestSegmentHit( aPosRef, start, end, aThreshold ) ) if ( TestSegmentHit( aPosRef, start, end, aThreshold ) )
return true; return true;
} }
return false; return false;
} }
/** /**
* Function GetBoundingBox * Function GetBoundingBox
* @return the boundary box for this, in library coordinates * @return the boundary box for this, in library coordinates
*/ */
EDA_Rect LIB_BEZIER::GetBoundingBox() EDA_Rect LIB_BEZIER::GetBoundingBox()
{ {
EDA_Rect rect; EDA_Rect rect;
int xmin, xmax, ymin, ymax; int xmin, xmax, ymin, ymax;
if( !GetCornerCount() ) if( !GetCornerCount() )
return rect; return rect;
xmin = xmax = m_PolyPoints[0].x; xmin = xmax = m_PolyPoints[0].x;
ymin = ymax = m_PolyPoints[0].y; ymin = ymax = m_PolyPoints[0].y;
for( unsigned ii = 1; ii < GetCornerCount(); ii++ ) for( unsigned ii = 1; ii < GetCornerCount(); ii++ )
{ {
xmin = MIN( xmin, m_PolyPoints[ii].x ); xmin = MIN( xmin, m_PolyPoints[ii].x );
xmax = MAX( xmax, m_PolyPoints[ii].x ); xmax = MAX( xmax, m_PolyPoints[ii].x );
ymin = MIN( ymin, m_PolyPoints[ii].y ); ymin = MIN( ymin, m_PolyPoints[ii].y );
ymax = MAX( ymax, m_PolyPoints[ii].y ); ymax = MAX( ymax, m_PolyPoints[ii].y );
} }
rect.SetOrigin( xmin, ymin * -1 ); rect.SetOrigin( xmin, ymin * -1 );
rect.SetEnd( xmax, ymax * -1 ); rect.SetEnd( xmax, ymax * -1 );
rect.Inflate( m_Width / 2, m_Width / 2 ); rect.Inflate( m_Width / 2, m_Width / 2 );
return rect; return rect;
} }
void LIB_BEZIER::DisplayInfo( WinEDA_DrawFrame* aFrame ) void LIB_BEZIER::DisplayInfo( WinEDA_DrawFrame* aFrame )
{ {
wxString msg; wxString msg;
EDA_Rect bBox = GetBoundingBox(); EDA_Rect bBox = GetBoundingBox();
LIB_DRAW_ITEM::DisplayInfo( aFrame ); LIB_DRAW_ITEM::DisplayInfo( aFrame );
msg = ReturnStringFromValue( g_UserUnit, m_Width, EESCHEMA_INTERNAL_UNIT, true ); msg = ReturnStringFromValue( g_UserUnit, m_Width, EESCHEMA_INTERNAL_UNIT, true );
aFrame->AppendMsgPanel( _( "Line width" ), msg, BLUE ); aFrame->AppendMsgPanel( _( "Line width" ), msg, BLUE );
msg.Printf( wxT( "(%d, %d, %d, %d)" ), bBox.GetOrigin().x, msg.Printf( wxT( "(%d, %d, %d, %d)" ), bBox.GetOrigin().x,
bBox.GetOrigin().y, bBox.GetEnd().x, bBox.GetEnd().y ); bBox.GetOrigin().y, bBox.GetEnd().x, bBox.GetEnd().y );
aFrame->AppendMsgPanel( _( "Bounding box" ), msg, BROWN ); aFrame->AppendMsgPanel( _( "Bounding box" ), msg, BROWN );
} }
...@@ -59,7 +59,7 @@ LIB_FIELD::LIB_FIELD( const LIB_FIELD& field ) : LIB_DRAW_ITEM( field ) ...@@ -59,7 +59,7 @@ LIB_FIELD::LIB_FIELD( const LIB_FIELD& field ) : LIB_DRAW_ITEM( field )
m_FieldId = field.m_FieldId; m_FieldId = field.m_FieldId;
m_Pos = field.m_Pos; m_Pos = field.m_Pos;
m_Size = field.m_Size; m_Size = field.m_Size;
m_Width = field.m_Width; m_Thickness = field.m_Thickness;
m_Orient = field.m_Orient; m_Orient = field.m_Orient;
m_Attributs = field.m_Attributs; m_Attributs = field.m_Attributs;
m_Text = field.m_Text; m_Text = field.m_Text;
...@@ -283,7 +283,7 @@ bool LIB_FIELD::Load( char* line, wxString& errorMsg ) ...@@ -283,7 +283,7 @@ bool LIB_FIELD::Load( char* line, wxString& errorMsg )
*/ */
int LIB_FIELD::GetPenSize() int LIB_FIELD::GetPenSize()
{ {
return ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width; return ( m_Thickness == 0 ) ? g_DrawDefaultLineThickness : m_Thickness;
} }
...@@ -425,7 +425,7 @@ void LIB_FIELD::Copy( LIB_FIELD* Target ) const ...@@ -425,7 +425,7 @@ void LIB_FIELD::Copy( LIB_FIELD* Target ) const
Target->SetParent( m_Parent ); Target->SetParent( m_Parent );
Target->m_Pos = m_Pos; Target->m_Pos = m_Pos;
Target->m_Size = m_Size; Target->m_Size = m_Size;
Target->m_Width = m_Width; Target->m_Thickness = m_Thickness;
Target->m_Orient = m_Orient; Target->m_Orient = m_Orient;
Target->m_Attributs = m_Attributs; Target->m_Attributs = m_Attributs;
Target->m_Text = m_Text; Target->m_Text = m_Text;
......
...@@ -138,7 +138,7 @@ public: ...@@ -138,7 +138,7 @@ public:
m_Name = field.m_Name; m_Name = field.m_Name;
m_Pos = field.m_Pos; m_Pos = field.m_Pos;
m_Size = field.m_Size; m_Size = field.m_Size;
m_Width = field.m_Width; m_Thickness = field.m_Thickness;
m_Orient = field.m_Orient; m_Orient = field.m_Orient;
m_Mirror = field.m_Mirror; m_Mirror = field.m_Mirror;
m_Attributs = field.m_Attributs; m_Attributs = field.m_Attributs;
...@@ -217,8 +217,8 @@ protected: ...@@ -217,8 +217,8 @@ protected:
virtual void DoMirrorHorizontal( const wxPoint& center ); virtual void DoMirrorHorizontal( const wxPoint& center );
virtual void DoPlot( PLOTTER* plotter, const wxPoint& offset, bool fill, virtual void DoPlot( PLOTTER* plotter, const wxPoint& offset, bool fill,
const TRANSFORM& aTransform ); const TRANSFORM& aTransform );
virtual int DoGetWidth( void ) const { return m_Width; } virtual int DoGetWidth( void ) const { return m_Thickness; }
virtual void DoSetWidth( int width ) { m_Width = width; } virtual void DoSetWidth( int width ) { m_Thickness = width; }
}; };
typedef std::vector< LIB_FIELD > LIB_FIELD_LIST; typedef std::vector< LIB_FIELD > LIB_FIELD_LIST;
......
/************************/ /************************/
/** class LIB_POLYLINE **/ /** class LIB_POLYLINE **/
/************************/ /************************/
#include "fctsys.h" #include "fctsys.h"
#include "gr_basic.h" #include "gr_basic.h"
#include "common.h" #include "common.h"
#include "macros.h" #include "macros.h"
#include "class_drawpanel.h" #include "class_drawpanel.h"
#include "plot_common.h" #include "plot_common.h"
#include "trigo.h" #include "trigo.h"
#include "wxstruct.h" #include "wxstruct.h"
#include "general.h" #include "general.h"
#include "protos.h" #include "protos.h"
#include "lib_polyline.h" #include "lib_polyline.h"
#include "transform.h" #include "transform.h"
#include <boost/foreach.hpp> #include <boost/foreach.hpp>
LIB_POLYLINE::LIB_POLYLINE( LIB_COMPONENT* aParent ) : LIB_POLYLINE::LIB_POLYLINE( LIB_COMPONENT* aParent ) :
LIB_DRAW_ITEM( COMPONENT_POLYLINE_DRAW_TYPE, aParent ) LIB_DRAW_ITEM( COMPONENT_POLYLINE_DRAW_TYPE, aParent )
{ {
m_Fill = NO_FILL; m_Fill = NO_FILL;
m_Width = 0; m_Width = 0;
m_isFillable = true; m_isFillable = true;
m_typeName = _( "PolyLine" ); m_typeName = _( "PolyLine" );
} }
LIB_POLYLINE::LIB_POLYLINE( const LIB_POLYLINE& polyline ) : LIB_POLYLINE::LIB_POLYLINE( const LIB_POLYLINE& polyline ) :
LIB_DRAW_ITEM( polyline ) LIB_DRAW_ITEM( polyline )
{ {
m_PolyPoints = polyline.m_PolyPoints; // Vector copy m_PolyPoints = polyline.m_PolyPoints; // Vector copy
m_Width = polyline.m_Width; m_Width = polyline.m_Width;
m_Fill = polyline.m_Fill; m_Fill = polyline.m_Fill;
} }
bool LIB_POLYLINE::Save( FILE* aFile ) bool LIB_POLYLINE::Save( FILE* aFile )
{ {
int ccount = GetCornerCount(); int ccount = GetCornerCount();
if( fprintf( aFile, "P %d %d %d %d", ccount, m_Unit, m_Convert, m_Width ) < 0 ) if( fprintf( aFile, "P %d %d %d %d", ccount, m_Unit, m_Convert, m_Width ) < 0 )
return false; return false;
for( unsigned i = 0; i < GetCornerCount(); i++ ) for( unsigned i = 0; i < GetCornerCount(); i++ )
{ {
if( fprintf( aFile, " %d %d", m_PolyPoints[i].x, m_PolyPoints[i].y ) < 0 ) if( fprintf( aFile, " %d %d", m_PolyPoints[i].x, m_PolyPoints[i].y ) < 0 )
return false; return false;
} }
if( fprintf( aFile, " %c\n", fill_tab[m_Fill] ) < 0 ) if( fprintf( aFile, " %c\n", fill_tab[m_Fill] ) < 0 )
return false; return false;
return true; return true;
} }
bool LIB_POLYLINE::Load( char* aLine, wxString& aErrorMsg ) bool LIB_POLYLINE::Load( char* aLine, wxString& aErrorMsg )
{ {
char* p; char* p;
int i, ccount = 0; int i, ccount = 0;
wxPoint pt; wxPoint pt;
i = sscanf( &aLine[2], "%d %d %d %d", &ccount, &m_Unit, &m_Convert, i = sscanf( &aLine[2], "%d %d %d %d", &ccount, &m_Unit, &m_Convert,
&m_Width ); &m_Width );
m_Fill = NO_FILL; m_Fill = NO_FILL;
if( i < 4 ) if( i < 4 )
{ {
aErrorMsg.Printf( _( "polyline only had %d parameters of the required 4" ), i ); aErrorMsg.Printf( _( "polyline only had %d parameters of the required 4" ), i );
return false; return false;
} }
if( ccount <= 0 ) if( ccount <= 0 )
{ {
aErrorMsg.Printf( _( "polyline count parameter %d is invalid" ), ccount ); aErrorMsg.Printf( _( "polyline count parameter %d is invalid" ), ccount );
return false; return false;
} }
p = strtok( &aLine[2], " \t\n" ); p = strtok( &aLine[2], " \t\n" );
p = strtok( NULL, " \t\n" ); p = strtok( NULL, " \t\n" );
p = strtok( NULL, " \t\n" ); p = strtok( NULL, " \t\n" );
p = strtok( NULL, " \t\n" ); p = strtok( NULL, " \t\n" );
for( i = 0; i < ccount; i++ ) for( i = 0; i < ccount; i++ )
{ {
wxPoint point; wxPoint point;
p = strtok( NULL, " \t\n" ); p = strtok( NULL, " \t\n" );
if( p == NULL || sscanf( p, "%d", &pt.x ) != 1 ) if( p == NULL || sscanf( p, "%d", &pt.x ) != 1 )
{ {
aErrorMsg.Printf( _( "polyline point %d X position not defined" ), i ); aErrorMsg.Printf( _( "polyline point %d X position not defined" ), i );
return false; return false;
} }
p = strtok( NULL, " \t\n" ); p = strtok( NULL, " \t\n" );
if( p == NULL || sscanf( p, "%d", &pt.y ) != 1 ) if( p == NULL || sscanf( p, "%d", &pt.y ) != 1 )
{ {
aErrorMsg.Printf( _( "polyline point %d Y position not defined" ), i ); aErrorMsg.Printf( _( "polyline point %d Y position not defined" ), i );
return false; return false;
} }
AddPoint( pt ); AddPoint( pt );
} }
if( ( p = strtok( NULL, " \t\n" ) ) != NULL ) if( ( p = strtok( NULL, " \t\n" ) ) != NULL )
{ {
if( p[0] == 'F' ) if( p[0] == 'F' )
m_Fill = FILLED_SHAPE; m_Fill = FILLED_SHAPE;
if( p[0] == 'f' ) if( p[0] == 'f' )
m_Fill = FILLED_WITH_BG_BODYCOLOR; m_Fill = FILLED_WITH_BG_BODYCOLOR;
} }
return true; return true;
} }
LIB_DRAW_ITEM* LIB_POLYLINE::DoGenCopy() LIB_DRAW_ITEM* LIB_POLYLINE::DoGenCopy()
{ {
LIB_POLYLINE* newitem = new LIB_POLYLINE( GetParent() ); LIB_POLYLINE* newitem = new LIB_POLYLINE( GetParent() );
newitem->m_PolyPoints = m_PolyPoints; // Vector copy newitem->m_PolyPoints = m_PolyPoints; // Vector copy
newitem->m_Width = m_Width; newitem->m_Width = m_Width;
newitem->m_Unit = m_Unit; newitem->m_Unit = m_Unit;
newitem->m_Convert = m_Convert; newitem->m_Convert = m_Convert;
newitem->m_Flags = m_Flags; newitem->m_Flags = m_Flags;
newitem->m_Fill = m_Fill; newitem->m_Fill = m_Fill;
return (LIB_DRAW_ITEM*) newitem; return (LIB_DRAW_ITEM*) newitem;
} }
int LIB_POLYLINE::DoCompare( const LIB_DRAW_ITEM& aOther ) const int LIB_POLYLINE::DoCompare( const LIB_DRAW_ITEM& aOther ) const
{ {
wxASSERT( aOther.Type() == COMPONENT_POLYLINE_DRAW_TYPE ); wxASSERT( aOther.Type() == COMPONENT_POLYLINE_DRAW_TYPE );
const LIB_POLYLINE* tmp = ( LIB_POLYLINE* ) &aOther; const LIB_POLYLINE* tmp = ( LIB_POLYLINE* ) &aOther;
if( m_PolyPoints.size() != tmp->m_PolyPoints.size() ) if( m_PolyPoints.size() != tmp->m_PolyPoints.size() )
return m_PolyPoints.size() - tmp->m_PolyPoints.size(); return m_PolyPoints.size() - tmp->m_PolyPoints.size();
for( size_t i = 0; i < m_PolyPoints.size(); i++ ) for( size_t i = 0; i < m_PolyPoints.size(); i++ )
{ {
if( m_PolyPoints[i].x != tmp->m_PolyPoints[i].x ) if( m_PolyPoints[i].x != tmp->m_PolyPoints[i].x )
return m_PolyPoints[i].x - tmp->m_PolyPoints[i].x; return m_PolyPoints[i].x - tmp->m_PolyPoints[i].x;
if( m_PolyPoints[i].y != tmp->m_PolyPoints[i].y ) if( m_PolyPoints[i].y != tmp->m_PolyPoints[i].y )
return m_PolyPoints[i].y - tmp->m_PolyPoints[i].y; return m_PolyPoints[i].y - tmp->m_PolyPoints[i].y;
} }
return 0; return 0;
} }
void LIB_POLYLINE::DoOffset( const wxPoint& aOffset ) void LIB_POLYLINE::DoOffset( const wxPoint& aOffset )
{ {
for( size_t i = 0; i < m_PolyPoints.size(); i++ ) for( size_t i = 0; i < m_PolyPoints.size(); i++ )
m_PolyPoints[i] += aOffset; m_PolyPoints[i] += aOffset;
} }
bool LIB_POLYLINE::DoTestInside( EDA_Rect& aRect ) const bool LIB_POLYLINE::DoTestInside( EDA_Rect& aRect ) const
{ {
for( size_t i = 0; i < m_PolyPoints.size(); i++ ) for( size_t i = 0; i < m_PolyPoints.size(); i++ )
{ {
if( aRect.Inside( m_PolyPoints[i].x, -m_PolyPoints[i].y ) ) if( aRect.Inside( m_PolyPoints[i].x, -m_PolyPoints[i].y ) )
return true; return true;
} }
return false; return false;
} }
void LIB_POLYLINE::DoMove( const wxPoint& aPosition ) void LIB_POLYLINE::DoMove( const wxPoint& aPosition )
{ {
DoOffset( aPosition - m_PolyPoints[0] ); DoOffset( aPosition - m_PolyPoints[0] );
} }
void LIB_POLYLINE::DoMirrorHorizontal( const wxPoint& aCenter ) void LIB_POLYLINE::DoMirrorHorizontal( const wxPoint& aCenter )
{ {
size_t i, imax = m_PolyPoints.size(); size_t i, imax = m_PolyPoints.size();
for( i = 0; i < imax; i++ ) for( i = 0; i < imax; i++ )
{ {
m_PolyPoints[i].x -= aCenter.x; m_PolyPoints[i].x -= aCenter.x;
m_PolyPoints[i].x *= -1; m_PolyPoints[i].x *= -1;
m_PolyPoints[i].x += aCenter.x; m_PolyPoints[i].x += aCenter.x;
} }
} }
void LIB_POLYLINE::DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, void LIB_POLYLINE::DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ) const TRANSFORM& aTransform )
{ {
wxASSERT( aPlotter != NULL ); wxASSERT( aPlotter != NULL );
size_t i; size_t i;
int* Poly = (int*) MyMalloc( sizeof(int) * 2 * GetCornerCount() ); int* Poly = (int*) MyMalloc( sizeof(int) * 2 * GetCornerCount() );
if( Poly == NULL ) if( Poly == NULL )
return; return;
for( i = 0; i < m_PolyPoints.size(); i++ ) for( i = 0; i < m_PolyPoints.size(); i++ )
{ {
wxPoint pos = m_PolyPoints[i]; wxPoint pos = m_PolyPoints[i];
pos = aTransform.TransformCoordinate(pos ) + aOffset; pos = aTransform.TransformCoordinate(pos ) + aOffset;
Poly[i * 2] = pos.x; Poly[i * 2] = pos.x;
Poly[i * 2 + 1] = pos.y; Poly[i * 2 + 1] = pos.y;
} }
if( aFill && m_Fill == FILLED_WITH_BG_BODYCOLOR ) if( aFill && m_Fill == FILLED_WITH_BG_BODYCOLOR )
{ {
aPlotter->set_color( ReturnLayerColor( LAYER_DEVICE_BACKGROUND ) ); aPlotter->set_color( ReturnLayerColor( LAYER_DEVICE_BACKGROUND ) );
aPlotter->poly( i, Poly, FILLED_WITH_BG_BODYCOLOR, 0 ); aPlotter->poly( i, Poly, FILLED_WITH_BG_BODYCOLOR, 0 );
aFill = false; // body is now filled, do not fill it later. aFill = false; // body is now filled, do not fill it later.
} }
bool already_filled = m_Fill == FILLED_WITH_BG_BODYCOLOR; bool already_filled = m_Fill == FILLED_WITH_BG_BODYCOLOR;
aPlotter->set_color( ReturnLayerColor( LAYER_DEVICE ) ); aPlotter->set_color( ReturnLayerColor( LAYER_DEVICE ) );
aPlotter->poly( i, Poly, already_filled ? NO_FILL : m_Fill, GetPenSize() ); aPlotter->poly( i, Poly, already_filled ? NO_FILL : m_Fill, GetPenSize() );
MyFree( Poly ); MyFree( Poly );
} }
void LIB_POLYLINE::AddPoint( const wxPoint& point ) void LIB_POLYLINE::AddPoint( const wxPoint& point )
{ {
m_PolyPoints.push_back( point ); m_PolyPoints.push_back( point );
} }
/** /**
* Function GetPenSize * Function GetPenSize
* @return the size of the "pen" that be used to draw or plot this item * @return the size of the "pen" that be used to draw or plot this item
*/ */
int LIB_POLYLINE::GetPenSize() int LIB_POLYLINE::GetPenSize()
{ {
return ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width; return ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width;
} }
void LIB_POLYLINE::drawGraphic( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset, void LIB_POLYLINE::drawGraphic( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aColor, int aDrawMode, void* aData, int aColor, int aDrawMode, void* aData,
const TRANSFORM& aTransform ) const TRANSFORM& aTransform )
{ {
wxPoint pos1; wxPoint pos1;
int color = ReturnLayerColor( LAYER_DEVICE ); int color = ReturnLayerColor( LAYER_DEVICE );
// Buffer used to store current corners coordinates for drawings // Buffer used to store current corners coordinates for drawings
static wxPoint* Buf_Poly_Drawings = NULL; static wxPoint* Buf_Poly_Drawings = NULL;
static unsigned Buf_Poly_Size = 0; static unsigned Buf_Poly_Size = 0;
if( aColor < 0 ) // Used normal color or selected color if( aColor < 0 ) // Used normal color or selected color
{ {
if( m_Selected & IS_SELECTED ) if( m_Selected & IS_SELECTED )
color = g_ItemSelectetColor; color = g_ItemSelectetColor;
} }
else else
color = aColor; color = aColor;
// Set the size of the buffer of coordinates // Set the size of the buffer of coordinates
if( Buf_Poly_Drawings == NULL ) if( Buf_Poly_Drawings == NULL )
{ {
Buf_Poly_Size = m_PolyPoints.size(); Buf_Poly_Size = m_PolyPoints.size();
Buf_Poly_Drawings = (wxPoint*) MyMalloc( sizeof(wxPoint) * Buf_Poly_Size ); Buf_Poly_Drawings = (wxPoint*) MyMalloc( sizeof(wxPoint) * Buf_Poly_Size );
} }
else if( Buf_Poly_Size < m_PolyPoints.size() ) else if( Buf_Poly_Size < m_PolyPoints.size() )
{ {
Buf_Poly_Size = m_PolyPoints.size(); Buf_Poly_Size = m_PolyPoints.size();
Buf_Poly_Drawings = (wxPoint*) realloc( Buf_Poly_Drawings, Buf_Poly_Drawings = (wxPoint*) realloc( Buf_Poly_Drawings,
sizeof(wxPoint) * Buf_Poly_Size ); sizeof(wxPoint) * Buf_Poly_Size );
} }
// This should probably throw an exception instead of displaying a warning message. // This should probably throw an exception instead of displaying a warning message.
if( Buf_Poly_Drawings == NULL ) if( Buf_Poly_Drawings == NULL )
{ {
wxLogWarning( wxT( "Cannot allocate memory to draw polylines." ) ); wxLogWarning( wxT( "Cannot allocate memory to draw polylines." ) );
return; return;
} }
for( unsigned ii = 0; ii < m_PolyPoints.size(); ii++ ) for( unsigned ii = 0; ii < m_PolyPoints.size(); ii++ )
{ {
Buf_Poly_Drawings[ii] = aTransform.TransformCoordinate( m_PolyPoints[ii] ) + aOffset; Buf_Poly_Drawings[ii] = aTransform.TransformCoordinate( m_PolyPoints[ii] ) + aOffset;
} }
FILL_T fill = aData ? NO_FILL : m_Fill; FILL_T fill = aData ? NO_FILL : m_Fill;
if( aColor >= 0 ) if( aColor >= 0 )
fill = NO_FILL; fill = NO_FILL;
GRSetDrawMode( aDC, aDrawMode ); GRSetDrawMode( aDC, aDrawMode );
if( fill == FILLED_WITH_BG_BODYCOLOR ) if( fill == FILLED_WITH_BG_BODYCOLOR )
GRPoly( &aPanel->m_ClipBox, aDC, m_PolyPoints.size(), GRPoly( &aPanel->m_ClipBox, aDC, m_PolyPoints.size(),
Buf_Poly_Drawings, 1, GetPenSize( ), Buf_Poly_Drawings, 1, GetPenSize( ),
(m_Flags & IS_MOVED) ? color : ReturnLayerColor( LAYER_DEVICE_BACKGROUND ), (m_Flags & IS_MOVED) ? color : ReturnLayerColor( LAYER_DEVICE_BACKGROUND ),
ReturnLayerColor( LAYER_DEVICE_BACKGROUND ) ); ReturnLayerColor( LAYER_DEVICE_BACKGROUND ) );
else if( fill == FILLED_SHAPE ) else if( fill == FILLED_SHAPE )
GRPoly( &aPanel->m_ClipBox, aDC, m_PolyPoints.size(), GRPoly( &aPanel->m_ClipBox, aDC, m_PolyPoints.size(),
Buf_Poly_Drawings, 1, GetPenSize( ), color, color ); Buf_Poly_Drawings, 1, GetPenSize( ), color, color );
else else
GRPoly( &aPanel->m_ClipBox, aDC, m_PolyPoints.size(), GRPoly( &aPanel->m_ClipBox, aDC, m_PolyPoints.size(),
Buf_Poly_Drawings, 0, GetPenSize( ), color, color ); Buf_Poly_Drawings, 0, GetPenSize( ), color, color );
/* Set to one (1) to draw bounding box around polyline to validate /* Set to one (1) to draw bounding box around polyline to validate
* bounding box calculation. */ * bounding box calculation. */
#if 0 #if 0
EDA_Rect bBox = GetBoundingBox(); EDA_Rect bBox = GetBoundingBox();
bBox.Inflate( m_Width + 1, m_Width + 1 ); bBox.Inflate( m_Thickness + 1, m_Thickness + 1 );
GRRect( &aPanel->m_ClipBox, aDC, bBox.GetOrigin().x, bBox.GetOrigin().y, GRRect( &aPanel->m_ClipBox, aDC, bBox.GetOrigin().x, bBox.GetOrigin().y,
bBox.GetEnd().x, bBox.GetEnd().y, 0, LIGHTMAGENTA ); bBox.GetEnd().x, bBox.GetEnd().y, 0, LIGHTMAGENTA );
#endif #endif
} }
/** /**
* Function HitTest * Function HitTest
* tests if the given wxPoint is within the bounds of this object. * tests if the given wxPoint is within the bounds of this object.
* @param aRefPos A wxPoint to test * @param aRefPos A wxPoint to test
* @return true if a hit, else false * @return true if a hit, else false
*/ */
bool LIB_POLYLINE::HitTest( const wxPoint& aRefPos ) bool LIB_POLYLINE::HitTest( const wxPoint& aRefPos )
{ {
int mindist = m_Width ? m_Width / 2 : g_DrawDefaultLineThickness / 2; int mindist = m_Width ? m_Width / 2 : g_DrawDefaultLineThickness / 2;
// Have a minimal tolerance for hit test // Have a minimal tolerance for hit test
if( mindist < MINIMUM_SELECTION_DISTANCE ) if( mindist < MINIMUM_SELECTION_DISTANCE )
mindist = MINIMUM_SELECTION_DISTANCE; mindist = MINIMUM_SELECTION_DISTANCE;
return HitTest( aRefPos, mindist, DefaultTransform ); return HitTest( aRefPos, mindist, DefaultTransform );
} }
/** /**
* Function HitTest * Function HitTest
* @return true if the point aPosRef is near a segment * @return true if the point aPosRef is near a segment
* @param aPosRef = a wxPoint to test * @param aPosRef = a wxPoint to test
* @param aThreshold = max distance to a segment * @param aThreshold = max distance to a segment
* @param aTransMat = the transform matrix * @param aTransMat = the transform matrix
*/ */
bool LIB_POLYLINE::HitTest( wxPoint aPosRef, int aThreshold, const TRANSFORM& aTransform ) bool LIB_POLYLINE::HitTest( wxPoint aPosRef, int aThreshold, const TRANSFORM& aTransform )
{ {
wxPoint ref, start, end; wxPoint ref, start, end;
for( unsigned ii = 1; ii < GetCornerCount(); ii++ ) for( unsigned ii = 1; ii < GetCornerCount(); ii++ )
{ {
start = aTransform.TransformCoordinate( m_PolyPoints[ii - 1] ); start = aTransform.TransformCoordinate( m_PolyPoints[ii - 1] );
end = aTransform.TransformCoordinate( m_PolyPoints[ii] ); end = aTransform.TransformCoordinate( m_PolyPoints[ii] );
if( TestSegmentHit( aPosRef, start, end, aThreshold ) ) if( TestSegmentHit( aPosRef, start, end, aThreshold ) )
return true; return true;
} }
return false; return false;
} }
/** /**
* Function GetBoundingBox * Function GetBoundingBox
* @return the boundary box for this, in library coordinates * @return the boundary box for this, in library coordinates
*/ */
EDA_Rect LIB_POLYLINE::GetBoundingBox() EDA_Rect LIB_POLYLINE::GetBoundingBox()
{ {
EDA_Rect rect; EDA_Rect rect;
int xmin, xmax, ymin, ymax; int xmin, xmax, ymin, ymax;
xmin = xmax = m_PolyPoints[0].x; xmin = xmax = m_PolyPoints[0].x;
ymin = ymax = m_PolyPoints[0].y; ymin = ymax = m_PolyPoints[0].y;
for( unsigned ii = 1; ii < GetCornerCount(); ii++ ) for( unsigned ii = 1; ii < GetCornerCount(); ii++ )
{ {
xmin = MIN( xmin, m_PolyPoints[ii].x ); xmin = MIN( xmin, m_PolyPoints[ii].x );
xmax = MAX( xmax, m_PolyPoints[ii].x ); xmax = MAX( xmax, m_PolyPoints[ii].x );
ymin = MIN( ymin, m_PolyPoints[ii].y ); ymin = MIN( ymin, m_PolyPoints[ii].y );
ymax = MAX( ymax, m_PolyPoints[ii].y ); ymax = MAX( ymax, m_PolyPoints[ii].y );
} }
rect.SetOrigin( xmin, ymin * -1 ); rect.SetOrigin( xmin, ymin * -1 );
rect.SetEnd( xmax, ymax * -1 ); rect.SetEnd( xmax, ymax * -1 );
rect.Inflate( m_Width / 2, m_Width / 2 ); rect.Inflate( m_Width / 2, m_Width / 2 );
return rect; return rect;
} }
void LIB_POLYLINE::DeleteSegment( const wxPoint aPosition ) void LIB_POLYLINE::DeleteSegment( const wxPoint aPosition )
{ {
// First segment is kept, only its end point is changed // First segment is kept, only its end point is changed
while( GetCornerCount() > 2 ) while( GetCornerCount() > 2 )
{ {
m_PolyPoints.pop_back(); m_PolyPoints.pop_back();
if( m_PolyPoints[ GetCornerCount() - 1 ] != aPosition ) if( m_PolyPoints[ GetCornerCount() - 1 ] != aPosition )
{ {
m_PolyPoints[ GetCornerCount() - 1 ] = aPosition; m_PolyPoints[ GetCornerCount() - 1 ] = aPosition;
break; break;
} }
} }
} }
void LIB_POLYLINE::DisplayInfo( WinEDA_DrawFrame* aFrame ) void LIB_POLYLINE::DisplayInfo( WinEDA_DrawFrame* aFrame )
{ {
wxString msg; wxString msg;
EDA_Rect bBox = GetBoundingBox(); EDA_Rect bBox = GetBoundingBox();
LIB_DRAW_ITEM::DisplayInfo( aFrame ); LIB_DRAW_ITEM::DisplayInfo( aFrame );
msg = ReturnStringFromValue( g_UserUnit, m_Width, EESCHEMA_INTERNAL_UNIT, true ); msg = ReturnStringFromValue( g_UserUnit, m_Width, EESCHEMA_INTERNAL_UNIT, true );
aFrame->AppendMsgPanel(_( "Line width" ), msg, BLUE ); aFrame->AppendMsgPanel(_( "Line width" ), msg, BLUE );
msg.Printf( wxT( "(%d, %d, %d, %d)" ), bBox.GetOrigin().x, msg.Printf( wxT( "(%d, %d, %d, %d)" ), bBox.GetOrigin().x,
bBox.GetOrigin().y, bBox.GetEnd().x, bBox.GetEnd().y ); bBox.GetOrigin().y, bBox.GetEnd().x, bBox.GetEnd().y );
aFrame->AppendMsgPanel( _( "Bounding box" ), msg, BROWN ); aFrame->AppendMsgPanel( _( "Bounding box" ), msg, BROWN );
} }
void LIB_POLYLINE::BeginEdit( int aEditMode, const wxPoint aPosition ) void LIB_POLYLINE::BeginEdit( int aEditMode, const wxPoint aPosition )
{ {
wxCHECK_RET( ( aEditMode & ( IS_NEW | IS_MOVED | IS_RESIZED ) ) != 0, wxCHECK_RET( ( aEditMode & ( IS_NEW | IS_MOVED | IS_RESIZED ) ) != 0,
wxT( "Invalid edit mode for LIB_POLYLINE object." ) ); wxT( "Invalid edit mode for LIB_POLYLINE object." ) );
if( aEditMode == IS_NEW ) if( aEditMode == IS_NEW )
{ {
m_PolyPoints.push_back( aPosition ); // Start point of first segment. m_PolyPoints.push_back( aPosition ); // Start point of first segment.
m_PolyPoints.push_back( aPosition ); // End point of first segment. m_PolyPoints.push_back( aPosition ); // End point of first segment.
} }
else if( aEditMode == IS_RESIZED ) else if( aEditMode == IS_RESIZED )
{ {
// Drag one edge point of the polyline // Drag one edge point of the polyline
// Find the nearest edge point to be dragged // Find the nearest edge point to be dragged
wxPoint startPoint = m_PolyPoints[0]; wxPoint startPoint = m_PolyPoints[0];
// Begin with the first list point as nearest point // Begin with the first list point as nearest point
int index = 0; int index = 0;
m_ModifyIndex = 0; m_ModifyIndex = 0;
m_initialPos = startPoint; m_initialPos = startPoint;
// First distance is the current minimum distance // First distance is the current minimum distance
int distanceMin = (aPosition - startPoint).x * (aPosition - startPoint).x int distanceMin = (aPosition - startPoint).x * (aPosition - startPoint).x
+ (aPosition - startPoint).y * (aPosition - startPoint).y; + (aPosition - startPoint).y * (aPosition - startPoint).y;
// Find the right index of the point to be dragged // Find the right index of the point to be dragged
BOOST_FOREACH( wxPoint point, m_PolyPoints ) BOOST_FOREACH( wxPoint point, m_PolyPoints )
{ {
int distancePoint = (aPosition - point).x * (aPosition - point).x + int distancePoint = (aPosition - point).x * (aPosition - point).x +
(aPosition - point).y * (aPosition - point).y; (aPosition - point).y * (aPosition - point).y;
if( distancePoint < distanceMin ) if( distancePoint < distanceMin )
{ {
// Save point. // Save point.
m_initialPos = point; m_initialPos = point;
m_ModifyIndex = index; m_ModifyIndex = index;
distanceMin = distancePoint; distanceMin = distancePoint;
break; break;
} }
index++; index++;
} }
SetEraseLastDrawItem(); SetEraseLastDrawItem();
} }
else if( aEditMode == IS_MOVED ) else if( aEditMode == IS_MOVED )
{ {
m_initialCursorPos = aPosition; m_initialCursorPos = aPosition;
m_initialPos = m_PolyPoints[0]; m_initialPos = m_PolyPoints[0];
SetEraseLastDrawItem(); SetEraseLastDrawItem();
} }
m_Flags = aEditMode; m_Flags = aEditMode;
} }
bool LIB_POLYLINE::ContinueEdit( const wxPoint aPosition ) bool LIB_POLYLINE::ContinueEdit( const wxPoint aPosition )
{ {
wxCHECK_MSG( ( m_Flags & ( IS_NEW | IS_MOVED | IS_RESIZED ) ) != 0, false, wxCHECK_MSG( ( m_Flags & ( IS_NEW | IS_MOVED | IS_RESIZED ) ) != 0, false,
wxT( "Bad call to ContinueEdit(). LIB_POLYLINE is not being edited." ) ); wxT( "Bad call to ContinueEdit(). LIB_POLYLINE is not being edited." ) );
if( m_Flags == IS_NEW ) if( m_Flags == IS_NEW )
{ {
m_PolyPoints.push_back( aPosition ); m_PolyPoints.push_back( aPosition );
return true; return true;
} }
return false; return false;
} }
void LIB_POLYLINE::EndEdit( const wxPoint& aPosition, bool aAbort ) void LIB_POLYLINE::EndEdit( const wxPoint& aPosition, bool aAbort )
{ {
wxCHECK_RET( ( m_Flags & ( IS_NEW | IS_MOVED | IS_RESIZED ) ) != 0, wxCHECK_RET( ( m_Flags & ( IS_NEW | IS_MOVED | IS_RESIZED ) ) != 0,
wxT( "Bad call to EndEdit(). LIB_POLYLINE is not being edited." ) ); wxT( "Bad call to EndEdit(). LIB_POLYLINE is not being edited." ) );
m_Flags = 0; m_Flags = 0;
SetEraseLastDrawItem( false ); SetEraseLastDrawItem( false );
} }
void LIB_POLYLINE::calcEdit( const wxPoint& aPosition ) void LIB_POLYLINE::calcEdit( const wxPoint& aPosition )
{ {
if( m_Flags == IS_NEW ) if( m_Flags == IS_NEW )
{ {
m_PolyPoints[ GetCornerCount() - 1 ] = aPosition; m_PolyPoints[ GetCornerCount() - 1 ] = aPosition;
SetEraseLastDrawItem(); SetEraseLastDrawItem();
} }
else if( m_Flags == IS_RESIZED ) else if( m_Flags == IS_RESIZED )
{ {
m_PolyPoints[ m_ModifyIndex ] = aPosition; m_PolyPoints[ m_ModifyIndex ] = aPosition;
} }
else if( m_Flags == IS_MOVED ) else if( m_Flags == IS_MOVED )
{ {
Move( m_initialPos + aPosition - m_initialCursorPos ); Move( m_initialPos + aPosition - m_initialCursorPos );
} }
} }
/*************************/ /*************************/
/** class LIB_RECTANGLE **/ /** class LIB_RECTANGLE **/
/*************************/ /*************************/
#include "fctsys.h" #include "fctsys.h"
#include "gr_basic.h" #include "gr_basic.h"
#include "common.h" #include "common.h"
#include "class_drawpanel.h" #include "class_drawpanel.h"
#include "plot_common.h" #include "plot_common.h"
#include "trigo.h" #include "trigo.h"
#include "wxstruct.h" #include "wxstruct.h"
#include "general.h" #include "general.h"
#include "protos.h" #include "protos.h"
#include "lib_rectangle.h" #include "lib_rectangle.h"
#include "transform.h" #include "transform.h"
LIB_RECTANGLE::LIB_RECTANGLE( LIB_COMPONENT* aParent ) : LIB_RECTANGLE::LIB_RECTANGLE( LIB_COMPONENT* aParent ) :
LIB_DRAW_ITEM( COMPONENT_RECT_DRAW_TYPE, aParent ) LIB_DRAW_ITEM( COMPONENT_RECT_DRAW_TYPE, aParent )
{ {
m_Width = 0; m_Width = 0;
m_Fill = NO_FILL; m_Fill = NO_FILL;
m_isFillable = true; m_isFillable = true;
m_typeName = _( "Rectangle" ); m_typeName = _( "Rectangle" );
m_isHeightLocked = false; m_isHeightLocked = false;
m_isWidthLocked = false; m_isWidthLocked = false;
m_isStartPointSelected = false; m_isStartPointSelected = false;
} }
LIB_RECTANGLE::LIB_RECTANGLE( const LIB_RECTANGLE& aRect ) : LIB_RECTANGLE::LIB_RECTANGLE( const LIB_RECTANGLE& aRect ) :
LIB_DRAW_ITEM( aRect ) LIB_DRAW_ITEM( aRect )
{ {
m_Pos = aRect.m_Pos; m_Pos = aRect.m_Pos;
m_End = aRect.m_End; m_End = aRect.m_End;
m_Width = aRect.m_Width; m_Width = aRect.m_Width;
m_Fill = aRect.m_Fill; m_Fill = aRect.m_Fill;
} }
bool LIB_RECTANGLE::Save( FILE* aFile ) bool LIB_RECTANGLE::Save( FILE* aFile )
{ {
if( fprintf( aFile, "S %d %d %d %d %d %d %d %c\n", m_Pos.x, m_Pos.y, if( fprintf( aFile, "S %d %d %d %d %d %d %d %c\n", m_Pos.x, m_Pos.y,
m_End.x, m_End.y, m_Unit, m_Convert, m_Width, fill_tab[m_Fill] ) < 0 ) m_End.x, m_End.y, m_Unit, m_Convert, m_Width, fill_tab[m_Fill] ) < 0 )
return false; return false;
return true; return true;
} }
bool LIB_RECTANGLE::Load( char* aLine, wxString& aErrorMsg ) bool LIB_RECTANGLE::Load( char* aLine, wxString& aErrorMsg )
{ {
int cnt; int cnt;
char tmp[256]; char tmp[256];
cnt = sscanf( &aLine[2], "%d %d %d %d %d %d %d %s", &m_Pos.x, &m_Pos.y, cnt = sscanf( &aLine[2], "%d %d %d %d %d %d %d %s", &m_Pos.x, &m_Pos.y,
&m_End.x, &m_End.y, &m_Unit, &m_Convert, &m_Width, tmp ); &m_End.x, &m_End.y, &m_Unit, &m_Convert, &m_Width, tmp );
if( cnt < 7 ) if( cnt < 7 )
{ {
aErrorMsg.Printf( _( "rectangle only had %d parameters of the required 7" ), cnt ); aErrorMsg.Printf( _( "rectangle only had %d parameters of the required 7" ), cnt );
return false; return false;
} }
if( tmp[0] == 'F' ) if( tmp[0] == 'F' )
m_Fill = FILLED_SHAPE; m_Fill = FILLED_SHAPE;
if( tmp[0] == 'f' ) if( tmp[0] == 'f' )
m_Fill = FILLED_WITH_BG_BODYCOLOR; m_Fill = FILLED_WITH_BG_BODYCOLOR;
return true; return true;
} }
LIB_DRAW_ITEM* LIB_RECTANGLE::DoGenCopy() LIB_DRAW_ITEM* LIB_RECTANGLE::DoGenCopy()
{ {
LIB_RECTANGLE* newitem = new LIB_RECTANGLE( GetParent() ); LIB_RECTANGLE* newitem = new LIB_RECTANGLE( GetParent() );
newitem->m_Pos = m_Pos; newitem->m_Pos = m_Pos;
newitem->m_End = m_End; newitem->m_End = m_End;
newitem->m_Width = m_Width; newitem->m_Width = m_Width;
newitem->m_Unit = m_Unit; newitem->m_Unit = m_Unit;
newitem->m_Convert = m_Convert; newitem->m_Convert = m_Convert;
newitem->m_Flags = m_Flags; newitem->m_Flags = m_Flags;
newitem->m_Fill = m_Fill; newitem->m_Fill = m_Fill;
return (LIB_DRAW_ITEM*) newitem; return (LIB_DRAW_ITEM*) newitem;
} }
int LIB_RECTANGLE::DoCompare( const LIB_DRAW_ITEM& aOther ) const int LIB_RECTANGLE::DoCompare( const LIB_DRAW_ITEM& aOther ) const
{ {
wxASSERT( aOther.Type() == COMPONENT_RECT_DRAW_TYPE ); wxASSERT( aOther.Type() == COMPONENT_RECT_DRAW_TYPE );
const LIB_RECTANGLE* tmp = ( LIB_RECTANGLE* ) &aOther; const LIB_RECTANGLE* tmp = ( LIB_RECTANGLE* ) &aOther;
if( m_Pos.x != tmp->m_Pos.x ) if( m_Pos.x != tmp->m_Pos.x )
return m_Pos.x - tmp->m_Pos.x; return m_Pos.x - tmp->m_Pos.x;
if( m_Pos.y != tmp->m_Pos.y ) if( m_Pos.y != tmp->m_Pos.y )
return m_Pos.y - tmp->m_Pos.y; return m_Pos.y - tmp->m_Pos.y;
if( m_End.x != tmp->m_End.x ) if( m_End.x != tmp->m_End.x )
return m_End.x - tmp->m_End.x; return m_End.x - tmp->m_End.x;
if( m_End.y != tmp->m_End.y ) if( m_End.y != tmp->m_End.y )
return m_End.y - tmp->m_End.y; return m_End.y - tmp->m_End.y;
return 0; return 0;
} }
void LIB_RECTANGLE::DoOffset( const wxPoint& aOffset ) void LIB_RECTANGLE::DoOffset( const wxPoint& aOffset )
{ {
m_Pos += aOffset; m_Pos += aOffset;
m_End += aOffset; m_End += aOffset;
} }
bool LIB_RECTANGLE::DoTestInside( EDA_Rect& aRect ) const bool LIB_RECTANGLE::DoTestInside( EDA_Rect& aRect ) const
{ {
return aRect.Inside( m_Pos.x, -m_Pos.y ) || aRect.Inside( m_End.x, -m_End.y ); return aRect.Inside( m_Pos.x, -m_Pos.y ) || aRect.Inside( m_End.x, -m_End.y );
} }
void LIB_RECTANGLE::DoMove( const wxPoint& aPosition ) void LIB_RECTANGLE::DoMove( const wxPoint& aPosition )
{ {
wxPoint size = m_End - m_Pos; wxPoint size = m_End - m_Pos;
m_Pos = aPosition; m_Pos = aPosition;
m_End = aPosition + size; m_End = aPosition + size;
} }
void LIB_RECTANGLE::DoMirrorHorizontal( const wxPoint& aCenter ) void LIB_RECTANGLE::DoMirrorHorizontal( const wxPoint& aCenter )
{ {
m_Pos.x -= aCenter.x; m_Pos.x -= aCenter.x;
m_Pos.x *= -1; m_Pos.x *= -1;
m_Pos.x += aCenter.x; m_Pos.x += aCenter.x;
m_End.x -= aCenter.x; m_End.x -= aCenter.x;
m_End.x *= -1; m_End.x *= -1;
m_End.x += aCenter.x; m_End.x += aCenter.x;
} }
void LIB_RECTANGLE::DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, void LIB_RECTANGLE::DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ) const TRANSFORM& aTransform )
{ {
wxASSERT( aPlotter != NULL ); wxASSERT( aPlotter != NULL );
wxPoint pos = aTransform.TransformCoordinate( m_Pos ) + aOffset; wxPoint pos = aTransform.TransformCoordinate( m_Pos ) + aOffset;
wxPoint end = aTransform.TransformCoordinate( m_End ) + aOffset; wxPoint end = aTransform.TransformCoordinate( m_End ) + aOffset;
if( aFill && m_Fill == FILLED_WITH_BG_BODYCOLOR ) if( aFill && m_Fill == FILLED_WITH_BG_BODYCOLOR )
{ {
aPlotter->set_color( ReturnLayerColor( LAYER_DEVICE_BACKGROUND ) ); aPlotter->set_color( ReturnLayerColor( LAYER_DEVICE_BACKGROUND ) );
aPlotter->rect( pos, end, FILLED_WITH_BG_BODYCOLOR, 0 ); aPlotter->rect( pos, end, FILLED_WITH_BG_BODYCOLOR, 0 );
} }
bool already_filled = m_Fill == FILLED_WITH_BG_BODYCOLOR; bool already_filled = m_Fill == FILLED_WITH_BG_BODYCOLOR;
aPlotter->set_color( ReturnLayerColor( LAYER_DEVICE ) ); aPlotter->set_color( ReturnLayerColor( LAYER_DEVICE ) );
aPlotter->rect( pos, end, already_filled ? NO_FILL : m_Fill, GetPenSize() ); aPlotter->rect( pos, end, already_filled ? NO_FILL : m_Fill, GetPenSize() );
} }
/** /**
* Function GetPenSize * Function GetPenSize
* @return the size of the "pen" that be used to draw or plot this item * @return the size of the "pen" that be used to draw or plot this item
*/ */
int LIB_RECTANGLE::GetPenSize() int LIB_RECTANGLE::GetPenSize()
{ {
return ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width; return ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width;
} }
void LIB_RECTANGLE::drawGraphic( WinEDA_DrawPanel* aPanel, wxDC* aDC, void LIB_RECTANGLE::drawGraphic( WinEDA_DrawPanel* aPanel, wxDC* aDC,
const wxPoint& aOffset, int aColor, int aDrawMode, const wxPoint& aOffset, int aColor, int aDrawMode,
void* aData, const TRANSFORM& aTransform ) void* aData, const TRANSFORM& aTransform )
{ {
wxPoint pos1, pos2; wxPoint pos1, pos2;
int color = ReturnLayerColor( LAYER_DEVICE ); int color = ReturnLayerColor( LAYER_DEVICE );
if( aColor < 0 ) // Used normal color or selected color if( aColor < 0 ) // Used normal color or selected color
{ {
if( m_Selected & IS_SELECTED ) if( m_Selected & IS_SELECTED )
color = g_ItemSelectetColor; color = g_ItemSelectetColor;
} }
else else
color = aColor; color = aColor;
pos1 = aTransform.TransformCoordinate( m_Pos ) + aOffset; pos1 = aTransform.TransformCoordinate( m_Pos ) + aOffset;
pos2 = aTransform.TransformCoordinate( m_End ) + aOffset; pos2 = aTransform.TransformCoordinate( m_End ) + aOffset;
FILL_T fill = aData ? NO_FILL : m_Fill; FILL_T fill = aData ? NO_FILL : m_Fill;
if( aColor >= 0 ) if( aColor >= 0 )
fill = NO_FILL; fill = NO_FILL;
GRSetDrawMode( aDC, aDrawMode ); GRSetDrawMode( aDC, aDrawMode );
if( fill == FILLED_WITH_BG_BODYCOLOR && !aData ) if( fill == FILLED_WITH_BG_BODYCOLOR && !aData )
GRFilledRect( &aPanel->m_ClipBox, aDC, pos1.x, pos1.y, pos2.x, pos2.y, GetPenSize( ), GRFilledRect( &aPanel->m_ClipBox, aDC, pos1.x, pos1.y, pos2.x, pos2.y, GetPenSize( ),
(m_Flags & IS_MOVED) ? color : ReturnLayerColor( LAYER_DEVICE_BACKGROUND ), (m_Flags & IS_MOVED) ? color : ReturnLayerColor( LAYER_DEVICE_BACKGROUND ),
ReturnLayerColor( LAYER_DEVICE_BACKGROUND ) ); ReturnLayerColor( LAYER_DEVICE_BACKGROUND ) );
else if( m_Fill == FILLED_SHAPE && !aData ) else if( m_Fill == FILLED_SHAPE && !aData )
GRFilledRect( &aPanel->m_ClipBox, aDC, pos1.x, pos1.y, pos2.x, pos2.y, GRFilledRect( &aPanel->m_ClipBox, aDC, pos1.x, pos1.y, pos2.x, pos2.y,
GetPenSize(), color, color ); GetPenSize(), color, color );
else else
GRRect( &aPanel->m_ClipBox, aDC, pos1.x, pos1.y, pos2.x, pos2.y, GetPenSize(), color ); GRRect( &aPanel->m_ClipBox, aDC, pos1.x, pos1.y, pos2.x, pos2.y, GetPenSize(), color );
/* Set to one (1) to draw bounding box around rectangle to validate /* Set to one (1) to draw bounding box around rectangle to validate
* bounding box calculation. */ * bounding box calculation. */
#if 0 #if 0
EDA_Rect bBox = GetBoundingBox(); EDA_Rect bBox = GetBoundingBox();
bBox.Inflate( m_Width + 1, m_Width + 1 ); bBox.Inflate( m_Thickness + 1, m_Thickness + 1 );
GRRect( &aPanel->m_ClipBox, aDC, bBox.GetOrigin().x, bBox.GetOrigin().y, GRRect( &aPanel->m_ClipBox, aDC, bBox.GetOrigin().x, bBox.GetOrigin().y,
bBox.GetEnd().x, bBox.GetEnd().y, 0, LIGHTMAGENTA ); bBox.GetEnd().x, bBox.GetEnd().y, 0, LIGHTMAGENTA );
#endif #endif
} }
void LIB_RECTANGLE::DisplayInfo( WinEDA_DrawFrame* aFrame ) void LIB_RECTANGLE::DisplayInfo( WinEDA_DrawFrame* aFrame )
{ {
wxString msg; wxString msg;
LIB_DRAW_ITEM::DisplayInfo( aFrame ); LIB_DRAW_ITEM::DisplayInfo( aFrame );
msg = ReturnStringFromValue( g_UserUnit, m_Width, EESCHEMA_INTERNAL_UNIT, true ); msg = ReturnStringFromValue( g_UserUnit, m_Width, EESCHEMA_INTERNAL_UNIT, true );
aFrame->AppendMsgPanel( _( "Line width" ), msg, BLUE ); aFrame->AppendMsgPanel( _( "Line width" ), msg, BLUE );
} }
EDA_Rect LIB_RECTANGLE::GetBoundingBox() EDA_Rect LIB_RECTANGLE::GetBoundingBox()
{ {
EDA_Rect rect; EDA_Rect rect;
rect.SetOrigin( m_Pos.x, m_Pos.y * -1 ); rect.SetOrigin( m_Pos.x, m_Pos.y * -1 );
rect.SetEnd( m_End.x, m_End.y * -1 ); rect.SetEnd( m_End.x, m_End.y * -1 );
rect.Inflate( m_Width / 2, m_Width / 2 ); rect.Inflate( m_Width / 2, m_Width / 2 );
return rect; return rect;
} }
/** /**
* Function HitTest * Function HitTest
* tests if the given wxPoint is within the bounds of this object. * tests if the given wxPoint is within the bounds of this object.
* @param aRefPoint A wxPoint to test in eeschema space * @param aRefPoint A wxPoint to test in eeschema space
* @return true if a hit, else false * @return true if a hit, else false
*/ */
bool LIB_RECTANGLE::HitTest( const wxPoint& aRefPoint ) bool LIB_RECTANGLE::HitTest( const wxPoint& aRefPoint )
{ {
int mindist = ( m_Width ? m_Width / 2 : g_DrawDefaultLineThickness / 2 ) + 1; int mindist = ( m_Width ? m_Width / 2 : g_DrawDefaultLineThickness / 2 ) + 1;
// Have a minimal tolerance for hit test // Have a minimal tolerance for hit test
if( mindist < MINIMUM_SELECTION_DISTANCE ) if( mindist < MINIMUM_SELECTION_DISTANCE )
mindist = MINIMUM_SELECTION_DISTANCE; mindist = MINIMUM_SELECTION_DISTANCE;
return HitTest( aRefPoint, mindist, DefaultTransform ); return HitTest( aRefPoint, mindist, DefaultTransform );
} }
/** /**
* Function HitTest * Function HitTest
* @return true if the point aPosRef is near this object * @return true if the point aPosRef is near this object
* @param aRefPoint = a wxPoint to test * @param aRefPoint = a wxPoint to test
* @param aThreshold = max distance to this object (usually the half thickness * @param aThreshold = max distance to this object (usually the half thickness
* of a line) * of a line)
* @param aTransMat = the transform matrix * @param aTransMat = the transform matrix
*/ */
bool LIB_RECTANGLE::HitTest( wxPoint aRefPoint, int aThreshold, const TRANSFORM& aTransform ) bool LIB_RECTANGLE::HitTest( wxPoint aRefPoint, int aThreshold, const TRANSFORM& aTransform )
{ {
wxPoint actualStart = aTransform.TransformCoordinate( m_Pos ); wxPoint actualStart = aTransform.TransformCoordinate( m_Pos );
wxPoint actualEnd = aTransform.TransformCoordinate( m_End ); wxPoint actualEnd = aTransform.TransformCoordinate( m_End );
// locate lower segment // locate lower segment
wxPoint start, end; wxPoint start, end;
start = actualStart; start = actualStart;
end.x = actualEnd.x; end.x = actualEnd.x;
end.y = actualStart.y; end.y = actualStart.y;
if( TestSegmentHit( aRefPoint, start, end, aThreshold ) ) if( TestSegmentHit( aRefPoint, start, end, aThreshold ) )
return true; return true;
// locate right segment // locate right segment
start.x = actualEnd.x; start.x = actualEnd.x;
end.y = actualEnd.y; end.y = actualEnd.y;
if( TestSegmentHit( aRefPoint, start, end, aThreshold ) ) if( TestSegmentHit( aRefPoint, start, end, aThreshold ) )
return true; return true;
// locate upper segment // locate upper segment
start.y = actualEnd.y; start.y = actualEnd.y;
end.x = actualStart.x; end.x = actualStart.x;
if( TestSegmentHit( aRefPoint, start, end, aThreshold ) ) if( TestSegmentHit( aRefPoint, start, end, aThreshold ) )
return true; return true;
// locate left segment // locate left segment
start = actualStart; start = actualStart;
end.x = actualStart.x; end.x = actualStart.x;
end.y = actualEnd.y; end.y = actualEnd.y;
if( TestSegmentHit( aRefPoint, start, end, aThreshold ) ) if( TestSegmentHit( aRefPoint, start, end, aThreshold ) )
return true; return true;
return false; return false;
} }
void LIB_RECTANGLE::BeginEdit( int aEditMode, const wxPoint aPosition ) void LIB_RECTANGLE::BeginEdit( int aEditMode, const wxPoint aPosition )
{ {
wxCHECK_RET( ( aEditMode & ( IS_NEW | IS_MOVED | IS_RESIZED ) ) != 0, wxCHECK_RET( ( aEditMode & ( IS_NEW | IS_MOVED | IS_RESIZED ) ) != 0,
wxT( "Invalid edit mode for LIB_RECTANGLE object." ) ); wxT( "Invalid edit mode for LIB_RECTANGLE object." ) );
if( aEditMode == IS_NEW ) if( aEditMode == IS_NEW )
{ {
m_Pos = m_End = aPosition; m_Pos = m_End = aPosition;
} }
else if( aEditMode == IS_RESIZED ) else if( aEditMode == IS_RESIZED )
{ {
m_isStartPointSelected = abs( m_Pos.x - aPosition.x ) < MINIMUM_SELECTION_DISTANCE m_isStartPointSelected = abs( m_Pos.x - aPosition.x ) < MINIMUM_SELECTION_DISTANCE
|| abs( m_Pos.y - aPosition.y ) < MINIMUM_SELECTION_DISTANCE; || abs( m_Pos.y - aPosition.y ) < MINIMUM_SELECTION_DISTANCE;
if( m_isStartPointSelected ) if( m_isStartPointSelected )
{ {
m_isWidthLocked = abs( m_Pos.x - aPosition.x ) >= MINIMUM_SELECTION_DISTANCE; m_isWidthLocked = abs( m_Pos.x - aPosition.x ) >= MINIMUM_SELECTION_DISTANCE;
m_isHeightLocked = abs( m_Pos.y - aPosition.y ) >= MINIMUM_SELECTION_DISTANCE; m_isHeightLocked = abs( m_Pos.y - aPosition.y ) >= MINIMUM_SELECTION_DISTANCE;
} }
else else
{ {
m_isWidthLocked = abs( m_End.x - aPosition.x ) >= MINIMUM_SELECTION_DISTANCE; m_isWidthLocked = abs( m_End.x - aPosition.x ) >= MINIMUM_SELECTION_DISTANCE;
m_isHeightLocked = abs( m_End.y - aPosition.y ) >= MINIMUM_SELECTION_DISTANCE; m_isHeightLocked = abs( m_End.y - aPosition.y ) >= MINIMUM_SELECTION_DISTANCE;
} }
SetEraseLastDrawItem(); SetEraseLastDrawItem();
} }
else if( aEditMode == IS_MOVED ) else if( aEditMode == IS_MOVED )
{ {
m_initialPos = m_Pos; m_initialPos = m_Pos;
m_initialCursorPos = aPosition; m_initialCursorPos = aPosition;
SetEraseLastDrawItem(); SetEraseLastDrawItem();
} }
m_Flags = aEditMode; m_Flags = aEditMode;
} }
bool LIB_RECTANGLE::ContinueEdit( const wxPoint aPosition ) bool LIB_RECTANGLE::ContinueEdit( const wxPoint aPosition )
{ {
wxCHECK_MSG( ( m_Flags & ( IS_NEW | IS_MOVED | IS_RESIZED ) ) != 0, false, wxCHECK_MSG( ( m_Flags & ( IS_NEW | IS_MOVED | IS_RESIZED ) ) != 0, false,
wxT( "Bad call to ContinueEdit(). LIB_RECTANGLE is not being edited." ) ); wxT( "Bad call to ContinueEdit(). LIB_RECTANGLE is not being edited." ) );
return false; return false;
} }
void LIB_RECTANGLE::EndEdit( const wxPoint& aPosition, bool aAbort ) void LIB_RECTANGLE::EndEdit( const wxPoint& aPosition, bool aAbort )
{ {
wxCHECK_RET( ( m_Flags & ( IS_NEW | IS_MOVED | IS_RESIZED ) ) != 0, wxCHECK_RET( ( m_Flags & ( IS_NEW | IS_MOVED | IS_RESIZED ) ) != 0,
wxT( "Bad call to EndEdit(). LIB_RECTANGLE is not being edited." ) ); wxT( "Bad call to EndEdit(). LIB_RECTANGLE is not being edited." ) );
m_Flags = 0; m_Flags = 0;
m_isHeightLocked = false; m_isHeightLocked = false;
m_isWidthLocked = false; m_isWidthLocked = false;
SetEraseLastDrawItem( false ); SetEraseLastDrawItem( false );
} }
void LIB_RECTANGLE::calcEdit( const wxPoint& aPosition ) void LIB_RECTANGLE::calcEdit( const wxPoint& aPosition )
{ {
if( m_Flags == IS_NEW ) if( m_Flags == IS_NEW )
{ {
m_End = aPosition; m_End = aPosition;
SetEraseLastDrawItem(); SetEraseLastDrawItem();
} }
else if( m_Flags == IS_RESIZED ) else if( m_Flags == IS_RESIZED )
{ {
if( m_isHeightLocked ) if( m_isHeightLocked )
{ {
if( m_isStartPointSelected ) if( m_isStartPointSelected )
m_Pos.x = aPosition.x; m_Pos.x = aPosition.x;
else else
m_End.x = aPosition.x; m_End.x = aPosition.x;
} }
else if( m_isWidthLocked ) else if( m_isWidthLocked )
{ {
if( m_isStartPointSelected ) if( m_isStartPointSelected )
m_Pos.y = aPosition.y; m_Pos.y = aPosition.y;
else else
m_End.y = aPosition.y; m_End.y = aPosition.y;
} }
else else
{ {
if( m_isStartPointSelected ) if( m_isStartPointSelected )
m_Pos = aPosition; m_Pos = aPosition;
else else
m_End = aPosition; m_End = aPosition;
} }
} }
else if( m_Flags == IS_MOVED ) else if( m_Flags == IS_MOVED )
{ {
Move( m_initialPos + aPosition - m_initialCursorPos ); Move( m_initialPos + aPosition - m_initialCursorPos );
} }
} }
...@@ -187,7 +187,7 @@ LIB_DRAW_ITEM* LIB_TEXT::DoGenCopy() ...@@ -187,7 +187,7 @@ LIB_DRAW_ITEM* LIB_TEXT::DoGenCopy()
newitem->m_Convert = m_Convert; newitem->m_Convert = m_Convert;
newitem->m_Flags = m_Flags; newitem->m_Flags = m_Flags;
newitem->m_Text = m_Text; newitem->m_Text = m_Text;
newitem->m_Width = m_Width; newitem->m_Thickness = m_Thickness;
newitem->m_Italic = m_Italic; newitem->m_Italic = m_Italic;
newitem->m_Bold = m_Bold; newitem->m_Bold = m_Bold;
newitem->m_HJustify = m_HJustify; newitem->m_HJustify = m_HJustify;
...@@ -276,7 +276,7 @@ void LIB_TEXT::DoPlot( PLOTTER* plotter, const wxPoint& offset, bool fill, ...@@ -276,7 +276,7 @@ void LIB_TEXT::DoPlot( PLOTTER* plotter, const wxPoint& offset, bool fill,
*/ */
int LIB_TEXT::GetPenSize( ) int LIB_TEXT::GetPenSize( )
{ {
int pensize = m_Width; int pensize = m_Thickness;
if( pensize == 0 ) // Use default values for pen size if( pensize == 0 ) // Use default values for pen size
{ {
...@@ -369,7 +369,7 @@ void LIB_TEXT::DisplayInfo( WinEDA_DrawFrame* frame ) ...@@ -369,7 +369,7 @@ void LIB_TEXT::DisplayInfo( WinEDA_DrawFrame* frame )
LIB_DRAW_ITEM::DisplayInfo( frame ); LIB_DRAW_ITEM::DisplayInfo( frame );
msg = ReturnStringFromValue( g_UserUnit, m_Width, EESCHEMA_INTERNAL_UNIT, true ); msg = ReturnStringFromValue( g_UserUnit, m_Thickness, EESCHEMA_INTERNAL_UNIT, true );
frame->AppendMsgPanel( _( "Line width" ), msg, BLUE ); frame->AppendMsgPanel( _( "Line width" ), msg, BLUE );
} }
......
#ifndef _LIB_TEXT_H_ #ifndef _LIB_TEXT_H_
#define _LIB_TEXT_H_ #define _LIB_TEXT_H_
#include "lib_draw_item.h" #include "lib_draw_item.h"
/*********************************************/ /*********************************************/
/* Graphic Body Item: Text */ /* Graphic Body Item: Text */
/* This is only a graphic text. */ /* This is only a graphic text. */
/* Fields like Ref , value... are not Text, */ /* Fields like Ref , value... are not Text, */
/* they are a separate class */ /* they are a separate class */
/*********************************************/ /*********************************************/
class LIB_TEXT : public LIB_DRAW_ITEM, public EDA_TextStruct class LIB_TEXT : public LIB_DRAW_ITEM, public EDA_TextStruct
{ {
wxString m_savedText; ///< Temporary storage for the string when edition. wxString m_savedText; ///< Temporary storage for the string when edition.
bool m_rotate; ///< Flag to indicate a rotation occurred while editing. bool m_rotate; ///< Flag to indicate a rotation occurred while editing.
bool m_updateText; ///< Flag to indicate text change occurred while editing. bool m_updateText; ///< Flag to indicate text change occurred while editing.
/** /**
* Draw the polyline. * Draw the polyline.
*/ */
void drawGraphic( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset, void drawGraphic( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffset,
int aColor, int aDrawMode, void* aData, const TRANSFORM& aTransform ); int aColor, int aDrawMode, void* aData, const TRANSFORM& aTransform );
/** /**
* Calculate the text attributes ralative to \a aPosition while editing. * Calculate the text attributes ralative to \a aPosition while editing.
* *
* @param aPosition - Edit position in drawing units. * @param aPosition - Edit position in drawing units.
*/ */
void calcEdit( const wxPoint& aPosition ); void calcEdit( const wxPoint& aPosition );
public: public:
LIB_TEXT( LIB_COMPONENT * aParent ); LIB_TEXT( LIB_COMPONENT * aParent );
LIB_TEXT( const LIB_TEXT& aText ); LIB_TEXT( const LIB_TEXT& aText );
~LIB_TEXT() { } ~LIB_TEXT() { }
virtual wxString GetClass() const virtual wxString GetClass() const
{ {
return wxT( "LIB_TEXT" ); return wxT( "LIB_TEXT" );
} }
/** /**
* Sets the text item string to \a aText. * Sets the text item string to \a aText.
* *
* This method does more than juat set the set the text string. There are special * This method does more than juat set the set the text string. There are special
* cases when changing the text string alone is not enough. If the text item is * cases when changing the text string alone is not enough. If the text item is
* being moved, the name change must be delayed until the next redraw to prevent * being moved, the name change must be delayed until the next redraw to prevent
* drawing artifacts. * drawing artifacts.
* *
* @param aText - New text value. * @param aText - New text value.
*/ */
void SetText( const wxString& aText ); void SetText( const wxString& aText );
/** /**
* Write text object out to a FILE in "*.lib" format. * Write text object out to a FILE in "*.lib" format.
* *
* @param aFile - The FILE to write to. * @param aFile - The FILE to write to.
* @return - true if success writing else false. * @return - true if success writing else false.
*/ */
virtual bool Save( FILE* aFile ); virtual bool Save( FILE* aFile );
virtual bool Load( char* aLine, wxString& aErrorMsg ); virtual bool Load( char* aLine, wxString& aErrorMsg );
/** /**
* Test if the given point is within the bounds of this object. * Test if the given point is within the bounds of this object.
* *
* @param refPos - A wxPoint to test * @param refPos - A wxPoint to test
* @return - true if a hit, else false * @return - true if a hit, else false
*/ */
virtual bool HitTest( const wxPoint& refPos ); virtual bool HitTest( const wxPoint& refPos );
/** /**
* @param aPosRef = a wxPoint to test, in eeschema coordinates * @param aPosRef = a wxPoint to test, in eeschema coordinates
* @param aThreshold = max distance to a segment * @param aThreshold = max distance to a segment
* @param aTransform = the transform matrix * @param aTransform = the transform matrix
* @return true if the point aPosRef is near a segment * @return true if the point aPosRef is near a segment
*/ */
virtual bool HitTest( wxPoint aPosRef, int aThreshold, const TRANSFORM& aTransform ); virtual bool HitTest( wxPoint aPosRef, int aThreshold, const TRANSFORM& aTransform );
/** /**
* Test if the given rectangle intersects this object. * Test if the given rectangle intersects this object.
* *
* For now, an ending point must be inside this rect. * For now, an ending point must be inside this rect.
* *
* @param aRect - the given EDA_Rect * @param aRect - the given EDA_Rect
* @return - true if a hit, else false * @return - true if a hit, else false
*/ */
virtual bool HitTest( EDA_Rect& aRect ) virtual bool HitTest( EDA_Rect& aRect )
{ {
return TextHitTest( aRect ); return TextHitTest( aRect );
} }
/** /**
* @return the size of the "pen" that be used to draw or plot this item * @return the size of the "pen" that be used to draw or plot this item
*/ */
virtual int GetPenSize( ); virtual int GetPenSize( );
virtual void DisplayInfo( WinEDA_DrawFrame* aFrame ); virtual void DisplayInfo( WinEDA_DrawFrame* aFrame );
virtual EDA_Rect GetBoundingBox(); virtual EDA_Rect GetBoundingBox();
void Rotate(); void Rotate();
/** /**
* See LIB_DRAW_ITEM::BeginEdit(). * See LIB_DRAW_ITEM::BeginEdit().
*/ */
void BeginEdit( int aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) ); void BeginEdit( int aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );
/** /**
* See LIB_DRAW_ITEM::ContinueEdit(). * See LIB_DRAW_ITEM::ContinueEdit().
*/ */
bool ContinueEdit( const wxPoint aNextPoint ); bool ContinueEdit( const wxPoint aNextPoint );
/** /**
* See LIB_DRAW_ITEM::AbortEdit(). * See LIB_DRAW_ITEM::AbortEdit().
*/ */
void EndEdit( const wxPoint& aPosition, bool aAbort = false ); void EndEdit( const wxPoint& aPosition, bool aAbort = false );
protected: protected:
virtual LIB_DRAW_ITEM* DoGenCopy(); virtual LIB_DRAW_ITEM* DoGenCopy();
/** /**
* Provide the text draw object specific comparison. * Provide the text draw object specific comparison.
* *
* The sort order is as follows: * The sort order is as follows:
* - Text string, case insensitive compare. * - Text string, case insensitive compare.
* - Text horizontal (X) position. * - Text horizontal (X) position.
* - Text vertical (Y) position. * - Text vertical (Y) position.
* - Text width. * - Text width.
* - Text height. * - Text height.
*/ */
virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const; virtual int DoCompare( const LIB_DRAW_ITEM& aOther ) const;
virtual void DoOffset( const wxPoint& aOffset ); virtual void DoOffset( const wxPoint& aOffset );
virtual bool DoTestInside( EDA_Rect& aRect ) const; virtual bool DoTestInside( EDA_Rect& aRect ) const;
virtual void DoMove( const wxPoint& aPosition ); virtual void DoMove( const wxPoint& aPosition );
virtual wxPoint DoGetPosition() const { return m_Pos; } virtual wxPoint DoGetPosition() const { return m_Pos; }
virtual void DoMirrorHorizontal( const wxPoint& aCenter ); virtual void DoMirrorHorizontal( const wxPoint& aCenter );
virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, virtual void DoPlot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ); const TRANSFORM& aTransform );
virtual int DoGetWidth() const { return m_Width; } virtual int DoGetWidth() const { return m_Thickness; }
virtual void DoSetWidth( int aWidth ) { m_Width = aWidth; } virtual void DoSetWidth( int aWidth ) { m_Thickness = aWidth; }
}; };
#endif // _LIB_TEXT_H_ #endif // _LIB_TEXT_H_
...@@ -55,7 +55,7 @@ SCH_FIELD::~SCH_FIELD() ...@@ -55,7 +55,7 @@ SCH_FIELD::~SCH_FIELD()
*/ */
int SCH_FIELD::GetPenSize() int SCH_FIELD::GetPenSize()
{ {
int pensize = m_Width; int pensize = m_Thickness;
if( pensize == 0 ) // Use default values for pen size if( pensize == 0 ) // Use default values for pen size
{ {
...@@ -81,7 +81,7 @@ void SCH_FIELD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, ...@@ -81,7 +81,7 @@ void SCH_FIELD::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
EDA_Colors color; EDA_Colors color;
wxPoint textpos; wxPoint textpos;
SCH_COMPONENT* parentComponent = (SCH_COMPONENT*) m_Parent; SCH_COMPONENT* parentComponent = (SCH_COMPONENT*) m_Parent;
int LineWidth = m_Width; int LineWidth = m_Thickness;
if( LineWidth == 0 ) // Use default values for pen size if( LineWidth == 0 ) // Use default values for pen size
{ {
...@@ -197,7 +197,7 @@ void SCH_FIELD::ImportValues( const LIB_FIELD& aSource ) ...@@ -197,7 +197,7 @@ void SCH_FIELD::ImportValues( const LIB_FIELD& aSource )
m_VJustify = aSource.m_VJustify; m_VJustify = aSource.m_VJustify;
m_Italic = aSource.m_Italic; m_Italic = aSource.m_Italic;
m_Bold = aSource.m_Bold; m_Bold = aSource.m_Bold;
m_Width = aSource.m_Width; m_Thickness = aSource.m_Thickness;
m_Attributs = aSource.m_Attributs; m_Attributs = aSource.m_Attributs;
m_Mirror = aSource.m_Mirror; m_Mirror = aSource.m_Mirror;
} }
...@@ -213,7 +213,7 @@ void SCH_FIELD::SwapData( SCH_FIELD* copyitem ) ...@@ -213,7 +213,7 @@ void SCH_FIELD::SwapData( SCH_FIELD* copyitem )
EXCHG( m_Layer, copyitem->m_Layer ); EXCHG( m_Layer, copyitem->m_Layer );
EXCHG( m_Pos, copyitem->m_Pos ); EXCHG( m_Pos, copyitem->m_Pos );
EXCHG( m_Size, copyitem->m_Size ); EXCHG( m_Size, copyitem->m_Size );
EXCHG( m_Width, copyitem->m_Width ); EXCHG( m_Thickness, copyitem->m_Thickness );
EXCHG( m_Orient, copyitem->m_Orient ); EXCHG( m_Orient, copyitem->m_Orient );
EXCHG( m_Mirror, copyitem->m_Mirror ); EXCHG( m_Mirror, copyitem->m_Mirror );
EXCHG( m_Attributs, copyitem->m_Attributs ); EXCHG( m_Attributs, copyitem->m_Attributs );
...@@ -317,7 +317,7 @@ EDA_Rect SCH_FIELD::GetBoundaryBox() const ...@@ -317,7 +317,7 @@ EDA_Rect SCH_FIELD::GetBoundaryBox() const
BoundaryBox.SetSize( size ); BoundaryBox.SetSize( size );
// Take thickness in account: // Take thickness in account:
int linewidth = ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width; int linewidth = ( m_Thickness == 0 ) ? g_DrawDefaultLineThickness : m_Thickness;
BoundaryBox.Inflate( linewidth, linewidth ); BoundaryBox.Inflate( linewidth, linewidth );
return BoundaryBox; return BoundaryBox;
......
...@@ -126,7 +126,7 @@ SCH_TEXT* SCH_TEXT::GenCopy() ...@@ -126,7 +126,7 @@ SCH_TEXT* SCH_TEXT::GenCopy()
newitem->m_Shape = m_Shape; newitem->m_Shape = m_Shape;
newitem->m_Orient = m_Orient; newitem->m_Orient = m_Orient;
newitem->m_Size = m_Size; newitem->m_Size = m_Size;
newitem->m_Width = m_Width; newitem->m_Thickness = m_Thickness;
newitem->m_HJustify = m_HJustify; newitem->m_HJustify = m_HJustify;
newitem->m_VJustify = m_VJustify; newitem->m_VJustify = m_VJustify;
newitem->m_IsDangling = m_IsDangling; newitem->m_IsDangling = m_IsDangling;
...@@ -366,7 +366,7 @@ void SCH_TEXT::SwapData( SCH_TEXT* copyitem ) ...@@ -366,7 +366,7 @@ void SCH_TEXT::SwapData( SCH_TEXT* copyitem )
EXCHG( m_Text, copyitem->m_Text ); EXCHG( m_Text, copyitem->m_Text );
EXCHG( m_Pos, copyitem->m_Pos ); EXCHG( m_Pos, copyitem->m_Pos );
EXCHG( m_Size, copyitem->m_Size ); EXCHG( m_Size, copyitem->m_Size );
EXCHG( m_Width, copyitem->m_Width ); EXCHG( m_Thickness, copyitem->m_Thickness );
EXCHG( m_Shape, copyitem->m_Shape ); EXCHG( m_Shape, copyitem->m_Shape );
EXCHG( m_Orient, copyitem->m_Orient ); EXCHG( m_Orient, copyitem->m_Orient );
...@@ -405,7 +405,7 @@ void SCH_TEXT::Place( WinEDA_SchematicFrame* frame, wxDC* DC ) ...@@ -405,7 +405,7 @@ void SCH_TEXT::Place( WinEDA_SchematicFrame* frame, wxDC* DC )
*/ */
int SCH_TEXT::GetPenSize() int SCH_TEXT::GetPenSize()
{ {
int pensize = m_Width; int pensize = m_Thickness;
if( pensize == 0 ) // Use default values for pen size if( pensize == 0 ) // Use default values for pen size
{ {
...@@ -428,7 +428,7 @@ void SCH_TEXT::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& aOffset, ...@@ -428,7 +428,7 @@ void SCH_TEXT::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& aOffset,
int DrawMode, int Color ) int DrawMode, int Color )
{ {
EDA_Colors color; EDA_Colors color;
int linewidth = ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width; int linewidth = ( m_Thickness == 0 ) ? g_DrawDefaultLineThickness : m_Thickness;
linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold ); linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold );
...@@ -440,9 +440,9 @@ void SCH_TEXT::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& aOffset, ...@@ -440,9 +440,9 @@ void SCH_TEXT::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& aOffset,
wxPoint text_offset = aOffset + GetSchematicTextOffset(); wxPoint text_offset = aOffset + GetSchematicTextOffset();
EXCHG( linewidth, m_Width ); // Set the minimum width EXCHG( linewidth, m_Thickness ); // Set the minimum width
EDA_TextStruct::Draw( panel, DC, text_offset, color, DrawMode, FILLED, UNSPECIFIED_COLOR ); EDA_TextStruct::Draw( panel, DC, text_offset, color, DrawMode, FILLED, UNSPECIFIED_COLOR );
EXCHG( linewidth, m_Width ); // set initial value EXCHG( linewidth, m_Thickness ); // set initial value
if( m_IsDangling ) if( m_IsDangling )
DrawDanglingSymbol( panel, DC, m_Pos + aOffset, color ); DrawDanglingSymbol( panel, DC, m_Pos + aOffset, color );
...@@ -484,7 +484,7 @@ bool SCH_TEXT::Save( FILE* aFile ) const ...@@ -484,7 +484,7 @@ bool SCH_TEXT::Save( FILE* aFile ) const
if( fprintf( aFile, "Text Notes %-4d %-4d %-4d %-4d %s %d\n%s\n", if( fprintf( aFile, "Text Notes %-4d %-4d %-4d %-4d %s %d\n%s\n",
m_Pos.x, m_Pos.y, m_SchematicOrientation, m_Size.x, m_Pos.x, m_Pos.y, m_SchematicOrientation, m_Size.x,
shape, m_Width, CONV_TO_UTF8( text ) ) == EOF ) shape, m_Thickness, CONV_TO_UTF8( text ) ) == EOF )
{ {
success = false; success = false;
} }
...@@ -557,7 +557,7 @@ bool SCH_TEXT::Load( LINE_READER& aLine, wxString& aErrorMsg ) ...@@ -557,7 +557,7 @@ bool SCH_TEXT::Load( LINE_READER& aLine, wxString& aErrorMsg )
{ {
thickness = atol( Name3 ); thickness = atol( Name3 );
m_Bold = ( thickness != 0 ); m_Bold = ( thickness != 0 );
m_Width = m_Bold ? GetPenSizeForBold( size ) : 0; m_Thickness = m_Bold ? GetPenSizeForBold( size ) : 0;
} }
if( strnicmp( Name2, "Italic", 6 ) == 0 ) if( strnicmp( Name2, "Italic", 6 ) == 0 )
...@@ -658,12 +658,12 @@ EDA_Rect SCH_TEXT::GetBoundingBox() ...@@ -658,12 +658,12 @@ EDA_Rect SCH_TEXT::GetBoundingBox()
{ {
// We must pass the effective text thickness to GetTextBox // We must pass the effective text thickness to GetTextBox
// when calculating the bounding box // when calculating the bounding box
int linewidth = ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width; int linewidth = ( m_Thickness == 0 ) ? g_DrawDefaultLineThickness : m_Thickness;
linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold ); linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold );
EXCHG( linewidth, m_Width ); // Set the real width EXCHG( linewidth, m_Thickness ); // Set the real width
EDA_Rect rect = GetTextBox( -1 ); EDA_Rect rect = GetTextBox( -1 );
EXCHG( linewidth, m_Width ); // set initial value EXCHG( linewidth, m_Thickness ); // set initial value
if( m_Orient ) // Rotate rect if( m_Orient ) // Rotate rect
{ {
...@@ -785,7 +785,7 @@ bool SCH_LABEL::Save( FILE* aFile ) const ...@@ -785,7 +785,7 @@ bool SCH_LABEL::Save( FILE* aFile ) const
if( fprintf( aFile, "Text Label %-4d %-4d %-4d %-4d %s %d\n%s\n", if( fprintf( aFile, "Text Label %-4d %-4d %-4d %-4d %s %d\n%s\n",
m_Pos.x, m_Pos.y, m_SchematicOrientation, m_Size.x, shape, m_Pos.x, m_Pos.y, m_SchematicOrientation, m_Size.x, shape,
m_Width, CONV_TO_UTF8( m_Text ) ) == EOF ) m_Thickness, CONV_TO_UTF8( m_Text ) ) == EOF )
{ {
success = false; success = false;
} }
...@@ -846,7 +846,7 @@ bool SCH_LABEL::Load( LINE_READER& aLine, wxString& aErrorMsg ) ...@@ -846,7 +846,7 @@ bool SCH_LABEL::Load( LINE_READER& aLine, wxString& aErrorMsg )
{ {
thickness = atol( Name3 ); thickness = atol( Name3 );
m_Bold = ( thickness != 0 ); m_Bold = ( thickness != 0 );
m_Width = m_Bold ? GetPenSizeForBold( size ) : 0; m_Thickness = m_Bold ? GetPenSizeForBold( size ) : 0;
} }
if( stricmp( Name2, "Italic" ) == 0 ) if( stricmp( Name2, "Italic" ) == 0 )
...@@ -873,7 +873,7 @@ EDA_Rect SCH_LABEL::GetBoundingBox() ...@@ -873,7 +873,7 @@ EDA_Rect SCH_LABEL::GetBoundingBox()
x = m_Pos.x; x = m_Pos.x;
y = m_Pos.y; y = m_Pos.y;
int width = (m_Width == 0) ? g_DrawDefaultLineThickness : m_Width; int width = (m_Thickness == 0) ? g_DrawDefaultLineThickness : m_Thickness;
length = LenSize( m_Text ); length = LenSize( m_Text );
height = m_Size.y + width; height = m_Size.y + width;
dx = dy = 0; dx = dy = 0;
...@@ -940,7 +940,7 @@ bool SCH_GLOBALLABEL::Save( FILE* aFile ) const ...@@ -940,7 +940,7 @@ bool SCH_GLOBALLABEL::Save( FILE* aFile ) const
shape = "Italic"; shape = "Italic";
if( fprintf( aFile, "Text GLabel %-4d %-4d %-4d %-4d %s %s %d\n%s\n", if( fprintf( aFile, "Text GLabel %-4d %-4d %-4d %-4d %s %s %d\n%s\n",
m_Pos.x, m_Pos.y, m_SchematicOrientation, m_Size.x, m_Pos.x, m_Pos.y, m_SchematicOrientation, m_Size.x,
SheetLabelType[m_Shape], shape, m_Width, CONV_TO_UTF8( m_Text ) ) == EOF ) SheetLabelType[m_Shape], shape, m_Thickness, CONV_TO_UTF8( m_Text ) ) == EOF )
{ {
success = false; success = false;
} }
...@@ -997,7 +997,7 @@ bool SCH_GLOBALLABEL::Load( LINE_READER& aLine, wxString& aErrorMsg ) ...@@ -997,7 +997,7 @@ bool SCH_GLOBALLABEL::Load( LINE_READER& aLine, wxString& aErrorMsg )
SetSchematicTextOrientation( orient ); SetSchematicTextOrientation( orient );
m_Shape = NET_INPUT; m_Shape = NET_INPUT;
m_Bold = ( thickness != 0 ); m_Bold = ( thickness != 0 );
m_Width = m_Bold ? GetPenSizeForBold( size ) : 0; m_Thickness = m_Bold ? GetPenSizeForBold( size ) : 0;
if( stricmp( Name2, SheetLabelType[NET_OUTPUT] ) == 0 ) if( stricmp( Name2, SheetLabelType[NET_OUTPUT] ) == 0 )
m_Shape = NET_OUTPUT; m_Shape = NET_OUTPUT;
...@@ -1092,7 +1092,7 @@ void SCH_GLOBALLABEL::Rotate( wxPoint rotationPoint ) ...@@ -1092,7 +1092,7 @@ void SCH_GLOBALLABEL::Rotate( wxPoint rotationPoint )
wxPoint SCH_GLOBALLABEL::GetSchematicTextOffset() wxPoint SCH_GLOBALLABEL::GetSchematicTextOffset()
{ {
wxPoint text_offset; wxPoint text_offset;
int width = (m_Width == 0) ? g_DrawDefaultLineThickness : m_Width; int width = (m_Thickness == 0) ? g_DrawDefaultLineThickness : m_Thickness;
width = Clamp_Text_PenSize( width, m_Size, m_Bold ); width = Clamp_Text_PenSize( width, m_Size, m_Bold );
int HalfSize = m_Size.x / 2; int HalfSize = m_Size.x / 2;
...@@ -1205,11 +1205,11 @@ void SCH_GLOBALLABEL::Draw( WinEDA_DrawPanel* panel, ...@@ -1205,11 +1205,11 @@ void SCH_GLOBALLABEL::Draw( WinEDA_DrawPanel* panel,
GRSetDrawMode( DC, DrawMode ); GRSetDrawMode( DC, DrawMode );
int linewidth = (m_Width == 0) ? g_DrawDefaultLineThickness : m_Width; int linewidth = (m_Thickness == 0) ? g_DrawDefaultLineThickness : m_Thickness;
linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold ); linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold );
EXCHG( linewidth, m_Width ); // Set the minimum width EXCHG( linewidth, m_Thickness ); // Set the minimum width
EDA_TextStruct::Draw( panel, DC, text_offset, color, DrawMode, FILLED, UNSPECIFIED_COLOR ); EDA_TextStruct::Draw( panel, DC, text_offset, color, DrawMode, FILLED, UNSPECIFIED_COLOR );
EXCHG( linewidth, m_Width ); // set initial value EXCHG( linewidth, m_Thickness ); // set initial value
CreateGraphicShape( Poly, m_Pos + aOffset ); CreateGraphicShape( Poly, m_Pos + aOffset );
GRPoly( &panel->m_ClipBox, DC, Poly.size(), &Poly[0], 0, linewidth, color, color ); GRPoly( &panel->m_ClipBox, DC, Poly.size(), &Poly[0], 0, linewidth, color, color );
...@@ -1237,7 +1237,7 @@ void SCH_GLOBALLABEL::CreateGraphicShape( std::vector <wxPoint>& aCorner_list, ...@@ -1237,7 +1237,7 @@ void SCH_GLOBALLABEL::CreateGraphicShape( std::vector <wxPoint>& aCorner_list,
const wxPoint& Pos ) const wxPoint& Pos )
{ {
int HalfSize = m_Size.y / 2; int HalfSize = m_Size.y / 2;
int linewidth = (m_Width == 0) ? g_DrawDefaultLineThickness : m_Width; int linewidth = (m_Thickness == 0) ? g_DrawDefaultLineThickness : m_Thickness;
linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold ); linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold );
...@@ -1325,7 +1325,7 @@ EDA_Rect SCH_GLOBALLABEL::GetBoundingBox() ...@@ -1325,7 +1325,7 @@ EDA_Rect SCH_GLOBALLABEL::GetBoundingBox()
y = m_Pos.y; y = m_Pos.y;
dx = dy = 0; dx = dy = 0;
int width = (m_Width == 0) ? g_DrawDefaultLineThickness : m_Width; int width = (m_Thickness == 0) ? g_DrawDefaultLineThickness : m_Thickness;
height = ( (m_Size.y * 15) / 10 ) + width + 2 * TXTMARGE; height = ( (m_Size.y * 15) / 10 ) + width + 2 * TXTMARGE;
// text X size add height for triangular shapes(bidirectional) // text X size add height for triangular shapes(bidirectional)
...@@ -1393,7 +1393,7 @@ bool SCH_HIERLABEL::Save( FILE* aFile ) const ...@@ -1393,7 +1393,7 @@ bool SCH_HIERLABEL::Save( FILE* aFile ) const
shape = "Italic"; shape = "Italic";
if( fprintf( aFile, "Text HLabel %-4d %-4d %-4d %-4d %s %s %d\n%s\n", if( fprintf( aFile, "Text HLabel %-4d %-4d %-4d %-4d %s %s %d\n%s\n",
m_Pos.x, m_Pos.y, m_SchematicOrientation, m_Size.x, m_Pos.x, m_Pos.y, m_SchematicOrientation, m_Size.x,
SheetLabelType[m_Shape], shape, m_Width, CONV_TO_UTF8( m_Text ) ) == EOF ) SheetLabelType[m_Shape], shape, m_Thickness, CONV_TO_UTF8( m_Text ) ) == EOF )
{ {
success = false; success = false;
} }
...@@ -1450,7 +1450,7 @@ bool SCH_HIERLABEL::Load( LINE_READER& aLine, wxString& aErrorMsg ) ...@@ -1450,7 +1450,7 @@ bool SCH_HIERLABEL::Load( LINE_READER& aLine, wxString& aErrorMsg )
SetSchematicTextOrientation( orient ); SetSchematicTextOrientation( orient );
m_Shape = NET_INPUT; m_Shape = NET_INPUT;
m_Bold = ( thickness != 0 ); m_Bold = ( thickness != 0 );
m_Width = m_Bold ? GetPenSizeForBold( size ) : 0; m_Thickness = m_Bold ? GetPenSizeForBold( size ) : 0;
if( stricmp( Name2, SheetLabelType[NET_OUTPUT] ) == 0 ) if( stricmp( Name2, SheetLabelType[NET_OUTPUT] ) == 0 )
m_Shape = NET_OUTPUT; m_Shape = NET_OUTPUT;
...@@ -1538,7 +1538,7 @@ void SCH_HIERLABEL::Draw( WinEDA_DrawPanel* panel, ...@@ -1538,7 +1538,7 @@ void SCH_HIERLABEL::Draw( WinEDA_DrawPanel* panel,
{ {
static std::vector <wxPoint> Poly; static std::vector <wxPoint> Poly;
EDA_Colors color; EDA_Colors color;
int linewidth = ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width; int linewidth = ( m_Thickness == 0 ) ? g_DrawDefaultLineThickness : m_Thickness;
linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold ); linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold );
...@@ -1549,10 +1549,10 @@ void SCH_HIERLABEL::Draw( WinEDA_DrawPanel* panel, ...@@ -1549,10 +1549,10 @@ void SCH_HIERLABEL::Draw( WinEDA_DrawPanel* panel,
GRSetDrawMode( DC, DrawMode ); GRSetDrawMode( DC, DrawMode );
EXCHG( linewidth, m_Width ); // Set the minimum width EXCHG( linewidth, m_Thickness ); // Set the minimum width
wxPoint text_offset = offset + GetSchematicTextOffset(); wxPoint text_offset = offset + GetSchematicTextOffset();
EDA_TextStruct::Draw( panel, DC, text_offset, color, DrawMode, FILLED, UNSPECIFIED_COLOR ); EDA_TextStruct::Draw( panel, DC, text_offset, color, DrawMode, FILLED, UNSPECIFIED_COLOR );
EXCHG( linewidth, m_Width ); // set initial value EXCHG( linewidth, m_Thickness ); // set initial value
CreateGraphicShape( Poly, m_Pos + offset ); CreateGraphicShape( Poly, m_Pos + offset );
GRPoly( &panel->m_ClipBox, DC, Poly.size(), &Poly[0], 0, linewidth, color, color ); GRPoly( &panel->m_ClipBox, DC, Poly.size(), &Poly[0], 0, linewidth, color, color );
...@@ -1606,7 +1606,7 @@ EDA_Rect SCH_HIERLABEL::GetBoundingBox() ...@@ -1606,7 +1606,7 @@ EDA_Rect SCH_HIERLABEL::GetBoundingBox()
y = m_Pos.y; y = m_Pos.y;
dx = dy = 0; dx = dy = 0;
int width = (m_Width == 0) ? g_DrawDefaultLineThickness : m_Width; int width = (m_Thickness == 0) ? g_DrawDefaultLineThickness : m_Thickness;
height = m_Size.y + width + 2 * TXTMARGE; height = m_Size.y + width + 2 * TXTMARGE;
length = LenSize( m_Text ) length = LenSize( m_Text )
+ height // add height for triangular shapes + height // add height for triangular shapes
...@@ -1661,7 +1661,7 @@ wxPoint SCH_HIERLABEL::GetSchematicTextOffset() ...@@ -1661,7 +1661,7 @@ wxPoint SCH_HIERLABEL::GetSchematicTextOffset()
{ {
wxPoint text_offset; wxPoint text_offset;
int width = MAX( m_Width, g_DrawDefaultLineThickness ); int width = MAX( m_Thickness, g_DrawDefaultLineThickness );
int ii = m_Size.x + TXTMARGE + width; int ii = m_Size.x + TXTMARGE + width;
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
#include "gerbview.h" #include "gerbview.h"
#include "wxGerberFrame.h" #include "wxGerberFrame.h"
#include "wxPcbStruct.h"
#include "pcbplot.h" #include "pcbplot.h"
#include "class_board_design_settings.h" #include "class_board_design_settings.h"
......
...@@ -575,7 +575,7 @@ public: ...@@ -575,7 +575,7 @@ public:
wxString m_Text; /* text! */ wxString m_Text; /* text! */
wxPoint m_Pos; /* XY position of anchor text. */ wxPoint m_Pos; /* XY position of anchor text. */
wxSize m_Size; /* XY size of text */ wxSize m_Size; /* XY size of text */
int m_Width; /* pen size used to draw this text */ int m_Thickness; /* pen size used to draw this text */
int m_Orient; /* Orient in 0.1 degrees */ int m_Orient; /* Orient in 0.1 degrees */
bool m_Mirror; /* Display Normal / mirror */ bool m_Mirror; /* Display Normal / mirror */
int m_Attributs; /* flags (visible...) */ int m_Attributs; /* flags (visible...) */
...@@ -682,7 +682,7 @@ public: ...@@ -682,7 +682,7 @@ public:
*/ */
int GetInterline() int GetInterline()
{ {
return (( m_Size.y * 14 ) / 10) + m_Width; return (( m_Size.y * 14 ) / 10) + m_Thickness;
} }
/** /**
......
...@@ -1100,7 +1100,7 @@ public: ...@@ -1100,7 +1100,7 @@ public:
* Function OnOrientFootprints * Function OnOrientFootprints
* install the dialog box for the common Orient Footprints * install the dialog box for the common Orient Footprints
*/ */
void OnOrientFootprints( void ); void OnOrientFootprints( wxCommandEvent& event );
/** /**
* Function ReOrientModules * Function ReOrientModules
...@@ -1108,8 +1108,9 @@ public: ...@@ -1108,8 +1108,9 @@ public:
* @param ModuleMask = mask (wildcard allowed) selection * @param ModuleMask = mask (wildcard allowed) selection
* @param Orient = new orientation * @param Orient = new orientation
* @param include_fixe = true to orient locked footprints * @param include_fixe = true to orient locked footprints
* @return true if some footprints modified, false if no change
*/ */
void ReOrientModules( const wxString& ModuleMask, int Orient, bool ReOrientModules( const wxString& ModuleMask, int Orient,
bool include_fixe ); bool include_fixe );
void FixeModule( MODULE* Module, bool Fixe ); void FixeModule( MODULE* Module, bool Fixe );
void AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb ); void AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb );
......
...@@ -27,12 +27,12 @@ set(PCBNEW_DIALOGS ...@@ -27,12 +27,12 @@ set(PCBNEW_DIALOGS
dialogs/dialog_cleaning_options.cpp dialogs/dialog_cleaning_options.cpp
dialogs/dialog_copper_zones.cpp dialogs/dialog_copper_zones.cpp
dialogs/dialog_copper_zones_base.cpp dialogs/dialog_copper_zones_base.cpp
dialog_design_rules.cpp dialogs/dialog_design_rules.cpp
dialog_design_rules_base.cpp dialogs/dialog_design_rules_base.cpp
dialogs/dialog_display_options.cpp dialogs/dialog_display_options.cpp
dialogs/dialog_display_options_base.cpp dialogs/dialog_display_options_base.cpp
dialog_drc_base.cpp dialogs/dialog_drc_base.cpp
dialog_drc.cpp dialogs/dialog_drc.cpp
dialogs/dialog_edit_module_for_BoardEditor.cpp dialogs/dialog_edit_module_for_BoardEditor.cpp
dialogs/dialog_edit_module_for_BoardEditor_base.cpp dialogs/dialog_edit_module_for_BoardEditor_base.cpp
dialogs/dialog_edit_module_for_Modedit_base.cpp dialogs/dialog_edit_module_for_Modedit_base.cpp
...@@ -45,20 +45,23 @@ set(PCBNEW_DIALOGS ...@@ -45,20 +45,23 @@ set(PCBNEW_DIALOGS
dialog_freeroute_exchange_base.cpp dialog_freeroute_exchange_base.cpp
dialogs/dialog_gendrill.cpp dialogs/dialog_gendrill.cpp
dialogs/dialog_gendrill_base.cpp dialogs/dialog_gendrill_base.cpp
dialog_general_options.cpp dialogs/dialog_general_options.cpp
dialog_general_options_BoardEditor_base.cpp dialogs/dialog_general_options_BoardEditor_base.cpp
dialog_global_edit_tracks_and_vias.cpp dialogs/dialog_global_edit_tracks_and_vias.cpp
dialog_global_edit_tracks_and_vias_base.cpp dialogs/dialog_global_edit_tracks_and_vias_base.cpp
dialog_global_pads_edition_base.cpp dialogs/dialog_global_pads_edition_base.cpp
dialogs/dialog_graphic_items_options.cpp dialogs/dialog_graphic_items_options.cpp
dialogs/dialog_graphic_items_options_base.cpp dialogs/dialog_graphic_items_options_base.cpp
dialogs/dialog_graphic_item_properties.cpp dialogs/dialog_graphic_item_properties.cpp
dialogs/dialog_graphic_item_properties_base.cpp dialogs/dialog_graphic_item_properties_base.cpp
dialog_layers_setup.cpp dialogs/dialog_global_deletion.cpp
dialog_layers_setup_base.cpp dialogs/dialog_global_deletion_base.cpp
dialog_netlist.cpp dialogs/dialog_layers_setup.cpp
dialog_netlist_fbp.cpp dialogs/dialog_layers_setup_base.cpp
dialog_pcb_text_properties.cpp dialogs/dialog_netlist.cpp
dialogs/dialog_netlist_fbp.cpp
dialogs/dialog_pcb_text_properties.cpp
dialogs/dialog_pcb_text_properties_base.cpp
dialogs/dialog_non_copper_zones_properties_base.cpp dialogs/dialog_non_copper_zones_properties_base.cpp
dialogs/dialog_pad_properties.cpp dialogs/dialog_pad_properties.cpp
dialogs/dialog_pad_properties_base.cpp dialogs/dialog_pad_properties_base.cpp
...@@ -69,7 +72,8 @@ set(PCBNEW_DIALOGS ...@@ -69,7 +72,8 @@ set(PCBNEW_DIALOGS
dialogs/dialog_print_for_modedit_base.cpp dialogs/dialog_print_for_modedit_base.cpp
dialogs/dialog_print_using_printer.cpp dialogs/dialog_print_using_printer.cpp
dialogs/dialog_print_using_printer_base.cpp dialogs/dialog_print_using_printer_base.cpp
dialog_orient_footprints.cpp dialogs/dialog_orient_footprints.cpp
dialogs/dialog_orient_footprints_base.cpp
dialogs/dialog_mask_clearance.cpp dialogs/dialog_mask_clearance.cpp
dialogs/dialog_mask_clearance_base.cpp dialogs/dialog_mask_clearance_base.cpp
dialogs/dialog_SVG_print.cpp dialogs/dialog_SVG_print.cpp
......
...@@ -2,13 +2,6 @@ ...@@ -2,13 +2,6 @@
/* ar-proto.h */ /* ar-proto.h */
/**************/ /**************/
MODULE ** GenListeModules( BOARD * Pcb, int * NbModules );
/****************/
/* GRAPHPCB.CPP */
/****************/
/* Initialize a value type, the cells included in the board surface of the /* Initialize a value type, the cells included in the board surface of the
* pad edge by pt_pad, with the margin reserved for isolation. */ * pad edge by pt_pad, with the margin reserved for isolation. */
void Place_1_Pad_Board( BOARD * Pcb, D_PAD * pt_pad, int type, int marge, void Place_1_Pad_Board( BOARD * Pcb, D_PAD * pt_pad, int type, int marge,
...@@ -44,8 +37,6 @@ void TraceFilledRectangle( BOARD * Pcb, int ux0, int uy0, int ux1, int uy1, ...@@ -44,8 +37,6 @@ void TraceFilledRectangle( BOARD * Pcb, int ux0, int uy0, int ux1, int uy1,
void TraceArc( int ux0,int uy0, int ux1, int uy1, int ArcAngle, int lg, void TraceArc( int ux0,int uy0, int ux1, int uy1, int ArcAngle, int lg,
int layer, int color, int op_logique); int layer, int color, int op_logique);
/* SOLVE.CPP */
/* QUEUE.CPP */ /* QUEUE.CPP */
void FreeQueue(); void FreeQueue();
void InitQueue(); void InitQueue();
...@@ -53,7 +44,6 @@ void GetQueue( int *, int *, int *, int *, int * ); ...@@ -53,7 +44,6 @@ void GetQueue( int *, int *, int *, int *, int * );
int SetQueue( int, int, int, int, int, int, int ); int SetQueue( int, int, int, int, int, int, int );
void ReSetQueue( int, int, int, int, int, int, int ); void ReSetQueue( int, int, int, int, int, int, int );
/* WORK.CPP */ /* WORK.CPP */
void InitWork(); void InitWork();
void ReInitWork(); void ReInitWork();
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#include "pcbnew.h" #include "pcbnew.h"
#include "wxPcbStruct.h" #include "wxPcbStruct.h"
#include "autorout.h"
#include "protos.h" #include "protos.h"
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
/* Routines for automatic displacement and rotation of modules. */ /* Routines for automatic displacement and rotation of modules. */
/****************************************************************/ /****************************************************************/
#include <algorithm>
#include "fctsys.h" #include "fctsys.h"
#include "gr_basic.h" #include "gr_basic.h"
#include "common.h" #include "common.h"
...@@ -25,7 +27,7 @@ typedef enum { ...@@ -25,7 +27,7 @@ typedef enum {
} SelectFixeFct; } SelectFixeFct;
static int tri_modules( MODULE** pt_ref, MODULE** pt_compare ); static bool sortModulesbySize( MODULE* ref, MODULE* compare );
wxString ModulesMaskSelection = wxT( "*" ); wxString ModulesMaskSelection = wxT( "*" );
...@@ -132,10 +134,6 @@ void WinEDA_PcbFrame::AutoPlace( wxCommandEvent& event ) ...@@ -132,10 +134,6 @@ void WinEDA_PcbFrame::AutoPlace( wxCommandEvent& event )
AutoMoveModulesOnPcb( TRUE ); AutoMoveModulesOnPcb( TRUE );
break; break;
case ID_POPUP_PCB_REORIENT_ALL_MODULES:
OnOrientFootprints();
break;
case ID_POPUP_PCB_AUTOROUTE_ALL_MODULES: case ID_POPUP_PCB_AUTOROUTE_ALL_MODULES:
Autoroute( &dc, ROUTE_ALL ); Autoroute( &dc, ROUTE_ALL );
break; break;
...@@ -172,13 +170,12 @@ void WinEDA_PcbFrame::AutoPlace( wxCommandEvent& event ) ...@@ -172,13 +170,12 @@ void WinEDA_PcbFrame::AutoPlace( wxCommandEvent& event )
*/ */
void WinEDA_PcbFrame::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb ) void WinEDA_PcbFrame::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb )
{ {
MODULE** pt_Dmod, ** BaseListeModules; std::vector <MODULE*> moduleList;
MODULE* Module;
wxPoint start, current; wxPoint start, current;
int Ymax_size, Xsize_allowed; int Ymax_size, Xsize_allowed;
int pas_grille = (int) GetScreen()->GetGridSize().x; int pas_grille = (int) GetScreen()->GetGridSize().x;
bool EdgeExists; bool edgesExists;
float surface; double surface;
if( GetBoard()->m_Modules == NULL ) if( GetBoard()->m_Modules == NULL )
{ {
...@@ -190,28 +187,29 @@ void WinEDA_PcbFrame::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb ) ...@@ -190,28 +187,29 @@ void WinEDA_PcbFrame::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb )
if( !IsOK( this, _( "Move modules?" ) ) ) if( !IsOK( this, _( "Move modules?" ) ) )
return; return;
EdgeExists = SetBoardBoundaryBoxFromEdgesOnly(); edgesExists = SetBoardBoundaryBoxFromEdgesOnly();
if( PlaceModulesHorsPcb && !EdgeExists ) if( PlaceModulesHorsPcb && !edgesExists )
{ {
DisplayError( this, DisplayError( this,
_( "Could not automatically place modules. No board outlines detected." ) ); _( "Could not automatically place modules. No board outlines detected." ) );
return; return;
} }
Module = GetBoard()->m_Modules; // Build sorted footprints list (sort by decreasing size )
MODULE* Module = GetBoard()->m_Modules;
for( ; Module != NULL; Module = Module->Next() ) for( ; Module != NULL; Module = Module->Next() )
{ {
Module->Set_Rectangle_Encadrement(); Module->Set_Rectangle_Encadrement();
Module->SetRectangleExinscrit(); Module->SetRectangleExinscrit();
moduleList.push_back(Module);
} }
sort( moduleList.begin(), moduleList.end(), sortModulesbySize );
BaseListeModules = GenListeModules( GetBoard(), NULL ); /* to move modules outside the board, the cursor is placed below
* the current board, to avoid placing components in board area.
/* If allocation of modules not PCBs, the cursor is placed below
* PCB, to avoid placing components in PCB area.
*/ */
if( PlaceModulesHorsPcb && EdgeExists ) if( PlaceModulesHorsPcb && edgesExists )
{ {
if( GetScreen()->m_Curseur.y < if( GetScreen()->m_Curseur.y <
(GetBoard()->m_BoundaryBox.GetBottom() + 2000) ) (GetBoard()->m_BoundaryBox.GetBottom() + 2000) )
...@@ -219,12 +217,12 @@ void WinEDA_PcbFrame::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb ) ...@@ -219,12 +217,12 @@ void WinEDA_PcbFrame::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb )
2000; 2000;
} }
/* calculating the area occupied by the circuits */ /* calculate the area needed by footprints */
surface = 0.0; surface = 0.0;
for( pt_Dmod = BaseListeModules; *pt_Dmod != NULL; pt_Dmod++ ) for( unsigned ii = 0; ii < moduleList.size(); ii++ )
{ {
Module = *pt_Dmod; Module = moduleList[ii];
if( PlaceModulesHorsPcb && EdgeExists ) if( PlaceModulesHorsPcb && edgesExists )
{ {
if( GetBoard()->m_BoundaryBox.Inside( Module->m_Pos ) ) if( GetBoard()->m_BoundaryBox.Inside( Module->m_Pos ) )
continue; continue;
...@@ -237,13 +235,13 @@ void WinEDA_PcbFrame::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb ) ...@@ -237,13 +235,13 @@ void WinEDA_PcbFrame::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb )
start = current = GetScreen()->m_Curseur; start = current = GetScreen()->m_Curseur;
Ymax_size = 0; Ymax_size = 0;
for( pt_Dmod = BaseListeModules; *pt_Dmod != NULL; pt_Dmod++ ) for( unsigned ii = 0; ii < moduleList.size(); ii++ )
{ {
Module = *pt_Dmod; Module = moduleList[ii];
if( Module->IsLocked() ) if( Module->IsLocked() )
continue; continue;
if( PlaceModulesHorsPcb && EdgeExists ) if( PlaceModulesHorsPcb && edgesExists )
{ {
if( GetBoard()->m_BoundaryBox.Inside( Module->m_Pos ) ) if( GetBoard()->m_BoundaryBox.Inside( Module->m_Pos ) )
continue; continue;
...@@ -269,7 +267,6 @@ void WinEDA_PcbFrame::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb ) ...@@ -269,7 +267,6 @@ void WinEDA_PcbFrame::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb )
current.x += Module->m_RealBoundaryBox.GetWidth() + pas_grille; current.x += Module->m_RealBoundaryBox.GetWidth() + pas_grille;
} }
MyFree( BaseListeModules );
DrawPanel->Refresh(); DrawPanel->Refresh();
} }
...@@ -302,58 +299,8 @@ void WinEDA_PcbFrame::FixeModule( MODULE* Module, bool Fixe ) ...@@ -302,58 +299,8 @@ void WinEDA_PcbFrame::FixeModule( MODULE* Module, bool Fixe )
} }
/* Create memory allocation by the ordered list of structures D_MODULES static bool sortModulesbySize( MODULE* ref, MODULE* compare )
* Describing the module to move
* The end of the list is indicated by NULL
* Also returns the number of modules per NbModules *
* Deallocates memory after use
*/
MODULE** GenListeModules( BOARD* Pcb, int* NbModules )
{ {
MODULE* Module; return compare->m_Surface < ref->m_Surface;
MODULE** ListeMod, ** PtList;
int NbMod;
/* Reserve memory for descriptions of modules that are to be moved. */
Module = Pcb->m_Modules;
NbMod = 0;
for( ; Module != NULL; Module = Module->Next() )
NbMod++;
ListeMod = (MODULE**) MyZMalloc( (NbMod + 1) * sizeof(MODULE*) );
if( ListeMod == NULL )
{
if( NbModules != NULL )
*NbModules = 0;
return NULL;
}
PtList = ListeMod;
Module = Pcb->m_Modules;
for( ; Module != NULL; Module = Module->Next() )
{
*PtList = Module; PtList++;
Module->SetRectangleExinscrit();
}
/* Sort by surface area module largest to smallest */
qsort( ListeMod, NbMod, sizeof(MODULE * *),
( int ( * )( const void*, const void* ) )tri_modules );
if( NbModules != NULL )
*NbModules = NbMod;
return ListeMod;
} }
static int tri_modules( MODULE** pt_ref, MODULE** pt_compare )
{
float ff;
ff = (*pt_ref)->m_Surface - (*pt_compare)->m_Surface;
if( ff < 0 )
return 1;
if( ff > 0 )
return -1;
return 0;
}
...@@ -51,7 +51,6 @@ static bool AutoPlaceShowAll = TRUE; ...@@ -51,7 +51,6 @@ static bool AutoPlaceShowAll = TRUE;
float MinCout; float MinCout;
static int TstModuleOnBoard( BOARD* Pcb, MODULE* Module, bool TstOtherSide ); static int TstModuleOnBoard( BOARD* Pcb, MODULE* Module, bool TstOtherSide );
static int Tri_PlaceModules( MODULE** pt_ref, MODULE** pt_compare );
static void TracePenaliteRectangle( BOARD* Pcb, static void TracePenaliteRectangle( BOARD* Pcb,
int ux0, int ux0,
...@@ -74,7 +73,6 @@ void WinEDA_PcbFrame::AutoPlaceModule( MODULE* Module, ...@@ -74,7 +73,6 @@ void WinEDA_PcbFrame::AutoPlaceModule( MODULE* Module,
{ {
int ii, activ; int ii, activ;
MODULE* ThisModule = NULL; MODULE* ThisModule = NULL;
MODULE** BaseListeModules;
wxPoint PosOK; wxPoint PosOK;
wxPoint memopos; wxPoint memopos;
int error; int error;
...@@ -125,19 +123,17 @@ void WinEDA_PcbFrame::AutoPlaceModule( MODULE* Module, ...@@ -125,19 +123,17 @@ void WinEDA_PcbFrame::AutoPlaceModule( MODULE* Module,
/* Compute module parmeters used in auto place */ /* Compute module parmeters used in auto place */
Module = GetBoard()->m_Modules; Module = GetBoard()->m_Modules;
NbTotalModules = 0;
for( ; Module != NULL; Module = Module->Next() ) for( ; Module != NULL; Module = Module->Next() )
{ {
Module->Set_Rectangle_Encadrement(); Module->Set_Rectangle_Encadrement();
Module->SetRectangleExinscrit(); Module->SetRectangleExinscrit();
NbTotalModules ++;
} }
if( GenPlaceBoard() == 0 ) if( GenPlaceBoard() == 0 )
return; return;
/* Updating the parameters useful for module placement. */
BaseListeModules = GenListeModules( GetBoard(), &NbTotalModules );
MyFree( BaseListeModules );
Module = GetBoard()->m_Modules; Module = GetBoard()->m_Modules;
for( ; Module != NULL; Module = Module->Next() ) for( ; Module != NULL; Module = Module->Next() )
{ {
...@@ -1003,37 +999,23 @@ static void TracePenaliteRectangle( BOARD* Pcb, ...@@ -1003,37 +999,23 @@ static void TracePenaliteRectangle( BOARD* Pcb,
} }
/************************************/ /* Sort routines */
/* Sort routines for use with qsort */ static bool Tri_PlaceModules( MODULE* ref, MODULE* compare )
/************************************/
static int Tri_PlaceModules( MODULE** pt_ref, MODULE** pt_compare )
{ {
float ff, ff1, ff2; double ff1, ff2;
ff1 = (*pt_ref)->m_Surface * (*pt_ref)->m_PadNum;
ff2 = (*pt_compare)->m_Surface * (*pt_compare)->m_PadNum;
ff = ff1 - ff2;
if( ff < 0 )
return 1;
if( ff > 0 )
return -1;
return 0;
}
ff1 = ref->m_Surface * ref->m_PadNum;
ff2 = compare->m_Surface * compare->m_PadNum;
return ff2 < ff1;
}
static int Tri_RatsModules( MODULE** pt_ref, MODULE** pt_compare ) static bool Tri_RatsModules( MODULE* ref, MODULE* compare )
{ {
float ff, ff1, ff2; double ff1, ff2;
ff1 = (*pt_ref)->m_Surface * (*pt_ref)->flag; ff1 = ref->m_Surface * ref->flag;
ff2 = (*pt_compare)->m_Surface * (*pt_compare)->flag; ff2 = compare->m_Surface * compare->flag;
ff = ff1 - ff2; return ff2 < ff1;
if( ff < 0 )
return 1;
if( ff > 0 )
return -1;
return 0;
} }
...@@ -1044,28 +1026,28 @@ static int Tri_RatsModules( MODULE** pt_ref, MODULE** pt_compare ) ...@@ -1044,28 +1026,28 @@ static int Tri_RatsModules( MODULE** pt_ref, MODULE** pt_compare )
*/ */
static MODULE* PickModule( WinEDA_PcbFrame* pcbframe, wxDC* DC ) static MODULE* PickModule( WinEDA_PcbFrame* pcbframe, wxDC* DC )
{ {
MODULE** BaseListeModules, ** pt_Dmod; MODULE* Module;
MODULE* Module = NULL, * AltModule = NULL; std::vector <MODULE*> moduleList;
int NbModules;
BaseListeModules = GenListeModules( pcbframe->GetBoard(), &NbModules ); // Build sorted footprints list (sort by decreasing size )
if( BaseListeModules == NULL ) Module = pcbframe->GetBoard()->m_Modules;
return NULL; for( ; Module != NULL; Module = Module->Next() )
{
/* Sort surface area of modules from greatest to least. Surface area Module->Set_Rectangle_Encadrement();
* weighted by the number of pads Module->SetRectangleExinscrit();
*/ moduleList.push_back(Module);
qsort( BaseListeModules, NbModules, sizeof(MODULE * *), }
( int (*)( const void*, const void* ) )Tri_PlaceModules ); sort( moduleList.begin(), moduleList.end(), Tri_PlaceModules );
for( pt_Dmod = BaseListeModules; *pt_Dmod != NULL; pt_Dmod++ ) for( unsigned ii = 0; ii < moduleList.size(); ii++ )
{ {
(*pt_Dmod)->flag = 0; Module = moduleList[ii];
if( !( (*pt_Dmod)->m_ModuleStatus & MODULE_to_PLACE ) ) Module->flag = 0;
if( !( Module->m_ModuleStatus & MODULE_to_PLACE ) )
continue; continue;
pcbframe->GetBoard()->m_Status_Pcb &= ~RATSNEST_ITEM_LOCAL_OK; pcbframe->GetBoard()->m_Status_Pcb &= ~RATSNEST_ITEM_LOCAL_OK;
(*pt_Dmod)->DisplayInfo( pcbframe ); Module->DisplayInfo( pcbframe );
pcbframe->build_ratsnest_module( DC, *pt_Dmod ); pcbframe->build_ratsnest_module( DC, Module );
/* Calculate external ratsnet. */ /* Calculate external ratsnet. */
for( unsigned ii = 0; for( unsigned ii = 0;
...@@ -1074,33 +1056,33 @@ static MODULE* PickModule( WinEDA_PcbFrame* pcbframe, wxDC* DC ) ...@@ -1074,33 +1056,33 @@ static MODULE* PickModule( WinEDA_PcbFrame* pcbframe, wxDC* DC )
{ {
if( ( pcbframe->GetBoard()->m_LocalRatsnest[ii].m_Status & if( ( pcbframe->GetBoard()->m_LocalRatsnest[ii].m_Status &
LOCAL_RATSNEST_ITEM ) == 0 ) LOCAL_RATSNEST_ITEM ) == 0 )
(*pt_Dmod)->flag++; Module->flag++;
} }
} }
pcbframe->GetBoard()->m_Status_Pcb &= ~RATSNEST_ITEM_LOCAL_OK; pcbframe->GetBoard()->m_Status_Pcb &= ~RATSNEST_ITEM_LOCAL_OK;
qsort( BaseListeModules, NbModules, sizeof(MODULE * *), sort( moduleList.begin(), moduleList.end(), Tri_RatsModules );
( int (*)( const void*, const void* ) )Tri_RatsModules );
/* Search for "best" module. */ /* Search for "best" module. */
Module = NULL; MODULE* bestModule = NULL;
for( pt_Dmod = BaseListeModules; *pt_Dmod != NULL; pt_Dmod++ ) MODULE* altModule = NULL;
for( unsigned ii = 0; ii < moduleList.size(); ii++ )
{ {
if( !( (*pt_Dmod)->m_ModuleStatus & MODULE_to_PLACE ) ) Module = moduleList[ii];
if( !( Module->m_ModuleStatus & MODULE_to_PLACE ) )
continue; continue;
AltModule = *pt_Dmod; altModule = Module;
if( (*pt_Dmod)->flag == 0 ) if( Module->flag == 0 )
continue; continue;
Module = *pt_Dmod; break; bestModule = Module;
break;
} }
MyFree( BaseListeModules ); if( bestModule )
if( Module ) return bestModule;
return Module;
else else
return AltModule; return altModule;
} }
...@@ -1169,3 +1151,145 @@ bool WinEDA_PcbFrame::SetBoardBoundaryBoxFromEdgesOnly() ...@@ -1169,3 +1151,145 @@ bool WinEDA_PcbFrame::SetBoardBoundaryBoxFromEdgesOnly()
ymax - GetBoard()->m_BoundaryBox.m_Pos.y ); ymax - GetBoard()->m_BoundaryBox.m_Pos.y );
return succes; return succes;
} }
/********************************************/
int Propagation( WinEDA_PcbFrame* frame )
/********************************************/
/**
* Function Propagation
* Used now only in autoplace calculations
* Uses the routing matrix to fill the cells within the zone
* Search and mark cells within the zone, and agree with DRC options.
* Requirements:
* Start from an initial point, to fill zone
* The zone must have no "copper island"
* Algorithm:
* If the current cell has a neightbour flagged as "cell in the zone", it
* become a cell in the zone
* The first point in the zone is the starting point
* 4 searches within the matrix are made:
* 1 - Left to right and top to bottom
* 2 - Right to left and top to bottom
* 3 - bottom to top and Right to left
* 4 - bottom to top and Left to right
* Given the current cell, for each search, we consider the 2 neightbour cells
* the previous cell on the same line and the previous cell on the same column.
*
* This funtion can request some iterations
* Iterations are made until no cell is added to the zone.
* @return: added cells count (i.e. which the attribute CELL_is_ZONE is set)
*/
{
int row, col, nn;
long current_cell, old_cell_H;
int long* pt_cell_V;
int nbpoints = 0;
#define NO_CELL_ZONE (HOLE | CELL_is_EDGE | CELL_is_ZONE)
wxString msg;
Affiche_1_Parametre( frame, 57, wxT( "Detect" ), msg, CYAN );
Affiche_1_Parametre( frame, -1, wxEmptyString, wxT( "1" ), CYAN );
// Alloc memory to handle 1 line or 1 colunmn on the routing matrix
nn = MAX( Nrows, Ncols ) * sizeof(*pt_cell_V);
pt_cell_V = (long*) MyMalloc( nn );
/* search 1 : from left to right and top to bottom */
memset( pt_cell_V, 0, nn );
for( row = 0; row < Nrows; row++ )
{
old_cell_H = 0;
for( col = 0; col < Ncols; col++ )
{
current_cell = GetCell( row, col, BOTTOM ) & NO_CELL_ZONE;
if( current_cell == 0 ) /* a free cell is found */
{
if( (old_cell_H & CELL_is_ZONE)
|| (pt_cell_V[col] & CELL_is_ZONE) )
{
OrCell( row, col, BOTTOM, CELL_is_ZONE );
current_cell = CELL_is_ZONE;
nbpoints++;
}
}
pt_cell_V[col] = old_cell_H = current_cell;
}
}
/* search 2 : from right to left and top to bottom */
Affiche_1_Parametre( frame, -1, wxEmptyString, wxT( "2" ), CYAN );
memset( pt_cell_V, 0, nn );
for( row = 0; row < Nrows; row++ )
{
old_cell_H = 0;
for( col = Ncols - 1; col >= 0; col-- )
{
current_cell = GetCell( row, col, BOTTOM ) & NO_CELL_ZONE;
if( current_cell == 0 ) /* a free cell is found */
{
if( (old_cell_H & CELL_is_ZONE)
|| (pt_cell_V[col] & CELL_is_ZONE) )
{
OrCell( row, col, BOTTOM, CELL_is_ZONE );
current_cell = CELL_is_ZONE;
nbpoints++;
}
}
pt_cell_V[col] = old_cell_H = current_cell;
}
}
/* search 3 : from bottom to top and right to left balayage */
Affiche_1_Parametre( frame, -1, wxEmptyString, wxT( "3" ), CYAN );
memset( pt_cell_V, 0, nn );
for( col = Ncols - 1; col >= 0; col-- )
{
old_cell_H = 0;
for( row = Nrows - 1; row >= 0; row-- )
{
current_cell = GetCell( row, col, BOTTOM ) & NO_CELL_ZONE;
if( current_cell == 0 ) /* a free cell is found */
{
if( (old_cell_H & CELL_is_ZONE)
|| (pt_cell_V[row] & CELL_is_ZONE) )
{
OrCell( row, col, BOTTOM, CELL_is_ZONE );
current_cell = CELL_is_ZONE;
nbpoints++;
}
}
pt_cell_V[row] = old_cell_H = current_cell;
}
}
/* search 4 : from bottom to top and left to right */
Affiche_1_Parametre( frame, -1, wxEmptyString, wxT( "4" ), CYAN );
memset( pt_cell_V, 0, nn );
for( col = 0; col < Ncols; col++ )
{
old_cell_H = 0;
for( row = Nrows - 1; row >= 0; row-- )
{
current_cell = GetCell( row, col, BOTTOM ) & NO_CELL_ZONE;
if( current_cell == 0 ) /* a free cell is found */
{
if( (old_cell_H & CELL_is_ZONE)
|| (pt_cell_V[row] & CELL_is_ZONE) )
{
OrCell( row, col, BOTTOM, CELL_is_ZONE );
current_cell = CELL_is_ZONE;
nbpoints++;
}
}
pt_cell_V[row] = old_cell_H = current_cell;
}
}
MyFree( pt_cell_V );
return nbpoints;
}
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "pcbnew.h" #include "pcbnew.h"
#include "wxPcbStruct.h" #include "wxPcbStruct.h"
#include "autorout.h"
#include "pcbplot.h" #include "pcbplot.h"
#include "trigo.h" #include "trigo.h"
......
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
#include "pcbnew.h" #include "pcbnew.h"
#include "wxPcbStruct.h" #include "wxPcbStruct.h"
#include "module_editor_frame.h" #include "module_editor_frame.h"
#include "autorout.h"
#include "pcbplot.h" #include "pcbplot.h"
#include "trigo.h" #include "trigo.h"
......
...@@ -195,7 +195,7 @@ void SwapData( BOARD_ITEM* aItem, BOARD_ITEM* aImage ) ...@@ -195,7 +195,7 @@ void SwapData( BOARD_ITEM* aItem, BOARD_ITEM* aImage )
EXCHG( ( (TEXTE_PCB*) aItem )->m_Mirror, ( (TEXTE_PCB*) aImage )->m_Mirror ); EXCHG( ( (TEXTE_PCB*) aItem )->m_Mirror, ( (TEXTE_PCB*) aImage )->m_Mirror );
EXCHG( ( (TEXTE_PCB*) aItem )->m_Size, ( (TEXTE_PCB*) aImage )->m_Size ); EXCHG( ( (TEXTE_PCB*) aItem )->m_Size, ( (TEXTE_PCB*) aImage )->m_Size );
EXCHG( ( (TEXTE_PCB*) aItem )->m_Pos, ( (TEXTE_PCB*) aImage )->m_Pos ); EXCHG( ( (TEXTE_PCB*) aItem )->m_Pos, ( (TEXTE_PCB*) aImage )->m_Pos );
EXCHG( ( (TEXTE_PCB*) aItem )->m_Width, ( (TEXTE_PCB*) aImage )->m_Width ); EXCHG( ( (TEXTE_PCB*) aItem )->m_Thickness, ( (TEXTE_PCB*) aImage )->m_Thickness );
EXCHG( ( (TEXTE_PCB*) aItem )->m_Orient, ( (TEXTE_PCB*) aImage )->m_Orient ); EXCHG( ( (TEXTE_PCB*) aItem )->m_Orient, ( (TEXTE_PCB*) aImage )->m_Orient );
EXCHG( ( (TEXTE_PCB*) aItem )->m_Text, ( (TEXTE_PCB*) aImage )->m_Text ); EXCHG( ( (TEXTE_PCB*) aItem )->m_Text, ( (TEXTE_PCB*) aImage )->m_Text );
EXCHG( ( (TEXTE_PCB*) aItem )->m_Italic, ( (TEXTE_PCB*) aImage )->m_Italic ); EXCHG( ( (TEXTE_PCB*) aItem )->m_Italic, ( (TEXTE_PCB*) aImage )->m_Italic );
...@@ -218,7 +218,7 @@ void SwapData( BOARD_ITEM* aItem, BOARD_ITEM* aImage ) ...@@ -218,7 +218,7 @@ void SwapData( BOARD_ITEM* aItem, BOARD_ITEM* aImage )
( (DIMENSION*) aImage )->SetText( txt ); ( (DIMENSION*) aImage )->SetText( txt );
EXCHG( ( (DIMENSION*) aItem )->m_Width, ( (DIMENSION*) aImage )->m_Width ); EXCHG( ( (DIMENSION*) aItem )->m_Width, ( (DIMENSION*) aImage )->m_Width );
EXCHG( ( (DIMENSION*) aItem )->m_Text->m_Size, ( (DIMENSION*) aImage )->m_Text->m_Size ); EXCHG( ( (DIMENSION*) aItem )->m_Text->m_Size, ( (DIMENSION*) aImage )->m_Text->m_Size );
EXCHG( ( (DIMENSION*) aItem )->m_Text->m_Width, ( (DIMENSION*) aImage )->m_Text->m_Width ); EXCHG( ( (DIMENSION*) aItem )->m_Text->m_Thickness, ( (DIMENSION*) aImage )->m_Text->m_Thickness );
EXCHG( ( (DIMENSION*) aItem )->m_Text->m_Mirror, ( (DIMENSION*) aImage )->m_Text->m_Mirror ); EXCHG( ( (DIMENSION*) aItem )->m_Text->m_Mirror, ( (DIMENSION*) aImage )->m_Text->m_Mirror );
} }
break; break;
......
...@@ -144,7 +144,7 @@ bool DIMENSION::ReadDimensionDescr( FILE* File, int* LineNum ) ...@@ -144,7 +144,7 @@ bool DIMENSION::ReadDimensionDescr( FILE* File, int* LineNum )
sscanf( Line + 2, " %d %d %d %d %d %d %d", sscanf( Line + 2, " %d %d %d %d %d %d %d",
&m_Text->m_Pos.x, &m_Text->m_Pos.y, &m_Text->m_Pos.x, &m_Text->m_Pos.y,
&m_Text->m_Size.x, &m_Text->m_Size.y, &m_Text->m_Size.x, &m_Text->m_Size.y,
&m_Text->m_Width, &m_Text->m_Orient, &m_Text->m_Thickness, &m_Text->m_Orient,
&normal_display ); &normal_display );
m_Text->m_Mirror = normal_display ? false : true; m_Text->m_Mirror = normal_display ? false : true;
...@@ -369,7 +369,7 @@ bool DIMENSION::Save( FILE* aFile ) const ...@@ -369,7 +369,7 @@ bool DIMENSION::Save( FILE* aFile ) const
fprintf( aFile, "Po %d %d %d %d %d %d %d\n", fprintf( aFile, "Po %d %d %d %d %d %d %d\n",
m_Text->m_Pos.x, m_Text->m_Pos.y, m_Text->m_Pos.x, m_Text->m_Pos.y,
m_Text->m_Size.x, m_Text->m_Size.y, m_Text->m_Size.x, m_Text->m_Size.y,
m_Text->m_Width, m_Text->m_Orient, m_Text->m_Thickness, m_Text->m_Orient,
m_Text->m_Mirror ? 0 : 1 ); m_Text->m_Mirror ? 0 : 1 );
fprintf( aFile, "Sb %d %d %d %d %d %d\n", S_SEGMENT, fprintf( aFile, "Sb %d %d %d %d %d %d\n", S_SEGMENT,
...@@ -433,7 +433,7 @@ void DIMENSION::AdjustDimensionDetails( bool aDoNotChangeText ) ...@@ -433,7 +433,7 @@ void DIMENSION::AdjustDimensionDetails( bool aDoNotChangeText )
/* calculate the size of the cdimension /* calculate the size of the cdimension
* (text + line above the text) */ * (text + line above the text) */
ii = m_Text->m_Size.y + ii = m_Text->m_Size.y +
m_Text->m_Width + (m_Width * 3); m_Text->m_Thickness + (m_Width * 3);
deltax = TraitD_ox - TraitG_ox; deltax = TraitD_ox - TraitG_ox;
deltay = TraitD_oy - TraitG_oy; deltay = TraitD_oy - TraitG_oy;
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include "class_board_design_settings.h" #include "class_board_design_settings.h"
#include "colors_selection.h" #include "colors_selection.h"
#include "autorout.h"
#include "drag.h" #include "drag.h"
#include "3d_struct.h" #include "3d_struct.h"
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
#include "common.h" #include "common.h"
#include "class_drawpanel.h" #include "class_drawpanel.h"
#include "pcbnew.h" #include "pcbnew.h"
#include "autorout.h"
// Constructor and destructor // Constructor and destructor
......
...@@ -43,7 +43,7 @@ void TEXTE_PCB::Copy( TEXTE_PCB* source ) ...@@ -43,7 +43,7 @@ void TEXTE_PCB::Copy( TEXTE_PCB* source )
m_Orient = source->m_Orient; m_Orient = source->m_Orient;
m_Pos = source->m_Pos; m_Pos = source->m_Pos;
m_Layer = source->m_Layer; m_Layer = source->m_Layer;
m_Width = source->m_Width; m_Thickness = source->m_Thickness;
m_Attributs = source->m_Attributs; m_Attributs = source->m_Attributs;
m_Italic = source->m_Italic; m_Italic = source->m_Italic;
m_Bold = source->m_Bold; m_Bold = source->m_Bold;
...@@ -103,7 +103,7 @@ int TEXTE_PCB::ReadTextePcbDescr( FILE* File, int* LineNum ) ...@@ -103,7 +103,7 @@ int TEXTE_PCB::ReadTextePcbDescr( FILE* File, int* LineNum )
{ {
sscanf( Line + 2, " %d %d %d %d %d %d", sscanf( Line + 2, " %d %d %d %d %d %d",
&m_Pos.x, &m_Pos.y, &m_Size.x, &m_Size.y, &m_Pos.x, &m_Pos.y, &m_Size.x, &m_Size.y,
&m_Width, &m_Orient ); &m_Thickness, &m_Orient );
// Ensure the text has minimal size to see this text on screen: // Ensure the text has minimal size to see this text on screen:
if( m_Size.x < 5 ) if( m_Size.x < 5 )
...@@ -135,9 +135,9 @@ int TEXTE_PCB::ReadTextePcbDescr( FILE* File, int* LineNum ) ...@@ -135,9 +135,9 @@ int TEXTE_PCB::ReadTextePcbDescr( FILE* File, int* LineNum )
} }
// Set a reasonable width: // Set a reasonable width:
if( m_Width < 1 ) if( m_Thickness < 1 )
m_Width = 1; m_Thickness = 1;
m_Width = Clamp_Text_PenSize( m_Width, m_Size ); m_Thickness = Clamp_Text_PenSize( m_Thickness, m_Size );
return 1; return 1;
} }
...@@ -168,7 +168,7 @@ bool TEXTE_PCB::Save( FILE* aFile ) const ...@@ -168,7 +168,7 @@ bool TEXTE_PCB::Save( FILE* aFile ) const
delete (list); delete (list);
fprintf( aFile, "Po %d %d %d %d %d %d\n", fprintf( aFile, "Po %d %d %d %d %d %d\n",
m_Pos.x, m_Pos.y, m_Size.x, m_Size.y, m_Width, m_Orient ); m_Pos.x, m_Pos.y, m_Size.x, m_Size.y, m_Thickness, m_Orient );
fprintf( aFile, "De %d %d %lX %s\n", m_Layer, fprintf( aFile, "De %d %d %lX %s\n", m_Layer,
m_Mirror ? 0 : 1, m_Mirror ? 0 : 1,
m_TimeStamp, style ); m_TimeStamp, style );
...@@ -244,8 +244,8 @@ void TEXTE_PCB::DisplayInfo( WinEDA_DrawFrame* frame ) ...@@ -244,8 +244,8 @@ void TEXTE_PCB::DisplayInfo( WinEDA_DrawFrame* frame )
msg.Printf( wxT( "%.1f" ), (float) m_Orient / 10 ); msg.Printf( wxT( "%.1f" ), (float) m_Orient / 10 );
frame->AppendMsgPanel( _( "Orient" ), msg, DARKGREEN ); frame->AppendMsgPanel( _( "Orient" ), msg, DARKGREEN );
valeur_param( m_Width, msg ); valeur_param( m_Thickness, msg );
frame->AppendMsgPanel( _( "Width" ), msg, MAGENTA ); frame->AppendMsgPanel( _( "Thickness" ), msg, MAGENTA );
valeur_param( m_Size.x, msg ); valeur_param( m_Size.x, msg );
frame->AppendMsgPanel( _( "H Size" ), msg, RED ); frame->AppendMsgPanel( _( "H Size" ), msg, RED );
......
...@@ -30,7 +30,7 @@ TEXTE_MODULE::TEXTE_MODULE( MODULE* parent, int text_type ) : ...@@ -30,7 +30,7 @@ TEXTE_MODULE::TEXTE_MODULE( MODULE* parent, int text_type ) :
m_NoShow = false; m_NoShow = false;
m_Size.x = m_Size.y = 400; m_Size.x = m_Size.y = 400;
m_Width = 120; /* Set default dimension to a reasonable value. */ m_Thickness = 120; /* Set default dimension to a reasonable value. */
SetLayer( SILKSCREEN_N_FRONT ); SetLayer( SILKSCREEN_N_FRONT );
if( Module && ( Module->Type() == TYPE_MODULE ) ) if( Module && ( Module->Type() == TYPE_MODULE ) )
...@@ -82,7 +82,7 @@ bool TEXTE_MODULE::Save( FILE* aFile ) const ...@@ -82,7 +82,7 @@ bool TEXTE_MODULE::Save( FILE* aFile ) const
m_Pos0.x, m_Pos0.y, m_Pos0.x, m_Pos0.y,
m_Size.y, m_Size.x, m_Size.y, m_Size.x,
orient, orient,
m_Width, m_Thickness,
m_Mirror ? 'M' : 'N', m_NoShow ? 'I' : 'V', m_Mirror ? 'M' : 'N', m_NoShow ? 'I' : 'V',
GetLayer(), GetLayer(),
m_Italic ? 'I' : 'N', m_Italic ? 'I' : 'N',
...@@ -115,7 +115,7 @@ int TEXTE_MODULE::ReadDescr( char* aLine, FILE* aFile, int* aLineNum ) ...@@ -115,7 +115,7 @@ int TEXTE_MODULE::ReadDescr( char* aLine, FILE* aFile, int* aLineNum )
&type, &type,
&m_Pos0.x, &m_Pos0.y, &m_Pos0.x, &m_Pos0.y,
&m_Size.y, &m_Size.x, &m_Size.y, &m_Size.x,
&m_Orient, &m_Width, &m_Orient, &m_Thickness,
BufCar1, BufCar2, &layer, BufCar3 ) >= 10 ) BufCar1, BufCar2, &layer, BufCar3 ) >= 10 )
success = true; success = true;
...@@ -165,9 +165,9 @@ int TEXTE_MODULE::ReadDescr( char* aLine, FILE* aFile, int* aLineNum ) ...@@ -165,9 +165,9 @@ int TEXTE_MODULE::ReadDescr( char* aLine, FILE* aFile, int* aLineNum )
m_Size.y = TEXTS_MIN_SIZE; m_Size.y = TEXTS_MIN_SIZE;
// Set a reasonable width: // Set a reasonable width:
if( m_Width < 1 ) if( m_Thickness < 1 )
m_Width = 1; m_Thickness = 1;
m_Width = Clamp_Text_PenSize( m_Width, m_Size ); m_Thickness = Clamp_Text_PenSize( m_Thickness, m_Size );
return success; return success;
} }
...@@ -187,7 +187,7 @@ void TEXTE_MODULE::Copy( TEXTE_MODULE* source ) ...@@ -187,7 +187,7 @@ void TEXTE_MODULE::Copy( TEXTE_MODULE* source )
m_Orient = source->m_Orient; m_Orient = source->m_Orient;
m_Pos0 = source->m_Pos0; m_Pos0 = source->m_Pos0;
m_Size = source->m_Size; m_Size = source->m_Size;
m_Width = source->m_Width; m_Thickness = source->m_Thickness;
m_Italic = source->m_Italic; m_Italic = source->m_Italic;
m_Bold = source->m_Bold; m_Bold = source->m_Bold;
m_Text = source->m_Text; m_Text = source->m_Text;
...@@ -202,7 +202,7 @@ int TEXTE_MODULE:: GetLength() ...@@ -202,7 +202,7 @@ int TEXTE_MODULE:: GetLength()
void TEXTE_MODULE:: SetWidth( int new_width ) void TEXTE_MODULE:: SetWidth( int new_width )
{ {
m_Width = new_width; m_Thickness = new_width;
} }
...@@ -258,8 +258,8 @@ EDA_Rect TEXTE_MODULE::GetTextRect( void ) ...@@ -258,8 +258,8 @@ EDA_Rect TEXTE_MODULE::GetTextRect( void )
dx = ( m_Size.x * GetLength() ) / 2; dx = ( m_Size.x * GetLength() ) / 2;
dx = (dx * 10) / 9; /* letter size = 10/9 */ dx = (dx * 10) / 9; /* letter size = 10/9 */
dx += m_Width / 2; dx += m_Thickness / 2;
dy = ( m_Size.y + m_Width ) / 2; dy = ( m_Size.y + m_Thickness ) / 2;
wxPoint Org = m_Pos; // This is the position of the center of the area wxPoint Org = m_Pos; // This is the position of the center of the area
Org.x -= dx; Org.x -= dx;
...@@ -355,7 +355,7 @@ void TEXTE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, ...@@ -355,7 +355,7 @@ void TEXTE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode,
size = m_Size; size = m_Size;
orient = GetDrawRotation(); orient = GetDrawRotation();
width = m_Width; width = m_Thickness;
if( ( frame->m_DisplayModText == FILAIRE ) if( ( frame->m_DisplayModText == FILAIRE )
...@@ -509,8 +509,8 @@ void TEXTE_MODULE::DisplayInfo( WinEDA_DrawFrame* frame ) ...@@ -509,8 +509,8 @@ void TEXTE_MODULE::DisplayInfo( WinEDA_DrawFrame* frame )
msg.Printf( wxT( "%.1f" ), (float) m_Orient / 10 ); msg.Printf( wxT( "%.1f" ), (float) m_Orient / 10 );
frame->AppendMsgPanel( _( "Orient" ), msg, DARKGREEN ); frame->AppendMsgPanel( _( "Orient" ), msg, DARKGREEN );
valeur_param( m_Width, msg ); valeur_param( m_Thickness, msg );
frame->AppendMsgPanel( _( "Width" ), msg, DARKGREEN ); frame->AppendMsgPanel( _( "Thickness" ), msg, DARKGREEN );
valeur_param( m_Size.x, msg ); valeur_param( m_Size.x, msg );
frame->AppendMsgPanel( _( "H Size" ), msg, RED ); frame->AppendMsgPanel( _( "H Size" ), msg, RED );
......
/////////////////////////////////////////////////////////////////////////////
// Name: dialog_initpcb.cpp
// Purpose:
// Author: jean-pierre Charras
// Modified by:
// Created: 15/02/2006 21:42:41
// RCS-ID:
// Copyright: License GNU
// Licence:
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 15/02/2006 21:42:41
////@begin includes
////@end includes
#include "dialog_initpcb.h"
////@begin XPM images
////@end XPM images
/*!
* WinEDA_PcbGlobalDeleteFrame type definition
*/
IMPLEMENT_DYNAMIC_CLASS( WinEDA_PcbGlobalDeleteFrame, wxDialog )
/*!
* WinEDA_PcbGlobalDeleteFrame event table definition
*/
BEGIN_EVENT_TABLE( WinEDA_PcbGlobalDeleteFrame, wxDialog )
////@begin WinEDA_PcbGlobalDeleteFrame event table entries
EVT_BUTTON( wxID_OK, WinEDA_PcbGlobalDeleteFrame::OnOkClick )
EVT_BUTTON( wxID_CANCEL, WinEDA_PcbGlobalDeleteFrame::OnCancelClick )
////@end WinEDA_PcbGlobalDeleteFrame event table entries
END_EVENT_TABLE()
/*!
* WinEDA_PcbGlobalDeleteFrame constructors
*/
WinEDA_PcbGlobalDeleteFrame::WinEDA_PcbGlobalDeleteFrame( )
{
}
WinEDA_PcbGlobalDeleteFrame::WinEDA_PcbGlobalDeleteFrame( WinEDA_PcbFrame* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{
m_Parent = parent;
Create(parent, id, caption, pos, size, style);
}
/*!
* WinEDA_PcbGlobalDeleteFrame creator
*/
bool WinEDA_PcbGlobalDeleteFrame::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{
////@begin WinEDA_PcbGlobalDeleteFrame member initialisation
m_DelZones = NULL;
m_DelTexts = NULL;
m_DelEdges = NULL;
m_DelDrawings = NULL;
m_DelModules = NULL;
m_DelTracks = NULL;
m_DelMarkers = NULL;
m_DelAlls = NULL;
m_TrackFilterAR = NULL;
m_TrackFilterLocked = NULL;
////@end WinEDA_PcbGlobalDeleteFrame member initialisation
////@begin WinEDA_PcbGlobalDeleteFrame creation
SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS);
wxDialog::Create( parent, id, caption, pos, size, style );
CreateControls();
GetSizer()->Fit(this);
GetSizer()->SetSizeHints(this);
Centre();
////@end WinEDA_PcbGlobalDeleteFrame creation
return true;
}
/*!
* Control creation for WinEDA_PcbGlobalDeleteFrame
*/
void WinEDA_PcbGlobalDeleteFrame::CreateControls()
{
////@begin WinEDA_PcbGlobalDeleteFrame content construction
// Generated by DialogBlocks, 15/02/2006 22:10:20 (unregistered)
WinEDA_PcbGlobalDeleteFrame* itemDialog1 = this;
wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
itemDialog1->SetSizer(itemBoxSizer2);
wxStaticBox* itemStaticBoxSizer3Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Items to delete"));
wxStaticBoxSizer* itemStaticBoxSizer3 = new wxStaticBoxSizer(itemStaticBoxSizer3Static, wxVERTICAL);
itemBoxSizer2->Add(itemStaticBoxSizer3, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_DelZones = new wxCheckBox( itemDialog1, ID_CHECKBOX, _("Delete Zones"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
m_DelZones->SetValue(false);
itemStaticBoxSizer3->Add(m_DelZones, 0, wxALIGN_LEFT|wxALL, 5);
m_DelTexts = new wxCheckBox( itemDialog1, ID_CHECKBOX1, _("Delete Texts"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
m_DelTexts->SetValue(false);
itemStaticBoxSizer3->Add(m_DelTexts, 0, wxALIGN_LEFT|wxALL, 5);
m_DelEdges = new wxCheckBox( itemDialog1, ID_CHECKBOX2, _("Delete Edges"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
m_DelEdges->SetValue(false);
itemStaticBoxSizer3->Add(m_DelEdges, 0, wxALIGN_LEFT|wxALL, 5);
m_DelDrawings = new wxCheckBox( itemDialog1, ID_CHECKBOX3, _("Delete Drawings"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
m_DelDrawings->SetValue(false);
itemStaticBoxSizer3->Add(m_DelDrawings, 0, wxALIGN_LEFT|wxALL, 5);
m_DelModules = new wxCheckBox( itemDialog1, ID_CHECKBOX4, _("Delete Modules"), wxDefaultPosition, wxDefaultSize, 0 );
m_DelModules->SetValue(false);
itemStaticBoxSizer3->Add(m_DelModules, 0, wxALIGN_LEFT|wxALL, 5);
m_DelTracks = new wxCheckBox( itemDialog1, ID_CHECKBOX5, _("Delete Tracks"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
m_DelTracks->SetValue(false);
itemStaticBoxSizer3->Add(m_DelTracks, 0, wxALIGN_LEFT|wxALL, 5);
m_DelMarkers = new wxCheckBox( itemDialog1, ID_CHECKBOX6, _("Delete Markers"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
m_DelMarkers->SetValue(false);
itemStaticBoxSizer3->Add(m_DelMarkers, 0, wxALIGN_LEFT|wxALL, 5);
m_DelAlls = new wxCheckBox( itemDialog1, ID_CHECKBOX7, _("Clear Board"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
m_DelAlls->SetValue(false);
itemStaticBoxSizer3->Add(m_DelAlls, 0, wxALIGN_LEFT|wxALL, 5);
wxBoxSizer* itemBoxSizer12 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer2->Add(itemBoxSizer12, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticBox* itemStaticBoxSizer13Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Track Filter"));
wxStaticBoxSizer* itemStaticBoxSizer13 = new wxStaticBoxSizer(itemStaticBoxSizer13Static, wxVERTICAL);
itemBoxSizer12->Add(itemStaticBoxSizer13, 0, wxGROW|wxALL, 5);
m_TrackFilterAR = new wxCheckBox( itemDialog1, ID_CHECKBOX8, _("Include AutoRouted Tracks"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
m_TrackFilterAR->SetValue(false);
itemStaticBoxSizer13->Add(m_TrackFilterAR, 0, wxALIGN_LEFT|wxALL, 5);
m_TrackFilterLocked = new wxCheckBox( itemDialog1, ID_CHECKBOX9, _("Include Locked Tracks"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
m_TrackFilterLocked->SetValue(false);
itemStaticBoxSizer13->Add(m_TrackFilterLocked, 0, wxALIGN_LEFT|wxALL, 5);
itemBoxSizer12->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxBoxSizer* itemBoxSizer17 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer12->Add(itemBoxSizer17, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxButton* itemButton18 = new wxButton( itemDialog1, wxID_OK, _("&OK"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer17->Add(itemButton18, 0, wxGROW|wxALL, 5);
wxButton* itemButton19 = new wxButton( itemDialog1, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer17->Add(itemButton19, 0, wxGROW|wxALL, 5);
////@end WinEDA_PcbGlobalDeleteFrame content construction
}
/*!
* Should we show tooltips?
*/
bool WinEDA_PcbGlobalDeleteFrame::ShowToolTips()
{
return true;
}
/*!
* Get bitmap resources
*/
wxBitmap WinEDA_PcbGlobalDeleteFrame::GetBitmapResource( const wxString& name )
{
// Bitmap retrieval
////@begin WinEDA_PcbGlobalDeleteFrame bitmap retrieval
wxUnusedVar(name);
return wxNullBitmap;
////@end WinEDA_PcbGlobalDeleteFrame bitmap retrieval
}
/*!
* Get icon resources
*/
wxIcon WinEDA_PcbGlobalDeleteFrame::GetIconResource( const wxString& name )
{
// Icon retrieval
////@begin WinEDA_PcbGlobalDeleteFrame icon retrieval
wxUnusedVar(name);
return wxNullIcon;
////@end WinEDA_PcbGlobalDeleteFrame icon retrieval
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK
*/
void WinEDA_PcbGlobalDeleteFrame::OnOkClick( wxCommandEvent& event )
{
AcceptPcbDelete(event);
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL
*/
void WinEDA_PcbGlobalDeleteFrame::OnCancelClick( wxCommandEvent& event )
{
////@begin wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL in WinEDA_PcbGlobalDeleteFrame.
// Before editing this code, remove the block markers.
event.Skip();
////@end wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL in WinEDA_PcbGlobalDeleteFrame.
}
/////////////////////////////////////////////////////////////////////////////
// Name: dialog_initpcb.h
// Purpose:
// Author: jean-pierre Charras
// Modified by:
// Created: 15/02/2006 21:42:41
// RCS-ID:
// Copyright: License GNU
// Licence:
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 15/02/2006 21:42:41
#ifndef _DIALOG_INITPCB_H_
#define _DIALOG_INITPCB_H_
/*!
* Includes
*/
////@begin includes
////@end includes
/*!
* Forward declarations
*/
////@begin forward declarations
////@end forward declarations
/*!
* Control identifiers
*/
////@begin control identifiers
#define ID_DIALOG 10000
#define SYMBOL_WINEDA_PCBGLOBALDELETEFRAME_STYLE wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX|MAYBE_RESIZE_BORDER
#define SYMBOL_WINEDA_PCBGLOBALDELETEFRAME_TITLE _("Global Delete")
#define SYMBOL_WINEDA_PCBGLOBALDELETEFRAME_IDNAME ID_DIALOG
#define SYMBOL_WINEDA_PCBGLOBALDELETEFRAME_SIZE wxSize(400, 300)
#define SYMBOL_WINEDA_PCBGLOBALDELETEFRAME_POSITION wxDefaultPosition
#define ID_CHECKBOX 10001
#define ID_CHECKBOX1 10002
#define ID_CHECKBOX2 10003
#define ID_CHECKBOX3 10004
#define ID_CHECKBOX4 10005
#define ID_CHECKBOX5 10006
#define ID_CHECKBOX6 10007
#define ID_CHECKBOX7 10008
#define ID_CHECKBOX8 10009
#define ID_CHECKBOX9 10010
////@end control identifiers
/*!
* Compatibility
*/
#ifndef wxCLOSE_BOX
#define wxCLOSE_BOX 0x1000
#endif
/*!
* WinEDA_PcbGlobalDeleteFrame class declaration
*/
class WinEDA_PcbGlobalDeleteFrame: public wxDialog
{
DECLARE_DYNAMIC_CLASS( WinEDA_PcbGlobalDeleteFrame )
DECLARE_EVENT_TABLE()
public:
/// Constructors
WinEDA_PcbGlobalDeleteFrame( );
WinEDA_PcbGlobalDeleteFrame( WinEDA_PcbFrame* parent, wxWindowID id = SYMBOL_WINEDA_PCBGLOBALDELETEFRAME_IDNAME, const wxString& caption = SYMBOL_WINEDA_PCBGLOBALDELETEFRAME_TITLE, const wxPoint& pos = SYMBOL_WINEDA_PCBGLOBALDELETEFRAME_POSITION, const wxSize& size = SYMBOL_WINEDA_PCBGLOBALDELETEFRAME_SIZE, long style = SYMBOL_WINEDA_PCBGLOBALDELETEFRAME_STYLE );
/// Creation
bool Create( wxWindow* parent, wxWindowID id = SYMBOL_WINEDA_PCBGLOBALDELETEFRAME_IDNAME, const wxString& caption = SYMBOL_WINEDA_PCBGLOBALDELETEFRAME_TITLE, const wxPoint& pos = SYMBOL_WINEDA_PCBGLOBALDELETEFRAME_POSITION, const wxSize& size = SYMBOL_WINEDA_PCBGLOBALDELETEFRAME_SIZE, long style = SYMBOL_WINEDA_PCBGLOBALDELETEFRAME_STYLE );
/// Creates the controls and sizers
void CreateControls();
////@begin WinEDA_PcbGlobalDeleteFrame event handler declarations
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK
void OnOkClick( wxCommandEvent& event );
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL
void OnCancelClick( wxCommandEvent& event );
////@end WinEDA_PcbGlobalDeleteFrame event handler declarations
////@begin WinEDA_PcbGlobalDeleteFrame member function declarations
/// Retrieves bitmap resources
wxBitmap GetBitmapResource( const wxString& name );
/// Retrieves icon resources
wxIcon GetIconResource( const wxString& name );
////@end WinEDA_PcbGlobalDeleteFrame member function declarations
/// Should we show tooltips?
static bool ShowToolTips();
void AcceptPcbDelete(wxCommandEvent& event);
////@begin WinEDA_PcbGlobalDeleteFrame member variables
wxCheckBox* m_DelZones;
wxCheckBox* m_DelTexts;
wxCheckBox* m_DelEdges;
wxCheckBox* m_DelDrawings;
wxCheckBox* m_DelModules;
wxCheckBox* m_DelTracks;
wxCheckBox* m_DelMarkers;
wxCheckBox* m_DelAlls;
wxCheckBox* m_TrackFilterAR;
wxCheckBox* m_TrackFilterLocked;
////@end WinEDA_PcbGlobalDeleteFrame member variables
WinEDA_PcbFrame * m_Parent;
};
#endif
// _DIALOG_INITPCB_H_
<?xml version="1.0" encoding="windows-1252"?>
<anthemion-project version="1.0.0.0" xmlns="http://www.anthemion.co.uk">
<header>
<long name="name_counter">0</long>
<string name="html_path">""</string>
<string name="title">""</string>
<string name="author">""</string>
<string name="description">""</string>
<long name="doc_count">26</long>
<string name="xrc_filename">""</string>
<bool name="convert_images_to_xpm">0</bool>
<bool name="inline_images">0</bool>
<bool name="generate_cpp_for_xrc">0</bool>
<bool name="use_help_text_for_tooltips">1</bool>
<bool name="translate_strings">1</bool>
<bool name="extract_strings">0</bool>
<string name="user_name">"jean-pierre Charras"</string>
<string name="copyright_string">"License GNU"</string>
<string name="resource_prefix">""</string>
<bool name="use_two_step_construction">0</bool>
<string name="current_platform">"&lt;All platforms&gt;"</string>
<string name="target_wx_version">"&lt;Any&gt;"</string>
<string name="cpp_header_comment">"/////////////////////////////////////////////////////////////////////////////
// Name: %HEADER-FILENAME%
// Purpose:
// Author: %AUTHOR%
// Modified by:
// Created: %DATE%
// RCS-ID:
// Copyright: %COPYRIGHT%
// Licence:
/////////////////////////////////////////////////////////////////////////////
"</string>
<string name="cpp_implementation_comment">"/////////////////////////////////////////////////////////////////////////////
// Name: %SOURCE-FILENAME%
// Purpose:
// Author: %AUTHOR%
// Modified by:
// Created: %DATE%
// RCS-ID:
// Copyright: %COPYRIGHT%
// Licence:
/////////////////////////////////////////////////////////////////////////////
"</string>
<string name="cpp_function_comment">"
/*!
* %BODY%
*/
"</string>
<string name="cpp_symbols_file_comment">"/////////////////////////////////////////////////////////////////////////////
// Name: %SYMBOLS-FILENAME%
// Purpose: Symbols file
// Author: %AUTHOR%
// Modified by:
// Created: %DATE%
// RCS-ID:
// Copyright: %COPYRIGHT%
// Licence:
/////////////////////////////////////////////////////////////////////////////
"</string>
<string name="cpp_header_preamble">"#if defined(__GNUG__) &amp;&amp; !defined(NO_GCC_PRAGMA)
#pragma interface &quot;%HEADER-FILENAME%&quot;
#endif
"</string>
<string name="cpp_implementation_preamble">"#if defined(__GNUG__) &amp;&amp; !defined(NO_GCC_PRAGMA)
#pragma implementation &quot;%HEADER-FILENAME%&quot;
#endif
// For compilers that support precompilation, includes &quot;wx/wx.h&quot;.
#include &quot;wx/wxprec.h&quot;
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include &quot;wx/wx.h&quot;
#endif
"</string>
<string name="resource_file_header">"app_resources.h"</string>
<string name="resource_file_implementation">"app_resources.cpp"</string>
<string name="resource_class_name">"AppResources"</string>
<string name="app_file_header">"app.h"</string>
<string name="app_file_implementation">"app.cpp"</string>
<string name="app_class_name">"Application"</string>
<bool name="generate_app_class">0</bool>
<string name="external_symbol_filenames">""</string>
<string name="configuration">"&lt;None&gt;"</string>
<string name="source_encoding">"&lt;System&gt;"</string>
<string name="project_encoding">"&lt;System&gt;"</string>
<string name="resource_archive">""</string>
<bool name="use_resource_archive">0</bool>
<bool name="archive_xrc_files">1</bool>
<bool name="archive_image_files">1</bool>
</header>
<data>
<document>
<string name="title">""</string>
<string name="type">"data-document"</string>
<string name="filename">""</string>
<string name="icon-name">""</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<document>
<string name="title">"Configurations"</string>
<string name="type">"config-data-document"</string>
<string name="filename">""</string>
<string name="icon-name">""</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="template-name">""</string>
<bool name="dirty">1</bool>
</document>
</document>
</data>
<documents>
<document>
<string name="title">"Projects"</string>
<string name="type">"root-document"</string>
<string name="filename">""</string>
<string name="icon-name">"project"</string>
<long name="is-transient">1</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<document>
<string name="title">"Windows"</string>
<string name="type">"html-document"</string>
<string name="filename">""</string>
<string name="icon-name">"dialogsfolder"</string>
<long name="is-transient">1</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">1</long>
<document>
<string name="title">"Global Delete"</string>
<string name="type">"dialog-document"</string>
<string name="filename">""</string>
<string name="icon-name">"dialog"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbDialogProxy"</string>
<long name="base-id">10000</long>
<bool name="use-id-prefix">0</bool>
<string name="id-prefix">""</string>
<long name="use-xrc">0</long>
<string name="proxy-Id name">"ID_DIALOG"</string>
<long name="proxy-Id value">10000</long>
<string name="proxy-Class">"WinEDA_PcbGlobalDeleteFrame"</string>
<string name="proxy-Base class">"wxDialog"</string>
<string name="proxy-Window kind">"wxDialog"</string>
<string name="proxy-Implementation filename">"dialog_initpcb.cpp"</string>
<string name="proxy-Header filename">"dialog_initpcb.h"</string>
<string name="proxy-XRC filename">""</string>
<string name="proxy-Title">"Global Delete"</string>
<bool name="proxy-Centre">1</bool>
<string name="proxy-Icon">""</string>
<bool name="proxy-Dialog units">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxDEFAULT_DIALOG_STYLE">0</bool>
<bool name="proxy-wxCAPTION">1</bool>
<bool name="proxy-wxRESIZE_BORDER">0</bool>
<bool name="proxy-wxTHICK_FRAME">0</bool>
<bool name="proxy-wxSYSTEM_MENU">1</bool>
<bool name="proxy-wxSTAY_ON_TOP">0</bool>
<bool name="proxy-wxDIALOG_NO_PARENT">0</bool>
<bool name="proxy-wxCLOSE_BOX">1</bool>
<bool name="proxy-wxMAXIMIZE_BOX">0</bool>
<bool name="proxy-wxMINIMIZE_BOX">0</bool>
<bool name="proxy-wxDIALOG_MODAL">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxSIMPLE_BORDER">0</bool>
<bool name="proxy-wxDOUBLE_BORDER">0</bool>
<bool name="proxy-wxSUNKEN_BORDER">0</bool>
<bool name="proxy-wxRAISED_BORDER">0</bool>
<bool name="proxy-wxSTATIC_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxCLIP_CHILDREN ">0</bool>
<bool name="proxy-wxTAB_TRAVERSAL">0</bool>
<bool name="proxy-wxWS_EX_VALIDATE_RECURSIVELY">0</bool>
<bool name="proxy-wxWS_EX_BLOCK_EVENTS">1</bool>
<bool name="proxy-wxWS_EX_TRANSIENT">0</bool>
<string name="proxy-Custom styles">"MAYBE_RESIZE_BORDER"</string>
<bool name="proxy-wxDIALOG_EX_CONTEXTHELP">0</bool>
<bool name="proxy-Fit to content">1</bool>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">400</long>
<long name="proxy-Height">300</long>
<string name="proxy-Event sources">""</string>
<document>
<string name="title">"wxBoxSizer H"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sizer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbBoxSizerProxy"</string>
<string name="proxy-Orientation">"Horizontal"</string>
<string name="proxy-Member variable name">""</string>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document>
<string name="title">"wxStaticBoxSizer V"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sizer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbStaticBoxSizerProxy"</string>
<string name="proxy-Id name">"wxID_ANY"</string>
<long name="proxy-Id value">-1</long>
<string name="proxy-Label">"Items to delete"</string>
<string name="proxy-Sizer member variable name">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Orientation">"Vertical"</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX"</string>
<long name="proxy-Id value">10001</long>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Member variable name">"m_DelZones"</string>
<string name="proxy-Label">"Delete Zones"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">1</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Left"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX1"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX1"</string>
<long name="proxy-Id value">10002</long>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Member variable name">"m_DelTexts"</string>
<string name="proxy-Label">"Delete Texts"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">1</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Left"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX2"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX2"</string>
<long name="proxy-Id value">10003</long>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Member variable name">"m_DelEdges"</string>
<string name="proxy-Label">"Delete Edges"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">1</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Left"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX3"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX3"</string>
<long name="proxy-Id value">10004</long>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Member variable name">"m_DelDrawings"</string>
<string name="proxy-Label">"Delete Drawings"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">1</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Left"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX4"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX4"</string>
<long name="proxy-Id value">10005</long>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Member variable name">"m_DelModules"</string>
<string name="proxy-Label">"Delete Modules"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">0</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Left"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX5"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX5"</string>
<long name="proxy-Id value">10006</long>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Member variable name">"m_DelTracks"</string>
<string name="proxy-Label">"Delete Tracks"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">1</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Left"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX6"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX6"</string>
<long name="proxy-Id value">10007</long>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Member variable name">"m_DelMarkers"</string>
<string name="proxy-Label">"Delete Markers"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">1</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Left"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX7"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX7"</string>
<long name="proxy-Id value">10008</long>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Member variable name">"m_DelAlls"</string>
<string name="proxy-Label">"Clear Board"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">1</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Left"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
</document>
<document>
<string name="title">"wxBoxSizer V"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sizer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbBoxSizerProxy"</string>
<string name="proxy-Orientation">"Vertical"</string>
<string name="proxy-Member variable name">""</string>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document>
<string name="title">"wxStaticBoxSizer V"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sizer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbStaticBoxSizerProxy"</string>
<string name="proxy-Id name">"wxID_ANY"</string>
<long name="proxy-Id value">-1</long>
<string name="proxy-Label">"Track Filter"</string>
<string name="proxy-Sizer member variable name">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Orientation">"Vertical"</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX8"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX8"</string>
<long name="proxy-Id value">10009</long>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Member variable name">"m_TrackFilterAR"</string>
<string name="proxy-Label">"Include AutoRouted Tracks"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">1</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Left"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX9"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX9"</string>
<long name="proxy-Id value">10010</long>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Member variable name">"m_TrackFilterLocked"</string>
<string name="proxy-Label">"Include Locked Tracks"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">1</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Left"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
</document>
<document>
<string name="title">"Spacer"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"spacer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbSpacerProxy"</string>
<long name="proxy-Width">5</long>
<long name="proxy-Height">5</long>
<string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
</document>
<document>
<string name="title">"wxBoxSizer V"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sizer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbBoxSizerProxy"</string>
<string name="proxy-Orientation">"Vertical"</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document>
<string name="title">"wxButton: wxID_OK"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"dialogcontrol"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbButtonProxy"</string>
<string name="event-handler-0">"wxEVT_COMMAND_BUTTON_CLICKED|OnOkClick"</string>
<string name="proxy-Id name">"wxID_OK"</string>
<long name="proxy-Id value">5100</long>
<string name="proxy-Class">"wxButton"</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-Label">"&amp;OK"</string>
<bool name="proxy-Default">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxBU_LEFT">0</bool>
<bool name="proxy-wxBU_RIGHT">0</bool>
<bool name="proxy-wxBU_TOP">0</bool>
<bool name="proxy-wxBU_BOTTOM">0</bool>
<bool name="proxy-wxBU_EXACTFIT">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Expand"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxButton: wxID_CANCEL"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"dialogcontrol"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="proxy-type">"wbButtonProxy"</string>
<string name="event-handler-0">"wxEVT_COMMAND_BUTTON_CLICKED|OnCancelClick"</string>
<string name="proxy-Id name">"wxID_CANCEL"</string>
<long name="proxy-Id value">5101</long>
<string name="proxy-Class">"wxButton"</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-Label">"&amp;Cancel"</string>
<bool name="proxy-Default">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxBU_LEFT">0</bool>
<bool name="proxy-wxBU_RIGHT">0</bool>
<bool name="proxy-wxBU_TOP">0</bool>
<bool name="proxy-wxBU_BOTTOM">0</bool>
<bool name="proxy-wxBU_EXACTFIT">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Expand"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
</document>
</document>
</document>
</document>
</document>
<document>
<string name="title">"Sources"</string>
<string name="type">"html-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sourcesfolder"</string>
<long name="is-transient">1</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">1</long>
<document>
<string name="title">"dialog_initpcb.rc"</string>
<string name="type">"source-editor-document"</string>
<string name="filename">"dialog_initpcb.rc"</string>
<string name="icon-name">"source-editor"</string>
<long name="is-transient">0</long>
<long name="owns-file">0</long>
<long name="title-mode">1</long>
<long name="locked">0</long>
<string name="created">"15/2/2006"</string>
<string name="language">""</string>
</document>
</document>
<document>
<string name="title">"Images"</string>
<string name="type">"html-document"</string>
<string name="filename">""</string>
<string name="icon-name">"bitmapsfolder"</string>
<long name="is-transient">1</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">1</long>
</document>
</document>
</documents>
</anthemion-project>
#include "wx/msw/wx.rc"
/////////////////////////////////////////////////////////////////////////////
// Name: dialog_orient_footprints.cpp
// Purpose:
// Author: j-p Charras
// Modified by:
// Created: 11/07/2008 13:32:12
// RCS-ID:
// Copyright: j-p Charras
// Licence: GPL
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 11/07/2008 13:32:12
////@begin includes
////@end includes
#include "fctsys.h"
#include "class_drawpanel.h"
#include "confirm.h"
#include "kicad_string.h"
#include "pcbnew.h"
#include "wxPcbStruct.h"
#include "dialog_orient_footprints.h"
////@begin XPM images
////@end XPM images
int s_NewOrientation = 0;
/*!
* dialog_orient_footprints type definition
*/
IMPLEMENT_DYNAMIC_CLASS( dialog_orient_footprints, wxDialog )
/*!
* dialog_orient_footprints event table definition
*/
BEGIN_EVENT_TABLE( dialog_orient_footprints, wxDialog )
////@begin dialog_orient_footprints event table entries
EVT_CLOSE( dialog_orient_footprints::OnCloseWindow )
EVT_BUTTON( wxID_OK, dialog_orient_footprints::OnOkClick )
EVT_BUTTON( wxID_CANCEL, dialog_orient_footprints::OnCancelClick )
////@end dialog_orient_footprints event table entries
END_EVENT_TABLE()
/*!
* dialog_orient_footprints constructors
*/
dialog_orient_footprints::dialog_orient_footprints()
{
Init();
}
dialog_orient_footprints::dialog_orient_footprints( WinEDA_PcbFrame* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{
m_Parent = parent;
Init();
Create(parent, id, caption, pos, size, style);
}
/*!
* dialog_orient_footprints creator
*/
bool dialog_orient_footprints::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{
////@begin dialog_orient_footprints creation
SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
wxDialog::Create( parent, id, caption, pos, size, style );
CreateControls();
if (GetSizer())
{
GetSizer()->SetSizeHints(this);
}
Centre();
////@end dialog_orient_footprints creation
return true;
}
/*!
* dialog_orient_footprints destructor
*/
dialog_orient_footprints::~dialog_orient_footprints()
{
////@begin dialog_orient_footprints destruction
////@end dialog_orient_footprints destruction
}
/*!
* Member initialisation
*/
void dialog_orient_footprints::Init()
{
////@begin dialog_orient_footprints member initialisation
m_OrientationCtrl = NULL;
m_FilterPattern = NULL;
m_ApplyToLocked = NULL;
m_CloseButton = NULL;
////@end dialog_orient_footprints member initialisation
}
/*!
* Control creation for dialog_orient_footprints
*/
void dialog_orient_footprints::CreateControls()
{
////@begin dialog_orient_footprints content construction
// Generated by DialogBlocks, 11/07/2008 16:49:18 (unregistered)
dialog_orient_footprints* itemDialog1 = this;
wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
itemDialog1->SetSizer(itemBoxSizer2);
wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer2->Add(itemBoxSizer3, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticText* itemStaticText4 = new wxStaticText( itemDialog1, wxID_STATIC, _("Orientation:"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer3->Add(itemStaticText4, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
m_OrientationCtrl = new wxTextCtrl( itemDialog1, ID_TEXTCTRLROT_VALUE, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
if (dialog_orient_footprints::ShowToolTips())
m_OrientationCtrl->SetToolTip(_("New orientation (0.1 degree resolution)"));
itemBoxSizer3->Add(m_OrientationCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
wxStaticText* itemStaticText6 = new wxStaticText( itemDialog1, wxID_STATIC, _("Filter:"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer3->Add(itemStaticText6, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
m_FilterPattern = new wxTextCtrl( itemDialog1, ID_TEXTCTRL_FOOTPRINTS_FILTER, _("*"), wxDefaultPosition, wxDefaultSize, 0 );
if (dialog_orient_footprints::ShowToolTips())
m_FilterPattern->SetToolTip(_("Filter to select footprints by reference"));
itemBoxSizer3->Add(m_FilterPattern, 1, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
itemBoxSizer3->Add(5, 5, 0, wxGROW|wxALL, 5);
m_ApplyToLocked = new wxCheckBox( itemDialog1, ID_CHECKBOX_APPLY_TO_LOCKED, _("Include Locked Footprints"), wxDefaultPosition, wxDefaultSize, 0 );
m_ApplyToLocked->SetValue(false);
if (dialog_orient_footprints::ShowToolTips())
m_ApplyToLocked->SetToolTip(_("Force locked footprints to be modified"));
itemBoxSizer3->Add(m_ApplyToLocked, 0, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer10 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer2->Add(itemBoxSizer10, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxButton* itemButton11 = new wxButton( itemDialog1, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer10->Add(itemButton11, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
m_CloseButton = new wxButton( itemDialog1, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
m_CloseButton->SetDefault();
itemBoxSizer10->Add(m_CloseButton, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
////@end dialog_orient_footprints content construction
wxString txt;
txt.Printf(wxT("%g"), (double) s_NewOrientation/10);
m_OrientationCtrl->SetValue(txt);
m_CloseButton->SetFocus( );
}
/*!
* Should we show tooltips?
*/
bool dialog_orient_footprints::ShowToolTips()
{
return true;
}
/*!
* Get bitmap resources
*/
wxBitmap dialog_orient_footprints::GetBitmapResource( const wxString& name )
{
// Bitmap retrieval
////@begin dialog_orient_footprints bitmap retrieval
wxUnusedVar(name);
return wxNullBitmap;
////@end dialog_orient_footprints bitmap retrieval
}
/*!
* Get icon resources
*/
wxIcon dialog_orient_footprints::GetIconResource( const wxString& name )
{
// Icon retrieval
////@begin dialog_orient_footprints icon retrieval
wxUnusedVar(name);
return wxNullIcon;
////@end dialog_orient_footprints icon retrieval
}
/***********************************************/
void WinEDA_PcbFrame::OnOrientFootprints( void )
/***********************************************/
/**
* Function OnOrientFootprints
* install the dialog box for the comman Orient Footprints
*/
{
dialog_orient_footprints dialogbox(this);
dialogbox.ShowModal();
dialogbox.Destroy();
}
/*******************************************************************/
void WinEDA_PcbFrame::ReOrientModules( const wxString& ModuleMask,
int Orient, bool include_fixe )
/*******************************************************************/
/**
* Function ReOrientModules
* Set the orientation of footprints
* @param ModuleMask = mask (wildcard allowed) selection
* @param Orient = new orientation
* @param include_fixe = true to orient locked footprints
*/
{
wxString line;
bool redraw = false;
line.Printf( _( "Ok to set footprints orientation to %g degrees ?" ), (double)Orient / 10 );
if( !IsOK( this, line ) )
return;
for( MODULE* module = GetBoard()->m_Modules; module; module = module->Next() )
{
if( module->IsLocked() && !include_fixe )
continue;
if( WildCompareString( ModuleMask, module->m_Reference->m_Text, FALSE ) )
{
OnModify();
redraw = true;
Rotate_Module( NULL, module, Orient, FALSE );
}
}
if ( redraw )
DrawPanel->Refresh();
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK
*/
void dialog_orient_footprints::OnOkClick( wxCommandEvent& event )
{
double d_orient;
wxString text = m_OrientationCtrl->GetValue();
if ( ! text.ToDouble(&d_orient) )
{
DisplayError(this, _("Bad value for footprints orientation"));
return;
}
s_NewOrientation = wxRound(d_orient * 10);
if ( s_NewOrientation > 3600 )
s_NewOrientation = 3600;
if ( s_NewOrientation < -3600 )
s_NewOrientation = -3600;
text = m_FilterPattern->GetValue();
m_Parent->ReOrientModules( text, s_NewOrientation, m_ApplyToLocked->IsChecked() );
Close();
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL
*/
void dialog_orient_footprints::OnCancelClick( wxCommandEvent& event )
{
Close();
}
/*!
* wxEVT_CLOSE_WINDOW event handler for ID_DIALOG_ORIENT_FOOTPRINTS
*/
void dialog_orient_footprints::OnCloseWindow( wxCloseEvent& event )
{
EndModal(1);
}
/////////////////////////////////////////////////////////////////////////////
// Name: dialog_orient_footprints.h
// Purpose:
// Author:
// Modified by:
// Created: 11/07/2008 13:32:12
// RCS-ID:
// Copyright:
// Licence:
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 11/07/2008 13:32:12
#ifndef _DIALOG_ORIENT_FOOTPRINTS_H_
#define _DIALOG_ORIENT_FOOTPRINTS_H_
/*!
* Includes
*/
////@begin includes
////@end includes
/*!
* Forward declarations
*/
////@begin forward declarations
////@end forward declarations
/*!
* Control identifiers
*/
////@begin control identifiers
#define ID_DIALOG_ORIENT_FOOTPRINTS 10000
#define ID_TEXTCTRLROT_VALUE 10003
#define ID_TEXTCTRL_FOOTPRINTS_FILTER 10001
#define ID_CHECKBOX_APPLY_TO_LOCKED 10002
#define SYMBOL_DIALOG_ORIENT_FOOTPRINTS_STYLE wxDEFAULT_DIALOG_STYLE
#define SYMBOL_DIALOG_ORIENT_FOOTPRINTS_TITLE _("Footprints Orientation")
#define SYMBOL_DIALOG_ORIENT_FOOTPRINTS_IDNAME ID_DIALOG_ORIENT_FOOTPRINTS
#define SYMBOL_DIALOG_ORIENT_FOOTPRINTS_SIZE wxSize(400, 300)
#define SYMBOL_DIALOG_ORIENT_FOOTPRINTS_POSITION wxDefaultPosition
////@end control identifiers
/*!
* dialog_orient_footprints class declaration
*/
class dialog_orient_footprints: public wxDialog
{
DECLARE_DYNAMIC_CLASS( dialog_orient_footprints )
DECLARE_EVENT_TABLE()
public:
/// Constructors
dialog_orient_footprints();
dialog_orient_footprints( WinEDA_PcbFrame* parent,
wxWindowID id = SYMBOL_DIALOG_ORIENT_FOOTPRINTS_IDNAME,
const wxString& caption = SYMBOL_DIALOG_ORIENT_FOOTPRINTS_TITLE,
const wxPoint& pos = SYMBOL_DIALOG_ORIENT_FOOTPRINTS_POSITION,
const wxSize& size = SYMBOL_DIALOG_ORIENT_FOOTPRINTS_SIZE,
long style = SYMBOL_DIALOG_ORIENT_FOOTPRINTS_STYLE );
/// Creation
bool Create( wxWindow* parent, wxWindowID id = SYMBOL_DIALOG_ORIENT_FOOTPRINTS_IDNAME, const wxString& caption = SYMBOL_DIALOG_ORIENT_FOOTPRINTS_TITLE, const wxPoint& pos = SYMBOL_DIALOG_ORIENT_FOOTPRINTS_POSITION, const wxSize& size = SYMBOL_DIALOG_ORIENT_FOOTPRINTS_SIZE, long style = SYMBOL_DIALOG_ORIENT_FOOTPRINTS_STYLE );
/// Destructor
~dialog_orient_footprints();
/// Initialises member variables
void Init();
/// Creates the controls and sizers
void CreateControls();
////@begin dialog_orient_footprints event handler declarations
/// wxEVT_CLOSE_WINDOW event handler for ID_DIALOG_ORIENT_FOOTPRINTS
void OnCloseWindow( wxCloseEvent& event );
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK
void OnOkClick( wxCommandEvent& event );
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL
void OnCancelClick( wxCommandEvent& event );
////@end dialog_orient_footprints event handler declarations
////@begin dialog_orient_footprints member function declarations
/// Retrieves bitmap resources
wxBitmap GetBitmapResource( const wxString& name );
/// Retrieves icon resources
wxIcon GetIconResource( const wxString& name );
////@end dialog_orient_footprints member function declarations
/// Should we show tooltips?
static bool ShowToolTips();
////@begin dialog_orient_footprints member variables
wxTextCtrl* m_OrientationCtrl;
wxTextCtrl* m_FilterPattern;
wxCheckBox* m_ApplyToLocked;
wxButton* m_CloseButton;
////@end dialog_orient_footprints member variables
WinEDA_PcbFrame * m_Parent;
};
#endif
// _DIALOG_ORIENT_FOOTPRINTS_H_
<?xml version="1.0" encoding="UTF-8"?>
<anthemion-project version="1.0.0.0" xmlns="http://www.anthemion.co.uk">
<header>
<long name="name_counter">0</long>
<string name="html_path">""</string>
<string name="title">""</string>
<string name="author">""</string>
<string name="description">""</string>
<string name="xrc_filename">""</string>
<bool name="convert_images_to_xpm">0</bool>
<bool name="inline_images">0</bool>
<bool name="generate_cpp_for_xrc">0</bool>
<long name="working_mode">1</long>
<bool name="use_help_text_for_tooltips">1</bool>
<bool name="translate_strings">1</bool>
<bool name="make_unicode_strings">1</bool>
<bool name="extract_strings">0</bool>
<string name="user_name">""</string>
<string name="copyright_string">""</string>
<string name="resource_prefix">""</string>
<bool name="use_two_step_construction">0</bool>
<bool name="use_enums">0</bool>
<string name="current_platform">"&lt;All platforms&gt;"</string>
<string name="target_wx_version">"2.6.4"</string>
<string name="cpp_header_comment">"/////////////////////////////////////////////////////////////////////////////
// Name: %HEADER-FILENAME%
// Purpose:
// Author: %AUTHOR%
// Modified by:
// Created: %DATE%
// RCS-ID:
// Copyright: %COPYRIGHT%
// Licence:
/////////////////////////////////////////////////////////////////////////////
"</string>
<string name="cpp_implementation_comment">"/////////////////////////////////////////////////////////////////////////////
// Name: %SOURCE-FILENAME%
// Purpose:
// Author: %AUTHOR%
// Modified by:
// Created: %DATE%
// RCS-ID:
// Copyright: %COPYRIGHT%
// Licence:
/////////////////////////////////////////////////////////////////////////////
"</string>
<string name="cpp_symbols_file_comment">"/////////////////////////////////////////////////////////////////////////////
// Name: %SYMBOLS-FILENAME%
// Purpose: Symbols file
// Author: %AUTHOR%
// Modified by:
// Created: %DATE%
// RCS-ID:
// Copyright: %COPYRIGHT%
// Licence:
/////////////////////////////////////////////////////////////////////////////
"</string>
<string name="cpp_header_preamble">""</string>
<string name="cpp_implementation_preamble">"// For compilers that support precompilation, includes &quot;wx/wx.h&quot;.
#include &quot;wx/wxprec.h&quot;
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include &quot;wx/wx.h&quot;
#endif
"</string>
<string name="cpp_function_declaration_comment">" /// %BODY%
"</string>
<string name="cpp_function_implementation_comment">"
/*!
* %BODY%
*/
"</string>
<string name="resource_file_header">"app_resources.h"</string>
<string name="resource_file_implementation">"app_resources.cpp"</string>
<string name="resource_class_name">"AppResources"</string>
<string name="app_file_header">"app.h"</string>
<string name="app_file_implementation">"app.cpp"</string>
<string name="app_class_name">"Application"</string>
<bool name="generate_app_class">0</bool>
<string name="external_symbol_filenames">""</string>
<string name="configuration">"&lt;None&gt;"</string>
<string name="source_encoding">"iso-8859-1"</string>
<string name="xrc_encoding">"utf-8"</string>
<string name="project_encoding">"utf-8"</string>
<string name="resource_archive">""</string>
<long name="text_file_type">0</long>
<bool name="use_tabs">0</bool>
<long name="indent_size">4</long>
<string name="whitespace_after_return_type">" "</string>
<string name="resource_xrc_cpp">""</string>
<bool name="use_resource_archive">0</bool>
<bool name="use_generated_xrc_cpp">0</bool>
<bool name="always_generate_xrc">1</bool>
<bool name="use_id_name_for_name">0</bool>
<bool name="archive_xrc_files">1</bool>
<bool name="archive_image_files">1</bool>
<bool name="archive_all_image_files">0</bool>
<bool name="xrc_retain_relative_paths">1</bool>
<bool name="xrc_generate_id_tags">0</bool>
</header>
<data>
<document>
<string name="title">""</string>
<string name="type">"data-document"</string>
<string name="filename">""</string>
<string name="icon-name">""</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<document>
<string name="title">"Configurations"</string>
<string name="type">"config-data-document"</string>
<string name="filename">""</string>
<string name="icon-name">""</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="template-name">""</string>
<bool name="dirty">1</bool>
<long name="makefile-last-written">-8519680</long>
<string name="Compiler name">""</string>
<string name="Build mode">"Debug"</string>
<string name="Unicode mode">"ANSI"</string>
<string name="Shared mode">"Static"</string>
<string name="Modularity">"Modular"</string>
<string name="GUI mode">"GUI"</string>
<string name="Toolkit">"wxMSW"</string>
<string name="Runtime linking">"Dynamic"</string>
<string name="Use exceptions">"Yes"</string>
<string name="Use ODBC">"No"</string>
<string name="Use OpenGL">"No"</string>
<string name="wxWidgets version">"%WXVERSION%"</string>
<string name="Executable name">"%EXECUTABLE%"</string>
<string name="Program arguments">""</string>
<string name="Working path">"%AUTO%"</string>
<string name="Output path">"%AUTO%"</string>
<string name="Objects path">"%AUTO%"</string>
<string name="Compiler location">"%AUTO%"</string>
<string name="wxWidgets location">"%AUTO%"</string>
<string name="C++ command">"%AUTO%"</string>
<string name="Resource compiler">"%AUTO%"</string>
<string name="Make command">"%AUTO%"</string>
<string name="Project makefile">"%AUTO%"</string>
<string name="wxWidgets makefile">"%AUTO%"</string>
<string name="Compiler bin path">"%AUTO%"</string>
<string name="Compiler include path">"%AUTO%"</string>
<string name="Compiler lib path">"%AUTO%"</string>
<string name="Preprocessor flags">"%AUTO%"</string>
<string name="Optimizations">"%AUTO%"</string>
<string name="Warnings">"%AUTO%"</string>
<string name="Debug flags">"%AUTO%"</string>
<string name="Libraries">"%AUTO%"</string>
<string name="Library path">"%AUTO%"</string>
<string name="Linker flags">"%AUTO%"</string>
<string name="Include path">"%AUTO%"</string>
<string name="Resource flags">"%AUTO%"</string>
<string name="Resource path">"%AUTO%"</string>
<string name="wxWidgets build path">"%AUTO%"</string>
<string name="wxWidgets build command">"%AUTO%"</string>
<string name="wxWidgets clean command">"%AUTO%"</string>
<string name="PATH variable">"%AUTO%"</string>
<bool name="Suppress source rules">0</bool>
<bool name="Enable makefile generation">1</bool>
</document>
</document>
</data>
<documents>
<document>
<string name="title">"Projects"</string>
<string name="type">"root-document"</string>
<string name="filename">""</string>
<string name="icon-name">"project"</string>
<long name="is-transient">1</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">1</long>
<document>
<string name="title">"Windows"</string>
<string name="type">"html-document"</string>
<string name="filename">""</string>
<string name="icon-name">"dialogsfolder"</string>
<long name="is-transient">1</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">1</long>
<document>
<string name="title">"dialog_orient_footprints"</string>
<string name="type">"dialog-document"</string>
<string name="filename">""</string>
<string name="icon-name">"dialog"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/7/2008"</string>
<string name="proxy-type">"wbDialogProxy"</string>
<long name="base-id">10000</long>
<bool name="use-id-prefix">0</bool>
<string name="id-prefix">""</string>
<bool name="use-id-suffix">0</bool>
<string name="id-suffix">""</string>
<long name="use-xrc">0</long>
<long name="working-mode">0</long>
<string name="event-handler-0">"wxEVT_CLOSE_WINDOW|OnCloseWindow|NONE||"</string>
<string name="proxy-Id name">"ID_DIALOG_ORIENT_FOOTPRINTS"</string>
<long name="proxy-Id value">10000</long>
<string name="proxy-Class">"dialog_orient_footprints"</string>
<string name="proxy-Base class">"wxDialog"</string>
<string name="proxy-Window kind">"wxDialog"</string>
<string name="proxy-Implementation filename">"dialog_orient_footprints.cpp"</string>
<string name="proxy-Header filename">"dialog_orient_footprints.h"</string>
<string name="proxy-XRC filename">""</string>
<string name="proxy-Title">"Footprints Orientation"</string>
<bool name="proxy-Centre">1</bool>
<string name="proxy-Icon">""</string>
<bool name="proxy-Dialog units">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<string name="proxy-Texture">""</string>
<string name="proxy-Texture style">"Tiled"</string>
<bool name="proxy-wxDEFAULT_DIALOG_STYLE">1</bool>
<bool name="proxy-wxCAPTION">1</bool>
<bool name="proxy-wxRESIZE_BORDER">1</bool>
<bool name="proxy-wxSYSTEM_MENU">1</bool>
<bool name="proxy-wxSTAY_ON_TOP">0</bool>
<bool name="proxy-wxDIALOG_NO_PARENT">0</bool>
<bool name="proxy-wxCLOSE_BOX">1</bool>
<bool name="proxy-wxMAXIMIZE_BOX">0</bool>
<bool name="proxy-wxMINIMIZE_BOX">0</bool>
<bool name="proxy-wxDIALOG_MODAL">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxSIMPLE_BORDER">0</bool>
<bool name="proxy-wxDOUBLE_BORDER">0</bool>
<bool name="proxy-wxSUNKEN_BORDER">0</bool>
<bool name="proxy-wxRAISED_BORDER">0</bool>
<bool name="proxy-wxSTATIC_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxCLIP_CHILDREN">0</bool>
<bool name="proxy-wxTAB_TRAVERSAL">1</bool>
<bool name="proxy-wxWS_EX_VALIDATE_RECURSIVELY">0</bool>
<bool name="proxy-wxWS_EX_BLOCK_EVENTS">1</bool>
<bool name="proxy-wxWS_EX_TRANSIENT">0</bool>
<string name="proxy-Custom styles">""</string>
<bool name="proxy-wxDIALOG_EX_CONTEXTHELP">0</bool>
<bool name="proxy-Fit to content">1</bool>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">400</long>
<long name="proxy-Height">300</long>
<bool name="proxy-AUI manager">0</bool>
<string name="proxy-Event sources">""</string>
<document>
<string name="title">"wxBoxSizer H"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sizer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="proxy-type">"wbBoxSizerProxy"</string>
<string name="proxy-Orientation">"Horizontal"</string>
<string name="proxy-Member variable name">""</string>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document>
<string name="title">"wxBoxSizer V"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sizer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/7/2008"</string>
<string name="proxy-type">"wbBoxSizerProxy"</string>
<string name="proxy-Orientation">"Vertical"</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">1</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document>
<string name="title">"wxStaticText: wxID_STATIC"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"statictext"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/7/2008"</string>
<string name="proxy-type">"wbStaticTextProxy"</string>
<string name="proxy-Id name">"wxID_STATIC"</string>
<long name="proxy-Id value">5105</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxStaticText"</string>
<string name="proxy-Base class">"wxStaticText"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-Label">"Orientation:"</string>
<long name="proxy-Wrapping width">-1</long>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<bool name="proxy-wxALIGN_LEFT">0</bool>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxALIGN_CENTRE">0</bool>
<bool name="proxy-wxST_NO_AUTORESIZE">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxSIMPLE_BORDER">0</bool>
<bool name="proxy-wxDOUBLE_BORDER">0</bool>
<bool name="proxy-wxSUNKEN_BORDER">0</bool>
<bool name="proxy-wxRAISED_BORDER">0</bool>
<bool name="proxy-wxSTATIC_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">0</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxTextCtrl: ID_TEXTCTRLROT_VALUE"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"textctrl"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/7/2008"</string>
<string name="proxy-type">"wbTextCtrlProxy"</string>
<string name="proxy-Id name">"ID_TEXTCTRLROT_VALUE"</string>
<long name="proxy-Id value">10003</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxTextCtrl"</string>
<string name="proxy-Base class">"wxTextCtrl"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_OrientationCtrl"</string>
<string name="proxy-Initial value">""</string>
<long name="proxy-Max length">0</long>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">"New orientation (0.1 degree resolution)"</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<bool name="proxy-wxTE_MULTILINE">0</bool>
<bool name="proxy-wxTE_PROCESS_ENTER">0</bool>
<bool name="proxy-wxTE_PROCESS_TAB">0</bool>
<bool name="proxy-wxTE_PASSWORD">0</bool>
<bool name="proxy-wxTE_READONLY">0</bool>
<bool name="proxy-wxTE_RICH">0</bool>
<bool name="proxy-wxTE_RICH2">0</bool>
<bool name="proxy-wxTE_AUTO_URL">0</bool>
<bool name="proxy-wxTE_NOHIDESEL">0</bool>
<bool name="proxy-wxTE_LEFT">0</bool>
<bool name="proxy-wxTE_CENTRE">0</bool>
<bool name="proxy-wxTE_RIGHT">0</bool>
<bool name="proxy-wxHSCROLL">0</bool>
<bool name="proxy-wxTE_CHARWRAP">0</bool>
<bool name="proxy-wxTE_WORDWRAP">0</bool>
<bool name="proxy-wxTE_CAPITALIZE">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxSIMPLE_BORDER">0</bool>
<bool name="proxy-wxDOUBLE_BORDER">0</bool>
<bool name="proxy-wxSUNKEN_BORDER">0</bool>
<bool name="proxy-wxRAISED_BORDER">0</bool>
<bool name="proxy-wxSTATIC_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">0</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxStaticText: wxID_STATIC"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"statictext"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/7/2008"</string>
<string name="proxy-type">"wbStaticTextProxy"</string>
<string name="proxy-Id name">"wxID_STATIC"</string>
<long name="proxy-Id value">5105</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxStaticText"</string>
<string name="proxy-Base class">"wxStaticText"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-Label">"Filter:"</string>
<long name="proxy-Wrapping width">-1</long>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<bool name="proxy-wxALIGN_LEFT">0</bool>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxALIGN_CENTRE">0</bool>
<bool name="proxy-wxST_NO_AUTORESIZE">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxSIMPLE_BORDER">0</bool>
<bool name="proxy-wxDOUBLE_BORDER">0</bool>
<bool name="proxy-wxSUNKEN_BORDER">0</bool>
<bool name="proxy-wxRAISED_BORDER">0</bool>
<bool name="proxy-wxSTATIC_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">0</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxTextCtrl: ID_TEXTCTRL_FOOTPRINTS_FILTER"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"textctrl"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/7/2008"</string>
<string name="proxy-type">"wbTextCtrlProxy"</string>
<string name="proxy-Id name">"ID_TEXTCTRL_FOOTPRINTS_FILTER"</string>
<long name="proxy-Id value">10001</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxTextCtrl"</string>
<string name="proxy-Base class">"wxTextCtrl"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_FilterPattern"</string>
<string name="proxy-Initial value">"*"</string>
<long name="proxy-Max length">0</long>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">"Filter to select footprints by reference"</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<bool name="proxy-wxTE_MULTILINE">0</bool>
<bool name="proxy-wxTE_PROCESS_ENTER">0</bool>
<bool name="proxy-wxTE_PROCESS_TAB">0</bool>
<bool name="proxy-wxTE_PASSWORD">0</bool>
<bool name="proxy-wxTE_READONLY">0</bool>
<bool name="proxy-wxTE_RICH">0</bool>
<bool name="proxy-wxTE_RICH2">0</bool>
<bool name="proxy-wxTE_AUTO_URL">0</bool>
<bool name="proxy-wxTE_NOHIDESEL">0</bool>
<bool name="proxy-wxTE_LEFT">0</bool>
<bool name="proxy-wxTE_CENTRE">0</bool>
<bool name="proxy-wxTE_RIGHT">0</bool>
<bool name="proxy-wxHSCROLL">0</bool>
<bool name="proxy-wxTE_CHARWRAP">0</bool>
<bool name="proxy-wxTE_WORDWRAP">0</bool>
<bool name="proxy-wxTE_CAPITALIZE">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxSIMPLE_BORDER">0</bool>
<bool name="proxy-wxDOUBLE_BORDER">0</bool>
<bool name="proxy-wxSUNKEN_BORDER">0</bool>
<bool name="proxy-wxRAISED_BORDER">0</bool>
<bool name="proxy-wxSTATIC_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">1</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">0</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"Spacer"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"spacer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/7/2008"</string>
<string name="proxy-type">"wbSpacerProxy"</string>
<long name="proxy-Width">5</long>
<long name="proxy-Height">5</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
</document>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX_APPLY_TO_LOCKED"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/7/2008"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="proxy-Id name">"ID_CHECKBOX_APPLY_TO_LOCKED"</string>
<long name="proxy-Id value">10002</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Base class">"wxCheckBox"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_ApplyToLocked"</string>
<string name="proxy-Label">"Include Locked Footprints"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">"Force locked footprints to be modified"</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">0</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
</document>
<document>
<string name="title">"wxBoxSizer V"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sizer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/7/2008"</string>
<string name="proxy-type">"wbBoxSizerProxy"</string>
<string name="proxy-Orientation">"Vertical"</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document>
<string name="title">"wxButton: wxID_OK"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"dialogcontrol"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/7/2008"</string>
<string name="proxy-type">"wbButtonProxy"</string>
<string name="event-handler-0">"wxEVT_COMMAND_BUTTON_CLICKED|OnOkClick|NONE||dialog_orient_footprints"</string>
<string name="proxy-Id name">"wxID_OK"</string>
<long name="proxy-Id value">5100</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxButton"</string>
<string name="proxy-Base class">"wxButton"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-Label">"OK"</string>
<bool name="proxy-Default">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxBU_LEFT">0</bool>
<bool name="proxy-wxBU_RIGHT">0</bool>
<bool name="proxy-wxBU_TOP">0</bool>
<bool name="proxy-wxBU_BOTTOM">0</bool>
<bool name="proxy-wxBU_EXACTFIT">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxButton: wxID_CANCEL"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"dialogcontrol"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/7/2008"</string>
<string name="proxy-type">"wbButtonProxy"</string>
<string name="event-handler-0">"wxEVT_COMMAND_BUTTON_CLICKED|OnCancelClick|NONE||dialog_orient_footprints"</string>
<string name="proxy-Id name">"wxID_CANCEL"</string>
<long name="proxy-Id value">5101</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxButton"</string>
<string name="proxy-Base class">"wxButton"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_CloseButton"</string>
<string name="proxy-Label">"Cancel"</string>
<bool name="proxy-Default">1</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxBU_LEFT">0</bool>
<bool name="proxy-wxBU_RIGHT">0</bool>
<bool name="proxy-wxBU_TOP">0</bool>
<bool name="proxy-wxBU_BOTTOM">0</bool>
<bool name="proxy-wxBU_EXACTFIT">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
</document>
</document>
</document>
</document>
<document>
<string name="title">"Sources"</string>
<string name="type">"html-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sourcesfolder"</string>
<long name="is-transient">1</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">1</long>
<document>
<string name="title">"dialog_orient_footprints.rc"</string>
<string name="type">"source-editor-document"</string>
<string name="filename">"dialog_orient_footprints.rc"</string>
<string name="icon-name">"source-editor"</string>
<long name="is-transient">0</long>
<long name="owns-file">0</long>
<long name="title-mode">1</long>
<long name="locked">0</long>
<string name="created">"11/7/2008"</string>
<string name="language">""</string>
</document>
</document>
<document>
<string name="title">"Images"</string>
<string name="type">"html-document"</string>
<string name="filename">""</string>
<string name="icon-name">"bitmapsfolder"</string>
<long name="is-transient">1</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">1</long>
</document>
</document>
</documents>
</anthemion-project>
/***************************************************************************/
/* Dialog editor for text on copper and technical layers (TEXTE_PCB class) */
/***************************************************************************/
#include "fctsys.h"
#include "gr_basic.h"
#include "common.h"
#include "class_drawpanel.h"
#include "pcbnew.h"
#include "wxPcbStruct.h"
#include "drawtxt.h"
#include "confirm.h"
#include "dialog_helpers.h"
enum id_TextPCB_properties {
ID_TEXTPCB_SELECT_LAYER = 1900
};
/************************************/
/* class WinEDA_TextPCBPropertiesFrame */
/************************************/
class WinEDA_TextPCBPropertiesFrame : public wxDialog
{
private:
WinEDA_PcbFrame* m_Parent;
wxDC* m_DC;
TEXTE_PCB* CurrentTextPCB;
WinEDA_EnterText* m_Name;
WinEDA_PositionCtrl* m_TxtPosCtrl;
WinEDA_SizeCtrl* m_TxtSizeCtrl;
WinEDA_ValueCtrl* m_TxtWidthCtlr;
wxRadioBox* m_Orient;
wxRadioBox* m_Mirror;
wxRadioBox* m_Style;
WinEDAChoiceBox* m_SelLayerBox;
public:
// Constructor and destructor
WinEDA_TextPCBPropertiesFrame( WinEDA_PcbFrame* parent,
TEXTE_PCB* TextPCB, wxDC* DC );
~WinEDA_TextPCBPropertiesFrame()
{
}
private:
void OnOkClick( wxCommandEvent& event );
void OnCancelClick( wxCommandEvent& event );
DECLARE_EVENT_TABLE()
};
BEGIN_EVENT_TABLE( WinEDA_TextPCBPropertiesFrame, wxDialog )
EVT_BUTTON( wxID_OK, WinEDA_TextPCBPropertiesFrame::OnOkClick )
EVT_BUTTON( wxID_CANCEL, WinEDA_TextPCBPropertiesFrame::OnCancelClick )
END_EVENT_TABLE()
void WinEDA_PcbFrame::InstallTextPCBOptionsFrame( TEXTE_PCB* TextPCB, wxDC* DC )
{
DrawPanel->m_IgnoreMouseEvents = TRUE;
WinEDA_TextPCBPropertiesFrame* frame =
new WinEDA_TextPCBPropertiesFrame( this, TextPCB, DC );
frame->ShowModal();
frame->Destroy();
DrawPanel->MouseToCursorSchema();
DrawPanel->m_IgnoreMouseEvents = FALSE;
}
WinEDA_TextPCBPropertiesFrame::WinEDA_TextPCBPropertiesFrame( WinEDA_PcbFrame* parent,
TEXTE_PCB* TextPCB,
wxDC* DC ) :
wxDialog( parent, -1, _( "PCB Text properties" ), wxDefaultPosition,
wxSize( 390, 340 ) )
{
wxButton* Button;
BOARD* board = parent->GetBoard();
m_Parent = parent;
m_DC = DC;
Centre();
CurrentTextPCB = TextPCB;
wxBoxSizer* MainBoxSizer = new wxBoxSizer( wxHORIZONTAL );
SetSizer( MainBoxSizer );
wxBoxSizer* LeftBoxSizer = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* MiddleBoxSizer = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* RightBoxSizer = new wxBoxSizer( wxVERTICAL );
MainBoxSizer->Add( LeftBoxSizer, 0, wxGROW | wxALL, 5 );
MainBoxSizer->Add( MiddleBoxSizer, 0, wxGROW | wxALL, 5 );
MainBoxSizer->Add( RightBoxSizer, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
/* Creation des boutons de commande */
Button = new wxButton( this, wxID_OK, _( "OK" ) );
RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
Button->SetDefault();
Button = new wxButton( this, wxID_CANCEL, _( "Cancel" ) );
RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
m_Name = new WinEDA_EnterText( this, _( "Text:" ),
TextPCB->m_Text,
LeftBoxSizer, wxSize( 200, 60 ), true );
m_Name->SetFocus();
m_Name->SetSelection( -1, -1 );
m_TxtSizeCtrl = new WinEDA_SizeCtrl( this, _( "Size" ),
TextPCB->m_Size,
g_UserUnit, LeftBoxSizer,
m_Parent->m_InternalUnits );
m_TxtWidthCtlr = new WinEDA_ValueCtrl( this, _( "Width" ),
TextPCB->m_Width,
g_UserUnit, LeftBoxSizer,
m_Parent->m_InternalUnits );
m_TxtPosCtrl = new WinEDA_PositionCtrl( this, _( "Position" ),
TextPCB->m_Pos,
g_UserUnit, LeftBoxSizer,
m_Parent->m_InternalUnits );
m_SelLayerBox = new WinEDAChoiceBox( this, ID_TEXTPCB_SELECT_LAYER,
wxDefaultPosition, wxDefaultSize );
MiddleBoxSizer->Add( m_SelLayerBox, 0, wxGROW | wxALL, 5 );
for( int layer = 0; layer<NB_LAYERS; ++layer )
{
m_SelLayerBox->Append( board->GetLayerName( layer ) );
}
m_SelLayerBox->SetSelection( TextPCB->GetLayer() );
static const wxString orient_msg[4] =
{
wxT( "0" ), wxT( "90" ), wxT( "180" ), wxT( "-90" )
};
m_Orient = new wxRadioBox( this, -1, _( "Orientation" ), wxDefaultPosition,
wxSize( -1, -1 ), 4, orient_msg,
1, wxRA_SPECIFY_COLS );
MiddleBoxSizer->Add( m_Orient, 0, wxGROW | wxALL, 5 );
switch( TextPCB->m_Orient )
{
default:
m_Orient->SetSelection( 0 );
break;
case 900:
m_Orient->SetSelection( 1 );
break;
case 1800:
m_Orient->SetSelection( 2 );
break;
case 2700:
m_Orient->SetSelection( 3 );
break;
}
wxString display_msg[2] = { _( "Normal" ), _( "Mirror" ) };
m_Mirror = new wxRadioBox( this, -1, _( "Display" ), wxDefaultPosition,
wxSize( -1, -1 ), 2, display_msg,
1, wxRA_SPECIFY_COLS );
if( TextPCB->m_Mirror )
m_Mirror->SetSelection( 1 );
MiddleBoxSizer->Add( m_Mirror, 0, wxGROW | wxALL, 5 );
int style = 0;
if( CurrentTextPCB->m_Italic )
style = 1;
wxString style_msg[] = { _( "Normal" ), _( "Italic" ) };
m_Style = new wxRadioBox( this, -1, _( "Style" ), wxDefaultPosition,
wxSize( -1, -1 ), 2, style_msg,
1, wxRA_SPECIFY_COLS );
m_Style->SetSelection( style );
MiddleBoxSizer->Add( m_Style, 0, wxGROW | wxALL, 5 );
GetSizer()->Fit( this );
GetSizer()->SetSizeHints( this );
}
void WinEDA_TextPCBPropertiesFrame::OnCancelClick( wxCommandEvent& WXUNUSED( event ) )
{
EndModal( wxID_CANCEL );
}
void WinEDA_TextPCBPropertiesFrame::OnOkClick( wxCommandEvent& event )
{
// If no other command in progress, prepare undo command
// (for a command in progress, will be made later, at the completion of command)
if( CurrentTextPCB->m_Flags == 0 )
m_Parent->SaveCopyInUndoList( CurrentTextPCB, UR_CHANGED );
/* set flag in edit to force undo/redo/abort proper operation,
* and avoid new calls to SaveCopyInUndoList for the same text
* this can occurs when a text is moved, and then rotated, edited ..
*/
if( CurrentTextPCB->m_Flags != 0 )
CurrentTextPCB->m_Flags |= IN_EDIT;
// test for acceptable values for parameters:
wxSize newsize = m_TxtSizeCtrl->GetValue();
if( newsize.x < TEXTS_MIN_SIZE )
newsize.x = TEXTS_MIN_SIZE;
if( newsize.y < TEXTS_MIN_SIZE )
newsize.y = TEXTS_MIN_SIZE;
if( newsize.x > TEXTS_MAX_WIDTH )
newsize.x = TEXTS_MAX_WIDTH;
if( newsize.y > TEXTS_MAX_WIDTH )
newsize.y = TEXTS_MAX_WIDTH;
if( m_DC ) // Erase old text on screen
{
CurrentTextPCB->Draw( m_Parent->DrawPanel, m_DC, GR_XOR );
}
if( !m_Name->GetValue().IsEmpty() )
{
CurrentTextPCB->m_Text = m_Name->GetValue();
}
CurrentTextPCB->m_Pos = m_TxtPosCtrl->GetValue();
CurrentTextPCB->m_Size = newsize;
CurrentTextPCB->m_Width = m_TxtWidthCtlr->GetValue();
// test for acceptable values for parameters:
int maxthickness = Clamp_Text_PenSize( CurrentTextPCB->m_Width, CurrentTextPCB->m_Size );
if( CurrentTextPCB->m_Width > maxthickness )
{
DisplayError(this, _("The text thickness is too large for the text size. It will be clamped"));
CurrentTextPCB->m_Width = maxthickness;
}
CurrentTextPCB->m_Mirror = (m_Mirror->GetSelection() == 1) ? true : false;
CurrentTextPCB->m_Orient = m_Orient->GetSelection() * 900;
CurrentTextPCB->SetLayer( m_SelLayerBox->GetChoice() );
CurrentTextPCB->m_Italic = m_Style->GetSelection() ? 1 : 0;
if( m_DC ) // Display new text
{
CurrentTextPCB->Draw( m_Parent->DrawPanel, m_DC, GR_OR );
}
m_Parent->OnModify();
EndModal( 1 );
}
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
#include "pcbnew.h" #include "pcbnew.h"
#include "wxPcbStruct.h" #include "wxPcbStruct.h"
#include "trigo.h" #include "trigo.h"
#include "autorout.h"
#include "zones.h" #include "zones.h"
#include "dialog_copper_zones.h" #include "dialog_copper_zones.h"
......
...@@ -123,7 +123,7 @@ void DialogEditModuleText::Init( ) ...@@ -123,7 +123,7 @@ void DialogEditModuleText::Init( )
m_Parent->m_InternalUnits ); m_Parent->m_InternalUnits );
AddUnitSymbol( *m_WidthTitle ); AddUnitSymbol( *m_WidthTitle );
PutValueInLocalUnits( *m_TxtWidthCtlr, m_CurrentTextMod->m_Width, PutValueInLocalUnits( *m_TxtWidthCtlr, m_CurrentTextMod->m_Thickness,
m_Parent->m_InternalUnits ); m_Parent->m_InternalUnits );
int text_orient = m_CurrentTextMod->m_Orient; int text_orient = m_CurrentTextMod->m_Orient;
......
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project>
<FileVersion major="1" minor="10" />
<object class="Project" expanded="1">
<property name="class_decoration" />
<property name="code_generation">C++</property>
<property name="disconnect_events">1</property>
<property name="encoding">UTF-8</property>
<property name="event_generation">connect</property>
<property name="file">dialog_general_options_BoardEditor_base</property>
<property name="first_id">1000</property>
<property name="help_provider">none</property>
<property name="internationalize">1</property>
<property name="name">DialogGeneralOptionsBoardEditor_base</property>
<property name="namespace" />
<property name="path">.</property>
<property name="precompiled_header" />
<property name="relative_path">1</property>
<property name="use_enum">1</property>
<property name="use_microsoft_bom">0</property>
<object class="Dialog" expanded="1">
<property name="bg" />
<property name="center" />
<property name="context_help" />
<property name="enabled">1</property>
<property name="extra_style" />
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">DialogGeneralOptionsBoardEditor_base</property>
<property name="pos" />
<property name="size">585,280</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
<property name="subclass" />
<property name="title">General settings</property>
<property name="tooltip" />
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnActivate" />
<event name="OnActivateApp" />
<event name="OnChar" />
<event name="OnClose" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnHibernate" />
<event name="OnIconize" />
<event name="OnIdle" />
<event name="OnInitDialog" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size" />
<property name="name">bMainSizer</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size" />
<property name="name">bLeftSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxRadioBox" expanded="1">
<property name="bg" />
<property name="choices">&quot;No Display&quot; &quot;Display&quot;</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_POLAR_CTRL</property>
<property name="label">Display Polar Coord</property>
<property name="majorDimension">1</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_PolarDisplay</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="selection">1</property>
<property name="size" />
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass" />
<property name="tooltip">Activates the display of relative coordinates from relative origin (set by the space key)&#x0A;to the cursor, in polar coordinates (angle and distance)</property>
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRadioBox" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxRadioBox" expanded="1">
<property name="bg" />
<property name="choices">&quot;Inches&quot; &quot;Millimeters&quot;</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_UNITS</property>
<property name="label">Units</property>
<property name="majorDimension">1</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_UnitsSelection</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="selection">1</property>
<property name="size" />
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass" />
<property name="tooltip">Selection of units used to display dimensions and positions of items</property>
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRadioBox" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxRadioBox" expanded="1">
<property name="bg" />
<property name="choices">&quot;Small cross&quot; &quot;Full screen cursor&quot;</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_CURSOR_SHAPE</property>
<property name="label">Cursor</property>
<property name="majorDimension">1</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_CursorShape</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="selection">0</property>
<property name="size" />
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass" />
<property name="tooltip">Main cursor shape selection (small cross or large cursor)</property>
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRadioBox" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size" />
<property name="name">bMiddleLeftSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<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 name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Max Links:</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_staticTextmaxlinks</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip" />
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<property name="wrap">-1</property>
<event name="OnChar" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxSpinCtrl" expanded="1">
<property name="bg" />
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="initial">1</property>
<property name="max">5</property>
<property name="maximum_size" />
<property name="min">1</property>
<property name="minimum_size" />
<property name="name">m_MaxShowLinks</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style">wxSP_ARROW_KEYS</property>
<property name="subclass" />
<property name="tooltip">Adjust the number of ratsnets shown from cursor to closest pads</property>
<property name="value">1</property>
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnSpinCtrl" />
<event name="OnSpinCtrlText" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxTOP|wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="bg" />
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Auto Save (minutes):</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_staticTextautosave</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip" />
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<property name="wrap">-1</property>
<event name="OnChar" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxSpinCtrl" expanded="1">
<property name="bg" />
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="initial">0</property>
<property name="max">60</property>
<property name="maximum_size" />
<property name="min">0</property>
<property name="minimum_size" />
<property name="name">m_SaveTime</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style">wxSP_ARROW_KEYS</property>
<property name="subclass" />
<property name="tooltip">Delay after the first change to create a backup file of the board on disk.</property>
<property name="value">0</property>
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnSpinCtrl" />
<event name="OnSpinCtrlText" />
<event name="OnUpdateUI" />
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag" />
<property name="proportion">1</property>
<object class="wxStaticBoxSizer" expanded="1">
<property name="id">wxID_ANY</property>
<property name="label">Options:</property>
<property name="minimum_size" />
<property name="name">bMiddleRightBoxSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<event name="OnUpdateUI" />
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="1">
<property name="bg" />
<property name="checked">1</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_DRC_ONOFF</property>
<property name="label">Drc ON</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_DrcOn</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip">Enable/disable the DRC control.&#x0A;When DRC is disable, all connections are allowed.</property>
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnCheckBox" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="1">
<property name="bg" />
<property name="checked">0</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_GENERAL_RATSNEST</property>
<property name="label">Show Ratsnest</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_ShowGlobalRatsnest</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip">Show (or not) the full rastnest.</property>
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnCheckBox" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="1">
<property name="bg" />
<property name="checked">0</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_RATSNEST_MODULE</property>
<property name="label">Show Mod Ratsnest</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_ShowModuleRatsnest</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip">Shows (or not) the local ratsnest relative to a footprint, when moving it.&#x0A;This ratsnest is useful to place a footprint.</property>
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnCheckBox" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="1">
<property name="bg" />
<property name="checked">0</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_TRACK_AUTODEL</property>
<property name="label">Tracks Auto Del</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_TrackAutodel</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip">Enable/disable the automatic track deletion when recreating a track.</property>
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnCheckBox" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="1">
<property name="bg" />
<property name="checked">0</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_TRACKS45</property>
<property name="label">Track only 45 degrees</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_Track_45_Only_Ctrl</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip">If enabled, force tracks directions to H, V or 45 degrees, when creating a track.</property>
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnCheckBox" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="1">
<property name="bg" />
<property name="checked">0</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_SEGMENTS45</property>
<property name="label">Segments 45 Only</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_Segments_45_Only_Ctrl</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip">If enabled, force segments directions to H, V or 45 degrees, when creating a segment on technical layers.</property>
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnCheckBox" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="1">
<property name="bg" />
<property name="checked">0</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_AUTOPAN</property>
<property name="label">Auto PAN</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_AutoPANOpt</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip">Allows auto pan when creating a track, or moving an item.</property>
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnCheckBox" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="1">
<property name="bg" />
<property name="checked">0</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Double Segm Track</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_Track_DoubleSegm_Ctrl</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip">If enabled, uses two track segments, with 45 degrees angle between them when creating a new track </property>
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnCheckBox" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size" />
<property name="name">bRightSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxRadioBox" expanded="1">
<property name="bg" />
<property name="choices">&quot;Never&quot; &quot;When creating tracks&quot; &quot;Always&quot;</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Magnetic Pads</property>
<property name="majorDimension">1</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_MagneticPadOptCtrl</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="selection">0</property>
<property name="size" />
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass" />
<property name="tooltip">control the capture of the pcb cursor when the mouse cursor enters a pad area</property>
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRadioBox" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxRadioBox" expanded="1">
<property name="bg" />
<property name="choices">&quot;Never&quot; &quot;When creating tracks&quot; &quot;Always&quot;</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_MAGNETIC_TRACKS</property>
<property name="label">Magnetic Tracks</property>
<property name="majorDimension">1</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_MagneticTrackOptCtrl</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="selection">0</property>
<property name="size" />
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass" />
<property name="tooltip">Control the capture of the pcb cursor when the mouse cursor enters a track</property>
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRadioBox" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxALIGN_CENTER_HORIZONTAL</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="1">
<property name="bg" />
<property name="context_help" />
<property name="default">1</property>
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_OK</property>
<property name="label">OK</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_buttonOK</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip" />
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnButtonClick">OnOkClick</event>
<event name="OnChar" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALL</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="1">
<property name="bg" />
<property name="context_help" />
<property name="default">0</property>
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_CANCEL</property>
<property name="label">Cancel</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_buttonCANCEL</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip" />
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnButtonClick">OnCancelClick</event>
<event name="OnChar" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</wxFormBuilder_Project>
/**
* @file dialog_global_deletion.cpp
*/
#include "fctsys.h"
#include "common.h"
#include "class_drawpanel.h"
#include "confirm.h"
#include "pcbnew.h"
#include "wxPcbStruct.h"
#include "dialog_global_deletion.h"
DIALOG_GLOBAL_DELETION::DIALOG_GLOBAL_DELETION( WinEDA_PcbFrame* parent )
: DIALOG_GLOBAL_DELETION_BASE( parent )
{
m_Parent = parent;
SetFocus();
GetSizer()->SetSizeHints(this);
Centre();
}
/********************************************************************/
void WinEDA_PcbFrame::InstallPcbGlobalDeleteFrame( const wxPoint& pos )
/********************************************************************/
{
DIALOG_GLOBAL_DELETION dlg( this );
dlg.ShowModal();
}
/***********************************************************************/
void DIALOG_GLOBAL_DELETION::AcceptPcbDelete( )
/***********************************************************************/
{
bool gen_rastnest = false;
m_Parent->SetCurItem( NULL );
if( m_DelAlls->GetValue() )
{
m_Parent->Clear_Pcb( true );
}
else
{
if( !IsOK( this, _( "Ok to delete selected items ?" ) ) )
return;
BOARD * pcb = m_Parent->GetBoard();
PICKED_ITEMS_LIST pickersList;
ITEM_PICKER itemPicker( NULL, UR_DELETED );
BOARD_ITEM* item, * nextitem;
if( m_DelZones->GetValue() )
{
gen_rastnest = true;
/* ZEG_ZONE items used in Zone filling selection are now deprecated :
* and are deleted but not put in undo buffer if exist
*/
pcb->m_Zone.DeleteAll();
while( pcb->GetAreaCount() )
{
item = pcb->GetArea( 0 );
itemPicker.m_PickedItem = item;
pickersList.PushItem( itemPicker );
pcb->Remove( item );
}
}
int masque_layer = 0;
if( m_DelDrawings->GetValue() )
masque_layer = (~EDGE_LAYER) & 0x1FFF0000;
if( m_DelBoardEdges->GetValue() )
masque_layer |= EDGE_LAYER;
for( item = pcb->m_Drawings; item != NULL; item = nextitem )
{
nextitem = item->Next();
bool removeme = (g_TabOneLayerMask[ item->GetLayer()] & masque_layer) != 0;
if( ( item->Type() == TYPE_TEXTE ) && m_DelTexts->GetValue() )
removeme = true;
if( removeme )
{
itemPicker.m_PickedItem = item;
pickersList.PushItem( itemPicker );
item->UnLink();
}
}
if( m_DelModules->GetValue() )
{
gen_rastnest = true;
for( item = pcb->m_Modules; item; item = nextitem )
{
nextitem = item->Next();
itemPicker.m_PickedItem = item;
pickersList.PushItem( itemPicker );
item->UnLink();
}
}
if( m_DelTracks->GetValue() )
{
int track_mask_filter = 0;
if( !m_TrackFilterLocked->GetValue() )
track_mask_filter |= SEGM_FIXE;
if( !m_TrackFilterAR->GetValue() )
track_mask_filter |= SEGM_AR;
for( item = pcb->m_Track; item != NULL; item = nextitem )
{
nextitem = item->Next();
if( (item->GetState( SEGM_FIXE | SEGM_AR ) & track_mask_filter) != 0 )
continue;
itemPicker.m_PickedItem = item;
pickersList.PushItem( itemPicker );
item->UnLink();
gen_rastnest = true;
}
}
if( pickersList.GetCount() )
m_Parent->SaveCopyInUndoList( pickersList, UR_DELETED );
if( m_DelMarkers->GetValue() )
pcb->DeleteMARKERs();
if( gen_rastnest )
m_Parent->Compile_Ratsnest( NULL, true );
}
m_Parent->DrawPanel->Refresh();
m_Parent->OnModify();
EndModal( 1 );
}
/////////////////////////////////////////////////////////////////////////////
// Name: dialog_global_deletion.h
/////////////////////////////////////////////////////////////////////////////
#ifndef _DIALOG_GLOBAL_DELETION_H_
#define _DIALOG_GLOBAL_DELETION_H_
#include "dialog_global_deletion_base.h"
class DIALOG_GLOBAL_DELETION: public DIALOG_GLOBAL_DELETION_BASE
{
private:
WinEDA_PcbFrame * m_Parent;
public:
DIALOG_GLOBAL_DELETION( WinEDA_PcbFrame* parent );
private:
void OnOkClick( wxCommandEvent& event )
{
AcceptPcbDelete();
EndModal(wxID_OK);
}
void OnCancelClick( wxCommandEvent& event )
{
EndModal(wxID_CANCEL);
}
void AcceptPcbDelete();
};
#endif
// _DIALOG_GLOBAL_DELETION_H_
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Sep 8 2010)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "dialog_global_deletion_base.h"
///////////////////////////////////////////////////////////////////////////
DIALOG_GLOBAL_DELETION_BASE::DIALOG_GLOBAL_DELETION_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
wxBoxSizer* bSizerMain;
bSizerMain = new wxBoxSizer( wxHORIZONTAL );
wxStaticBoxSizer* sbSizerLeft;
sbSizerLeft = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Items to delete") ), wxVERTICAL );
m_DelZones = new wxCheckBox( this, wxID_ANY, _("Delete Zones"), wxDefaultPosition, wxDefaultSize, 0 );
sbSizerLeft->Add( m_DelZones, 0, wxALL, 5 );
m_DelTexts = new wxCheckBox( this, wxID_ANY, _("Delete Texts"), wxDefaultPosition, wxDefaultSize, 0 );
sbSizerLeft->Add( m_DelTexts, 0, wxALL, 5 );
m_DelBoardEdges = new wxCheckBox( this, wxID_ANY, _("Delete Board Outlines"), wxDefaultPosition, wxDefaultSize, 0 );
sbSizerLeft->Add( m_DelBoardEdges, 0, wxALL, 5 );
m_DelDrawings = new wxCheckBox( this, wxID_ANY, _("Delete Drawings"), wxDefaultPosition, wxDefaultSize, 0 );
sbSizerLeft->Add( m_DelDrawings, 0, wxALL, 5 );
m_DelModules = new wxCheckBox( this, wxID_ANY, _("Delete Modules"), wxDefaultPosition, wxDefaultSize, 0 );
sbSizerLeft->Add( m_DelModules, 0, wxALL, 5 );
m_DelTracks = new wxCheckBox( this, wxID_ANY, _("Delete Tracks"), wxDefaultPosition, wxDefaultSize, 0 );
sbSizerLeft->Add( m_DelTracks, 0, wxALL, 5 );
m_DelMarkers = new wxCheckBox( this, wxID_ANY, _("Delete Markers"), wxDefaultPosition, wxDefaultSize, 0 );
sbSizerLeft->Add( m_DelMarkers, 0, wxALL, 5 );
m_DelAlls = new wxCheckBox( this, wxID_ANY, _("Clear Board"), wxDefaultPosition, wxDefaultSize, 0 );
sbSizerLeft->Add( m_DelAlls, 0, wxALL, 5 );
bSizerMain->Add( sbSizerLeft, 1, wxEXPAND|wxALL, 5 );
wxBoxSizer* bSizer2;
bSizer2 = new wxBoxSizer( wxVERTICAL );
wxStaticBoxSizer* sbSizerTrackFilter;
sbSizerTrackFilter = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Track Filter") ), wxVERTICAL );
m_TrackFilterAR = new wxCheckBox( this, wxID_ANY, _("Include AutoRouted Tracks"), wxDefaultPosition, wxDefaultSize, 0 );
sbSizerTrackFilter->Add( m_TrackFilterAR, 0, wxALL, 5 );
m_TrackFilterLocked = new wxCheckBox( this, wxID_ANY, _("Include Locked Tracks"), wxDefaultPosition, wxDefaultSize, 0 );
sbSizerTrackFilter->Add( m_TrackFilterLocked, 0, wxALL, 5 );
bSizer2->Add( sbSizerTrackFilter, 0, wxALL|wxEXPAND, 5 );
bSizer2->Add( 0, 10, 0, 0, 5 );
m_buttonOK = new wxButton( this, wxID_OK, _("&OK"), wxDefaultPosition, wxDefaultSize, 0 );
m_buttonOK->SetDefault();
bSizer2->Add( m_buttonOK, 0, wxALL|wxEXPAND, 5 );
m_buttonCancel = new wxButton( this, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
bSizer2->Add( m_buttonCancel, 0, wxALL|wxEXPAND, 5 );
bSizerMain->Add( bSizer2, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
this->SetSizer( bSizerMain );
this->Layout();
this->Centre( wxBOTH );
// Connect Events
m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GLOBAL_DELETION_BASE::OnOkClick ), NULL, this );
m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GLOBAL_DELETION_BASE::OnCancelClick ), NULL, this );
}
DIALOG_GLOBAL_DELETION_BASE::~DIALOG_GLOBAL_DELETION_BASE()
{
// Disconnect Events
m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GLOBAL_DELETION_BASE::OnOkClick ), NULL, this );
m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GLOBAL_DELETION_BASE::OnCancelClick ), NULL, this );
}
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Sep 8 2010)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __dialog_global_deletion_base__
#define __dialog_global_deletion_base__
#include <wx/intl.h>
#include <wx/string.h>
#include <wx/checkbox.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/sizer.h>
#include <wx/statbox.h>
#include <wx/button.h>
#include <wx/dialog.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class DIALOG_GLOBAL_DELETION_BASE
///////////////////////////////////////////////////////////////////////////////
class DIALOG_GLOBAL_DELETION_BASE : public wxDialog
{
private:
protected:
wxCheckBox* m_DelZones;
wxCheckBox* m_DelTexts;
wxCheckBox* m_DelBoardEdges;
wxCheckBox* m_DelDrawings;
wxCheckBox* m_DelModules;
wxCheckBox* m_DelTracks;
wxCheckBox* m_DelMarkers;
wxCheckBox* m_DelAlls;
wxCheckBox* m_TrackFilterAR;
wxCheckBox* m_TrackFilterLocked;
wxButton* m_buttonOK;
wxButton* m_buttonCancel;
// Virtual event handlers, overide them in your derived class
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
public:
DIALOG_GLOBAL_DELETION_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 365,242 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_GLOBAL_DELETION_BASE();
};
#endif //__dialog_global_deletion_base__
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project>
<FileVersion major="1" minor="10" />
<object class="Project" expanded="1">
<property name="class_decoration" />
<property name="code_generation">C++</property>
<property name="disconnect_events">1</property>
<property name="encoding">UTF-8</property>
<property name="event_generation">connect</property>
<property name="file">dialog_global_pads_edition_base</property>
<property name="first_id">1000</property>
<property name="help_provider">none</property>
<property name="internationalize">0</property>
<property name="name">dialog_global_pads_edition</property>
<property name="namespace" />
<property name="path">.</property>
<property name="precompiled_header" />
<property name="relative_path">1</property>
<property name="use_enum">0</property>
<property name="use_microsoft_bom">0</property>
<object class="Dialog" expanded="1">
<property name="bg" />
<property name="center" />
<property name="context_help" />
<property name="enabled">1</property>
<property name="extra_style" />
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">DIALOG_GLOBAL_PADS_EDITION_BASE</property>
<property name="pos" />
<property name="size">482,165</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
<property name="subclass" />
<property name="title">Global Pads Edition</property>
<property name="tooltip" />
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnActivate" />
<event name="OnActivateApp" />
<event name="OnChar" />
<event name="OnClose" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnHibernate" />
<event name="OnIconize" />
<event name="OnIdle" />
<event name="OnInitDialog" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size" />
<property name="name">bMainSizer</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size" />
<property name="name">bLeftSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxStaticBoxSizer" expanded="1">
<property name="id">wxID_ANY</property>
<property name="label">Pad Filter :</property>
<property name="minimum_size" />
<property name="name">sbSizer1</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<event name="OnUpdateUI" />
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="1">
<property name="bg" />
<property name="checked">0</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Do not modify pads having a different shape</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_Pad_Shape_Filter_CB</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip" />
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnCheckBox" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="1">
<property name="bg" />
<property name="checked">0</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Do not modify pads having different layers</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_Pad_Layer_Filter_CB</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip" />
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnCheckBox" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="1">
<property name="bg" />
<property name="checked">0</property>
<property name="context_help" />
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Do not modify pads having a different orientation</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_Pad_Orient_Filter_CB</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip" />
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnChar" />
<event name="OnCheckBox" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size" />
<property name="name">bRightSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="1">
<property name="bg" />
<property name="context_help" />
<property name="default">0</property>
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">ID_CHANGE_GET_PAD_SETTINGS</property>
<property name="label">Pad Editor</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_buttonPadEditor</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip" />
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnButtonClick">InstallPadEditor</event>
<event name="OnChar" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag" />
<property name="proportion">0</property>
<object class="spacer" expanded="1">
<property name="height">10</property>
<property name="permission">protected</property>
<property name="width">10</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="1">
<property name="bg" />
<property name="context_help" />
<property name="default">0</property>
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">ID_CHANGE_CURRENT_MODULE</property>
<property name="label">Change Pads on Module</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_button2</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip" />
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnButtonClick">PadPropertiesAccept</event>
<event name="OnChar" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="1">
<property name="bg" />
<property name="context_help" />
<property name="default">0</property>
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">ID_CHANGE_ID_MODULES</property>
<property name="label">Change Pads on Same Modules</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_button3</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip" />
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnButtonClick">PadPropertiesAccept</event>
<event name="OnChar" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="1">
<property name="bg" />
<property name="context_help" />
<property name="default">0</property>
<property name="enabled">1</property>
<property name="fg" />
<property name="font" />
<property name="hidden">0</property>
<property name="id">wxID_CANCEL</property>
<property name="label">Cancel</property>
<property name="maximum_size" />
<property name="minimum_size" />
<property name="name">m_button4</property>
<property name="permission">protected</property>
<property name="pos" />
<property name="size" />
<property name="style" />
<property name="subclass" />
<property name="tooltip" />
<property name="window_extra_style" />
<property name="window_name" />
<property name="window_style" />
<event name="OnButtonClick">OnCancelClick</event>
<event name="OnChar" />
<event name="OnEnterWindow" />
<event name="OnEraseBackground" />
<event name="OnKeyDown" />
<event name="OnKeyUp" />
<event name="OnKillFocus" />
<event name="OnLeaveWindow" />
<event name="OnLeftDClick" />
<event name="OnLeftDown" />
<event name="OnLeftUp" />
<event name="OnMiddleDClick" />
<event name="OnMiddleDown" />
<event name="OnMiddleUp" />
<event name="OnMotion" />
<event name="OnMouseEvents" />
<event name="OnMouseWheel" />
<event name="OnPaint" />
<event name="OnRightDClick" />
<event name="OnRightDown" />
<event name="OnRightUp" />
<event name="OnSetFocus" />
<event name="OnSize" />
<event name="OnUpdateUI" />
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</wxFormBuilder_Project>
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
/**
* @file DIALOG_ORIENT_FOOTPRINTS.cpp
*/
/*
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 1992-2010 Jean_Pierre Charras <jp.charras@ujf-grenoble.fr>
* Copyright (C) 1992-2010 Kicad Developers, see change_log.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "fctsys.h"
#include "class_drawpanel.h"
#include "confirm.h"
#include "kicad_string.h"
#include "pcbnew.h"
#include "wxPcbStruct.h"
#include "macros.h"
#include "dialog_orient_footprints_base.h"
/* DIALOG_ORIENT_FOOTPRINTS class declaration
*/
class DIALOG_ORIENT_FOOTPRINTS: public DIALOG_ORIENT_FOOTPRINTS_BASE
{
private:
WinEDA_PcbFrame * m_Parent;
static int newOrientation;
public:
DIALOG_ORIENT_FOOTPRINTS( WinEDA_PcbFrame* parent );
~DIALOG_ORIENT_FOOTPRINTS() {}
bool ApplyToLockedModules()
{
return m_ApplyToLocked->IsChecked();
}
int GetOrientation()
{
return newOrientation;
}
wxString GetFilter()
{
return m_FilterPattern->GetValue();
}
private:
void init();
void OnOkClick( wxCommandEvent& event );
void OnCancelClick( wxCommandEvent& event );
};
int DIALOG_ORIENT_FOOTPRINTS::newOrientation = 0;
DIALOG_ORIENT_FOOTPRINTS::DIALOG_ORIENT_FOOTPRINTS( WinEDA_PcbFrame* parent )
: DIALOG_ORIENT_FOOTPRINTS_BASE( parent )
{
m_Parent = parent;
wxString txt;
txt.Printf(wxT("%g"), (double) newOrientation/10);
m_OrientationCtrl->SetValue(txt);
SetFocus( );
GetSizer()->SetSizeHints(this);
Centre();
}
/****************************************************************/
void WinEDA_PcbFrame::OnOrientFootprints( wxCommandEvent& event )
/****************************************************************/
/**
* Function OnOrientFootprints
* install the dialog box for the comman Orient Footprints
*/
{
DIALOG_ORIENT_FOOTPRINTS dlg(this);
if( dlg.ShowModal() != wxID_OK )
return;
wxString text = dlg.GetFilter();
if( ReOrientModules( text, dlg.GetOrientation(), dlg.ApplyToLockedModules() ) )
{
DrawPanel->Refresh();
Compile_Ratsnest( NULL, true );
}
}
/*******************************************************************/
bool WinEDA_PcbFrame::ReOrientModules( const wxString& ModuleMask,
int Orient, bool include_fixe )
/*******************************************************************/
/**
* Function ReOrientModules
* Set the orientation of footprints
* @param ModuleMask = mask (wildcard allowed) selection
* @param Orient = new orientation
* @param include_fixe = true to orient locked footprints
* @return true if some footprints modified, false if no change
*/
{
wxString line;
bool modified = false;
line.Printf( _( "Ok to set footprints orientation to %.1f degrees ?" ), (double)Orient / 10 );
if( !IsOK( this, line ) )
return false;
for( MODULE* module = GetBoard()->m_Modules; module; module = module->Next() )
{
if( module->IsLocked() && !include_fixe )
continue;
if( WildCompareString( ModuleMask, module->m_Reference->m_Text, FALSE ) )
{
modified = true;
Rotate_Module( NULL, module, Orient, FALSE );
}
}
if ( modified )
OnModify();
return modified;
}
void DIALOG_ORIENT_FOOTPRINTS::OnOkClick( wxCommandEvent& event )
{
double d_orient;
wxString text = m_OrientationCtrl->GetValue();
if ( ! text.ToDouble(&d_orient) )
{
DisplayError(this, _("Bad value for footprints orientation"));
return;
}
newOrientation = wxRound(d_orient * 10);
NORMALIZE_ANGLE_180( newOrientation );
EndModal( wxID_OK );
}
void DIALOG_ORIENT_FOOTPRINTS::OnCancelClick( wxCommandEvent& event )
{
EndModal( wxID_CANCEL );
}
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Sep 8 2010)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "dialog_orient_footprints_base.h"
///////////////////////////////////////////////////////////////////////////
DIALOG_ORIENT_FOOTPRINTS_BASE::DIALOG_ORIENT_FOOTPRINTS_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
wxBoxSizer* bSizerMain;
bSizerMain = new wxBoxSizer( wxHORIZONTAL );
wxBoxSizer* bSizerLeft;
bSizerLeft = new wxBoxSizer( wxVERTICAL );
m_staticText1 = new wxStaticText( this, wxID_ANY, _("Orientation:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText1->Wrap( -1 );
bSizerLeft->Add( m_staticText1, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
m_OrientationCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_OrientationCtrl->SetToolTip( _("New orientation (0.1 degree resolution)") );
bSizerLeft->Add( m_OrientationCtrl, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_staticText2 = new wxStaticText( this, wxID_ANY, _("Filter:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText2->Wrap( -1 );
bSizerLeft->Add( m_staticText2, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
m_FilterPattern = new wxTextCtrl( this, wxID_ANY, _("*"), wxDefaultPosition, wxDefaultSize, 0 );
m_FilterPattern->SetToolTip( _("Filter to select footprints by reference") );
bSizerLeft->Add( m_FilterPattern, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
bSizerLeft->Add( 0, 0, 0, wxTOP|wxBOTTOM, 5 );
m_ApplyToLocked = new wxCheckBox( this, wxID_ANY, _("Include Locked Footprints"), wxDefaultPosition, wxDefaultSize, 0 );
m_ApplyToLocked->SetToolTip( _("Force locked footprints to be modified") );
bSizerLeft->Add( m_ApplyToLocked, 0, wxALL, 5 );
bSizerMain->Add( bSizerLeft, 1, wxEXPAND, 5 );
wxBoxSizer* bSizerRight;
bSizerRight = new wxBoxSizer( wxVERTICAL );
m_buttonOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0 );
m_buttonOK->SetDefault();
bSizerRight->Add( m_buttonOK, 0, wxALL, 5 );
m_buttonClose = new wxButton( this, wxID_ANY, _("Close"), wxDefaultPosition, wxDefaultSize, 0 );
bSizerRight->Add( m_buttonClose, 0, wxALL, 5 );
bSizerMain->Add( bSizerRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
this->SetSizer( bSizerMain );
this->Layout();
this->Centre( wxBOTH );
// Connect Events
m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ORIENT_FOOTPRINTS_BASE::OnOkClick ), NULL, this );
m_buttonClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ORIENT_FOOTPRINTS_BASE::OnCancelClick ), NULL, this );
}
DIALOG_ORIENT_FOOTPRINTS_BASE::~DIALOG_ORIENT_FOOTPRINTS_BASE()
{
// Disconnect Events
m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ORIENT_FOOTPRINTS_BASE::OnOkClick ), NULL, this );
m_buttonClose->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ORIENT_FOOTPRINTS_BASE::OnCancelClick ), NULL, this );
}
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project> <wxFormBuilder_Project>
<FileVersion major="1" minor="9" /> <FileVersion major="1" minor="10" />
<object class="Project" expanded="1"> <object class="Project" expanded="1">
<property name="class_decoration"></property> <property name="class_decoration"></property>
<property name="code_generation">C++</property> <property name="code_generation">C++</property>
<property name="disconnect_events">1</property> <property name="disconnect_events">1</property>
<property name="encoding">UTF-8</property> <property name="disconnect_mode">source_name</property>
<property name="event_generation">connect</property> <property name="disconnect_python_events">0</property>
<property name="file">dialog_global_pads_edition_base</property> <property name="encoding">UTF-8</property>
<property name="first_id">1000</property> <property name="event_generation">connect</property>
<property name="help_provider">none</property> <property name="file">dialog_orient_footprints_base</property>
<property name="internationalize">0</property> <property name="first_id">1000</property>
<property name="name">dialog_global_pads_edition</property> <property name="help_provider">none</property>
<property name="namespace"></property> <property name="internationalize">1</property>
<property name="path">.</property> <property name="name">dialog_orient_footprints</property>
<property name="precompiled_header"></property> <property name="namespace"></property>
<property name="relative_path">1</property> <property name="path">.</property>
<property name="use_enum">0</property> <property name="precompiled_header"></property>
<property name="use_microsoft_bom">0</property> <property name="relative_path">1</property>
<object class="Dialog" expanded="1"> <property name="skip_python_events">1</property>
<property name="bg"></property> <property name="use_enum">0</property>
<property name="center"></property> <property name="use_microsoft_bom">0</property>
<property name="context_help"></property> <object class="Dialog" expanded="1">
<property name="enabled">1</property> <property name="bg"></property>
<property name="extra_style"></property> <property name="center">wxBOTH</property>
<property name="fg"></property> <property name="context_help"></property>
<property name="font"></property> <property name="context_menu">1</property>
<property name="hidden">0</property> <property name="enabled">1</property>
<property name="id">wxID_ANY</property> <property name="event_handler">impl_virtual</property>
<property name="maximum_size"></property> <property name="extra_style"></property>
<property name="minimum_size"></property> <property name="fg"></property>
<property name="name">DIALOG_GLOBAL_PADS_EDITION_BASE</property> <property name="font"></property>
<property name="pos"></property> <property name="hidden">0</property>
<property name="size">482,165</property> <property name="id">wxID_ANY</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property> <property name="maximum_size"></property>
<property name="subclass"></property> <property name="minimum_size"></property>
<property name="title">Global Pads Edition</property> <property name="name">DIALOG_ORIENT_FOOTPRINTS_BASE</property>
<property name="tooltip"></property> <property name="pos"></property>
<property name="window_extra_style"></property> <property name="size">403,160</property>
<property name="window_name"></property> <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
<property name="window_style"></property> <property name="subclass"></property>
<event name="OnActivate"></event> <property name="title">Footprints Orientation</property>
<event name="OnActivateApp"></event> <property name="tooltip"></property>
<event name="OnChar"></event> <property name="validator_data_type"></property>
<event name="OnClose"></event> <property name="validator_style">wxFILTER_NONE</property>
<event name="OnEnterWindow"></event> <property name="validator_type">wxDefaultValidator</property>
<event name="OnEraseBackground"></event> <property name="validator_variable"></property>
<event name="OnHibernate"></event> <property name="window_extra_style"></property>
<event name="OnIconize"></event> <property name="window_name"></property>
<event name="OnIdle"></event> <property name="window_style"></property>
<event name="OnInitDialog"></event> <event name="OnActivate"></event>
<event name="OnKeyDown"></event> <event name="OnActivateApp"></event>
<event name="OnKeyUp"></event> <event name="OnChar"></event>
<event name="OnKillFocus"></event> <event name="OnClose"></event>
<event name="OnLeaveWindow"></event> <event name="OnEnterWindow"></event>
<event name="OnLeftDClick"></event> <event name="OnEraseBackground"></event>
<event name="OnLeftDown"></event> <event name="OnHibernate"></event>
<event name="OnLeftUp"></event> <event name="OnIconize"></event>
<event name="OnMiddleDClick"></event> <event name="OnIdle"></event>
<event name="OnMiddleDown"></event> <event name="OnInitDialog"></event>
<event name="OnMiddleUp"></event> <event name="OnKeyDown"></event>
<event name="OnMotion"></event> <event name="OnKeyUp"></event>
<event name="OnMouseEvents"></event> <event name="OnKillFocus"></event>
<event name="OnMouseWheel"></event> <event name="OnLeaveWindow"></event>
<event name="OnPaint"></event> <event name="OnLeftDClick"></event>
<event name="OnRightDClick"></event> <event name="OnLeftDown"></event>
<event name="OnRightDown"></event> <event name="OnLeftUp"></event>
<event name="OnRightUp"></event> <event name="OnMiddleDClick"></event>
<event name="OnSetFocus"></event> <event name="OnMiddleDown"></event>
<event name="OnSize"></event> <event name="OnMiddleUp"></event>
<event name="OnUpdateUI"></event> <event name="OnMotion"></event>
<object class="wxBoxSizer" expanded="1"> <event name="OnMouseEvents"></event>
<property name="minimum_size"></property> <event name="OnMouseWheel"></event>
<property name="name">bMainSizer</property> <event name="OnPaint"></event>
<property name="orient">wxHORIZONTAL</property> <event name="OnRightDClick"></event>
<property name="permission">none</property> <event name="OnRightDown"></event>
<object class="sizeritem" expanded="1"> <event name="OnRightUp"></event>
<property name="border">5</property> <event name="OnSetFocus"></event>
<property name="flag">wxEXPAND</property> <event name="OnSize"></event>
<property name="proportion">1</property> <event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">bLeftSizer</property> <property name="name">bSizerMain</property>
<property name="orient">wxVERTICAL</property> <property name="orient">wxHORIZONTAL</property>
<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">wxEXPAND</property> <property name="flag">wxEXPAND</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxStaticBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="1">
<property name="id">wxID_ANY</property> <property name="minimum_size"></property>
<property name="label">Pad Filter :</property> <property name="name">bSizerLeft</property>
<property name="minimum_size"></property> <property name="orient">wxVERTICAL</property>
<property name="name">sbSizer1</property> <property name="permission">none</property>
<property name="orient">wxVERTICAL</property> <object class="sizeritem" expanded="1">
<property name="permission">none</property> <property name="border">5</property>
<event name="OnUpdateUI"></event> <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
<object class="sizeritem" expanded="1"> <property name="proportion">0</property>
<property name="border">5</property> <object class="wxStaticText" expanded="1">
<property name="flag">wxALL</property> <property name="bg"></property>
<property name="proportion">0</property> <property name="context_help"></property>
<object class="wxCheckBox" expanded="1"> <property name="context_menu">1</property>
<property name="bg"></property> <property name="enabled">1</property>
<property name="checked">0</property> <property name="fg"></property>
<property name="context_help"></property> <property name="font"></property>
<property name="enabled">1</property> <property name="hidden">0</property>
<property name="fg"></property> <property name="id">wxID_ANY</property>
<property name="font"></property> <property name="label">Orientation:</property>
<property name="hidden">0</property> <property name="maximum_size"></property>
<property name="id">wxID_ANY</property> <property name="minimum_size"></property>
<property name="label">Do not modify pads having a different shape</property> <property name="name">m_staticText1</property>
<property name="maximum_size"></property> <property name="permission">protected</property>
<property name="minimum_size"></property> <property name="pos"></property>
<property name="name">m_Pad_Shape_Filter_CB</property> <property name="size"></property>
<property name="permission">protected</property> <property name="style"></property>
<property name="pos"></property> <property name="subclass"></property>
<property name="size"></property> <property name="tooltip"></property>
<property name="style"></property> <property name="validator_data_type"></property>
<property name="subclass"></property> <property name="validator_style">wxFILTER_NONE</property>
<property name="tooltip"></property> <property name="validator_type">wxDefaultValidator</property>
<property name="window_extra_style"></property> <property name="validator_variable"></property>
<property name="window_name"></property> <property name="window_extra_style"></property>
<property name="window_style"></property> <property name="window_name"></property>
<event name="OnChar"></event> <property name="window_style"></property>
<event name="OnCheckBox"></event> <property name="wrap">-1</property>
<event name="OnEnterWindow"></event> <event name="OnChar"></event>
<event name="OnEraseBackground"></event> <event name="OnEnterWindow"></event>
<event name="OnKeyDown"></event> <event name="OnEraseBackground"></event>
<event name="OnKeyUp"></event> <event name="OnKeyDown"></event>
<event name="OnKillFocus"></event> <event name="OnKeyUp"></event>
<event name="OnLeaveWindow"></event> <event name="OnKillFocus"></event>
<event name="OnLeftDClick"></event> <event name="OnLeaveWindow"></event>
<event name="OnLeftDown"></event> <event name="OnLeftDClick"></event>
<event name="OnLeftUp"></event> <event name="OnLeftDown"></event>
<event name="OnMiddleDClick"></event> <event name="OnLeftUp"></event>
<event name="OnMiddleDown"></event> <event name="OnMiddleDClick"></event>
<event name="OnMiddleUp"></event> <event name="OnMiddleDown"></event>
<event name="OnMotion"></event> <event name="OnMiddleUp"></event>
<event name="OnMouseEvents"></event> <event name="OnMotion"></event>
<event name="OnMouseWheel"></event> <event name="OnMouseEvents"></event>
<event name="OnPaint"></event> <event name="OnMouseWheel"></event>
<event name="OnRightDClick"></event> <event name="OnPaint"></event>
<event name="OnRightDown"></event> <event name="OnRightDClick"></event>
<event name="OnRightUp"></event> <event name="OnRightDown"></event>
<event name="OnSetFocus"></event> <event name="OnRightUp"></event>
<event name="OnSize"></event> <event name="OnSetFocus"></event>
<event name="OnUpdateUI"></event> <event name="OnSize"></event>
</object> <event name="OnUpdateUI"></event>
</object> </object>
<object class="sizeritem" expanded="1"> </object>
<property name="border">5</property> <object class="sizeritem" expanded="1">
<property name="flag">wxALL</property> <property name="border">5</property>
<property name="proportion">0</property> <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
<object class="wxCheckBox" expanded="1"> <property name="proportion">0</property>
<property name="bg"></property> <object class="wxTextCtrl" expanded="1">
<property name="checked">0</property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="enabled">1</property> <property name="context_menu">1</property>
<property name="fg"></property> <property name="enabled">1</property>
<property name="font"></property> <property name="fg"></property>
<property name="hidden">0</property> <property name="font"></property>
<property name="id">wxID_ANY</property> <property name="hidden">0</property>
<property name="label">Do not modify pads having different layers</property> <property name="id">wxID_ANY</property>
<property name="maximum_size"></property> <property name="maximum_size"></property>
<property name="minimum_size"></property> <property name="maxlength">0</property>
<property name="name">m_Pad_Layer_Filter_CB</property> <property name="minimum_size"></property>
<property name="permission">protected</property> <property name="name">m_OrientationCtrl</property>
<property name="pos"></property> <property name="permission">protected</property>
<property name="size"></property> <property name="pos"></property>
<property name="style"></property> <property name="size"></property>
<property name="subclass"></property> <property name="style"></property>
<property name="tooltip"></property> <property name="subclass"></property>
<property name="window_extra_style"></property> <property name="tooltip">New orientation (0.1 degree resolution)</property>
<property name="window_name"></property> <property name="validator_data_type"></property>
<property name="window_style"></property> <property name="validator_style">wxFILTER_NONE</property>
<event name="OnChar"></event> <property name="validator_type">wxDefaultValidator</property>
<event name="OnCheckBox"></event> <property name="validator_variable"></property>
<event name="OnEnterWindow"></event> <property name="value"></property>
<event name="OnEraseBackground"></event> <property name="window_extra_style"></property>
<event name="OnKeyDown"></event> <property name="window_name"></property>
<event name="OnKeyUp"></event> <property name="window_style"></property>
<event name="OnKillFocus"></event> <event name="OnChar"></event>
<event name="OnLeaveWindow"></event> <event name="OnEnterWindow"></event>
<event name="OnLeftDClick"></event> <event name="OnEraseBackground"></event>
<event name="OnLeftDown"></event> <event name="OnKeyDown"></event>
<event name="OnLeftUp"></event> <event name="OnKeyUp"></event>
<event name="OnMiddleDClick"></event> <event name="OnKillFocus"></event>
<event name="OnMiddleDown"></event> <event name="OnLeaveWindow"></event>
<event name="OnMiddleUp"></event> <event name="OnLeftDClick"></event>
<event name="OnMotion"></event> <event name="OnLeftDown"></event>
<event name="OnMouseEvents"></event> <event name="OnLeftUp"></event>
<event name="OnMouseWheel"></event> <event name="OnMiddleDClick"></event>
<event name="OnPaint"></event> <event name="OnMiddleDown"></event>
<event name="OnRightDClick"></event> <event name="OnMiddleUp"></event>
<event name="OnRightDown"></event> <event name="OnMotion"></event>
<event name="OnRightUp"></event> <event name="OnMouseEvents"></event>
<event name="OnSetFocus"></event> <event name="OnMouseWheel"></event>
<event name="OnSize"></event> <event name="OnPaint"></event>
<event name="OnUpdateUI"></event> <event name="OnRightDClick"></event>
</object> <event name="OnRightDown"></event>
</object> <event name="OnRightUp"></event>
<object class="sizeritem" expanded="1"> <event name="OnSetFocus"></event>
<property name="border">5</property> <event name="OnSize"></event>
<property name="flag">wxALL</property> <event name="OnText"></event>
<property name="proportion">0</property> <event name="OnTextEnter"></event>
<object class="wxCheckBox" expanded="1"> <event name="OnTextMaxLen"></event>
<property name="bg"></property> <event name="OnTextURL"></event>
<property name="checked">0</property> <event name="OnUpdateUI"></event>
<property name="context_help"></property> </object>
<property name="enabled">1</property> </object>
<property name="fg"></property> <object class="sizeritem" expanded="1">
<property name="font"></property> <property name="border">5</property>
<property name="hidden">0</property> <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
<property name="id">wxID_ANY</property> <property name="proportion">0</property>
<property name="label">Do not modify pads having a different orientation</property> <object class="wxStaticText" expanded="1">
<property name="maximum_size"></property> <property name="bg"></property>
<property name="minimum_size"></property> <property name="context_help"></property>
<property name="name">m_Pad_Orient_Filter_CB</property> <property name="context_menu">1</property>
<property name="permission">protected</property> <property name="enabled">1</property>
<property name="pos"></property> <property name="fg"></property>
<property name="size"></property> <property name="font"></property>
<property name="style"></property> <property name="hidden">0</property>
<property name="subclass"></property> <property name="id">wxID_ANY</property>
<property name="tooltip"></property> <property name="label">Filter:</property>
<property name="window_extra_style"></property> <property name="maximum_size"></property>
<property name="window_name"></property> <property name="minimum_size"></property>
<property name="window_style"></property> <property name="name">m_staticText2</property>
<event name="OnChar"></event> <property name="permission">protected</property>
<event name="OnCheckBox"></event> <property name="pos"></property>
<event name="OnEnterWindow"></event> <property name="size"></property>
<event name="OnEraseBackground"></event> <property name="style"></property>
<event name="OnKeyDown"></event> <property name="subclass"></property>
<event name="OnKeyUp"></event> <property name="tooltip"></property>
<event name="OnKillFocus"></event> <property name="validator_data_type"></property>
<event name="OnLeaveWindow"></event> <property name="validator_style">wxFILTER_NONE</property>
<event name="OnLeftDClick"></event> <property name="validator_type">wxDefaultValidator</property>
<event name="OnLeftDown"></event> <property name="validator_variable"></property>
<event name="OnLeftUp"></event> <property name="window_extra_style"></property>
<event name="OnMiddleDClick"></event> <property name="window_name"></property>
<event name="OnMiddleDown"></event> <property name="window_style"></property>
<event name="OnMiddleUp"></event> <property name="wrap">-1</property>
<event name="OnMotion"></event> <event name="OnChar"></event>
<event name="OnMouseEvents"></event> <event name="OnEnterWindow"></event>
<event name="OnMouseWheel"></event> <event name="OnEraseBackground"></event>
<event name="OnPaint"></event> <event name="OnKeyDown"></event>
<event name="OnRightDClick"></event> <event name="OnKeyUp"></event>
<event name="OnRightDown"></event> <event name="OnKillFocus"></event>
<event name="OnRightUp"></event> <event name="OnLeaveWindow"></event>
<event name="OnSetFocus"></event> <event name="OnLeftDClick"></event>
<event name="OnSize"></event> <event name="OnLeftDown"></event>
<event name="OnUpdateUI"></event> <event name="OnLeftUp"></event>
</object> <event name="OnMiddleDClick"></event>
</object> <event name="OnMiddleDown"></event>
</object> <event name="OnMiddleUp"></event>
</object> <event name="OnMotion"></event>
</object> <event name="OnMouseEvents"></event>
</object> <event name="OnMouseWheel"></event>
<object class="sizeritem" expanded="1"> <event name="OnPaint"></event>
<property name="border">5</property> <event name="OnRightDClick"></event>
<property name="flag">wxEXPAND</property> <event name="OnRightDown"></event>
<property name="proportion">0</property> <event name="OnRightUp"></event>
<object class="wxBoxSizer" expanded="1"> <event name="OnSetFocus"></event>
<property name="minimum_size"></property> <event name="OnSize"></event>
<property name="name">bRightSizer</property> <event name="OnUpdateUI"></event>
<property name="orient">wxVERTICAL</property> </object>
<property name="permission">none</property> </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="wxButton" expanded="1"> <object class="wxTextCtrl" expanded="1">
<property name="bg"></property> <property name="bg"></property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="default">0</property> <property name="context_menu">1</property>
<property name="enabled">1</property> <property name="enabled">1</property>
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">ID_CHANGE_GET_PAD_SETTINGS</property> <property name="id">wxID_ANY</property>
<property name="label">Pad Editor</property> <property name="maximum_size"></property>
<property name="maximum_size"></property> <property name="maxlength">0</property>
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">m_buttonPadEditor</property> <property name="name">m_FilterPattern</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>
<property name="style"></property> <property name="style"></property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="tooltip"></property> <property name="tooltip">Filter to select footprints by reference</property>
<property name="window_extra_style"></property> <property name="validator_data_type"></property>
<property name="window_name"></property> <property name="validator_style">wxFILTER_NONE</property>
<property name="window_style"></property> <property name="validator_type">wxDefaultValidator</property>
<event name="OnButtonClick">InstallPadEditor</event> <property name="validator_variable"></property>
<event name="OnChar"></event> <property name="value">*</property>
<event name="OnEnterWindow"></event> <property name="window_extra_style"></property>
<event name="OnEraseBackground"></event> <property name="window_name"></property>
<event name="OnKeyDown"></event> <property name="window_style"></property>
<event name="OnKeyUp"></event> <event name="OnChar"></event>
<event name="OnKillFocus"></event> <event name="OnEnterWindow"></event>
<event name="OnLeaveWindow"></event> <event name="OnEraseBackground"></event>
<event name="OnLeftDClick"></event> <event name="OnKeyDown"></event>
<event name="OnLeftDown"></event> <event name="OnKeyUp"></event>
<event name="OnLeftUp"></event> <event name="OnKillFocus"></event>
<event name="OnMiddleDClick"></event> <event name="OnLeaveWindow"></event>
<event name="OnMiddleDown"></event> <event name="OnLeftDClick"></event>
<event name="OnMiddleUp"></event> <event name="OnLeftDown"></event>
<event name="OnMotion"></event> <event name="OnLeftUp"></event>
<event name="OnMouseEvents"></event> <event name="OnMiddleDClick"></event>
<event name="OnMouseWheel"></event> <event name="OnMiddleDown"></event>
<event name="OnPaint"></event> <event name="OnMiddleUp"></event>
<event name="OnRightDClick"></event> <event name="OnMotion"></event>
<event name="OnRightDown"></event> <event name="OnMouseEvents"></event>
<event name="OnRightUp"></event> <event name="OnMouseWheel"></event>
<event name="OnSetFocus"></event> <event name="OnPaint"></event>
<event name="OnSize"></event> <event name="OnRightDClick"></event>
<event name="OnUpdateUI"></event> <event name="OnRightDown"></event>
</object> <event name="OnRightUp"></event>
</object> <event name="OnSetFocus"></event>
<object class="sizeritem" expanded="1"> <event name="OnSize"></event>
<property name="border">5</property> <event name="OnText"></event>
<property name="flag"></property> <event name="OnTextEnter"></event>
<property name="proportion">0</property> <event name="OnTextMaxLen"></event>
<object class="spacer" expanded="1"> <event name="OnTextURL"></event>
<property name="height">10</property> <event name="OnUpdateUI"></event>
<property name="permission">protected</property> </object>
<property name="width">10</property> </object>
</object> <object class="sizeritem" expanded="1">
</object> <property name="border">5</property>
<object class="sizeritem" expanded="1"> <property name="flag">wxTOP|wxBOTTOM</property>
<property name="border">5</property> <property name="proportion">0</property>
<property name="flag">wxALL|wxEXPAND</property> <object class="spacer" expanded="1">
<property name="proportion">0</property> <property name="height">0</property>
<object class="wxButton" expanded="1"> <property name="permission">protected</property>
<property name="bg"></property> <property name="width">0</property>
<property name="context_help"></property> </object>
<property name="default">0</property> </object>
<property name="enabled">1</property> <object class="sizeritem" expanded="1">
<property name="fg"></property> <property name="border">5</property>
<property name="font"></property> <property name="flag">wxALL</property>
<property name="hidden">0</property> <property name="proportion">0</property>
<property name="id">ID_CHANGE_CURRENT_MODULE</property> <object class="wxCheckBox" expanded="1">
<property name="label">Change Pads on Module</property> <property name="bg"></property>
<property name="maximum_size"></property> <property name="checked">0</property>
<property name="minimum_size"></property> <property name="context_help"></property>
<property name="name">m_button2</property> <property name="context_menu">1</property>
<property name="permission">protected</property> <property name="enabled">1</property>
<property name="pos"></property> <property name="fg"></property>
<property name="size"></property> <property name="font"></property>
<property name="style"></property> <property name="hidden">0</property>
<property name="subclass"></property> <property name="id">wxID_ANY</property>
<property name="tooltip"></property> <property name="label">Include Locked Footprints</property>
<property name="window_extra_style"></property> <property name="maximum_size"></property>
<property name="window_name"></property> <property name="minimum_size"></property>
<property name="window_style"></property> <property name="name">m_ApplyToLocked</property>
<event name="OnButtonClick">PadPropertiesAccept</event> <property name="permission">protected</property>
<event name="OnChar"></event> <property name="pos"></property>
<event name="OnEnterWindow"></event> <property name="size"></property>
<event name="OnEraseBackground"></event> <property name="style"></property>
<event name="OnKeyDown"></event> <property name="subclass"></property>
<event name="OnKeyUp"></event> <property name="tooltip">Force locked footprints to be modified</property>
<event name="OnKillFocus"></event> <property name="validator_data_type"></property>
<event name="OnLeaveWindow"></event> <property name="validator_style">wxFILTER_NONE</property>
<event name="OnLeftDClick"></event> <property name="validator_type">wxDefaultValidator</property>
<event name="OnLeftDown"></event> <property name="validator_variable"></property>
<event name="OnLeftUp"></event> <property name="window_extra_style"></property>
<event name="OnMiddleDClick"></event> <property name="window_name"></property>
<event name="OnMiddleDown"></event> <property name="window_style"></property>
<event name="OnMiddleUp"></event> <event name="OnChar"></event>
<event name="OnMotion"></event> <event name="OnCheckBox"></event>
<event name="OnMouseEvents"></event> <event name="OnEnterWindow"></event>
<event name="OnMouseWheel"></event> <event name="OnEraseBackground"></event>
<event name="OnPaint"></event> <event name="OnKeyDown"></event>
<event name="OnRightDClick"></event> <event name="OnKeyUp"></event>
<event name="OnRightDown"></event> <event name="OnKillFocus"></event>
<event name="OnRightUp"></event> <event name="OnLeaveWindow"></event>
<event name="OnSetFocus"></event> <event name="OnLeftDClick"></event>
<event name="OnSize"></event> <event name="OnLeftDown"></event>
<event name="OnUpdateUI"></event> <event name="OnLeftUp"></event>
</object> <event name="OnMiddleDClick"></event>
</object> <event name="OnMiddleDown"></event>
<object class="sizeritem" expanded="1"> <event name="OnMiddleUp"></event>
<property name="border">5</property> <event name="OnMotion"></event>
<property name="flag">wxALL|wxEXPAND</property> <event name="OnMouseEvents"></event>
<property name="proportion">0</property> <event name="OnMouseWheel"></event>
<object class="wxButton" expanded="1"> <event name="OnPaint"></event>
<property name="bg"></property> <event name="OnRightDClick"></event>
<property name="context_help"></property> <event name="OnRightDown"></event>
<property name="default">0</property> <event name="OnRightUp"></event>
<property name="enabled">1</property> <event name="OnSetFocus"></event>
<property name="fg"></property> <event name="OnSize"></event>
<property name="font"></property> <event name="OnUpdateUI"></event>
<property name="hidden">0</property> </object>
<property name="id">ID_CHANGE_ID_MODULES</property> </object>
<property name="label">Change Pads on Same Modules</property> </object>
<property name="maximum_size"></property> </object>
<property name="minimum_size"></property> <object class="sizeritem" expanded="1">
<property name="name">m_button3</property> <property name="border">5</property>
<property name="permission">protected</property> <property name="flag">wxALIGN_CENTER_VERTICAL</property>
<property name="pos"></property> <property name="proportion">0</property>
<property name="size"></property> <object class="wxBoxSizer" expanded="1">
<property name="style"></property> <property name="minimum_size"></property>
<property name="subclass"></property> <property name="name">bSizerRight</property>
<property name="tooltip"></property> <property name="orient">wxVERTICAL</property>
<property name="window_extra_style"></property> <property name="permission">none</property>
<property name="window_name"></property> <object class="sizeritem" expanded="1">
<property name="window_style"></property> <property name="border">5</property>
<event name="OnButtonClick">PadPropertiesAccept</event> <property name="flag">wxALL</property>
<event name="OnChar"></event> <property name="proportion">0</property>
<event name="OnEnterWindow"></event> <object class="wxButton" expanded="1">
<event name="OnEraseBackground"></event> <property name="bg"></property>
<event name="OnKeyDown"></event> <property name="context_help"></property>
<event name="OnKeyUp"></event> <property name="context_menu">1</property>
<event name="OnKillFocus"></event> <property name="default">1</property>
<event name="OnLeaveWindow"></event> <property name="enabled">1</property>
<event name="OnLeftDClick"></event> <property name="fg"></property>
<event name="OnLeftDown"></event> <property name="font"></property>
<event name="OnLeftUp"></event> <property name="hidden">0</property>
<event name="OnMiddleDClick"></event> <property name="id">wxID_OK</property>
<event name="OnMiddleDown"></event> <property name="label">OK</property>
<event name="OnMiddleUp"></event> <property name="maximum_size"></property>
<event name="OnMotion"></event> <property name="minimum_size"></property>
<event name="OnMouseEvents"></event> <property name="name">m_buttonOK</property>
<event name="OnMouseWheel"></event> <property name="permission">protected</property>
<event name="OnPaint"></event> <property name="pos"></property>
<event name="OnRightDClick"></event> <property name="size"></property>
<event name="OnRightDown"></event> <property name="style"></property>
<event name="OnRightUp"></event> <property name="subclass"></property>
<event name="OnSetFocus"></event> <property name="tooltip"></property>
<event name="OnSize"></event> <property name="validator_data_type"></property>
<event name="OnUpdateUI"></event> <property name="validator_style">wxFILTER_NONE</property>
</object> <property name="validator_type">wxDefaultValidator</property>
</object> <property name="validator_variable"></property>
<object class="sizeritem" expanded="1"> <property name="window_extra_style"></property>
<property name="border">5</property> <property name="window_name"></property>
<property name="flag">wxALL|wxEXPAND</property> <property name="window_style"></property>
<property name="proportion">0</property> <event name="OnButtonClick">OnOkClick</event>
<object class="wxButton" expanded="1"> <event name="OnChar"></event>
<property name="bg"></property> <event name="OnEnterWindow"></event>
<property name="context_help"></property> <event name="OnEraseBackground"></event>
<property name="default">0</property> <event name="OnKeyDown"></event>
<property name="enabled">1</property> <event name="OnKeyUp"></event>
<property name="fg"></property> <event name="OnKillFocus"></event>
<property name="font"></property> <event name="OnLeaveWindow"></event>
<property name="hidden">0</property> <event name="OnLeftDClick"></event>
<property name="id">wxID_CANCEL</property> <event name="OnLeftDown"></event>
<property name="label">Cancel</property> <event name="OnLeftUp"></event>
<property name="maximum_size"></property> <event name="OnMiddleDClick"></event>
<property name="minimum_size"></property> <event name="OnMiddleDown"></event>
<property name="name">m_button4</property> <event name="OnMiddleUp"></event>
<property name="permission">protected</property> <event name="OnMotion"></event>
<property name="pos"></property> <event name="OnMouseEvents"></event>
<property name="size"></property> <event name="OnMouseWheel"></event>
<property name="style"></property> <event name="OnPaint"></event>
<property name="subclass"></property> <event name="OnRightDClick"></event>
<property name="tooltip"></property> <event name="OnRightDown"></event>
<property name="window_extra_style"></property> <event name="OnRightUp"></event>
<property name="window_name"></property> <event name="OnSetFocus"></event>
<property name="window_style"></property> <event name="OnSize"></event>
<event name="OnButtonClick">OnCancelClick</event> <event name="OnUpdateUI"></event>
<event name="OnChar"></event> </object>
<event name="OnEnterWindow"></event> </object>
<event name="OnEraseBackground"></event> <object class="sizeritem" expanded="1">
<event name="OnKeyDown"></event> <property name="border">5</property>
<event name="OnKeyUp"></event> <property name="flag">wxALL</property>
<event name="OnKillFocus"></event> <property name="proportion">0</property>
<event name="OnLeaveWindow"></event> <object class="wxButton" expanded="1">
<event name="OnLeftDClick"></event> <property name="bg"></property>
<event name="OnLeftDown"></event> <property name="context_help"></property>
<event name="OnLeftUp"></event> <property name="context_menu">1</property>
<event name="OnMiddleDClick"></event> <property name="default">0</property>
<event name="OnMiddleDown"></event> <property name="enabled">1</property>
<event name="OnMiddleUp"></event> <property name="fg"></property>
<event name="OnMotion"></event> <property name="font"></property>
<event name="OnMouseEvents"></event> <property name="hidden">0</property>
<event name="OnMouseWheel"></event> <property name="id">wxID_ANY</property>
<event name="OnPaint"></event> <property name="label">Close</property>
<event name="OnRightDClick"></event> <property name="maximum_size"></property>
<event name="OnRightDown"></event> <property name="minimum_size"></property>
<event name="OnRightUp"></event> <property name="name">m_buttonClose</property>
<event name="OnSetFocus"></event> <property name="permission">protected</property>
<event name="OnSize"></event> <property name="pos"></property>
<event name="OnUpdateUI"></event> <property name="size"></property>
</object> <property name="style"></property>
</object> <property name="subclass"></property>
</object> <property name="tooltip"></property>
</object> <property name="validator_data_type"></property>
</object> <property name="validator_style">wxFILTER_NONE</property>
</object> <property name="validator_type">wxDefaultValidator</property>
</object> <property name="validator_variable"></property>
</wxFormBuilder_Project> <property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnButtonClick">OnCancelClick</event>
<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>
</wxFormBuilder_Project>
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Sep 8 2010)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __dialog_orient_footprints_base__
#define __dialog_orient_footprints_base__
#include <wx/intl.h>
#include <wx/string.h>
#include <wx/stattext.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/textctrl.h>
#include <wx/checkbox.h>
#include <wx/sizer.h>
#include <wx/button.h>
#include <wx/dialog.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class DIALOG_ORIENT_FOOTPRINTS_BASE
///////////////////////////////////////////////////////////////////////////////
class DIALOG_ORIENT_FOOTPRINTS_BASE : public wxDialog
{
private:
protected:
wxStaticText* m_staticText1;
wxTextCtrl* m_OrientationCtrl;
wxStaticText* m_staticText2;
wxTextCtrl* m_FilterPattern;
wxCheckBox* m_ApplyToLocked;
wxButton* m_buttonOK;
wxButton* m_buttonClose;
// Virtual event handlers, overide them in your derived class
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
public:
DIALOG_ORIENT_FOOTPRINTS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Footprints Orientation"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 403,160 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_ORIENT_FOOTPRINTS_BASE();
};
#endif //__dialog_orient_footprints_base__
/*
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 2004-2010 Jean-Pierre Charras <jean-pierre.charras@gpisa-lab.inpg.fr>
* Copyright (C) 2010 Kicad Developers, see change_log.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/***************************************************************************/
/* Dialog editor for text on copper and technical layers (TEXTE_PCB class) */
/***************************************************************************/
#include "dialog_pcb_text_properties.h"
#include "fctsys.h"
#include "gr_basic.h"
#include "common.h"
#include "class_drawpanel.h"
#include "pcbnew.h"
#include "wxPcbStruct.h"
#include "drawtxt.h"
#include "confirm.h"
#include "dialog_helpers.h"
/**
* DIALOG_PCB_TEXT_PROPERTIES, derived from DIALOG_PCB_TEXT_PROPERTIES_BASE
* @see dialog_dialog_pcb_text_properties_base.h and
* dialog_dialog_pcb_text_properties_base.cpp, automatically created by
* wxFormBuilder.
*/
DIALOG_PCB_TEXT_PROPERTIES::DIALOG_PCB_TEXT_PROPERTIES( WinEDA_PcbFrame* parent, TEXTE_PCB* passedTextPCB, wxDC* DC )
: DIALOG_PCB_TEXT_PROPERTIES_BASE( parent )
{
m_Parent = parent;
m_DC = DC;
m_SelectedPCBText = passedTextPCB;
MyInit();
GetSizer()->SetSizeHints( this );
Centre();
}
/**
* Routine for main window class to launch text properties dialog.
*/
void WinEDA_PcbFrame::InstallTextPCBOptionsFrame( TEXTE_PCB* TextPCB, wxDC* DC )
{
DrawPanel->m_IgnoreMouseEvents = TRUE;
DIALOG_PCB_TEXT_PROPERTIES dlg( this, TextPCB, DC );
dlg.ShowModal();
DrawPanel->MouseToCursorSchema();
DrawPanel->m_IgnoreMouseEvents = FALSE;
}
void DIALOG_PCB_TEXT_PROPERTIES::MyInit()
{
SetFocus();
// Put units symbols to text labels where appropriate
AddUnitSymbol( *m_SizeXLabel );
AddUnitSymbol( *m_SizeYLabel );
AddUnitSymbol( *m_ThicknessLabel );
AddUnitSymbol( *m_PositionXLabel );
AddUnitSymbol( *m_PositionYLabel );
// Fill fields with current values
*m_TextContentCtrl << m_SelectedPCBText->m_Text;
PutValueInLocalUnits( *m_SizeXCtrl, m_SelectedPCBText->m_Size.x,
m_Parent->m_InternalUnits );
PutValueInLocalUnits( *m_SizeYCtrl, m_SelectedPCBText->m_Size.y,
m_Parent->m_InternalUnits );
PutValueInLocalUnits( *m_ThicknessCtrl, m_SelectedPCBText->m_Thickness,
m_Parent->m_InternalUnits );
PutValueInLocalUnits( *m_PositionXCtrl, m_SelectedPCBText->m_Pos.x,
m_Parent->m_InternalUnits );
PutValueInLocalUnits( *m_PositionYCtrl, m_SelectedPCBText->m_Pos.y,
m_Parent->m_InternalUnits );
for( int layer = 0; layer < NB_LAYERS; ++layer )
{
m_LayerSelectionCtrl->Append( m_Parent->GetBoard()->GetLayerName( layer ) );
}
m_LayerSelectionCtrl->SetSelection( m_SelectedPCBText->GetLayer() );
switch( m_SelectedPCBText->m_Orient )
{
default:
m_OrientationCtrl->SetSelection( 0 );
break;
case 900:
m_OrientationCtrl->SetSelection( 1 );
break;
case 1800:
m_OrientationCtrl->SetSelection( 2 );
break;
case 2700:
m_OrientationCtrl->SetSelection( 3 );
break;
}
if( m_SelectedPCBText->m_Mirror )
m_DisplayCtrl->SetSelection( 1 );
else
m_DisplayCtrl->SetSelection( 0 );
if( m_SelectedPCBText->m_Italic )
m_StyleCtrl->SetSelection( 1 );
else
m_StyleCtrl->SetSelection( 0 );
// Set focus on most important control
m_TextContentCtrl->SetFocus();
m_TextContentCtrl->SetSelection( -1, -1 );
}
void DIALOG_PCB_TEXT_PROPERTIES::OnCancelClick( wxCommandEvent& event )
{
EndModal( wxID_CANCEL );
}
void DIALOG_PCB_TEXT_PROPERTIES::OnOkClick( wxCommandEvent& event )
{
wxPoint newPosition;
wxSize newSize;
// If no other command in progress, prepare undo command
// (for a command in progress, will be made later, at the completion of command)
if( m_SelectedPCBText->m_Flags == 0 )
m_Parent->SaveCopyInUndoList( m_SelectedPCBText, UR_CHANGED );
/* set flag in edit to force undo/redo/abort proper operation,
* and avoid new calls to SaveCopyInUndoList for the same text
* this can occurs when a text is moved, and then rotated, edited ..
*/
if( m_SelectedPCBText->m_Flags != 0 )
m_SelectedPCBText->m_Flags |= IN_EDIT;
// Erase old text on screen if context is available
if( m_DC )
{
m_SelectedPCBText->Draw( m_Parent->DrawPanel, m_DC, GR_XOR );
}
// Set the new text content
if( !m_TextContentCtrl->GetValue().IsEmpty() )
{
m_SelectedPCBText->m_Text = m_TextContentCtrl->GetValue();
}
// Set PCB Text position
newPosition.x = ReturnValueFromString( g_UserUnit, m_PositionXCtrl->GetValue(), m_Parent->m_InternalUnits );
newPosition.y = ReturnValueFromString( g_UserUnit, m_PositionYCtrl->GetValue(), m_Parent->m_InternalUnits );
m_SelectedPCBText->m_Pos = newPosition;
// Check constraints and set PCB Text size
newSize.x = ReturnValueFromString( g_UserUnit, m_SizeXCtrl->GetValue(), m_Parent->m_InternalUnits );
newSize.y = ReturnValueFromString( g_UserUnit, m_SizeYCtrl->GetValue(), m_Parent->m_InternalUnits );
if( newSize.x < TEXTS_MIN_SIZE )
newSize.x = TEXTS_MIN_SIZE;
if( newSize.y < TEXTS_MIN_SIZE )
newSize.y = TEXTS_MIN_SIZE;
if( newSize.x > TEXTS_MAX_WIDTH )
newSize.x = TEXTS_MAX_WIDTH;
if( newSize.y > TEXTS_MAX_WIDTH )
newSize.y = TEXTS_MAX_WIDTH;
m_SelectedPCBText->m_Size = newSize;
// Set the new thickness
m_SelectedPCBText->m_Thickness = ReturnValueFromString( g_UserUnit, m_ThicknessCtrl->GetValue(), m_Parent->m_InternalUnits );
// Test for acceptable values for thickness and size and clamp if fails
int maxthickness = Clamp_Text_PenSize( m_SelectedPCBText->m_Thickness, m_SelectedPCBText->m_Size );
if( m_SelectedPCBText->m_Thickness > maxthickness )
{
DisplayError(this, _("The text thickness is too large for the text size. It will be clamped"));
m_SelectedPCBText->m_Thickness = maxthickness;
}
// Set the layer on which the PCB text is laying
m_SelectedPCBText->SetLayer( m_LayerSelectionCtrl->GetSelection() );
// Set whether the PCB text is mirrored (faced down from layer face perspective)
m_SelectedPCBText->m_Mirror = (m_DisplayCtrl->GetSelection() == 1) ? true : false;
// Set the text orientation
m_SelectedPCBText->m_Orient = m_OrientationCtrl->GetSelection() * 900;
// Set whether the PCB text is slanted (it is not italics, as italics has additional curves in style)
m_SelectedPCBText->m_Italic = m_StyleCtrl->GetSelection() ? 1 : 0;
// Finally, display new text if there is a context to do so
if( m_DC )
{
m_SelectedPCBText->Draw( m_Parent->DrawPanel, m_DC, GR_OR );
}
m_Parent->OnModify();
EndModal( 1 );
}
#ifndef __dialog_pcb_text_properties__
#define __dialog_pcb_text_properties__
/**
@file
Subclass of DIALOG_PCB_TEXT_PROPERTIES_BASE, which is generated by wxFormBuilder.
*/
#include "dialog_pcb_text_properties_base.h"
//// end generated include
class WinEDA_PcbFrame;
class wxDC;
class TEXTE_PCB;
/** Implementing DIALOG_PCB_TEXT_PROPERTIES_BASE */
class DIALOG_PCB_TEXT_PROPERTIES : public DIALOG_PCB_TEXT_PROPERTIES_BASE
{
private:
WinEDA_PcbFrame* m_Parent;
wxDC* m_DC;
TEXTE_PCB* m_SelectedPCBText;
void MyInit();
protected:
// Handlers for DIALOG_PCB_TEXT_PROPERTIES_BASE events.
void OnCancelClick( wxCommandEvent& event );
void OnOkClick( wxCommandEvent& event );
public:
DIALOG_PCB_TEXT_PROPERTIES( WinEDA_PcbFrame* parent, TEXTE_PCB* passedTextPCB, wxDC* DC );
//// end generated class members
};
#endif // __dialog_pcb_text_properties__
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Sep 8 2010)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "dialog_pcb_text_properties_base.h"
///////////////////////////////////////////////////////////////////////////
DIALOG_PCB_TEXT_PROPERTIES_BASE::DIALOG_PCB_TEXT_PROPERTIES_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize );
wxBoxSizer* bMainSizer;
bMainSizer = new wxBoxSizer( wxVERTICAL );
m_TextLabel = new wxStaticText( this, wxID_ANY, _("Text content:"), wxDefaultPosition, wxDefaultSize, 0 );
m_TextLabel->Wrap( -1 );
bMainSizer->Add( m_TextLabel, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
m_TextContentCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE );
m_TextContentCtrl->SetToolTip( _("Enter the text placed on selected layer.") );
m_TextContentCtrl->SetMinSize( wxSize( 400,60 ) );
bMainSizer->Add( m_TextContentCtrl, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
wxBoxSizer* bSizerLower;
bSizerLower = new wxBoxSizer( wxHORIZONTAL );
wxBoxSizer* bSizerLeft;
bSizerLeft = new wxBoxSizer( wxVERTICAL );
m_SizeXLabel = new wxStaticText( this, wxID_ANY, _("Size X"), wxDefaultPosition, wxDefaultSize, 0 );
m_SizeXLabel->Wrap( -1 );
bSizerLeft->Add( m_SizeXLabel, 0, wxRIGHT|wxLEFT, 5 );
m_SizeXCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
bSizerLeft->Add( m_SizeXCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
m_SizeYLabel = new wxStaticText( this, wxID_ANY, _("Size Y"), wxDefaultPosition, wxDefaultSize, 0 );
m_SizeYLabel->Wrap( -1 );
bSizerLeft->Add( m_SizeYLabel, 0, wxRIGHT|wxLEFT, 5 );
m_SizeYCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
bSizerLeft->Add( m_SizeYCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
m_ThicknessLabel = new wxStaticText( this, wxID_ANY, _("Thickness"), wxDefaultPosition, wxDefaultSize, 0 );
m_ThicknessLabel->Wrap( -1 );
bSizerLeft->Add( m_ThicknessLabel, 0, wxRIGHT|wxLEFT, 5 );
m_ThicknessCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
bSizerLeft->Add( m_ThicknessCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
m_PositionXLabel = new wxStaticText( this, wxID_ANY, _("Position X"), wxDefaultPosition, wxDefaultSize, 0 );
m_PositionXLabel->Wrap( -1 );
bSizerLeft->Add( m_PositionXLabel, 0, wxRIGHT|wxLEFT, 5 );
m_PositionXCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
bSizerLeft->Add( m_PositionXCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_PositionYLabel = new wxStaticText( this, wxID_ANY, _("Position Y"), wxDefaultPosition, wxDefaultSize, 0 );
m_PositionYLabel->Wrap( -1 );
bSizerLeft->Add( m_PositionYLabel, 0, wxRIGHT|wxLEFT, 5 );
m_PositionYCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
bSizerLeft->Add( m_PositionYCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
m_LayerLabel = new wxStaticText( this, wxID_ANY, _("Layer:"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerLabel->Wrap( -1 );
bSizerLeft->Add( m_LayerLabel, 0, wxRIGHT|wxLEFT, 5 );
wxArrayString m_LayerSelectionCtrlChoices;
m_LayerSelectionCtrl = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_LayerSelectionCtrlChoices, 0 );
m_LayerSelectionCtrl->SetSelection( 0 );
m_LayerSelectionCtrl->SetToolTip( _("Select the layer on which text should lay.") );
bSizerLeft->Add( m_LayerSelectionCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
bSizerLower->Add( bSizerLeft, 1, 0, 5 );
wxBoxSizer* bSizerRight;
bSizerRight = new wxBoxSizer( wxVERTICAL );
wxString m_OrientationCtrlChoices[] = { _("0"), _("90"), _("180"), _("-90") };
int m_OrientationCtrlNChoices = sizeof( m_OrientationCtrlChoices ) / sizeof( wxString );
m_OrientationCtrl = new wxRadioBox( this, wxID_ANY, _("Orientation"), wxDefaultPosition, wxDefaultSize, m_OrientationCtrlNChoices, m_OrientationCtrlChoices, 2, wxRA_SPECIFY_COLS );
m_OrientationCtrl->SetSelection( 0 );
bSizerRight->Add( m_OrientationCtrl, 0, wxALL|wxEXPAND, 3 );
wxString m_StyleCtrlChoices[] = { _("Normal"), _("Italic") };
int m_StyleCtrlNChoices = sizeof( m_StyleCtrlChoices ) / sizeof( wxString );
m_StyleCtrl = new wxRadioBox( this, wxID_ANY, _("Style"), wxDefaultPosition, wxDefaultSize, m_StyleCtrlNChoices, m_StyleCtrlChoices, 1, wxRA_SPECIFY_COLS );
m_StyleCtrl->SetSelection( 0 );
bSizerRight->Add( m_StyleCtrl, 0, wxALL|wxEXPAND, 3 );
wxString m_DisplayCtrlChoices[] = { _("Normal"), _("Mirror") };
int m_DisplayCtrlNChoices = sizeof( m_DisplayCtrlChoices ) / sizeof( wxString );
m_DisplayCtrl = new wxRadioBox( this, wxID_ANY, _("Display"), wxDefaultPosition, wxDefaultSize, m_DisplayCtrlNChoices, m_DisplayCtrlChoices, 1, wxRA_SPECIFY_COLS );
m_DisplayCtrl->SetSelection( 0 );
bSizerRight->Add( m_DisplayCtrl, 0, wxALL|wxEXPAND, 3 );
bSizerLower->Add( bSizerRight, 0, 0, 5 );
bMainSizer->Add( bSizerLower, 0, wxEXPAND, 5 );
m_StandardSizer = new wxStdDialogButtonSizer();
m_StandardSizerOK = new wxButton( this, wxID_OK );
m_StandardSizer->AddButton( m_StandardSizerOK );
m_StandardSizerCancel = new wxButton( this, wxID_CANCEL );
m_StandardSizer->AddButton( m_StandardSizerCancel );
m_StandardSizer->Realize();
bMainSizer->Add( m_StandardSizer, 0, wxALIGN_BOTTOM|wxALIGN_RIGHT|wxALL, 5 );
this->SetSizer( bMainSizer );
this->Layout();
this->Centre( wxBOTH );
// Connect Events
m_StandardSizerCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PCB_TEXT_PROPERTIES_BASE::OnCancelClick ), NULL, this );
m_StandardSizerOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PCB_TEXT_PROPERTIES_BASE::OnOkClick ), NULL, this );
}
DIALOG_PCB_TEXT_PROPERTIES_BASE::~DIALOG_PCB_TEXT_PROPERTIES_BASE()
{
// Disconnect Events
m_StandardSizerCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PCB_TEXT_PROPERTIES_BASE::OnCancelClick ), NULL, this );
m_StandardSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PCB_TEXT_PROPERTIES_BASE::OnOkClick ), NULL, this );
}
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project>
<FileVersion major="1" minor="10" />
<object class="Project" expanded="1">
<property name="class_decoration"></property>
<property name="code_generation">C++</property>
<property name="disconnect_events">1</property>
<property name="disconnect_mode">source_name</property>
<property name="disconnect_python_events">0</property>
<property name="encoding">UTF-8</property>
<property name="event_generation">connect</property>
<property name="file">dialog_pcb_text_properties_base</property>
<property name="first_id">1000</property>
<property name="help_provider">none</property>
<property name="internationalize">1</property>
<property name="name">DIALOG_PCB_TEXT_PROPERTIES_BASE</property>
<property name="namespace"></property>
<property name="path">.</property>
<property name="precompiled_header"></property>
<property name="relative_path">1</property>
<property name="skip_python_events">1</property>
<property name="use_enum">0</property>
<property name="use_microsoft_bom">0</property>
<object class="Dialog" expanded="1">
<property name="bg"></property>
<property name="center">wxBOTH</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property>
<property name="event_handler">impl_virtual</property>
<property name="extra_style"></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">-1,-1</property>
<property name="name">DIALOG_PCB_TEXT_PROPERTIES_BASE</property>
<property name="pos"></property>
<property name="size">433,465</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSYSTEM_MENU</property>
<property name="subclass"></property>
<property name="title">Text item properties</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnActivate"></event>
<event name="OnActivateApp"></event>
<event name="OnChar"></event>
<event name="OnClose"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnHibernate"></event>
<event name="OnIconize"></event>
<event name="OnIdle"></event>
<event name="OnInitDialog"></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 class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bMainSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<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="context_menu">0</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">Text content:</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">m_TextLabel</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="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></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">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxTextCtrl" expanded="1">
<property name="bg"></property>
<property name="context_help"></property>
<property name="context_menu">1</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="maxlength">0</property>
<property name="minimum_size">400,60</property>
<property name="name">m_TextContentCtrl</property>
<property name="permission">protected</property>
<property name="pos"></property>
<property name="size"></property>
<property name="style">wxTE_MULTILINE</property>
<property name="subclass"></property>
<property name="tooltip">Enter the text placed on selected layer.</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></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="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizerLower</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag"></property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizerLeft</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxRIGHT|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="bg"></property>
<property name="context_help"></property>
<property name="context_menu">0</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">Size X</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">m_SizeXLabel</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="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></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">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property>
<object class="wxTextCtrl" expanded="1">
<property name="bg"></property>
<property name="context_help"></property>
<property name="context_menu">1</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="maxlength">0</property>
<property name="minimum_size"></property>
<property name="name">m_SizeXCtrl</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="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></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="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxRIGHT|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="bg"></property>
<property name="context_help"></property>
<property name="context_menu">0</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">Size Y</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">m_SizeYLabel</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="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></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">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property>
<object class="wxTextCtrl" expanded="1">
<property name="bg"></property>
<property name="context_help"></property>
<property name="context_menu">1</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="maxlength">0</property>
<property name="minimum_size"></property>
<property name="name">m_SizeYCtrl</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="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></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="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxRIGHT|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="bg"></property>
<property name="context_help"></property>
<property name="context_menu">0</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">Thickness</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">m_ThicknessLabel</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="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></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">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property>
<object class="wxTextCtrl" expanded="1">
<property name="bg"></property>
<property name="context_help"></property>
<property name="context_menu">1</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="maxlength">0</property>
<property name="minimum_size"></property>
<property name="name">m_ThicknessCtrl</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="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></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="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxRIGHT|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="bg"></property>
<property name="context_help"></property>
<property name="context_menu">0</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">Position X</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">m_PositionXLabel</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="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></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">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxTextCtrl" expanded="1">
<property name="bg"></property>
<property name="context_help"></property>
<property name="context_menu">1</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="maxlength">0</property>
<property name="minimum_size"></property>
<property name="name">m_PositionXCtrl</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="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></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="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxRIGHT|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="bg"></property>
<property name="context_help"></property>
<property name="context_menu">0</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">Position Y</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">m_PositionYLabel</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="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></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">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property>
<object class="wxTextCtrl" expanded="1">
<property name="bg"></property>
<property name="context_help"></property>
<property name="context_menu">1</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="maxlength">0</property>
<property name="minimum_size"></property>
<property name="name">m_PositionYCtrl</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="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></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="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxRIGHT|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="bg"></property>
<property name="context_help"></property>
<property name="context_menu">0</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">Layer:</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">m_LayerLabel</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="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></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">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxChoice" expanded="1">
<property name="bg"></property>
<property name="choices"></property>
<property name="context_help"></property>
<property name="context_menu">1</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_LayerSelectionCtrl</property>
<property name="permission">protected</property>
<property name="pos"></property>
<property name="selection">0</property>
<property name="size"></property>
<property name="subclass"></property>
<property name="tooltip">Select the layer on which text should lay.</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnChoice"></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 class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag"></property>
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizerRight</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">3</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxRadioBox" expanded="1">
<property name="bg"></property>
<property name="choices">&quot;0&quot; &quot;90&quot; &quot;180&quot; &quot;-90&quot;</property>
<property name="context_help"></property>
<property name="context_menu">1</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">Orientation</property>
<property name="majorDimension">2</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">m_OrientationCtrl</property>
<property name="permission">protected</property>
<property name="pos"></property>
<property name="selection">0</property>
<property name="size"></property>
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass"></property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></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="OnRadioBox"></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">3</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxRadioBox" expanded="1">
<property name="bg"></property>
<property name="choices">&quot;Normal&quot; &quot;Italic&quot;</property>
<property name="context_help"></property>
<property name="context_menu">1</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">Style</property>
<property name="majorDimension">1</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">m_StyleCtrl</property>
<property name="permission">protected</property>
<property name="pos"></property>
<property name="selection">0</property>
<property name="size"></property>
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass"></property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></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="OnRadioBox"></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">3</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxRadioBox" expanded="1">
<property name="bg"></property>
<property name="choices">&quot;Normal&quot; &quot;Mirror&quot;</property>
<property name="context_help"></property>
<property name="context_menu">1</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">Display</property>
<property name="majorDimension">1</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">m_DisplayCtrl</property>
<property name="permission">protected</property>
<property name="pos"></property>
<property name="selection">0</property>
<property name="size"></property>
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass"></property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></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="OnRadioBox"></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 class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_BOTTOM|wxALIGN_RIGHT|wxALL</property>
<property name="proportion">0</property>
<object class="wxStdDialogButtonSizer" expanded="1">
<property name="Apply">0</property>
<property name="Cancel">1</property>
<property name="ContextHelp">0</property>
<property name="Help">0</property>
<property name="No">0</property>
<property name="OK">1</property>
<property name="Save">0</property>
<property name="Yes">0</property>
<property name="minimum_size"></property>
<property name="name">m_StandardSizer</property>
<property name="permission">protected</property>
<event name="OnApplyButtonClick"></event>
<event name="OnCancelButtonClick">OnCancelClick</event>
<event name="OnContextHelpButtonClick"></event>
<event name="OnHelpButtonClick"></event>
<event name="OnNoButtonClick"></event>
<event name="OnOKButtonClick">OnOkClick</event>
<event name="OnSaveButtonClick"></event>
<event name="OnYesButtonClick"></event>
</object>
</object>
</object>
</object>
</object>
</wxFormBuilder_Project>
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Sep 8 2010)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __dialog_pcb_text_properties_base__
#define __dialog_pcb_text_properties_base__
#include <wx/intl.h>
#include <wx/string.h>
#include <wx/stattext.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/textctrl.h>
#include <wx/choice.h>
#include <wx/sizer.h>
#include <wx/radiobox.h>
#include <wx/button.h>
#include <wx/dialog.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class DIALOG_PCB_TEXT_PROPERTIES_BASE
///////////////////////////////////////////////////////////////////////////////
class DIALOG_PCB_TEXT_PROPERTIES_BASE : public wxDialog
{
private:
protected:
wxStaticText* m_TextLabel;
wxTextCtrl* m_TextContentCtrl;
wxStaticText* m_SizeXLabel;
wxTextCtrl* m_SizeXCtrl;
wxStaticText* m_SizeYLabel;
wxTextCtrl* m_SizeYCtrl;
wxStaticText* m_ThicknessLabel;
wxTextCtrl* m_ThicknessCtrl;
wxStaticText* m_PositionXLabel;
wxTextCtrl* m_PositionXCtrl;
wxStaticText* m_PositionYLabel;
wxTextCtrl* m_PositionYCtrl;
wxStaticText* m_LayerLabel;
wxChoice* m_LayerSelectionCtrl;
wxRadioBox* m_OrientationCtrl;
wxRadioBox* m_StyleCtrl;
wxRadioBox* m_DisplayCtrl;
wxStdDialogButtonSizer* m_StandardSizer;
wxButton* m_StandardSizerOK;
wxButton* m_StandardSizerCancel;
// Virtual event handlers, overide them in your derived class
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
public:
DIALOG_PCB_TEXT_PROPERTIES_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Text item properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 433,465 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSYSTEM_MENU );
~DIALOG_PCB_TEXT_PROPERTIES_BASE();
};
#endif //__dialog_pcb_text_properties_base__
...@@ -171,7 +171,7 @@ void DIMENSION_EDITOR_DIALOG::OnOkClick( wxCommandEvent& event ) ...@@ -171,7 +171,7 @@ void DIMENSION_EDITOR_DIALOG::OnOkClick( wxCommandEvent& event )
_( "The text thickness is too large for the text size. It will be clamped") ); _( "The text thickness is too large for the text size. It will be clamped") );
width = maxthickness; width = maxthickness;
} }
CurrentDimension->m_Text->m_Width = CurrentDimension->m_Width = width ; CurrentDimension->m_Text->m_Thickness = CurrentDimension->m_Width = width ;
CurrentDimension->m_Text->m_Mirror = ( m_Mirror->GetSelection() == 1 ) ? true : false; CurrentDimension->m_Text->m_Mirror = ( m_Mirror->GetSelection() == 1 ) ? true : false;
...@@ -260,7 +260,7 @@ DIMENSION* WinEDA_PcbFrame::Begin_Dimension( DIMENSION* Dimension, wxDC* DC ) ...@@ -260,7 +260,7 @@ DIMENSION* WinEDA_PcbFrame::Begin_Dimension( DIMENSION* Dimension, wxDC* DC )
{ {
width = maxthickness; width = maxthickness;
} }
Dimension->m_Text->m_Width = Dimension->m_Width = width ; Dimension->m_Text->m_Thickness = Dimension->m_Width = width ;
Dimension->AdjustDimensionDetails( ); Dimension->AdjustDimensionDetails( );
......
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
#include "wxPcbStruct.h" #include "wxPcbStruct.h"
#include "module_editor_frame.h" #include "module_editor_frame.h"
#include "class_board_design_settings.h" #include "class_board_design_settings.h"
#include "autorout.h"
#include "protos.h" #include "protos.h"
#include "dialog_drc.h" #include "dialog_drc.h"
......
...@@ -165,7 +165,7 @@ TEXTE_PCB* WinEDA_PcbFrame::Create_Texte_Pcb( wxDC* DC ) ...@@ -165,7 +165,7 @@ TEXTE_PCB* WinEDA_PcbFrame::Create_Texte_Pcb( wxDC* DC )
TextePcb->m_Size = GetBoard()->GetBoardDesignSettings()->m_PcbTextSize; TextePcb->m_Size = GetBoard()->GetBoardDesignSettings()->m_PcbTextSize;
TextePcb->m_Pos = GetScreen()->m_Curseur; TextePcb->m_Pos = GetScreen()->m_Curseur;
TextePcb->m_Width = GetBoard()->GetBoardDesignSettings()->m_PcbTextWidth; TextePcb->m_Thickness = GetBoard()->GetBoardDesignSettings()->m_PcbTextWidth;
InstallTextPCBOptionsFrame( TextePcb, DC ); InstallTextPCBOptionsFrame( TextePcb, DC );
if( TextePcb->m_Text.IsEmpty() ) if( TextePcb->m_Text.IsEmpty() )
......
...@@ -49,7 +49,7 @@ TEXTE_MODULE* WinEDA_BasePcbFrame::CreateTextModule( MODULE* Module, wxDC* DC ) ...@@ -49,7 +49,7 @@ TEXTE_MODULE* WinEDA_BasePcbFrame::CreateTextModule( MODULE* Module, wxDC* DC )
MIN( g_ModuleTextSize.x, MIN( g_ModuleTextSize.x,
g_ModuleTextSize.y ), true ); g_ModuleTextSize.y ), true );
Text->m_Size = g_ModuleTextSize; Text->m_Size = g_ModuleTextSize;
Text->m_Width = g_ModuleTextWidth; Text->m_Thickness = g_ModuleTextWidth;
Text->m_Pos = GetScreen()->m_Curseur; Text->m_Pos = GetScreen()->m_Curseur;
Text->SetLocalCoord(); Text->SetLocalCoord();
......
#include "fctsys.h" #include "fctsys.h"
#include "common.h" #include "common.h"
#include "confirm.h" #include "confirm.h"
#include "kicad_string.h" #include "kicad_string.h"
#include "gestfich.h" #include "gestfich.h"
#include "pcbnew.h" #include "pcbnew.h"
#include "wxPcbStruct.h" #include "wxPcbStruct.h"
#include "drawtxt.h" #include "drawtxt.h"
#include "trigo.h" #include "trigo.h"
#include "appl_wxstruct.h" #include "appl_wxstruct.h"
#include "3d_struct.h" #include "3d_struct.h"
#include <vector> #include <vector>
#include <cmath> #include <cmath>
/* the dialog to create VRML files, derived from DIALOG_EXPORT_3DFILE_BASE, /* the dialog to create VRML files, derived from DIALOG_EXPORT_3DFILE_BASE,
* created by wxFormBuilder * created by wxFormBuilder
*/ */
#include "dialog_export_3Dfiles_base.h" // the wxFormBuilder header file #include "dialog_export_3Dfiles_base.h" // the wxFormBuilder header file
#define OPTKEY_OUTPUT_UNIT wxT("VrmlExportUnit" ) #define OPTKEY_OUTPUT_UNIT wxT("VrmlExportUnit" )
#define OPTKEY_3DFILES_OPT wxT("VrmlExport3DShapeFilesOpt" ) #define OPTKEY_3DFILES_OPT wxT("VrmlExport3DShapeFilesOpt" )
class DIALOG_EXPORT_3DFILE : public DIALOG_EXPORT_3DFILE_BASE class DIALOG_EXPORT_3DFILE : public DIALOG_EXPORT_3DFILE_BASE
{ {
private: private:
WinEDA_PcbFrame* m_parent; WinEDA_PcbFrame* m_parent;
wxConfig* m_config; wxConfig* m_config;
int m_unitsOpt; // to remember last option int m_unitsOpt; // to remember last option
int m_3DFilesOpt; // to remember last option int m_3DFilesOpt; // to remember last option
virtual void OnCancelClick( wxCommandEvent& event ){ EndModal( wxID_CANCEL ); } virtual void OnCancelClick( wxCommandEvent& event ){ EndModal( wxID_CANCEL ); }
virtual void OnOkClick( wxCommandEvent& event ){ EndModal( wxID_OK ); } virtual void OnOkClick( wxCommandEvent& event ){ EndModal( wxID_OK ); }
public: public:
DIALOG_EXPORT_3DFILE( WinEDA_PcbFrame* parent ) : DIALOG_EXPORT_3DFILE( WinEDA_PcbFrame* parent ) :
DIALOG_EXPORT_3DFILE_BASE( parent ) DIALOG_EXPORT_3DFILE_BASE( parent )
{ {
m_parent = parent; m_parent = parent;
m_config = wxGetApp().m_EDA_Config; m_config = wxGetApp().m_EDA_Config;
SetFocus(); SetFocus();
m_config->Read( OPTKEY_OUTPUT_UNIT, &m_unitsOpt ); m_config->Read( OPTKEY_OUTPUT_UNIT, &m_unitsOpt );
m_config->Read( OPTKEY_3DFILES_OPT, &m_3DFilesOpt ); m_config->Read( OPTKEY_3DFILES_OPT, &m_3DFilesOpt );
m_rbSelectUnits->SetSelection(m_unitsOpt); m_rbSelectUnits->SetSelection(m_unitsOpt);
m_rb3DFilesOption->SetSelection(m_3DFilesOpt); m_rb3DFilesOption->SetSelection(m_3DFilesOpt);
GetSizer()->SetSizeHints( this ); GetSizer()->SetSizeHints( this );
Centre(); Centre();
} }
~DIALOG_EXPORT_3DFILE() ~DIALOG_EXPORT_3DFILE()
{ {
m_unitsOpt = GetUnits( ); m_unitsOpt = GetUnits( );
m_3DFilesOpt = Get3DFilesOption( ); m_3DFilesOpt = Get3DFilesOption( );
m_config->Write( OPTKEY_OUTPUT_UNIT, m_unitsOpt ); m_config->Write( OPTKEY_OUTPUT_UNIT, m_unitsOpt );
m_config->Write( OPTKEY_3DFILES_OPT, m_3DFilesOpt ); m_config->Write( OPTKEY_3DFILES_OPT, m_3DFilesOpt );
}; };
void SetSubdir( const wxString & aDir ) void SetSubdir( const wxString & aDir )
{ {
m_SubdirNameCtrl->SetValue( aDir); m_SubdirNameCtrl->SetValue( aDir);
} }
wxString GetSubdir( ) wxString GetSubdir( )
{ {
return m_SubdirNameCtrl->GetValue( ); return m_SubdirNameCtrl->GetValue( );
} }
wxFilePickerCtrl* FilePicker() wxFilePickerCtrl* FilePicker()
{ {
return m_filePicker; return m_filePicker;
} }
int GetUnits( ) int GetUnits( )
{ {
return m_unitsOpt = m_rbSelectUnits->GetSelection(); return m_unitsOpt = m_rbSelectUnits->GetSelection();
} }
int Get3DFilesOption( ) int Get3DFilesOption( )
{ {
return m_3DFilesOpt = m_rb3DFilesOption->GetSelection(); return m_3DFilesOpt = m_rb3DFilesOption->GetSelection();
} }
}; };
/* I use this a lot... */ /* I use this a lot... */
static const double PI2 = M_PI / 2; static const double PI2 = M_PI / 2;
/* Absolutely not optimized triangle bag :D */ /* Absolutely not optimized triangle bag :D */
struct VRMLPt struct VRMLPt
{ {
double x, y, z; double x, y, z;
}; };
struct FlatPt struct FlatPt
{ {
FlatPt( double _x = 0, double _y = 0 ) : x( _x ), y( _y ) { } FlatPt( double _x = 0, double _y = 0 ) : x( _x ), y( _y ) { }
double x, y; double x, y;
}; };
struct Triangle struct Triangle
{ {
Triangle( double x1, double y1, double z1, Triangle( double x1, double y1, double z1,
double x2, double y2, double z2, double x2, double y2, double z2,
double x3, double y3, double z3 ) double x3, double y3, double z3 )
{ {
p1.x = x1; p1.y = y1; p1.z = z1; p1.x = x1; p1.y = y1; p1.z = z1;
p2.x = x2; p2.y = y2; p2.z = z2; p2.x = x2; p2.y = y2; p2.z = z2;
p3.x = x3; p3.y = y3; p3.z = z3; p3.x = x3; p3.y = y3; p3.z = z3;
} }
Triangle() { } Triangle() { }
VRMLPt p1, p2, p3; VRMLPt p1, p2, p3;
}; };
typedef std::vector<Triangle> TriangleBag; typedef std::vector<Triangle> TriangleBag;
/* A flat triangle fan */ /* A flat triangle fan */
struct FlatFan struct FlatFan
{ {
FlatPt c; FlatPt c;
std::vector<FlatPt> pts; std::vector<FlatPt> pts;
void add( double x, double y ) void add( double x, double y )
{ {
pts.push_back( FlatPt( x, y ) ); pts.push_back( FlatPt( x, y ) );
} }
void bag( int layer, bool close = true ); void bag( int layer, bool close = true );
}; };
/* A flat quad ring */ /* A flat quad ring */
struct FlatRing struct FlatRing
{ {
std::vector<FlatPt> inner; std::vector<FlatPt> inner;
std::vector<FlatPt> outer; std::vector<FlatPt> outer;
void add_inner( double x, double y ) void add_inner( double x, double y )
{ {
inner.push_back( FlatPt( x, y ) ); inner.push_back( FlatPt( x, y ) );
} }
void add_outer( double x, double y ) void add_outer( double x, double y )
{ {
outer.push_back( FlatPt( x, y ) ); outer.push_back( FlatPt( x, y ) );
} }
void bag( int layer, bool close = true ); void bag( int layer, bool close = true );
}; };
/* A vertical quad loop */ /* A vertical quad loop */
struct VLoop struct VLoop
{ {
std::vector<FlatPt> pts; std::vector<FlatPt> pts;
double z_top, z_bottom; double z_top, z_bottom;
void add( double x, double y ) void add( double x, double y )
{ {
pts.push_back( FlatPt( x, y ) ); pts.push_back( FlatPt( x, y ) );
} }
void bag( TriangleBag& triangles, bool close = true ); void bag( TriangleBag& triangles, bool close = true );
}; };
/* The bags for all the layers */ /* The bags for all the layers */
static TriangleBag layer_triangles[LAYER_COUNT]; static TriangleBag layer_triangles[LAYER_COUNT];
static TriangleBag via_triangles[4]; static TriangleBag via_triangles[4];
static double layer_z[LAYER_COUNT]; static double layer_z[LAYER_COUNT];
static void bag_flat_triangle( int layer, /*{{{*/ static void bag_flat_triangle( int layer, /*{{{*/
double x1, double y1, double x1, double y1,
double x2, double y2, double x2, double y2,
double x3, double y3 ) double x3, double y3 )
{ {
double z = layer_z[layer]; double z = layer_z[layer];
layer_triangles[layer].push_back( Triangle( x1, y1, z, layer_triangles[layer].push_back( Triangle( x1, y1, z,
x2, y2, z, x3, y3, z ) ); x2, y2, z, x3, y3, z ) );
} }
void FlatFan::bag( int layer, bool close ) /*{{{*/ void FlatFan::bag( int layer, bool close ) /*{{{*/
{ {
unsigned i; unsigned i;
for( i = 0; i < pts.size() - 1; i++ ) for( i = 0; i < pts.size() - 1; i++ )
bag_flat_triangle( layer, c.x, c.y, pts[i].x, pts[i].y, bag_flat_triangle( layer, c.x, c.y, pts[i].x, pts[i].y,
pts[i + 1].x, pts[i + 1].y ); pts[i + 1].x, pts[i + 1].y );
if( close ) if( close )
bag_flat_triangle( layer, c.x, c.y, pts[i].x, pts[i].y, bag_flat_triangle( layer, c.x, c.y, pts[i].x, pts[i].y,
pts[0].x, pts[0].y ); pts[0].x, pts[0].y );
} }
static void bag_flat_quad( int layer, /*{{{*/ static void bag_flat_quad( int layer, /*{{{*/
double x1, double y1, double x1, double y1,
double x2, double y2, double x2, double y2,
double x3, double y3, double x3, double y3,
double x4, double y4 ) double x4, double y4 )
{ {
bag_flat_triangle( layer, x1, y1, x3, y3, x2, y2 ); bag_flat_triangle( layer, x1, y1, x3, y3, x2, y2 );
bag_flat_triangle( layer, x2, y2, x3, y3, x4, y4 ); bag_flat_triangle( layer, x2, y2, x3, y3, x4, y4 );
} }
void FlatRing::bag( int layer, bool close ) /*{{{*/ void FlatRing::bag( int layer, bool close ) /*{{{*/
{ {
unsigned i; unsigned i;
for( i = 0; i < inner.size() - 1; i++ ) for( i = 0; i < inner.size() - 1; i++ )
bag_flat_quad( layer, bag_flat_quad( layer,
inner[i].x, inner[i].y, inner[i].x, inner[i].y,
outer[i].x, outer[i].y, outer[i].x, outer[i].y,
inner[i + 1].x, inner[i + 1].y, inner[i + 1].x, inner[i + 1].y,
outer[i + 1].x, outer[i + 1].y ); outer[i + 1].x, outer[i + 1].y );
if( close ) if( close )
bag_flat_quad( layer, bag_flat_quad( layer,
inner[i].x, inner[i].y, inner[i].x, inner[i].y,
outer[i].x, outer[i].y, outer[i].x, outer[i].y,
inner[0].x, inner[0].y, inner[0].x, inner[0].y,
outer[0].x, outer[0].y ); outer[0].x, outer[0].y );
} }
static void bag_vquad( TriangleBag& triangles, /*{{{*/ static void bag_vquad( TriangleBag& triangles, /*{{{*/
double x1, double y1, double x2, double y2, double x1, double y1, double x2, double y2,
double z1, double z2 ) double z1, double z2 )
{ {
triangles.push_back( Triangle( triangles.push_back( Triangle(
x1, y1, z1, x1, y1, z1,
x2, y2, z1, x2, y2, z1,
x2, y2, z2 ) ); x2, y2, z2 ) );
triangles.push_back( Triangle( triangles.push_back( Triangle(
x1, y1, z1, x1, y1, z1,
x2, y2, z2, x2, y2, z2,
x1, y1, z2 ) ); x1, y1, z2 ) );
} }
void VLoop::bag( TriangleBag& triangles, bool close ) /*{{{*/ void VLoop::bag( TriangleBag& triangles, bool close ) /*{{{*/
{ {
unsigned i; unsigned i;
for( i = 0; i < pts.size() - 1; i++ ) for( i = 0; i < pts.size() - 1; i++ )
bag_vquad( triangles, pts[i].x, pts[i].y, bag_vquad( triangles, pts[i].x, pts[i].y,
pts[i + 1].x, pts[i + 1].y, pts[i + 1].x, pts[i + 1].y,
z_top, z_bottom ); z_top, z_bottom );
if( close ) if( close )
bag_vquad( triangles, pts[i].x, pts[i].y, bag_vquad( triangles, pts[i].x, pts[i].y,
pts[0].x, pts[0].y, pts[0].x, pts[0].y,
z_top, z_bottom ); z_top, z_bottom );
} }
static void write_triangle_bag( FILE* output_file, int color_index, /*{{{*/ static void write_triangle_bag( FILE* output_file, int color_index, /*{{{*/
const TriangleBag& triangles ) const TriangleBag& triangles )
{ {
/* A lot of nodes are not required, but blender sometimes chokes /* A lot of nodes are not required, but blender sometimes chokes
* without them */ * without them */
static const char* shape_boiler[] = static const char* shape_boiler[] =
{ {
"Transform {\n", "Transform {\n",
" translation 0.0 0.0 0.0\n", " translation 0.0 0.0 0.0\n",
" rotation 1.0 0.0 0.0 0.0\n", " rotation 1.0 0.0 0.0 0.0\n",
" scale 1.0 1.0 1.0\n", " scale 1.0 1.0 1.0\n",
" children [\n", " children [\n",
" Group {\n", " Group {\n",
" children [\n", " children [\n",
" Shape {\n", " Shape {\n",
" appearance Appearance {\n", " appearance Appearance {\n",
" material Material {\n", " material Material {\n",
0, /* Material marker */ 0, /* Material marker */
" ambientIntensity 0.8\n", " ambientIntensity 0.8\n",
" transparency 0.2\n", " transparency 0.2\n",
" shininess 0.2\n", " shininess 0.2\n",
" }\n", " }\n",
" }\n", " }\n",
" geometry IndexedFaceSet {\n", " geometry IndexedFaceSet {\n",
" solid TRUE\n", " solid TRUE\n",
" coord Coordinate {\n", " coord Coordinate {\n",
" point [\n", " point [\n",
0, /* Coordinates marker */ 0, /* Coordinates marker */
" ]\n", " ]\n",
" }\n", " }\n",
" coordIndex [\n", " coordIndex [\n",
0, /* Index marker */ 0, /* Index marker */
" ]\n", " ]\n",
" }\n", " }\n",
" }\n", " }\n",
" ]\n", " ]\n",
" }\n", " }\n",
" ]\n", " ]\n",
"}\n", "}\n",
0 /* End marker */ 0 /* End marker */
}; };
int marker_found = 0, lineno = 0; int marker_found = 0, lineno = 0;
while( marker_found < 4 ) while( marker_found < 4 )
{ {
if( shape_boiler[lineno] ) if( shape_boiler[lineno] )
fputs( shape_boiler[lineno], output_file ); fputs( shape_boiler[lineno], output_file );
else else
{ {
marker_found++; marker_found++;
switch( marker_found ) switch( marker_found )
{ {
case 1: /* Material marker */ case 1: /* Material marker */
fprintf( output_file, fprintf( output_file,
" diffuseColor %g %g %g\n", " diffuseColor %g %g %g\n",
(double) ColorRefs[color_index].m_Red / 255.0, (double) ColorRefs[color_index].m_Red / 255.0,
(double) ColorRefs[color_index].m_Green / 255.0, (double) ColorRefs[color_index].m_Green / 255.0,
(double) ColorRefs[color_index].m_Blue / 255.0 ); (double) ColorRefs[color_index].m_Blue / 255.0 );
fprintf( output_file, fprintf( output_file,
" specularColor %g %g %g\n", " specularColor %g %g %g\n",
(double) ColorRefs[color_index].m_Red / 255.0, (double) ColorRefs[color_index].m_Red / 255.0,
(double) ColorRefs[color_index].m_Green / 255.0, (double) ColorRefs[color_index].m_Green / 255.0,
(double) ColorRefs[color_index].m_Blue / 255.0 ); (double) ColorRefs[color_index].m_Blue / 255.0 );
fprintf( output_file, fprintf( output_file,
" emissiveColor %g %g %g\n", " emissiveColor %g %g %g\n",
(double) ColorRefs[color_index].m_Red / 255.0, (double) ColorRefs[color_index].m_Red / 255.0,
(double) ColorRefs[color_index].m_Green / 255.0, (double) ColorRefs[color_index].m_Green / 255.0,
(double) ColorRefs[color_index].m_Blue / 255.0 ); (double) ColorRefs[color_index].m_Blue / 255.0 );
break; break;
case 2: case 2:
{ {
/* Coordinates marker */ /* Coordinates marker */
for( TriangleBag::const_iterator i = triangles.begin(); for( TriangleBag::const_iterator i = triangles.begin();
i != triangles.end(); i != triangles.end();
i++ ) i++ )
{ {
fprintf( output_file, "%g %g %g\n", fprintf( output_file, "%g %g %g\n",
i->p1.x, -i->p1.y, i->p1.z ); i->p1.x, -i->p1.y, i->p1.z );
fprintf( output_file, "%g %g %g\n", fprintf( output_file, "%g %g %g\n",
i->p2.x, -i->p2.y, i->p2.z ); i->p2.x, -i->p2.y, i->p2.z );
fprintf( output_file, "%g %g %g\n", fprintf( output_file, "%g %g %g\n",
i->p3.x, -i->p3.y, i->p3.z ); i->p3.x, -i->p3.y, i->p3.z );
} }
} }
break; break;
case 3: case 3:
{ {
/* Index marker */ /* Index marker */
/* OK, that's sick ... */ /* OK, that's sick ... */
int j = 0; int j = 0;
for( TriangleBag::const_iterator i = triangles.begin(); for( TriangleBag::const_iterator i = triangles.begin();
i != triangles.end(); i != triangles.end();
i++ ) i++ )
{ {
fprintf( output_file, "%d %d %d -1\n", fprintf( output_file, "%d %d %d -1\n",
j, j + 1, j + 2 ); j, j + 1, j + 2 );
j += 3; j += 3;
} }
} }
break; break;
default: default:
break; break;
} }
} }
lineno++; lineno++;
} }
} }
static void compute_layer_Zs( BOARD* pcb ) /*{{{*/ static void compute_layer_Zs( BOARD* pcb ) /*{{{*/
{ {
int copper_layers = pcb->GetCopperLayerCount( ); int copper_layers = pcb->GetCopperLayerCount( );
// We call it 'layer' thickness, but it's the whole board thickness! // We call it 'layer' thickness, but it's the whole board thickness!
double board_thickness = pcb->GetBoardDesignSettings()->m_BoardThickness; double board_thickness = pcb->GetBoardDesignSettings()->m_BoardThickness;
double half_thickness = board_thickness / 2; double half_thickness = board_thickness / 2;
/* Compute each layer's Z value, more or less like the 3d view */ /* Compute each layer's Z value, more or less like the 3d view */
for( int i = 0; i <= LAYER_N_FRONT; i++ ) for( int i = 0; i <= LAYER_N_FRONT; i++ )
{ {
if( i < copper_layers ) if( i < copper_layers )
layer_z[i] = board_thickness * i / (copper_layers - 1) - half_thickness; layer_z[i] = board_thickness * i / (copper_layers - 1) - half_thickness;
else else
layer_z[i] = half_thickness; /* The component layer... */ layer_z[i] = half_thickness; /* The component layer... */
} }
/* To avoid rounding interference, we apply an epsilon to each /* To avoid rounding interference, we apply an epsilon to each
* successive layer */ * successive layer */
const double epsilon_z = 10; /* That's 1 mils, about 1/50 mm */ const double epsilon_z = 10; /* That's 1 mils, about 1/50 mm */
layer_z[SOLDERPASTE_N_BACK] = -half_thickness - epsilon_z * 4; layer_z[SOLDERPASTE_N_BACK] = -half_thickness - epsilon_z * 4;
layer_z[ADHESIVE_N_BACK] = -half_thickness - epsilon_z * 3; layer_z[ADHESIVE_N_BACK] = -half_thickness - epsilon_z * 3;
layer_z[SILKSCREEN_N_BACK] = -half_thickness - epsilon_z * 2; layer_z[SILKSCREEN_N_BACK] = -half_thickness - epsilon_z * 2;
layer_z[SOLDERMASK_N_BACK] = -half_thickness - epsilon_z; layer_z[SOLDERMASK_N_BACK] = -half_thickness - epsilon_z;
layer_z[SOLDERMASK_N_FRONT] = half_thickness + epsilon_z; layer_z[SOLDERMASK_N_FRONT] = half_thickness + epsilon_z;
layer_z[SILKSCREEN_N_FRONT] = half_thickness + epsilon_z * 2; layer_z[SILKSCREEN_N_FRONT] = half_thickness + epsilon_z * 2;
layer_z[ADHESIVE_N_FRONT] = half_thickness + epsilon_z * 3; layer_z[ADHESIVE_N_FRONT] = half_thickness + epsilon_z * 3;
layer_z[SOLDERPASTE_N_FRONT] = half_thickness + epsilon_z * 4; layer_z[SOLDERPASTE_N_FRONT] = half_thickness + epsilon_z * 4;
layer_z[DRAW_N] = half_thickness + epsilon_z * 5; layer_z[DRAW_N] = half_thickness + epsilon_z * 5;
layer_z[COMMENT_N] = half_thickness + epsilon_z * 6; layer_z[COMMENT_N] = half_thickness + epsilon_z * 6;
layer_z[ECO1_N] = half_thickness + epsilon_z * 7; layer_z[ECO1_N] = half_thickness + epsilon_z * 7;
layer_z[ECO2_N] = half_thickness + epsilon_z * 8; layer_z[ECO2_N] = half_thickness + epsilon_z * 8;
layer_z[EDGE_N] = 0; layer_z[EDGE_N] = 0;
} }
static void export_vrml_line( int layer, double startx, double starty, /*{{{*/ static void export_vrml_line( int layer, double startx, double starty, /*{{{*/
double endx, double endy, double width, int divisions ) double endx, double endy, double width, int divisions )
{ {
double r = width / 2; double r = width / 2;
double angle = atan2( endy - starty, endx - startx ); double angle = atan2( endy - starty, endx - startx );
double alpha; double alpha;
FlatFan fan; FlatFan fan;
/* Output the 'bone' as a triangle fan, this is the fan centre */ /* Output the 'bone' as a triangle fan, this is the fan centre */
fan.c.x = (startx + endx) / 2; fan.c.x = (startx + endx) / 2;
fan.c.y = (starty + endy) / 2; fan.c.y = (starty + endy) / 2;
/* The 'end' side cap */ /* The 'end' side cap */
for( alpha = angle - PI2; alpha < angle + PI2; alpha += PI2 / divisions ) for( alpha = angle - PI2; alpha < angle + PI2; alpha += PI2 / divisions )
fan.add( endx + r * cos( alpha ), endy + r * sin( alpha ) ); fan.add( endx + r * cos( alpha ), endy + r * sin( alpha ) );
alpha = angle + PI2; alpha = angle + PI2;
fan.add( endx + r * cos( alpha ), endy + r * sin( alpha ) ); fan.add( endx + r * cos( alpha ), endy + r * sin( alpha ) );
/* The 'start' side cap */ /* The 'start' side cap */
for( alpha = angle + PI2; alpha < angle + 3 * PI2; alpha += PI2 / divisions ) for( alpha = angle + PI2; alpha < angle + 3 * PI2; alpha += PI2 / divisions )
fan.add( startx + r * cos( alpha ), starty + r * sin( alpha ) ); fan.add( startx + r * cos( alpha ), starty + r * sin( alpha ) );
alpha = angle + 3 * PI2; alpha = angle + 3 * PI2;
fan.add( startx + r * cos( alpha ), starty + r * sin( alpha ) ); fan.add( startx + r * cos( alpha ), starty + r * sin( alpha ) );
/* Export the fan */ /* Export the fan */
fan.bag( layer ); fan.bag( layer );
} }
static void export_vrml_circle( int layer, double startx, double starty, /*{{{*/ static void export_vrml_circle( int layer, double startx, double starty, /*{{{*/
double endx, double endy, double width, int divisions ) double endx, double endy, double width, int divisions )
{ {
double hole, rayon; double hole, rayon;
FlatRing ring; FlatRing ring;
rayon = hypot( startx - endx, starty - endy ) + ( width / 2); rayon = hypot( startx - endx, starty - endy ) + ( width / 2);
hole = rayon - width; hole = rayon - width;
for( double alpha = 0; alpha < M_PI * 2; alpha += M_PI * 2 / divisions ) for( double alpha = 0; alpha < M_PI * 2; alpha += M_PI * 2 / divisions )
{ {
ring.add_inner( startx + hole * cos( alpha ), starty + hole * sin( alpha ) ); ring.add_inner( startx + hole * cos( alpha ), starty + hole * sin( alpha ) );
ring.add_outer( startx + rayon * cos( alpha ), starty + rayon * sin( alpha ) ); ring.add_outer( startx + rayon * cos( alpha ), starty + rayon * sin( alpha ) );
} }
ring.bag( layer ); ring.bag( layer );
} }
static void export_vrml_slot( TriangleBag& triangles, /*{{{*/ static void export_vrml_slot( TriangleBag& triangles, /*{{{*/
int top_layer, int bottom_layer, double xc, double yc, int top_layer, int bottom_layer, double xc, double yc,
double dx, double dy, int orient, int divisions ) double dx, double dy, int orient, int divisions )
{ {
double capx, capy; /* Cap center */ double capx, capy; /* Cap center */
VLoop loop; VLoop loop;
loop.z_top = layer_z[top_layer]; loop.z_top = layer_z[top_layer];
loop.z_bottom = layer_z[bottom_layer]; loop.z_bottom = layer_z[bottom_layer];
double angle = orient / 1800.0 * M_PI; double angle = orient / 1800.0 * M_PI;
if( dy > dx ) if( dy > dx )
{ {
EXCHG( dx, dy ); EXCHG( dx, dy );
angle += PI2; angle += PI2;
} }
/* The exchange above means that cutter radius is alvays dy/2 */ /* The exchange above means that cutter radius is alvays dy/2 */
double r = dy / 2; double r = dy / 2;
double alpha; double alpha;
/* The first side cap */ /* The first side cap */
capx = xc + cos( angle ) * dx / 2; capx = xc + cos( angle ) * dx / 2;
capy = yc + sin( angle ) * dx / 2; capy = yc + sin( angle ) * dx / 2;
for( alpha = angle - PI2; alpha < angle + PI2; alpha += PI2 / divisions ) for( alpha = angle - PI2; alpha < angle + PI2; alpha += PI2 / divisions )
loop.add( capx + r * cos( alpha ), capy + r * sin( alpha ) ); loop.add( capx + r * cos( alpha ), capy + r * sin( alpha ) );
alpha = angle + PI2; alpha = angle + PI2;
loop.add( capx + r * cos( alpha ), capy + r * sin( alpha ) ); loop.add( capx + r * cos( alpha ), capy + r * sin( alpha ) );
/* The other side cap */ /* The other side cap */
capx = xc - cos( angle ) * dx / 2; capx = xc - cos( angle ) * dx / 2;
capy = yc - sin( angle ) * dx / 2; capy = yc - sin( angle ) * dx / 2;
for( alpha = angle + PI2; alpha < angle + 3 * PI2; alpha += PI2 / divisions ) for( alpha = angle + PI2; alpha < angle + 3 * PI2; alpha += PI2 / divisions )
loop.add( capx + r * cos( alpha ), capy + r * sin( alpha ) ); loop.add( capx + r * cos( alpha ), capy + r * sin( alpha ) );
alpha = angle + 3 * PI2; alpha = angle + 3 * PI2;
loop.add( capx + r * cos( alpha ), capy + r * sin( alpha ) ); loop.add( capx + r * cos( alpha ), capy + r * sin( alpha ) );
loop.bag( triangles ); loop.bag( triangles );
} }
static void export_vrml_hole( TriangleBag& triangles, /*{{{*/ static void export_vrml_hole( TriangleBag& triangles, /*{{{*/
int top_layer, int bottom_layer, double xc, double yc, double hole, int top_layer, int bottom_layer, double xc, double yc, double hole,
int divisions ) int divisions )
{ {
VLoop loop; VLoop loop;
loop.z_top = layer_z[top_layer]; loop.z_top = layer_z[top_layer];
loop.z_bottom = layer_z[bottom_layer]; loop.z_bottom = layer_z[bottom_layer];
for( double alpha = 0; alpha < M_PI * 2; alpha += M_PI * 2 / divisions ) for( double alpha = 0; alpha < M_PI * 2; alpha += M_PI * 2 / divisions )
loop.add( xc + cos( alpha ) * hole, yc + sin( alpha ) * hole ); loop.add( xc + cos( alpha ) * hole, yc + sin( alpha ) * hole );
loop.bag( triangles ); loop.bag( triangles );
} }
static void export_vrml_varc( TriangleBag& triangles, /*{{{*/ static void export_vrml_varc( TriangleBag& triangles, /*{{{*/
int top_layer, int bottom_layer, double startx, double starty, int top_layer, int bottom_layer, double startx, double starty,
double endx, double endy, int divisions ) double endx, double endy, int divisions )
{ {
VLoop loop; VLoop loop;
loop.z_top = layer_z[top_layer]; loop.z_top = layer_z[top_layer];
loop.z_bottom = layer_z[bottom_layer]; loop.z_bottom = layer_z[bottom_layer];
double angle = atan2( endx - startx, endy - starty ); double angle = atan2( endx - startx, endy - starty );
double rayon = hypot( startx - endx, starty - endy ); double rayon = hypot( startx - endx, starty - endy );
for( double alpha = angle; alpha < angle + PI2; alpha += PI2 / divisions ) for( double alpha = angle; alpha < angle + PI2; alpha += PI2 / divisions )
{ {
loop.add( startx + cos( alpha ) * rayon, starty + sin( alpha ) * rayon ); loop.add( startx + cos( alpha ) * rayon, starty + sin( alpha ) * rayon );
} }
loop.bag( triangles ); loop.bag( triangles );
} }
static void export_vrml_oval_pad( int layer, /*{{{*/ static void export_vrml_oval_pad( int layer, /*{{{*/
double xc, double yc, double xc, double yc,
double dx, double dy, int orient, int divisions ) double dx, double dy, int orient, int divisions )
{ {
double capx, capy; /* Cap center */ double capx, capy; /* Cap center */
FlatFan fan; FlatFan fan;
fan.c.x = xc; fan.c.x = xc;
fan.c.y = yc; fan.c.y = yc;
double angle = orient / 1800.0 * M_PI; double angle = orient / 1800.0 * M_PI;
if( dy > dx ) if( dy > dx )
{ {
EXCHG( dx, dy ); EXCHG( dx, dy );
angle += PI2; angle += PI2;
} }
/* The exchange above means that cutter radius is alvays dy/2 */ /* The exchange above means that cutter radius is alvays dy/2 */
double r = dy / 2; double r = dy / 2;
double alpha; double alpha;
/* The first side cap */ /* The first side cap */
capx = xc + cos( angle ) * dx / 2; capx = xc + cos( angle ) * dx / 2;
capy = yc + sin( angle ) * dx / 2; capy = yc + sin( angle ) * dx / 2;
for( alpha = angle - PI2; alpha < angle + PI2; alpha += PI2 / divisions ) for( alpha = angle - PI2; alpha < angle + PI2; alpha += PI2 / divisions )
fan.add( capx + r * cos( alpha ), capy + r * sin( alpha ) ); fan.add( capx + r * cos( alpha ), capy + r * sin( alpha ) );
alpha = angle + PI2; alpha = angle + PI2;
fan.add( capx + r * cos( alpha ), capy + r * sin( alpha ) ); fan.add( capx + r * cos( alpha ), capy + r * sin( alpha ) );
/* The other side cap */ /* The other side cap */
capx = xc - cos( angle ) * dx / 2; capx = xc - cos( angle ) * dx / 2;
capy = yc - sin( angle ) * dx / 2; capy = yc - sin( angle ) * dx / 2;
for( alpha = angle + PI2; alpha < angle + 3 * PI2; alpha += PI2 / divisions ) for( alpha = angle + PI2; alpha < angle + 3 * PI2; alpha += PI2 / divisions )
fan.add( capx + r * cos( alpha ), capy + r * sin( alpha ) ); fan.add( capx + r * cos( alpha ), capy + r * sin( alpha ) );
alpha = angle + 3 * PI2; alpha = angle + 3 * PI2;
fan.add( capx + r * cos( alpha ), capy + r * sin( alpha ) ); fan.add( capx + r * cos( alpha ), capy + r * sin( alpha ) );
fan.bag( layer ); fan.bag( layer );
} }
static void export_vrml_arc( int layer, double startx, double starty, /*{{{*/ static void export_vrml_arc( int layer, double startx, double starty, /*{{{*/
double endx, double endy, double width, int divisions ) double endx, double endy, double width, int divisions )
{ {
FlatRing ring; FlatRing ring;
double hole, rayon; double hole, rayon;
double angle = atan2( endx - startx, endy - starty ); double angle = atan2( endx - startx, endy - starty );
rayon = hypot( startx - endx, starty - endy ) + ( width / 2); rayon = hypot( startx - endx, starty - endy ) + ( width / 2);
hole = rayon - width; hole = rayon - width;
for( double alpha = angle; alpha < angle + PI2; alpha += PI2 / divisions ) for( double alpha = angle; alpha < angle + PI2; alpha += PI2 / divisions )
{ {
ring.add_inner( startx + cos( alpha ) * hole, starty + sin( alpha ) * hole ); ring.add_inner( startx + cos( alpha ) * hole, starty + sin( alpha ) * hole );
ring.add_outer( startx + cos( alpha ) * rayon, starty + sin( alpha ) * rayon ); ring.add_outer( startx + cos( alpha ) * rayon, starty + sin( alpha ) * rayon );
} }
ring.bag( layer, false ); ring.bag( layer, false );
} }
static void export_vrml_drawsegment( DRAWSEGMENT* drawseg ) /*{{{*/ static void export_vrml_drawsegment( DRAWSEGMENT* drawseg ) /*{{{*/
{ {
int layer = drawseg->GetLayer(); int layer = drawseg->GetLayer();
double w = drawseg->m_Width; double w = drawseg->m_Width;
double x = drawseg->m_Start.x; double x = drawseg->m_Start.x;
double y = drawseg->m_Start.y; double y = drawseg->m_Start.y;
double xf = drawseg->m_End.x; double xf = drawseg->m_End.x;
double yf = drawseg->m_End.y; double yf = drawseg->m_End.y;
/* Items on the edge layer are high, not thick */ /* Items on the edge layer are high, not thick */
if( layer == EDGE_N ) if( layer == EDGE_N )
{ {
switch( drawseg->m_Shape ) switch( drawseg->m_Shape )
{ {
/* There is a special 'varc' primitive for this */ /* There is a special 'varc' primitive for this */
case S_ARC: case S_ARC:
export_vrml_varc( layer_triangles[layer], export_vrml_varc( layer_triangles[layer],
FIRST_COPPER_LAYER, LAST_COPPER_LAYER, FIRST_COPPER_LAYER, LAST_COPPER_LAYER,
x, y, xf, yf, 4 ); x, y, xf, yf, 4 );
break; break;
/* Circles on edge are usually important holes */ /* Circles on edge are usually important holes */
case S_CIRCLE: case S_CIRCLE:
export_vrml_hole( layer_triangles[layer], export_vrml_hole( layer_triangles[layer],
FIRST_COPPER_LAYER, LAST_COPPER_LAYER, x, y, FIRST_COPPER_LAYER, LAST_COPPER_LAYER, x, y,
hypot( xf - x, yf - y ) / 2, 12 ); hypot( xf - x, yf - y ) / 2, 12 );
break; break;
default: default:
{ {
/* Simply a quad */ /* Simply a quad */
double z_top = layer_z[FIRST_COPPER_LAYER]; double z_top = layer_z[FIRST_COPPER_LAYER];
double z_bottom = layer_z[LAST_COPPER_LAYER]; double z_bottom = layer_z[LAST_COPPER_LAYER];
bag_vquad( layer_triangles[layer], x, y, xf, yf, z_top, z_bottom ); bag_vquad( layer_triangles[layer], x, y, xf, yf, z_top, z_bottom );
break; break;
} }
} }
} }
else else
{ {
switch( drawseg->m_Shape ) switch( drawseg->m_Shape )
{ {
case S_ARC: case S_ARC:
export_vrml_arc( layer, x, y, xf, yf, w, 3 ); export_vrml_arc( layer, x, y, xf, yf, w, 3 );
break; break;
case S_CIRCLE: case S_CIRCLE:
export_vrml_circle( layer, x, y, xf, yf, w, 12 ); export_vrml_circle( layer, x, y, xf, yf, w, 12 );
break; break;
default: default:
export_vrml_line( layer, x, y, xf, yf, w, 1 ); export_vrml_line( layer, x, y, xf, yf, w, 1 );
break; break;
} }
} }
} }
/* C++ doesn't have closures and neither continuation forms... this is /* C++ doesn't have closures and neither continuation forms... this is
* for coupling the vrml_text_callback with the common parameters */ * for coupling the vrml_text_callback with the common parameters */
static int s_text_layer; static int s_text_layer;
static int s_text_width; static int s_text_width;
static void vrml_text_callback( int x0, int y0, int xf, int yf ) static void vrml_text_callback( int x0, int y0, int xf, int yf )
{ {
export_vrml_line( s_text_layer, x0, y0, xf, yf, s_text_width, 1 ); export_vrml_line( s_text_layer, x0, y0, xf, yf, s_text_width, 1 );
} }
static void export_vrml_pcbtext( TEXTE_PCB* text ) /*{{{*/ static void export_vrml_pcbtext( TEXTE_PCB* text ) /*{{{*/
/*************************************************************/ /*************************************************************/
{ {
/* Coupling by globals! Ewwww... */ /* Coupling by globals! Ewwww... */
s_text_layer = text->GetLayer(); s_text_layer = text->GetLayer();
s_text_width = text->m_Width; s_text_width = text->m_Thickness;
wxSize size = text->m_Size; wxSize size = text->m_Size;
if( text->m_Mirror ) if( text->m_Mirror )
NEGATE( size.x ); NEGATE( size.x );
if( text->m_MultilineAllowed ) if( text->m_MultilineAllowed )
{ {
wxPoint pos = text->m_Pos; wxPoint pos = text->m_Pos;
wxArrayString* list = wxStringSplit( text->m_Text, '\n' ); wxArrayString* list = wxStringSplit( text->m_Text, '\n' );
wxPoint offset; wxPoint offset;
offset.y = text->GetInterline(); offset.y = text->GetInterline();
RotatePoint( &offset, text->m_Orient ); RotatePoint( &offset, text->m_Orient );
for( unsigned i = 0; i<list->Count(); i++ ) for( unsigned i = 0; i<list->Count(); i++ )
{ {
wxString txt = list->Item( i ); wxString txt = list->Item( i );
DrawGraphicText( NULL, NULL, pos, (EDA_Colors) 0, DrawGraphicText( NULL, NULL, pos, (EDA_Colors) 0,
txt, text->m_Orient, size, txt, text->m_Orient, size,
text->m_HJustify, text->m_VJustify, text->m_HJustify, text->m_VJustify,
text->m_Width, text->m_Italic, text->m_Thickness, text->m_Italic,
true, true,
vrml_text_callback ); vrml_text_callback );
pos += offset; pos += offset;
} }
delete (list); delete (list);
} }
else else
{ {
DrawGraphicText( NULL, NULL, text->m_Pos, (EDA_Colors) 0, DrawGraphicText( NULL, NULL, text->m_Pos, (EDA_Colors) 0,
text->m_Text, text->m_Orient, size, text->m_Text, text->m_Orient, size,
text->m_HJustify, text->m_VJustify, text->m_HJustify, text->m_VJustify,
text->m_Width, text->m_Italic, text->m_Thickness, text->m_Italic,
true, true,
vrml_text_callback ); vrml_text_callback );
} }
} }
static void export_vrml_drawings( BOARD* pcb ) /*{{{*/ static void export_vrml_drawings( BOARD* pcb ) /*{{{*/
{ {
/* draw graphic items */ /* draw graphic items */
for( EDA_BaseStruct* drawing = pcb->m_Drawings; for( EDA_BaseStruct* drawing = pcb->m_Drawings;
drawing != 0; drawing != 0;
drawing = drawing->Next() ) drawing = drawing->Next() )
{ {
switch( drawing->Type() ) switch( drawing->Type() )
{ {
case TYPE_DRAWSEGMENT: case TYPE_DRAWSEGMENT:
export_vrml_drawsegment( (DRAWSEGMENT*) drawing ); export_vrml_drawsegment( (DRAWSEGMENT*) drawing );
break; break;
case TYPE_TEXTE: case TYPE_TEXTE:
export_vrml_pcbtext( (TEXTE_PCB*) drawing ); export_vrml_pcbtext( (TEXTE_PCB*) drawing );
break; break;
default: default:
break; break;
} }
} }
} }
static void export_round_padstack( BOARD* pcb, double x, double y, double r, /*{{{*/ static void export_round_padstack( BOARD* pcb, double x, double y, double r, /*{{{*/
int bottom_layer, int top_layer, int divisions ) int bottom_layer, int top_layer, int divisions )
{ {
int copper_layers = pcb->GetCopperLayerCount( ); int copper_layers = pcb->GetCopperLayerCount( );
for( int layer = bottom_layer; layer < copper_layers; layer++ ) for( int layer = bottom_layer; layer < copper_layers; layer++ )
{ {
/* The last layer is always the component one, unless it's single face */ /* The last layer is always the component one, unless it's single face */
if( (layer > FIRST_COPPER_LAYER) && (layer == copper_layers - 1) ) if( (layer > FIRST_COPPER_LAYER) && (layer == copper_layers - 1) )
layer = LAST_COPPER_LAYER; layer = LAST_COPPER_LAYER;
if( layer <= top_layer ) if( layer <= top_layer )
export_vrml_circle( layer, x, y, x + r / 2, y, r, divisions ); export_vrml_circle( layer, x, y, x + r / 2, y, r, divisions );
} }
} }
static void export_vrml_via( BOARD* pcb, SEGVIA* via ) /*{{{*/ static void export_vrml_via( BOARD* pcb, SEGVIA* via ) /*{{{*/
{ {
double x, y, r, hole; double x, y, r, hole;
int top_layer, bottom_layer; int top_layer, bottom_layer;
r = via->m_Width / 2; r = via->m_Width / 2;
hole = via->GetDrillValue() / 2; hole = via->GetDrillValue() / 2;
x = via->m_Start.x; x = via->m_Start.x;
y = via->m_Start.y; y = via->m_Start.y;
via->ReturnLayerPair( &top_layer, &bottom_layer ); via->ReturnLayerPair( &top_layer, &bottom_layer );
/* Export the via padstack */ /* Export the via padstack */
export_round_padstack( pcb, x, y, r, bottom_layer, top_layer, 8 ); export_round_padstack( pcb, x, y, r, bottom_layer, top_layer, 8 );
/* Drill a rough hole */ /* Drill a rough hole */
export_vrml_hole( via_triangles[via->m_Shape], top_layer, bottom_layer, x, y, hole, 8 ); export_vrml_hole( via_triangles[via->m_Shape], top_layer, bottom_layer, x, y, hole, 8 );
} }
static void export_vrml_tracks( BOARD* pcb ) /*{{{*/ static void export_vrml_tracks( BOARD* pcb ) /*{{{*/
{ {
for( TRACK* track = pcb->m_Track; track != NULL; track = track->Next() ) for( TRACK* track = pcb->m_Track; track != NULL; track = track->Next() )
{ {
if( track->Type() == TYPE_VIA ) if( track->Type() == TYPE_VIA )
export_vrml_via( pcb, (SEGVIA*) track ); export_vrml_via( pcb, (SEGVIA*) track );
else else
export_vrml_line( track->GetLayer(), track->m_Start.x, track->m_Start.y, export_vrml_line( track->GetLayer(), track->m_Start.x, track->m_Start.y,
track->m_End.x, track->m_End.y, track->m_Width, 4 ); track->m_End.x, track->m_End.y, track->m_Width, 4 );
} }
} }
static void export_vrml_zones( BOARD* pcb ) /*{{{*/ static void export_vrml_zones( BOARD* pcb ) /*{{{*/
{ {
/* Export fill segments */ /* Export fill segments */
for( SEGZONE* segzone = pcb->m_Zone; for( SEGZONE* segzone = pcb->m_Zone;
segzone != 0; segzone != 0;
segzone = segzone->Next() ) segzone = segzone->Next() )
{ {
/* Fill tracks are exported with low subdivisions */ /* Fill tracks are exported with low subdivisions */
if( segzone->Type() == TYPE_ZONE ) if( segzone->Type() == TYPE_ZONE )
export_vrml_line( segzone->GetLayer(), segzone->m_Start.x, segzone->m_Start.y, export_vrml_line( segzone->GetLayer(), segzone->m_Start.x, segzone->m_Start.y,
segzone->m_End.x, segzone->m_End.y, segzone->m_Width, 1 ); segzone->m_End.x, segzone->m_End.y, segzone->m_Width, 1 );
} }
/* Export zone outlines */ /* Export zone outlines */
for( int i = 0; i < pcb->GetAreaCount(); i++ ) for( int i = 0; i < pcb->GetAreaCount(); i++ )
{ {
ZONE_CONTAINER* zone = pcb->GetArea( i ); ZONE_CONTAINER* zone = pcb->GetArea( i );
if( ( zone->m_FilledPolysList.size() == 0 ) if( ( zone->m_FilledPolysList.size() == 0 )
||( zone->m_ZoneMinThickness <= 1 ) ) ||( zone->m_ZoneMinThickness <= 1 ) )
continue; continue;
int width = zone->m_ZoneMinThickness; int width = zone->m_ZoneMinThickness;
if( width > 0 ) if( width > 0 )
{ {
int imax = zone->m_FilledPolysList.size() - 1; int imax = zone->m_FilledPolysList.size() - 1;
int layer = zone->GetLayer(); int layer = zone->GetLayer();
CPolyPt* firstcorner = &zone->m_FilledPolysList[0]; CPolyPt* firstcorner = &zone->m_FilledPolysList[0];
CPolyPt* begincorner = firstcorner; CPolyPt* begincorner = firstcorner;
/* I'm not really positive about what he's doing here... */ /* I'm not really positive about what he's doing here... */
for( int ic = 1; ic <= imax; ic++ ) for( int ic = 1; ic <= imax; ic++ )
{ {
CPolyPt* endcorner = &zone->m_FilledPolysList[ic]; CPolyPt* endcorner = &zone->m_FilledPolysList[ic];
if( begincorner->utility == 0 ) // Draw only basic outlines, not extra segments if( begincorner->utility == 0 ) // Draw only basic outlines, not extra segments
export_vrml_line( layer, begincorner->x, begincorner->y, export_vrml_line( layer, begincorner->x, begincorner->y,
endcorner->x, endcorner->y, width, 1 ); endcorner->x, endcorner->y, width, 1 );
if( (endcorner->end_contour) || (ic == imax) ) // the last corner of a filled area is found: draw it if( (endcorner->end_contour) || (ic == imax) ) // the last corner of a filled area is found: draw it
{ {
if( endcorner->utility == 0 ) // Draw only basic outlines, not extra segments if( endcorner->utility == 0 ) // Draw only basic outlines, not extra segments
export_vrml_line( layer, endcorner->x, endcorner->y, export_vrml_line( layer, endcorner->x, endcorner->y,
firstcorner->x, firstcorner->y, width, 1 ); firstcorner->x, firstcorner->y, width, 1 );
ic++; ic++;
/* A new contour? */ /* A new contour? */
if( ic < imax - 1 ) if( ic < imax - 1 )
begincorner = firstcorner = &zone->m_FilledPolysList[ic]; begincorner = firstcorner = &zone->m_FilledPolysList[ic];
} }
else else
begincorner = endcorner; begincorner = endcorner;
} }
} }
} }
} }
static void export_vrml_text_module( TEXTE_MODULE* module ) /*{{{*/ static void export_vrml_text_module( TEXTE_MODULE* module ) /*{{{*/
{ {
if( !module->m_NoShow ) if( !module->m_NoShow )
{ {
wxSize size = module->m_Size; wxSize size = module->m_Size;
if( module->m_Mirror ) if( module->m_Mirror )
NEGATE( size.x ); // Text is mirrored NEGATE( size.x ); // Text is mirrored
s_text_layer = module->GetLayer(); s_text_layer = module->GetLayer();
s_text_width = module->m_Width; s_text_width = module->m_Thickness;
DrawGraphicText( NULL, NULL, module->m_Pos, (EDA_Colors) 0, DrawGraphicText( NULL, NULL, module->m_Pos, (EDA_Colors) 0,
module->m_Text, module->GetDrawRotation(), size, module->m_Text, module->GetDrawRotation(), size,
module->m_HJustify, module->m_VJustify, module->m_HJustify, module->m_VJustify,
module->m_Width, module->m_Italic, module->m_Thickness, module->m_Italic,
true, true,
vrml_text_callback ); vrml_text_callback );
} }
} }
static void export_vrml_edge_module( EDGE_MODULE* module ) /*{{{*/ static void export_vrml_edge_module( EDGE_MODULE* module ) /*{{{*/
{ {
int layer = module->GetLayer(); int layer = module->GetLayer();
double x = module->m_Start.x; double x = module->m_Start.x;
double y = module->m_Start.y; double y = module->m_Start.y;
double xf = module->m_End.x; double xf = module->m_End.x;
double yf = module->m_End.y; double yf = module->m_End.y;
double w = module->m_Width; double w = module->m_Width;
switch( module->m_Shape ) switch( module->m_Shape )
{ {
case S_ARC: case S_ARC:
export_vrml_arc( layer, x, y, xf, yf, w, 3 ); export_vrml_arc( layer, x, y, xf, yf, w, 3 );
break; break;
case S_CIRCLE: case S_CIRCLE:
export_vrml_circle( layer, x, y, xf, yf, w, 12 ); export_vrml_circle( layer, x, y, xf, yf, w, 12 );
break; break;
default: default:
export_vrml_line( layer, x, y, xf, yf, w, 1 ); export_vrml_line( layer, x, y, xf, yf, w, 1 );
break; break;
} }
} }
static void export_vrml_pad( BOARD* pcb, D_PAD* pad ) /*{{{*/ static void export_vrml_pad( BOARD* pcb, D_PAD* pad ) /*{{{*/
{ {
double hole_drill_w = (double) pad->m_Drill.x / 2; double hole_drill_w = (double) pad->m_Drill.x / 2;
double hole_drill_h = (double) pad->m_Drill.y / 2; double hole_drill_h = (double) pad->m_Drill.y / 2;
double hole_drill = MIN( hole_drill_w, hole_drill_h ); double hole_drill = MIN( hole_drill_w, hole_drill_h );
double hole_x = pad->m_Pos.x; double hole_x = pad->m_Pos.x;
double hole_y = pad->m_Pos.y; double hole_y = pad->m_Pos.y;
/* Export the hole on the edge layer */ /* Export the hole on the edge layer */
if( hole_drill > 0 ) if( hole_drill > 0 )
{ {
if( pad->m_DrillShape == PAD_OVAL ) if( pad->m_DrillShape == PAD_OVAL )
{ {
/* Oblong hole (slot) */ /* Oblong hole (slot) */
export_vrml_slot( layer_triangles[EDGE_N], export_vrml_slot( layer_triangles[EDGE_N],
FIRST_COPPER_LAYER, LAST_COPPER_LAYER, FIRST_COPPER_LAYER, LAST_COPPER_LAYER,
hole_x, hole_y, hole_drill_w, hole_drill_h, pad->m_Orient, 6 ); hole_x, hole_y, hole_drill_w, hole_drill_h, pad->m_Orient, 6 );
} }
else else
{ {
// Drill a round hole // Drill a round hole
export_vrml_hole( layer_triangles[EDGE_N], export_vrml_hole( layer_triangles[EDGE_N],
FIRST_COPPER_LAYER, LAST_COPPER_LAYER, FIRST_COPPER_LAYER, LAST_COPPER_LAYER,
hole_x, hole_y, hole_drill, 12 ); hole_x, hole_y, hole_drill, 12 );
} }
} }
/* The pad proper, on the selected layers */ /* The pad proper, on the selected layers */
unsigned long layer_mask = pad->m_Masque_Layer; unsigned long layer_mask = pad->m_Masque_Layer;
int copper_layers = pcb->GetCopperLayerCount( ); int copper_layers = pcb->GetCopperLayerCount( );
/* The (maybe offseted) pad position */ /* The (maybe offseted) pad position */
wxPoint pad_pos = pad->ReturnShapePos(); wxPoint pad_pos = pad->ReturnShapePos();
double pad_x = pad_pos.x; double pad_x = pad_pos.x;
double pad_y = pad_pos.y; double pad_y = pad_pos.y;
wxSize pad_delta = pad->m_DeltaSize; wxSize pad_delta = pad->m_DeltaSize;
double pad_dx = pad_delta.x / 2; double pad_dx = pad_delta.x / 2;
double pad_dy = pad_delta.y / 2; double pad_dy = pad_delta.y / 2;
double pad_w = pad->m_Size.x / 2; double pad_w = pad->m_Size.x / 2;
double pad_h = pad->m_Size.y / 2; double pad_h = pad->m_Size.y / 2;
for( int layer = FIRST_COPPER_LAYER; layer < copper_layers; layer++ ) for( int layer = FIRST_COPPER_LAYER; layer < copper_layers; layer++ )
{ {
/* The last layer is always the component one, unless it's single face */ /* The last layer is always the component one, unless it's single face */
if( (layer > FIRST_COPPER_LAYER) && (layer == copper_layers - 1) ) if( (layer > FIRST_COPPER_LAYER) && (layer == copper_layers - 1) )
layer = LAST_COPPER_LAYER; layer = LAST_COPPER_LAYER;
if( layer_mask & (1 << layer) ) if( layer_mask & (1 << layer) )
{ {
/* OK, the pad is on this layer, export it */ /* OK, the pad is on this layer, export it */
switch( pad->m_PadShape & 0x7F ) /* What is the masking for? */ switch( pad->m_PadShape & 0x7F ) /* What is the masking for? */
{ {
case PAD_CIRCLE: case PAD_CIRCLE:
export_vrml_circle( layer, pad_x, pad_y, export_vrml_circle( layer, pad_x, pad_y,
pad_x + pad_w / 2, pad_y, pad_w, 12 ); pad_x + pad_w / 2, pad_y, pad_w, 12 );
break; break;
case PAD_OVAL: case PAD_OVAL:
export_vrml_oval_pad( layer, export_vrml_oval_pad( layer,
pad_x, pad_y, pad_x, pad_y,
pad_w * 2, pad_h * 2, pad->m_Orient, 4 ); pad_w * 2, pad_h * 2, pad->m_Orient, 4 );
break; break;
case PAD_RECT: case PAD_RECT:
/* Just to be sure :D */ /* Just to be sure :D */
pad_dx = 0; pad_dx = 0;
pad_dy = 0; pad_dy = 0;
case PAD_TRAPEZOID: case PAD_TRAPEZOID:
{ {
int coord[8] = int coord[8] =
{ {
wxRound(-pad_w - pad_dy), wxRound(+pad_h + pad_dx), wxRound(-pad_w - pad_dy), wxRound(+pad_h + pad_dx),
wxRound(-pad_w + pad_dy), wxRound(-pad_h - pad_dx), wxRound(-pad_w + pad_dy), wxRound(-pad_h - pad_dx),
wxRound(+pad_w - pad_dy), wxRound(+pad_h - pad_dx), wxRound(+pad_w - pad_dy), wxRound(+pad_h - pad_dx),
wxRound(+pad_w + pad_dy), wxRound(-pad_h + pad_dx), wxRound(+pad_w + pad_dy), wxRound(-pad_h + pad_dx),
}; };
for( int i = 0; i < 4; i++ ) for( int i = 0; i < 4; i++ )
{ {
RotatePoint( &coord[i * 2], &coord[i * 2 + 1], pad->m_Orient ); RotatePoint( &coord[i * 2], &coord[i * 2 + 1], pad->m_Orient );
coord[i * 2] += wxRound( pad_x ); coord[i * 2] += wxRound( pad_x );
coord[i * 2 + 1] += wxRound( pad_y ); coord[i * 2 + 1] += wxRound( pad_y );
} }
bag_flat_quad( layer, coord[0], coord[1], bag_flat_quad( layer, coord[0], coord[1],
coord[2], coord[3], coord[2], coord[3],
coord[4], coord[5], coord[4], coord[5],
coord[6], coord[7] ); coord[6], coord[7] );
} }
break; break;
} }
} }
} }
} }
/* From axis/rot to quaternion */ /* From axis/rot to quaternion */
static void build_quat( double x, double y, double z, double a, double q[4] ) static void build_quat( double x, double y, double z, double a, double q[4] )
{ {
double sina = sin( a / 2 ); double sina = sin( a / 2 );
q[0] = x * sina; q[0] = x * sina;
q[1] = y * sina; q[1] = y * sina;
q[2] = z * sina; q[2] = z * sina;
q[3] = cos( a / 2 ); q[3] = cos( a / 2 );
} }
/* From quaternion to axis/rot */ /* From quaternion to axis/rot */
static void from_quat( double q[4], double rot[4] ) static void from_quat( double q[4], double rot[4] )
{ {
rot[3] = acos( q[3] ) * 2; rot[3] = acos( q[3] ) * 2;
for( int i = 0; i < 3; i++ ) for( int i = 0; i < 3; i++ )
{ {
rot[i] = q[i] / sin( rot[3] / 2 ); rot[i] = q[i] / sin( rot[3] / 2 );
} }
} }
/* Quaternion composition */ /* Quaternion composition */
static void compose_quat( double q1[4], double q2[4], double qr[4] ) static void compose_quat( double q1[4], double q2[4], double qr[4] )
{ {
double tmp[4]; double tmp[4];
tmp[0] = q2[3] *q1[0] + q2[0] *q1[3] + q2[1] *q1[2] - q2[2] *q1[1]; tmp[0] = q2[3] *q1[0] + q2[0] *q1[3] + q2[1] *q1[2] - q2[2] *q1[1];
tmp[1] = q2[3] *q1[1] + q2[1] *q1[3] + q2[2] *q1[0] - q2[0] *q1[2]; tmp[1] = q2[3] *q1[1] + q2[1] *q1[3] + q2[2] *q1[0] - q2[0] *q1[2];
tmp[2] = q2[3] *q1[2] + q2[2] *q1[3] + q2[0] *q1[1] - q2[1] *q1[0]; tmp[2] = q2[3] *q1[2] + q2[2] *q1[3] + q2[0] *q1[1] - q2[1] *q1[0];
tmp[3] = q2[3] *q1[3] - q2[0] *q1[0] - q2[1] *q1[1] - q2[2] *q1[2]; tmp[3] = q2[3] *q1[3] - q2[0] *q1[0] - q2[1] *q1[1] - q2[2] *q1[2];
qr[0] = tmp[0]; qr[1] = tmp[1]; qr[0] = tmp[0]; qr[1] = tmp[1];
qr[2] = tmp[2]; qr[3] = tmp[3]; qr[2] = tmp[2]; qr[3] = tmp[3];
} }
static void export_vrml_module( BOARD* aPcb, MODULE* aModule, static void export_vrml_module( BOARD* aPcb, MODULE* aModule,
FILE* aOutputFile, double aScalingFactor, FILE* aOutputFile, double aScalingFactor,
bool aExport3DFiles, const wxString & a3D_Subdir ) bool aExport3DFiles, const wxString & a3D_Subdir )
{ {
/* Reference and value */ /* Reference and value */
export_vrml_text_module( aModule->m_Reference ); export_vrml_text_module( aModule->m_Reference );
export_vrml_text_module( aModule->m_Value ); export_vrml_text_module( aModule->m_Value );
/* Export module edges */ /* Export module edges */
for( EDA_BaseStruct* item = aModule->m_Drawings; for( EDA_BaseStruct* item = aModule->m_Drawings;
item != NULL; item != NULL;
item = item->Next() ) item = item->Next() )
{ {
switch( item->Type() ) switch( item->Type() )
{ {
case TYPE_TEXTE_MODULE: case TYPE_TEXTE_MODULE:
export_vrml_text_module( dynamic_cast<TEXTE_MODULE*>(item) ); export_vrml_text_module( dynamic_cast<TEXTE_MODULE*>(item) );
break; break;
case TYPE_EDGE_MODULE: case TYPE_EDGE_MODULE:
export_vrml_edge_module( dynamic_cast<EDGE_MODULE*>(item) ); export_vrml_edge_module( dynamic_cast<EDGE_MODULE*>(item) );
break; break;
default: default:
break; break;
} }
} }
/* Export pads */ /* Export pads */
for( D_PAD* pad = aModule->m_Pads; for( D_PAD* pad = aModule->m_Pads;
pad != 0; pad != 0;
pad = pad->Next() ) pad = pad->Next() )
export_vrml_pad( aPcb, pad ); export_vrml_pad( aPcb, pad );
bool isFlipped = aModule->GetLayer() == LAYER_N_BACK; bool isFlipped = aModule->GetLayer() == LAYER_N_BACK;
/* Export the object VRML model(s) */ /* Export the object VRML model(s) */
for( S3D_MASTER* vrmlm = aModule->m_3D_Drawings; for( S3D_MASTER* vrmlm = aModule->m_3D_Drawings;
vrmlm != 0; vrmlm = vrmlm->Next() ) vrmlm != 0; vrmlm = vrmlm->Next() )
{ {
wxString fname = vrmlm->m_Shape3DName; wxString fname = vrmlm->m_Shape3DName;
if( fname.IsEmpty() ) if( fname.IsEmpty() )
continue; continue;
if( ! wxFileName::FileExists( fname ) ) if( ! wxFileName::FileExists( fname ) )
{ {
wxFileName fn = fname; wxFileName fn = fname;
fname = wxGetApp().FindLibraryPath( fn ); fname = wxGetApp().FindLibraryPath( fn );
if( fname.IsEmpty() ) // keep "short" name if full filemane not found if( fname.IsEmpty() ) // keep "short" name if full filemane not found
fname = vrmlm->m_Shape3DName; fname = vrmlm->m_Shape3DName;
} }
fname.Replace(wxT("\\"), wxT("/" ) ); fname.Replace(wxT("\\"), wxT("/" ) );
wxString source_fname = fname; wxString source_fname = fname;
if( aExport3DFiles ) if( aExport3DFiles )
{ {
fname.Replace(wxT("/"), wxT("_" ) ); fname.Replace(wxT("/"), wxT("_" ) );
fname.Replace(wxT(":_"), wxT("_" ) ); fname.Replace(wxT(":_"), wxT("_" ) );
fname = a3D_Subdir + wxT("/") + fname; fname = a3D_Subdir + wxT("/") + fname;
if( !wxFileExists( fname ) ) if( !wxFileExists( fname ) )
wxCopyFile( source_fname, fname ); wxCopyFile( source_fname, fname );
} }
/* Calculate 3D shape rotation: /* Calculate 3D shape rotation:
* this is the rotation parameters, with an additional 180 deg rotation * this is the rotation parameters, with an additional 180 deg rotation
* for footprints that are flipped * for footprints that are flipped
* When flipped, axis rotation is the horizontal axis (X axis) * When flipped, axis rotation is the horizontal axis (X axis)
*/ */
int rotx = wxRound( vrmlm->m_MatRotation.x ); int rotx = wxRound( vrmlm->m_MatRotation.x );
if ( isFlipped ) if ( isFlipped )
rotx += 1800; rotx += 1800;
/* Do some quaternion munching */ /* Do some quaternion munching */
double q1[4], q2[4], rot[4]; double q1[4], q2[4], rot[4];
build_quat( 1, 0, 0, rotx / 1800.0 * M_PI, q1 ); build_quat( 1, 0, 0, rotx / 1800.0 * M_PI, q1 );
build_quat( 0, 1, 0, vrmlm->m_MatRotation.y / 1800.0 * M_PI, q2 ); build_quat( 0, 1, 0, vrmlm->m_MatRotation.y / 1800.0 * M_PI, q2 );
compose_quat( q1, q2, q1 ); compose_quat( q1, q2, q1 );
build_quat( 0, 0, 1, vrmlm->m_MatRotation.z / 1800.0 * M_PI, q2 ); build_quat( 0, 0, 1, vrmlm->m_MatRotation.z / 1800.0 * M_PI, q2 );
compose_quat( q1, q2, q1 ); compose_quat( q1, q2, q1 );
build_quat( 0, 0, 1, aModule->m_Orient / 1800.0 * M_PI, q2 ); build_quat( 0, 0, 1, aModule->m_Orient / 1800.0 * M_PI, q2 );
compose_quat( q1, q2, q1 ); compose_quat( q1, q2, q1 );
from_quat( q1, rot ); from_quat( q1, rot );
fprintf( aOutputFile, "Transform {\n" ); fprintf( aOutputFile, "Transform {\n" );
/* A null rotation would fail the acos! */ /* A null rotation would fail the acos! */
if( rot[3] != 0.0 ) if( rot[3] != 0.0 )
{ {
fprintf( aOutputFile, " rotation %g %g %g %g\n", fprintf( aOutputFile, " rotation %g %g %g %g\n",
rot[0], rot[1], rot[2], rot[3] ); rot[0], rot[1], rot[2], rot[3] );
} }
fprintf( aOutputFile, " scale %g %g %g\n", fprintf( aOutputFile, " scale %g %g %g\n",
vrmlm->m_MatScale.x * aScalingFactor, vrmlm->m_MatScale.x * aScalingFactor,
vrmlm->m_MatScale.y * aScalingFactor, vrmlm->m_MatScale.y * aScalingFactor,
vrmlm->m_MatScale.z * aScalingFactor ); vrmlm->m_MatScale.z * aScalingFactor );
fprintf( aOutputFile, " translation %g %g %g\n", fprintf( aOutputFile, " translation %g %g %g\n",
vrmlm->m_MatPosition.x + aModule->m_Pos.x, vrmlm->m_MatPosition.x + aModule->m_Pos.x,
-vrmlm->m_MatPosition.y - aModule->m_Pos.y, -vrmlm->m_MatPosition.y - aModule->m_Pos.y,
vrmlm->m_MatPosition.z + layer_z[aModule->GetLayer()] ); vrmlm->m_MatPosition.z + layer_z[aModule->GetLayer()] );
fprintf( aOutputFile, fprintf( aOutputFile,
" children [\n Inline {\n url \"%s\"\n } ]\n", " children [\n Inline {\n url \"%s\"\n } ]\n",
CONV_TO_UTF8( fname ) ); CONV_TO_UTF8( fname ) );
fprintf( aOutputFile, " }\n" ); fprintf( aOutputFile, " }\n" );
} }
} }
static void write_and_empty_triangle_bag( FILE* output_file, static void write_and_empty_triangle_bag( FILE* output_file,
TriangleBag& triangles, int color ) TriangleBag& triangles, int color )
{ {
if( !triangles.empty() ) if( !triangles.empty() )
{ {
write_triangle_bag( output_file, color, triangles ); write_triangle_bag( output_file, color, triangles );
triangles.clear( ); triangles.clear( );
} }
} }
/** /**
* Function OnExportVRML * Function OnExportVRML
* will export the current BOARD to a VRML file. * will export the current BOARD to a VRML file.
*/ */
void WinEDA_PcbFrame::OnExportVRML( wxCommandEvent& event ) void WinEDA_PcbFrame::OnExportVRML( wxCommandEvent& event )
{ {
wxFileName fn; wxFileName fn;
static wxString subDirFor3Dshapes = wxT("shapes3D"); static wxString subDirFor3Dshapes = wxT("shapes3D");
double scaleList[3] = { 1.0, 25.4, 25.4/1000 }; double scaleList[3] = { 1.0, 25.4, 25.4/1000 };
// Build default file name // Build default file name
wxString ext = wxT( "wrl" ); wxString ext = wxT( "wrl" );
fn = GetScreen()->m_FileName; fn = GetScreen()->m_FileName;
fn.SetExt( ext ); fn.SetExt( ext );
DIALOG_EXPORT_3DFILE dlg( this ); DIALOG_EXPORT_3DFILE dlg( this );
dlg.FilePicker()->SetPath( fn.GetFullPath() ); dlg.FilePicker()->SetPath( fn.GetFullPath() );
dlg.SetSubdir( subDirFor3Dshapes ); dlg.SetSubdir( subDirFor3Dshapes );
if( dlg.ShowModal() != wxID_OK ) if( dlg.ShowModal() != wxID_OK )
return; return;
double scale = scaleList[dlg.GetUnits( )]; // final scale export double scale = scaleList[dlg.GetUnits( )]; // final scale export
bool export3DFiles = dlg.Get3DFilesOption( ) == 0; bool export3DFiles = dlg.Get3DFilesOption( ) == 0;
wxBusyCursor dummy; wxBusyCursor dummy;
wxString fullFilename = dlg.FilePicker()->GetPath(); wxString fullFilename = dlg.FilePicker()->GetPath();
subDirFor3Dshapes = dlg.GetSubdir(); subDirFor3Dshapes = dlg.GetSubdir();
if( ! wxDirExists( subDirFor3Dshapes ) ) if( ! wxDirExists( subDirFor3Dshapes ) )
wxMkdir( subDirFor3Dshapes ); wxMkdir( subDirFor3Dshapes );
if( ! ExportVRML_File( fullFilename, scale, export3DFiles, subDirFor3Dshapes ) ) if( ! ExportVRML_File( fullFilename, scale, export3DFiles, subDirFor3Dshapes ) )
{ {
wxString msg = _( "Unable to create " ) + fullFilename; wxString msg = _( "Unable to create " ) + fullFilename;
DisplayError( this, msg ); DisplayError( this, msg );
return; return;
} }
} }
/** /**
* Function ExportVRML_File * Function ExportVRML_File
* Creates the file(s) exporting current BOARD to a VRML file. * Creates the file(s) exporting current BOARD to a VRML file.
* @param aFullFileName = the full filename of the file to create * @param aFullFileName = the full filename of the file to create
* @param aScale = the general scaling factor. 1.0 to export in inch * @param aScale = the general scaling factor. 1.0 to export in inch
* @param aExport3DFiles = true to copy 3D shapes in the subdir a3D_Subdir * @param aExport3DFiles = true to copy 3D shapes in the subdir a3D_Subdir
* @param a3D_Subdir = sub directory where 3D shapes files are copied * @param a3D_Subdir = sub directory where 3D shapes files are copied
* used only when aExport3DFiles == true * used only when aExport3DFiles == true
* @return true if Ok. * @return true if Ok.
*/ */
/* When copying 3D shapes files, the new filename is build from /* When copying 3D shapes files, the new filename is build from
* the full path name, changing the separators by underscore. * the full path name, changing the separators by underscore.
* this is needed because files with the same shortname can exist in different directories * this is needed because files with the same shortname can exist in different directories
*/ */
bool WinEDA_PcbFrame::ExportVRML_File( const wxString & aFullFileName, bool WinEDA_PcbFrame::ExportVRML_File( const wxString & aFullFileName,
double aScale, bool aExport3DFiles, double aScale, bool aExport3DFiles,
const wxString & a3D_Subdir ) const wxString & a3D_Subdir )
{ {
wxString msg; wxString msg;
FILE* output_file; FILE* output_file;
BOARD* pcb = GetBoard(); BOARD* pcb = GetBoard();
output_file = wxFopen( aFullFileName, wxT( "wt" ) ); output_file = wxFopen( aFullFileName, wxT( "wt" ) );
if( output_file == NULL ) if( output_file == NULL )
return false; return false;
// Switch the locale to standard C (needed to print floating point numbers like 1.3) // Switch the locale to standard C (needed to print floating point numbers like 1.3)
SetLocaleTo_C_standard(); SetLocaleTo_C_standard();
/* Begin with the usual VRML boilerplate */ /* Begin with the usual VRML boilerplate */
fprintf( output_file, "#VRML V2.0 utf8\n" fprintf( output_file, "#VRML V2.0 utf8\n"
"WorldInfo {\n" "WorldInfo {\n"
" title \"%s - Generated by PCBNEW\"\n" " title \"%s - Generated by PCBNEW\"\n"
"}\n", CONV_TO_UTF8( aFullFileName ) ); "}\n", CONV_TO_UTF8( aFullFileName ) );
/* The would be in decimils and not in meters, as the standard wants. /* The would be in decimils and not in meters, as the standard wants.
* It is trivial to embed everything in a transform node to * It is trivial to embed everything in a transform node to
* fix it. For example here we build the world in inches... * fix it. For example here we build the world in inches...
*/ */
/* scaling factor to convert internal units (decimils) to inches /* scaling factor to convert internal units (decimils) to inches
*/ */
double board_scaling_factor = 0.0001; double board_scaling_factor = 0.0001;
/* auxiliary scale to export to a different scale. /* auxiliary scale to export to a different scale.
*/ */
double general_scaling_factor = board_scaling_factor * aScale; double general_scaling_factor = board_scaling_factor * aScale;
fprintf(output_file, "Transform {\n"); fprintf(output_file, "Transform {\n");
fprintf(output_file, " scale %g %g %g\n", fprintf(output_file, " scale %g %g %g\n",
general_scaling_factor, general_scaling_factor, general_scaling_factor ); general_scaling_factor, general_scaling_factor, general_scaling_factor );
/* Define the translation to have the board centre to the 2D axis origin /* Define the translation to have the board centre to the 2D axis origin
* more easy for rotations... * more easy for rotations...
*/ */
pcb->ComputeBoundaryBox(); pcb->ComputeBoundaryBox();
double dx = board_scaling_factor * pcb->m_BoundaryBox.Centre().x * aScale; double dx = board_scaling_factor * pcb->m_BoundaryBox.Centre().x * aScale;
double dy = board_scaling_factor * pcb->m_BoundaryBox.Centre().y * aScale; double dy = board_scaling_factor * pcb->m_BoundaryBox.Centre().y * aScale;
fprintf(output_file, " translation %g %g 0.0\n", -dx, dy ); fprintf(output_file, " translation %g %g 0.0\n", -dx, dy );
fprintf(output_file, " children [\n" ); fprintf(output_file, " children [\n" );
/* scaling factor to convert 3D models to board units (decimils) /* scaling factor to convert 3D models to board units (decimils)
* Usually we use Wings3D to create thems. * Usually we use Wings3D to create thems.
* One can consider the 3D units is 0.1 inch * One can consider the 3D units is 0.1 inch
* So the scaling factor from 0.1 inch to board units * So the scaling factor from 0.1 inch to board units
* is 0.1 / board_scaling_factor * is 0.1 / board_scaling_factor
*/ */
double wrml_3D_models_scaling_factor = 0.1 / board_scaling_factor; double wrml_3D_models_scaling_factor = 0.1 / board_scaling_factor;
/* Preliminary computation: the z value for each layer */ /* Preliminary computation: the z value for each layer */
compute_layer_Zs( pcb ); compute_layer_Zs( pcb );
/* Drawing and text on the board, and edges which are special */ /* Drawing and text on the board, and edges which are special */
export_vrml_drawings( pcb ); export_vrml_drawings( pcb );
/* Export vias and trackage */ /* Export vias and trackage */
export_vrml_tracks( pcb ); export_vrml_tracks( pcb );
/* Export zone fills */ /* Export zone fills */
/* TODO export_vrml_zones(pcb); /* TODO export_vrml_zones(pcb);
*/ */
/* Export footprints */ /* Export footprints */
for( MODULE* module = pcb->m_Modules; for( MODULE* module = pcb->m_Modules;
module != 0; module != 0;
module = module->Next() ) module = module->Next() )
export_vrml_module( pcb, module, output_file, export_vrml_module( pcb, module, output_file,
wrml_3D_models_scaling_factor, wrml_3D_models_scaling_factor,
aExport3DFiles, a3D_Subdir ); aExport3DFiles, a3D_Subdir );
/* Output the bagged triangles for each layer /* Output the bagged triangles for each layer
* Each layer will be a separate shape */ * Each layer will be a separate shape */
for( int layer = 0; layer < LAYER_COUNT; layer++ ) for( int layer = 0; layer < LAYER_COUNT; layer++ )
write_and_empty_triangle_bag( output_file, write_and_empty_triangle_bag( output_file,
layer_triangles[layer], layer_triangles[layer],
pcb->GetLayerColor(layer) ); pcb->GetLayerColor(layer) );
/* Same thing for the via layers */ /* Same thing for the via layers */
for( int i = 0; i < 4; i++ ) for( int i = 0; i < 4; i++ )
write_and_empty_triangle_bag( output_file, write_and_empty_triangle_bag( output_file,
via_triangles[i], via_triangles[i],
pcb->GetVisibleElementColor( VIAS_VISIBLE + i ) ); pcb->GetVisibleElementColor( VIAS_VISIBLE + i ) );
/* Close the outer 'transform' node */ /* Close the outer 'transform' node */
fputs( "]\n}\n", output_file ); fputs( "]\n}\n", output_file );
// End of work // End of work
fclose( output_file ); fclose( output_file );
SetLocaleTo_Default(); // revert to the current locale SetLocaleTo_Default(); // revert to the current locale
return true; return true;
} }
#include "wx/msw/wx.rc"
...@@ -58,10 +58,10 @@ bool MODULE::Read_GPCB_Descr( const wxString& CmpFullFileName ) ...@@ -58,10 +58,10 @@ bool MODULE::Read_GPCB_Descr( const wxString& CmpFullFileName )
* displayed on the screen. * displayed on the screen.
* Name The name of the element, usually the reference designator. * Name The name of the element, usually the reference designator.
* Value The value of the element. * Value The value of the element.
* MX MY The location of the elements mark. This is the reference point for placing the element and its pins and pads. * MX MY The location of the element�s mark. This is the reference point for placing the element and its pins and pads.
* TX TY The upper left corner of the text (one of the three strings). * TX TY The upper left corner of the text (one of the three strings).
* TDir The relative direction of the text. 0 means left to right for an unrotated element, 1 means up, 2 left, 3 down. * TDir The relative direction of the text. 0 means left to right for an unrotated element, 1 means up, 2 left, 3 down.
* TScale Size of the text, as a percentage of the “default” size of of the font (the default font is about 40 mils high). Default is 100 (40 mils). * TScale Size of the text, as a percentage of the �default� size of of the font (the default font is about 40 mils high). Default is 100 (40 mils).
* TSFlags Symbolic or numeric flags, for the text. * TSFlags Symbolic or numeric flags, for the text.
* TNFlags Numeric flags, for the text. * TNFlags Numeric flags, for the text.
* *
...@@ -227,10 +227,10 @@ bool MODULE::Read_GPCB_Descr( const wxString& CmpFullFileName ) ...@@ -227,10 +227,10 @@ bool MODULE::Read_GPCB_Descr( const wxString& CmpFullFileName )
// real size is: default * ibuf[5] / 100 (size in gpcb is given in percent of defalut size // real size is: default * ibuf[5] / 100 (size in gpcb is given in percent of defalut size
ibuf[5] *= TEXT_DEFAULT_SIZE; ibuf[5] /= 100; ibuf[5] *= TEXT_DEFAULT_SIZE; ibuf[5] /= 100;
m_Reference->m_Size.x = m_Reference->m_Size.y = MAX( 20, ibuf[5] ); m_Reference->m_Size.x = m_Reference->m_Size.y = MAX( 20, ibuf[5] );
m_Reference->m_Width = m_Reference->m_Size.x / 10; m_Reference->m_Thickness = m_Reference->m_Size.x / 10;
m_Value->m_Orient = m_Reference->m_Orient; m_Value->m_Orient = m_Reference->m_Orient;
m_Value->m_Size = m_Reference->m_Size; m_Value->m_Size = m_Reference->m_Size;
m_Value->m_Width = m_Reference->m_Width; m_Value->m_Thickness = m_Reference->m_Thickness;
while( GetLine( cmpfile, Line, &NbLine, sizeof(Line) - 1 ) != NULL ) while( GetLine( cmpfile, Line, &NbLine, sizeof(Line) - 1 ) != NULL )
{ {
......
...@@ -12,132 +12,7 @@ ...@@ -12,132 +12,7 @@
#include "module_editor_frame.h" #include "module_editor_frame.h"
#include "class_board_design_settings.h" #include "class_board_design_settings.h"
#include "protos.h" //#include "protos.h"
/**************************************/
/* dialog WinEDA_PcbGlobalDeleteFrame */
/**************************************/
#include "dialog_initpcb.cpp"
/********************************************************************/
void WinEDA_PcbFrame::InstallPcbGlobalDeleteFrame( const wxPoint& pos )
/********************************************************************/
{
WinEDA_PcbGlobalDeleteFrame* frame =
new WinEDA_PcbGlobalDeleteFrame( this );
frame->ShowModal(); frame->Destroy();
}
/***********************************************************************/
void WinEDA_PcbGlobalDeleteFrame::AcceptPcbDelete( wxCommandEvent& event )
/***********************************************************************/
{
bool gen_rastnest = false;
m_Parent->SetCurItem( NULL );
if( m_DelAlls->GetValue() )
{
m_Parent->Clear_Pcb( true );
}
else
{
if( !IsOK( this, _( "Ok to delete selected items ?" ) ) )
return;
BOARD * pcb = m_Parent->GetBoard();
PICKED_ITEMS_LIST pickersList;
ITEM_PICKER itemPicker( NULL, UR_DELETED );
BOARD_ITEM* item, * nextitem;
if( m_DelZones->GetValue() )
{
gen_rastnest = true;
/* ZEG_ZONE items used in Zone filling selection are now deprecated :
* and are deleted but not put in undo buffer if exist
*/
pcb->m_Zone.DeleteAll();
while( pcb->GetAreaCount() )
{
item = pcb->GetArea( 0 );
itemPicker.m_PickedItem = item;
pickersList.PushItem( itemPicker );
pcb->Remove( item );
}
}
int masque_layer = 0;
if( m_DelDrawings->GetValue() )
masque_layer = (~EDGE_LAYER) & 0x1FFF0000;
if( m_DelEdges->GetValue() )
masque_layer |= EDGE_LAYER;
for( item = pcb->m_Drawings; item != NULL; item = nextitem )
{
nextitem = item->Next();
bool removeme = (g_TabOneLayerMask[ item->GetLayer()] & masque_layer) != 0;
if( ( item->Type() == TYPE_TEXTE ) && m_DelTexts->GetValue() )
removeme = true;
if( removeme )
{
itemPicker.m_PickedItem = item;
pickersList.PushItem( itemPicker );
item->UnLink();
}
}
if( m_DelModules->GetValue() )
{
gen_rastnest = true;
for( item = pcb->m_Modules; item; item = nextitem )
{
nextitem = item->Next();
itemPicker.m_PickedItem = item;
pickersList.PushItem( itemPicker );
item->UnLink();
}
}
if( m_DelTracks->GetValue() )
{
int track_mask_filter = 0;
if( !m_TrackFilterLocked->GetValue() )
track_mask_filter |= SEGM_FIXE;
if( !m_TrackFilterAR->GetValue() )
track_mask_filter |= SEGM_AR;
for( item = pcb->m_Track; item != NULL; item = nextitem )
{
nextitem = item->Next();
if( (item->GetState( SEGM_FIXE | SEGM_AR ) & track_mask_filter) != 0 )
continue;
itemPicker.m_PickedItem = item;
pickersList.PushItem( itemPicker );
item->UnLink();
gen_rastnest = true;
}
}
if( pickersList.GetCount() )
m_Parent->SaveCopyInUndoList( pickersList, UR_DELETED );
if( m_DelMarkers->GetValue() )
pcb->DeleteMARKERs();
if( gen_rastnest )
m_Parent->Compile_Ratsnest( NULL, true );
}
m_Parent->DrawPanel->Refresh();
m_Parent->OnModify();
EndModal( 1 );
}
/** /**
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#include "class_board_design_settings.h" #include "class_board_design_settings.h"
#ifdef PCBNEW #ifdef PCBNEW
#include "autorout.h"
#include "zones.h" #include "zones.h"
#endif #endif
......
...@@ -532,11 +532,11 @@ MODULE* WinEDA_PcbFrame::Create_MuWaveBasicShape( const wxString& name, ...@@ -532,11 +532,11 @@ MODULE* WinEDA_PcbFrame::Create_MuWaveBasicShape( const wxString& name,
Module->m_Value->m_Size = wxSize( DEFAULT_SIZE, DEFAULT_SIZE ); Module->m_Value->m_Size = wxSize( DEFAULT_SIZE, DEFAULT_SIZE );
Module->m_Value->m_Pos0.y = -DEFAULT_SIZE; Module->m_Value->m_Pos0.y = -DEFAULT_SIZE;
Module->m_Value->m_Pos.y += Module->m_Value->m_Pos0.y; Module->m_Value->m_Pos.y += Module->m_Value->m_Pos0.y;
Module->m_Value->m_Width = DEFAULT_SIZE / 4; Module->m_Value->m_Thickness = DEFAULT_SIZE / 4;
Module->m_Reference->m_Size = wxSize( DEFAULT_SIZE, DEFAULT_SIZE ); Module->m_Reference->m_Size = wxSize( DEFAULT_SIZE, DEFAULT_SIZE );
Module->m_Reference->m_Pos0.y = DEFAULT_SIZE; Module->m_Reference->m_Pos0.y = DEFAULT_SIZE;
Module->m_Reference->m_Pos.y += Module->m_Reference->m_Pos0.y; Module->m_Reference->m_Pos.y += Module->m_Reference->m_Pos0.y;
Module->m_Reference->m_Width = DEFAULT_SIZE / 4; Module->m_Reference->m_Thickness = DEFAULT_SIZE / 4;
/* Create 2 pads used in gaps and stubs. /* Create 2 pads used in gaps and stubs.
* The gap is between these 2 pads * The gap is between these 2 pads
......
...@@ -233,6 +233,9 @@ BEGIN_EVENT_TABLE( WinEDA_PcbFrame, WinEDA_BasePcbFrame ) ...@@ -233,6 +233,9 @@ BEGIN_EVENT_TABLE( WinEDA_PcbFrame, WinEDA_BasePcbFrame )
ID_POPUP_PCB_AUTOPLACE_END_RANGE, ID_POPUP_PCB_AUTOPLACE_END_RANGE,
WinEDA_PcbFrame::AutoPlace ) WinEDA_PcbFrame::AutoPlace )
EVT_MENU( ID_POPUP_PCB_REORIENT_ALL_MODULES,
WinEDA_PcbFrame::OnOrientFootprints )
EVT_MENU_RANGE( ID_POPUP_PCB_START_RANGE, ID_POPUP_PCB_END_RANGE, EVT_MENU_RANGE( ID_POPUP_PCB_START_RANGE, ID_POPUP_PCB_END_RANGE,
WinEDA_PcbFrame::Process_Special_Functions ) WinEDA_PcbFrame::Process_Special_Functions )
...@@ -253,11 +256,11 @@ END_EVENT_TABLE() ...@@ -253,11 +256,11 @@ END_EVENT_TABLE()
///////****************************///////////: ///////****************************///////////:
WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father, WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* parent,
const wxString& title, const wxString& title,
const wxPoint& pos, const wxSize& size, const wxPoint& pos, const wxSize& size,
long style ) : long style ) :
WinEDA_BasePcbFrame( father, PCB_FRAME, title, pos, size, style ) WinEDA_BasePcbFrame( parent, PCB_FRAME, title, pos, size, style )
{ {
m_FrameName = wxT( "PcbFrame" ); m_FrameName = wxT( "PcbFrame" );
m_Draw_Sheet_Ref = true; // true to display sheet references m_Draw_Sheet_Ref = true; // true to display sheet references
......
...@@ -187,9 +187,6 @@ enum pcbnew_ids ...@@ -187,9 +187,6 @@ enum pcbnew_ids
ID_POPUP_PCB_AUTOMOVE_ALL_MODULES, ID_POPUP_PCB_AUTOMOVE_ALL_MODULES,
ID_POPUP_PCB_AUTOMOVE_NEW_MODULES, ID_POPUP_PCB_AUTOMOVE_NEW_MODULES,
ID_POPUP_PCB_AUTOPLACE_COMMANDS, ID_POPUP_PCB_AUTOPLACE_COMMANDS,
ID_POPUP_PCB_REORIENT_ALL_MODULES,
ID_POPUP_PCB_AUTOPLACE_ALL_MODULES, ID_POPUP_PCB_AUTOPLACE_ALL_MODULES,
ID_POPUP_PCB_AUTOPLACE_NEW_MODULES, ID_POPUP_PCB_AUTOPLACE_NEW_MODULES,
ID_POPUP_PCB_AUTOPLACE_NEXT_MODULE, ID_POPUP_PCB_AUTOPLACE_NEXT_MODULE,
...@@ -204,6 +201,8 @@ enum pcbnew_ids ...@@ -204,6 +201,8 @@ enum pcbnew_ids
ID_POPUP_PCB_AUTOROUTE_SELECT_LAYERS, ID_POPUP_PCB_AUTOROUTE_SELECT_LAYERS,
ID_POPUP_PCB_AUTOPLACE_END_RANGE, ID_POPUP_PCB_AUTOPLACE_END_RANGE,
ID_POPUP_PCB_REORIENT_ALL_MODULES,
ID_MENU_RECOVER_BOARD, ID_MENU_RECOVER_BOARD,
ID_MENU_READ_LAST_SAVED_VERSION_BOARD, ID_MENU_READ_LAST_SAVED_VERSION_BOARD,
ID_MENU_ARCHIVE_MODULES, ID_MENU_ARCHIVE_MODULES,
......
...@@ -229,7 +229,7 @@ static void PlotTextModule( PLOTTER* plotter, TEXTE_MODULE* pt_texte, ...@@ -229,7 +229,7 @@ static void PlotTextModule( PLOTTER* plotter, TEXTE_MODULE* pt_texte,
orient = pt_texte->GetDrawRotation(); orient = pt_texte->GetDrawRotation();
thickness = pt_texte->m_Width; thickness = pt_texte->m_Thickness;
if( trace_mode == FILAIRE ) if( trace_mode == FILAIRE )
thickness = -1; thickness = -1;
...@@ -486,7 +486,7 @@ void PlotTextePcb( PLOTTER* plotter, TEXTE_PCB* pt_texte, int masque_layer, ...@@ -486,7 +486,7 @@ void PlotTextePcb( PLOTTER* plotter, TEXTE_PCB* pt_texte, int masque_layer,
size = pt_texte->m_Size; size = pt_texte->m_Size;
pos = pt_texte->m_Pos; pos = pt_texte->m_Pos;
orient = pt_texte->m_Orient; orient = pt_texte->m_Orient;
thickness = ( trace_mode==FILAIRE ) ? -1 : pt_texte->m_Width; thickness = ( trace_mode==FILAIRE ) ? -1 : pt_texte->m_Thickness;
if( pt_texte->m_Mirror ) if( pt_texte->m_Mirror )
size.x = -size.x; size.x = -size.x;
......
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
#include "class_drawpanel.h" #include "class_drawpanel.h"
#include "confirm.h" #include "confirm.h"
#include "pcbnew.h" #include "pcbnew.h"
#include "autorout.h"
#include "class_board_design_settings.h" #include "class_board_design_settings.h"
#include "colors_selection.h" #include "colors_selection.h"
......
...@@ -38,7 +38,6 @@ ...@@ -38,7 +38,6 @@
#include "pcbstruct.h" // HISTORY_NUMBER #include "pcbstruct.h" // HISTORY_NUMBER
#include "confirm.h" // DisplayError() #include "confirm.h" // DisplayError()
#include "gestfich.h" // EDA_FileSelector() #include "gestfich.h" // EDA_FileSelector()
#include "autorout.h" // NET_CODES_OK
#include "class_board_design_settings.h" #include "class_board_design_settings.h"
#include "trigo.h" // RotatePoint() #include "trigo.h" // RotatePoint()
......
...@@ -10,10 +10,7 @@ ...@@ -10,10 +10,7 @@
#include "common.h" #include "common.h"
#include "pcbnew.h" #include "pcbnew.h"
#include "wxPcbStruct.h" #include "wxPcbStruct.h"
#include "autorout.h"
#include "zones.h" #include "zones.h"
#include "cell.h"
#include "trigo.h" #include "trigo.h"
#include "protos.h" #include "protos.h"
...@@ -214,144 +211,3 @@ int ZONE_CONTAINER::Fill_Zone_Areas_With_Segments( ) ...@@ -214,144 +211,3 @@ int ZONE_CONTAINER::Fill_Zone_Areas_With_Segments( )
} }
/********************************************/
int Propagation( WinEDA_PcbFrame* frame )
/********************************************/
/**
* Function Propagation
* Used now only in autoplace calculations
* Uses the routing matrix to fill the cells within the zone
* Search and mark cells within the zone, and agree with DRC options.
* Requirements:
* Start from an initial point, to fill zone
* The zone must have no "copper island"
* Algorithm:
* If the current cell has a neightbour flagged as "cell in the zone", it
* become a cell in the zone
* The first point in the zone is the starting point
* 4 searches within the matrix are made:
* 1 - Left to right and top to bottom
* 2 - Right to left and top to bottom
* 3 - bottom to top and Right to left
* 4 - bottom to top and Left to right
* Given the current cell, for each search, we consider the 2 neightbour cells
* the previous cell on the same line and the previous cell on the same column.
*
* This funtion can request some iterations
* Iterations are made until no cell is added to the zone.
* @return: added cells count (i.e. which the attribute CELL_is_ZONE is set)
*/
{
int row, col, nn;
long current_cell, old_cell_H;
int long* pt_cell_V;
int nbpoints = 0;
#define NO_CELL_ZONE (HOLE | CELL_is_EDGE | CELL_is_ZONE)
wxString msg;
Affiche_1_Parametre( frame, 57, wxT( "Detect" ), msg, CYAN );
Affiche_1_Parametre( frame, -1, wxEmptyString, wxT( "1" ), CYAN );
// Alloc memory to handle 1 line or 1 colunmn on the routing matrix
nn = MAX( Nrows, Ncols ) * sizeof(*pt_cell_V);
pt_cell_V = (long*) MyMalloc( nn );
/* search 1 : from left to right and top to bottom */
memset( pt_cell_V, 0, nn );
for( row = 0; row < Nrows; row++ )
{
old_cell_H = 0;
for( col = 0; col < Ncols; col++ )
{
current_cell = GetCell( row, col, BOTTOM ) & NO_CELL_ZONE;
if( current_cell == 0 ) /* a free cell is found */
{
if( (old_cell_H & CELL_is_ZONE)
|| (pt_cell_V[col] & CELL_is_ZONE) )
{
OrCell( row, col, BOTTOM, CELL_is_ZONE );
current_cell = CELL_is_ZONE;
nbpoints++;
}
}
pt_cell_V[col] = old_cell_H = current_cell;
}
}
/* search 2 : from right to left and top to bottom */
Affiche_1_Parametre( frame, -1, wxEmptyString, wxT( "2" ), CYAN );
memset( pt_cell_V, 0, nn );
for( row = 0; row < Nrows; row++ )
{
old_cell_H = 0;
for( col = Ncols - 1; col >= 0; col-- )
{
current_cell = GetCell( row, col, BOTTOM ) & NO_CELL_ZONE;
if( current_cell == 0 ) /* a free cell is found */
{
if( (old_cell_H & CELL_is_ZONE)
|| (pt_cell_V[col] & CELL_is_ZONE) )
{
OrCell( row, col, BOTTOM, CELL_is_ZONE );
current_cell = CELL_is_ZONE;
nbpoints++;
}
}
pt_cell_V[col] = old_cell_H = current_cell;
}
}
/* search 3 : from bottom to top and right to left balayage */
Affiche_1_Parametre( frame, -1, wxEmptyString, wxT( "3" ), CYAN );
memset( pt_cell_V, 0, nn );
for( col = Ncols - 1; col >= 0; col-- )
{
old_cell_H = 0;
for( row = Nrows - 1; row >= 0; row-- )
{
current_cell = GetCell( row, col, BOTTOM ) & NO_CELL_ZONE;
if( current_cell == 0 ) /* a free cell is found */
{
if( (old_cell_H & CELL_is_ZONE)
|| (pt_cell_V[row] & CELL_is_ZONE) )
{
OrCell( row, col, BOTTOM, CELL_is_ZONE );
current_cell = CELL_is_ZONE;
nbpoints++;
}
}
pt_cell_V[row] = old_cell_H = current_cell;
}
}
/* search 4 : from bottom to top and left to right */
Affiche_1_Parametre( frame, -1, wxEmptyString, wxT( "4" ), CYAN );
memset( pt_cell_V, 0, nn );
for( col = 0; col < Ncols; col++ )
{
old_cell_H = 0;
for( row = Nrows - 1; row >= 0; row-- )
{
current_cell = GetCell( row, col, BOTTOM ) & NO_CELL_ZONE;
if( current_cell == 0 ) /* a free cell is found */
{
if( (old_cell_H & CELL_is_ZONE)
|| (pt_cell_V[row] & CELL_is_ZONE) )
{
OrCell( row, col, BOTTOM, CELL_is_ZONE );
current_cell = CELL_is_ZONE;
nbpoints++;
}
}
pt_cell_V[row] = old_cell_H = current_cell;
}
}
MyFree( pt_cell_V );
return nbpoints;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment