Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
72f7cb16
Commit
72f7cb16
authored
Aug 04, 2007
by
dickelbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
beautified
parent
97898b92
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
1375 additions
and
1324 deletions
+1375
-1324
edit.cpp
pcbnew/edit.cpp
+1375
-1324
No files found.
pcbnew/edit.cpp
View file @
72f7cb16
/******************************************************/
/* edit.cpp: fonctions generales de l'edition du PCB */
/******************************************************/
/******************************************************/
/* edit.cpp: fonctions generales de l'edition du PCB */
/******************************************************/
#include "fctsys.h"
...
...
@@ -17,1362 +17,1413 @@
#define CURRENT_ITEM (GetScreen()->m_CurrentItem)
static
void
Process_Move_Item
(
WinEDA_PcbFrame
*
frame
,
EDA_BaseStruct
*
DrawStruct
,
wxDC
*
DC
);
static
void
Process_Move_Item
(
WinEDA_PcbFrame
*
frame
,
EDA_BaseStruct
*
DrawStruct
,
wxDC
*
DC
);
/********************************************************************/
void
WinEDA_PcbFrame
::
OnLeftClick
(
wxDC
*
DC
,
const
wxPoint
&
MousePos
)
void
WinEDA_PcbFrame
::
OnLeftClick
(
wxDC
*
DC
,
const
wxPoint
&
MousePos
)
/********************************************************************/
/* Traite les commandes declench�e par le bouton gauche de la souris,
quand un outil est deja selectionn�
*/
*
quand un outil est deja selectionn�
*/
{
EDA_BaseStruct
*
DrawStruct
=
CURRENT_ITEM
;
DrawPanel
->
m_IgnoreMouseEvents
=
TRUE
;
DrawPanel
->
CursorOff
(
DC
);
if
(
(
m_ID_current_state
==
0
)
||
(
DrawStruct
&&
DrawStruct
->
m_Flags
))
{
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
if
(
DrawStruct
&&
DrawStruct
->
m_Flags
)
// Commande "POPUP" en cours
{
switch
(
DrawStruct
->
m_StructType
)
{
case
TYPETRACK
:
case
TYPEVIA
:
if
(
CURRENT_ITEM
->
m_Flags
&
IS_DRAGGED
)
{
PlaceDraggedTrackSegment
((
TRACK
*
)
DrawStruct
,
DC
);
goto
out
;
}
break
;
case
TYPETEXTE
:
Place_Texte_Pcb
((
TEXTE_PCB
*
)
DrawStruct
,
DC
);
goto
out
;
break
;
case
TYPETEXTEMODULE
:
PlaceTexteModule
(
(
TEXTE_MODULE
*
)
DrawStruct
,
DC
);
goto
out
;
break
;
case
TYPEPAD
:
PlacePad
((
D_PAD
*
)
DrawStruct
,
DC
);
goto
out
;
break
;
case
TYPEMODULE
:
Place_Module
((
MODULE
*
)
DrawStruct
,
DC
);
goto
out
;
break
;
case
TYPEMIRE
:
Place_Mire
((
MIREPCB
*
)
DrawStruct
,
DC
);
goto
out
;
break
;
case
TYPEDRAWSEGMENT
:
if
(
m_ID_current_state
==
0
)
{
Place_DrawItem
(
(
DRAWSEGMENT
*
)
DrawStruct
,
DC
);
goto
out
;
}
break
;
default
:
if
(
m_ID_current_state
==
0
)
{
DisplayError
(
this
,
wxT
(
"WinEDA_PcbFrame::OnLeftClick() err: m_Flags != 0"
)
);
goto
out
;
}
}
}
else
{
DrawStruct
=
PcbGeneralLocateAndDisplay
();
}
}
switch
(
m_ID_current_state
)
{
case
ID_MAIN_MENUBAR
:
case
0
:
break
;
case
ID_NO_SELECT_BUTT
:
break
;
case
ID_PCB_MUWAVE_TOOL_SELF_CMD
:
case
ID_PCB_MUWAVE_TOOL_GAP_CMD
:
case
ID_PCB_MUWAVE_TOOL_STUB_CMD
:
case
ID_PCB_MUWAVE_TOOL_STUB_ARC_CMD
:
case
ID_PCB_MUWAVE_TOOL_FUNCTION_SHAPE_CMD
:
MuWaveCommand
(
DC
,
MousePos
);
break
;
case
ID_PCB_HIGHLIGHT_BUTT
:
{
int
netcode
=
Select_High_Light
(
DC
);
if
(
netcode
<
0
)
Affiche_Infos_Status_Pcb
(
this
);
else
Affiche_Infos_Equipot
(
netcode
,
this
);
}
break
;
case
ID_PCB_SHOW_1_RATSNEST_BUTT
:
DrawStruct
=
PcbGeneralLocateAndDisplay
();
Show_1_Ratsnest
(
DrawStruct
,
DC
);
break
;
case
ID_PCB_MIRE_BUTT
:
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
GetScreen
()
->
m_CurrentItem
=
Create_Mire
(
DC
);
DrawPanel
->
MouseToCursorSchema
();
}
else
if
(
DrawStruct
->
m_StructType
==
TYPEMIRE
)
{
Place_Mire
((
MIREPCB
*
)
DrawStruct
,
DC
);
}
else
DisplayError
(
this
,
wxT
(
"Internal err: Struct not TYPEMIRE"
));
break
;
case
ID_PCB_CIRCLE_BUTT
:
case
ID_PCB_ARC_BUTT
:
case
ID_LINE_COMMENT_BUTT
:
{
int
shape
=
S_SEGMENT
;
if
(
m_ID_current_state
==
ID_PCB_CIRCLE_BUTT
)
shape
=
S_CIRCLE
;
if
(
m_ID_current_state
==
ID_PCB_ARC_BUTT
)
shape
=
S_ARC
;
if
(
GetScreen
()
->
m_Active_Layer
<=
CMP_N
)
{
DisplayError
(
this
,
_
(
"Graphic not autorized on Copper layers"
));
break
;
}
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Begin_DrawSegment
(
NULL
,
shape
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
}
else
if
(
DrawStruct
&&
(
DrawStruct
->
m_StructType
==
TYPEDRAWSEGMENT
)
&&
(
DrawStruct
->
m_Flags
&
IS_NEW
)
)
{
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Begin_DrawSegment
((
DRAWSEGMENT
*
)
DrawStruct
,
shape
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
}
break
;
}
case
ID_TRACK_BUTT
:
if
(
GetScreen
()
->
m_Active_Layer
>
CMP_N
)
{
DisplayError
(
this
,
_
(
"Tracks on Copper layers only "
));
break
;
}
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Begin_Route
(
NULL
,
DC
);
if
(
DrawStruct
)
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
}
else
if
(
DrawStruct
&&
EDA_BaseStruct
*
DrawStruct
=
CURRENT_ITEM
;
DrawPanel
->
m_IgnoreMouseEvents
=
TRUE
;
DrawPanel
->
CursorOff
(
DC
);
if
(
(
m_ID_current_state
==
0
)
||
(
DrawStruct
&&
DrawStruct
->
m_Flags
)
)
{
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
if
(
DrawStruct
&&
DrawStruct
->
m_Flags
)
// Commande "POPUP" en cours
{
switch
(
DrawStruct
->
m_StructType
)
{
case
TYPETRACK
:
case
TYPEVIA
:
if
(
CURRENT_ITEM
->
m_Flags
&
IS_DRAGGED
)
{
PlaceDraggedTrackSegment
(
(
TRACK
*
)
DrawStruct
,
DC
);
goto
out
;
}
break
;
case
TYPETEXTE
:
Place_Texte_Pcb
(
(
TEXTE_PCB
*
)
DrawStruct
,
DC
);
goto
out
;
break
;
case
TYPETEXTEMODULE
:
PlaceTexteModule
(
(
TEXTE_MODULE
*
)
DrawStruct
,
DC
);
goto
out
;
break
;
case
TYPEPAD
:
PlacePad
(
(
D_PAD
*
)
DrawStruct
,
DC
);
goto
out
;
break
;
case
TYPEMODULE
:
Place_Module
(
(
MODULE
*
)
DrawStruct
,
DC
);
goto
out
;
break
;
case
TYPEMIRE
:
Place_Mire
(
(
MIREPCB
*
)
DrawStruct
,
DC
);
goto
out
;
break
;
case
TYPEDRAWSEGMENT
:
if
(
m_ID_current_state
==
0
)
{
Place_DrawItem
(
(
DRAWSEGMENT
*
)
DrawStruct
,
DC
);
goto
out
;
}
break
;
default
:
if
(
m_ID_current_state
==
0
)
{
DisplayError
(
this
,
wxT
(
"WinEDA_PcbFrame::OnLeftClick() err: m_Flags != 0"
)
);
goto
out
;
}
}
}
else
{
DrawStruct
=
PcbGeneralLocateAndDisplay
();
}
}
switch
(
m_ID_current_state
)
{
case
ID_MAIN_MENUBAR
:
case
0
:
break
;
case
ID_NO_SELECT_BUTT
:
break
;
case
ID_PCB_MUWAVE_TOOL_SELF_CMD
:
case
ID_PCB_MUWAVE_TOOL_GAP_CMD
:
case
ID_PCB_MUWAVE_TOOL_STUB_CMD
:
case
ID_PCB_MUWAVE_TOOL_STUB_ARC_CMD
:
case
ID_PCB_MUWAVE_TOOL_FUNCTION_SHAPE_CMD
:
MuWaveCommand
(
DC
,
MousePos
);
break
;
case
ID_PCB_HIGHLIGHT_BUTT
:
{
int
netcode
=
Select_High_Light
(
DC
);
if
(
netcode
<
0
)
Affiche_Infos_Status_Pcb
(
this
);
else
Affiche_Infos_Equipot
(
netcode
,
this
);
}
break
;
case
ID_PCB_SHOW_1_RATSNEST_BUTT
:
DrawStruct
=
PcbGeneralLocateAndDisplay
();
Show_1_Ratsnest
(
DrawStruct
,
DC
);
break
;
case
ID_PCB_MIRE_BUTT
:
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
GetScreen
()
->
m_CurrentItem
=
Create_Mire
(
DC
);
DrawPanel
->
MouseToCursorSchema
();
}
else
if
(
DrawStruct
->
m_StructType
==
TYPEMIRE
)
{
Place_Mire
(
(
MIREPCB
*
)
DrawStruct
,
DC
);
}
else
DisplayError
(
this
,
wxT
(
"Internal err: Struct not TYPEMIRE"
)
);
break
;
case
ID_PCB_CIRCLE_BUTT
:
case
ID_PCB_ARC_BUTT
:
case
ID_LINE_COMMENT_BUTT
:
{
int
shape
=
S_SEGMENT
;
if
(
m_ID_current_state
==
ID_PCB_CIRCLE_BUTT
)
shape
=
S_CIRCLE
;
if
(
m_ID_current_state
==
ID_PCB_ARC_BUTT
)
shape
=
S_ARC
;
if
(
GetScreen
()
->
m_Active_Layer
<=
CMP_N
)
{
DisplayError
(
this
,
_
(
"Graphic not autorized on Copper layers"
)
);
break
;
}
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Begin_DrawSegment
(
NULL
,
shape
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
}
else
if
(
DrawStruct
&&
(
DrawStruct
->
m_StructType
==
TYPEDRAWSEGMENT
)
&&
(
DrawStruct
->
m_Flags
&
IS_NEW
)
)
{
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Begin_DrawSegment
(
(
DRAWSEGMENT
*
)
DrawStruct
,
shape
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
}
break
;
}
case
ID_TRACK_BUTT
:
if
(
GetScreen
()
->
m_Active_Layer
>
CMP_N
)
{
DisplayError
(
this
,
_
(
"Tracks on Copper layers only "
)
);
break
;
}
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Begin_Route
(
NULL
,
DC
);
if
(
DrawStruct
)
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
}
else
if
(
DrawStruct
&&
// (DrawStruct->m_StructType == TYPETRACK) &&
(
DrawStruct
->
m_Flags
&
IS_NEW
)
)
{
TRACK
*
track
=
Begin_Route
((
TRACK
*
)
DrawStruct
,
DC
);
if
(
track
)
// c'est a dire si OK
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
track
;
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
}
break
;
case
ID_PCB_ZONES_BUTT
:
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Begin_Zone
();
}
else
if
(
DrawStruct
&&
(
DrawStruct
->
m_StructType
==
TYPEEDGEZONE
)
&&
(
DrawStruct
->
m_Flags
&
IS_NEW
)
)
{
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Begin_Zone
();
}
else
DisplayError
(
this
,
wxT
(
"Edit: zone internal error"
));
break
;
case
ID_TEXT_COMMENT_BUTT
:
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
GetScreen
()
->
m_CurrentItem
=
Create_Texte_Pcb
(
DC
);
DrawPanel
->
MouseToCursorSchema
();
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
}
else
if
(
DrawStruct
->
m_StructType
==
TYPETEXTE
)
{
Place_Texte_Pcb
((
TEXTE_PCB
*
)
DrawStruct
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
}
else
DisplayError
(
this
,
wxT
(
"Internal err: Struct not TYPETEXTE"
));
break
;
case
ID_COMPONENT_BUTT
:
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
DrawPanel
->
MouseToCursorSchema
();
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Load_Module_From_Library
(
wxEmptyString
,
DC
);
if
(
DrawStruct
)
StartMove_Module
((
MODULE
*
)
DrawStruct
,
DC
);
}
else
if
(
DrawStruct
->
m_StructType
==
TYPEMODULE
)
{
Place_Module
((
MODULE
*
)
DrawStruct
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
}
else
DisplayError
(
this
,
wxT
(
"Internal err: Struct not TYPEMODULE"
));
break
;
case
ID_PCB_COTATION_BUTT
:
if
(
GetScreen
()
->
m_Active_Layer
<=
CMP_N
)
{
DisplayError
(
this
,
_
(
"Cotation not autorized on Copper layers"
));
break
;
}
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Begin_Cotation
(
NULL
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
}
else
if
(
DrawStruct
&&
(
DrawStruct
->
m_StructType
==
TYPECOTATION
)
&&
(
DrawStruct
->
m_Flags
&
IS_NEW
)
)
{
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Begin_Cotation
((
COTATION
*
)
DrawStruct
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
}
else
DisplayError
(
this
,
wxT
(
"Internal err: Struct not COTATION"
));
break
;
case
ID_PCB_DELETE_ITEM_BUTT
:
if
(
!
DrawStruct
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
DrawStruct
=
PcbGeneralLocateAndDisplay
();
if
(
DrawStruct
&&
(
DrawStruct
->
m_Flags
==
0
)
)
{
RemoveStruct
(
DrawStruct
,
DC
);
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
NULL
;
}
}
break
;
case
ID_PCB_PLACE_OFFSET_COORD_BUTT
:
DrawPanel
->
m_Draw_Auxiliary_Axis
(
DC
,
GR_XOR
);
m_Auxiliary_Axis_Position
=
GetScreen
()
->
m_Curseur
;
DrawPanel
->
m_Draw_Auxiliary_Axis
(
DC
,
GR_COPY
);
GetScreen
()
->
SetModify
();
break
;
default
:
DrawPanel
->
SetCursor
(
wxCURSOR_ARROW
);
DisplayError
(
this
,
wxT
(
"WinEDA_PcbFrame::OnLeftClick() id error"
));
SetToolID
(
0
,
wxCURSOR_ARROW
,
wxEmptyString
);
break
;
}
out
:
DrawPanel
->
m_IgnoreMouseEvents
=
FALSE
;
DrawPanel
->
CursorOn
(
DC
);
(
DrawStruct
->
m_Flags
&
IS_NEW
)
)
{
TRACK
*
track
=
Begin_Route
(
(
TRACK
*
)
DrawStruct
,
DC
);
if
(
track
)
// c'est a dire si OK
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
track
;
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
}
break
;
case
ID_PCB_ZONES_BUTT
:
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Begin_Zone
();
}
else
if
(
DrawStruct
&&
(
DrawStruct
->
m_StructType
==
TYPEEDGEZONE
)
&&
(
DrawStruct
->
m_Flags
&
IS_NEW
)
)
{
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Begin_Zone
();
}
else
DisplayError
(
this
,
wxT
(
"Edit: zone internal error"
)
);
break
;
case
ID_TEXT_COMMENT_BUTT
:
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
GetScreen
()
->
m_CurrentItem
=
Create_Texte_Pcb
(
DC
);
DrawPanel
->
MouseToCursorSchema
();
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
}
else
if
(
DrawStruct
->
m_StructType
==
TYPETEXTE
)
{
Place_Texte_Pcb
(
(
TEXTE_PCB
*
)
DrawStruct
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
}
else
DisplayError
(
this
,
wxT
(
"Internal err: Struct not TYPETEXTE"
)
);
break
;
case
ID_COMPONENT_BUTT
:
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
DrawPanel
->
MouseToCursorSchema
();
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Load_Module_From_Library
(
wxEmptyString
,
DC
);
if
(
DrawStruct
)
StartMove_Module
(
(
MODULE
*
)
DrawStruct
,
DC
);
}
else
if
(
DrawStruct
->
m_StructType
==
TYPEMODULE
)
{
Place_Module
(
(
MODULE
*
)
DrawStruct
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
}
else
DisplayError
(
this
,
wxT
(
"Internal err: Struct not TYPEMODULE"
)
);
break
;
case
ID_PCB_COTATION_BUTT
:
if
(
GetScreen
()
->
m_Active_Layer
<=
CMP_N
)
{
DisplayError
(
this
,
_
(
"Cotation not autorized on Copper layers"
)
);
break
;
}
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Begin_Cotation
(
NULL
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
}
else
if
(
DrawStruct
&&
(
DrawStruct
->
m_StructType
==
TYPECOTATION
)
&&
(
DrawStruct
->
m_Flags
&
IS_NEW
)
)
{
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
Begin_Cotation
(
(
COTATION
*
)
DrawStruct
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
}
else
DisplayError
(
this
,
wxT
(
"Internal err: Struct not COTATION"
)
);
break
;
case
ID_PCB_DELETE_ITEM_BUTT
:
if
(
!
DrawStruct
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
DrawStruct
=
PcbGeneralLocateAndDisplay
();
if
(
DrawStruct
&&
(
DrawStruct
->
m_Flags
==
0
)
)
{
RemoveStruct
(
DrawStruct
,
DC
);
GetScreen
()
->
m_CurrentItem
=
DrawStruct
=
NULL
;
}
}
break
;
case
ID_PCB_PLACE_OFFSET_COORD_BUTT
:
DrawPanel
->
m_Draw_Auxiliary_Axis
(
DC
,
GR_XOR
);
m_Auxiliary_Axis_Position
=
GetScreen
()
->
m_Curseur
;
DrawPanel
->
m_Draw_Auxiliary_Axis
(
DC
,
GR_COPY
);
GetScreen
()
->
SetModify
();
break
;
default
:
DrawPanel
->
SetCursor
(
wxCURSOR_ARROW
);
DisplayError
(
this
,
wxT
(
"WinEDA_PcbFrame::OnLeftClick() id error"
)
);
SetToolID
(
0
,
wxCURSOR_ARROW
,
wxEmptyString
);
break
;
}
out
:
DrawPanel
->
m_IgnoreMouseEvents
=
FALSE
;
DrawPanel
->
CursorOn
(
DC
);
}
/*********************************************************************/
void
WinEDA_PcbFrame
::
Process_Special_Functions
(
wxCommandEvent
&
event
)
void
WinEDA_PcbFrame
::
Process_Special_Functions
(
wxCommandEvent
&
event
)
/*********************************************************************/
/* Traite les selections d'outils et les commandes appelees du menu POPUP
*/
*/
{
int
id
=
event
.
GetId
();
wxPoint
pos
;
wxClientDC
dc
(
DrawPanel
);
int
itmp
;
DrawPanel
->
CursorOff
(
&
dc
);
DrawPanel
->
PrepareGraphicContext
(
&
dc
);
wxGetMousePosition
(
&
pos
.
x
,
&
pos
.
y
);
pos
.
y
+=
20
;
switch
(
id
)
// Arret eventuel de la commande de d�placement en cours
{
case
wxID_CUT
:
case
wxID_COPY
:
case
ID_AUX_TOOLBAR_PCB_TRACK_WIDTH
:
case
ID_AUX_TOOLBAR_PCB_VIA_SIZE
:
case
ID_ON_GRID_SELECT
:
case
ID_ON_ZOOM_SELECT
:
case
ID_PCB_USER_GRID_SETUP
:
case
ID_TOOLBARH_PCB_SELECT_LAYER
:
case
ID_POPUP_PCB_ROTATE_TEXTEPCB
:
case
ID_POPUP_PCB_EDIT_TEXTEPCB
:
case
ID_POPUP_PCB_EDIT_MIRE
:
case
ID_POPUP_PCB_ROTATE_TEXTMODULE
:
case
ID_POPUP_PCB_ROTATE_MODULE_CLOCKWISE
:
case
ID_POPUP_PCB_ROTATE_MODULE_COUNTERCLOCKWISE
:
case
ID_POPUP_PCB_CHANGE_SIDE_MODULE
:
case
ID_POPUP_PCB_EDIT_MODULE
:
case
ID_POPUP_PCB_EDIT_TEXTMODULE
:
case
ID_POPUP_PCB_STOP_CURRENT_DRAWING
:
case
ID_POPUP_PCB_END_TRACK
:
case
ID_POPUP_PCB_PLACE_VIA
:
case
ID_POPUP_PCB_IMPORT_PAD_SETTINGS
:
case
ID_POPUP_PCB_EXPORT_PAD_SETTINGS
:
case
ID_POPUP_PCB_GLOBAL_IMPORT_PAD_SETTINGS
:
case
ID_POPUP_PCB_STOP_CURRENT_EDGE_ZONE
:
case
ID_POPUP_PCB_DELETE_EDGE_ZONE
:
case
ID_POPUP_PCB_DELETE_ZONE_LIMIT
:
case
ID_POPUP_PCB_EDIT_ZONE
:
case
ID_POPUP_PCB_DELETE_ZONE
:
case
ID_POPUP_PCB_DELETE_TRACKSEG
:
case
ID_POPUP_PCB_DELETE_TRACK
:
case
ID_POPUP_PCB_DELETE_TRACKNET
:
case
ID_POPUP_PCB_FILL_ZONE
:
case
ID_POPUP_PCB_SELECT_NET_ZONE
:
case
ID_POPUP_PCB_SELECT_LAYER
:
case
ID_POPUP_PCB_SELECT_CU_LAYER
:
case
ID_POPUP_PCB_SELECT_LAYER_PAIR
:
case
ID_POPUP_PCB_SELECT_NO_CU_LAYER
:
case
ID_POPUP_PCB_SELECT_WIDTH
:
case
ID_POPUP_PCB_SELECT_WIDTH1
:
case
ID_POPUP_PCB_SELECT_WIDTH2
:
case
ID_POPUP_PCB_SELECT_WIDTH3
:
case
ID_POPUP_PCB_SELECT_WIDTH4
:
case
ID_POPUP_PCB_SELECT_WIDTH5
:
case
ID_POPUP_PCB_SELECT_WIDTH6
:
case
ID_POPUP_PCB_SELECT_WIDTH7
:
case
ID_POPUP_PCB_SELECT_WIDTH8
:
case
ID_POPUP_PCB_SELECT_VIASIZE
:
case
ID_POPUP_PCB_SELECT_VIASIZE1
:
case
ID_POPUP_PCB_SELECT_VIASIZE2
:
case
ID_POPUP_PCB_SELECT_VIASIZE3
:
case
ID_POPUP_PCB_SELECT_VIASIZE4
:
case
ID_POPUP_PCB_SELECT_VIASIZE5
:
case
ID_POPUP_PCB_SELECT_VIASIZE6
:
case
ID_POPUP_PCB_SELECT_VIASIZE7
:
case
ID_POPUP_PCB_SELECT_VIASIZE8
:
case
ID_POPUP_PCB_MOVE_TRACK_NODE
:
case
ID_POPUP_PCB_DRAG_TRACK_SEGMENT_KEEP_SLOPE
:
case
ID_POPUP_PCB_DRAG_TRACK_SEGMENT
:
case
ID_POPUP_PCB_MOVE_TRACK_SEGMENT
:
case
ID_POPUP_PCB_PLACE_MOVED_TRACK_NODE
:
case
ID_POPUP_PCB_BREAK_TRACK
:
case
ID_POPUP_PCB_EDIT_NET
:
case
ID_POPUP_PCB_EDIT_TRACK
:
case
ID_POPUP_PCB_EDIT_TRACKSEG
:
case
ID_POPUP_PCB_LOCK_ON_TRACKSEG
:
case
ID_POPUP_PCB_LOCK_OFF_TRACKSEG
:
case
ID_POPUP_PCB_LOCK_ON_TRACK
:
case
ID_POPUP_PCB_LOCK_OFF_TRACK
:
case
ID_POPUP_PCB_LOCK_ON_NET
:
case
ID_POPUP_PCB_LOCK_OFF_NET
:
case
ID_POPUP_DELETE_BLOCK
:
case
ID_POPUP_PLACE_BLOCK
:
case
ID_POPUP_ZOOM_BLOCK
:
case
ID_POPUP_INVERT_BLOCK
:
case
ID_POPUP_ROTATE_BLOCK
:
case
ID_POPUP_COPY_BLOCK
:
case
ID_POPUP_PCB_VIA_EDITING
:
case
ID_POPUP_PCB_VIA_HOLE_TO_DEFAULT
:
case
ID_POPUP_PCB_VIA_HOLE_TO_VALUE
:
case
ID_POPUP_PCB_VIA_HOLE_ENTER_VALUE
:
case
ID_POPUP_PCB_VIA_HOLE_EXPORT
:
case
ID_POPUP_PCB_VIA_HOLE_RESET_TO_DEFAULT
:
case
ID_POPUP_PCB_VIA_HOLE_EXPORT_TO_OTHERS
:
break
;
case
ID_POPUP_CANCEL_CURRENT_COMMAND
:
if
(
DrawPanel
->
ManageCurseur
&&
DrawPanel
->
ForceCloseManageCurseur
)
{
DrawPanel
->
ForceCloseManageCurseur
(
DrawPanel
,
&
dc
);
}
/* ne devrait pas etre execute, sauf bug */
if
(
m_CurrentScreen
->
BlockLocate
.
m_Command
!=
BLOCK_IDLE
)
{
m_CurrentScreen
->
BlockLocate
.
m_Command
=
BLOCK_IDLE
;
m_CurrentScreen
->
BlockLocate
.
m_State
=
STATE_NO_BLOCK
;
m_CurrentScreen
->
BlockLocate
.
m_BlockDrawStruct
=
NULL
;
}
if
(
m_ID_current_state
==
0
)
SetToolID
(
0
,
wxCURSOR_ARROW
,
wxEmptyString
);
else
SetCursor
(
DrawPanel
->
m_PanelCursor
=
DrawPanel
->
m_PanelDefaultCursor
);
break
;
default
:
// Arret de la commande de d�placement en cours
if
(
DrawPanel
->
ManageCurseur
&&
DrawPanel
->
ForceCloseManageCurseur
)
{
DrawPanel
->
ForceCloseManageCurseur
(
DrawPanel
,
&
dc
);
}
SetToolID
(
0
,
wxCURSOR_ARROW
,
wxEmptyString
);
break
;
}
switch
(
id
)
// Traitement des commandes
{
case
ID_EXIT
:
Close
(
TRUE
);
break
;
case
ID_OPEN_MODULE_EDITOR
:
if
(
m_Parent
->
m_ModuleEditFrame
==
NULL
)
{
m_Parent
->
m_ModuleEditFrame
=
new
WinEDA_ModuleEditFrame
(
this
,
m_Parent
,
_
(
"Module Editor"
),
wxPoint
(
-
1
,
-
1
),
wxSize
(
600
,
400
)
);
m_Parent
->
m_ModuleEditFrame
->
Show
(
TRUE
);
m_Parent
->
m_ModuleEditFrame
->
Zoom_Automatique
(
TRUE
);
}
else
m_Parent
->
m_ModuleEditFrame
->
Iconize
(
FALSE
);
break
;
case
ID_NEW_PROJECT
:
case
ID_LOAD_PROJECT
:
Files_io
(
event
);
break
;
case
ID_PCB_GLOBAL_DELETE
:
InstallPcbGlobalDeleteFrame
(
pos
);
break
;
case
ID_POPUP_PLACE_BLOCK
:
GetScreen
()
->
BlockLocate
.
m_Command
=
BLOCK_MOVE
;
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
HandleBlockPlace
(
&
dc
);
break
;
case
ID_POPUP_COPY_BLOCK
:
GetScreen
()
->
BlockLocate
.
m_Command
=
BLOCK_COPY
;
m_CurrentScreen
->
BlockLocate
.
SetMessageBlock
(
this
);
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
HandleBlockPlace
(
&
dc
);
break
;
case
ID_POPUP_ZOOM_BLOCK
:
GetScreen
()
->
BlockLocate
.
m_Command
=
BLOCK_ZOOM
;
m_CurrentScreen
->
BlockLocate
.
SetMessageBlock
(
this
);
m_CurrentScreen
->
BlockLocate
.
SetMessageBlock
(
this
);
HandleBlockEnd
(
&
dc
);
break
;
case
ID_POPUP_DELETE_BLOCK
:
GetScreen
()
->
BlockLocate
.
m_Command
=
BLOCK_DELETE
;
m_CurrentScreen
->
BlockLocate
.
SetMessageBlock
(
this
);
HandleBlockEnd
(
&
dc
);
break
;
case
ID_POPUP_ROTATE_BLOCK
:
GetScreen
()
->
BlockLocate
.
m_Command
=
BLOCK_ROTATE
;
m_CurrentScreen
->
BlockLocate
.
SetMessageBlock
(
this
);
HandleBlockEnd
(
&
dc
);
break
;
case
ID_POPUP_INVERT_BLOCK
:
GetScreen
()
->
BlockLocate
.
m_Command
=
BLOCK_INVERT
;
m_CurrentScreen
->
BlockLocate
.
SetMessageBlock
(
this
);
HandleBlockEnd
(
&
dc
);
break
;
case
ID_UNDO_BUTT
:
UnDeleteItem
(
&
dc
);
break
;
case
ID_DRC_CONTROL
:
Install_Test_DRC_Frame
(
&
dc
);
break
;
case
ID_GET_NETLIST
:
InstallNetlistFrame
(
&
dc
,
wxPoint
(
-
1
,
-
1
));
break
;
case
ID_GET_TOOLS
:
// InstallToolsFrame(this, wxPoint(-1,-1) );
break
;
case
ID_FIND_ITEMS
:
InstallFindFrame
(
pos
,
&
dc
);
break
;
case
ID_TRACK_BUTT
:
SetToolID
(
id
,
wxCURSOR_PENCIL
,
_
(
"Add Tracks"
));
DisplayTrackSettings
();
if
(
(
m_Pcb
->
m_Status_Pcb
&
LISTE_CHEVELU_OK
)
==
0
)
{
Compile_Ratsnest
(
&
dc
,
TRUE
);
}
break
;
case
ID_PCB_ZONES_BUTT
:
SetToolID
(
id
,
wxCURSOR_PENCIL
,
_
(
"Add Zones"
));
if
(
!
DisplayOpt
.
DisplayZones
)
DisplayInfo
(
this
,
_
(
"Warning: Display Zone is OFF!!!"
)
);
DelLimitesZone
(
&
dc
,
TRUE
);
if
(
!
g_HightLigt_Status
&&
(
g_HightLigth_NetCode
>
0
)
)
Hight_Light
(
&
dc
);
break
;
case
ID_PCB_MIRE_BUTT
:
SetToolID
(
id
,
wxCURSOR_PENCIL
,
_
(
"Add Mire"
));
break
;
case
ID_PCB_PLACE_OFFSET_COORD_BUTT
:
SetToolID
(
id
,
wxCURSOR_PENCIL
,
_
(
"Adjust Zero"
));
break
;
case
ID_LINE_COMMENT_BUTT
:
case
ID_PCB_ARC_BUTT
:
case
ID_PCB_CIRCLE_BUTT
:
SetToolID
(
id
,
wxCURSOR_PENCIL
,
_
(
"Add Graphic"
));
break
;
case
ID_TEXT_COMMENT_BUTT
:
SetToolID
(
id
,
wxCURSOR_PENCIL
,
_
(
"Add Text"
));
break
;
case
ID_COMPONENT_BUTT
:
SetToolID
(
id
,
wxCURSOR_HAND
,
_
(
"Add Modules"
));
break
;
case
ID_PCB_COTATION_BUTT
:
SetToolID
(
id
,
wxCURSOR_PENCIL
,
_
(
"Add Cotation"
));
break
;
case
ID_NO_SELECT_BUTT
:
SetToolID
(
0
,
wxCURSOR_ARROW
,
wxEmptyString
);
break
;
case
ID_PCB_HIGHLIGHT_BUTT
:
SetToolID
(
id
,
wxCURSOR_HAND
,
_
(
"Net Highlight"
));
break
;
case
ID_PCB_SHOW_1_RATSNEST_BUTT
:
SetToolID
(
id
,
wxCURSOR_HAND
,
_
(
"Local Ratsnest"
));
if
(
(
m_Pcb
->
m_Status_Pcb
&
LISTE_CHEVELU_OK
)
==
0
)
Compile_Ratsnest
(
&
dc
,
TRUE
);
break
;
case
ID_POPUP_CLOSE_CURRENT_TOOL
:
SetToolID
(
0
,
wxCURSOR_ARROW
,
wxEmptyString
);
break
;
case
ID_POPUP_CANCEL_CURRENT_COMMAND
:
break
;
case
ID_POPUP_END_LINE
:
DrawPanel
->
MouseToCursorSchema
();
int
id
=
event
.
GetId
();
wxPoint
pos
;
int
itmp
;
wxClientDC
dc
(
DrawPanel
);
DrawPanel
->
CursorOff
(
&
dc
);
DrawPanel
->
PrepareGraphicContext
(
&
dc
);
wxGetMousePosition
(
&
pos
.
x
,
&
pos
.
y
);
pos
.
y
+=
20
;
switch
(
id
)
// Arret eventuel de la commande de d�placement en cours
{
case
wxID_CUT
:
case
wxID_COPY
:
case
ID_AUX_TOOLBAR_PCB_TRACK_WIDTH
:
case
ID_AUX_TOOLBAR_PCB_VIA_SIZE
:
case
ID_ON_GRID_SELECT
:
case
ID_ON_ZOOM_SELECT
:
case
ID_PCB_USER_GRID_SETUP
:
case
ID_TOOLBARH_PCB_SELECT_LAYER
:
case
ID_POPUP_PCB_ROTATE_TEXTEPCB
:
case
ID_POPUP_PCB_EDIT_TEXTEPCB
:
case
ID_POPUP_PCB_EDIT_MIRE
:
case
ID_POPUP_PCB_ROTATE_TEXTMODULE
:
case
ID_POPUP_PCB_ROTATE_MODULE_CLOCKWISE
:
case
ID_POPUP_PCB_ROTATE_MODULE_COUNTERCLOCKWISE
:
case
ID_POPUP_PCB_CHANGE_SIDE_MODULE
:
case
ID_POPUP_PCB_EDIT_MODULE
:
case
ID_POPUP_PCB_EDIT_TEXTMODULE
:
case
ID_POPUP_PCB_STOP_CURRENT_DRAWING
:
case
ID_POPUP_PCB_END_TRACK
:
case
ID_POPUP_PCB_PLACE_VIA
:
case
ID_POPUP_PCB_IMPORT_PAD_SETTINGS
:
case
ID_POPUP_PCB_EXPORT_PAD_SETTINGS
:
case
ID_POPUP_PCB_GLOBAL_IMPORT_PAD_SETTINGS
:
case
ID_POPUP_PCB_STOP_CURRENT_EDGE_ZONE
:
case
ID_POPUP_PCB_DELETE_EDGE_ZONE
:
case
ID_POPUP_PCB_DELETE_ZONE_LIMIT
:
case
ID_POPUP_PCB_EDIT_ZONE
:
case
ID_POPUP_PCB_DELETE_ZONE
:
case
ID_POPUP_PCB_DELETE_TRACKSEG
:
case
ID_POPUP_PCB_DELETE_TRACK
:
case
ID_POPUP_PCB_DELETE_TRACKNET
:
case
ID_POPUP_PCB_FILL_ZONE
:
case
ID_POPUP_PCB_SELECT_NET_ZONE
:
case
ID_POPUP_PCB_SELECT_LAYER
:
case
ID_POPUP_PCB_SELECT_CU_LAYER
:
case
ID_POPUP_PCB_SELECT_LAYER_PAIR
:
case
ID_POPUP_PCB_SELECT_NO_CU_LAYER
:
case
ID_POPUP_PCB_SELECT_WIDTH
:
case
ID_POPUP_PCB_SELECT_WIDTH1
:
case
ID_POPUP_PCB_SELECT_WIDTH2
:
case
ID_POPUP_PCB_SELECT_WIDTH3
:
case
ID_POPUP_PCB_SELECT_WIDTH4
:
case
ID_POPUP_PCB_SELECT_WIDTH5
:
case
ID_POPUP_PCB_SELECT_WIDTH6
:
case
ID_POPUP_PCB_SELECT_WIDTH7
:
case
ID_POPUP_PCB_SELECT_WIDTH8
:
case
ID_POPUP_PCB_SELECT_VIASIZE
:
case
ID_POPUP_PCB_SELECT_VIASIZE1
:
case
ID_POPUP_PCB_SELECT_VIASIZE2
:
case
ID_POPUP_PCB_SELECT_VIASIZE3
:
case
ID_POPUP_PCB_SELECT_VIASIZE4
:
case
ID_POPUP_PCB_SELECT_VIASIZE5
:
case
ID_POPUP_PCB_SELECT_VIASIZE6
:
case
ID_POPUP_PCB_SELECT_VIASIZE7
:
case
ID_POPUP_PCB_SELECT_VIASIZE8
:
case
ID_POPUP_PCB_MOVE_TRACK_NODE
:
case
ID_POPUP_PCB_DRAG_TRACK_SEGMENT_KEEP_SLOPE
:
case
ID_POPUP_PCB_DRAG_TRACK_SEGMENT
:
case
ID_POPUP_PCB_MOVE_TRACK_SEGMENT
:
case
ID_POPUP_PCB_PLACE_MOVED_TRACK_NODE
:
case
ID_POPUP_PCB_BREAK_TRACK
:
case
ID_POPUP_PCB_EDIT_NET
:
case
ID_POPUP_PCB_EDIT_TRACK
:
case
ID_POPUP_PCB_EDIT_TRACKSEG
:
case
ID_POPUP_PCB_LOCK_ON_TRACKSEG
:
case
ID_POPUP_PCB_LOCK_OFF_TRACKSEG
:
case
ID_POPUP_PCB_LOCK_ON_TRACK
:
case
ID_POPUP_PCB_LOCK_OFF_TRACK
:
case
ID_POPUP_PCB_LOCK_ON_NET
:
case
ID_POPUP_PCB_LOCK_OFF_NET
:
case
ID_POPUP_DELETE_BLOCK
:
case
ID_POPUP_PLACE_BLOCK
:
case
ID_POPUP_ZOOM_BLOCK
:
case
ID_POPUP_INVERT_BLOCK
:
case
ID_POPUP_ROTATE_BLOCK
:
case
ID_POPUP_COPY_BLOCK
:
case
ID_POPUP_PCB_VIA_EDITING
:
case
ID_POPUP_PCB_VIA_HOLE_TO_DEFAULT
:
case
ID_POPUP_PCB_VIA_HOLE_TO_VALUE
:
case
ID_POPUP_PCB_VIA_HOLE_ENTER_VALUE
:
case
ID_POPUP_PCB_VIA_HOLE_EXPORT
:
case
ID_POPUP_PCB_VIA_HOLE_RESET_TO_DEFAULT
:
case
ID_POPUP_PCB_VIA_HOLE_EXPORT_TO_OTHERS
:
break
;
case
ID_POPUP_CANCEL_CURRENT_COMMAND
:
if
(
DrawPanel
->
ManageCurseur
&&
DrawPanel
->
ForceCloseManageCurseur
)
{
DrawPanel
->
ForceCloseManageCurseur
(
DrawPanel
,
&
dc
);
}
/* ne devrait pas etre execute, sauf bug */
if
(
m_CurrentScreen
->
BlockLocate
.
m_Command
!=
BLOCK_IDLE
)
{
m_CurrentScreen
->
BlockLocate
.
m_Command
=
BLOCK_IDLE
;
m_CurrentScreen
->
BlockLocate
.
m_State
=
STATE_NO_BLOCK
;
m_CurrentScreen
->
BlockLocate
.
m_BlockDrawStruct
=
NULL
;
}
if
(
m_ID_current_state
==
0
)
SetToolID
(
0
,
wxCURSOR_ARROW
,
wxEmptyString
);
else
SetCursor
(
DrawPanel
->
m_PanelCursor
=
DrawPanel
->
m_PanelDefaultCursor
);
break
;
default
:
// Arret de la commande de d�placement en cours
if
(
DrawPanel
->
ManageCurseur
&&
DrawPanel
->
ForceCloseManageCurseur
)
{
DrawPanel
->
ForceCloseManageCurseur
(
DrawPanel
,
&
dc
);
}
SetToolID
(
0
,
wxCURSOR_ARROW
,
wxEmptyString
);
break
;
}
switch
(
id
)
// Traitement des commandes
{
case
ID_EXIT
:
Close
(
TRUE
);
break
;
case
ID_OPEN_MODULE_EDITOR
:
if
(
m_Parent
->
m_ModuleEditFrame
==
NULL
)
{
m_Parent
->
m_ModuleEditFrame
=
new
WinEDA_ModuleEditFrame
(
this
,
m_Parent
,
_
(
"Module Editor"
),
wxPoint
(
-
1
,
-
1
),
wxSize
(
600
,
400
)
);
m_Parent
->
m_ModuleEditFrame
->
Show
(
TRUE
);
m_Parent
->
m_ModuleEditFrame
->
Zoom_Automatique
(
TRUE
);
}
else
m_Parent
->
m_ModuleEditFrame
->
Iconize
(
FALSE
);
break
;
case
ID_NEW_PROJECT
:
case
ID_LOAD_PROJECT
:
Files_io
(
event
);
break
;
case
ID_PCB_GLOBAL_DELETE
:
InstallPcbGlobalDeleteFrame
(
pos
);
break
;
case
ID_POPUP_PLACE_BLOCK
:
GetScreen
()
->
BlockLocate
.
m_Command
=
BLOCK_MOVE
;
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
HandleBlockPlace
(
&
dc
);
break
;
case
ID_POPUP_COPY_BLOCK
:
GetScreen
()
->
BlockLocate
.
m_Command
=
BLOCK_COPY
;
m_CurrentScreen
->
BlockLocate
.
SetMessageBlock
(
this
);
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
HandleBlockPlace
(
&
dc
);
break
;
case
ID_POPUP_ZOOM_BLOCK
:
GetScreen
()
->
BlockLocate
.
m_Command
=
BLOCK_ZOOM
;
m_CurrentScreen
->
BlockLocate
.
SetMessageBlock
(
this
);
m_CurrentScreen
->
BlockLocate
.
SetMessageBlock
(
this
);
HandleBlockEnd
(
&
dc
);
break
;
case
ID_POPUP_DELETE_BLOCK
:
GetScreen
()
->
BlockLocate
.
m_Command
=
BLOCK_DELETE
;
m_CurrentScreen
->
BlockLocate
.
SetMessageBlock
(
this
);
HandleBlockEnd
(
&
dc
);
break
;
case
ID_POPUP_ROTATE_BLOCK
:
GetScreen
()
->
BlockLocate
.
m_Command
=
BLOCK_ROTATE
;
m_CurrentScreen
->
BlockLocate
.
SetMessageBlock
(
this
);
HandleBlockEnd
(
&
dc
);
break
;
case
ID_POPUP_INVERT_BLOCK
:
GetScreen
()
->
BlockLocate
.
m_Command
=
BLOCK_INVERT
;
m_CurrentScreen
->
BlockLocate
.
SetMessageBlock
(
this
);
HandleBlockEnd
(
&
dc
);
break
;
case
ID_UNDO_BUTT
:
UnDeleteItem
(
&
dc
);
break
;
case
ID_DRC_CONTROL
:
Install_Test_DRC_Frame
(
&
dc
);
break
;
case
ID_GET_NETLIST
:
InstallNetlistFrame
(
&
dc
,
wxPoint
(
-
1
,
-
1
)
);
break
;
case
ID_GET_TOOLS
:
// InstalloolsFrame(this, wxPoint(-1,-1) );
break
;
case
ID_FIND_ITEMS
:
InstallFindFrame
(
pos
,
&
dc
);
break
;
case
ID_TRACK_BUTT
:
SetToolID
(
id
,
wxCURSOR_PENCIL
,
_
(
"Add Tracks"
)
);
DisplayTrackSettings
();
if
(
(
m_Pcb
->
m_Status_Pcb
&
LISTE_CHEVELU_OK
)
==
0
)
{
Compile_Ratsnest
(
&
dc
,
TRUE
);
}
break
;
case
ID_PCB_ZONES_BUTT
:
SetToolID
(
id
,
wxCURSOR_PENCIL
,
_
(
"Add Zones"
)
);
if
(
!
DisplayOpt
.
DisplayZones
)
DisplayInfo
(
this
,
_
(
"Warning: Display Zone is OFF!!!"
)
);
DelLimitesZone
(
&
dc
,
TRUE
);
if
(
!
g_HightLigt_Status
&&
(
g_HightLigth_NetCode
>
0
)
)
Hight_Light
(
&
dc
);
break
;
case
ID_PCB_MIRE_BUTT
:
SetToolID
(
id
,
wxCURSOR_PENCIL
,
_
(
"Add Mire"
)
);
break
;
case
ID_PCB_PLACE_OFFSET_COORD_BUTT
:
SetToolID
(
id
,
wxCURSOR_PENCIL
,
_
(
"Adjust Zero"
)
);
break
;
case
ID_LINE_COMMENT_BUTT
:
case
ID_PCB_ARC_BUTT
:
case
ID_PCB_CIRCLE_BUTT
:
SetToolID
(
id
,
wxCURSOR_PENCIL
,
_
(
"Add Graphic"
)
);
break
;
case
ID_TEXT_COMMENT_BUTT
:
SetToolID
(
id
,
wxCURSOR_PENCIL
,
_
(
"Add Text"
)
);
break
;
case
ID_COMPONENT_BUTT
:
SetToolID
(
id
,
wxCURSOR_HAND
,
_
(
"Add Modules"
)
);
break
;
case
ID_PCB_COTATION_BUTT
:
SetToolID
(
id
,
wxCURSOR_PENCIL
,
_
(
"Add Cotation"
)
);
break
;
case
ID_NO_SELECT_BUTT
:
SetToolID
(
0
,
wxCURSOR_ARROW
,
wxEmptyString
);
break
;
case
ID_PCB_HIGHLIGHT_BUTT
:
SetToolID
(
id
,
wxCURSOR_HAND
,
_
(
"Net Highlight"
)
);
break
;
case
ID_PCB_SHOW_1_RATSNEST_BUTT
:
SetToolID
(
id
,
wxCURSOR_HAND
,
_
(
"Local Ratsnest"
)
);
if
(
(
m_Pcb
->
m_Status_Pcb
&
LISTE_CHEVELU_OK
)
==
0
)
Compile_Ratsnest
(
&
dc
,
TRUE
);
break
;
case
ID_POPUP_CLOSE_CURRENT_TOOL
:
SetToolID
(
0
,
wxCURSOR_ARROW
,
wxEmptyString
);
break
;
case
ID_POPUP_CANCEL_CURRENT_COMMAND
:
break
;
case
ID_POPUP_END_LINE
:
DrawPanel
->
MouseToCursorSchema
();
// EndSegment(&dc);
break
;
case
ID_POPUP_PCB_EDIT_TRACK
:
if
(
CURRENT_ITEM
==
NULL
)
break
;
Edit_Track_Width
(
&
dc
,
(
TRACK
*
)
CURRENT_ITEM
);
DrawPanel
->
MouseToCursorSchema
();
GetScreen
()
->
SetModify
();
break
;
case
ID_POPUP_PCB_EDIT_TRACKSEG
:
if
(
CURRENT_ITEM
==
NULL
)
break
;
Edit_TrackSegm_Width
(
&
dc
,
(
TRACK
*
)
CURRENT_ITEM
);
DrawPanel
->
MouseToCursorSchema
();
GetScreen
()
->
SetModify
();
break
;
case
ID_POPUP_PCB_EDIT_NET
:
if
(
CURRENT_ITEM
==
NULL
)
break
;
Edit_Net_Width
(
&
dc
,
((
TRACK
*
)
CURRENT_ITEM
)
->
m_NetCode
);
DrawPanel
->
MouseToCursorSchema
();
GetScreen
()
->
SetModify
();
break
;
case
ID_POPUP_PCB_EDIT_ALL_VIAS_AND_TRACK_SIZE
:
case
ID_POPUP_PCB_EDIT_ALL_VIAS_SIZE
:
case
ID_POPUP_PCB_EDIT_ALL_TRACK_SIZE
:
if
(
CURRENT_ITEM
==
NULL
)
break
;
{
bool
resize_vias
=
TRUE
,
resize_track
=
TRUE
;
if
(
id
==
ID_POPUP_PCB_EDIT_ALL_VIAS_SIZE
)
resize_track
=
FALSE
;
if
(
id
==
ID_POPUP_PCB_EDIT_ALL_TRACK_SIZE
)
resize_vias
=
FALSE
;
if
(
Resize_Pistes_Vias
(
&
dc
,
resize_track
,
resize_vias
))
GetScreen
()
->
SetModify
();
}
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_END_TRACK
:
DrawPanel
->
MouseToCursorSchema
();
End_Route
(
(
TRACK
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_PLACE_MOVED_TRACK_NODE
:
DrawPanel
->
MouseToCursorSchema
();
if
(
CURRENT_ITEM
->
m_Flags
&
IS_DRAGGED
)
{
PlaceDraggedTrackSegment
((
TRACK
*
)
CURRENT_ITEM
,
&
dc
);
}
break
;
case
ID_POPUP_PCB_PLACE_VIA
:
DrawPanel
->
MouseToCursorSchema
();
if
(
CURRENT_ITEM
->
m_Flags
&
IS_DRAGGED
)
{
PlaceDraggedTrackSegment
((
TRACK
*
)
CURRENT_ITEM
,
&
dc
);
}
else
{
Other_Layer_Route
(
(
TRACK
*
)
CURRENT_ITEM
,
&
dc
);
if
(
DisplayOpt
.
ContrastModeDisplay
)
GetScreen
()
->
SetRefreshReq
();
}
break
;
case
ID_POPUP_PCB_DELETE_TRACKSEG
:
if
(
CURRENT_ITEM
==
NULL
)
break
;
DrawPanel
->
MouseToCursorSchema
();
GetScreen
()
->
m_CurrentItem
=
Delete_Segment
(
&
dc
,
(
TRACK
*
)
CURRENT_ITEM
);
GetScreen
()
->
SetModify
();
break
;
case
ID_POPUP_PCB_DELETE_TRACK
:
if
(
CURRENT_ITEM
==
NULL
)
break
;
DrawPanel
->
MouseToCursorSchema
();
Delete_Track
(
&
dc
,
(
TRACK
*
)
CURRENT_ITEM
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
GetScreen
()
->
SetModify
();
break
;
case
ID_POPUP_PCB_DELETE_TRACKNET
:
DrawPanel
->
MouseToCursorSchema
();
Delete_net
(
&
dc
,
(
TRACK
*
)
CURRENT_ITEM
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
GetScreen
()
->
SetModify
();
break
;
case
ID_POPUP_PCB_LOCK_ON_TRACKSEG
:
Attribut_Segment
((
TRACK
*
)
CURRENT_ITEM
,
&
dc
,
TRUE
);
break
;
case
ID_POPUP_PCB_LOCK_OFF_TRACKSEG
:
Attribut_Segment
((
TRACK
*
)
CURRENT_ITEM
,
&
dc
,
FALSE
);
break
;
case
ID_POPUP_PCB_LOCK_ON_TRACK
:
Attribut_Track
((
TRACK
*
)
CURRENT_ITEM
,
&
dc
,
TRUE
);
break
;
case
ID_POPUP_PCB_LOCK_OFF_TRACK
:
Attribut_Track
((
TRACK
*
)
CURRENT_ITEM
,
&
dc
,
FALSE
);
break
;
case
ID_POPUP_PCB_LOCK_ON_NET
:
Attribut_net
(
&
dc
,
((
TRACK
*
)
CURRENT_ITEM
)
->
m_NetCode
,
TRUE
);
break
;
case
ID_POPUP_PCB_LOCK_OFF_NET
:
Attribut_net
(
&
dc
,
((
TRACK
*
)
CURRENT_ITEM
)
->
m_NetCode
,
FALSE
);
break
;
case
ID_POPUP_PCB_SETFLAGS_TRACK_MNU
:
break
;
case
ID_POPUP_PCB_DELETE_ZONE
:
DrawPanel
->
MouseToCursorSchema
();
if
(
CURRENT_ITEM
==
NULL
)
break
;
Delete_Zone
(
&
dc
,
(
SEGZONE
*
)
CURRENT_ITEM
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
break
;
case
ID_POPUP_PCB_EDIT_ZONE
:
DrawPanel
->
MouseToCursorSchema
();
if
(
CURRENT_ITEM
==
NULL
)
break
;
Edit_Zone_Width
(
&
dc
,
(
SEGZONE
*
)
CURRENT_ITEM
);
break
;
case
ID_POPUP_PCB_DELETE_ZONE_LIMIT
:
DrawPanel
->
MouseToCursorSchema
();
DelLimitesZone
(
&
dc
,
TRUE
);
break
;
case
ID_PCB_DELETE_ITEM_BUTT
:
SetToolID
(
id
,
wxCURSOR_BULLSEYE
,
_
(
"Delete item"
));
break
;
case
ID_POPUP_PCB_MOVE_TEXTEPCB_REQUEST
:
Process_Move_Item
(
this
,
CURRENT_ITEM
,
&
dc
);
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
break
;
case
ID_POPUP_PCB_DRAG_MODULE_REQUEST
:
g_Drag_Pistes_On
=
TRUE
;
case
ID_POPUP_PCB_MOVE_MODULE_REQUEST
:
// If the current Item is a pad, text module ...: Get the parent
if
(
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
CURRENT_ITEM
=
(
MODULE
*
)
CURRENT_ITEM
->
m_Parent
;
if
(
!
CURRENT_ITEM
||
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
{
g_Drag_Pistes_On
=
FALSE
;
break
;
}
DrawPanel
->
MouseToCursorSchema
();
StartMove_Module
(
(
MODULE
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_GET_AND_MOVE_MODULE_REQUEST
:
/* get module by name and move it */
CURRENT_ITEM
=
GetModuleByName
();
if
(
CURRENT_ITEM
)
{
DrawPanel
->
MouseToCursorSchema
();
StartMove_Module
(
(
MODULE
*
)
CURRENT_ITEM
,
&
dc
);
}
break
;
case
ID_POPUP_PCB_DELETE_MODULE
:
DrawPanel
->
MouseToCursorSchema
();
// If the current Item is a pad, text module ...: Get the parent
if
(
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
CURRENT_ITEM
=
(
MODULE
*
)
CURRENT_ITEM
->
m_Parent
;
if
(
!
CURRENT_ITEM
||
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
break
;
if
(
Delete_Module
((
MODULE
*
)
CURRENT_ITEM
,
&
dc
)
)
{
GetScreen
()
->
m_CurrentItem
=
NULL
;
}
break
;
case
ID_POPUP_PCB_ROTATE_MODULE_COUNTERCLOCKWISE
:
DrawPanel
->
MouseToCursorSchema
();
// If the current Item is a pad, text module ...: Get the parent
if
(
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
CURRENT_ITEM
=
(
MODULE
*
)
CURRENT_ITEM
->
m_Parent
;
if
(
!
CURRENT_ITEM
||
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
break
;
Rotate_Module
(
&
dc
,
(
MODULE
*
)
CURRENT_ITEM
,
-
900
,
TRUE
);
break
;
case
ID_POPUP_PCB_ROTATE_MODULE_CLOCKWISE
:
DrawPanel
->
MouseToCursorSchema
();
// If the current Item is a pad, text module ...: Get the parent
if
(
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
CURRENT_ITEM
=
(
MODULE
*
)
CURRENT_ITEM
->
m_Parent
;
if
(
!
CURRENT_ITEM
||
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
break
;
Rotate_Module
(
&
dc
,
(
MODULE
*
)
CURRENT_ITEM
,
900
,
TRUE
);
break
;
case
ID_POPUP_PCB_CHANGE_SIDE_MODULE
:
DrawPanel
->
MouseToCursorSchema
();
// If the current Item is a pad, text module ...: Get the parent
if
(
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
CURRENT_ITEM
=
(
MODULE
*
)
CURRENT_ITEM
->
m_Parent
;
if
(
!
CURRENT_ITEM
||
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
break
;
Change_Side_Module
((
MODULE
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_EDIT_MODULE
:
// If the current Item is a pad, text module ...: Get the parent
if
(
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
CURRENT_ITEM
=
(
MODULE
*
)
CURRENT_ITEM
->
m_Parent
;
if
(
!
CURRENT_ITEM
||
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
break
;
InstallModuleOptionsFrame
((
MODULE
*
)
CURRENT_ITEM
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_DRAG_PAD_REQUEST
:
g_Drag_Pistes_On
=
TRUE
;
case
ID_POPUP_PCB_MOVE_PAD_REQUEST
:
DrawPanel
->
MouseToCursorSchema
();
StartMovePad
((
D_PAD
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_EDIT_PAD
:
InstallPadOptionsFrame
((
D_PAD
*
)
CURRENT_ITEM
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_IMPORT_PAD_SETTINGS
:
DrawPanel
->
MouseToCursorSchema
();
Import_Pad_Settings
((
D_PAD
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_GLOBAL_IMPORT_PAD_SETTINGS
:
DrawPanel
->
MouseToCursorSchema
();
Global_Import_Pad_Settings
((
D_PAD
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_EXPORT_PAD_SETTINGS
:
DrawPanel
->
MouseToCursorSchema
();
Export_Pad_Settings
((
D_PAD
*
)
CURRENT_ITEM
);
break
;
case
ID_POPUP_PCB_DELETE_PAD
:
DeletePad
((
D_PAD
*
)
CURRENT_ITEM
,
&
dc
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_EDIT_TEXTMODULE
:
InstallTextModOptionsFrame
((
TEXTE_MODULE
*
)
CURRENT_ITEM
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_MOVE_TEXTMODULE_REQUEST
:
DrawPanel
->
MouseToCursorSchema
();
StartMoveTexteModule
(
(
TEXTE_MODULE
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_ROTATE_TEXTMODULE
:
RotateTextModule
((
TEXTE_MODULE
*
)
CURRENT_ITEM
,
&
dc
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_DELETE_TEXTMODULE
:
DeleteTextModule
((
TEXTE_MODULE
*
)
CURRENT_ITEM
,
&
dc
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_SELECT_LAYER
:
itmp
=
SelectLayer
(
GetScreen
()
->
m_Active_Layer
,
-
1
,
-
1
);
if
(
itmp
>=
0
)
GetScreen
()
->
m_Active_Layer
=
itmp
;
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR
:
SelectLayerPair
();
break
;
case
ID_POPUP_PCB_SELECT_NO_CU_LAYER
:
itmp
=
SelectLayer
(
GetScreen
()
->
m_Active_Layer
,
CMP_N
+
1
,
-
1
);
if
(
itmp
>=
0
)
GetScreen
()
->
m_Active_Layer
=
itmp
;
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_SELECT_CU_LAYER
:
itmp
=
SelectLayer
(
GetScreen
()
->
m_Active_Layer
,
-
1
,
CMP_N
);
if
(
itmp
>=
0
)
GetScreen
()
->
m_Active_Layer
=
itmp
;
break
;
case
ID_POPUP_PCB_SELECT_LAYER_PAIR
:
SelectLayerPair
();
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_TOOLBARH_PCB_SELECT_LAYER
:
itmp
=
m_SelLayerBox
->
GetChoice
();
GetScreen
()
->
m_Active_Layer
=
(
int
)((
size_t
)
m_SelLayerBox
->
GetClientData
(
itmp
));
if
(
DisplayOpt
.
ContrastModeDisplay
)
DrawPanel
->
Refresh
(
TRUE
);
break
;
case
ID_POPUP_PCB_EDIT_TEXTEPCB
:
InstallTextPCBOptionsFrame
((
TEXTE_PCB
*
)
CURRENT_ITEM
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_ROTATE_TEXTEPCB
:
Rotate_Texte_Pcb
((
TEXTE_PCB
*
)
CURRENT_ITEM
,
&
dc
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_DELETE_TEXTEPCB
:
Delete_Texte_Pcb
((
TEXTE_PCB
*
)
CURRENT_ITEM
,
&
dc
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_MOVE_MIRE_REQUEST
:
StartMove_Mire
((
MIREPCB
*
)
CURRENT_ITEM
,
&
dc
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_EDIT_MIRE
:
InstallMireOptionsFrame
((
MIREPCB
*
)
CURRENT_ITEM
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_DELETE_MIRE
:
DrawPanel
->
MouseToCursorSchema
();
Delete_Mire
((
MIREPCB
*
)
CURRENT_ITEM
,
&
dc
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
break
;
case
ID_POPUP_PCB_DELETE_COTATION
:
DrawPanel
->
MouseToCursorSchema
();
Delete_Cotation
((
COTATION
*
)
CURRENT_ITEM
,
&
dc
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
break
;
case
ID_POPUP_PCB_EDIT_COTATION
:
Install_Edit_Cotation
((
COTATION
*
)
CURRENT_ITEM
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_DELETE_DRAWING
:
Delete_Segment_Edge
((
DRAWSEGMENT
*
)
CURRENT_ITEM
,
&
dc
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_DELETE_DRAWING_LAYER
:
Delete_Drawings_All_Layer
((
DRAWSEGMENT
*
)
CURRENT_ITEM
,
&
dc
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_EDIT_DRAWING
:
Drawing_SetNewWidth
((
DRAWSEGMENT
*
)
CURRENT_ITEM
,
&
dc
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_MOVE_DRAWING_REQUEST
:
DrawPanel
->
MouseToCursorSchema
();
Start_Move_DrawItem
((
DRAWSEGMENT
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_STOP_CURRENT_DRAWING
:
DrawPanel
->
MouseToCursorSchema
();
if
(
CURRENT_ITEM
&&
(
CURRENT_ITEM
->
m_Flags
&
IS_NEW
)
)
{
End_Edge
(
(
DRAWSEGMENT
*
)
CURRENT_ITEM
,
&
dc
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
}
break
;
case
ID_POPUP_PCB_STOP_CURRENT_EDGE_ZONE
:
DrawPanel
->
MouseToCursorSchema
();
if
(
CURRENT_ITEM
&&
(
CURRENT_ITEM
->
m_Flags
&
IS_NEW
)
)
{
End_Zone
(
&
dc
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
}
break
;
case
ID_POPUP_PCB_DELETE_EDGE_ZONE
:
DrawPanel
->
MouseToCursorSchema
();
if
(
CURRENT_ITEM
&&
(
CURRENT_ITEM
->
m_Flags
&
IS_NEW
)
)
{
GetScreen
()
->
m_CurrentItem
=
Del_SegmEdgeZone
(
&
dc
,
(
EDGE_ZONE
*
)
CURRENT_ITEM
);
}
break
;
case
ID_POPUP_PCB_FILL_ZONE
:
DrawPanel
->
MouseToCursorSchema
();
Fill_Zone
(
&
dc
);
break
;
case
ID_POPUP_PCB_SELECT_NET_ZONE
:
DrawPanel
->
MouseToCursorSchema
();
CaptureNetName
(
&
dc
);
break
;
case
ID_POPUP_PCB_SELECT_WIDTH
:
break
;
case
ID_AUX_TOOLBAR_PCB_TRACK_WIDTH
:
{
int
ii
=
m_SelTrackWidthBox
->
GetChoice
();
g_DesignSettings
.
m_CurrentTrackWidth
=
g_DesignSettings
.
m_TrackWidhtHistory
[
ii
];
DisplayTrackSettings
();
m_SelTrackWidthBox_Changed
=
FALSE
;
m_SelViaSizeBox_Changed
=
FALSE
;
}
break
;
case
ID_POPUP_PCB_SELECT_WIDTH1
:
case
ID_POPUP_PCB_SELECT_WIDTH2
:
case
ID_POPUP_PCB_SELECT_WIDTH3
:
case
ID_POPUP_PCB_SELECT_WIDTH4
:
case
ID_POPUP_PCB_SELECT_WIDTH5
:
case
ID_POPUP_PCB_SELECT_WIDTH6
:
case
ID_POPUP_PCB_SELECT_WIDTH7
:
case
ID_POPUP_PCB_SELECT_WIDTH8
:
DrawPanel
->
MouseToCursorSchema
();
{
int
ii
=
id
-
ID_POPUP_PCB_SELECT_WIDTH1
;
g_DesignSettings
.
m_CurrentTrackWidth
=
g_DesignSettings
.
m_TrackWidhtHistory
[
ii
];
DisplayTrackSettings
();
}
break
;
case
ID_POPUP_PCB_SELECT_VIASIZE
:
break
;
case
ID_AUX_TOOLBAR_PCB_VIA_SIZE
:
{
int
ii
=
m_SelViaSizeBox
->
GetChoice
();
g_DesignSettings
.
m_CurrentViaSize
=
g_DesignSettings
.
m_ViaSizeHistory
[
ii
];
DisplayTrackSettings
();
m_SelTrackWidthBox_Changed
=
FALSE
;
m_SelViaSizeBox_Changed
=
FALSE
;
}
break
;
case
ID_POPUP_PCB_SELECT_VIASIZE1
:
case
ID_POPUP_PCB_SELECT_VIASIZE2
:
case
ID_POPUP_PCB_SELECT_VIASIZE3
:
case
ID_POPUP_PCB_SELECT_VIASIZE4
:
case
ID_POPUP_PCB_SELECT_VIASIZE5
:
case
ID_POPUP_PCB_SELECT_VIASIZE6
:
case
ID_POPUP_PCB_SELECT_VIASIZE7
:
case
ID_POPUP_PCB_SELECT_VIASIZE8
:
case
ID_POPUP_PCB_VIA_EDITING
:
case
ID_POPUP_PCB_VIA_HOLE_TO_DEFAULT
:
case
ID_POPUP_PCB_VIA_HOLE_TO_VALUE
:
case
ID_POPUP_PCB_VIA_HOLE_ENTER_VALUE
:
case
ID_POPUP_PCB_VIA_HOLE_EXPORT
:
case
ID_POPUP_PCB_VIA_HOLE_RESET_TO_DEFAULT
:
case
ID_POPUP_PCB_VIA_HOLE_EXPORT_TO_OTHERS
:
Via_Edit_Control
(
&
dc
,
id
,
(
SEGVIA
*
)
GetScreen
()
->
m_CurrentItem
);
break
;
case
ID_POPUP_PCB_MOVE_TRACK_SEGMENT
:
DrawPanel
->
MouseToCursorSchema
();
Start_MoveOneNodeOrSegment
((
TRACK
*
)
GetScreen
()
->
m_CurrentItem
,
&
dc
,
id
);
break
;
case
ID_POPUP_PCB_DRAG_TRACK_SEGMENT
:
case
ID_POPUP_PCB_MOVE_TRACK_NODE
:
DrawPanel
->
MouseToCursorSchema
();
Start_MoveOneNodeOrSegment
((
TRACK
*
)
GetScreen
()
->
m_CurrentItem
,
&
dc
,
id
);
break
;
case
ID_POPUP_PCB_DRAG_TRACK_SEGMENT_KEEP_SLOPE
:
DrawPanel
->
MouseToCursorSchema
();
Start_DragTrackSegmentAndKeepSlope
((
TRACK
*
)
GetScreen
()
->
m_CurrentItem
,
&
dc
);
break
;
case
ID_POPUP_PCB_BREAK_TRACK
:
DrawPanel
->
MouseToCursorSchema
();
{
TRACK
*
track
=
(
TRACK
*
)
GetScreen
()
->
m_CurrentItem
;
wxPoint
pos
=
GetScreen
()
->
m_Curseur
;
track
->
Draw
(
DrawPanel
,
&
dc
,
GR_XOR
);
TRACK
*
newtrack
=
CreateLockPoint
(
&
pos
.
x
,
&
pos
.
y
,
track
,
NULL
);
track
->
Draw
(
DrawPanel
,
&
dc
,
GR_XOR
);
newtrack
->
Draw
(
DrawPanel
,
&
dc
,
GR_XOR
);
}
break
;
case
ID_MENU_PCB_CLEAN
:
Clean_Pcb
(
&
dc
);
break
;
case
ID_MENU_PCB_SWAP_LAYERS
:
Swap_Layers
(
event
);
break
;
case
ID_POPUP_PCB_AUTOROUTE_GET_AUTOROUTER
:
GlobalRoute
(
&
dc
);
break
;
case
ID_POPUP_PCB_AUTOROUTE_GET_AUTOROUTER_DATA
:
ReadAutoroutedTracks
(
&
dc
);
break
;
case
ID_PCB_USER_GRID_SETUP
:
InstallGridFrame
(
pos
);
break
;
case
ID_POPUP_PCB_DISPLAY_FOOTPRINT_DOC
:
{
wxString
msg
=
FindKicadHelpPath
();
msg
+=
EDA_Appl
->
m_EDA_CommonConfig
->
Read
(
wxT
(
"module_doc_file"
),
wxT
(
"pcbnew/footprints.pdf"
));
GetAssociatedDocument
(
this
,
wxEmptyString
,
msg
);
}
break
;
case
ID_MENU_ARCHIVE_NEW_MODULES
:
Archive_Modules
(
wxEmptyString
,
TRUE
);
break
;
case
ID_MENU_ARCHIVE_ALL_MODULES
:
Archive_Modules
(
wxEmptyString
,
FALSE
);
break
;
default
:
{
DisplayError
(
this
,
wxT
(
"WinEDA_PcbFrame::Process_Special_Functions() id error"
));
break
;
}
}
SetToolbars
();
DrawPanel
->
CursorOn
(
&
dc
);
DrawPanel
->
m_IgnoreMouseEvents
=
FALSE
;
break
;
case
ID_POPUP_PCB_EDIT_TRACK
:
if
(
CURRENT_ITEM
==
NULL
)
break
;
Edit_Track_Width
(
&
dc
,
(
TRACK
*
)
CURRENT_ITEM
);
DrawPanel
->
MouseToCursorSchema
();
GetScreen
()
->
SetModify
();
break
;
case
ID_POPUP_PCB_EDIT_TRACKSEG
:
if
(
CURRENT_ITEM
==
NULL
)
break
;
Edit_TrackSegm_Width
(
&
dc
,
(
TRACK
*
)
CURRENT_ITEM
);
DrawPanel
->
MouseToCursorSchema
();
GetScreen
()
->
SetModify
();
break
;
case
ID_POPUP_PCB_EDIT_NET
:
if
(
CURRENT_ITEM
==
NULL
)
break
;
Edit_Net_Width
(
&
dc
,
(
(
TRACK
*
)
CURRENT_ITEM
)
->
m_NetCode
);
DrawPanel
->
MouseToCursorSchema
();
GetScreen
()
->
SetModify
();
break
;
case
ID_POPUP_PCB_EDIT_ALL_VIAS_AND_TRACK_SIZE
:
case
ID_POPUP_PCB_EDIT_ALL_VIAS_SIZE
:
case
ID_POPUP_PCB_EDIT_ALL_TRACK_SIZE
:
if
(
CURRENT_ITEM
==
NULL
)
break
;
{
bool
resize_vias
=
TRUE
,
resize_track
=
TRUE
;
if
(
id
==
ID_POPUP_PCB_EDIT_ALL_VIAS_SIZE
)
resize_track
=
FALSE
;
if
(
id
==
ID_POPUP_PCB_EDIT_ALL_TRACK_SIZE
)
resize_vias
=
FALSE
;
if
(
Resize_Pistes_Vias
(
&
dc
,
resize_track
,
resize_vias
)
)
GetScreen
()
->
SetModify
();
}
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_END_TRACK
:
DrawPanel
->
MouseToCursorSchema
();
End_Route
(
(
TRACK
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_PLACE_MOVED_TRACK_NODE
:
DrawPanel
->
MouseToCursorSchema
();
if
(
CURRENT_ITEM
->
m_Flags
&
IS_DRAGGED
)
{
PlaceDraggedTrackSegment
(
(
TRACK
*
)
CURRENT_ITEM
,
&
dc
);
}
break
;
case
ID_POPUP_PCB_PLACE_VIA
:
DrawPanel
->
MouseToCursorSchema
();
if
(
CURRENT_ITEM
->
m_Flags
&
IS_DRAGGED
)
{
PlaceDraggedTrackSegment
(
(
TRACK
*
)
CURRENT_ITEM
,
&
dc
);
}
else
{
Other_Layer_Route
(
(
TRACK
*
)
CURRENT_ITEM
,
&
dc
);
if
(
DisplayOpt
.
ContrastModeDisplay
)
GetScreen
()
->
SetRefreshReq
();
}
break
;
case
ID_POPUP_PCB_DELETE_TRACKSEG
:
if
(
CURRENT_ITEM
==
NULL
)
break
;
DrawPanel
->
MouseToCursorSchema
();
GetScreen
()
->
m_CurrentItem
=
Delete_Segment
(
&
dc
,
(
TRACK
*
)
CURRENT_ITEM
);
GetScreen
()
->
SetModify
();
break
;
case
ID_POPUP_PCB_DELETE_TRACK
:
if
(
CURRENT_ITEM
==
NULL
)
break
;
DrawPanel
->
MouseToCursorSchema
();
Delete_Track
(
&
dc
,
(
TRACK
*
)
CURRENT_ITEM
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
GetScreen
()
->
SetModify
();
break
;
case
ID_POPUP_PCB_DELETE_TRACKNET
:
DrawPanel
->
MouseToCursorSchema
();
Delete_net
(
&
dc
,
(
TRACK
*
)
CURRENT_ITEM
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
GetScreen
()
->
SetModify
();
break
;
case
ID_POPUP_PCB_LOCK_ON_TRACKSEG
:
Attribut_Segment
(
(
TRACK
*
)
CURRENT_ITEM
,
&
dc
,
TRUE
);
break
;
case
ID_POPUP_PCB_LOCK_OFF_TRACKSEG
:
Attribut_Segment
(
(
TRACK
*
)
CURRENT_ITEM
,
&
dc
,
FALSE
);
break
;
case
ID_POPUP_PCB_LOCK_ON_TRACK
:
Attribut_Track
(
(
TRACK
*
)
CURRENT_ITEM
,
&
dc
,
TRUE
);
break
;
case
ID_POPUP_PCB_LOCK_OFF_TRACK
:
Attribut_Track
(
(
TRACK
*
)
CURRENT_ITEM
,
&
dc
,
FALSE
);
break
;
case
ID_POPUP_PCB_LOCK_ON_NET
:
Attribut_net
(
&
dc
,
(
(
TRACK
*
)
CURRENT_ITEM
)
->
m_NetCode
,
TRUE
);
break
;
case
ID_POPUP_PCB_LOCK_OFF_NET
:
Attribut_net
(
&
dc
,
(
(
TRACK
*
)
CURRENT_ITEM
)
->
m_NetCode
,
FALSE
);
break
;
case
ID_POPUP_PCB_SETFLAGS_TRACK_MNU
:
break
;
case
ID_POPUP_PCB_DELETE_ZONE
:
DrawPanel
->
MouseToCursorSchema
();
if
(
CURRENT_ITEM
==
NULL
)
break
;
Delete_Zone
(
&
dc
,
(
SEGZONE
*
)
CURRENT_ITEM
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
break
;
case
ID_POPUP_PCB_EDIT_ZONE
:
DrawPanel
->
MouseToCursorSchema
();
if
(
CURRENT_ITEM
==
NULL
)
break
;
Edit_Zone_Width
(
&
dc
,
(
SEGZONE
*
)
CURRENT_ITEM
);
break
;
case
ID_POPUP_PCB_DELETE_ZONE_LIMIT
:
DrawPanel
->
MouseToCursorSchema
();
DelLimitesZone
(
&
dc
,
TRUE
);
break
;
case
ID_PCB_DELETE_ITEM_BUTT
:
SetToolID
(
id
,
wxCURSOR_BULLSEYE
,
_
(
"Delete item"
)
);
break
;
case
ID_POPUP_PCB_MOVE_TEXTEPCB_REQUEST
:
Process_Move_Item
(
this
,
CURRENT_ITEM
,
&
dc
);
DrawPanel
->
m_AutoPAN_Request
=
TRUE
;
break
;
case
ID_POPUP_PCB_DRAG_MODULE_REQUEST
:
g_Drag_Pistes_On
=
TRUE
;
case
ID_POPUP_PCB_MOVE_MODULE_REQUEST
:
// If the current Item is a pad, text module ...: Get the parent
if
(
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
CURRENT_ITEM
=
(
MODULE
*
)
CURRENT_ITEM
->
m_Parent
;
if
(
!
CURRENT_ITEM
||
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
{
g_Drag_Pistes_On
=
FALSE
;
break
;
}
DrawPanel
->
MouseToCursorSchema
();
StartMove_Module
(
(
MODULE
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_GET_AND_MOVE_MODULE_REQUEST
:
/* get module by name and move it */
CURRENT_ITEM
=
GetModuleByName
();
if
(
CURRENT_ITEM
)
{
DrawPanel
->
MouseToCursorSchema
();
StartMove_Module
(
(
MODULE
*
)
CURRENT_ITEM
,
&
dc
);
}
break
;
case
ID_POPUP_PCB_DELETE_MODULE
:
DrawPanel
->
MouseToCursorSchema
();
// If the current Item is a pad, text module ...: Get the parent
if
(
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
CURRENT_ITEM
=
(
MODULE
*
)
CURRENT_ITEM
->
m_Parent
;
if
(
!
CURRENT_ITEM
||
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
break
;
if
(
Delete_Module
(
(
MODULE
*
)
CURRENT_ITEM
,
&
dc
)
)
{
GetScreen
()
->
m_CurrentItem
=
NULL
;
}
break
;
case
ID_POPUP_PCB_ROTATE_MODULE_COUNTERCLOCKWISE
:
DrawPanel
->
MouseToCursorSchema
();
// If the current Item is a pad, text module ...: Get the parent
if
(
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
CURRENT_ITEM
=
(
MODULE
*
)
CURRENT_ITEM
->
m_Parent
;
if
(
!
CURRENT_ITEM
||
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
break
;
Rotate_Module
(
&
dc
,
(
MODULE
*
)
CURRENT_ITEM
,
-
900
,
TRUE
);
break
;
case
ID_POPUP_PCB_ROTATE_MODULE_CLOCKWISE
:
DrawPanel
->
MouseToCursorSchema
();
// If the current Item is a pad, text module ...: Get the parent
if
(
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
CURRENT_ITEM
=
(
MODULE
*
)
CURRENT_ITEM
->
m_Parent
;
if
(
!
CURRENT_ITEM
||
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
break
;
Rotate_Module
(
&
dc
,
(
MODULE
*
)
CURRENT_ITEM
,
900
,
TRUE
);
break
;
case
ID_POPUP_PCB_CHANGE_SIDE_MODULE
:
DrawPanel
->
MouseToCursorSchema
();
// If the current Item is a pad, text module ...: Get the parent
if
(
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
CURRENT_ITEM
=
(
MODULE
*
)
CURRENT_ITEM
->
m_Parent
;
if
(
!
CURRENT_ITEM
||
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
break
;
Change_Side_Module
(
(
MODULE
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_EDIT_MODULE
:
// If the current Item is a pad, text module ...: Get the parent
if
(
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
CURRENT_ITEM
=
(
MODULE
*
)
CURRENT_ITEM
->
m_Parent
;
if
(
!
CURRENT_ITEM
||
CURRENT_ITEM
->
m_StructType
!=
TYPEMODULE
)
break
;
InstallModuleOptionsFrame
(
(
MODULE
*
)
CURRENT_ITEM
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_DRAG_PAD_REQUEST
:
g_Drag_Pistes_On
=
TRUE
;
case
ID_POPUP_PCB_MOVE_PAD_REQUEST
:
DrawPanel
->
MouseToCursorSchema
();
StartMovePad
(
(
D_PAD
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_EDIT_PAD
:
InstallPadOptionsFrame
(
(
D_PAD
*
)
CURRENT_ITEM
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_IMPORT_PAD_SETTINGS
:
DrawPanel
->
MouseToCursorSchema
();
Import_Pad_Settings
(
(
D_PAD
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_GLOBAL_IMPORT_PAD_SETTINGS
:
DrawPanel
->
MouseToCursorSchema
();
Global_Import_Pad_Settings
(
(
D_PAD
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_EXPORT_PAD_SETTINGS
:
DrawPanel
->
MouseToCursorSchema
();
Export_Pad_Settings
(
(
D_PAD
*
)
CURRENT_ITEM
);
break
;
case
ID_POPUP_PCB_DELETE_PAD
:
DeletePad
(
(
D_PAD
*
)
CURRENT_ITEM
,
&
dc
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_EDIT_TEXTMODULE
:
InstallTextModOptionsFrame
(
(
TEXTE_MODULE
*
)
CURRENT_ITEM
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_MOVE_TEXTMODULE_REQUEST
:
DrawPanel
->
MouseToCursorSchema
();
StartMoveTexteModule
(
(
TEXTE_MODULE
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_ROTATE_TEXTMODULE
:
RotateTextModule
(
(
TEXTE_MODULE
*
)
CURRENT_ITEM
,
&
dc
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_DELETE_TEXTMODULE
:
DeleteTextModule
(
(
TEXTE_MODULE
*
)
CURRENT_ITEM
,
&
dc
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_SELECT_LAYER
:
itmp
=
SelectLayer
(
GetScreen
()
->
m_Active_Layer
,
-
1
,
-
1
);
if
(
itmp
>=
0
)
GetScreen
()
->
m_Active_Layer
=
itmp
;
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR
:
SelectLayerPair
();
break
;
case
ID_POPUP_PCB_SELECT_NO_CU_LAYER
:
itmp
=
SelectLayer
(
GetScreen
()
->
m_Active_Layer
,
CMP_N
+
1
,
-
1
);
if
(
itmp
>=
0
)
GetScreen
()
->
m_Active_Layer
=
itmp
;
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_SELECT_CU_LAYER
:
itmp
=
SelectLayer
(
GetScreen
()
->
m_Active_Layer
,
-
1
,
CMP_N
);
if
(
itmp
>=
0
)
GetScreen
()
->
m_Active_Layer
=
itmp
;
break
;
case
ID_POPUP_PCB_SELECT_LAYER_PAIR
:
SelectLayerPair
();
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_TOOLBARH_PCB_SELECT_LAYER
:
itmp
=
m_SelLayerBox
->
GetChoice
();
GetScreen
()
->
m_Active_Layer
=
(
int
)
(
(
size_t
)
m_SelLayerBox
->
GetClientData
(
itmp
)
);
if
(
DisplayOpt
.
ContrastModeDisplay
)
DrawPanel
->
Refresh
(
TRUE
);
break
;
case
ID_POPUP_PCB_EDIT_TEXTEPCB
:
InstallTextPCBOptionsFrame
(
(
TEXTE_PCB
*
)
CURRENT_ITEM
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_ROTATE_TEXTEPCB
:
Rotate_Texte_Pcb
(
(
TEXTE_PCB
*
)
CURRENT_ITEM
,
&
dc
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_DELETE_TEXTEPCB
:
Delete_Texte_Pcb
(
(
TEXTE_PCB
*
)
CURRENT_ITEM
,
&
dc
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_MOVE_MIRE_REQUEST
:
StartMove_Mire
(
(
MIREPCB
*
)
CURRENT_ITEM
,
&
dc
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_EDIT_MIRE
:
InstallMireOptionsFrame
(
(
MIREPCB
*
)
CURRENT_ITEM
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_DELETE_MIRE
:
DrawPanel
->
MouseToCursorSchema
();
Delete_Mire
(
(
MIREPCB
*
)
CURRENT_ITEM
,
&
dc
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
break
;
case
ID_POPUP_PCB_DELETE_COTATION
:
DrawPanel
->
MouseToCursorSchema
();
Delete_Cotation
(
(
COTATION
*
)
CURRENT_ITEM
,
&
dc
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
break
;
case
ID_POPUP_PCB_EDIT_COTATION
:
Install_Edit_Cotation
(
(
COTATION
*
)
CURRENT_ITEM
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_DELETE_DRAWING
:
Delete_Segment_Edge
(
(
DRAWSEGMENT
*
)
CURRENT_ITEM
,
&
dc
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_DELETE_DRAWING_LAYER
:
Delete_Drawings_All_Layer
(
(
DRAWSEGMENT
*
)
CURRENT_ITEM
,
&
dc
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_EDIT_DRAWING
:
Drawing_SetNewWidth
(
(
DRAWSEGMENT
*
)
CURRENT_ITEM
,
&
dc
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
ID_POPUP_PCB_MOVE_DRAWING_REQUEST
:
DrawPanel
->
MouseToCursorSchema
();
Start_Move_DrawItem
(
(
DRAWSEGMENT
*
)
CURRENT_ITEM
,
&
dc
);
break
;
case
ID_POPUP_PCB_STOP_CURRENT_DRAWING
:
DrawPanel
->
MouseToCursorSchema
();
if
(
CURRENT_ITEM
&&
(
CURRENT_ITEM
->
m_Flags
&
IS_NEW
)
)
{
End_Edge
(
(
DRAWSEGMENT
*
)
CURRENT_ITEM
,
&
dc
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
}
break
;
case
ID_POPUP_PCB_STOP_CURRENT_EDGE_ZONE
:
DrawPanel
->
MouseToCursorSchema
();
if
(
CURRENT_ITEM
&&
(
CURRENT_ITEM
->
m_Flags
&
IS_NEW
)
)
{
End_Zone
(
&
dc
);
GetScreen
()
->
m_CurrentItem
=
NULL
;
}
break
;
case
ID_POPUP_PCB_DELETE_EDGE_ZONE
:
DrawPanel
->
MouseToCursorSchema
();
if
(
CURRENT_ITEM
&&
(
CURRENT_ITEM
->
m_Flags
&
IS_NEW
)
)
{
GetScreen
()
->
m_CurrentItem
=
Del_SegmEdgeZone
(
&
dc
,
(
EDGE_ZONE
*
)
CURRENT_ITEM
);
}
break
;
case
ID_POPUP_PCB_FILL_ZONE
:
DrawPanel
->
MouseToCursorSchema
();
Fill_Zone
(
&
dc
);
break
;
case
ID_POPUP_PCB_SELECT_NET_ZONE
:
DrawPanel
->
MouseToCursorSchema
();
CaptureNetName
(
&
dc
);
break
;
case
ID_POPUP_PCB_SELECT_WIDTH
:
break
;
case
ID_AUX_TOOLBAR_PCB_TRACK_WIDTH
:
{
int
ii
=
m_SelTrackWidthBox
->
GetChoice
();
g_DesignSettings
.
m_CurrentTrackWidth
=
g_DesignSettings
.
m_TrackWidhtHistory
[
ii
];
DisplayTrackSettings
();
m_SelTrackWidthBox_Changed
=
FALSE
;
m_SelViaSizeBox_Changed
=
FALSE
;
}
break
;
case
ID_POPUP_PCB_SELECT_WIDTH1
:
case
ID_POPUP_PCB_SELECT_WIDTH2
:
case
ID_POPUP_PCB_SELECT_WIDTH3
:
case
ID_POPUP_PCB_SELECT_WIDTH4
:
case
ID_POPUP_PCB_SELECT_WIDTH5
:
case
ID_POPUP_PCB_SELECT_WIDTH6
:
case
ID_POPUP_PCB_SELECT_WIDTH7
:
case
ID_POPUP_PCB_SELECT_WIDTH8
:
DrawPanel
->
MouseToCursorSchema
();
{
int
ii
=
id
-
ID_POPUP_PCB_SELECT_WIDTH1
;
g_DesignSettings
.
m_CurrentTrackWidth
=
g_DesignSettings
.
m_TrackWidhtHistory
[
ii
];
DisplayTrackSettings
();
}
break
;
case
ID_POPUP_PCB_SELECT_VIASIZE
:
break
;
case
ID_AUX_TOOLBAR_PCB_VIA_SIZE
:
{
int
ii
=
m_SelViaSizeBox
->
GetChoice
();
g_DesignSettings
.
m_CurrentViaSize
=
g_DesignSettings
.
m_ViaSizeHistory
[
ii
];
DisplayTrackSettings
();
m_SelTrackWidthBox_Changed
=
FALSE
;
m_SelViaSizeBox_Changed
=
FALSE
;
}
break
;
case
ID_POPUP_PCB_SELECT_VIASIZE1
:
case
ID_POPUP_PCB_SELECT_VIASIZE2
:
case
ID_POPUP_PCB_SELECT_VIASIZE3
:
case
ID_POPUP_PCB_SELECT_VIASIZE4
:
case
ID_POPUP_PCB_SELECT_VIASIZE5
:
case
ID_POPUP_PCB_SELECT_VIASIZE6
:
case
ID_POPUP_PCB_SELECT_VIASIZE7
:
case
ID_POPUP_PCB_SELECT_VIASIZE8
:
case
ID_POPUP_PCB_VIA_EDITING
:
case
ID_POPUP_PCB_VIA_HOLE_TO_DEFAULT
:
case
ID_POPUP_PCB_VIA_HOLE_TO_VALUE
:
case
ID_POPUP_PCB_VIA_HOLE_ENTER_VALUE
:
case
ID_POPUP_PCB_VIA_HOLE_EXPORT
:
case
ID_POPUP_PCB_VIA_HOLE_RESET_TO_DEFAULT
:
case
ID_POPUP_PCB_VIA_HOLE_EXPORT_TO_OTHERS
:
Via_Edit_Control
(
&
dc
,
id
,
(
SEGVIA
*
)
GetScreen
()
->
m_CurrentItem
);
break
;
case
ID_POPUP_PCB_MOVE_TRACK_SEGMENT
:
DrawPanel
->
MouseToCursorSchema
();
Start_MoveOneNodeOrSegment
(
(
TRACK
*
)
GetScreen
()
->
m_CurrentItem
,
&
dc
,
id
);
break
;
case
ID_POPUP_PCB_DRAG_TRACK_SEGMENT
:
case
ID_POPUP_PCB_MOVE_TRACK_NODE
:
DrawPanel
->
MouseToCursorSchema
();
Start_MoveOneNodeOrSegment
(
(
TRACK
*
)
GetScreen
()
->
m_CurrentItem
,
&
dc
,
id
);
break
;
case
ID_POPUP_PCB_DRAG_TRACK_SEGMENT_KEEP_SLOPE
:
DrawPanel
->
MouseToCursorSchema
();
Start_DragTrackSegmentAndKeepSlope
(
(
TRACK
*
)
GetScreen
()
->
m_CurrentItem
,
&
dc
);
break
;
case
ID_POPUP_PCB_BREAK_TRACK
:
DrawPanel
->
MouseToCursorSchema
();
{
TRACK
*
track
=
(
TRACK
*
)
GetScreen
()
->
m_CurrentItem
;
wxPoint
pos
=
GetScreen
()
->
m_Curseur
;
track
->
Draw
(
DrawPanel
,
&
dc
,
GR_XOR
);
TRACK
*
newtrack
=
CreateLockPoint
(
&
pos
.
x
,
&
pos
.
y
,
track
,
NULL
);
track
->
Draw
(
DrawPanel
,
&
dc
,
GR_XOR
);
newtrack
->
Draw
(
DrawPanel
,
&
dc
,
GR_XOR
);
}
break
;
case
ID_MENU_PCB_CLEAN
:
Clean_Pcb
(
&
dc
);
break
;
case
ID_MENU_PCB_SWAP_LAYERS
:
Swap_Layers
(
event
);
break
;
case
ID_POPUP_PCB_AUTOROUTE_GET_AUTOROUTER
:
GlobalRoute
(
&
dc
);
break
;
case
ID_POPUP_PCB_AUTOROUTE_GET_AUTOROUTER_DATA
:
ReadAutoroutedTracks
(
&
dc
);
break
;
case
ID_PCB_USER_GRID_SETUP
:
InstallGridFrame
(
pos
);
break
;
case
ID_POPUP_PCB_DISPLAY_FOOTPRINT_DOC
:
{
wxString
msg
=
FindKicadHelpPath
();
msg
+=
EDA_Appl
->
m_EDA_CommonConfig
->
Read
(
wxT
(
"module_doc_file"
),
wxT
(
"pcbnew/footprints.pdf"
)
);
GetAssociatedDocument
(
this
,
wxEmptyString
,
msg
);
}
break
;
case
ID_MENU_ARCHIVE_NEW_MODULES
:
Archive_Modules
(
wxEmptyString
,
TRUE
);
break
;
case
ID_MENU_ARCHIVE_ALL_MODULES
:
Archive_Modules
(
wxEmptyString
,
FALSE
);
break
;
default
:
{
DisplayError
(
this
,
wxT
(
"WinEDA_PcbFrame::Process_Special_Functions() id error"
)
);
break
;
}
}
SetToolbars
();
DrawPanel
->
CursorOn
(
&
dc
);
DrawPanel
->
m_IgnoreMouseEvents
=
FALSE
;
}
/****************************************************************/
static
void
Process_Move_Item
(
WinEDA_PcbFrame
*
frame
,
EDA_BaseStruct
*
DrawStruct
,
wxDC
*
DC
)
static
void
Process_Move_Item
(
WinEDA_PcbFrame
*
frame
,
EDA_BaseStruct
*
DrawStruct
,
wxDC
*
DC
)
/****************************************************************/
{
if
(
DrawStruct
==
NULL
)
return
;
frame
->
DrawPanel
->
MouseToCursorSchema
();
switch
(
DrawStruct
->
m_StructType
)
{
case
TYPETEXTE
:
frame
->
StartMoveTextePcb
((
TEXTE_PCB
*
)
DrawStruct
,
DC
);
break
;
default
:
wxString
msg
;
msg
.
Printf
(
wxT
(
"WinEDA_PcbFrame::Move_Item Error: Bad DrawType %d"
),
DrawStruct
->
m_StructType
);
DisplayError
(
frame
,
msg
);
break
;
}
if
(
DrawStruct
==
NULL
)
return
;
frame
->
DrawPanel
->
MouseToCursorSchema
();
switch
(
DrawStruct
->
m_StructType
)
{
case
TYPETEXTE
:
frame
->
StartMoveTextePcb
(
(
TEXTE_PCB
*
)
DrawStruct
,
DC
);
break
;
default
:
wxString
msg
;
msg
.
Printf
(
wxT
(
"WinEDA_PcbFrame::Move_Item Error: Bad DrawType %d"
),
DrawStruct
->
m_StructType
);
DisplayError
(
frame
,
msg
);
break
;
}
}
/********************************************************************************/
void
WinEDA_PcbFrame
::
OnLeftDClick
(
wxDC
*
DC
,
const
wxPoint
&
MousePos
)
void
WinEDA_PcbFrame
::
OnLeftDClick
(
wxDC
*
DC
,
const
wxPoint
&
MousePos
)
/********************************************************************************/
/* Appel� sur un double click:
pour un �l�ment editable (textes, composant):
appel de l'editeur correspondant.
pour une connexion en cours:
termine la connexion
*/
*
pour un �l�ment editable (textes, composant):
*
appel de l'editeur correspondant.
*
pour une connexion en cours:
*
termine la connexion
*/
{
EDA_BaseStruct
*
DrawStruct
=
CURRENT_ITEM
;
wxPoint
pos
=
GetPosition
();
wxClientDC
dc
(
DrawPanel
);
DrawPanel
->
PrepareGraphicContext
(
&
dc
);
switch
(
m_ID_current_state
)
{
case
0
:
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
DrawStruct
=
PcbGeneralLocateAndDisplay
();
}
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
!=
0
)
)
break
;
// Element localis�
GetScreen
()
->
m_CurrentItem
=
DrawStruct
;
switch
(
DrawStruct
->
m_StructType
)
{
case
TYPETRACK
:
case
TYPEVIA
:
if
(
DrawStruct
->
m_Flags
&
IS_NEW
)
{
End_Route
(
(
TRACK
*
)
DrawStruct
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
}
else
if
(
DrawStruct
->
m_Flags
==
0
)
{
Edit_TrackSegm_Width
(
DC
,
(
TRACK
*
)
DrawStruct
);
}
break
;
case
TYPETEXTE
:
InstallTextPCBOptionsFrame
((
TEXTE_PCB
*
)
DrawStruct
,
DC
,
((
TEXTE_PCB
*
)
DrawStruct
)
->
m_Pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
TYPEPAD
:
InstallPadOptionsFrame
(
(
D_PAD
*
)
DrawStruct
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
TYPEMODULE
:
InstallModuleOptionsFrame
((
MODULE
*
)
DrawStruct
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
TYPEMIRE
:
InstallMireOptionsFrame
(
(
MIREPCB
*
)
DrawStruct
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
TYPETEXTEMODULE
:
InstallTextModOptionsFrame
((
TEXTE_MODULE
*
)
DrawStruct
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
TYPEDRAWSEGMENT
:
break
;
default
:
break
;
}
break
;
// end case 0
case
ID_TRACK_BUTT
:
if
(
DrawStruct
&&
(
DrawStruct
->
m_Flags
&
IS_NEW
)
)
{
End_Route
(
(
TRACK
*
)
DrawStruct
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
}
break
;
case
ID_PCB_ZONES_BUTT
:
End_Zone
(
DC
);
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
GetScreen
()
->
m_CurrentItem
=
NULL
;
break
;
case
ID_LINE_COMMENT_BUTT
:
case
ID_PCB_ARC_BUTT
:
case
ID_PCB_CIRCLE_BUTT
:
if
(
DrawStruct
==
NULL
)
break
;
if
(
DrawStruct
->
m_StructType
!=
TYPEDRAWSEGMENT
)
{
DisplayError
(
this
,
wxT
(
"DrawStruct Type error"
));
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
break
;
}
if
(
(
DrawStruct
->
m_Flags
&
IS_NEW
)
)
{
End_Edge
(
(
DRAWSEGMENT
*
)
DrawStruct
,
&
dc
);
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
GetScreen
()
->
m_CurrentItem
=
NULL
;
}
break
;
}
EDA_BaseStruct
*
DrawStruct
=
CURRENT_ITEM
;
wxPoint
pos
=
GetPosition
();
wxClientDC
dc
(
DrawPanel
);
DrawPanel
->
PrepareGraphicContext
(
&
dc
);
switch
(
m_ID_current_state
)
{
case
0
:
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
DrawStruct
=
PcbGeneralLocateAndDisplay
();
}
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
!=
0
)
)
break
;
// Element localis�
GetScreen
()
->
m_CurrentItem
=
DrawStruct
;
switch
(
DrawStruct
->
m_StructType
)
{
case
TYPETRACK
:
case
TYPEVIA
:
if
(
DrawStruct
->
m_Flags
&
IS_NEW
)
{
End_Route
(
(
TRACK
*
)
DrawStruct
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
}
else
if
(
DrawStruct
->
m_Flags
==
0
)
{
Edit_TrackSegm_Width
(
DC
,
(
TRACK
*
)
DrawStruct
);
}
break
;
case
TYPETEXTE
:
InstallTextPCBOptionsFrame
(
(
TEXTE_PCB
*
)
DrawStruct
,
DC
,
(
(
TEXTE_PCB
*
)
DrawStruct
)
->
m_Pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
TYPEPAD
:
InstallPadOptionsFrame
(
(
D_PAD
*
)
DrawStruct
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
TYPEMODULE
:
InstallModuleOptionsFrame
(
(
MODULE
*
)
DrawStruct
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
TYPEMIRE
:
InstallMireOptionsFrame
(
(
MIREPCB
*
)
DrawStruct
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
TYPETEXTEMODULE
:
InstallTextModOptionsFrame
(
(
TEXTE_MODULE
*
)
DrawStruct
,
&
dc
,
pos
);
DrawPanel
->
MouseToCursorSchema
();
break
;
case
TYPEDRAWSEGMENT
:
break
;
default
:
break
;
}
break
;
// end case 0
case
ID_TRACK_BUTT
:
if
(
DrawStruct
&&
(
DrawStruct
->
m_Flags
&
IS_NEW
)
)
{
End_Route
(
(
TRACK
*
)
DrawStruct
,
DC
);
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
}
break
;
case
ID_PCB_ZONES_BUTT
:
End_Zone
(
DC
);
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
GetScreen
()
->
m_CurrentItem
=
NULL
;
break
;
case
ID_LINE_COMMENT_BUTT
:
case
ID_PCB_ARC_BUTT
:
case
ID_PCB_CIRCLE_BUTT
:
if
(
DrawStruct
==
NULL
)
break
;
if
(
DrawStruct
->
m_StructType
!=
TYPEDRAWSEGMENT
)
{
DisplayError
(
this
,
wxT
(
"DrawStruct Type error"
)
);
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
break
;
}
if
(
(
DrawStruct
->
m_Flags
&
IS_NEW
)
)
{
End_Edge
(
(
DRAWSEGMENT
*
)
DrawStruct
,
&
dc
);
DrawPanel
->
m_AutoPAN_Request
=
FALSE
;
GetScreen
()
->
m_CurrentItem
=
NULL
;
}
break
;
}
}
/***************************************************************/
void
WinEDA_PcbFrame
::
RemoveStruct
(
EDA_BaseStruct
*
Item
,
wxDC
*
DC
)
void
WinEDA_PcbFrame
::
RemoveStruct
(
EDA_BaseStruct
*
Item
,
wxDC
*
DC
)
/***************************************************************/
{
if
(
Item
==
NULL
)
return
;
switch
(
Item
->
m_StructType
)
{
case
TYPEMODULE
:
Delete_Module
((
MODULE
*
)
Item
,
DC
);
break
;
case
TYPECOTATION
:
Delete_Cotation
((
COTATION
*
)
Item
,
DC
);
break
;
case
TYPEMIRE
:
Delete_Mire
((
MIREPCB
*
)
Item
,
DC
);
break
;
case
TYPEDRAWSEGMENT
:
Delete_Segment_Edge
((
DRAWSEGMENT
*
)
Item
,
DC
);
break
;
case
TYPETEXTE
:
Delete_Texte_Pcb
((
TEXTE_PCB
*
)
Item
,
DC
);
break
;
case
TYPETRACK
:
Delete_Track
(
DC
,
(
TRACK
*
)
Item
);
break
;
case
TYPEVIA
:
Delete_Segment
(
DC
,
(
TRACK
*
)
Item
);
break
;
case
TYPEZONE
:
Delete_Zone
(
DC
,
(
SEGZONE
*
)
Item
);
break
;
case
TYPEMARQUEUR
:
break
;
case
TYPEPAD
:
case
TYPETEXTEMODULE
:
case
TYPEEDGEMODULE
:
break
;
case
TYPE_NOT_INIT
:
case
PCB_EQUIPOT_STRUCT_TYPE
:
case
TYPEPCB
:
default
:
{
wxString
Line
;
Line
.
Printf
(
wxT
(
"Remove: StructType %d Inattendu"
),
Item
->
m_StructType
);
DisplayError
(
this
,
Line
);
}
break
;
}
if
(
Item
==
NULL
)
return
;
switch
(
Item
->
m_StructType
)
{
case
TYPEMODULE
:
Delete_Module
(
(
MODULE
*
)
Item
,
DC
);
break
;
case
TYPECOTATION
:
Delete_Cotation
(
(
COTATION
*
)
Item
,
DC
);
break
;
case
TYPEMIRE
:
Delete_Mire
(
(
MIREPCB
*
)
Item
,
DC
);
break
;
case
TYPEDRAWSEGMENT
:
Delete_Segment_Edge
(
(
DRAWSEGMENT
*
)
Item
,
DC
);
break
;
case
TYPETEXTE
:
Delete_Texte_Pcb
(
(
TEXTE_PCB
*
)
Item
,
DC
);
break
;
case
TYPETRACK
:
Delete_Track
(
DC
,
(
TRACK
*
)
Item
);
break
;
case
TYPEVIA
:
Delete_Segment
(
DC
,
(
TRACK
*
)
Item
);
break
;
case
TYPEZONE
:
Delete_Zone
(
DC
,
(
SEGZONE
*
)
Item
);
break
;
case
TYPEMARQUEUR
:
break
;
case
TYPEPAD
:
case
TYPETEXTEMODULE
:
case
TYPEEDGEMODULE
:
break
;
case
TYPE_NOT_INIT
:
case
PCB_EQUIPOT_STRUCT_TYPE
:
case
TYPEPCB
:
default
:
{
wxString
Line
;
Line
.
Printf
(
wxT
(
"Remove: StructType %d Inattendu"
),
Item
->
m_StructType
);
DisplayError
(
this
,
Line
);
}
break
;
}
}
/****************************************************************/
void
WinEDA_PcbFrame
::
SwitchLayer
(
wxDC
*
DC
,
int
layer
)
void
WinEDA_PcbFrame
::
SwitchLayer
(
wxDC
*
DC
,
int
layer
)
/*****************************************************************/
{
int
preslayer
=
GetScreen
()
->
m_Active_Layer
;
//if there is only one layer, don't switch.
if
(
m_Pcb
->
m_BoardSettings
->
m_CopperLayerCount
<=
1
)
return
;
//otherwise, must be at least 2 layers..see if it is possible.
if
(
layer
==
LAYER_CUIVRE_N
||
layer
==
LAYER_CMP_N
||
layer
<
m_Pcb
->
m_BoardSettings
->
m_CopperLayerCount
-
1
){
if
(
preslayer
==
layer
)
return
;
EDA_BaseStruct
*
current
=
GetScreen
()
->
m_CurrentItem
;
//see if we are drawing a segment; if so, add a via?
if
(
m_ID_current_state
==
ID_TRACK_BUTT
&&
current
!=
NULL
)
{
if
(
current
->
m_StructType
==
TYPETRACK
&&
(
current
->
m_Flags
&
IS_NEW
)){
//want to set the routing layers so that it switches properly -
//see the implementation of Other_Layer_Route - the working
//layer is used to 'start' the via and set the layer masks appropriately.
GetScreen
()
->
m_Route_Layer_TOP
=
preslayer
;
GetScreen
()
->
m_Route_Layer_BOTTOM
=
layer
;
GetScreen
()
->
m_Active_Layer
=
preslayer
;
Other_Layer_Route
(
(
TRACK
*
)
GetScreen
()
->
m_CurrentItem
,
DC
);
}
}
GetScreen
()
->
m_Active_Layer
=
layer
;
if
(
DisplayOpt
.
ContrastModeDisplay
)
GetScreen
()
->
SetRefreshReq
();
}
int
preslayer
=
GetScreen
()
->
m_Active_Layer
;
//if there is only one layer, don't switch.
if
(
m_Pcb
->
m_BoardSettings
->
m_CopperLayerCount
<=
1
)
return
;
//otherwise, must be at least 2 layers..see if it is possible.
if
(
layer
==
LAYER_CUIVRE_N
||
layer
==
LAYER_CMP_N
||
layer
<
m_Pcb
->
m_BoardSettings
->
m_CopperLayerCount
-
1
)
{
if
(
preslayer
==
layer
)
return
;
EDA_BaseStruct
*
current
=
GetScreen
()
->
m_CurrentItem
;
//see if we are drawing a segment; if so, add a via?
if
(
m_ID_current_state
==
ID_TRACK_BUTT
&&
current
!=
NULL
)
{
if
(
current
->
m_StructType
==
TYPETRACK
&&
(
current
->
m_Flags
&
IS_NEW
)
)
{
//want to set the routing layers so that it switches properly -
//see the implementation of Other_Layer_Route - the working
//layer is used to 'start' the via and set the layer masks appropriately.
GetScreen
()
->
m_Route_Layer_TOP
=
preslayer
;
GetScreen
()
->
m_Route_Layer_BOTTOM
=
layer
;
GetScreen
()
->
m_Active_Layer
=
preslayer
;
Other_Layer_Route
(
(
TRACK
*
)
GetScreen
()
->
m_CurrentItem
,
DC
);
}
}
GetScreen
()
->
m_Active_Layer
=
layer
;
if
(
DisplayOpt
.
ContrastModeDisplay
)
GetScreen
()
->
SetRefreshReq
();
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment