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
0f0ced37
Commit
0f0ced37
authored
Mar 13, 2008
by
dickelbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
beautify
parent
0f06e2ad
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
675 additions
and
547 deletions
+675
-547
block.cpp
eeschema/block.cpp
+10
-2
cmpclass.cpp
eeschema/cmpclass.cpp
+25
-6
delete.cpp
eeschema/delete.cpp
+518
-442
erc.cpp
eeschema/erc.cpp
+102
-86
program.h
eeschema/program.h
+17
-11
schedit.cpp
eeschema/schedit.cpp
+3
-0
No files found.
eeschema/block.cpp
View file @
0f0ced37
...
...
@@ -932,7 +932,8 @@ void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, EDA_BaseStruct* DrawStruct
if
(
DrawStruct
->
Type
()
==
DRAW_SHEETLABEL_STRUCT_TYPE
)
{
/* Cette stucture est rattachee a une feuille, et n'est pas
{
/* Cette stucture est rattachee a une feuille, et n'est pas
* accessible par la liste globale directement */
frame
->
SaveCopyInUndoList
(
(
(
DrawSheetLabelStruct
*
)
DrawStruct
)
->
m_Parent
,
IS_CHANGED
);
frame
->
DeleteSheetLabel
(
DC
,
(
DrawSheetLabelStruct
*
)
DrawStruct
);
...
...
@@ -961,7 +962,14 @@ void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, EDA_BaseStruct* DrawStruct
{
screen
->
RemoveFromDrawList
(
DrawStruct
);
RedrawOneStruct
(
panel
,
DC
,
DrawStruct
,
g_XorMode
);
if
(
DrawStruct
->
Type
()
==
DRAW_SEGMENT_STRUCT_TYPE
)
{
D
(
printf
(
"PostDirtyRect()
\n
"
);
)
panel
->
PostDirtyRect
(
((
EDA_DrawLineStruct
*
)
DrawStruct
)
->
GetBoundingBox
()
);
}
else
RedrawOneStruct
(
panel
,
DC
,
DrawStruct
,
g_XorMode
);
/* Unlink the structure */
DrawStruct
->
Pnext
=
DrawStruct
->
Pback
=
NULL
;
// Only one struct -> no link
if
(
DrawStruct
->
Type
()
==
DRAW_SHEET_STRUCT_TYPE
)
...
...
eeschema/cmpclass.cpp
View file @
0f0ced37
...
...
@@ -147,14 +147,14 @@ wxString DrawMarkerStruct::GetComment()
/**
* Function Show
* is used to output the object tree, currently for debugging only.
* @param nestLevel An aid to prettier tree indenting, and is the level
* @param nestLevel An aid to prettier tree indenting, and is the level
* of nesting of this object within the overall tree.
* @param os The ostream& to output to.
*/
void
DrawMarkerStruct
::
Show
(
int
nestLevel
,
std
::
ostream
&
os
)
{
// for now, make it look like XML:
NestedSpace
(
nestLevel
,
os
)
<<
'<'
<<
GetClass
().
Lower
().
mb_str
()
<<
m_Pos
NestedSpace
(
nestLevel
,
os
)
<<
'<'
<<
GetClass
().
Lower
().
mb_str
()
<<
m_Pos
<<
"/>
\n
"
;
}
#endif
...
...
@@ -222,17 +222,17 @@ bool EDA_DrawLineStruct::IsOneEndPointAt( const wxPoint& pos )
/**
* Function Show
* is used to output the object tree, currently for debugging only.
* @param nestLevel An aid to prettier tree indenting, and is the level
* @param nestLevel An aid to prettier tree indenting, and is the level
* of nesting of this object within the overall tree.
* @param os The ostream& to output to.
*/
void
EDA_DrawLineStruct
::
Show
(
int
nestLevel
,
std
::
ostream
&
os
)
{
NestedSpace
(
nestLevel
,
os
)
<<
'<'
<<
GetClass
().
Lower
().
mb_str
()
<<
NestedSpace
(
nestLevel
,
os
)
<<
'<'
<<
GetClass
().
Lower
().
mb_str
()
<<
" layer=
\"
"
<<
m_Layer
<<
'"'
<<
" width=
\"
"
<<
m_Width
<<
'"'
<<
" startIsDangling=
\"
"
<<
m_StartIsDangling
<<
'"'
<<
" endIsDangling=
\"
"
<<
m_EndIsDangling
<<
'"'
<<
">"
<<
" startIsDangling=
\"
"
<<
m_StartIsDangling
<<
'"'
<<
" endIsDangling=
\"
"
<<
m_EndIsDangling
<<
'"'
<<
">"
<<
" <start"
<<
m_Start
<<
"/>"
<<
" <end"
<<
m_End
<<
"/>"
<<
"</"
<<
GetClass
().
Lower
().
mb_str
()
<<
">
\n
"
;
...
...
@@ -240,6 +240,25 @@ void EDA_DrawLineStruct::Show( int nestLevel, std::ostream& os )
#endif
EDA_Rect
EDA_DrawLineStruct
::
GetBoundingBox
()
const
{
int
width
=
25
;
int
xmin
=
MIN
(
m_Start
.
x
,
m_End
.
x
)
-
width
;
int
ymin
=
MIN
(
m_Start
.
y
,
m_End
.
y
)
-
width
;
int
xmax
=
MAX
(
m_Start
.
x
,
m_End
.
x
)
+
width
;
int
ymax
=
MAX
(
m_Start
.
y
,
m_End
.
y
)
+
width
;
// return a rectangle which is [pos,dim) in nature. therefore the +1
EDA_Rect
ret
(
wxPoint
(
xmin
,
ymin
),
wxSize
(
xmax
-
xmin
+
1
,
ymax
-
ymin
+
1
)
);
return
ret
;
}
/****************************/
/* Class DrawPolylineStruct */
/****************************/
...
...
eeschema/delete.cpp
View file @
0f0ced37
/************************************/
/* Delete.cpp: routines d'effacement */
/************************************/
/************************************/
/* Delete.cpp: routines d'effacement */
/************************************/
#include "fctsys.h"
#include "gr_basic.h"
...
...
@@ -17,485 +17,561 @@
/********************************************************************************/
static
int
CountConnectedItems
(
WinEDA_SchematicFrame
*
frame
,
EDA_BaseStruct
*
ListStruct
,
wxPoint
pos
,
bool
TstJunction
)
static
int
CountConnectedItems
(
WinEDA_SchematicFrame
*
frame
,
EDA_BaseStruct
*
ListStruct
,
wxPoint
pos
,
bool
TstJunction
)
/********************************************************************************/
/* Count number of items connected to point pos :
pins, end wire or bus, and junctions if TstJunction == TRUE
Return this count
Used by WinEDA_SchematicFrame::DeleteConnection()
*/
/* Count number of items connected to point pos :
* pins, end wire or bus, and junctions if TstJunction == TRUE
* Return this count
*
* Used by WinEDA_SchematicFrame::DeleteConnection()
*/
{
EDA_BaseStruct
*
Struct
;
int
count
=
0
;
if
(
frame
->
LocatePinEnd
(
ListStruct
,
pos
)
)
count
++
;
for
(
Struct
=
ListStruct
;
Struct
!=
NULL
;
Struct
=
Struct
->
Pnext
)
{
if
(
Struct
->
m_Flags
&
STRUCT_DELETED
)
continue
;
if
(
Struct
->
m_Flags
&
SKIP_STRUCT
)
continue
;
if
(
TstJunction
&&
(
Struct
->
Type
()
==
DRAW_JUNCTION_STRUCT_TYPE
)
)
{
#define JUNCTION ((DrawJunctionStruct*)Struct)
if
(
(
JUNCTION
->
m_Pos
.
x
==
pos
.
x
)
&&
(
JUNCTION
->
m_Pos
.
y
==
pos
.
y
)
)
count
++
;
#undef JUNCTION
}
if
(
Struct
->
Type
()
!=
DRAW_SEGMENT_STRUCT_TYPE
)
continue
;
#define SEGM ((EDA_DrawLineStruct*)Struct)
if
(
SEGM
->
IsOneEndPointAt
(
pos
)
)
count
++
;
#undef SEGM
}
return
count
;
EDA_BaseStruct
*
Struct
;
int
count
=
0
;
if
(
frame
->
LocatePinEnd
(
ListStruct
,
pos
)
)
count
++
;
for
(
Struct
=
ListStruct
;
Struct
!=
NULL
;
Struct
=
Struct
->
Pnext
)
{
if
(
Struct
->
m_Flags
&
STRUCT_DELETED
)
continue
;
if
(
Struct
->
m_Flags
&
SKIP_STRUCT
)
continue
;
if
(
TstJunction
&&
(
Struct
->
Type
()
==
DRAW_JUNCTION_STRUCT_TYPE
)
)
{
#define JUNCTION ( (DrawJunctionStruct*) Struct )
if
(
(
JUNCTION
->
m_Pos
.
x
==
pos
.
x
)
&&
(
JUNCTION
->
m_Pos
.
y
==
pos
.
y
)
)
count
++
;
#undef JUNCTION
}
if
(
Struct
->
Type
()
!=
DRAW_SEGMENT_STRUCT_TYPE
)
continue
;
#define SEGM ( (EDA_DrawLineStruct*) Struct )
if
(
SEGM
->
IsOneEndPointAt
(
pos
)
)
count
++
;
#undef SEGM
}
return
count
;
}
/************************************************************************************/
static
bool
MarkConnected
(
WinEDA_SchematicFrame
*
frame
,
EDA_BaseStruct
*
ListStruct
,
EDA_DrawLineStruct
*
segment
)
static
bool
MarkConnected
(
WinEDA_SchematicFrame
*
frame
,
EDA_BaseStruct
*
ListStruct
,
EDA_DrawLineStruct
*
segment
)
/************************************************************************************/
/* Mark to "CANDIDATE" all wires or junction connected to "segment" in list "ListStruct"
Search wire stop at an any pin
Used by WinEDA_SchematicFrame::DeleteConnection()
*/
/* Mark to "CANDIDATE" all wires or junction connected to "segment" in list "ListStruct"
* Search wire stop at an any pin
*
* Used by WinEDA_SchematicFrame::DeleteConnection()
*/
{
EDA_BaseStruct
*
Struct
;
for
(
Struct
=
ListStruct
;
Struct
!=
NULL
;
Struct
=
Struct
->
Pnext
)
{
if
(
Struct
->
m_Flags
)
continue
;
if
(
Struct
->
Type
()
==
DRAW_JUNCTION_STRUCT_TYPE
)
{
#define JUNCTION ((DrawJunctionStruct*)Struct)
if
(
segment
->
IsOneEndPointAt
(
JUNCTION
->
m_Pos
)
)
Struct
->
m_Flags
|=
CANDIDATE
;
continue
;
#undef JUNCTION
}
if
(
Struct
->
Type
()
!=
DRAW_SEGMENT_STRUCT_TYPE
)
continue
;
#define SEGM ((EDA_DrawLineStruct*)Struct)
if
(
segment
->
IsOneEndPointAt
(
SEGM
->
m_Start
)
)
{
if
(
!
frame
->
LocatePinEnd
(
ListStruct
,
SEGM
->
m_Start
)
)
{
Struct
->
m_Flags
|=
CANDIDATE
;
MarkConnected
(
frame
,
ListStruct
,
SEGM
);
}
}
if
(
segment
->
IsOneEndPointAt
(
SEGM
->
m_End
)
)
{
if
(
!
frame
->
LocatePinEnd
(
ListStruct
,
SEGM
->
m_End
)
)
{
Struct
->
m_Flags
|=
CANDIDATE
;
MarkConnected
(
frame
,
ListStruct
,
SEGM
);
}
}
#undef SEGM
}
return
TRUE
;
EDA_BaseStruct
*
Struct
;
for
(
Struct
=
ListStruct
;
Struct
!=
NULL
;
Struct
=
Struct
->
Pnext
)
{
if
(
Struct
->
m_Flags
)
continue
;
if
(
Struct
->
Type
()
==
DRAW_JUNCTION_STRUCT_TYPE
)
{
#define JUNCTION ( (DrawJunctionStruct*) Struct )
if
(
segment
->
IsOneEndPointAt
(
JUNCTION
->
m_Pos
)
)
Struct
->
m_Flags
|=
CANDIDATE
;
continue
;
#undef JUNCTION
}
if
(
Struct
->
Type
()
!=
DRAW_SEGMENT_STRUCT_TYPE
)
continue
;
#define SEGM ( (EDA_DrawLineStruct*) Struct )
if
(
segment
->
IsOneEndPointAt
(
SEGM
->
m_Start
)
)
{
if
(
!
frame
->
LocatePinEnd
(
ListStruct
,
SEGM
->
m_Start
)
)
{
Struct
->
m_Flags
|=
CANDIDATE
;
MarkConnected
(
frame
,
ListStruct
,
SEGM
);
}
}
if
(
segment
->
IsOneEndPointAt
(
SEGM
->
m_End
)
)
{
if
(
!
frame
->
LocatePinEnd
(
ListStruct
,
SEGM
->
m_End
)
)
{
Struct
->
m_Flags
|=
CANDIDATE
;
MarkConnected
(
frame
,
ListStruct
,
SEGM
);
}
}
#undef SEGM
}
return
TRUE
;
}
/********************************************************************************/
void
WinEDA_SchematicFrame
::
DeleteConnection
(
wxDC
*
DC
,
bool
DeleteFullConnection
)
void
WinEDA_SchematicFrame
::
DeleteConnection
(
wxDC
*
DC
,
bool
DeleteFullConnection
)
/********************************************************************************/
/* Delete a connection, i.e wires or bus connected
stop on a node (more than 2 wires (bus) connected)
*/
*
stop on a node (more than 2 wires (bus) connected)
*/
{
wxPoint
refpos
=
GetScreen
()
->
m_Curseur
;
EDA_BaseStruct
*
DelStruct
;
DrawPickedStruct
*
PickedItem
,
*
PickedList
=
NULL
;
/* Clear .m_Flags member for all items */
for
(
DelStruct
=
GetScreen
()
->
EEDrawList
;
DelStruct
!=
NULL
;
DelStruct
=
DelStruct
->
Pnext
)
DelStruct
->
m_Flags
=
0
;
BreakSegmentOnJunction
(
(
SCH_SCREEN
*
)
GetScreen
()
);
DelStruct
=
GetScreen
()
->
EEDrawList
;
/* Locate all the wires, bus or junction under the mouse cursor, and put them in a list
of items to delete
*/
SCH_SCREEN
*
screen
=
(
SCH_SCREEN
*
)
GetScreen
();
EDA_BaseStruct
*
savedEEDrawList
=
screen
->
EEDrawList
;
while
(
DelStruct
&&
(
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
JUNCTIONITEM
|
WIREITEM
|
BUSITEM
))
!=
NULL
)
{
DelStruct
->
m_Flags
=
SELECTEDNODE
|
STRUCT_DELETED
;
/* Put this structure in the picked list: */
PickedItem
=
new
DrawPickedStruct
(
DelStruct
);
PickedItem
->
Pnext
=
PickedList
;
PickedList
=
PickedItem
;
DelStruct
=
DelStruct
->
Pnext
;
screen
->
EEDrawList
=
DelStruct
;
}
GetScreen
()
->
EEDrawList
=
savedEEDrawList
;
/* Mark all wires, junctions, .. connected to one of the item to delete
*/
if
(
DeleteFullConnection
)
{
for
(
DelStruct
=
GetScreen
()
->
EEDrawList
;
DelStruct
!=
NULL
;
DelStruct
=
DelStruct
->
Pnext
)
{
if
(
!
(
DelStruct
->
m_Flags
&
SELECTEDNODE
)
)
continue
;
#define SEGM ((EDA_DrawLineStruct*)DelStruct)
if
(
DelStruct
->
Type
()
!=
DRAW_SEGMENT_STRUCT_TYPE
)
continue
;
MarkConnected
(
this
,
GetScreen
()
->
EEDrawList
,
SEGM
);
#undef SEGM
}
// Search all removable wires (i.e wire with one new dangling end )
for
(
DelStruct
=
GetScreen
()
->
EEDrawList
;
DelStruct
!=
NULL
;
DelStruct
=
DelStruct
->
Pnext
)
{
bool
noconnect
=
FALSE
;
if
(
DelStruct
->
m_Flags
&
STRUCT_DELETED
)
continue
;
// Already seen
if
(
!
(
DelStruct
->
m_Flags
&
CANDIDATE
)
)
continue
;
// Already seen
if
(
DelStruct
->
Type
()
!=
DRAW_SEGMENT_STRUCT_TYPE
)
continue
;
DelStruct
->
m_Flags
|=
SKIP_STRUCT
;
#define SEGM ((EDA_DrawLineStruct*)DelStruct)
/* Test the SEGM->m_Start point: if this point was connected to an STRUCT_DELETED wire,
and now is not connected, the wire can be deleted */
EDA_BaseStruct
*
removed_struct
;
for
(
removed_struct
=
GetScreen
()
->
EEDrawList
;
removed_struct
!=
NULL
;
removed_struct
=
removed_struct
->
Pnext
)
{
if
(
(
removed_struct
->
m_Flags
&
STRUCT_DELETED
)
==
0
)
continue
;
if
(
removed_struct
->
Type
()
!=
DRAW_SEGMENT_STRUCT_TYPE
)
continue
;
#define WIRE ((EDA_DrawLineStruct*)removed_struct)
if
(
WIRE
->
IsOneEndPointAt
(
SEGM
->
m_Start
)
)
break
;
}
if
(
WIRE
&&
!
CountConnectedItems
(
this
,
GetScreen
()
->
EEDrawList
,
SEGM
->
m_Start
,
TRUE
)
)
noconnect
=
TRUE
;
/* Test the SEGM->m_End point: if this point was connected to an STRUCT_DELETED wire,
and now is not connected, the wire can be deleted */
for
(
removed_struct
=
GetScreen
()
->
EEDrawList
;
removed_struct
!=
NULL
;
removed_struct
=
removed_struct
->
Pnext
)
{
if
(
(
removed_struct
->
m_Flags
&
STRUCT_DELETED
)
==
0
)
continue
;
if
(
removed_struct
->
Type
()
!=
DRAW_SEGMENT_STRUCT_TYPE
)
continue
;
if
(
WIRE
->
IsOneEndPointAt
(
SEGM
->
m_End
)
)
break
;
}
if
(
removed_struct
&&
!
CountConnectedItems
(
this
,
GetScreen
()
->
EEDrawList
,
SEGM
->
m_End
,
TRUE
)
)
noconnect
=
TRUE
;
DelStruct
->
m_Flags
&=
~
SKIP_STRUCT
;
if
(
noconnect
)
{
DelStruct
->
m_Flags
|=
STRUCT_DELETED
;
/* Put this structure in the picked list: */
PickedItem
=
new
DrawPickedStruct
(
DelStruct
);
PickedItem
->
Pnext
=
PickedList
;
PickedList
=
PickedItem
;
DelStruct
=
GetScreen
()
->
EEDrawList
;
}
#undef SEGM
}
// Delete redundant junctions (junctions which connect < 3 end wires and no pin are removed)
for
(
DelStruct
=
GetScreen
()
->
EEDrawList
;
DelStruct
!=
NULL
;
DelStruct
=
DelStruct
->
Pnext
)
{
int
count
;
if
(
DelStruct
->
m_Flags
&
STRUCT_DELETED
)
continue
;
if
(
!
(
DelStruct
->
m_Flags
&
CANDIDATE
)
)
continue
;
if
(
DelStruct
->
Type
()
==
DRAW_JUNCTION_STRUCT_TYPE
)
{
#define JUNCTION ((DrawJunctionStruct*)DelStruct)
count
=
CountConnectedItems
(
this
,
GetScreen
()
->
EEDrawList
,
JUNCTION
->
m_Pos
,
FALSE
);
if
(
count
<=
2
)
{
DelStruct
->
m_Flags
|=
STRUCT_DELETED
;
/* Put this structure in the picked list: */
PickedItem
=
new
DrawPickedStruct
(
DelStruct
);
PickedItem
->
Pnext
=
PickedList
;
PickedList
=
PickedItem
;
}
#undef JUNCTION
}
}
// Delete labels attached to wires
wxPoint
pos
=
GetScreen
()
->
m_Curseur
;
for
(
DelStruct
=
GetScreen
()
->
EEDrawList
;
DelStruct
!=
NULL
;
DelStruct
=
DelStruct
->
Pnext
)
{
if
(
DelStruct
->
m_Flags
&
STRUCT_DELETED
)
continue
;
if
(
DelStruct
->
Type
()
!=
DRAW_LABEL_STRUCT_TYPE
)
continue
;
GetScreen
()
->
m_Curseur
=
((
DrawTextStruct
*
)
DelStruct
)
->
m_Pos
;
EDA_BaseStruct
*
TstStruct
=
PickStruct
(
GetScreen
()
->
m_Curseur
,
GetScreen
(),
WIREITEM
|
BUSITEM
);
if
(
TstStruct
&&
TstStruct
->
m_Flags
&
STRUCT_DELETED
)
{
DelStruct
->
m_Flags
|=
STRUCT_DELETED
;
/* Put this structure in the picked list: */
PickedItem
=
new
DrawPickedStruct
(
DelStruct
);
PickedItem
->
Pnext
=
PickedList
;
PickedList
=
PickedItem
;
}
}
GetScreen
()
->
m_Curseur
=
pos
;
}
for
(
DelStruct
=
GetScreen
()
->
EEDrawList
;
DelStruct
!=
NULL
;
DelStruct
=
DelStruct
->
Pnext
)
DelStruct
->
m_Flags
=
0
;
if
(
PickedList
)
{
DeleteStruct
(
DrawPanel
,
DC
,
PickedList
);
GetScreen
()
->
SetModify
();
}
wxPoint
refpos
=
GetScreen
()
->
m_Curseur
;
EDA_BaseStruct
*
DelStruct
;
DrawPickedStruct
*
PickedItem
,
*
PickedList
=
NULL
;
/* Clear .m_Flags member for all items */
for
(
DelStruct
=
GetScreen
()
->
EEDrawList
;
DelStruct
!=
NULL
;
DelStruct
=
DelStruct
->
Pnext
)
DelStruct
->
m_Flags
=
0
;
BreakSegmentOnJunction
(
(
SCH_SCREEN
*
)
GetScreen
()
);
DelStruct
=
GetScreen
()
->
EEDrawList
;
/* Locate all the wires, bus or junction under the mouse cursor, and put them in a list
* of items to delete
*/
SCH_SCREEN
*
screen
=
(
SCH_SCREEN
*
)
GetScreen
();
EDA_BaseStruct
*
savedEEDrawList
=
screen
->
EEDrawList
;
while
(
DelStruct
&&
(
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
JUNCTIONITEM
|
WIREITEM
|
BUSITEM
)
)
!=
NULL
)
{
DelStruct
->
m_Flags
=
SELECTEDNODE
|
STRUCT_DELETED
;
/* Put this structure in the picked list: */
PickedItem
=
new
DrawPickedStruct
(
DelStruct
);
PickedItem
->
Pnext
=
PickedList
;
PickedList
=
PickedItem
;
DelStruct
=
DelStruct
->
Pnext
;
screen
->
EEDrawList
=
DelStruct
;
}
GetScreen
()
->
EEDrawList
=
savedEEDrawList
;
/* Mark all wires, junctions, .. connected to one of the item to delete
*/
if
(
DeleteFullConnection
)
{
for
(
DelStruct
=
GetScreen
()
->
EEDrawList
;
DelStruct
!=
NULL
;
DelStruct
=
DelStruct
->
Pnext
)
{
if
(
!
(
DelStruct
->
m_Flags
&
SELECTEDNODE
)
)
continue
;
#define SEGM ( (EDA_DrawLineStruct*) DelStruct )
if
(
DelStruct
->
Type
()
!=
DRAW_SEGMENT_STRUCT_TYPE
)
continue
;
MarkConnected
(
this
,
GetScreen
()
->
EEDrawList
,
SEGM
);
#undef SEGM
}
// Search all removable wires (i.e wire with one new dangling end )
for
(
DelStruct
=
GetScreen
()
->
EEDrawList
;
DelStruct
!=
NULL
;
DelStruct
=
DelStruct
->
Pnext
)
{
bool
noconnect
=
FALSE
;
if
(
DelStruct
->
m_Flags
&
STRUCT_DELETED
)
continue
;
// Already seen
if
(
!
(
DelStruct
->
m_Flags
&
CANDIDATE
)
)
continue
;
// Already seen
if
(
DelStruct
->
Type
()
!=
DRAW_SEGMENT_STRUCT_TYPE
)
continue
;
DelStruct
->
m_Flags
|=
SKIP_STRUCT
;
#define SEGM ( (EDA_DrawLineStruct*) DelStruct )
/* Test the SEGM->m_Start point: if this point was connected to an STRUCT_DELETED wire,
* and now is not connected, the wire can be deleted */
EDA_BaseStruct
*
removed_struct
;
for
(
removed_struct
=
GetScreen
()
->
EEDrawList
;
removed_struct
!=
NULL
;
removed_struct
=
removed_struct
->
Pnext
)
{
if
(
(
removed_struct
->
m_Flags
&
STRUCT_DELETED
)
==
0
)
continue
;
if
(
removed_struct
->
Type
()
!=
DRAW_SEGMENT_STRUCT_TYPE
)
continue
;
#define WIRE ( (EDA_DrawLineStruct*) removed_struct )
if
(
WIRE
->
IsOneEndPointAt
(
SEGM
->
m_Start
)
)
break
;
}
if
(
WIRE
&&
!
CountConnectedItems
(
this
,
GetScreen
()
->
EEDrawList
,
SEGM
->
m_Start
,
TRUE
)
)
noconnect
=
TRUE
;
/* Test the SEGM->m_End point: if this point was connected to an STRUCT_DELETED wire,
* and now is not connected, the wire can be deleted */
for
(
removed_struct
=
GetScreen
()
->
EEDrawList
;
removed_struct
!=
NULL
;
removed_struct
=
removed_struct
->
Pnext
)
{
if
(
(
removed_struct
->
m_Flags
&
STRUCT_DELETED
)
==
0
)
continue
;
if
(
removed_struct
->
Type
()
!=
DRAW_SEGMENT_STRUCT_TYPE
)
continue
;
if
(
WIRE
->
IsOneEndPointAt
(
SEGM
->
m_End
)
)
break
;
}
if
(
removed_struct
&&
!
CountConnectedItems
(
this
,
GetScreen
()
->
EEDrawList
,
SEGM
->
m_End
,
TRUE
)
)
noconnect
=
TRUE
;
DelStruct
->
m_Flags
&=
~
SKIP_STRUCT
;
if
(
noconnect
)
{
DelStruct
->
m_Flags
|=
STRUCT_DELETED
;
/* Put this structure in the picked list: */
PickedItem
=
new
DrawPickedStruct
(
DelStruct
);
PickedItem
->
Pnext
=
PickedList
;
PickedList
=
PickedItem
;
DelStruct
=
GetScreen
()
->
EEDrawList
;
}
#undef SEGM
}
// Delete redundant junctions (junctions which connect < 3 end wires and no pin are removed)
for
(
DelStruct
=
GetScreen
()
->
EEDrawList
;
DelStruct
!=
NULL
;
DelStruct
=
DelStruct
->
Pnext
)
{
int
count
;
if
(
DelStruct
->
m_Flags
&
STRUCT_DELETED
)
continue
;
if
(
!
(
DelStruct
->
m_Flags
&
CANDIDATE
)
)
continue
;
if
(
DelStruct
->
Type
()
==
DRAW_JUNCTION_STRUCT_TYPE
)
{
#define JUNCTION ( (DrawJunctionStruct*) DelStruct )
count
=
CountConnectedItems
(
this
,
GetScreen
()
->
EEDrawList
,
JUNCTION
->
m_Pos
,
FALSE
);
if
(
count
<=
2
)
{
DelStruct
->
m_Flags
|=
STRUCT_DELETED
;
/* Put this structure in the picked list: */
PickedItem
=
new
DrawPickedStruct
(
DelStruct
);
PickedItem
->
Pnext
=
PickedList
;
PickedList
=
PickedItem
;
}
#undef JUNCTION
}
}
// Delete labels attached to wires
wxPoint
pos
=
GetScreen
()
->
m_Curseur
;
for
(
DelStruct
=
GetScreen
()
->
EEDrawList
;
DelStruct
!=
NULL
;
DelStruct
=
DelStruct
->
Pnext
)
{
if
(
DelStruct
->
m_Flags
&
STRUCT_DELETED
)
continue
;
if
(
DelStruct
->
Type
()
!=
DRAW_LABEL_STRUCT_TYPE
)
continue
;
GetScreen
()
->
m_Curseur
=
(
(
DrawTextStruct
*
)
DelStruct
)
->
m_Pos
;
EDA_BaseStruct
*
TstStruct
=
PickStruct
(
GetScreen
()
->
m_Curseur
,
GetScreen
(),
WIREITEM
|
BUSITEM
);
if
(
TstStruct
&&
TstStruct
->
m_Flags
&
STRUCT_DELETED
)
{
DelStruct
->
m_Flags
|=
STRUCT_DELETED
;
/* Put this structure in the picked list: */
PickedItem
=
new
DrawPickedStruct
(
DelStruct
);
PickedItem
->
Pnext
=
PickedList
;
PickedList
=
PickedItem
;
}
}
GetScreen
()
->
m_Curseur
=
pos
;
}
for
(
DelStruct
=
GetScreen
()
->
EEDrawList
;
DelStruct
!=
NULL
;
DelStruct
=
DelStruct
->
Pnext
)
DelStruct
->
m_Flags
=
0
;
if
(
PickedList
)
{
DeleteStruct
(
DrawPanel
,
DC
,
PickedList
);
GetScreen
()
->
SetModify
();
}
}
/*****************************************************************/
bool
LocateAndDeleteItem
(
WinEDA_SchematicFrame
*
frame
,
wxDC
*
DC
)
bool
LocateAndDeleteItem
(
WinEDA_SchematicFrame
*
frame
,
wxDC
*
DC
)
/*****************************************************************/
/* Locate and delete the item found under the mouse cousor
If more than one item found: the priority order is:
1 : MARKER
2 : JUNCTION
2 : NOCONNECT
3 : WIRE ou BUS
4 : DRAWITEM
5 : TEXT
6 : COMPOSANT
7 : SHEET
return TRUE if an item was deleted
*/
*
If more than one item found: the priority order is:
*
1 : MARKER
*
2 : JUNCTION
*
2 : NOCONNECT
*
3 : WIRE ou BUS
*
4 : DRAWITEM
*
5 : TEXT
*
6 : COMPOSANT
*
7 : SHEET
*
*
return TRUE if an item was deleted
*/
{
EDA_BaseStruct
*
DelStruct
;
SCH_SCREEN
*
screen
=
(
SCH_SCREEN
*
)(
frame
->
GetScreen
());
bool
item_deleted
=
FALSE
;
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
MARKERITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
JUNCTIONITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
NOCONNECTITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
RACCORDITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
WIREITEM
|
BUSITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
DRAWITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
TEXTITEM
|
LABELITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
LIBITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
SHEETITEM
);
if
(
DelStruct
)
{
g_ItemToRepeat
=
NULL
;
DeleteStruct
(
frame
->
DrawPanel
,
DC
,
DelStruct
);
frame
->
TestDanglingEnds
(
frame
->
GetScreen
()
->
EEDrawList
,
DC
);
frame
->
GetScreen
()
->
SetModify
();
item_deleted
=
TRUE
;
}
return
item_deleted
;
EDA_BaseStruct
*
DelStruct
;
SCH_SCREEN
*
screen
=
(
SCH_SCREEN
*
)
(
frame
->
GetScreen
()
);
bool
item_deleted
=
FALSE
;
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
MARKERITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
JUNCTIONITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
NOCONNECTITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
RACCORDITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
WIREITEM
|
BUSITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
DRAWITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
TEXTITEM
|
LABELITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
LIBITEM
);
if
(
DelStruct
==
NULL
)
DelStruct
=
PickStruct
(
screen
->
m_Curseur
,
screen
,
SHEETITEM
);
if
(
DelStruct
)
{
g_ItemToRepeat
=
NULL
;
DeleteStruct
(
frame
->
DrawPanel
,
DC
,
DelStruct
);
frame
->
TestDanglingEnds
(
frame
->
GetScreen
()
->
EEDrawList
,
DC
);
frame
->
GetScreen
()
->
SetModify
();
item_deleted
=
TRUE
;
}
return
item_deleted
;
}
/***************************************************************/
void
EraseStruct
(
EDA_BaseStruct
*
DrawStruct
,
SCH_SCREEN
*
Screen
)
void
EraseStruct
(
EDA_BaseStruct
*
DrawStruct
,
SCH_SCREEN
*
Screen
)
/***************************************************************/
/* Suppression definitive d'une structure dans une liste chainee
d'elements de dessin
DrawStruct = pointeur sur la structure
Screen = pointeur sur l'ecran d'appartenance
Le chainage de la liste est modifie.
Remarque:
pour les structures DRAW_SHEET_STRUCT_TYPE, l'ecran et les structures
correspondantes ne sont pas touches.
Ils doivent etre traites separement
*/
*
d'elements de dessin
*
DrawStruct = pointeur sur la structure
*
Screen = pointeur sur l'ecran d'appartenance
*
Le chainage de la liste est modifie.
*
*
Remarque:
*
pour les structures DRAW_SHEET_STRUCT_TYPE, l'ecran et les structures
*
correspondantes ne sont pas touches.
*
Ils doivent etre traites separement
*/
{
EDA_BaseStruct
*
DrawList
;
DrawPickedStruct
*
PickedList
=
NULL
;
DrawSheetLabelStruct
*
SheetLabel
,
*
NextLabel
;
if
(
DrawStruct
==
NULL
)
return
;
if
(
Screen
==
NULL
)
return
;
Screen
->
SetModify
();
if
(
DrawStruct
->
Type
()
==
DRAW_SHEETLABEL_STRUCT_TYPE
)
{
/* Cette stucture est rattachee a une feuille, et n'est pas
accessible par la liste globale directement */
//this structure has a sheet attached, which we must find.
DrawList
=
Screen
->
EEDrawList
;
for
(
;
DrawList
!=
NULL
;
DrawList
=
DrawList
->
Pnext
)
{
if
(
DrawList
->
Type
()
!=
DRAW_SHEET_STRUCT_TYPE
)
continue
;
/* Examen de la Sheet */
SheetLabel
=
((
DrawSheetStruct
*
)
DrawList
)
->
m_Label
;
if
(
SheetLabel
==
NULL
)
continue
;
if
(
SheetLabel
==
(
DrawSheetLabelStruct
*
)
DrawStruct
)
{
((
DrawSheetStruct
*
)
DrawList
)
->
m_Label
=
(
DrawSheetLabelStruct
*
)
SheetLabel
->
Pnext
;
SAFE_DELETE
(
DrawStruct
);
return
;
}
else
while
(
SheetLabel
->
Pnext
)
/* Examen de la liste dependante */
{
NextLabel
=
(
DrawSheetLabelStruct
*
)
SheetLabel
->
Pnext
;
if
(
NextLabel
==
(
DrawSheetLabelStruct
*
)
DrawStruct
)
{
SheetLabel
->
Pnext
=
(
EDA_BaseStruct
*
)
NextLabel
->
Pnext
;
SAFE_DELETE
(
DrawStruct
);
return
;
}
SheetLabel
=
NextLabel
;
}
}
return
;
}
if
(
DrawStruct
->
Type
()
==
DRAW_PICK_ITEM_STRUCT_TYPE
)
{
PickedList
=
(
DrawPickedStruct
*
)
DrawStruct
;
while
(
PickedList
)
{
if
(
PickedList
->
m_PickedStruct
==
Screen
->
EEDrawList
)
{
Screen
->
EEDrawList
=
Screen
->
EEDrawList
->
Pnext
;
SAFE_DELETE
(
DrawStruct
);
}
else
{
DrawList
=
Screen
->
EEDrawList
;
while
(
DrawList
&&
DrawList
->
Pnext
)
{
if
(
DrawList
->
Pnext
==
PickedList
->
m_PickedStruct
)
{
DrawList
->
Pnext
=
DrawList
->
Pnext
->
Pnext
;
SAFE_DELETE
(
DrawStruct
);
return
;
}
DrawList
=
DrawList
->
Pnext
;
}
}
PickedList
=
(
DrawPickedStruct
*
)
PickedList
->
Pnext
;
}
}
else
// structure usuelle */
{
if
(
DrawStruct
==
Screen
->
EEDrawList
)
{
Screen
->
EEDrawList
=
DrawStruct
->
Pnext
;
SAFE_DELETE
(
DrawStruct
);
}
else
{
DrawList
=
Screen
->
EEDrawList
;
while
(
DrawList
&&
DrawList
->
Pnext
)
{
if
(
DrawList
->
Pnext
==
DrawStruct
)
{
DrawList
->
Pnext
=
DrawStruct
->
Pnext
;
SAFE_DELETE
(
DrawStruct
);
return
;
}
DrawList
=
DrawList
->
Pnext
;
}
}
}
EDA_BaseStruct
*
DrawList
;
DrawPickedStruct
*
PickedList
=
NULL
;
DrawSheetLabelStruct
*
SheetLabel
,
*
NextLabel
;
if
(
DrawStruct
==
NULL
)
return
;
if
(
Screen
==
NULL
)
return
;
Screen
->
SetModify
();
if
(
DrawStruct
->
Type
()
==
DRAW_SHEETLABEL_STRUCT_TYPE
)
{
/* Cette stucture est rattachee a une feuille, et n'est pas
* accessible par la liste globale directement */
//this structure has a sheet attached, which we must find.
DrawList
=
Screen
->
EEDrawList
;
for
(
;
DrawList
!=
NULL
;
DrawList
=
DrawList
->
Pnext
)
{
if
(
DrawList
->
Type
()
!=
DRAW_SHEET_STRUCT_TYPE
)
continue
;
/* Examen de la Sheet */
SheetLabel
=
(
(
DrawSheetStruct
*
)
DrawList
)
->
m_Label
;
if
(
SheetLabel
==
NULL
)
continue
;
if
(
SheetLabel
==
(
DrawSheetLabelStruct
*
)
DrawStruct
)
{
(
(
DrawSheetStruct
*
)
DrawList
)
->
m_Label
=
(
DrawSheetLabelStruct
*
)
SheetLabel
->
Pnext
;
SAFE_DELETE
(
DrawStruct
);
return
;
}
else
{
while
(
SheetLabel
->
Pnext
)
/* Examen de la liste dependante */
{
NextLabel
=
(
DrawSheetLabelStruct
*
)
SheetLabel
->
Pnext
;
if
(
NextLabel
==
(
DrawSheetLabelStruct
*
)
DrawStruct
)
{
SheetLabel
->
Pnext
=
(
EDA_BaseStruct
*
)
NextLabel
->
Pnext
;
SAFE_DELETE
(
DrawStruct
);
return
;
}
SheetLabel
=
NextLabel
;
}
}
}
return
;
}
if
(
DrawStruct
->
Type
()
==
DRAW_PICK_ITEM_STRUCT_TYPE
)
{
PickedList
=
(
DrawPickedStruct
*
)
DrawStruct
;
while
(
PickedList
)
{
if
(
PickedList
->
m_PickedStruct
==
Screen
->
EEDrawList
)
{
Screen
->
EEDrawList
=
Screen
->
EEDrawList
->
Pnext
;
SAFE_DELETE
(
DrawStruct
);
}
else
{
DrawList
=
Screen
->
EEDrawList
;
while
(
DrawList
&&
DrawList
->
Pnext
)
{
if
(
DrawList
->
Pnext
==
PickedList
->
m_PickedStruct
)
{
DrawList
->
Pnext
=
DrawList
->
Pnext
->
Pnext
;
SAFE_DELETE
(
DrawStruct
);
return
;
}
DrawList
=
DrawList
->
Pnext
;
}
}
PickedList
=
(
DrawPickedStruct
*
)
PickedList
->
Pnext
;
}
}
else
// structure usuelle */
{
if
(
DrawStruct
==
Screen
->
EEDrawList
)
{
Screen
->
EEDrawList
=
DrawStruct
->
Pnext
;
SAFE_DELETE
(
DrawStruct
);
}
else
{
DrawList
=
Screen
->
EEDrawList
;
while
(
DrawList
&&
DrawList
->
Pnext
)
{
if
(
DrawList
->
Pnext
==
DrawStruct
)
{
DrawList
->
Pnext
=
DrawStruct
->
Pnext
;
SAFE_DELETE
(
DrawStruct
);
return
;
}
DrawList
=
DrawList
->
Pnext
;
}
}
}
}
/********************************/
void
DeleteAllMarkers
(
int
type
)
void
DeleteAllMarkers
(
int
type
)
/********************************/
/* Effacement des marqueurs du type "type" */
{
SCH_SCREEN
*
screen
;
EDA_BaseStruct
*
DrawStruct
,
*
NextStruct
;
DrawMarkerStruct
*
Marker
;
EDA_ScreenList
ScreenList
;
for
(
screen
=
ScreenList
.
GetFirst
();
screen
!=
NULL
;
screen
=
ScreenList
.
GetNext
()
)
{
for
(
DrawStruct
=
screen
->
EEDrawList
;
DrawStruct
!=
NULL
;
DrawStruct
=
NextStruct
)
{
NextStruct
=
DrawStruct
->
Pnext
;
if
(
DrawStruct
->
Type
()
!=
DRAW_MARKER_STRUCT_TYPE
)
continue
;
/* Marqueur trouve */
Marker
=
(
DrawMarkerStruct
*
)
DrawStruct
;
if
(
Marker
->
m_Type
!=
type
)
continue
;
/* Suppression du marqueur */
EraseStruct
(
DrawStruct
,
screen
);
}
}
SCH_SCREEN
*
screen
;
EDA_BaseStruct
*
DrawStruct
,
*
NextStruct
;
DrawMarkerStruct
*
Marker
;
EDA_ScreenList
ScreenList
;
for
(
screen
=
ScreenList
.
GetFirst
();
screen
!=
NULL
;
screen
=
ScreenList
.
GetNext
()
)
{
for
(
DrawStruct
=
screen
->
EEDrawList
;
DrawStruct
!=
NULL
;
DrawStruct
=
NextStruct
)
{
NextStruct
=
DrawStruct
->
Pnext
;
if
(
DrawStruct
->
Type
()
!=
DRAW_MARKER_STRUCT_TYPE
)
continue
;
/* Marqueur trouve */
Marker
=
(
DrawMarkerStruct
*
)
DrawStruct
;
if
(
Marker
->
m_Type
!=
type
)
continue
;
/* Suppression du marqueur */
EraseStruct
(
DrawStruct
,
screen
);
}
}
}
/********************************************************************/
void
DeleteOneLibraryDrawStruct
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
EDA_LibComponentStruct
*
LibEntry
,
LibEDA_BaseStruct
*
DrawItem
,
int
Affiche
)
void
DeleteOneLibraryDrawStruct
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
EDA_LibComponentStruct
*
LibEntry
,
LibEDA_BaseStruct
*
DrawItem
,
int
Affiche
)
/********************************************************************/
/* Routine d'effacement d'un "LibraryDrawStruct"
(d'un element de dessin d'un composant )
Parametres d'entree
Pointeur sur le composant comportant la structure
(Si NULL la structure a effacer est supposee non rattachee
a un composant)
Pointeur sur la structure a effacer
Efface egalement le graphique correspondant de l'ecran
*/
/* Routine d'effacement d'un "LibraryDrawStruct"
* (d'un element de dessin d'un composant )
*
* Parametres d'entree
* Pointeur sur le composant comportant la structure
* (Si NULL la structure a effacer est supposee non rattachee
* a un composant)
* Pointeur sur la structure a effacer
*
* Efface egalement le graphique correspondant de l'ecran
*/
{
LibEDA_BaseStruct
*
PreviousDrawItem
;
/* Effacement du graphique */
if
(
Affiche
&&
DC
)
DrawLibraryDrawStruct
(
panel
,
DC
,
LibEntry
,
0
,
0
,
DrawItem
,
CurrentUnit
,
g_XorMode
);
/* Effacement de la structure en memoire */
if
(
LibEntry
)
/* Recherche du predecesseur */
{
PreviousDrawItem
=
LibEntry
->
m_Drawings
;
/* Cas du 1er symbole graphique = struct a supprimer */
if
(
LibEntry
->
m_Drawings
==
DrawItem
)
{
LibEntry
->
m_Drawings
=
DrawItem
->
Next
();
SAFE_DELETE
(
DrawItem
);
}
else
/* Cas des autres items */
while
(
PreviousDrawItem
)
{
if
(
PreviousDrawItem
->
Pnext
==
DrawItem
)
{
PreviousDrawItem
->
Pnext
=
DrawItem
->
Pnext
;
SAFE_DELETE
(
DrawItem
);
break
;
}
PreviousDrawItem
=
PreviousDrawItem
->
Next
();
}
}
else
/* Structure non reliee a un composant */
{
SAFE_DELETE
(
DrawItem
);
}
LibEDA_BaseStruct
*
PreviousDrawItem
;
/* Effacement du graphique */
if
(
Affiche
&&
DC
)
DrawLibraryDrawStruct
(
panel
,
DC
,
LibEntry
,
0
,
0
,
DrawItem
,
CurrentUnit
,
g_XorMode
);
/* Effacement de la structure en memoire */
if
(
LibEntry
)
/* Recherche du predecesseur */
{
PreviousDrawItem
=
LibEntry
->
m_Drawings
;
/* Cas du 1er symbole graphique = struct a supprimer */
if
(
LibEntry
->
m_Drawings
==
DrawItem
)
{
LibEntry
->
m_Drawings
=
DrawItem
->
Next
();
SAFE_DELETE
(
DrawItem
);
}
else
/* Cas des autres items */
{
while
(
PreviousDrawItem
)
{
if
(
PreviousDrawItem
->
Pnext
==
DrawItem
)
{
PreviousDrawItem
->
Pnext
=
DrawItem
->
Pnext
;
SAFE_DELETE
(
DrawItem
);
break
;
}
PreviousDrawItem
=
PreviousDrawItem
->
Next
();
}
}
}
else
/* Structure non reliee a un composant */
{
SAFE_DELETE
(
DrawItem
);
}
}
eeschema/erc.cpp
View file @
0f0ced37
...
...
@@ -101,16 +101,17 @@ bool DiagErcTableInit; // go to TRUE after DiagErc init
*/
static
int
DefaultDiagErc
[
PIN_NMAX
][
PIN_NMAX
]
=
{
/* I, O, Bi, 3S, Pas, UnS,PwrI,PwrO, OC, OE, NC */
/* I */
{
OK
,
OK
,
OK
,
OK
,
OK
,
WAR
,
OK
,
OK
,
OK
,
OK
,
WAR
},
/* O */
{
OK
,
ERR
,
OK
,
WAR
,
OK
,
WAR
,
OK
,
ERR
,
ERR
,
ERR
,
WAR
},
/* Bi*/
{
OK
,
OK
,
OK
,
OK
,
OK
,
WAR
,
OK
,
WAR
,
OK
,
WAR
,
WAR
},
/* 3S*/
{
OK
,
WAR
,
OK
,
OK
,
OK
,
WAR
,
WAR
,
ERR
,
WAR
,
WAR
,
WAR
},
/*Pas*/
{
OK
,
OK
,
OK
,
OK
,
OK
,
WAR
,
OK
,
OK
,
OK
,
OK
,
WAR
},
/* I */
{
OK
,
OK
,
OK
,
OK
,
OK
,
WAR
,
OK
,
OK
,
OK
,
OK
,
WAR
},
/* O */
{
OK
,
ERR
,
OK
,
WAR
,
OK
,
WAR
,
OK
,
ERR
,
ERR
,
ERR
,
WAR
},
/* Bi*/
{
OK
,
OK
,
OK
,
OK
,
OK
,
WAR
,
OK
,
WAR
,
OK
,
WAR
,
WAR
},
/* 3S*/
{
OK
,
WAR
,
OK
,
OK
,
OK
,
WAR
,
WAR
,
ERR
,
WAR
,
WAR
,
WAR
},
/*Pas*/
{
OK
,
OK
,
OK
,
OK
,
OK
,
WAR
,
OK
,
OK
,
OK
,
OK
,
WAR
},
/*UnS */
{
WAR
,
WAR
,
WAR
,
WAR
,
WAR
,
WAR
,
WAR
,
WAR
,
WAR
,
WAR
,
WAR
},
/*PwrI*/
{
OK
,
OK
,
OK
,
WAR
,
OK
,
WAR
,
OK
,
OK
,
OK
,
OK
,
ERR
},
/*PwrO*/
{
OK
,
ERR
,
WAR
,
ERR
,
OK
,
WAR
,
OK
,
ERR
,
ERR
,
ERR
,
WAR
},
/* OC */
{
OK
,
ERR
,
OK
,
WAR
,
OK
,
WAR
,
OK
,
ERR
,
OK
,
OK
,
WAR
},
/* OE */
{
OK
,
ERR
,
WAR
,
WAR
,
OK
,
WAR
,
OK
,
ERR
,
OK
,
OK
,
WAR
},
/*PwrI*/
{
OK
,
OK
,
OK
,
WAR
,
OK
,
WAR
,
OK
,
OK
,
OK
,
OK
,
ERR
},
/*PwrO*/
{
OK
,
ERR
,
WAR
,
ERR
,
OK
,
WAR
,
OK
,
ERR
,
ERR
,
ERR
,
WAR
},
/* OC */
{
OK
,
ERR
,
OK
,
WAR
,
OK
,
WAR
,
OK
,
ERR
,
OK
,
OK
,
WAR
},
/* OE */
{
OK
,
ERR
,
WAR
,
WAR
,
OK
,
WAR
,
OK
,
ERR
,
OK
,
OK
,
WAR
},
/* NC */
{
WAR
,
WAR
,
WAR
,
WAR
,
WAR
,
WAR
,
WAR
,
WAR
,
WAR
,
WAR
,
WAR
}
};
...
...
@@ -124,29 +125,29 @@ static int DefaultDiagErc[PIN_NMAX][PIN_NMAX] =
/* Look up table which gives the minimal drive for a pair of connected pins on a net
* Initial state of a net is NOC (No Connection)
* Can be updated to NET_NC, or NOD (Not Driven) or DRV (DRIven)
*
*
* Can be updated to NET_NC only if the previous state is NOC
*
*
* Nets are OK when their final state is NET_NC or DRV
* Nets with the state NOD have no source signal
*/
static
int
MinimalReq
[
PIN_NMAX
][
PIN_NMAX
]
=
{
/* In, Out, Bi, 3S, Pas, UnS,PwrI,PwrO, OC, OE, NC */
/* In*/
{
NOD
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOD
,
DRV
,
DRV
,
DRV
,
NOC
},
/*Out*/
{
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOC
},
/* Bi*/
{
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOD
,
DRV
,
DRV
,
DRV
,
NOC
},
/* 3S*/
{
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOD
,
DRV
,
DRV
,
DRV
,
NOC
},
/*Pas*/
{
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOD
,
DRV
,
DRV
,
DRV
,
NOC
},
/*UnS*/
{
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOD
,
DRV
,
DRV
,
DRV
,
NOC
},
/* In*/
{
NOD
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOD
,
DRV
,
DRV
,
DRV
,
NOC
},
/*Out*/
{
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOC
},
/* Bi*/
{
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOD
,
DRV
,
DRV
,
DRV
,
NOC
},
/* 3S*/
{
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOD
,
DRV
,
DRV
,
DRV
,
NOC
},
/*Pas*/
{
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOD
,
DRV
,
DRV
,
DRV
,
NOC
},
/*UnS*/
{
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOD
,
DRV
,
DRV
,
DRV
,
NOC
},
/*PwrI*/
{
NOD
,
DRV
,
NOD
,
NOD
,
NOD
,
NOD
,
NOD
,
DRV
,
NOD
,
NOD
,
NOC
},
/*PwrO*/
{
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOC
},
/* OC*/
{
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOD
,
DRV
,
DRV
,
DRV
,
NOC
},
/* OE*/
{
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOD
,
DRV
,
DRV
,
DRV
,
NOC
},
/* NC*/
{
NOC
,
NOC
,
NOC
,
NOC
,
NOC
,
NOC
,
NOC
,
NOC
,
NOC
,
NOC
,
NOC
}
/* OC*/
{
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOD
,
DRV
,
DRV
,
DRV
,
NOC
},
/* OE*/
{
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
DRV
,
NOD
,
DRV
,
DRV
,
DRV
,
NOC
},
/* NC*/
{
NOC
,
NOC
,
NOC
,
NOC
,
NOC
,
NOC
,
NOC
,
NOC
,
NOC
,
NOC
,
NOC
}
};
/*********************************************/
void
WinEDA_ErcFrame
::
ReBuildMatrixPanel
()
/*********************************************/
...
...
@@ -174,7 +175,7 @@ void WinEDA_ErcFrame::ReBuildMatrixPanel()
text_height
=
text
->
GetRect
().
GetHeight
();
bitmap_size
=
MAX
(
bitmap_size
,
text_height
);
SAFE_DELETE
(
text
);
SAFE_DELETE
(
text
);
// compute the Y pos interval:
BoxMatrixMinSize
.
y
=
(
bitmap_size
*
(
PIN_NMAX
+
1
)
)
+
5
;
...
...
@@ -273,7 +274,7 @@ void WinEDA_ErcFrame::TestErc( wxCommandEvent& event )
ObjetNetListStruct
*
OldItem
;
ObjetNetListStruct
*
StartNet
;
ObjetNetListStruct
*
Lim
;
int
NetNbItems
,
MinConn
;
if
(
!
DiagErcTableInit
)
...
...
@@ -324,19 +325,19 @@ void WinEDA_ErcFrame::TestErc( wxCommandEvent& event )
for
(
NetItemRef
=
g_TabObjNet
;
NetItemRef
<
Lim
;
NetItemRef
++
)
NetItemRef
->
m_FlagOfConnection
=
(
IsConnectType
)
0
;
NetNbItems
=
0
;
MinConn
=
NOC
;
NetNbItems
=
0
;
MinConn
=
NOC
;
StartNet
=
OldItem
=
NetItemRef
=
g_TabObjNet
;
for
(
;
NetItemRef
<
Lim
;
NetItemRef
++
)
{
/* Tst changement de net */
if
(
OldItem
->
GetNet
()
!=
NetItemRef
->
GetNet
()
)
{
MinConn
=
NOC
;
NetNbItems
=
0
;
StartNet
=
NetItemRef
;
MinConn
=
NOC
;
NetNbItems
=
0
;
StartNet
=
NetItemRef
;
}
switch
(
NetItemRef
->
m_Type
)
...
...
@@ -347,8 +348,8 @@ void WinEDA_ErcFrame::TestErc( wxCommandEvent& event )
case
NET_LABEL
:
case
NET_BUSLABELMEMBER
:
case
NET_PINLABEL
:
case
NET_GLOBLABEL
:
//not sure how to handle global labels -- they should be treated like other nets (just global!0
case
NET_GLOBBUSLABELMEMBER
:
case
NET_GLOBLABEL
:
//not sure how to handle global labels -- they should be treated like other nets (just global!0
case
NET_GLOBBUSLABELMEMBER
:
break
;
case
NET_HIERLABEL
:
...
...
@@ -366,7 +367,7 @@ void WinEDA_ErcFrame::TestErc( wxCommandEvent& event )
case
NET_PIN
:
TestOthersItems
(
m_Parent
->
DrawPanel
,
&
dc
,
NetItemRef
,
StartNet
,
&
NetNbItems
,
&
MinConn
);
NetItemRef
,
StartNet
,
&
NetNbItems
,
&
MinConn
);
break
;
}
...
...
@@ -389,17 +390,18 @@ void WinEDA_ErcFrame::TestErc( wxCommandEvent& event )
if
(
WriteFichierERC
==
TRUE
)
{
wxString
ErcFullFileName
;
ErcFullFileName
=
g_RootSheet
->
m_AssociatedScreen
->
m_FileName
;
ErcFullFileName
=
g_RootSheet
->
m_AssociatedScreen
->
m_FileName
;
ChangeFileNameExt
(
ErcFullFileName
,
wxT
(
".erc"
)
);
ErcFullFileName
=
EDA_FileSelector
(
_
(
"ERC file:"
),
wxEmptyString
,
/* Chemin par defaut */
ErcFullFileName
,
/* nom fichier par defaut */
wxT
(
".erc"
),
/* extension par defaut */
wxT
(
"*.erc"
),
/* Masque d'affichage */
this
,
wxFD_SAVE
,
TRUE
);
wxEmptyString
,
/* Chemin par defaut */
ErcFullFileName
,
/* nom fichier par defaut */
wxT
(
".erc"
),
/* extension par defaut */
wxT
(
"*.erc"
),
/* Masque d'affichage */
this
,
wxFD_SAVE
,
TRUE
);
if
(
ErcFullFileName
.
IsEmpty
()
)
return
;
...
...
@@ -434,6 +436,7 @@ void WinEDA_ErcFrame::DelERCMarkers( wxCommandEvent& event )
{
if
(
DrawStruct
->
Type
()
!=
DRAW_MARKER_STRUCT_TYPE
)
continue
;
/* Marqueur trouve */
Marker
=
(
DrawMarkerStruct
*
)
DrawStruct
;
if
(
Marker
->
m_Type
==
MARQ_ERC
)
...
...
@@ -466,7 +469,7 @@ void WinEDA_ErcFrame::ChangeErrorLevel( wxCommandEvent& event )
{
int
id
,
level
,
ii
,
x
,
y
;
wxBitmapButton
*
Butt
;
const
char
**
new_bitmap_xpm
=
NULL
;
const
char
**
new_bitmap_xpm
=
NULL
;
wxPoint
pos
;
id
=
event
.
GetId
();
...
...
@@ -545,11 +548,11 @@ static void Diagnose( WinEDA_DrawPanel* panel, wxDC* DC,
||
(
NetItemRef
->
m_Type
==
NET_HIERBUSLABELMEMBER
)
)
{
Marker
->
m_Comment
.
Printf
(
_
(
"Warning HLabel %s not connected to SheetLabel"
),
NetItemRef
->
m_Label
->
GetData
()
);
NetItemRef
->
m_Label
->
GetData
()
);
}
else
Marker
->
m_Comment
.
Printf
(
_
(
"Warning SheetLabel %s not connected to HLabel"
),
NetItemRef
->
m_Label
->
GetData
()
);
NetItemRef
->
m_Label
->
GetData
()
);
if
(
screen
==
panel
->
GetScreen
()
)
RedrawOneStruct
(
panel
,
DC
,
Marker
,
GR_COPY
);
...
...
@@ -573,6 +576,7 @@ static void Diagnose( WinEDA_DrawPanel* panel, wxDC* DC,
Marker
->
m_Comment
.
Printf
(
_
(
"Warning Pin %s not driven (Net %d)"
),
MsgPinElectricType
[
ii
],
NetItemRef
->
GetNet
()
);
if
(
screen
==
panel
->
GetScreen
()
)
RedrawOneStruct
(
panel
,
DC
,
Marker
,
GR_COPY
);
return
;
...
...
@@ -582,6 +586,7 @@ static void Diagnose( WinEDA_DrawPanel* panel, wxDC* DC,
{
Marker
->
m_Comment
.
Printf
(
_
(
"Warning More than 1 Pin connected to UnConnect symbol"
)
);
if
(
screen
==
panel
->
GetScreen
()
)
RedrawOneStruct
(
panel
,
DC
,
Marker
,
GR_COPY
);
return
;
...
...
@@ -600,10 +605,10 @@ static void Diagnose( WinEDA_DrawPanel* panel, wxDC* DC,
}
Marker
->
m_Comment
.
Printf
(
_
(
"%s: Pin %s connected to Pin %s (net %d)"
),
DiagLevel
.
GetData
(),
MsgPinElectricType
[
ii
],
MsgPinElectricType
[
jj
],
NetItemRef
->
GetNet
()
);
"%s: Pin %s connected to Pin %s (net %d)"
),
DiagLevel
.
GetData
(),
MsgPinElectricType
[
ii
],
MsgPinElectricType
[
jj
],
NetItemRef
->
GetNet
()
);
if
(
screen
==
panel
->
GetScreen
()
)
RedrawOneStruct
(
panel
,
DC
,
Marker
,
GR_COPY
);
...
...
@@ -625,12 +630,12 @@ static void TestOthersItems( WinEDA_DrawPanel* panel, wxDC* DC,
{
ObjetNetListStruct
*
NetItemTst
;
ObjetNetListStruct
*
Lim
;
int
ref_elect_type
,
jj
,
erc
=
OK
,
local_minconn
;
/* Analyse de la table des connexions : */
Lim
=
g_TabObjNet
+
g_NbrObjNet
;
// pointe la fin de la liste
ref_elect_type
=
NetItemRef
->
m_ElectricalType
;
NetItemTst
=
netstart
;
...
...
@@ -644,7 +649,7 @@ static void TestOthersItems( WinEDA_DrawPanel* panel, wxDC* DC,
/* Est - on toujours dans le meme net ? */
if
(
(
NetItemTst
>=
Lim
)
// fin de liste (donc fin de net)
||
(
NetItemRef
->
GetNet
()
!=
NetItemTst
->
GetNet
()
)
)
// fin de net
||
(
NetItemRef
->
GetNet
()
!=
NetItemTst
->
GetNet
()
)
)
// fin de net
{
/* Fin de netcode trouve: Tst connexion minimum */
if
(
(
*
MinConnexion
<
NET_NC
)
&&
(
local_minconn
<
NET_NC
)
)
/* pin non connect�e ou non pilotee */
...
...
@@ -666,8 +671,8 @@ static void TestOthersItems( WinEDA_DrawPanel* panel, wxDC* DC,
case
NET_HIERBUSLABELMEMBER
:
case
NET_SHEETBUSLABELMEMBER
:
case
NET_SHEETLABEL
:
case
NET_GLOBLABEL
:
case
NET_GLOBBUSLABELMEMBER
:
case
NET_GLOBLABEL
:
case
NET_GLOBBUSLABELMEMBER
:
case
NET_PINLABEL
:
break
;
...
...
@@ -681,7 +686,7 @@ static void TestOthersItems( WinEDA_DrawPanel* panel, wxDC* DC,
if
(
NetItemTst
<=
NetItemRef
)
break
;
*
NetNbItems
+=
1
;
if
(
erc
==
OK
)
// 1 marqueur par pin maxi
{
...
...
@@ -712,7 +717,7 @@ static bool WriteDiagnosticERC( const wxString& FullFileName )
DrawMarkerStruct
*
Marker
;
char
Line
[
256
];
static
FILE
*
OutErc
;
DrawSheetPath
*
Sheet
;
DrawSheetPath
*
Sheet
;
wxString
msg
;
if
(
(
OutErc
=
wxFopen
(
FullFileName
,
wxT
(
"wt"
)
)
)
==
NULL
)
...
...
@@ -720,23 +725,26 @@ static bool WriteDiagnosticERC( const wxString& FullFileName )
DateAndTime
(
Line
);
msg
=
_
(
"ERC control"
);
fprintf
(
OutErc
,
"%s (%s)
\n
"
,
CONV_TO_UTF8
(
msg
),
Line
);
EDA_SheetList
SheetList
(
NULL
);
for
(
Sheet
=
SheetList
.
GetFirst
();
Sheet
!=
NULL
;
Sheet
=
SheetList
.
GetNext
()
)
{
if
(
Sheet
->
Last
()
==
g_RootSheet
){
msg
.
Printf
(
_
(
"
\n
***** Sheet / (Root)
\n
"
)
);
}
else
{
wxString
str
=
Sheet
->
PathHumanReadable
();
msg
.
Printf
(
_
(
"
\n
***** Sheet %s
\n
"
),
str
.
GetData
()
);
}
if
(
Sheet
->
Last
()
==
g_RootSheet
)
{
msg
.
Printf
(
_
(
"
\n
***** Sheet / (Root)
\n
"
)
);
}
else
{
wxString
str
=
Sheet
->
PathHumanReadable
();
msg
.
Printf
(
_
(
"
\n
***** Sheet %s
\n
"
),
str
.
GetData
()
);
}
fprintf
(
OutErc
,
"%s"
,
CONV_TO_UTF8
(
msg
)
);
DrawStruct
=
Sheet
->
LastDrawList
();
DrawStruct
=
Sheet
->
LastDrawList
();
for
(
;
DrawStruct
!=
NULL
;
DrawStruct
=
DrawStruct
->
Pnext
)
{
if
(
DrawStruct
->
Type
()
!=
DRAW_MARKER_STRUCT_TYPE
)
...
...
@@ -746,13 +754,13 @@ static bool WriteDiagnosticERC( const wxString& FullFileName )
Marker
=
(
DrawMarkerStruct
*
)
DrawStruct
;
if
(
Marker
->
m_Type
!=
MARQ_ERC
)
continue
;
/* Write diag marqueur */
msg
.
Printf
(
_
(
"ERC: %s (X= %2.3f inches, Y= %2.3f inches
\n
"
),
Marker
->
GetComment
().
GetData
(),
(
float
)
Marker
->
m_Pos
.
x
/
1000
,
(
float
)
Marker
->
m_Pos
.
y
/
1000
);
Marker
->
GetComment
().
GetData
(),
(
float
)
Marker
->
m_Pos
.
x
/
1000
,
(
float
)
Marker
->
m_Pos
.
y
/
1000
);
fprintf
(
OutErc
,
"%s"
,
CONV_TO_UTF8
(
msg
)
);
}
}
...
...
@@ -764,18 +772,24 @@ static bool WriteDiagnosticERC( const wxString& FullFileName )
return
TRUE
;
}
bool
TestLabel_
(
ObjetNetListStruct
*
a
,
ObjetNetListStruct
*
b
)
{
int
at
=
a
->
m_Type
;
int
bt
=
b
->
m_Type
;
if
(
(
at
==
NET_HIERLABEL
||
at
==
NET_HIERBUSLABELMEMBER
)
&&
(
bt
==
NET_SHEETLABEL
||
bt
==
NET_SHEETBUSLABELMEMBER
)
){
if
(
a
->
m_SheetList
==
b
->
m_SheetListInclude
){
return
true
;
//connected!
}
}
return
false
;
//these two are unconnected
int
at
=
a
->
m_Type
;
int
bt
=
b
->
m_Type
;
if
(
(
at
==
NET_HIERLABEL
||
at
==
NET_HIERBUSLABELMEMBER
)
&&
(
bt
==
NET_SHEETLABEL
||
bt
==
NET_SHEETBUSLABELMEMBER
)
)
{
if
(
a
->
m_SheetList
==
b
->
m_SheetListInclude
)
{
return
true
;
//connected!
}
}
return
false
;
//these two are unconnected
}
/***********************************************************************/
void
TestLabel
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
ObjetNetListStruct
*
NetItemRef
,
ObjetNetListStruct
*
StartNet
)
...
...
@@ -802,18 +816,20 @@ void TestLabel( WinEDA_DrawPanel* panel, wxDC* DC,
/* Est - on toujours dans le meme net ? */
if
(
(
NetItemTst
==
Lim
)
||
(
NetItemRef
->
GetNet
()
!=
NetItemTst
->
GetNet
()
)
)
{
{
/* Fin de netcode trouve */
if
(
erc
){
if
(
erc
)
{
/* GLabel ou SheetLabel orphelin */
Diagnose
(
panel
,
DC
,
NetItemRef
,
NULL
,
-
1
,
WAR
);
}
return
;
}
if
(
TestLabel_
(
NetItemRef
,
NetItemTst
))
erc
=
0
;
//same thing, different order.
if
(
TestLabel_
(
NetItemTst
,
NetItemRef
))
erc
=
0
;
if
(
TestLabel_
(
NetItemRef
,
NetItemTst
)
)
erc
=
0
;
//same thing, different order.
if
(
TestLabel_
(
NetItemTst
,
NetItemRef
)
)
erc
=
0
;
}
}
eeschema/program.h
View file @
0f0ced37
...
...
@@ -76,7 +76,7 @@ public:
public
:
EDA_DrawLineStruct
(
const
wxPoint
&
pos
,
int
layer
);
~
EDA_DrawLineStruct
()
{
}
virtual
wxString
GetClass
()
const
{
return
wxT
(
"EDA_DrawLine"
);
...
...
@@ -92,19 +92,25 @@ public:
}
/**
* Function GetBoundingBox
* returns the bounding box of this TRACK
*/
EDA_Rect
GetBoundingBox
()
const
;
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
=
-
1
);
#if defined(DEBUG)
#if defined(DEBUG)
/**
* Function Show
* is used to output the object tree, currently for debugging only.
* @param nestLevel An aid to prettier tree indenting, and is the level
* @param nestLevel An aid to prettier tree indenting, and is the level
* of nesting of this object within the overall tree.
* @param os The ostream& to output to.
*/
void
Show
(
int
nestLevel
,
std
::
ostream
&
os
);
#endif
#endif
};
...
...
@@ -129,16 +135,16 @@ public:
wxString
GetComment
();
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
=
-
1
);
#if defined(DEBUG)
#if defined(DEBUG)
/**
* Function Show
* is used to output the object tree, currently for debugging only.
* @param nestLevel An aid to prettier tree indenting, and is the level
* @param nestLevel An aid to prettier tree indenting, and is the level
* of nesting of this object within the overall tree.
* @param os The ostream& to output to.
*/
void
Show
(
int
nestLevel
,
std
::
ostream
&
os
);
#endif
#endif
};
...
...
@@ -177,7 +183,7 @@ public:
public
:
DrawBusEntryStruct
(
const
wxPoint
&
pos
,
int
shape
,
int
id
);
~
DrawBusEntryStruct
()
{
}
virtual
wxString
GetClass
()
const
{
return
wxT
(
"DrawBusEntry"
);
...
...
@@ -201,7 +207,7 @@ public:
public
:
DrawPolylineStruct
(
int
layer
);
~
DrawPolylineStruct
();
virtual
wxString
GetClass
()
const
{
return
wxT
(
"DrawPolyline"
);
...
...
@@ -222,7 +228,7 @@ public:
public
:
DrawJunctionStruct
(
const
wxPoint
&
pos
);
~
DrawJunctionStruct
()
{
}
virtual
wxString
GetClass
()
const
{
return
wxT
(
"DrawJunction"
);
...
...
eeschema/schedit.cpp
View file @
0f0ced37
...
...
@@ -478,6 +478,7 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
DrawPanel
->
MouseToCursorSchema
();
if
(
GetScreen
()
->
GetCurItem
()
->
m_Flags
==
0
)
SaveCopyInUndoList
(
GetScreen
()
->
GetCurItem
(),
IS_CHANGED
);
CmpRotationMiroir
(
(
EDA_SchComponentStruct
*
)
GetScreen
()
->
GetCurItem
(),
&
dc
,
option
);
...
...
@@ -497,6 +498,7 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
GetScreen
()
)
);
if
(
GetScreen
()
->
GetCurItem
()
==
NULL
)
break
;
EditComponentValue
(
(
EDA_SchComponentStruct
*
)
GetScreen
()
->
GetCurItem
(),
&
dc
);
break
;
...
...
@@ -510,6 +512,7 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
GetScreen
()
)
);
if
(
GetScreen
()
->
GetCurItem
()
==
NULL
)
break
;
EditComponentReference
(
(
EDA_SchComponentStruct
*
)
GetScreen
()
->
GetCurItem
(),
&
dc
);
break
;
...
...
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