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
0e7fa222
Commit
0e7fa222
authored
Aug 12, 2010
by
jean-pierre charras
Browse files
Options
Browse Files
Download
Plain Diff
merge trunk. Prepare hotkeys move and rotate items in board editor
parents
2a14f2d5
f839ba95
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
387 additions
and
246 deletions
+387
-246
richio.cpp
common/richio.cpp
+40
-0
xnode.cpp
common/xnode.cpp
+6
-10
netform.cpp
eeschema/netform.cpp
+1
-1
netlist_form_pads-pcb.xsl
eeschema/plugins/netlist_form_pads-pcb.xsl
+1
-1
richio.h
include/richio.h
+5
-3
wxPcbStruct.h
include/wxPcbStruct.h
+40
-4
hotkeys.cpp
pcbnew/hotkeys.cpp
+276
-215
hotkeys.h
pcbnew/hotkeys.h
+2
-3
onrightclick.cpp
pcbnew/onrightclick.cpp
+16
-9
No files found.
common/richio.cpp
View file @
0e7fa222
...
...
@@ -204,6 +204,46 @@ int OUTPUTFORMATTER::Print( int nestLevel, const char* fmt, ... ) throw( IOError
}
const
char
*
OUTPUTFORMATTER
::
Quoted
(
std
::
string
*
aWrapee
)
throw
(
IOError
)
{
// derived class's notion of what a quote character is
char
quote
=
*
GetQuoteChar
(
"("
);
// Will the string be wrapped based on its interior content?
const
char
*
squote
=
GetQuoteChar
(
aWrapee
->
c_str
()
);
// Search the interior of the string for 'quote' chars
// and replace them as found with duplicated quotes.
// Note that necessarily any string which has internal quotes will
// also be wrapped in quotes later in this function.
for
(
unsigned
i
=
0
;
i
<
aWrapee
->
size
();
++
i
)
{
if
(
(
*
aWrapee
)[
i
]
==
quote
)
{
aWrapee
->
insert
(
aWrapee
->
begin
()
+
i
,
quote
);
++
i
;
}
else
if
(
(
*
aWrapee
)[
0
]
==
'\r'
||
(
*
aWrapee
)[
0
]
==
'\n'
)
{
// In a desire to maintain accurate line number reporting within DSNLEXER
// a decision was made to make all S-expression strings be on a single
// line. You can embedd \n (human readable) in the text but not
// '\n' which is 0x0a.
throw
IOError
(
_
(
"S-expression string has newline"
)
);
}
}
if
(
*
squote
)
{
// wrap the beginning and end of the string in a quote.
aWrapee
->
insert
(
aWrapee
->
begin
(),
quote
);
aWrapee
->
insert
(
aWrapee
->
end
(),
quote
);
}
return
aWrapee
->
c_str
();
}
//-----<STRING_FORMATTER>----------------------------------------------------
void
STRING_FORMATTER
::
write
(
const
char
*
aOutBuf
,
int
aCount
)
throw
(
IOError
)
...
...
common/xnode.cpp
View file @
0e7fa222
...
...
@@ -26,8 +26,8 @@
#include "xnode.h"
#include "macros.h"
typedef
wxXmlProperty
XATTR
;
typedef
wxXmlProperty
XATTR
;
#define GetAttribs GetProperties
void
XNODE
::
Format
(
OUTPUTFORMATTER
*
out
,
int
nestLevel
)
throw
(
IOError
)
{
...
...
@@ -51,18 +51,16 @@ void XNODE::Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IOError )
void
XNODE
::
FormatContents
(
OUTPUTFORMATTER
*
out
,
int
nestLevel
)
throw
(
IOError
)
{
std
::
string
utf8
;
const
char
*
quote
;
// output attributes first if they exist
for
(
XATTR
*
attr
=
(
XATTR
*
)
GetAttrib
ute
s
();
attr
;
attr
=
(
XATTR
*
)
attr
->
GetNext
()
)
for
(
XATTR
*
attr
=
(
XATTR
*
)
GetAttribs
();
attr
;
attr
=
(
XATTR
*
)
attr
->
GetNext
()
)
{
utf8
=
CONV_TO_UTF8
(
attr
->
GetValue
()
);
// capture the content
quote
=
out
->
GetQuoteChar
(
utf8
.
c_str
()
);
out
->
Print
(
0
,
" (%s %s
%s%s
)"
,
out
->
Print
(
0
,
" (%s %s)"
,
// attr names should never need quoting, no spaces, we designed the file.
CONV_TO_UTF8
(
attr
->
GetName
()
),
quote
,
utf8
.
c_str
(),
quote
);
out
->
Quoted
(
&
utf8
)
);
}
// we only expect to have used one of two types here:
...
...
@@ -88,8 +86,7 @@ void XNODE::FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IOError
case
wxXML_TEXT_NODE
:
utf8
=
CONV_TO_UTF8
(
GetContent
()
);
quote
=
out
->
GetQuoteChar
(
utf8
.
c_str
()
);
out
->
Print
(
0
,
" %s%s%s"
,
quote
,
utf8
.
c_str
(),
quote
);
out
->
Print
(
0
,
" %s"
,
out
->
Quoted
(
&
utf8
)
);
break
;
default
:
...
...
@@ -97,5 +94,4 @@ void XNODE::FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IOError
}
}
// EOF
eeschema/netform.cpp
View file @
0e7fa222
...
...
@@ -629,7 +629,7 @@ static XNODE* node( const wxString& aName, const wxString& aTextualContent = wxE
XNODE
*
EXPORT_HELP
::
makeGenericDesignHeader
()
{
XNODE
*
xdesign
=
node
(
wxT
(
"design"
)
);
char
date
[
128
];
char
date
[
128
];
DateAndTime
(
date
);
...
...
eeschema/plugins/netlist_form_pads-pcb.xsl
View file @
0e7fa222
...
...
@@ -11,7 +11,7 @@
<xsl:stylesheet
version=
"1.0"
xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform"
>
<xsl:output
method=
"text"
omit-xml-declaration=
"yes"
indent=
"no"
/>
<xsl:template
match=
"export"
>
<xsl:template
match=
"
/
export"
>
<xsl:text>
*PADS-PCB*
&nl;
*PART*
&nl;
</xsl:text>
<xsl:apply-templates
select=
"components/comp"
/>
<xsl:text>
&nl;
*NET*
&nl;
</xsl:text>
...
...
include/richio.h
View file @
0e7fa222
...
...
@@ -301,7 +301,7 @@ public:
/**
* Function Quoted
* checks \a aWrap
p
ee input string for a need to be quoted
* checks \a aWrapee input string for a need to be quoted
* (e.g. contains a ')' character or a space), and for \" double quotes
* within the string that need to be doubled up such that the DSNLEXER
* will correctly parse the string from a file later.
...
...
@@ -312,9 +312,11 @@ public:
*
* @return const char* - useful for passing to printf() style functions that
* must output utf8 streams.
virtual const char* Quoted( std::string* aWrapee );
thinking about using wxCharBuffer* instead.
* @throw IOError, if aWrapee has any \r or \n bytes in it which is
* illegal according to the DSNLEXER who does not ever want them
* within a string.
*/
virtual
const
char
*
Quoted
(
std
::
string
*
aWrapee
)
throw
(
IOError
);
//-----</interface functions>-----------------------------------------
};
...
...
include/wxPcbStruct.h
View file @
0e7fa222
...
...
@@ -253,10 +253,46 @@ public:
*/
void
SetLastNetListRead
(
const
wxString
&
aNetListFile
);
void
OnHotKey
(
wxDC
*
DC
,
int
hotkey
,
EDA_BaseStruct
*
DrawStruct
);
bool
OnHotkeyDeleteItem
(
wxDC
*
DC
,
EDA_BaseStruct
*
DrawStruct
);
/** Function OnHotKey.
* ** Commands are case insensitive **
* Some commands are relatives to the item under the mouse cursor
* @param aDC = current device context
* @param aHotkeyCode = hotkey code (ascii or wxWidget code for special keys)
* @param aItem = NULL or pointer on a EDA_BaseStruct under the mouse cursor
*/
void
OnHotKey
(
wxDC
*
aDC
,
int
aHotkeyCode
,
EDA_BaseStruct
*
aItem
);
/** Function OnHotkeyDeleteItem
* Delete the item found under the mouse cursor
* Depending on the current active tool::
* Tool track
* if a track is in progress: Delete the last segment
* else delete the entire track
* Tool module (footprint):
* Delete the module.
* @param aDC = current device context
* @return true if an item was deleted
*/
bool
OnHotkeyDeleteItem
(
wxDC
*
aDC
);
/** Function OnHotkeyMoveItem
* Moves or drag the item (footprint, track, text .. ) found under the mouse cursor
* Only a footprint or a track can be dragged
* @param aIdCommand = the hotkey command id
* @param aDC = current device context
* @return true if an item was moved
*/
bool
OnHotkeyMoveItem
(
int
aIdCommand
,
wxDC
*
aDC
);
/** Function OnHotkeyRotateItem
* Rotate the item (text or footprint) found under the mouse cursor
* @param aIdCommand = the hotkey command id
* @param aDC = current device context
* @return true if an item was moved
*/
bool
OnHotkeyRotateItem
(
int
aIdCommand
,
wxDC
*
aDC
);
void
OnCloseWindow
(
wxCloseEvent
&
Event
);
void
Process_Special_Functions
(
wxCommandEvent
&
event
);
...
...
pcbnew/hotkeys.cpp
View file @
0e7fa222
...
...
@@ -24,9 +24,9 @@
* default key value is the default hotkey for this command. Can be overrided by the user hotkey list file
* add the HkMyNewEntry pointer in the s_board_edit_Hotkey_List list ( or/and the s_module_edit_Hotkey_List list)
* Add the new code in the switch in OnHotKey() function.
*
when the variable PopupOn
is true, an item is currently edited.
* This can be useful if the new function cannot be executed while an item is currently being edited
* ( For example, one cannot start a new wire when a component is moving.)
*
Note: when the variable itemCurrentlyEdited
is true, an item is currently edited.
*
This can be useful if the new function cannot be executed while an item is currently being edited
*
( For example, one cannot start a new wire when a component is moving.)
*
* Note: If an hotkey is a special key, be sure the corresponding wxWidget keycode (WXK_XXXX)
* is handled in the hotkey_name_descr s_Hotkey_Name_List list (see hotkeys_basic.cpp)
...
...
@@ -69,25 +69,22 @@ static Ki_HotkeyInfo HkBackspace( wxT( "Delete track segment" ), HK_BACK_SPACE,
static
Ki_HotkeyInfo
HkAddNewTrack
(
wxT
(
"Add new track"
),
HK_ADD_NEW_TRACK
,
'X'
);
static
Ki_HotkeyInfo
HkAddVia
(
wxT
(
"Add Via"
),
HK_ADD_VIA
,
'V'
);
static
Ki_HotkeyInfo
HkSwitchTrackPosture
(
wxT
(
"Switch Track Posture"
),
HK_SWITCH_TRACK_POSTURE
,
'/'
);
HK_SWITCH_TRACK_POSTURE
,
'/'
);
static
Ki_HotkeyInfo
HkAddMicroVia
(
wxT
(
"Add MicroVia"
),
HK_ADD_MICROVIA
,
'V'
+
GR_KB_CTRL
);
static
Ki_HotkeyInfo
HkEndTrack
(
wxT
(
"End Track"
),
HK_END_TRACK
,
WXK_END
);
static
Ki_HotkeyInfo
HkEditBoardItem
(
wxT
(
"Edit Item"
),
HK_EDIT_ITEM
,
'E'
);
static
Ki_HotkeyInfo
HkFlipFootprint
(
wxT
(
"Flip Footprint"
),
HK_FLIP_FOOTPRINT
,
'F'
);
static
Ki_HotkeyInfo
HkRotateFootprint
(
wxT
(
"Rotate Footprint"
),
HK_ROTATE_FOOTPRINT
,
'R'
);
static
Ki_HotkeyInfo
HkMoveFootprint
(
wxT
(
"Move Footprint"
),
HK_MOVE_FOOTPRINT_OR_TRACK
,
'M'
);
static
Ki_HotkeyInfo
HkRotateItem
(
wxT
(
"Rotate Item"
),
HK_ROTATE_ITEM
,
'R'
);
static
Ki_HotkeyInfo
HkMoveItem
(
wxT
(
"Move Item"
),
HK_MOVE_ITEM
,
'M'
);
static
Ki_HotkeyInfo
HkDragFootprint
(
wxT
(
"Drag Footprint"
),
HK_DRAG_FOOTPRINT_OR_TRACK
,
'G'
);
static
Ki_HotkeyInfo
HkGetAndMoveFootprint
(
wxT
(
"Get and Move Footprint"
),
HK_GET_AND_MOVE_FOOTPRINT
,
'T'
);
static
Ki_HotkeyInfo
HkLock_Unlock_Footprint
(
wxT
(
"Lock/Unlock Footprint"
),
HK_LOCK_UNLOCK_FOOTPRINT
,
'L'
);
static
Ki_HotkeyInfo
HkDelete
(
wxT
(
"Delete Track or Footprint"
),
HK_DELETE
,
WXK_DELETE
);
static
Ki_HotkeyInfo
HkDelete
(
wxT
(
"Delete Track or Footprint"
),
HK_DELETE
,
WXK_DELETE
);
static
Ki_HotkeyInfo
HkResetLocalCoord
(
wxT
(
"Reset local coord."
),
HK_RESET_LOCAL_COORD
,
' '
);
...
...
@@ -162,8 +159,8 @@ Ki_HotkeyInfo* s_board_edit_Hotkey_List[] =
&
HkBackspace
,
&
HkAddNewTrack
,
&
HkAddVia
,
&
HkAddMicroVia
,
&
HkSwitchTrackPosture
,
&
HkEndTrack
,
&
HkMove
Footprint
,
&
HkFlipFootprint
,
&
HkRotate
Footprint
,
&
HkDragFootprint
,
&
HkEndTrack
,
&
HkMove
Item
,
&
HkFlipFootprint
,
&
HkRotate
Item
,
&
HkDragFootprint
,
&
HkGetAndMoveFootprint
,
&
HkLock_Unlock_Footprint
,
&
HkSavefile
,
&
HkLoadfile
,
&
HkFindItem
,
&
HkEditBoardItem
,
&
HkSwitch2CopperLayer
,
&
HkSwitch2InnerLayer1
,
...
...
@@ -210,46 +207,41 @@ struct Ki_HotkeyInfoSectionDescriptor s_Module_Editor_Hokeys_Descr[] =
NULL
,
NULL
,
NULL
}
};
/***********************************************************/
void
WinEDA_PcbFrame
::
OnHotKey
(
wxDC
*
DC
,
int
hotkey
,
EDA_BaseStruct
*
DrawStruct
)
/***********************************************************/
/* Hot keys. Some commands are relatives to the item under the mouse cursor
* Commands are case insensitive
* @param DC = current device context
/** Function OnHotKey.
* ** Commands are case insensitive **
* Some commands are relatives to the item under the mouse cursor
* @param aDC = current device context
* @param hotkey = hotkey code (ascii or wxWidget code for special keys)
* @param
DrawStruct
= NULL or pointer on a EDA_BaseStruct under the mouse cursor
* @param
aItem
= NULL or pointer on a EDA_BaseStruct under the mouse cursor
*/
void
WinEDA_PcbFrame
::
OnHotKey
(
wxDC
*
aDC
,
int
aHotkeyCode
,
EDA_BaseStruct
*
aItem
)
{
wxCommandEvent
cmd
(
wxEVT_COMMAND_MENU_SELECTED
);
cmd
.
SetEventObject
(
this
);
bool
PopupOn
=
(
GetCurItem
()
&&
GetCurItem
()
->
m_Flags
);
bool
ItemFree
=
(
GetCurItem
()
==
0
||
GetCurItem
()
->
m_Flags
==
0
);
if
(
hotkey
==
0
)
if
(
aHotkeyCode
==
0
)
return
;
bool
itemCurrentlyEdited
=
(
GetCurItem
()
&&
GetCurItem
()
->
m_Flags
);
MODULE
*
module
=
NULL
;
/* Convert lower to upper case
* (the usual toupper function has problem with non ascii codes like function keys
*/
if
(
(
hotkey
>=
'a'
)
&&
(
hotkey
<=
'z'
)
)
hotkey
+=
'A'
-
'a'
;
if
(
(
aHotkeyCode
>=
'a'
)
&&
(
aHotkeyCode
<=
'z'
)
)
aHotkeyCode
+=
'A'
-
'a'
;
Ki_HotkeyInfo
*
HK_Descr
=
GetDescriptorFromHotkey
(
hotkey
,
s_Common_Hotkey_List
);
Ki_HotkeyInfo
*
HK_Descr
=
GetDescriptorFromHotkey
(
aHotkeyCode
,
s_Common_Hotkey_List
);
if
(
HK_Descr
==
NULL
)
HK_Descr
=
GetDescriptorFromHotkey
(
hotkey
,
s_board_edit_Hotkey_List
);
HK_Descr
=
GetDescriptorFromHotkey
(
aHotkeyCode
,
s_board_edit_Hotkey_List
);
if
(
HK_Descr
==
NULL
)
return
;
int
ll
;
// Create a wxCommandEvent that will be posted in some hot keys functions
wxCommandEvent
cmd
(
wxEVT_COMMAND_MENU_SELECTED
);
cmd
.
SetEventObject
(
this
);
int
ll
;
switch
(
HK_Descr
->
m_Idcommand
)
{
...
...
@@ -270,7 +262,7 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
GetBoard
()
->
GetCopperLayerCount
()
-
2
);
else
ll
--
;
SwitchLayer
(
DC
,
ll
);
SwitchLayer
(
a
DC
,
ll
);
break
;
case
HK_SWITCH_LAYER_TO_NEXT
:
...
...
@@ -283,39 +275,39 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
ll
=
LAYER_N_FRONT
;
else
ll
++
;
SwitchLayer
(
DC
,
ll
);
SwitchLayer
(
a
DC
,
ll
);
break
;
case
HK_SWITCH_LAYER_TO_COMPONENT
:
SwitchLayer
(
DC
,
LAYER_N_FRONT
);
SwitchLayer
(
a
DC
,
LAYER_N_FRONT
);
break
;
case
HK_SWITCH_LAYER_TO_COPPER
:
SwitchLayer
(
DC
,
LAYER_N_BACK
);
SwitchLayer
(
a
DC
,
LAYER_N_BACK
);
break
;
case
HK_SWITCH_LAYER_TO_INNER1
:
SwitchLayer
(
DC
,
LAYER_N_2
);
SwitchLayer
(
a
DC
,
LAYER_N_2
);
break
;
case
HK_SWITCH_LAYER_TO_INNER2
:
SwitchLayer
(
DC
,
LAYER_N_3
);
SwitchLayer
(
a
DC
,
LAYER_N_3
);
break
;
case
HK_SWITCH_LAYER_TO_INNER3
:
SwitchLayer
(
DC
,
LAYER_N_4
);
SwitchLayer
(
a
DC
,
LAYER_N_4
);
break
;
case
HK_SWITCH_LAYER_TO_INNER4
:
SwitchLayer
(
DC
,
LAYER_N_5
);
break
;
SwitchLayer
(
a
DC
,
LAYER_N_5
);
break
;
case
HK_SWITCH_LAYER_TO_INNER5
:
SwitchLayer
(
DC
,
LAYER_N_6
);
SwitchLayer
(
a
DC
,
LAYER_N_6
);
break
;
case
HK_SWITCH_LAYER_TO_INNER6
:
SwitchLayer
(
DC
,
LAYER_N_7
);
SwitchLayer
(
a
DC
,
LAYER_N_7
);
break
;
case
HK_HELP
:
// Display Current hotkey list
...
...
@@ -354,7 +346,7 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
case
HK_UNDO
:
case
HK_REDO
:
if
(
ItemFree
)
if
(
!
itemCurrentlyEdited
)
{
wxCommandEvent
event
(
wxEVT_COMMAND_TOOL_CLICKED
,
HK_Descr
->
m_IdMenuEvent
);
...
...
@@ -378,26 +370,24 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
break
;
case
HK_DELETE
:
OnHotkeyDeleteItem
(
DC
,
DrawStruct
);
OnHotkeyDeleteItem
(
aDC
);
break
;
case
HK_BACK_SPACE
:
if
(
m_ID_current_state
==
ID_TRACK_BUTT
&&
getActiveLayer
()
<=
LAYER_N_FRONT
)
{
if
(
ItemFree
)
if
(
!
itemCurrentlyEdited
)
{
// no track is currently being edited - select a segment and remove it.
// @todo: possibly? pass the HK command code to PcbGeneralLocateAndDisplay() so it can restrict its search to specific item types.
// @todo: use PcbGeneralLocateAndDisplay() everywhere in this source file.
DrawStruct
=
PcbGeneralLocateAndDisplay
();
aItem
=
PcbGeneralLocateAndDisplay
();
// don't let backspace delete modules!!
if
(
DrawStruct
&&
(
DrawStruct
->
Type
()
==
TYPE_TRACK
||
DrawStruct
->
Type
()
==
TYPE_VIA
)
)
if
(
aItem
&&
(
aItem
->
Type
()
==
TYPE_TRACK
||
aItem
->
Type
()
==
TYPE_VIA
)
)
{
Delete_Segment
(
DC
,
(
TRACK
*
)
DrawStruct
);
Delete_Segment
(
aDC
,
(
TRACK
*
)
aItem
);
SetCurItem
(
NULL
);
}
OnModify
();
...
...
@@ -407,7 +397,7 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
// then an element is being edited - remove the last segment.
// simple lines for debugger:
TRACK
*
track
=
(
TRACK
*
)
GetCurItem
();
track
=
Delete_Segment
(
DC
,
track
);
track
=
Delete_Segment
(
a
DC
,
track
);
SetCurItem
(
track
);
OnModify
();
}
...
...
@@ -415,17 +405,17 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
break
;
case
HK_END_TRACK
:
if
(
!
ItemFree
&&
(
GetCurItem
()
->
Type
()
==
TYPE_TRACK
)
if
(
itemCurrentlyEdited
&&
(
GetCurItem
()
->
Type
()
==
TYPE_TRACK
)
&&
(
(
GetCurItem
()
->
m_Flags
&
IS_NEW
)
!=
0
)
)
{
// A new track is in progress: call to End_Route()
DrawPanel
->
MouseToCursorSchema
();
End_Route
(
(
TRACK
*
)
GetCurItem
(),
DC
);
End_Route
(
(
TRACK
*
)
GetCurItem
(),
a
DC
);
}
break
;
case
HK_GET_AND_MOVE_FOOTPRINT
:
if
(
ItemFree
)
if
(
!
itemCurrentlyEdited
)
{
wxCommandEvent
evt
;
evt
.
SetId
(
ID_POPUP_PCB_GET_AND_MOVE_MODULE_REQUEST
);
...
...
@@ -434,7 +424,7 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
break
;
case
HK_FIND_ITEM
:
if
(
ItemFree
)
if
(
!
itemCurrentlyEdited
)
{
wxCommandEvent
evt
;
evt
.
SetId
(
ID_FIND_ITEMS
);
...
...
@@ -443,7 +433,7 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
break
;
case
HK_LOAD_BOARD
:
if
(
ItemFree
)
if
(
!
itemCurrentlyEdited
)
{
// try not to duplicate save, load code etc.
wxCommandEvent
evt
;
...
...
@@ -453,7 +443,7 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
break
;
case
HK_SAVE_BOARD
:
if
(
ItemFree
)
if
(
!
itemCurrentlyEdited
)
{
// try not to duplicate save, load code etc.
wxCommandEvent
evt
;
...
...
@@ -465,9 +455,9 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
case
HK_ADD_MICROVIA
:
// Place a micro via if a track is in progress
if
(
m_ID_current_state
!=
ID_TRACK_BUTT
)
return
;
if
(
ItemFree
)
// no track in progress: nothing to do
if
(
!
itemCurrentlyEdited
)
// no track in progress: nothing to do
break
;
if
(
GetCurItem
()
->
Type
()
!=
TYPE_TRACK
)
// Should not occur
if
(
GetCurItem
()
->
Type
()
!=
TYPE_TRACK
)
// Should not occur
return
;
if
(
(
GetCurItem
()
->
m_Flags
&
IS_NEW
)
==
0
)
return
;
...
...
@@ -477,7 +467,7 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
{
int
v_type
=
GetBoard
()
->
GetBoardDesignSettings
()
->
m_CurrentViaType
;
GetBoard
()
->
GetBoardDesignSettings
()
->
m_CurrentViaType
=
VIA_MICROVIA
;
Other_Layer_Route
(
(
TRACK
*
)
GetCurItem
(),
DC
);
Other_Layer_Route
(
(
TRACK
*
)
GetCurItem
(),
a
DC
);
GetBoard
()
->
GetBoardDesignSettings
()
->
m_CurrentViaType
=
v_type
;
if
(
DisplayOpt
.
ContrastModeDisplay
)
DrawPanel
->
Refresh
();
...
...
@@ -487,34 +477,35 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
case
HK_ADD_VIA
:
// Switch to alternate layer and Place a via if a track is in progress
if
(
m_ID_current_state
!=
ID_TRACK_BUTT
)
return
;
if
(
ItemFree
)
// no track in progress: switch layer only
if
(
!
itemCurrentlyEdited
)
// no track in progress: switch layer only
{
Other_Layer_Route
(
NULL
,
DC
);
Other_Layer_Route
(
NULL
,
a
DC
);
break
;
}
if
(
GetCurItem
()
->
Type
()
!=
TYPE_TRACK
)
return
;
if
(
(
GetCurItem
()
->
m_Flags
&
IS_NEW
)
==
0
)
return
;
Other_Layer_Route
(
(
TRACK
*
)
GetCurItem
(),
DC
);
// place via and switch layer
Other_Layer_Route
(
(
TRACK
*
)
GetCurItem
(),
a
DC
);
// place via and switch layer
if
(
DisplayOpt
.
ContrastModeDisplay
)
DrawPanel
->
Refresh
();
break
;
case
HK_SWITCH_TRACK_POSTURE
:
/* change the position of initial segment when creating new tracks
* switch from _/ to -\ .
*/
ShowNewTrackWhenMovingCursor
(
DrawPanel
,
DC
,
false
);
ShowNewTrackWhenMovingCursor
(
DrawPanel
,
a
DC
,
false
);
g_Alternate_Track_Posture
=
!
g_Alternate_Track_Posture
;
ShowNewTrackWhenMovingCursor
(
DrawPanel
,
DC
,
false
);
ShowNewTrackWhenMovingCursor
(
DrawPanel
,
a
DC
,
false
);
break
;
case
HK_ADD_NEW_TRACK
:
// Start new track
if
(
getActiveLayer
()
>
LAYER_N_FRONT
)
break
;
if
(
m_ID_current_state
!=
ID_TRACK_BUTT
&&
ItemFree
)
if
(
m_ID_current_state
!=
ID_TRACK_BUTT
&&
!
itemCurrentlyEdited
)
{
cmd
.
SetId
(
ID_TRACK_BUTT
);
GetEventHandler
()
->
ProcessEvent
(
cmd
);
...
...
@@ -523,16 +514,16 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
if
(
m_ID_current_state
!=
ID_TRACK_BUTT
)
break
;
if
(
ItemFree
)
// no track in progress:
if
(
!
itemCurrentlyEdited
)
// no track in progress:
{
TRACK
*
track
=
Begin_Route
(
NULL
,
DC
);
TRACK
*
track
=
Begin_Route
(
NULL
,
a
DC
);
SetCurItem
(
track
);
if
(
track
)
DrawPanel
->
m_AutoPAN_Request
=
true
;
}
else
if
(
GetCurItem
()
->
m_Flags
&
IS_NEW
)
{
TRACK
*
track
=
Begin_Route
(
(
TRACK
*
)
GetCurItem
(),
DC
);
TRACK
*
track
=
Begin_Route
(
(
TRACK
*
)
GetCurItem
(),
a
DC
);
// SetCurItem() must not write to the msg panel
// because a track info is displayed while moving the mouse cursor
...
...
@@ -543,20 +534,21 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
break
;
case
HK_EDIT_ITEM
:
// Edit board item
if
(
ItemFree
)
if
(
!
itemCurrentlyEdited
)
{
BOARD_ITEM
*
item
=
PcbGeneralLocateAndDisplay
();
if
(
item
==
NULL
)
BOARD_ITEM
*
item
=
PcbGeneralLocateAndDisplay
();
if
(
item
==
NULL
)
break
;
//An item is found, and some can be edited:
OnEditItemRequest
(
DC
,
item
);
OnEditItemRequest
(
a
DC
,
item
);
}
break
;
// Footprint edition:
case
HK_LOCK_UNLOCK_FOOTPRINT
:
// toggle module "MODULE_is_LOCKED" status:
// get any module, locked or not locked and toggle its locked status
if
(
ItemFree
)
if
(
!
itemCurrentlyEdited
)
module
=
Locate_Prefered_Module
(
GetBoard
(),
CURSEUR_OFF_GRILLE
|
VISIBLE_ONLY
);
else
if
(
GetCurItem
()
->
Type
()
==
TYPE_MODULE
)
...
...
@@ -569,133 +561,27 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
}
break
;
case
HK_DRAG_FOOTPRINT_OR_TRACK
:
// Start move (and drag) module or track segment
case
HK_MOVE_FOOTPRINT_OR_TRACK
:
// Start move module or track segment
if
(
PopupOn
)
break
;
// Fall through on hot key
case
HK_ROTATE_FOOTPRINT
:
// Rotation
case
HK_FLIP_FOOTPRINT
:
// move to other side
int
exit
=
0
;
if
(
m_ID_current_state
==
ID_TRACK_BUTT
)
{
if
(
ItemFree
)
DrawStruct
=
PcbGeneralLocateAndDisplay
();
else
DrawStruct
=
GetCurItem
();
if
(
DrawStruct
&&
(
DrawStruct
->
Type
()
==
TYPE_TRACK
||
DrawStruct
->
Type
()
==
TYPE_VIA
)
)
switch
(
HK_Descr
->
m_Idcommand
)
{
case
HK_DRAG_FOOTPRINT_OR_TRACK
:
// Start drag track segment
DrawPanel
->
MouseToCursorSchema
();
//Start_DragTrackSegmentAndKeepSlope( (TRACK*) DrawStruct,DC );
Start_MoveOneNodeOrSegment
(
(
TRACK
*
)
DrawStruct
,
DC
,
ID_POPUP_PCB_DRAG_TRACK_SEGMENT
);
break
;
// fall through
case
HK_MOVE_FOOTPRINT_OR_TRACK
:
// Start move track segment
DrawPanel
->
MouseToCursorSchema
();
Start_MoveOneNodeOrSegment
(
(
TRACK
*
)
DrawStruct
,
DC
,
ID_POPUP_PCB_MOVE_TRACK_NODE
);
break
;
}
else
exit
=
1
;
}
else
if
(
!
exit
)
{
if
(
ItemFree
)
{
module
=
Locate_Prefered_Module
(
GetBoard
(),
CURSEUR_OFF_GRILLE
|
IGNORE_LOCKED
|
VISIBLE_ONLY
#if defined(USE_MATCH_LAYER)
|
MATCH_LAYER
#endif
);
if
(
module
==
NULL
)
// no footprint found
{
module
=
Locate_Prefered_Module
(
GetBoard
(),
CURSEUR_OFF_GRILLE
|
VISIBLE_ONLY
);
if
(
module
)
{
// a footprint is found, but locked or on an other layer
if
(
module
->
IsLocked
()
)
{
wxString
msg
;
msg
.
Printf
(
_
(
"Footprint %s found, but locked"
),
module
->
m_Reference
->
m_Text
.
GetData
()
);
DisplayInfoMessage
(
this
,
msg
);
}
module
=
NULL
;
}
}
}
else
if
(
GetCurItem
()
->
Type
()
==
TYPE_MODULE
)
{
module
=
(
MODULE
*
)
GetCurItem
();
// @todo: might need to add a layer check in if() below
if
(
(
GetCurItem
()
->
m_Flags
==
0
)
&&
module
->
IsLocked
()
)
module
=
NULL
;
// do not move, rotate ... it.
}
if
(
module
==
NULL
)
break
;
/* I'd like to make sending to EESCHEMA edge triggered, but the
* simple mouse click on a module when the arrow icon is in play
* does not set GetCurItem() at this time, nor does a mouse click
* when the local ratsnest icon is in play set GetCurItem(), and these
* actions also call SendMessageToEESCHEMA().
* if( GetCurItem() != module )
*/
{
// Send the module via socket to EESCHEMA's search facility.
SendMessageToEESCHEMA
(
module
);
SetCurItem
(
module
);
}
switch
(
HK_Descr
->
m_Idcommand
)
{
case
HK_ROTATE_FOOTPRINT
:
// Rotation
if
(
module
->
m_Flags
==
0
)
// not currently in edit, prepare undo command
SaveCopyInUndoList
(
module
,
UR_ROTATED
,
module
->
m_Pos
);
Rotate_Module
(
DC
,
module
,
900
,
TRUE
);
break
;
case
HK_FLIP_FOOTPRINT
:
// move to other side
if
(
module
->
m_Flags
==
0
)
// not currently in edit, prepare undo command
SaveCopyInUndoList
(
module
,
UR_FLIPPED
,
module
->
m_Pos
);
Change_Side_Module
(
module
,
DC
);
break
;
case
HK_DRAG_FOOTPRINT_OR_TRACK
:
// Start drag module or track segment
OnHotkeyMoveItem
(
HK_DRAG_FOOTPRINT_OR_TRACK
,
aDC
);
break
;
case
HK_DRAG_FOOTPRINT_OR_TRACK
:
// Start move (and drag) module
g_Drag_Pistes_On
=
TRUE
;
case
HK_MOVE_ITEM
:
// Start move item
OnHotkeyMoveItem
(
HK_MOVE_ITEM
,
aDC
);
break
;
// fall through
case
HK_MOVE_FOOTPRINT_OR_TRACK
:
// Start move module
GetScreen
()
->
m_Curseur
=
module
->
m_Pos
;
DrawPanel
->
MouseToCursorSchema
();
StartMove_Module
(
module
,
DC
);
break
;
}
case
HK_ROTATE_ITEM
:
// Rotation
OnHotkeyRotateItem
(
HK_ROTATE_ITEM
,
aDC
);
break
;
module
->
DisplayInfo
(
this
);
break
;
}
case
HK_FLIP_FOOTPRINT
:
// move to other side
OnHotkeyRotateItem
(
HK_FLIP_FOOTPRINT
,
aDC
)
;
break
;
}
}
/***********************************************************/
void
WinEDA_ModuleEditFrame
::
OnHotKey
(
wxDC
*
DC
,
int
hotkey
,
void
WinEDA_ModuleEditFrame
::
OnHotKey
(
wxDC
*
a
DC
,
int
hotkey
,
EDA_BaseStruct
*
DrawStruct
)
/***********************************************************/
...
...
@@ -779,18 +665,18 @@ void WinEDA_ModuleEditFrame::OnHotKey( wxDC* DC, int hotkey,
}
/******************************************************************************/
bool
WinEDA_PcbFrame
::
OnHotkeyDeleteItem
(
wxDC
*
DC
,
EDA_BaseStruct
*
DrawStruct
)
/******************************************************************************/
/* Delete the item foun under the mouse cursor
/** Function OnHotkeyDeleteItem
* Delete the item found under the mouse cursor
* Depending on the current active tool::
* Tool track
* if a track is in progress: Delete the last segment
* else delete the entire track
* Tool module (footprint):
* Delete the module.
* @param aDC = current device context
* @return true if an item was deleted
*/
bool
WinEDA_PcbFrame
::
OnHotkeyDeleteItem
(
wxDC
*
aDC
)
{
bool
ItemFree
=
(
GetCurItem
()
==
NULL
)
||
(
GetCurItem
()
->
m_Flags
==
0
);
...
...
@@ -798,22 +684,22 @@ bool WinEDA_PcbFrame::OnHotkeyDeleteItem( wxDC* DC, EDA_BaseStruct* DrawStruct )
{
case
ID_TRACK_BUTT
:
if
(
getActiveLayer
()
>
LAYER_N_FRONT
)
return
FALSE
;
return
false
;
if
(
ItemFree
)
{
DrawStruct
=
PcbGeneralLocateAndDisplay
();
BOARD_ITEM
*
DrawStruct
=
PcbGeneralLocateAndDisplay
();
if
(
DrawStruct
&&
DrawStruct
->
Type
()
!=
TYPE_TRACK
)
return
FALSE
;
Delete_Track
(
DC
,
(
TRACK
*
)
DrawStruct
);
return
false
;
Delete_Track
(
a
DC
,
(
TRACK
*
)
DrawStruct
);
}
else
if
(
GetCurItem
()
->
Type
()
==
TYPE_TRACK
)
{
// simple lines for debugger:
TRACK
*
track
=
(
TRACK
*
)
GetCurItem
();
track
=
Delete_Segment
(
DC
,
track
);
track
=
Delete_Segment
(
a
DC
,
track
);
SetCurItem
(
track
);
OnModify
();
return
TRUE
;
return
true
;
}
break
;
...
...
@@ -823,20 +709,195 @@ bool WinEDA_PcbFrame::OnHotkeyDeleteItem( wxDC* DC, EDA_BaseStruct* DrawStruct )
MODULE
*
module
=
Locate_Prefered_Module
(
GetBoard
(),
CURSEUR_ON_GRILLE
);
if
(
module
==
NULL
)
return
FALSE
;
return
false
;
if
(
!
IsOK
(
this
,
_
(
"Delete module?"
)
)
)
return
FALSE
;
RemoveStruct
(
module
,
DC
);
return
false
;
RemoveStruct
(
module
,
a
DC
);
}
else
return
FALSE
;
return
false
;
break
;
default
:
return
FALSE
;
return
false
;
}
OnModify
();
SetCurItem
(
NULL
);
return
TRUE
;
return
true
;
}
/** Function OnHotkeyMoveItem
* Moves or drag the item (footprint, track, text .. ) found under the mouse cursor
* Only a footprint or a track can be dragged
* @param aIdCommand = the hotkey command id
* @param aDC = current device context
* @return true if an item was moved
*/
bool
WinEDA_PcbFrame
::
OnHotkeyMoveItem
(
int
aIdCommand
,
wxDC
*
aDC
)
{
bool
itemCurrentlyEdited
=
(
GetCurItem
()
&&
GetCurItem
()
->
m_Flags
);
if
(
itemCurrentlyEdited
)
return
false
;
BOARD_ITEM
*
item
=
NULL
;
if
(
m_ID_current_state
==
ID_COMPONENT_BUTT
)
{
item
=
Locate_Prefered_Module
(
GetBoard
(),
CURSEUR_OFF_GRILLE
|
IGNORE_LOCKED
|
VISIBLE_ONLY
#if defined(USE_MATCH_LAYER)
|
MATCH_LAYER
#endif
);
if
(
item
==
NULL
)
// no footprint found
item
=
Locate_Prefered_Module
(
GetBoard
(),
CURSEUR_OFF_GRILLE
|
VISIBLE_ONLY
);
}
if
(
item
==
NULL
)
item
=
PcbGeneralLocateAndDisplay
();
if
(
item
==
NULL
)
return
false
;
SetCurItem
(
item
);
switch
(
item
->
Type
()
)
{
case
TYPE_TRACK
:
case
TYPE_VIA
:
if
(
aIdCommand
==
HK_MOVE_ITEM
)
{
Start_MoveOneNodeOrSegment
(
(
TRACK
*
)
item
,
aDC
,
ID_POPUP_PCB_MOVE_TRACK_NODE
);
return
true
;
}
if
(
aIdCommand
==
HK_DRAG_FOOTPRINT_OR_TRACK
)
{
//Start_DragTrackSegmentAndKeepSlope( (TRACK*) DrawStruct, aDC );
Start_MoveOneNodeOrSegment
(
(
TRACK
*
)
item
,
aDC
,
ID_POPUP_PCB_DRAG_TRACK_SEGMENT
);
return
true
;
}
break
;
case
TYPE_MODULE
:
{
MODULE
*
module
=
(
MODULE
*
)
item
;
// a footprint is found, but locked or on an other layer
if
(
module
->
IsLocked
()
)
{
wxString
msg
;
msg
.
Printf
(
_
(
"Footprint %s found, but locked"
),
module
->
m_Reference
->
m_Text
.
GetData
()
);
DisplayInfoMessage
(
this
,
msg
);
break
;
}
// Send the module via socket to EESCHEMA's search facility.
SendMessageToEESCHEMA
(
module
);
// Start move module
GetScreen
()
->
m_Curseur
=
module
->
m_Pos
;
DrawPanel
->
MouseToCursorSchema
();
if
(
aIdCommand
==
HK_DRAG_FOOTPRINT_OR_TRACK
)
g_Drag_Pistes_On
=
true
;
StartMove_Module
(
module
,
aDC
);
}
return
true
;
default
:
break
;
}
return
false
;
}
/** Function OnHotkeyRotateItem
* Rotate the item (text or footprint) found under the mouse cursor
* @param aIdCommand = the hotkey command id
* @param aDC = current device context
* @return true if an item was moved
*/
bool
WinEDA_PcbFrame
::
OnHotkeyRotateItem
(
int
aIdCommand
,
wxDC
*
aDC
)
{
bool
itemCurrentlyEdited
=
(
GetCurItem
()
&&
GetCurItem
()
->
m_Flags
);
MODULE
*
module
=
NULL
;
if
(
!
itemCurrentlyEdited
)
{
module
=
Locate_Prefered_Module
(
GetBoard
(),
CURSEUR_OFF_GRILLE
|
IGNORE_LOCKED
|
VISIBLE_ONLY
#if defined(USE_MATCH_LAYER)
|
MATCH_LAYER
#endif
);
if
(
module
==
NULL
)
// no footprint found
{
module
=
Locate_Prefered_Module
(
GetBoard
(),
CURSEUR_OFF_GRILLE
|
VISIBLE_ONLY
);
if
(
module
)
{
// a footprint is found, but locked or on an other layer
if
(
module
->
IsLocked
()
)
{
wxString
msg
;
msg
.
Printf
(
_
(
"Footprint %s found, but locked"
),
module
->
m_Reference
->
m_Text
.
GetData
()
);
DisplayInfoMessage
(
this
,
msg
);
}
module
=
NULL
;
}
}
}
else
if
(
GetCurItem
()
->
Type
()
==
TYPE_MODULE
)
{
module
=
(
MODULE
*
)
GetCurItem
();
// @todo: might need to add a layer check in if() below
if
(
(
GetCurItem
()
->
m_Flags
==
0
)
&&
module
->
IsLocked
()
)
module
=
NULL
;
// do not move, rotate ... it.
}
if
(
module
==
NULL
)
return
false
;
/* I'd like to make sending to EESCHEMA edge triggered, but the
* simple mouse click on a module when the arrow icon is in play
* does not set GetCurItem() at this time, nor does a mouse click
* when the local ratsnest icon is in play set GetCurItem(), and these
* actions also call SendMessageToEESCHEMA().
* if( GetCurItem() != module )
*/
{
// Send the module via socket to EESCHEMA's search facility.
SendMessageToEESCHEMA
(
module
);
SetCurItem
(
module
);
}
switch
(
aIdCommand
)
{
case
HK_ROTATE_ITEM
:
// Rotation
if
(
module
->
m_Flags
==
0
)
// not currently in edit, prepare undo command
SaveCopyInUndoList
(
module
,
UR_ROTATED
,
module
->
m_Pos
);
Rotate_Module
(
aDC
,
module
,
900
,
true
);
break
;
case
HK_FLIP_FOOTPRINT
:
// move to other side
if
(
module
->
m_Flags
==
0
)
// not currently in edit, prepare undo command
SaveCopyInUndoList
(
module
,
UR_FLIPPED
,
module
->
m_Pos
);
Change_Side_Module
(
module
,
aDC
);
break
;
}
module
->
DisplayInfo
(
this
);
return
true
;
}
pcbnew/hotkeys.h
View file @
0e7fa222
...
...
@@ -13,8 +13,8 @@
enum
hotkey_id_commnand
{
HK_DELETE
=
HK_COMMON_END
,
HK_BACK_SPACE
,
HK_ROTATE_
FOOTPRINT
,
HK_MOVE_
FOOTPRINT_OR_TRACK
,
HK_ROTATE_
ITEM
,
HK_MOVE_
ITEM
,
HK_DRAG_FOOTPRINT_OR_TRACK
,
HK_FLIP_FOOTPRINT
,
HK_GET_AND_MOVE_FOOTPRINT
,
...
...
@@ -48,7 +48,6 @@ enum hotkey_id_commnand {
HK_SWITCH_LAYER_TO_INNER13
,
HK_SWITCH_LAYER_TO_INNER14
,
HK_ADD_MODULE
,
HK_MOVE_TRACK
,
HK_SLIDE_TRACK
};
...
...
pcbnew/onrightclick.cpp
View file @
0e7fa222
...
...
@@ -169,8 +169,9 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu )
}
if
(
!
flags
)
{
msg
=
AddHotkeyName
(
_
(
"Move Drawing"
),
s_Board_Editor_Hokeys_Descr
,
HK_MOVE_ITEM
);
ADD_MENUITEM
(
aPopMenu
,
ID_POPUP_PCB_MOVE_DRAWING_REQUEST
,
_
(
"Move Drawing"
)
,
move_xpm
);
msg
,
move_xpm
);
ADD_MENUITEM
(
aPopMenu
,
ID_POPUP_PCB_EDIT_DRAWING
,
_
(
"Edit Drawing"
),
edit_xpm
);
ADD_MENUITEM
(
aPopMenu
,
ID_POPUP_PCB_DELETE_DRAWING
,
_
(
"Delete Drawing"
),
delete_xpm
);
...
...
@@ -225,8 +226,8 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu )
case
TYPE_MIRE
:
if
(
!
flags
)
{
ADD_MENUITEM
(
aPopMenu
,
ID_POPUP_PCB_MOVE_MIRE_REQUEST
,
_
(
"Move Target"
)
,
move_xpm
);
msg
=
AddHotkeyName
(
_
(
"Move Target"
),
s_Board_Editor_Hokeys_Descr
,
HK_MOVE_ITEM
);
ADD_MENUITEM
(
aPopMenu
,
ID_POPUP_PCB_MOVE_MIRE_REQUEST
,
msg
,
move_xpm
);
msg
=
AddHotkeyName
(
_
(
"Edit Target"
),
s_Board_Editor_Hokeys_Descr
,
HK_EDIT_ITEM
);
ADD_MENUITEM
(
aPopMenu
,
ID_POPUP_PCB_EDIT_MIRE
,
msg
,
edit_xpm
);
...
...
@@ -601,8 +602,9 @@ void WinEDA_PcbFrame::createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu
_
(
"Remove Filled Areas in Zone"
),
fill_zone_xpm
);
}
msg
=
AddHotkeyName
(
_
(
"Move Zone"
),
s_Board_Editor_Hokeys_Descr
,
HK_MOVE_ITEM
);
ADD_MENUITEM
(
zones_menu
,
ID_POPUP_PCB_MOVE_ZONE_OUTLINES
,
_
(
"Move Zone"
)
,
move_xpm
);
msg
,
move_xpm
);
msg
=
AddHotkeyName
(
_
(
"Edit Zone Params"
),
s_Board_Editor_Hokeys_Descr
,
HK_EDIT_ITEM
);
ADD_MENUITEM
(
zones_menu
,
ID_POPUP_PCB_EDIT_ZONE_PARAMS
,
...
...
@@ -636,14 +638,14 @@ void WinEDA_PcbFrame::createPopUpMenuForFootprints( MODULE* aModule, wxMenu* men
ADD_MENUITEM_WITH_SUBMENU
(
menu
,
sub_menu_footprint
,
-
1
,
msg
,
module_xpm
);
if
(
!
flags
)
{
msg
=
AddHotkeyName
(
_
(
"Move"
),
s_Board_Editor_Hokeys_Descr
,
HK_MOVE_
FOOTPRINT_OR_TRACK
);
msg
=
AddHotkeyName
(
_
(
"Move"
),
s_Board_Editor_Hokeys_Descr
,
HK_MOVE_
ITEM
);
ADD_MENUITEM
(
sub_menu_footprint
,
ID_POPUP_PCB_MOVE_MODULE_REQUEST
,
msg
,
move_module_xpm
);
msg
=
AddHotkeyName
(
_
(
"Drag"
),
s_Board_Editor_Hokeys_Descr
,
HK_DRAG_FOOTPRINT_OR_TRACK
);
ADD_MENUITEM
(
sub_menu_footprint
,
ID_POPUP_PCB_DRAG_MODULE_REQUEST
,
msg
,
drag_module_xpm
);
}
msg
=
AddHotkeyName
(
_
(
"Rotate +"
),
s_Board_Editor_Hokeys_Descr
,
HK_ROTATE_
FOOTPRINT
);
msg
=
AddHotkeyName
(
_
(
"Rotate +"
),
s_Board_Editor_Hokeys_Descr
,
HK_ROTATE_
ITEM
);
ADD_MENUITEM
(
sub_menu_footprint
,
ID_POPUP_PCB_ROTATE_MODULE_COUNTERCLOCKWISE
,
msg
,
rotate_module_pos_xpm
);
ADD_MENUITEM
(
sub_menu_footprint
,
ID_POPUP_PCB_ROTATE_MODULE_CLOCKWISE
,
...
...
@@ -681,8 +683,11 @@ void WinEDA_PcbFrame::createPopUpMenuForFpTexts( TEXTE_MODULE* FpText, wxMenu* m
ADD_MENUITEM_WITH_SUBMENU
(
menu
,
sub_menu_Fp_text
,
-
1
,
msg
,
footprint_text_xpm
);
if
(
!
flags
)
{
msg
=
AddHotkeyName
(
_
(
"Move"
),
s_Board_Editor_Hokeys_Descr
,
HK_MOVE_ITEM
);
ADD_MENUITEM
(
sub_menu_Fp_text
,
ID_POPUP_PCB_MOVE_TEXTMODULE_REQUEST
,
_
(
"Move"
),
move_field_xpm
);
msg
,
move_field_xpm
);
}
ADD_MENUITEM
(
sub_menu_Fp_text
,
ID_POPUP_PCB_ROTATE_TEXTMODULE
,
_
(
"Rotate"
),
rotate_field_xpm
);
...
...
@@ -734,8 +739,9 @@ void WinEDA_PcbFrame::createPopUpMenuForFpPads( D_PAD* Pad, wxMenu* menu )
sub_menu_Pad
=
new
wxMenu
;
ADD_MENUITEM_WITH_SUBMENU
(
menu
,
sub_menu_Pad
,
-
1
,
msg
,
pad_xpm
);
msg
=
AddHotkeyName
(
_
(
"Move"
),
s_Board_Editor_Hokeys_Descr
,
HK_MOVE_ITEM
);
ADD_MENUITEM
(
sub_menu_Pad
,
ID_POPUP_PCB_MOVE_PAD_REQUEST
,
_
(
"Move"
)
,
move_pad_xpm
);
msg
,
move_pad_xpm
);
ADD_MENUITEM
(
sub_menu_Pad
,
ID_POPUP_PCB_DRAG_PAD_REQUEST
,
_
(
"Drag"
),
drag_pad_xpm
);
...
...
@@ -791,8 +797,9 @@ void WinEDA_PcbFrame::createPopUpMenuForTexts( TEXTE_PCB* Text, wxMenu* menu )
if
(
!
flags
)
{
msg
=
AddHotkeyName
(
_
(
"Move"
),
s_Board_Editor_Hokeys_Descr
,
HK_MOVE_ITEM
);
ADD_MENUITEM
(
sub_menu_Text
,
ID_POPUP_PCB_MOVE_TEXTEPCB_REQUEST
,
_
(
"Move"
)
,
move_text_xpm
);
msg
,
move_text_xpm
);
}
ADD_MENUITEM
(
sub_menu_Text
,
ID_POPUP_PCB_ROTATE_TEXTEPCB
,
_
(
"Rotate"
),
rotate_pos_xpm
);
...
...
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