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
08ef7417
Commit
08ef7417
authored
Feb 05, 2012
by
jean-pierre charras
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Undo redo change and code cleanup.
parent
8e846082
Changes
23
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
102 additions
and
125 deletions
+102
-125
class_undoredo_container.cpp
common/class_undoredo_container.cpp
+21
-22
edit_label.cpp
eeschema/edit_label.cpp
+2
-2
libedit_undo_redo.cpp
eeschema/libedit_undo_redo.cpp
+2
-2
sch_screen.cpp
eeschema/sch_screen.cpp
+1
-3
schematic_undo_redo.cpp
eeschema/schematic_undo_redo.cpp
+4
-10
class_undoredo_container.h
include/class_undoredo_container.h
+22
-16
automove.cpp
pcbnew/automove.cpp
+2
-3
autoplac.cpp
pcbnew/autoplac.cpp
+4
-8
block.cpp
pcbnew/block.cpp
+5
-10
board_undo_redo.cpp
pcbnew/board_undo_redo.cpp
+6
-10
deltrack.cpp
pcbnew/deltrack.cpp
+2
-4
dialog_global_deletion.cpp
pcbnew/dialogs/dialog_global_deletion.cpp
+4
-4
edit_track_width.cpp
pcbnew/edit_track_width.cpp
+1
-1
editedge.cpp
pcbnew/editedge.cpp
+1
-1
edtxtmod.cpp
pcbnew/edtxtmod.cpp
+3
-4
globaleditpad.cpp
pcbnew/globaleditpad.cpp
+0
-1
modedit_undo_redo.cpp
pcbnew/modedit_undo_redo.cpp
+2
-2
modules.cpp
pcbnew/modules.cpp
+4
-4
move-drag_pads.cpp
pcbnew/move-drag_pads.cpp
+2
-2
move_or_drag_track.cpp
pcbnew/move_or_drag_track.cpp
+7
-7
pcbplot.cpp
pcbnew/pcbplot.cpp
+5
-4
zones_functions_for_undo_redo.cpp
pcbnew/zones_functions_for_undo_redo.cpp
+2
-3
zones_test_and_combine_areas.cpp
pcbnew/zones_test_and_combine_areas.cpp
+0
-2
No files found.
common/class_undoredo_container.cpp
View file @
08ef7417
...
...
@@ -33,11 +33,10 @@
ITEM_PICKER
::
ITEM_PICKER
(
EDA_ITEM
*
aItem
,
UNDO_REDO_T
aUndoRedoStatus
)
{
m_UndoRedoStatus
=
aUndoRedoStatus
;
m_PickedItem
=
aItem
;
m_PickedItemType
=
TYPE_NOT_INIT
;
m_PickerFlags
=
0
;
m_Link
=
NULL
;
m_undoRedoStatus
=
aUndoRedoStatus
;
SetItem
(
aItem
);
m_pickerFlags
=
0
;
m_link
=
NULL
;
}
...
...
@@ -75,7 +74,7 @@ bool PICKED_ITEMS_LIST::ContainsItem( EDA_ITEM* aItem ) const
{
for
(
size_t
i
=
0
;
i
<
m_ItemsList
.
size
();
i
++
)
{
if
(
m_ItemsList
[
i
].
m_PickedItem
==
aItem
)
if
(
m_ItemsList
[
i
].
GetItem
()
==
aItem
)
return
true
;
}
...
...
@@ -97,9 +96,9 @@ void PICKED_ITEMS_LIST::ClearListAndDeleteItems()
while
(
GetCount
()
>
0
)
{
ITEM_PICKER
wrapper
=
PopItem
();
if
(
wrapper
.
m_PickedItem
==
NULL
)
// No more item in list.
if
(
wrapper
.
GetItem
()
==
NULL
)
// No more item in list.
break
;
switch
(
wrapper
.
m_UndoRedoStatus
)
switch
(
wrapper
.
GetStatus
()
)
{
case
UR_UNSPECIFIED
:
if
(
show_error_message
)
...
...
@@ -112,7 +111,7 @@ void PICKED_ITEMS_LIST::ClearListAndDeleteItems()
{
// Specific to eeschema: a linked list of wires is stored. The wrapper picks only
// the first item (head of list), and is owner of all picked items.
EDA_ITEM
*
item
=
wrapper
.
m_PickedItem
;
EDA_ITEM
*
item
=
wrapper
.
GetItem
()
;
while
(
item
)
{
...
...
@@ -135,7 +134,7 @@ void PICKED_ITEMS_LIST::ClearListAndDeleteItems()
case
UR_CHANGED
:
case
UR_EXCHANGE_T
:
delete
wrapper
.
m_Link
;
// the picker is owner of this item
delete
wrapper
.
GetLink
()
;
// the picker is owner of this item
break
;
case
UR_DELETED
:
// the picker is owner of this item
...
...
@@ -146,12 +145,12 @@ void PICKED_ITEMS_LIST::ClearListAndDeleteItems()
* copy of the current module when changed),
* and the picker is owner of this item
*/
delete
wrapper
.
m_PickedItem
;
delete
wrapper
.
GetItem
()
;
break
;
default
:
wxFAIL_MSG
(
wxString
::
Format
(
wxT
(
"Cannot clear unknown undo/redo command %d"
),
wrapper
.
m_UndoRedoStatus
)
);
wrapper
.
GetStatus
()
)
);
break
;
}
}
...
...
@@ -172,7 +171,7 @@ ITEM_PICKER PICKED_ITEMS_LIST::GetItemWrapper( unsigned int aIdx )
EDA_ITEM
*
PICKED_ITEMS_LIST
::
GetPickedItem
(
unsigned
int
aIdx
)
{
if
(
aIdx
<
m_ItemsList
.
size
()
)
return
m_ItemsList
[
aIdx
].
m_PickedItem
;
return
m_ItemsList
[
aIdx
].
GetItem
()
;
else
return
NULL
;
}
...
...
@@ -181,7 +180,7 @@ EDA_ITEM* PICKED_ITEMS_LIST::GetPickedItem( unsigned int aIdx )
EDA_ITEM
*
PICKED_ITEMS_LIST
::
GetPickedItemLink
(
unsigned
int
aIdx
)
{
if
(
aIdx
<
m_ItemsList
.
size
()
)
return
m_ItemsList
[
aIdx
].
m_Link
;
return
m_ItemsList
[
aIdx
].
GetLink
()
;
else
return
NULL
;
}
...
...
@@ -190,7 +189,7 @@ EDA_ITEM* PICKED_ITEMS_LIST::GetPickedItemLink( unsigned int aIdx )
UNDO_REDO_T
PICKED_ITEMS_LIST
::
GetPickedItemStatus
(
unsigned
int
aIdx
)
{
if
(
aIdx
<
m_ItemsList
.
size
()
)
return
m_ItemsList
[
aIdx
].
m_UndoRedoStatus
;
return
m_ItemsList
[
aIdx
].
GetStatus
()
;
else
return
UR_UNSPECIFIED
;
}
...
...
@@ -199,7 +198,7 @@ UNDO_REDO_T PICKED_ITEMS_LIST::GetPickedItemStatus( unsigned int aIdx )
int
PICKED_ITEMS_LIST
::
GetPickerFlags
(
unsigned
aIdx
)
{
if
(
aIdx
<
m_ItemsList
.
size
()
)
return
m_ItemsList
[
aIdx
].
m_PickerFlags
;
return
m_ItemsList
[
aIdx
].
GetFlags
()
;
else
return
0
;
}
...
...
@@ -209,7 +208,7 @@ bool PICKED_ITEMS_LIST::SetPickedItem( EDA_ITEM* aItem, unsigned aIdx )
{
if
(
aIdx
<
m_ItemsList
.
size
()
)
{
m_ItemsList
[
aIdx
].
m_PickedItem
=
aItem
;
m_ItemsList
[
aIdx
].
SetItem
(
aItem
)
;
return
true
;
}
else
...
...
@@ -221,7 +220,7 @@ bool PICKED_ITEMS_LIST::SetPickedItemLink( EDA_ITEM* aLink, unsigned aIdx )
{
if
(
aIdx
<
m_ItemsList
.
size
()
)
{
m_ItemsList
[
aIdx
].
m_Link
=
aLink
;
m_ItemsList
[
aIdx
].
SetLink
(
aLink
)
;
return
true
;
}
else
...
...
@@ -233,8 +232,8 @@ bool PICKED_ITEMS_LIST::SetPickedItem( EDA_ITEM* aItem, UNDO_REDO_T aStatus, uns
{
if
(
aIdx
<
m_ItemsList
.
size
()
)
{
m_ItemsList
[
aIdx
].
m_PickedItem
=
aItem
;
m_ItemsList
[
aIdx
].
m_UndoRedoStatus
=
aStatus
;
m_ItemsList
[
aIdx
].
SetItem
(
aItem
)
;
m_ItemsList
[
aIdx
].
SetStatus
(
aStatus
)
;
return
true
;
}
else
...
...
@@ -246,7 +245,7 @@ bool PICKED_ITEMS_LIST::SetPickedItemStatus( UNDO_REDO_T aStatus, unsigned aIdx
{
if
(
aIdx
<
m_ItemsList
.
size
()
)
{
m_ItemsList
[
aIdx
].
m_UndoRedoStatus
=
aStatus
;
m_ItemsList
[
aIdx
].
SetStatus
(
aStatus
)
;
return
true
;
}
else
...
...
@@ -258,7 +257,7 @@ bool PICKED_ITEMS_LIST::SetPickerFlags( int aFlags, unsigned aIdx )
{
if
(
aIdx
<
m_ItemsList
.
size
()
)
{
m_ItemsList
[
aIdx
].
m_PickerFlags
=
aFlags
;
m_ItemsList
[
aIdx
].
SetFlags
(
aFlags
)
;
return
true
;
}
else
...
...
eeschema/edit_label.cpp
View file @
08ef7417
...
...
@@ -263,12 +263,12 @@ void SCH_EDIT_FRAME::OnConvertTextType( wxCommandEvent& aEvent )
}
// Prepare undo command for delete old text
picker
.
m_UndoRedoStatus
=
UR_DELETED
;
picker
.
SetStatus
(
UR_DELETED
)
;
picker
.
SetLink
(
NULL
);
pickList
.
PushItem
(
picker
);
// Prepare undo command for new text
picker
.
m_UndoRedoStatus
=
UR_NEW
;
picker
.
SetStatus
(
UR_NEW
)
;
picker
.
SetItem
(
newtext
);
pickList
.
PushItem
(
picker
);
...
...
eeschema/libedit_undo_redo.cpp
View file @
08ef7417
...
...
@@ -48,7 +48,7 @@ void LIB_EDIT_FRAME::GetComponentFromRedoList( wxCommandEvent& event )
lastcmd
=
GetScreen
()
->
PopCommandFromRedoList
();
wrapper
=
lastcmd
->
PopItem
();
m_component
=
(
LIB_COMPONENT
*
)
wrapper
.
m_PickedItem
;
m_component
=
(
LIB_COMPONENT
*
)
wrapper
.
GetItem
()
;
if
(
m_component
==
NULL
)
return
;
...
...
@@ -84,7 +84,7 @@ void LIB_EDIT_FRAME::GetComponentFromUndoList( wxCommandEvent& event )
lastcmd
=
GetScreen
()
->
PopCommandFromUndoList
();
wrapper
=
lastcmd
->
PopItem
();
m_component
=
(
LIB_COMPONENT
*
)
wrapper
.
m_PickedItem
;
m_component
=
(
LIB_COMPONENT
*
)
wrapper
.
GetItem
()
;
if
(
m_component
==
NULL
)
return
;
...
...
eeschema/sch_screen.cpp
View file @
08ef7417
...
...
@@ -872,7 +872,6 @@ void SCH_SCREEN::addConnectedItemsToBlock( const wxPoint& position )
for
(
item
=
GetDrawItems
();
item
!=
NULL
;
item
=
item
->
Next
()
)
{
picker
.
SetItem
(
item
);
picker
.
SetItemType
(
item
->
Type
()
);
if
(
!
item
->
IsConnectable
()
||
!
item
->
IsConnected
(
position
)
||
(
item
->
GetFlags
()
&
SKIP_STRUCT
)
)
...
...
@@ -901,7 +900,7 @@ void SCH_SCREEN::addConnectedItemsToBlock( const wxPoint& position )
if
(
addinlist
)
{
picker
.
m_PickerFlags
=
item
->
GetFlags
(
);
picker
.
SetFlags
(
item
->
GetFlags
()
);
m_BlockLocate
.
m_ItemsSelection
.
PushItem
(
picker
);
}
}
...
...
@@ -922,7 +921,6 @@ int SCH_SCREEN::UpdatePickList()
if
(
item
->
HitTest
(
area
)
)
{
picker
.
SetItem
(
item
);
picker
.
SetItemType
(
item
->
Type
()
);
m_BlockLocate
.
PushItem
(
picker
);
}
}
...
...
eeschema/schematic_undo_redo.cpp
View file @
08ef7417
...
...
@@ -121,25 +121,19 @@ void SCH_EDIT_FRAME::SaveCopyInUndoList( SCH_ITEM* aItem,
if
(
aItem
==
NULL
&&
(
aCommandType
!=
UR_WIRE_IMAGE
)
)
return
;
SCH_ITEM
*
CopyOfItem
;
PICKED_ITEMS_LIST
*
commandToUndo
=
new
PICKED_ITEMS_LIST
();
commandToUndo
->
m_TransformPoint
=
aTransformPoint
;
ITEM_PICKER
itemWrapper
(
aItem
,
aCommandType
);
ITEM_PICKER
itemWrapper
(
aItem
,
aCommandType
);
if
(
aItem
)
{
itemWrapper
.
m_PickedItemType
=
aItem
->
Type
();
itemWrapper
.
m_PickerFlags
=
aItem
->
GetFlags
();
}
itemWrapper
.
SetFlags
(
aItem
->
GetFlags
()
);
switch
(
aCommandType
)
{
case
UR_CHANGED
:
/* Create a copy of item */
CopyOfItem
=
DuplicateStruct
(
aItem
,
true
);
itemWrapper
.
m_Link
=
CopyOfItem
;
if
(
CopyOfItem
)
commandToUndo
->
PushItem
(
itemWrapper
);
itemWrapper
.
SetLink
(
DuplicateStruct
(
aItem
,
true
)
);
commandToUndo
->
PushItem
(
itemWrapper
);
break
;
case
UR_NEW
:
...
...
include/class_undoredo_container.h
View file @
08ef7417
...
...
@@ -80,18 +80,16 @@ enum UNDO_REDO_T {
class
ITEM_PICKER
{
friend
class
PICKED_ITEMS_LIST
;
public
:
UNDO_REDO_T
m_
U
ndoRedoStatus
;
/* type of operation to undo/redo for this item */
EDA_ITEM
*
m_
P
ickedItem
;
/* Pointer on the schematic or board item that is concerned
private
:
int
m_pickerFlags
;
/* a copy of m_Flags member. useful in mode/drag
* undo/redo commands */
UNDO_REDO_T
m_
u
ndoRedoStatus
;
/* type of operation to undo/redo for this item */
EDA_ITEM
*
m_
p
ickedItem
;
/* Pointer on the schematic or board item that is concerned
* (picked), or in undo redo commands, the copy of an
* edited item. */
KICAD_T
m_
P
ickedItemType
;
/* type of schematic or board item that is concerned */
KICAD_T
m_
p
ickedItemType
;
/* type of schematic or board item that is concerned */
int
m_PickerFlags
;
/* a copy of m_Flags member. useful in mode/drag
* undo/redo commands */
EDA_ITEM
*
m_Link
;
/* Pointer on an other item. Used in undo redo command
EDA_ITEM
*
m_link
;
/* Pointer on an other item. Used in undo redo command
* used when a duplicate exists i.e. when an item is
* modified, and the copy of initial item exists (the
* duplicate) m_Item points the duplicate (i.e the old
...
...
@@ -101,19 +99,27 @@ public:
public
:
ITEM_PICKER
(
EDA_ITEM
*
aItem
=
NULL
,
UNDO_REDO_T
aUndoRedoStatus
=
UR_UNSPECIFIED
);
EDA_ITEM
*
GetItem
()
const
{
return
m_PickedItem
;
}
EDA_ITEM
*
GetItem
()
const
{
return
m_pickedItem
;
}
void
SetItem
(
EDA_ITEM
*
aItem
)
{
m_pickedItem
=
aItem
;
m_pickedItemType
=
aItem
?
aItem
->
Type
()
:
TYPE_NOT_INIT
;
}
KICAD_T
GetItemType
()
const
{
return
m_pickedItemType
;
}
void
Set
Item
(
EDA_ITEM
*
aItem
)
{
m_PickedItem
=
aItem
;
}
void
Set
Status
(
UNDO_REDO_T
aStatus
)
{
m_undoRedoStatus
=
aStatus
;
}
KICAD_T
GetItemType
()
const
{
return
m_PickedItemType
;
}
UNDO_REDO_T
GetStatus
()
{
return
m_undoRedoStatus
;
}
void
Set
Status
(
UNDO_REDO_T
aStatus
)
{
m_UndoRedoStatus
=
aStatu
s
;
}
void
Set
Flags
(
int
aFlags
)
{
m_pickerFlags
=
aFlag
s
;
}
void
SetItemType
(
KICAD_T
aType
)
{
m_PickedItemType
=
aType
;
}
int
GetFlags
()
{
return
m_pickerFlags
;
}
void
SetLink
(
EDA_ITEM
*
aItem
)
{
m_
L
ink
=
aItem
;
}
void
SetLink
(
EDA_ITEM
*
aItem
)
{
m_
l
ink
=
aItem
;
}
EDA_ITEM
*
GetLink
()
const
{
return
m_
L
ink
;
}
EDA_ITEM
*
GetLink
()
const
{
return
m_
l
ink
;
}
};
...
...
pcbnew/automove.cpp
View file @
08ef7417
...
...
@@ -264,8 +264,8 @@ void PCB_EDIT_FRAME::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb )
}
// Undo: add copy of old Module to undo
picker
.
m_Link
=
Module
->
Clone
(
);
picker
.
m_PickedItemType
=
Module
->
Type
(
);
picker
.
SetItem
(
Module
);
picker
.
SetLink
(
Module
->
Clone
()
);
if
(
current
.
x
>
(
Xsize_allowed
+
start
.
x
)
)
{
...
...
@@ -282,7 +282,6 @@ void PCB_EDIT_FRAME::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb )
PlaceModule
(
Module
,
NULL
,
true
);
// Undo: add new Module to undo
picker
.
m_PickedItem
=
Module
;
newList
.
PushItem
(
picker
);
current
.
x
+=
Module
->
m_BoundaryBox
.
GetWidth
()
+
pas_grille
;
...
...
pcbnew/autoplac.cpp
View file @
08ef7417
...
...
@@ -181,8 +181,7 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC )
if
(
ThisModule
==
Module
)
{
// Module will be placed, add to undo.
picker
.
m_PickedItem
=
ThisModule
;
picker
.
m_PickedItemType
=
ThisModule
->
Type
();
picker
.
SetItem
(
ThisModule
);
newList
.
PushItem
(
picker
);
Module
->
m_ModuleStatus
|=
MODULE_to_PLACE
;
...
...
@@ -199,8 +198,7 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC )
if
(
!
bbbox
.
Contains
(
Module
->
m_Pos
)
)
{
// Module will be placed, add to undo.
picker
.
m_PickedItem
=
Module
;
picker
.
m_PickedItemType
=
Module
->
Type
();
picker
.
SetItem
(
Module
);
newList
.
PushItem
(
picker
);
Module
->
m_ModuleStatus
|=
MODULE_to_PLACE
;
...
...
@@ -215,8 +213,7 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC )
break
;
// Module will be placed, add to undo.
picker
.
m_PickedItem
=
Module
;
picker
.
m_PickedItemType
=
Module
->
Type
();
picker
.
SetItem
(
Module
);
newList
.
PushItem
(
picker
);
Module
->
m_ModuleStatus
|=
MODULE_to_PLACE
;
...
...
@@ -232,8 +229,7 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC )
if
(
!
(
Module
->
m_ModuleStatus
&
MODULE_is_PLACED
)
)
{
// Module will be placed, add to undo.
picker
.
m_PickedItem
=
Module
;
picker
.
m_PickedItemType
=
Module
->
Type
();
picker
.
SetItem
(
Module
);
newList
.
PushItem
(
picker
);
Module
->
m_ModuleStatus
|=
MODULE_to_PLACE
;
...
...
pcbnew/block.cpp
View file @
08ef7417
...
...
@@ -398,8 +398,7 @@ void PCB_EDIT_FRAME::Block_SelectItems()
{
if
(
blockIncludeItemsOnInvisibleLayers
||
m_Pcb
->
IsModuleLayerVisible
(
layer
)
)
{
picker
.
m_PickedItem
=
module
;
picker
.
m_PickedItemType
=
module
->
Type
();
picker
.
SetItem
(
module
);
itemsList
->
PushItem
(
picker
);
}
}
...
...
@@ -416,8 +415,7 @@ void PCB_EDIT_FRAME::Block_SelectItems()
if
(
blockIncludeItemsOnInvisibleLayers
||
m_Pcb
->
IsLayerVisible
(
pt_segm
->
GetLayer
()
)
)
{
picker
.
m_PickedItem
=
pt_segm
;
picker
.
m_PickedItemType
=
pt_segm
->
Type
();
picker
.
SetItem
(
pt_segm
);
itemsList
->
PushItem
(
picker
);
}
}
...
...
@@ -486,8 +484,7 @@ void PCB_EDIT_FRAME::Block_SelectItems()
if
(
select_me
)
{
picker
.
m_PickedItem
=
PtStruct
;
picker
.
m_PickedItemType
=
PtStruct
->
Type
();
picker
.
SetItem
(
PtStruct
);
itemsList
->
PushItem
(
picker
);
}
}
...
...
@@ -505,8 +502,7 @@ void PCB_EDIT_FRAME::Block_SelectItems()
||
m_Pcb
->
IsLayerVisible
(
area
->
GetLayer
()
)
)
{
BOARD_ITEM
*
zone_c
=
(
BOARD_ITEM
*
)
area
;
picker
.
m_PickedItem
=
zone_c
;
picker
.
m_PickedItemType
=
zone_c
->
Type
();
picker
.
SetItem
(
zone_c
);
itemsList
->
PushItem
(
picker
);
}
}
...
...
@@ -854,8 +850,7 @@ void PCB_EDIT_FRAME::Block_Duplicate()
if
(
newitem
)
{
newitem
->
Move
(
MoveVector
);
picker
.
m_PickedItem
=
newitem
;
picker
.
m_PickedItemType
=
newitem
->
Type
();
picker
.
SetItem
(
newitem
);
newList
.
PushItem
(
picker
);
}
}
...
...
pcbnew/board_undo_redo.cpp
View file @
08ef7417
...
...
@@ -312,17 +312,13 @@ void PCB_EDIT_FRAME::SaveCopyInUndoList( BOARD_ITEM* aItem,
commandToUndo
->
m_TransformPoint
=
aTransformPoint
;
ITEM_PICKER
itemWrapper
(
aItem
,
aCommandType
);
itemWrapper
.
m_PickedItemType
=
aItem
->
Type
();
switch
(
aCommandType
)
{
case
UR_CHANGED
:
/* Create a copy of schematic */
if
(
itemWrapper
.
m_Link
==
NULL
)
// When not null, the copy is already done
itemWrapper
.
m_Link
=
aItem
->
Clone
();;
if
(
itemWrapper
.
m_Link
)
commandToUndo
->
PushItem
(
itemWrapper
);
case
UR_CHANGED
:
// Create a copy of item
if
(
itemWrapper
.
GetLink
()
==
NULL
)
// When not null, the copy is already done
itemWrapper
.
SetLink
(
aItem
->
Clone
()
);
commandToUndo
->
PushItem
(
itemWrapper
);
break
;
case
UR_NEW
:
...
...
@@ -466,10 +462,10 @@ void PCB_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bool aRed
* - if a call to SaveCopyInUndoList was forgotten in Pcbnew
* - in zones outlines, when a change in one zone merges this zone with an other
* This test avoids a Pcbnew crash
*
the test is made only to avoid crashes, so it is not needed for deleted or new
items
*
Obviouly, this test is not made for deleted
items
*/
UNDO_REDO_T
status
=
aList
->
GetPickedItemStatus
(
ii
);
if
(
status
!=
UR_DELETED
&&
status
!=
UR_NEW
)
if
(
status
!=
UR_DELETED
)
{
if
(
build_item_list
)
// Build list of existing items, for integrity test
...
...
pcbnew/deltrack.cpp
View file @
08ef7417
...
...
@@ -177,8 +177,7 @@ void PCB_EDIT_FRAME::Delete_net( wxDC* DC, TRACK* aTrack )
// redraw the area where the track was
m_canvas
->
RefreshDrawingRect
(
segm
->
GetBoundingBox
()
);
picker
.
m_PickedItem
=
segm
;
picker
.
m_PickedItemType
=
segm
->
Type
();
picker
.
SetItem
(
segm
);
itemsList
.
PushItem
(
picker
);
}
...
...
@@ -223,8 +222,7 @@ void PCB_EDIT_FRAME::Remove_One_Track( wxDC* DC, TRACK* pt_segm )
// redraw the area where the track was
m_canvas
->
RefreshDrawingRect
(
tracksegment
->
GetBoundingBox
()
);
picker
.
m_PickedItem
=
tracksegment
;
picker
.
m_PickedItemType
=
tracksegment
->
Type
();
picker
.
SetItem
(
tracksegment
);
itemsList
.
PushItem
(
picker
);
}
...
...
pcbnew/dialogs/dialog_global_deletion.cpp
View file @
08ef7417
...
...
@@ -88,7 +88,7 @@ void DIALOG_GLOBAL_DELETION::AcceptPcbDelete( )
while
(
pcb
->
GetAreaCount
()
)
{
item
=
pcb
->
GetArea
(
0
);
itemPicker
.
m_PickedItem
=
item
;
itemPicker
.
SetItem
(
item
)
;
pickersList
.
PushItem
(
itemPicker
);
pcb
->
Remove
(
item
);
}
...
...
@@ -118,7 +118,7 @@ void DIALOG_GLOBAL_DELETION::AcceptPcbDelete( )
if
(
removeme
)
{
itemPicker
.
m_PickedItem
=
item
;
itemPicker
.
SetItem
(
item
)
;
pickersList
.
PushItem
(
itemPicker
);
item
->
UnLink
();
}
...
...
@@ -131,7 +131,7 @@ void DIALOG_GLOBAL_DELETION::AcceptPcbDelete( )
for
(
item
=
pcb
->
m_Modules
;
item
;
item
=
nextitem
)
{
nextitem
=
item
->
Next
();
itemPicker
.
m_PickedItem
=
item
;
itemPicker
.
SetItem
(
item
)
;
pickersList
.
PushItem
(
itemPicker
);
item
->
UnLink
();
}
...
...
@@ -165,7 +165,7 @@ void DIALOG_GLOBAL_DELETION::AcceptPcbDelete( )
if
(
(
track
->
ReturnMaskLayer
()
&
layers_filter
)
==
0
)
continue
;
itemPicker
.
m_PickedItem
=
track
;
itemPicker
.
SetItem
(
track
)
;
pickersList
.
PushItem
(
itemPicker
);
track
->
UnLink
();
gen_rastnest
=
true
;
...
...
pcbnew/edit_track_width.cpp
View file @
08ef7417
...
...
@@ -100,7 +100,7 @@ bool PCB_EDIT_FRAME::SetTrackSegmentWidth( TRACK* aTrackItem,
{
aTrackItem
->
m_Width
=
initial_width
;
ITEM_PICKER
picker
(
aTrackItem
,
UR_CHANGED
);
picker
.
m_Link
=
aTrackItem
->
Clone
(
);
picker
.
SetLink
(
aTrackItem
->
Clone
()
);
aItemsListPicker
->
PushItem
(
picker
);
aTrackItem
->
m_Width
=
new_width
;
...
...
pcbnew/editedge.cpp
View file @
08ef7417
...
...
@@ -173,7 +173,7 @@ void PCB_EDIT_FRAME::Delete_Drawings_All_Layer( int aLayer )
if
(
item
->
GetLayer
()
==
aLayer
)
{
item
->
UnLink
();
picker
.
m_PickedItem
=
item
;
picker
.
SetItem
(
item
)
;
pickList
.
PushItem
(
picker
);
}
...
...
pcbnew/edtxtmod.cpp
View file @
08ef7417
...
...
@@ -366,14 +366,12 @@ void PCB_BASE_FRAME::ResetModuleTextSizes( int aType, wxDC* aDC )
PICKED_ITEMS_LIST
undoItemList
;
unsigned
int
ii
;
itemWrapper
.
m_PickedItemType
=
PCB_MODULE_T
;
module
=
GetBoard
()
->
m_Modules
;
// Prepare undo list
while
(
module
)
{
itemWrapper
.
m_PickedItem
=
module
;
itemWrapper
.
SetItem
(
module
)
;
switch
(
aType
)
{
...
...
@@ -388,7 +386,8 @@ void PCB_BASE_FRAME::ResetModuleTextSizes( int aType, wxDC* aDC )
case
TEXT_is_VALUE
:
item
=
module
->
m_Value
;
if
(
item
->
GetSize
()
!=
GetDesignSettings
().
m_ModuleTextSize
||
item
->
GetThickness
()
!=
GetDesignSettings
().
m_ModuleTextWidth
)
if
(
item
->
GetSize
()
!=
GetDesignSettings
().
m_ModuleTextSize
||
item
->
GetThickness
()
!=
GetDesignSettings
().
m_ModuleTextWidth
)
undoItemList
.
PushItem
(
itemWrapper
);
break
;
...
...
pcbnew/globaleditpad.cpp
View file @
08ef7417
...
...
@@ -265,7 +265,6 @@ void PCB_BASE_FRAME::GlobalChange_PadSettings( D_PAD* aPad,
if
(
saveMe
)
{
ITEM_PICKER
itemWrapper
(
Module
,
UR_CHANGED
);
itemWrapper
.
m_PickedItemType
=
Module
->
Type
();
itemsList
.
PushItem
(
itemWrapper
);
}
}
...
...
pcbnew/modedit_undo_redo.cpp
View file @
08ef7417
...
...
@@ -63,7 +63,7 @@ void FOOTPRINT_EDIT_FRAME::GetComponentFromRedoList( wxCommandEvent& event )
// Retrieve last module state from undo list
lastcmd
=
GetScreen
()
->
PopCommandFromRedoList
();
wrapper
=
lastcmd
->
PopItem
();
module
=
(
MODULE
*
)
wrapper
.
m_PickedItem
;
module
=
(
MODULE
*
)
wrapper
.
GetItem
()
;
delete
lastcmd
;
if
(
module
)
...
...
@@ -91,7 +91,7 @@ void FOOTPRINT_EDIT_FRAME::GetComponentFromUndoList( wxCommandEvent& event )
// Retrieve last module state from undo list
lastcmd
=
GetScreen
()
->
PopCommandFromUndoList
();
wrapper
=
lastcmd
->
PopItem
();
module
=
(
MODULE
*
)
wrapper
.
m_PickedItem
;
module
=
(
MODULE
*
)
wrapper
.
GetItem
()
;
delete
lastcmd
;
if
(
module
)
...
...
pcbnew/modules.cpp
View file @
08ef7417
...
...
@@ -121,9 +121,9 @@ void PCB_EDIT_FRAME::StartMove_Module( MODULE* module, wxDC* DC )
for
(
unsigned
ii
=
0
;
ii
<
g_DragSegmentList
.
size
();
ii
++
)
{
TRACK
*
segm
=
g_DragSegmentList
[
ii
].
m_Segm
;
itemWrapper
.
m_PickedItem
=
segm
;
itemWrapper
.
m_Link
=
segm
->
Clone
(
);
itemWrapper
.
m_Link
->
SetState
(
IN_EDIT
,
OFF
);
itemWrapper
.
SetItem
(
segm
)
;
itemWrapper
.
SetLink
(
segm
->
Clone
()
);
itemWrapper
.
GetLink
()
->
SetState
(
IN_EDIT
,
OFF
);
s_PickedList
.
PushItem
(
itemWrapper
);
}
}
...
...
@@ -376,7 +376,7 @@ void PCB_BASE_FRAME::PlaceModule( MODULE* aModule, wxDC* aDC, bool aDoNotRecreat
else
if
(
aModule
->
IsMoving
()
)
{
ITEM_PICKER
picker
(
aModule
,
UR_CHANGED
);
picker
.
m_Link
=
s_ModuleInitialCopy
;
picker
.
SetLink
(
s_ModuleInitialCopy
)
;
s_PickedList
.
PushItem
(
picker
);
s_ModuleInitialCopy
=
NULL
;
// the picker is now owner of s_ModuleInitialCopy.
}
...
...
pcbnew/move-drag_pads.cpp
View file @
08ef7417
...
...
@@ -320,7 +320,7 @@ void PCB_BASE_FRAME::PlacePad( D_PAD* Pad, wxDC* DC )
if
(
g_DragSegmentList
[
ii
].
m_Pad_End
)
Track
->
m_End
=
Pad_OldPos
;
picker
.
m_PickedItem
=
Track
;
picker
.
SetItem
(
Track
)
;
pickList
.
PushItem
(
picker
);
}
...
...
@@ -333,7 +333,7 @@ void PCB_BASE_FRAME::PlacePad( D_PAD* Pad, wxDC* DC )
SaveCopyInUndoList
(
Module
,
UR_CHANGED
);
else
{
picker
.
m_PickedItem
=
Module
;
picker
.
SetItem
(
Module
)
;
pickList
.
PushItem
(
picker
);
SaveCopyInUndoList
(
pickList
,
UR_CHANGED
);
}
...
...
pcbnew/move_or_drag_track.cpp
View file @
08ef7417
...
...
@@ -758,16 +758,16 @@ void PCB_EDIT_FRAME::StartMoveOneNodeOrSegment( TRACK* aTrack, wxDC* aDC, int aC
// Prepare the Undo command
ITEM_PICKER
picker
(
aTrack
,
UR_CHANGED
);
picker
.
m_Link
=
aTrack
->
Clone
(
);
picker
.
SetLink
(
aTrack
->
Clone
()
);
s_ItemsListPicker
.
PushItem
(
picker
);
for
(
unsigned
ii
=
0
;
ii
<
g_DragSegmentList
.
size
();
ii
++
)
{
TRACK
*
draggedtrack
=
g_DragSegmentList
[
ii
].
m_Segm
;
picker
.
m_PickedItem
=
draggedtrack
;
picker
.
m_Link
=
draggedtrack
->
Clone
(
);
picker
.
SetItem
(
draggedtrack
)
;
picker
.
SetLink
(
draggedtrack
->
Clone
()
);
s_ItemsListPicker
.
PushItem
(
picker
);
draggedtrack
=
(
TRACK
*
)
picker
.
m_Link
;
draggedtrack
=
(
TRACK
*
)
picker
.
GetLink
()
;
draggedtrack
->
SetStatus
(
0
);
draggedtrack
->
ClearFlags
();
}
...
...
@@ -979,10 +979,10 @@ void PCB_EDIT_FRAME::Start_DragTrackSegmentAndKeepSlope( TRACK* track, wxDC* DC
for
(
unsigned
ii
=
0
;
ii
<
g_DragSegmentList
.
size
();
ii
++
)
{
TRACK
*
draggedtrack
=
g_DragSegmentList
[
ii
].
m_Segm
;
picker
.
m_PickedItem
=
draggedtrack
;
picker
.
m_Link
=
draggedtrack
->
Clone
(
);
picker
.
SetItem
(
draggedtrack
)
;
picker
.
SetLink
(
draggedtrack
->
Clone
()
);
s_ItemsListPicker
.
PushItem
(
picker
);
draggedtrack
=
(
TRACK
*
)
picker
.
m_Link
;
draggedtrack
=
(
TRACK
*
)
picker
.
GetLink
()
;
draggedtrack
->
SetStatus
(
0
);
draggedtrack
->
ClearFlags
();
}
...
...
pcbnew/pcbplot.cpp
View file @
08ef7417
...
...
@@ -549,11 +549,12 @@ void DIALOG_PLOT::applyPlotSettings()
{
msg
=
ReturnStringFromValue
(
g_UserUnit
,
m_PSWidthAdjust
,
PCB_INTERNAL_UNIT
);
m_PSFineAdjustWidthOpt
->
SetValue
(
msg
);
msg
.
Printf
(
_
(
"Width correction constrained!
\n
The reasonable width correction value must be in a range of [%+f; %+f]"
),
msg
.
Printf
(
_
(
"Width correction constrained!
\n
"
"The reasonable width correction value must be in a range of
\n
"
" [%+f; %+f] (%s) for current design rules!
\n
"
),
To_User_Unit
(
g_UserUnit
,
m_WidthAdjustMinValue
,
PCB_INTERNAL_UNIT
),
To_User_Unit
(
g_UserUnit
,
m_WidthAdjustMaxValue
,
PCB_INTERNAL_UNIT
)
);
msg
+=
(
g_UserUnit
==
INCHES
)
?
_
(
" (
\"
)"
)
:
_
(
" (mm)"
);
msg
+=
_
(
" for current design rules!
\n
"
);
To_User_Unit
(
g_UserUnit
,
m_WidthAdjustMaxValue
,
PCB_INTERNAL_UNIT
),
(
g_UserUnit
==
INCHES
)
?
wxT
(
"
\"
"
)
:
wxT
(
"mm"
)
);
m_messagesBox
->
AppendText
(
msg
);
}
...
...
pcbnew/zones_functions_for_undo_redo.cpp
View file @
08ef7417
...
...
@@ -137,9 +137,8 @@ int SaveCopyOfZones( PICKED_ITEMS_LIST& aPickList, BOARD* aPcb, int aNetCode, in
ZONE_CONTAINER
*
zoneDup
=
new
ZONE_CONTAINER
(
*
zone
);
zoneDup
->
SetParent
(
aPcb
);
ITEM_PICKER
picker
(
zone
,
UR_CHANGED
);
picker
.
m_Link
=
zoneDup
;
picker
.
m_PickedItemType
=
zone
->
Type
();
ITEM_PICKER
picker
(
zone
,
UR_CHANGED
);
picker
.
SetLink
(
zoneDup
);
aPickList
.
PushItem
(
picker
);
copyCount
++
;
}
...
...
pcbnew/zones_test_and_combine_areas.cpp
View file @
08ef7417
...
...
@@ -44,7 +44,6 @@ ZONE_CONTAINER* BOARD::AddArea( PICKED_ITEMS_LIST* aNewZonesList, int aNetcode,
if
(
aNewZonesList
)
{
ITEM_PICKER
picker
(
new_area
,
UR_NEW
);
picker
.
m_PickedItemType
=
new_area
->
Type
();
aNewZonesList
->
PushItem
(
picker
);
}
return
new_area
;
...
...
@@ -66,7 +65,6 @@ void BOARD::RemoveArea( PICKED_ITEMS_LIST* aDeletedList, ZONE_CONTAINER* area_to
if
(
aDeletedList
)
{
ITEM_PICKER
picker
(
area_to_remove
,
UR_DELETED
);
picker
.
m_PickedItemType
=
area_to_remove
->
Type
();
aDeletedList
->
PushItem
(
picker
);
Remove
(
area_to_remove
);
// remove from zone list, but does not delete it
}
...
...
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