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
9b77f2a4
Commit
9b77f2a4
authored
Nov 13, 2010
by
jean-pierre charras
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Formatting, code cleaning and fix erroneous or inconsistent comments in block functions
parent
bc9d5217
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
450 additions
and
442 deletions
+450
-442
drawframe.cpp
common/drawframe.cpp
+2
-2
block.cpp
eeschema/block.cpp
+36
-34
block_libedit.cpp
eeschema/block_libedit.cpp
+6
-6
libeditframe.h
eeschema/libeditframe.h
+78
-76
block.cpp
gerbview/block.cpp
+25
-21
wxGerberFrame.h
gerbview/wxGerberFrame.h
+2
-2
wxEeschemaStruct.h
include/wxEeschemaStruct.h
+31
-3
wxPcbStruct.h
include/wxPcbStruct.h
+30
-3
wxstruct.h
include/wxstruct.h
+32
-5
block.cpp
pcbnew/block.cpp
+158
-245
block_module_editor.cpp
pcbnew/block_module_editor.cpp
+48
-43
module_editor_frame.h
pcbnew/module_editor_frame.h
+2
-2
No files found.
common/drawframe.cpp
View file @
9b77f2a4
...
...
@@ -462,9 +462,9 @@ void WinEDA_DrawFrame::HandleBlockPlace( wxDC* DC )
}
int
WinEDA_DrawFrame
::
HandleBlockEnd
(
wxDC
*
DC
)
bool
WinEDA_DrawFrame
::
HandleBlockEnd
(
wxDC
*
DC
)
{
return
0
;
return
false
;
}
...
...
eeschema/block.cpp
View file @
9b77f2a4
...
...
@@ -101,19 +101,19 @@ void WinEDA_SchematicFrame::InitBlockPasteInfos()
*/
void
WinEDA_SchematicFrame
::
HandleBlockPlace
(
wxDC
*
DC
)
{
bool
err
=
FALSE
;
bool
err
=
false
;
BLOCK_SELECTOR
*
block
=
&
GetScreen
()
->
m_BlockLocate
;
if
(
DrawPanel
->
ManageCurseur
==
NULL
)
{
err
=
TRUE
;
err
=
true
;
DisplayError
(
this
,
wxT
(
"HandleBlockPLace() : ManageCurseur = NULL"
)
);
}
if
(
block
->
GetCount
()
==
0
)
{
wxString
msg
;
err
=
TRUE
;
err
=
true
;
msg
.
Printf
(
wxT
(
"HandleBlockPLace() error : no items to place (cmd %d, state %d)"
),
block
->
m_Command
,
block
->
m_State
);
DisplayError
(
this
,
msg
);
...
...
@@ -124,7 +124,7 @@ void WinEDA_SchematicFrame::HandleBlockPlace( wxDC* DC )
switch
(
block
->
m_Command
)
{
case
BLOCK_IDLE
:
err
=
TRUE
;
err
=
true
;
break
;
case
BLOCK_ROTATE
:
...
...
@@ -133,7 +133,7 @@ void WinEDA_SchematicFrame::HandleBlockPlace( wxDC* DC )
case
BLOCK_DRAG
:
/* Drag */
case
BLOCK_MOVE
:
/* Move */
if
(
DrawPanel
->
ManageCurseur
)
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
SaveCopyInUndoList
(
block
->
m_ItemsSelection
,
UR_MOVED
,
block
->
m_MoveVector
);
MoveItemsInList
(
block
->
m_ItemsSelection
,
block
->
m_MoveVector
);
...
...
@@ -143,7 +143,7 @@ void WinEDA_SchematicFrame::HandleBlockPlace( wxDC* DC )
case
BLOCK_COPY
:
/* Copy */
case
BLOCK_PRESELECT_MOVE
:
/* Move with preselection list*/
if
(
DrawPanel
->
ManageCurseur
)
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
DuplicateItemsInList
(
GetScreen
(),
block
->
m_ItemsSelection
,
block
->
m_MoveVector
);
...
...
@@ -155,7 +155,7 @@ void WinEDA_SchematicFrame::HandleBlockPlace( wxDC* DC )
case
BLOCK_PASTE
:
if
(
DrawPanel
->
ManageCurseur
)
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
PasteListOfItems
(
DC
);
block
->
ClearItemsList
();
break
;
...
...
@@ -194,16 +194,20 @@ void WinEDA_SchematicFrame::HandleBlockPlace( wxDC* DC )
}
/* Manage end block command
* Returns:
* 0 if no features selected
* 1 otherwise
* -1 If control ended and components selection (block delete, block save)
/**
* Function HandleBlockEnd( )
* Handle the "end" of a block command,
* i.e. is called at the end of the definition of the area of a block.
* depending on the current block command, this command is executed
* or parameters are initialized to prepare a call to HandleBlockPlace
* in GetScreen()->m_BlockLocate
* @return false if no item selected, or command finished,
* true if some items found and HandleBlockPlace must be called later
*/
int
WinEDA_SchematicFrame
::
HandleBlockEnd
(
wxDC
*
DC
)
bool
WinEDA_SchematicFrame
::
HandleBlockEnd
(
wxDC
*
DC
)
{
int
ii
=
0
;
bool
zoom_command
=
FALSE
;
bool
nextcmd
=
false
;
bool
zoom_command
=
false
;
BLOCK_SELECTOR
*
block
=
&
GetScreen
()
->
m_BlockLocate
;
if
(
block
->
GetCount
()
)
...
...
@@ -241,16 +245,16 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC )
case
BLOCK_PRESELECT_MOVE
:
/* Move with preselection list*/
if
(
block
->
GetCount
()
)
{
ii
=
1
;
nextcmd
=
true
;
CollectStructsToDrag
(
GetScreen
()
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
DrawPanel
->
ManageCurseur
=
DrawMovingBlockOutlines
;
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
block
->
m_State
=
STATE_BLOCK_MOVE
;
}
else
{
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
DrawPanel
->
ManageCurseur
=
NULL
;
DrawPanel
->
ForceCloseManageCurseur
=
NULL
;
}
...
...
@@ -258,10 +262,9 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC )
case
BLOCK_DELETE
:
/* Delete */
PickItemsInBlock
(
GetScreen
()
->
m_BlockLocate
,
GetScreen
()
);
DrawAndSizingBlockOutlines
(
DrawPanel
,
DC
,
FALSE
);
DrawAndSizingBlockOutlines
(
DrawPanel
,
DC
,
false
);
if
(
block
->
GetCount
()
)
{
ii
=
-
1
;
DeleteItemsInList
(
DrawPanel
,
block
->
m_ItemsSelection
);
OnModify
();
}
...
...
@@ -272,13 +275,12 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC )
case
BLOCK_SAVE
:
/* Save */
PickItemsInBlock
(
GetScreen
()
->
m_BlockLocate
,
GetScreen
()
);
DrawAndSizingBlockOutlines
(
DrawPanel
,
DC
,
FALSE
);
DrawAndSizingBlockOutlines
(
DrawPanel
,
DC
,
false
);
if
(
block
->
GetCount
()
)
{
wxPoint
move_vector
=
-
GetScreen
()
->
m_BlockLocate
.
m_BlockLastCursorPosition
;
SaveStructListForPaste
(
block
->
m_ItemsSelection
);
MoveItemsInList
(
g_BlockSaveDataList
.
m_ItemsSelection
,
move_vector
);
ii
=
-
1
;
}
block
->
ClearItemsList
();
break
;
...
...
@@ -292,7 +294,7 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC )
case
BLOCK_ZOOM
:
/* Window Zoom */
zoom_command
=
TRUE
;
zoom_command
=
true
;
break
;
case
BLOCK_SELECT_ITEMS_ONLY
:
/* Not used */
...
...
@@ -305,7 +307,7 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC )
GetScreen
()
->
ClearDrawingState
();
}
if
(
ii
<=
0
)
if
(
!
nextcmd
)
{
block
->
m_Flags
=
0
;
block
->
m_State
=
STATE_NO_BLOCK
;
...
...
@@ -319,7 +321,7 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC )
if
(
zoom_command
)
Window_Zoom
(
GetScreen
()
->
m_BlockLocate
);
return
ii
;
return
nextcmd
;
}
...
...
@@ -359,7 +361,7 @@ void WinEDA_SchematicFrame::HandleBlockEndByPopUp( int Command, wxDC* DC )
case
BLOCK_DRAG
:
/* move to Drag */
if
(
DrawPanel
->
ManageCurseur
)
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
// Clear list of items to move, and rebuild it with items to drag:
block
->
ClearItemsList
();
...
...
@@ -371,14 +373,14 @@ void WinEDA_SchematicFrame::HandleBlockEndByPopUp( int Command, wxDC* DC )
blockCmdFinished
=
false
;
CollectStructsToDrag
(
(
SCH_SCREEN
*
)
GetScreen
()
);
if
(
DrawPanel
->
ManageCurseur
)
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
block
->
m_State
=
STATE_BLOCK_MOVE
;
}
break
;
case
BLOCK_DELETE
:
/* move to Delete */
if
(
DrawPanel
->
ManageCurseur
)
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
if
(
block
->
GetCount
()
)
{
DeleteItemsInList
(
DrawPanel
,
block
->
m_ItemsSelection
);
...
...
@@ -390,7 +392,7 @@ void WinEDA_SchematicFrame::HandleBlockEndByPopUp( int Command, wxDC* DC )
case
BLOCK_SAVE
:
/* Save list in paste buffer*/
if
(
DrawPanel
->
ManageCurseur
)
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
if
(
block
->
GetCount
()
)
{
wxPoint
move_vector
=
-
GetScreen
()
->
m_BlockLocate
.
m_BlockLastCursorPosition
;
...
...
@@ -408,7 +410,7 @@ void WinEDA_SchematicFrame::HandleBlockEndByPopUp( int Command, wxDC* DC )
case
BLOCK_ROTATE
:
if
(
DrawPanel
->
ManageCurseur
)
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
if
(
block
->
GetCount
()
)
{
// blockCmdFinished = true;
...
...
@@ -427,7 +429,7 @@ void WinEDA_SchematicFrame::HandleBlockEndByPopUp( int Command, wxDC* DC )
case
BLOCK_MIRROR_X
:
if
(
DrawPanel
->
ManageCurseur
)
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
if
(
block
->
GetCount
()
)
{
// blockCmdFinished = true;
...
...
@@ -446,7 +448,7 @@ void WinEDA_SchematicFrame::HandleBlockEndByPopUp( int Command, wxDC* DC )
case
BLOCK_MIRROR_Y
:
if
(
DrawPanel
->
ManageCurseur
)
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
if
(
block
->
GetCount
()
)
{
// blockCmdFinished = true;
...
...
eeschema/block_libedit.cpp
View file @
9b77f2a4
...
...
@@ -69,10 +69,10 @@ int WinEDA_LibeditFrame::ReturnBlockCommand( int key )
* 1 if HandleBlockPlace must follow (items found, and a block place
* command must follow)
*/
int
WinEDA_LibeditFrame
::
HandleBlockEnd
(
wxDC
*
DC
)
bool
WinEDA_LibeditFrame
::
HandleBlockEnd
(
wxDC
*
DC
)
{
int
ItemCount
=
0
;
int
MustDoPlace
=
0
;
int
nextCmd
=
false
;
wxPoint
pt
;
if
(
GetScreen
()
->
m_BlockLocate
.
GetCount
()
)
...
...
@@ -104,7 +104,7 @@ int WinEDA_LibeditFrame::HandleBlockEnd( wxDC* DC )
g_EditPinByPinIsOn
);
if
(
ItemCount
)
{
MustDoPlace
=
1
;
nextCmd
=
true
;
if
(
DrawPanel
->
ManageCurseur
!=
NULL
)
{
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
...
...
@@ -117,7 +117,7 @@ int WinEDA_LibeditFrame::HandleBlockEnd( wxDC* DC )
break
;
case
BLOCK_PRESELECT_MOVE
:
/* Move with preselection list*/
MustDoPlace
=
1
;
nextCmd
=
true
;
DrawPanel
->
ManageCurseur
=
DrawMovingBlockOutlines
;
GetScreen
()
->
m_BlockLocate
.
m_State
=
STATE_BLOCK_MOVE
;
break
;
...
...
@@ -165,7 +165,7 @@ int WinEDA_LibeditFrame::HandleBlockEnd( wxDC* DC )
break
;
}
if
(
MustDoPlace
<=
0
)
if
(
!
nextCmd
)
{
if
(
GetScreen
()
->
m_BlockLocate
.
m_Command
!=
BLOCK_SELECT_ITEMS_ONLY
)
if
(
m_component
)
...
...
@@ -182,7 +182,7 @@ int WinEDA_LibeditFrame::HandleBlockEnd( wxDC* DC )
}
return
MustDoPlace
;
return
nextCmd
;
}
...
...
eeschema/libeditframe.h
View file @
9b77f2a4
...
...
@@ -122,16 +122,18 @@ public:
Close
(
false
);
}
/**
* Function OnModify
* Must be called after a schematic change
* in order to set the "modify" flag of the current screen
*/
void
OnModify
(
)
void
OnModify
()
{
GetScreen
()
->
SetModify
();
}
LIB_COMPONENT
*
GetComponent
(
void
)
{
return
m_component
;
}
CMP_LIBRARY
*
GetLibrary
(
void
)
{
return
m_library
;
}
...
...
@@ -252,9 +254,9 @@ private:
public
:
/* Block commands: */
int
ReturnBlockCommand
(
int
key
);
v
oid
HandleBlockPlace
(
wxDC
*
DC
);
int
HandleBlockEnd
(
wxDC
*
DC
);
virtual
int
ReturnBlockCommand
(
int
key
);
v
irtual
void
HandleBlockPlace
(
wxDC
*
DC
);
virtual
bool
HandleBlockEnd
(
wxDC
*
DC
);
void
PlacePin
(
wxDC
*
DC
);
void
GlobalSetPins
(
wxDC
*
DC
,
LIB_PIN
*
MasterPin
,
int
id
);
...
...
@@ -337,7 +339,7 @@ protected:
* @param aData = a pointer on an auxiliary data (not always used, NULL if not used)
*/
virtual
void
PrintPage
(
wxDC
*
aDC
,
bool
aPrint_Sheet_Ref
,
int
aPrintMask
,
bool
aPrintMirrorMode
,
void
*
aData
=
NULL
);
bool
aPrintMirrorMode
,
void
*
aData
=
NULL
);
/**
* Function SVG_Print_component
...
...
gerbview/block.cpp
View file @
9b77f2a4
...
...
@@ -88,11 +88,11 @@ int WinEDA_GerberFrame::ReturnBlockCommand( int key )
/* Routine to handle the BLOCK PLACE command */
void
WinEDA_GerberFrame
::
HandleBlockPlace
(
wxDC
*
DC
)
{
bool
err
=
FALSE
;
bool
err
=
false
;
if
(
DrawPanel
->
ManageCurseur
==
NULL
)
{
err
=
TRUE
;
err
=
true
;
DisplayError
(
this
,
wxT
(
"Error in HandleBlockPLace : ManageCurseur = NULL"
)
);
}
...
...
@@ -101,21 +101,21 @@ void WinEDA_GerberFrame::HandleBlockPlace( wxDC* DC )
switch
(
GetScreen
()
->
m_BlockLocate
.
m_Command
)
{
case
BLOCK_IDLE
:
err
=
TRUE
;
err
=
true
;
break
;
case
BLOCK_DRAG
:
/* Drag */
case
BLOCK_MOVE
:
/* Move */
case
BLOCK_PRESELECT_MOVE
:
/* Move with preselection list*/
if
(
DrawPanel
->
ManageCurseur
)
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
Block_Move
(
DC
);
GetScreen
()
->
m_BlockLocate
.
ClearItemsList
();
break
;
case
BLOCK_COPY
:
/* Copy */
if
(
DrawPanel
->
ManageCurseur
)
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
Block_Duplicate
(
DC
);
GetScreen
()
->
m_BlockLocate
.
ClearItemsList
();
break
;
...
...
@@ -152,16 +152,20 @@ void WinEDA_GerberFrame::HandleBlockPlace( wxDC* DC )
}
/* Routine management command END BLOCK
* Returns:
* 0 if no and selects compounds
* 1 otherwise
* -1 If order is completed and components found (block delete, block save)
/**
* Function HandleBlockEnd( )
* Handle the "end" of a block command,
* i.e. is called at the end of the definition of the area of a block.
* depending on the current block command, this command is executed
* or parameters are initialized to prepare a call to HandleBlockPlace
* in GetScreen()->m_BlockLocate
* @return false if no item selected, or command finished,
* true if some items found and HandleBlockPlace must be called later
*/
int
WinEDA_GerberFrame
::
HandleBlockEnd
(
wxDC
*
DC
)
bool
WinEDA_GerberFrame
::
HandleBlockEnd
(
wxDC
*
DC
)
{
int
endcommande
=
TRUE
;
bool
zoom_command
=
FALSE
;
bool
nextcmd
=
false
;
bool
zoom_command
=
false
;
if
(
DrawPanel
->
ManageCurseur
)
...
...
@@ -177,15 +181,15 @@ int WinEDA_GerberFrame::HandleBlockEnd( wxDC* DC )
case
BLOCK_COPY
:
/* Copy */
case
BLOCK_PRESELECT_MOVE
:
/* Move with preselection list */
GetScreen
()
->
m_BlockLocate
.
m_State
=
STATE_BLOCK_MOVE
;
endcommande
=
FALSE
;
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
nextcmd
=
true
;
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
DrawPanel
->
ManageCurseur
=
DrawMovingBlockOutlines
;
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
break
;
case
BLOCK_DELETE
:
/* Delete */
GetScreen
()
->
m_BlockLocate
.
m_State
=
STATE_BLOCK_STOP
;
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
Block_Delete
(
DC
);
break
;
...
...
@@ -197,7 +201,7 @@ int WinEDA_GerberFrame::HandleBlockEnd( wxDC* DC )
break
;
case
BLOCK_ZOOM
:
/* Window Zoom */
zoom_command
=
TRUE
;
zoom_command
=
true
;
break
;
case
BLOCK_ABORT
:
...
...
@@ -206,7 +210,7 @@ int WinEDA_GerberFrame::HandleBlockEnd( wxDC* DC )
break
;
}
if
(
endcommande
==
TRUE
)
if
(
!
nextcmd
)
{
GetScreen
()
->
m_BlockLocate
.
m_Flags
=
0
;
GetScreen
()
->
m_BlockLocate
.
m_State
=
STATE_NO_BLOCK
;
...
...
@@ -220,7 +224,7 @@ int WinEDA_GerberFrame::HandleBlockEnd( wxDC* DC )
if
(
zoom_command
)
Window_Zoom
(
GetScreen
()
->
m_BlockLocate
);
return
endcommande
;
return
nextcmd
;
}
...
...
@@ -325,7 +329,7 @@ void WinEDA_GerberFrame::Block_Move( wxDC* DC )
gerb_item
->
MoveAB
(
delta
);
}
DrawPanel
->
Refresh
(
TRUE
);
DrawPanel
->
Refresh
(
true
);
}
...
...
gerbview/wxGerberFrame.h
View file @
9b77f2a4
...
...
@@ -248,9 +248,9 @@ public:
void
InstallPcbGlobalDeleteFrame
(
const
wxPoint
&
pos
);
/* handlers for block commands */
int
ReturnBlockCommand
(
int
key
);
virtual
int
ReturnBlockCommand
(
int
key
);
virtual
void
HandleBlockPlace
(
wxDC
*
DC
);
virtual
int
HandleBlockEnd
(
wxDC
*
DC
);
virtual
bool
HandleBlockEnd
(
wxDC
*
DC
);
/* Block operations: */
/**
...
...
include/wxEeschemaStruct.h
View file @
9b77f2a4
...
...
@@ -581,12 +581,40 @@ public:
void
Key
(
wxDC
*
DC
,
int
hotkey
,
EDA_BaseStruct
*
DrawStruct
);
/* Block operations. */
int
ReturnBlockCommand
(
int
key
);
void
InitBlockPasteInfos
();
void
HandleBlockPlace
(
wxDC
*
DC
);
int
HandleBlockEnd
(
wxDC
*
DC
);
void
HandleBlockEndByPopUp
(
int
Command
,
wxDC
*
DC
);
/**
* Function ReturnBlockCommand
* Returns the block command internat code (BLOCK_MOVE, BLOCK_COPY...)
* corresponding to the keys pressed (ALT, SHIFT, SHIFT ALT ..) when
* block command is started by dragging the mouse.
* @param aKey = the key modifiers (Alt, Shift ...)
* @return the block command id (BLOCK_MOVE, BLOCK_COPY...)
*/
virtual
int
ReturnBlockCommand
(
int
key
);
/**
* Function HandleBlockPlace( )
* Called after HandleBlockEnd, when a block command needs to be
* executed after the block is moved to its new place
* (bloc move, drag, copy .. )
* Parameters must be initialized in GetScreen()->m_BlockLocate
*/
virtual
void
HandleBlockPlace
(
wxDC
*
DC
);
/**
* Function HandleBlockEnd( )
* Handle the "end" of a block command,
* i.e. is called at the end of the definition of the area of a block.
* depending on the current block command, this command is executed
* or parameters are initialized to prepare a call to HandleBlockPlace
* in GetScreen()->m_BlockLocate
* @return false if no item selected, or command finished,
* true if some items found and HandleBlockPlace must be called later
*/
virtual
bool
HandleBlockEnd
(
wxDC
*
DC
);
void
RepeatDrawItem
(
wxDC
*
DC
);
void
TestDanglingEnds
(
SCH_ITEM
*
DrawList
,
wxDC
*
DC
);
...
...
include/wxPcbStruct.h
View file @
9b77f2a4
...
...
@@ -473,9 +473,36 @@ public:
/* Block operations: */
int
ReturnBlockCommand
(
int
key
);
void
HandleBlockPlace
(
wxDC
*
DC
);
int
HandleBlockEnd
(
wxDC
*
DC
);
/**
* Function ReturnBlockCommand
* Returns the block command internat code (BLOCK_MOVE, BLOCK_COPY...)
* corresponding to the keys pressed (ALT, SHIFT, SHIFT ALT ..) when
* block command is started by dragging the mouse.
* @param aKey = the key modifiers (Alt, Shift ...)
* @return the block command id (BLOCK_MOVE, BLOCK_COPY...)
*/
virtual
int
ReturnBlockCommand
(
int
key
);
/**
* Function HandleBlockPlace( )
* Called after HandleBlockEnd, when a block command needs to be
* executed after the block is moved to its new place
* (bloc move, drag, copy .. )
* Parameters must be initialized in GetScreen()->m_BlockLocate
*/
virtual
void
HandleBlockPlace
(
wxDC
*
DC
);
/**
* Function HandleBlockEnd( )
* Handle the "end" of a block command,
* i.e. is called at the end of the definition of the area of a block.
* depending on the current block command, this command is executed
* or parameters are initialized to prepare a call to HandleBlockPlace
* in GetScreen()->m_BlockLocate
* @return false if no item selected, or command finished,
* true if some items found and HandleBlockPlace must be called later
*/
virtual
bool
HandleBlockEnd
(
wxDC
*
DC
);
/**
* Function Block_SelectItems
...
...
include/wxstruct.h
View file @
9b77f2a4
...
...
@@ -445,12 +445,39 @@ public:
void
DisplayUnitsMsg
();
/* Handlers for block commands */
virtual
int
ReturnBlockCommand
(
int
key
);
virtual
void
InitBlockPasteInfos
();
virtual
bool
HandleBlockBegin
(
wxDC
*
DC
,
int
cmd_type
,
const
wxPoint
&
startpos
);
virtual
bool
HandleBlockBegin
(
wxDC
*
DC
,
int
cmd_type
,
const
wxPoint
&
startpos
);
/**
* Function ReturnBlockCommand
* Returns the block command internat code (BLOCK_MOVE, BLOCK_COPY...)
* corresponding to the keys pressed (ALT, SHIFT, SHIFT ALT ..) when
* block command is started by dragging the mouse.
* @param aKey = the key modifiers (Alt, Shift ...)
* @return the block command id (BLOCK_MOVE, BLOCK_COPY...)
*/
virtual
int
ReturnBlockCommand
(
int
key
);
/**
* Function HandleBlockPlace( )
* Called after HandleBlockEnd, when a block command needs to be
* executed after the block is moved to its new place
* (bloc move, drag, copy .. )
* Parameters must be initialized in GetScreen()->m_BlockLocate
*/
virtual
void
HandleBlockPlace
(
wxDC
*
DC
);
virtual
int
HandleBlockEnd
(
wxDC
*
DC
);
/**
* Function HandleBlockEnd( )
* Handle the "end" of a block command,
* i.e. is called at the end of the definition of the area of a block.
* depending on the current block command, this command is executed
* or parameters are initialized to prepare a call to HandleBlockPlace
* in GetScreen()->m_BlockLocate
* @return false if no item selected, or command finished,
* true if some items found and HandleBlockPlace must be called later
*/
virtual
bool
HandleBlockEnd
(
wxDC
*
DC
);
void
CopyToClipboard
(
wxCommandEvent
&
event
);
...
...
pcbnew/block.cpp
View file @
9b77f2a4
...
...
@@ -43,14 +43,14 @@ static void drawMovingBlock( WinEDA_DrawPanel* aPanel, wxDC* aDC,
bool
aErase
);
static
bool
Block_Include_
Modules
=
true
;
static
bool
B
lockIncludeLockedModules
=
true
;
static
bool
Block_Include_
Tracks
=
true
;
static
bool
Block_Include_
Zones
=
true
;
static
bool
Block_Include_Draw_Item
s
=
true
;
static
bool
Block_Include_Edges_Items
=
true
;
static
bool
Block_Include_PcbTexte
s
=
true
;
static
bool
B
lockDrawItems
=
true
;
static
bool
blockInclude
Modules
=
true
;
static
bool
b
lockIncludeLockedModules
=
true
;
static
bool
blockInclude
Tracks
=
true
;
static
bool
blockInclude
Zones
=
true
;
static
bool
blockIncludeItemsOnTechLayer
s
=
true
;
static
bool
blockIncludeBoardOutlineLayer
=
true
;
static
bool
blockIncludePcbText
s
=
true
;
static
bool
b
lockDrawItems
=
true
;
/************************************/
/* class DIALOG_BLOCK_OPTIONS */
...
...
@@ -72,8 +72,14 @@ public:
private
:
void
ExecuteCommand
(
wxCommandEvent
&
event
);
void
OnCancel
(
wxCommandEvent
&
event
);
void
checkBoxClicked
(
wxCommandEvent
&
aEvent
);
void
OnCancel
(
wxCommandEvent
&
event
)
{
EndModal
(
-
1
);
}
void
checkBoxClicked
(
wxCommandEvent
&
aEvent
)
{
if
(
m_Include_Modules
->
GetValue
()
)
m_IncludeLockedModules
->
Enable
();
else
m_IncludeLockedModules
->
Disable
();
}
};
...
...
@@ -99,67 +105,57 @@ static bool InstallBlockCmdFrame( WinEDA_BasePcbFrame* parent, const wxString& t
}
DIALOG_BLOCK_OPTIONS
::
DIALOG_BLOCK_OPTIONS
(
WinEDA_BasePcbFrame
*
p
arent
,
const
wxString
&
t
itle
)
:
DIALOG_BLOCK_OPTIONS_BASE
(
parent
,
-
1
,
t
itle
)
DIALOG_BLOCK_OPTIONS
::
DIALOG_BLOCK_OPTIONS
(
WinEDA_BasePcbFrame
*
aP
arent
,
const
wxString
&
aT
itle
)
:
DIALOG_BLOCK_OPTIONS_BASE
(
aParent
,
-
1
,
aT
itle
)
{
m_Parent
=
p
arent
;
m_Include_Modules
->
SetValue
(
Block_Include_
Modules
);
m_IncludeLockedModules
->
SetValue
(
B
lockIncludeLockedModules
);
m_Include_Tracks
->
SetValue
(
Block_Include_
Tracks
);
m_Include_Zones
->
SetValue
(
Block_Include_
Zones
);
m_Include_Draw_Items
->
SetValue
(
Block_Include_Draw_Item
s
);
m_Include_Edges_Items
->
SetValue
(
Block_Include_Edges_Items
);
m_Include_PcbTextes
->
SetValue
(
Block_Include_PcbTexte
s
);
m_DrawBlockItems
->
SetValue
(
B
lockDrawItems
);
m_Parent
=
aP
arent
;
m_Include_Modules
->
SetValue
(
blockInclude
Modules
);
m_IncludeLockedModules
->
SetValue
(
b
lockIncludeLockedModules
);
m_Include_Tracks
->
SetValue
(
blockInclude
Tracks
);
m_Include_Zones
->
SetValue
(
blockInclude
Zones
);
m_Include_Draw_Items
->
SetValue
(
blockIncludeItemsOnTechLayer
s
);
m_Include_Edges_Items
->
SetValue
(
blockIncludeBoardOutlineLayer
);
m_Include_PcbTextes
->
SetValue
(
blockIncludePcbText
s
);
m_DrawBlockItems
->
SetValue
(
b
lockDrawItems
);
SetFocus
();
GetSizer
()
->
SetSizeHints
(
this
);
Centre
();
}
void
DIALOG_BLOCK_OPTIONS
::
OnCancel
(
wxCommandEvent
&
WXUNUSED
(
event
)
)
{
EndModal
(
-
1
);
}
void
DIALOG_BLOCK_OPTIONS
::
checkBoxClicked
(
wxCommandEvent
&
WXUNUSED
(
aEvent
)
)
{
if
(
m_Include_Modules
->
GetValue
()
)
m_IncludeLockedModules
->
Enable
();
else
m_IncludeLockedModules
->
Disable
();
}
void
DIALOG_BLOCK_OPTIONS
::
ExecuteCommand
(
wxCommandEvent
&
event
)
{
Block_Include_
Modules
=
m_Include_Modules
->
GetValue
();
B
lockIncludeLockedModules
=
m_IncludeLockedModules
->
GetValue
();
Block_Include_
Tracks
=
m_Include_Tracks
->
GetValue
();
Block_Include_
Zones
=
m_Include_Zones
->
GetValue
();
Block_Include_Draw_Item
s
=
m_Include_Draw_Items
->
GetValue
();
Block_Include_Edges_Items
=
m_Include_Edges_Items
->
GetValue
();
Block_Include_PcbTexte
s
=
m_Include_PcbTextes
->
GetValue
();
B
lockDrawItems
=
m_DrawBlockItems
->
GetValue
();
blockInclude
Modules
=
m_Include_Modules
->
GetValue
();
b
lockIncludeLockedModules
=
m_IncludeLockedModules
->
GetValue
();
blockInclude
Tracks
=
m_Include_Tracks
->
GetValue
();
blockInclude
Zones
=
m_Include_Zones
->
GetValue
();
blockIncludeItemsOnTechLayer
s
=
m_Include_Draw_Items
->
GetValue
();
blockIncludeBoardOutlineLayer
=
m_Include_Edges_Items
->
GetValue
();
blockIncludePcbText
s
=
m_Include_PcbTextes
->
GetValue
();
b
lockDrawItems
=
m_DrawBlockItems
->
GetValue
();
EndModal
(
0
);
}
/* Return the block command (BLOCK_MOVE, BLOCK_COPY...) corresponding to
* the key (ALT, SHIFT ALT ..)
/**
* Function ReturnBlockCommand
* Returns the block command internat code (BLOCK_MOVE, BLOCK_COPY...)
* corresponding to the keys pressed (ALT, SHIFT, SHIFT ALT ..) when
* block command is started by dragging the mouse.
* @param aKey = the key modifiers (Alt, Shift ...)
* @return the block command id (BLOCK_MOVE, BLOCK_COPY...)
*/
int
WinEDA_PcbFrame
::
ReturnBlockCommand
(
int
k
ey
)
int
WinEDA_PcbFrame
::
ReturnBlockCommand
(
int
aK
ey
)
{
int
cmd
=
0
;
switch
(
k
ey
)
switch
(
aK
ey
)
{
default
:
cmd
=
k
ey
&
0x255
;
cmd
=
aK
ey
&
0x255
;
break
;
case
0
:
...
...
@@ -191,7 +187,13 @@ int WinEDA_PcbFrame::ReturnBlockCommand( int key )
}
/* Routine to handle the BLOCK PLACE command */
/**
* Function HandleBlockPlace( )
* Called after HandleBlockEnd, when a block command needs to be
* executed after the block is moved to its new place
* (bloc move, drag, copy .. )
* Parameters must be initialized in GetScreen()->m_BlockLocate
*/
void
WinEDA_PcbFrame
::
HandleBlockPlace
(
wxDC
*
DC
)
{
bool
err
=
false
;
...
...
@@ -250,15 +252,20 @@ void WinEDA_PcbFrame::HandleBlockPlace( wxDC* DC )
}
/* Handle END BLOCK command.
* Returns:
* 0 if no features selected
* 1 otherwise
* -1 If order is completed and components found (block delete, block save)
/**
* Function HandleBlockEnd( )
* Handle the "end" of a block command,
* i.e. is called at the end of the definition of the area of a block.
* depending on the current block command, this command is executed
* or parameters are initialized to prepare a call to HandleBlockPlace
* in GetScreen()->m_BlockLocate
* @return false if no item selected, or command finished,
* true if some items found and HandleBlockPlace must be called later
*/
int
WinEDA_PcbFrame
::
HandleBlockEnd
(
wxDC
*
DC
)
bool
WinEDA_PcbFrame
::
HandleBlockEnd
(
wxDC
*
DC
)
{
int
endcommande
=
true
;
bool
nextcmd
=
false
;
bool
cancelCmd
=
false
;
// If coming here after cancel block, clean up and exit
if
(
GetScreen
()
->
m_BlockLocate
.
m_State
==
STATE_NO_BLOCK
)
...
...
@@ -269,7 +276,7 @@ int WinEDA_PcbFrame::HandleBlockEnd( wxDC* DC )
GetScreen
()
->
m_BlockLocate
.
m_Command
=
BLOCK_IDLE
;
GetScreen
()
->
m_BlockLocate
.
ClearItemsList
();
DisplayToolMsg
(
wxEmptyString
);
return
0
;
return
false
;
}
// Show dialog if there are no selected items and
...
...
@@ -279,79 +286,24 @@ int WinEDA_PcbFrame::HandleBlockEnd( wxDC* DC )
{
if
(
!
InstallBlockCmdFrame
(
this
,
_
(
"Block Operation"
)
)
)
{
DrawPanel
->
ManageCurseur
=
NULL
;
DrawPanel
->
ForceCloseManageCurseur
=
NULL
;
GetScreen
()
->
m_BlockLocate
.
m_Flags
=
0
;
GetScreen
()
->
m_BlockLocate
.
m_State
=
STATE_NO_BLOCK
;
GetScreen
()
->
m_BlockLocate
.
m_Command
=
BLOCK_IDLE
;
GetScreen
()
->
m_BlockLocate
.
ClearItemsList
();
DisplayToolMsg
(
wxEmptyString
);
DrawAndSizingBlockOutlines
(
DrawPanel
,
DC
,
false
);
return
0
;
cancelCmd
=
true
;
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
// undraw block outline
}
else
{
DrawAndSizingBlockOutlines
(
DrawPanel
,
DC
,
false
);
Block_SelectItems
();
// Exit if no items found
if
(
!
GetScreen
()
->
m_BlockLocate
.
GetCount
()
)
{
DrawPanel
->
ManageCurseur
=
NULL
;
DrawPanel
->
ForceCloseManageCurseur
=
NULL
;
GetScreen
()
->
m_BlockLocate
.
m_Flags
=
0
;
GetScreen
()
->
m_BlockLocate
.
m_State
=
STATE_NO_BLOCK
;
GetScreen
()
->
m_BlockLocate
.
m_Command
=
BLOCK_IDLE
;
GetScreen
()
->
m_BlockLocate
.
ClearItemsList
();
DisplayToolMsg
(
wxEmptyString
);
return
0
;
}
wxPoint
blockCenter
;
// Move cursor to the best position in selected rect:
// can be the block locate rect or the the smallest rectangle
// containing the centers of all selected items.
// Unfortunately, this option gives unpredicatble results when flipping or mirroring blocks
#if 0 // set to 1 to use smallest rectangle center
// Move cursor to the center of
// Also set m_BlockLocate to the size of the rectangle.
PICKED_ITEMS_LIST* itemsList = &DrawPanel->GetScreen()->m_BlockLocate.m_ItemsSelection;
int minX, minY, maxX, maxY;
int tempX, tempY;
BOARD_ITEM* item = (BOARD_ITEM*) itemsList->GetPickedItem( 0 );
minX = item->GetPosition().x;
minY = item->GetPosition().y;
maxX = minX;
maxY = minY;
for( unsigned ii = 1; ii < itemsList->GetCount(); ii++ )
{
item = (BOARD_ITEM*) itemsList->GetPickedItem( ii );
tempX = item->GetPosition().x;
tempY = item->GetPosition().y;
if( tempX > maxX )
maxX = tempX;
if( tempX < minX )
minX = tempX;
if( tempY > maxY )
maxY = tempY;
if( tempY < minY )
minY = tempY;
cancelCmd
=
true
;
else
nextcmd
=
true
;
}
blockCenter.x = ( minX + maxX ) / 2;
blockCenter.y = ( minY + maxY ) / 2;
GetScreen()->m_BlockLocate.SetOrigin( minX, minY );
GetScreen()->m_BlockLocate.SetEnd( maxX, maxY );
#else
blockCenter
=
GetScreen
()
->
m_BlockLocate
.
Centre
();
#endif
DrawPanel
->
CursorOff
(
DC
);
GetScreen
()
->
m_Curseur
=
blockCenter
;
GetScreen
()
->
m_BlockLocate
.
SetLastCursorPosition
(
blockCenter
);
DrawPanel
->
MouseToCursorSchema
();
DrawPanel
->
CursorOn
(
DC
);
}
if
(
DrawPanel
->
ManageCurseur
)
if
(
!
cancelCmd
&&
DrawPanel
->
ManageCurseur
)
{
switch
(
GetScreen
()
->
m_BlockLocate
.
m_Command
)
{
case
BLOCK_IDLE
:
...
...
@@ -363,7 +315,7 @@ int WinEDA_PcbFrame::HandleBlockEnd( wxDC* DC )
case
BLOCK_COPY
:
/* Copy */
case
BLOCK_PRESELECT_MOVE
:
/* Move with preselection list*/
GetScreen
()
->
m_BlockLocate
.
m_State
=
STATE_BLOCK_MOVE
;
endcommande
=
fals
e
;
nextcmd
=
tru
e
;
DrawPanel
->
ManageCurseur
=
drawMovingBlock
;
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
false
);
break
;
...
...
@@ -408,8 +360,9 @@ int WinEDA_PcbFrame::HandleBlockEnd( wxDC* DC )
default
:
break
;
}
}
if
(
endcommande
==
true
)
if
(
!
nextcmd
)
{
GetScreen
()
->
m_BlockLocate
.
m_Flags
=
0
;
GetScreen
()
->
m_BlockLocate
.
m_State
=
STATE_NO_BLOCK
;
...
...
@@ -420,7 +373,7 @@ int WinEDA_PcbFrame::HandleBlockEnd( wxDC* DC )
DisplayToolMsg
(
wxEmptyString
);
}
return
endcommande
;
return
nextcmd
;
}
...
...
@@ -442,13 +395,13 @@ void WinEDA_PcbFrame::Block_SelectItems()
PICKED_ITEMS_LIST
*
itemsList
=
&
GetScreen
()
->
m_BlockLocate
.
m_ItemsSelection
;
ITEM_PICKER
picker
(
NULL
,
UR_UNSPECIFIED
);
if
(
Block_Include_
Modules
)
if
(
blockInclude
Modules
)
{
for
(
MODULE
*
module
=
m_Pcb
->
m_Modules
;
module
!=
NULL
;
module
=
module
->
Next
()
)
{
if
(
module
->
HitTest
(
GetScreen
()
->
m_BlockLocate
)
&&
(
!
module
->
IsLocked
()
||
B
lockIncludeLockedModules
)
)
&&
(
!
module
->
IsLocked
()
||
b
lockIncludeLockedModules
)
)
{
picker
.
m_PickedItem
=
module
;
picker
.
m_PickedItemType
=
module
->
Type
();
...
...
@@ -458,7 +411,7 @@ void WinEDA_PcbFrame::Block_SelectItems()
}
/* Remove tracks and vias */
if
(
Block_Include_
Tracks
)
if
(
blockInclude
Tracks
)
{
for
(
TRACK
*
pt_segm
=
m_Pcb
->
m_Track
;
pt_segm
!=
NULL
;
pt_segm
=
pt_segm
->
Next
()
)
...
...
@@ -475,10 +428,10 @@ void WinEDA_PcbFrame::Block_SelectItems()
/* Select graphic items */
masque_layer
=
EDGE_LAYER
;
if
(
Block_Include_Draw_Item
s
)
if
(
blockIncludeItemsOnTechLayer
s
)
masque_layer
=
ALL_LAYERS
;
if
(
!
Block_Include_Edges_Items
)
if
(
!
blockIncludeBoardOutlineLayer
)
masque_layer
&=
~
EDGE_LAYER
;
for
(
BOARD_ITEM
*
PtStruct
=
m_Pcb
->
m_Drawings
;
PtStruct
!=
NULL
;
...
...
@@ -496,7 +449,7 @@ void WinEDA_PcbFrame::Block_SelectItems()
break
;
case
TYPE_TEXTE
:
if
(
!
Block_Include_PcbTexte
s
)
if
(
!
blockIncludePcbText
s
)
break
;
if
(
!
PtStruct
->
HitTest
(
GetScreen
()
->
m_BlockLocate
)
)
break
;
...
...
@@ -532,7 +485,7 @@ void WinEDA_PcbFrame::Block_SelectItems()
}
/* Zone selection */
if
(
Block_Include_
Zones
)
if
(
blockInclude
Zones
)
{
#if 0
...
...
@@ -581,64 +534,24 @@ static void drawPickedItems( WinEDA_DrawPanel* aPanel, wxDC* aDC,
switch
(
item
->
Type
()
)
{
case
TYPE_MODULE
:
{
MODULE
*
module
=
(
MODULE
*
)
item
;
frame
->
GetBoard
()
->
m_Status_Pcb
&=
~
RATSNEST_ITEM_LOCAL_OK
;
DrawModuleOutlines
(
aPanel
,
aDC
,
module
);
DrawModuleOutlines
(
aPanel
,
aDC
,
(
MODULE
*
)
item
);
break
;
}
case
TYPE_DRAWSEGMENT
:
{
DRAWSEGMENT
*
segment
=
(
DRAWSEGMENT
*
)
item
;
segment
->
Draw
(
aPanel
,
aDC
,
GR_XOR
,
aOffset
);
break
;
}
case
TYPE_TEXTE
:
{
TEXTE_PCB
*
text
=
(
TEXTE_PCB
*
)
item
;
text
->
Draw
(
aPanel
,
aDC
,
GR_XOR
,
aOffset
);
break
;
}
case
TYPE_TRACK
:
case
TYPE_VIA
:
{
TRACK
*
track
=
(
TRACK
*
)
item
;
track
->
Draw
(
aPanel
,
aDC
,
GR_XOR
,
aOffset
);
break
;
}
case
TYPE_MIRE
:
{
MIREPCB
*
mire
=
(
MIREPCB
*
)
item
;
mire
->
Draw
(
aPanel
,
aDC
,
GR_XOR
,
aOffset
);
break
;
}
case
TYPE_DIMENSION
:
{
DIMENSION
*
dimension
=
(
DIMENSION
*
)
item
;
dimension
->
Draw
(
aPanel
,
aDC
,
GR_XOR
,
aOffset
);
case
TYPE_DIMENSION
:
// Currently markers are not affected by block commands
case
TYPE_MARKER_PCB
:
item
->
Draw
(
aPanel
,
aDC
,
GR_XOR
,
aOffset
);
break
;
}
case
TYPE_ZONE_CONTAINER
:
{
ZONE_CONTAINER
*
zoneContainer
=
(
ZONE_CONTAINER
*
)
item
;
zoneContainer
->
Draw
(
aPanel
,
aDC
,
GR_XOR
,
aOffset
);
zoneContainer
->
DrawFilledArea
(
aPanel
,
aDC
,
GR_XOR
,
aOffset
);
break
;
}
// Currently markers are not affected by block commands
case
TYPE_MARKER_PCB
:
{
MARKER_PCB
*
pcbMarker
=
(
MARKER_PCB
*
)
item
;
pcbMarker
->
Draw
(
aPanel
,
aDC
,
GR_XOR
,
aOffset
);
item
->
Draw
(
aPanel
,
aDC
,
GR_XOR
,
aOffset
);
((
ZONE_CONTAINER
*
)
item
)
->
DrawFilledArea
(
aPanel
,
aDC
,
GR_XOR
,
aOffset
);
break
;
}
default
:
break
;
...
...
@@ -661,7 +574,7 @@ static void drawMovingBlock( WinEDA_DrawPanel* aPanel, wxDC* aDC,
{
screen
->
m_BlockLocate
.
Draw
(
aPanel
,
aDC
,
screen
->
m_BlockLocate
.
m_MoveVector
,
GR_XOR
,
BLOCK_OUTLINE_COLOR
);
if
(
B
lockDrawItems
)
if
(
b
lockDrawItems
)
drawPickedItems
(
aPanel
,
aDC
,
screen
->
m_BlockLocate
.
m_MoveVector
);
}
}
...
...
@@ -677,7 +590,7 @@ static void drawMovingBlock( WinEDA_DrawPanel* aPanel, wxDC* aDC,
{
screen
->
m_BlockLocate
.
Draw
(
aPanel
,
aDC
,
screen
->
m_BlockLocate
.
m_MoveVector
,
GR_XOR
,
BLOCK_OUTLINE_COLOR
);
if
(
B
lockDrawItems
)
if
(
b
lockDrawItems
)
drawPickedItems
(
aPanel
,
aDC
,
screen
->
m_BlockLocate
.
m_MoveVector
);
}
}
...
...
@@ -812,7 +725,7 @@ void WinEDA_PcbFrame::Block_Rotate()
/**
* Function Block_Flip
*
Flip
items within the selected block.
*
flips
items within the selected block.
* The flip center is the center of the block
* @param none
*/
...
...
@@ -840,7 +753,7 @@ void WinEDA_PcbFrame::Block_Flip()
switch
(
item
->
Type
()
)
{
case
TYPE_MODULE
:
(
(
MODULE
*
)
item
)
->
m_Flags
=
0
;
item
->
m_Flags
=
0
;
m_Pcb
->
m_Status_Pcb
=
0
;
break
;
...
...
@@ -902,7 +815,7 @@ void WinEDA_PcbFrame::Block_Move()
{
case
TYPE_MODULE
:
m_Pcb
->
m_Status_Pcb
=
0
;
(
(
MODULE
*
)
item
)
->
m_Flags
=
0
;
item
->
m_Flags
=
0
;
break
;
/* Move track segments */
...
...
@@ -939,7 +852,7 @@ void WinEDA_PcbFrame::Block_Move()
/**
* Function Block_Duplicate
*
Duplicate
all items within the selected block.
*
duplicates
all items within the selected block.
* New location is determined by the current offset from the selected block's
* original location.
* @param none
...
...
pcbnew/block_module_editor.cpp
View file @
9b77f2a4
...
...
@@ -86,16 +86,21 @@ int WinEDA_ModuleEditFrame::ReturnBlockCommand( int key )
}
/* Command BLOCK END (end of block sizing)
* return :
* 0 if command finished (zoom, delete ...)
* 1 if HandleBlockPlace must follow (items found, and a block place command
* must follow)
/**
* Function HandleBlockEnd( )
* Handle the "end" of a block command,
* i.e. is called at the end of the definition of the area of a block.
* depending on the current block command, this command is executed
* or parameters are initialized to prepare a call to HandleBlockPlace
* in GetScreen()->m_BlockLocate
* @return false if no item selected, or command finished,
* true if some items found and HandleBlockPlace must be called later
*/
int
WinEDA_ModuleEditFrame
::
HandleBlockEnd
(
wxDC
*
DC
)
bool
WinEDA_ModuleEditFrame
::
HandleBlockEnd
(
wxDC
*
DC
)
{
int
ItemsCount
=
0
,
MustDoPlace
=
0
;
MODULE
*
Currentmodule
=
GetBoard
()
->
m_Modules
;
int
itemsCount
=
0
;
bool
nextcmd
=
false
;
MODULE
*
currentModule
=
GetBoard
()
->
m_Modules
;
if
(
GetScreen
()
->
m_BlockLocate
.
GetCount
()
)
{
...
...
@@ -120,11 +125,11 @@ int WinEDA_ModuleEditFrame::HandleBlockEnd( wxDC* DC )
case
BLOCK_DRAG
:
/* Drag */
case
BLOCK_MOVE
:
/* Move */
case
BLOCK_COPY
:
/* Copy */
ItemsCount
=
MarkItemsInBloc
(
Currentm
odule
,
itemsCount
=
MarkItemsInBloc
(
currentM
odule
,
GetScreen
()
->
m_BlockLocate
);
if
(
I
temsCount
)
if
(
i
temsCount
)
{
MustDoPlace
=
1
;
nextcmd
=
true
;
if
(
DrawPanel
->
ManageCurseur
!=
NULL
)
{
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
FALSE
);
...
...
@@ -137,16 +142,16 @@ int WinEDA_ModuleEditFrame::HandleBlockEnd( wxDC* DC )
break
;
case
BLOCK_PRESELECT_MOVE
:
/* Move with preselection list*/
MustDoPlace
=
1
;
nextcmd
=
true
;
DrawPanel
->
ManageCurseur
=
DrawMovingBlockOutlines
;
GetScreen
()
->
m_BlockLocate
.
m_State
=
STATE_BLOCK_MOVE
;
break
;
case
BLOCK_DELETE
:
/* Delete */
ItemsCount
=
MarkItemsInBloc
(
Currentm
odule
,
GetScreen
()
->
m_BlockLocate
);
if
(
I
temsCount
)
SaveCopyInUndoList
(
Currentm
odule
,
UR_MODEDIT
);
DeleteMarkedItems
(
Currentm
odule
);
itemsCount
=
MarkItemsInBloc
(
currentM
odule
,
GetScreen
()
->
m_BlockLocate
);
if
(
i
temsCount
)
SaveCopyInUndoList
(
currentM
odule
,
UR_MODEDIT
);
DeleteMarkedItems
(
currentM
odule
);
break
;
case
BLOCK_SAVE
:
/* Save */
...
...
@@ -154,20 +159,20 @@ int WinEDA_ModuleEditFrame::HandleBlockEnd( wxDC* DC )
break
;
case
BLOCK_ROTATE
:
ItemsCount
=
MarkItemsInBloc
(
Currentm
odule
,
GetScreen
()
->
m_BlockLocate
);
if
(
I
temsCount
)
SaveCopyInUndoList
(
Currentm
odule
,
UR_MODEDIT
);
RotateMarkedItems
(
Currentm
odule
,
GetScreen
()
->
m_BlockLocate
.
Centre
()
);
itemsCount
=
MarkItemsInBloc
(
currentM
odule
,
GetScreen
()
->
m_BlockLocate
);
if
(
i
temsCount
)
SaveCopyInUndoList
(
currentM
odule
,
UR_MODEDIT
);
RotateMarkedItems
(
currentM
odule
,
GetScreen
()
->
m_BlockLocate
.
Centre
()
);
break
;
case
BLOCK_MIRROR_X
:
case
BLOCK_MIRROR_Y
:
case
BLOCK_FLIP
:
/* mirror */
ItemsCount
=
MarkItemsInBloc
(
Currentm
odule
,
GetScreen
()
->
m_BlockLocate
);
if
(
I
temsCount
)
SaveCopyInUndoList
(
Currentm
odule
,
UR_MODEDIT
);
MirrorMarkedItems
(
Currentm
odule
,
GetScreen
()
->
m_BlockLocate
.
Centre
()
);
itemsCount
=
MarkItemsInBloc
(
currentM
odule
,
GetScreen
()
->
m_BlockLocate
);
if
(
i
temsCount
)
SaveCopyInUndoList
(
currentM
odule
,
UR_MODEDIT
);
MirrorMarkedItems
(
currentM
odule
,
GetScreen
()
->
m_BlockLocate
.
Centre
()
);
break
;
case
BLOCK_ZOOM
:
/* Window Zoom */
...
...
@@ -181,11 +186,11 @@ int WinEDA_ModuleEditFrame::HandleBlockEnd( wxDC* DC )
break
;
}
if
(
MustDoPlace
<=
0
)
if
(
!
nextcmd
)
{
if
(
GetScreen
()
->
m_BlockLocate
.
m_Command
!=
BLOCK_SELECT_ITEMS_ONLY
)
{
ClearMarkItems
(
Currentm
odule
);
ClearMarkItems
(
currentM
odule
);
}
GetScreen
()
->
m_BlockLocate
.
m_Flags
=
0
;
GetScreen
()
->
m_BlockLocate
.
m_State
=
STATE_NO_BLOCK
;
...
...
@@ -199,7 +204,7 @@ int WinEDA_ModuleEditFrame::HandleBlockEnd( wxDC* DC )
}
return
MustDoPlace
;
return
nextcmd
;
}
...
...
@@ -214,7 +219,7 @@ void WinEDA_ModuleEditFrame::HandleBlockPlace( wxDC* DC )
*/
{
bool
err
=
FALSE
;
MODULE
*
Currentm
odule
=
GetBoard
()
->
m_Modules
;
MODULE
*
currentM
odule
=
GetBoard
()
->
m_Modules
;
if
(
DrawPanel
->
ManageCurseur
==
NULL
)
{
...
...
@@ -234,15 +239,15 @@ void WinEDA_ModuleEditFrame::HandleBlockPlace( wxDC* DC )
case
BLOCK_MOVE
:
/* Move */
case
BLOCK_PRESELECT_MOVE
:
/* Move with preselection list*/
GetScreen
()
->
m_BlockLocate
.
ClearItemsList
();
SaveCopyInUndoList
(
Currentm
odule
,
UR_MODEDIT
);
MoveMarkedItems
(
Currentm
odule
,
GetScreen
()
->
m_BlockLocate
.
m_MoveVector
);
SaveCopyInUndoList
(
currentM
odule
,
UR_MODEDIT
);
MoveMarkedItems
(
currentM
odule
,
GetScreen
()
->
m_BlockLocate
.
m_MoveVector
);
DrawPanel
->
Refresh
(
TRUE
);
break
;
case
BLOCK_COPY
:
/* Copy */
GetScreen
()
->
m_BlockLocate
.
ClearItemsList
();
SaveCopyInUndoList
(
Currentm
odule
,
UR_MODEDIT
);
CopyMarkedItems
(
Currentm
odule
,
GetScreen
()
->
m_BlockLocate
.
m_MoveVector
);
SaveCopyInUndoList
(
currentM
odule
,
UR_MODEDIT
);
CopyMarkedItems
(
currentM
odule
,
GetScreen
()
->
m_BlockLocate
.
m_MoveVector
);
break
;
case
BLOCK_PASTE
:
/* Paste */
...
...
@@ -252,13 +257,13 @@ void WinEDA_ModuleEditFrame::HandleBlockPlace( wxDC* DC )
case
BLOCK_MIRROR_X
:
case
BLOCK_MIRROR_Y
:
case
BLOCK_FLIP
:
/* Mirror by popup menu, from block move */
SaveCopyInUndoList
(
Currentm
odule
,
UR_MODEDIT
);
MirrorMarkedItems
(
Currentm
odule
,
GetScreen
()
->
m_BlockLocate
.
Centre
()
);
SaveCopyInUndoList
(
currentM
odule
,
UR_MODEDIT
);
MirrorMarkedItems
(
currentM
odule
,
GetScreen
()
->
m_BlockLocate
.
Centre
()
);
break
;
case
BLOCK_ROTATE
:
SaveCopyInUndoList
(
Currentm
odule
,
UR_MODEDIT
);
RotateMarkedItems
(
Currentm
odule
,
GetScreen
()
->
m_BlockLocate
.
Centre
()
);
SaveCopyInUndoList
(
currentM
odule
,
UR_MODEDIT
);
RotateMarkedItems
(
currentM
odule
,
GetScreen
()
->
m_BlockLocate
.
Centre
()
);
break
;
case
BLOCK_ZOOM
:
// Handled by HandleBlockEnd
...
...
@@ -295,7 +300,7 @@ static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC,
BASE_SCREEN
*
screen
=
panel
->
GetScreen
();
BOARD_ITEM
*
item
;
wxPoint
move_offset
;
MODULE
*
Currentm
odule
=
MODULE
*
currentM
odule
=
(
(
WinEDA_BasePcbFrame
*
)
wxGetApp
().
GetTopWindow
()
)
->
m_ModuleEditFrame
->
GetBoard
()
->
m_Modules
;
PtBlock
=
&
screen
->
m_BlockLocate
;
...
...
@@ -306,11 +311,11 @@ static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC,
PtBlock
->
Draw
(
panel
,
DC
,
PtBlock
->
m_MoveVector
,
g_XorMode
,
PtBlock
->
m_Color
);
if
(
Currentm
odule
)
if
(
currentM
odule
)
{
move_offset
.
x
=
-
PtBlock
->
m_MoveVector
.
x
;
move_offset
.
y
=
-
PtBlock
->
m_MoveVector
.
y
;
item
=
Currentm
odule
->
m_Drawings
;
item
=
currentM
odule
->
m_Drawings
;
for
(
;
item
!=
NULL
;
item
=
item
->
Next
()
)
{
if
(
item
->
m_Selected
==
0
)
...
...
@@ -328,7 +333,7 @@ static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC,
}
}
D_PAD
*
pad
=
Currentm
odule
->
m_Pads
;
D_PAD
*
pad
=
currentM
odule
->
m_Pads
;
for
(
;
pad
!=
NULL
;
pad
=
pad
->
Next
()
)
{
if
(
pad
->
m_Selected
==
0
)
...
...
@@ -346,9 +351,9 @@ static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC,
PtBlock
->
m_Color
);
if
(
Currentm
odule
)
if
(
currentM
odule
)
{
item
=
Currentm
odule
->
m_Drawings
;
item
=
currentM
odule
->
m_Drawings
;
move_offset
=
-
PtBlock
->
m_MoveVector
;
for
(
;
item
!=
NULL
;
item
=
item
->
Next
()
)
{
...
...
@@ -367,7 +372,7 @@ static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC,
}
}
D_PAD
*
pad
=
Currentm
odule
->
m_Pads
;
D_PAD
*
pad
=
currentM
odule
->
m_Pads
;
for
(
;
pad
!=
NULL
;
pad
=
pad
->
Next
()
)
{
if
(
pad
->
m_Selected
==
0
)
...
...
pcbnew/module_editor_frame.h
View file @
9b77f2a4
...
...
@@ -93,9 +93,9 @@ public:
bool
Clear_Pcb
(
bool
aQuery
);
/* handlers for block commands */
int
ReturnBlockCommand
(
int
key
);
virtual
int
ReturnBlockCommand
(
int
key
);
virtual
void
HandleBlockPlace
(
wxDC
*
DC
);
virtual
int
HandleBlockEnd
(
wxDC
*
DC
);
virtual
bool
HandleBlockEnd
(
wxDC
*
DC
);
BOARD_ITEM
*
ModeditLocateAndDisplay
(
int
aHotKeyCode
=
0
);
...
...
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