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
ba04f832
Commit
ba04f832
authored
Sep 22, 2007
by
CHARRAS
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
small change on hotkey management. Added: drag component
parent
3e3ae892
Changes
15
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
814 additions
and
670 deletions
+814
-670
change_log.txt
change_log.txt
+12
-0
common_plotPS_functions.cpp
common/common_plotPS_functions.cpp
+5
-4
dcsvg.cpp
common/dcsvg.cpp
+530
-417
hotkeys_basic.cpp
common/hotkeys_basic.cpp
+156
-151
cvpcb.h
cvpcb/cvpcb.h
+1
-1
hotkeys.cpp
eeschema/hotkeys.cpp
+51
-47
hotkeys.h
eeschema/hotkeys.h
+1
-0
onrightclick.cpp
eeschema/onrightclick.cpp
+3
-0
schedit.cpp
eeschema/schedit.cpp
+11
-4
hotkeys.cpp
gerbview/hotkeys.cpp
+3
-2
build_version.h
include/build_version.h
+1
-1
hotkeys_basic.h
include/hotkeys_basic.h
+18
-17
id.h
include/id.h
+1
-1
libs.linux
libs.linux
+9
-16
hotkeys.cpp
pcbnew/hotkeys.cpp
+12
-9
No files found.
change_log.txt
View file @
ba04f832
...
@@ -4,6 +4,18 @@ Started 2007-June-11
...
@@ -4,6 +4,18 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with
Please add newer entries at the top, list the date and your name with
email address.
email address.
2007-sept-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+ all
* small change in hotkeys handling
(Ki_HotkeyInfo: new member m_IdMenuEvent to call an existing event handler from a hotkey list)
+ eeschema:
* added drag component in pop up menu and hotkeys
* plot svg format: incorrect arc draw fixed
2007-Sep-22 UPDATE Dick Hollenbeck <dick@softplc.com>
2007-Sep-22 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
================================================================================
+ pcbnew
+ pcbnew
...
...
common/common_plotPS_functions.cpp
View file @
ba04f832
...
@@ -166,10 +166,11 @@ char Line[256];
...
@@ -166,10 +166,11 @@ char Line[256];
void
PlotPolyPS
(
int
nb_segm
,
int
*
coord
,
int
fill
,
int
width
)
void
PlotPolyPS
(
int
nb_segm
,
int
*
coord
,
int
fill
,
int
width
)
/*****************************************************************/
/*****************************************************************/
/* Trace un polygone ( ferme si rempli ) en format POSTSCRIPT
/* Draw a polygon ( a filled polygon if fill == 1 ) in POSTSCRIPT format
* coord = tableau des coord des sommets
* @param nb_segm = corner count
* nb_segm = nombre de coord ( 1 coord = 2 elements: X et Y du tableau )
* @param coord = corner list (a corner uses 2 int = X coordinate followed by Y coordinate
* fill : si != 0 polygone rempli
* @param fill :if == 0 : filled polygon
* @param width = line width
*/
*/
{
{
int
ii
;
int
ii
;
...
...
common/dcsvg.cpp
View file @
ba04f832
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Name: svg.cpp
// Name: svg.cpp
// Purpose: SVG plot
// Purpose: SVG plot
// Author: Chris Elliott
// Author: Chris Elliott
...
@@ -23,11 +24,12 @@
...
@@ -23,11 +24,12 @@
#include "wx/image.h"
#include "wx/image.h"
#define wxSVG_DEBUG FALSE
#define wxSVG_DEBUG FALSE
// or TRUE to see the calls being executed
// or TRUE to see the calls being executed
#define newline wxString(
wxT("\n")
)
#define newline wxString(
wxT( "\n" )
)
#define space wxString(
wxT(" ")
)
#define space wxString(
wxT( " " )
)
#define semicolon wxString(
wxT(";")
)
#define semicolon wxString(
wxT( ";" )
)
#define wx_round(
a) (int)((a)+.5
)
#define wx_round(
a ) (int) ( (a) + .5
)
#ifdef __BORLANDC__
#ifdef __BORLANDC__
#pragma warn -rch
#pragma warn -rch
...
@@ -43,56 +45,63 @@
...
@@ -43,56 +45,63 @@
#define pt2mm 0.352777777778
#define pt2mm 0.352777777778
#endif
#endif
static
inline
double
DegToRad
(
double
deg
)
{
return
(
deg
*
M_PI
)
/
180.0
;
}
;
static
inline
double
DegToRad
(
double
deg
)
{
return
(
deg
*
M_PI
)
/
180.0
;
};
wxString
wxColStr
(
wxColour
c
)
wxString
wxColStr
(
wxColour
c
)
{
{
unsigned
char
r
,
g
,
b
;
unsigned
char
r
,
g
,
b
;
r
=
c
.
Red
();
g
=
c
.
Green
();
r
=
c
.
Red
();
b
=
c
.
Blue
();
g
=
c
.
Green
();
b
=
c
.
Blue
();
// possible Unicode bug here
// possible Unicode bug here
wxString
s
=
wxDecToHex
(
r
)
+
wxDecToHex
(
g
)
+
wxDecToHex
(
b
)
;
wxString
s
=
wxDecToHex
(
r
)
+
wxDecToHex
(
g
)
+
wxDecToHex
(
b
)
;
return
s
;
return
s
;
}
}
wxString
wxBrushString
(
wxColour
c
,
int
style
)
wxString
wxBrushString
(
wxColour
c
,
int
style
)
{
{
wxString
s
=
wxT
(
"fill:#"
)
+
wxColStr
(
c
)
+
semicolon
+
space
;
wxString
s
=
wxT
(
"fill:#"
)
+
wxColStr
(
c
)
+
semicolon
+
space
;
switch
(
style
)
switch
(
style
)
{
{
case
wxSOLID
:
case
wxSOLID
:
s
=
s
+
wxT
(
"fill-opacity:1.0; "
);
s
=
s
+
wxT
(
"fill-opacity:1.0; "
);
break
;
break
;
case
wxTRANSPARENT
:
s
=
s
+
wxT
(
"fill-opacity:0.0; "
);
break
;
default
:
case
wxTRANSPARENT
:
wxASSERT_MSG
(
FALSE
,
wxT
(
"wxSVGFileDC::Requested Brush Style not available"
))
;
s
=
s
+
wxT
(
"fill-opacity:0.0; "
);
break
;
default:
wxASSERT_MSG
(
FALSE
,
wxT
(
"wxSVGFileDC::Requested Brush Style not available"
)
);
}
}
s
=
s
+
newline
;
return
s
;
s
=
s
+
newline
;
return
s
;
}
}
/***********************************************************************/
/***********************************************************************/
void
wxSVGFileDC
::
Init
(
wxString
f
,
int
Width
,
int
Height
,
float
dpi
)
void
wxSVGFileDC
::
Init
(
wxString
f
,
int
Width
,
int
Height
,
float
dpi
)
/***********************************************************************/
/***********************************************************************/
/* set up things first wxDCBase does all this?
/* set up things first wxDCBase does all this?
*/
*/
{
{
m_width
=
Width
;
m_width
=
Width
;
m_height
=
Height
;
m_height
=
Height
;
m_clipping
=
FALSE
;
m_clipping
=
FALSE
;
m_OK
=
TRUE
;
m_OK
=
TRUE
;
m_mm_to_pix_x
=
dpi
/
25.4
;
m_mm_to_pix_x
=
dpi
/
25.4
;
m_mm_to_pix_y
=
dpi
/
25.4
;
m_mm_to_pix_y
=
dpi
/
25.4
;
m_signX
=
m_signY
=
1
;
m_signX
=
m_signY
=
1
;
...
@@ -101,8 +110,8 @@ void wxSVGFileDC::Init (wxString f, int Width, int Height, float dpi)
...
@@ -101,8 +110,8 @@ void wxSVGFileDC::Init (wxString f, int Width, int Height, float dpi)
m_OriginX
=
m_OriginY
=
0
;
m_OriginX
=
m_OriginY
=
0
;
m_logicalOriginX
=
m_logicalOriginY
=
0
;
m_logicalOriginX
=
m_logicalOriginY
=
0
;
m_logicalScaleX
=
m_logicalScaleY
=
0
;
m_logicalScaleX
=
m_logicalScaleY
=
0
;
m_scaleX
=
m_scaleY
=
1.0
;
m_scaleX
=
m_scaleY
=
1.0
;
m_logicalFunction
=
wxCOPY
;
m_logicalFunction
=
wxCOPY
;
m_backgroundMode
=
wxTRANSPARENT
;
m_backgroundMode
=
wxTRANSPARENT
;
...
@@ -117,411 +126,483 @@ void wxSVGFileDC::Init (wxString f, int Width, int Height, float dpi)
...
@@ -117,411 +126,483 @@ void wxSVGFileDC::Init (wxString f, int Width, int Height, float dpi)
m_font
=
*
wxNORMAL_FONT
;
m_font
=
*
wxNORMAL_FONT
;
m_brush
=
*
wxWHITE_BRUSH
;
m_brush
=
*
wxWHITE_BRUSH
;
m_graphics_changed
=
TRUE
;
m_graphics_changed
=
TRUE
;
////////////////////code here
////////////////////code here
m_outfile
=
new
wxFileOutputStream
(
f
)
;
m_outfile
=
new
wxFileOutputStream
(
f
)
;
m_OK
=
m_outfile
->
Ok
();
m_OK
=
m_outfile
->
Ok
();
if
(
m_OK
)
if
(
m_OK
)
{
{
m_filename
=
f
;
m_filename
=
f
;
m_sub_images
=
0
;
m_sub_images
=
0
;
wxString
s
;
wxString
s
;
s
=
wxT
(
"<?xml version=
\"
1.0
\"
standalone=
\"
no
\"
?>"
)
;
s
=
s
+
newline
;
s
=
wxT
(
"<?xml version=
\"
1.0
\"
standalone=
\"
no
\"
?>"
);
s
=
s
+
newline
;
write
(
s
);
write
(
s
);
s
=
wxT
(
"<!DOCTYPE svg PUBLIC
\"
-//W3C//DTD SVG 1.1//EN
\"
"
)
+
newline
;
s
=
wxT
(
"<!DOCTYPE svg PUBLIC
\"
-//W3C//DTD SVG 1.1//EN
\"
"
)
+
newline
;
write
(
s
);
write
(
s
);
s
=
wxT
(
"
\"
http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd
\"
> "
)
+
newline
;
s
=
wxT
(
"
\"
http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd
\"
> "
)
+
newline
;
write
(
s
);
write
(
s
);
s
.
Printf
(
wxT
(
"<svg
\n
"
)
);
s
.
Printf
(
wxT
(
"<svg
\n
"
)
);
write
(
s
);
write
(
s
);
s
.
Printf
(
wxT
(
" xmlns=
\"
http://www.w3.org/2000/svg
\"\n
"
)
);
s
.
Printf
(
wxT
(
" xmlns=
\"
http://www.w3.org/2000/svg
\"\n
"
)
);
write
(
s
);
write
(
s
);
s
.
Printf
(
wxT
(
" version=
\"
1.1
\"\n
"
)
);
s
.
Printf
(
wxT
(
" version=
\"
1.1
\"\n
"
)
);
write
(
s
);
write
(
s
);
s
.
Printf
(
wxT
(
" width=
\"
%.2gcm
\"
height=
\"
%.2gcm
\"
viewBox=
\"
0 0 %d %d
\"\n
"
),
float
(
Width
)
/
dpi
*
2.54
,
float
(
Height
)
/
dpi
*
2.54
,
Width
,
Height
);
s
.
Printf
(
wxT
(
" width=
\"
%.2gcm
\"
height=
\"
%.2gcm
\"
viewBox=
\"
0 0 %d %d
\"\n
"
),
write
(
s
);
float
(
Width
)
/
dpi
*
2.54
,
float
(
Height
)
/
dpi
*
2.54
,
Width
,
Height
);
s
.
Printf
(
wxT
(
">
\n
"
)
);
write
(
s
);
write
(
s
);
s
.
Printf
(
wxT
(
">
\n
"
)
);
write
(
s
);
s
=
wxT
(
" <title>SVG Picture created as "
)
+
wxFileNameFromPath
(
f
)
+
wxT
(
" </title>"
)
+
newline
;
write
(
s
);
s
=
wxT
(
" <title>SVG Picture created as "
)
+
wxFileNameFromPath
(
f
)
+
s
=
wxString
(
wxT
(
" <desc>Picture generated by wxSVG "
))
+
wxSVGVersion
+
wxT
(
" </desc>"
)
+
newline
;
wxT
(
" </title>"
)
+
newline
;
write
(
s
);
write
(
s
);
s
=
wxT
(
" <g style=
\"
fill:black; stroke:black; stroke-width:1
\"
>"
)
+
newline
;
s
=
wxString
(
wxT
(
" <desc>Picture generated by wxSVG "
)
)
+
wxSVGVersion
+
wxT
(
write
(
s
);
" </desc>"
)
+
newline
;
write
(
s
);
s
=
wxT
(
" <g style=
\"
fill:black; stroke:black; stroke-width:1
\"
>"
)
+
newline
;
write
(
s
);
}
}
}
}
// constructors
// constructors
wxSVGFileDC
::
wxSVGFileDC
(
wxString
f
)
wxSVGFileDC
::
wxSVGFileDC
(
wxString
f
)
{
{
// quarter 640x480 screen display at 72 dpi
// quarter 640x480 screen display at 72 dpi
Init
(
f
,
320
,
240
,
72.0
);
Init
(
f
,
320
,
240
,
72.0
);
};
};
wxSVGFileDC
::
wxSVGFileDC
(
wxString
f
,
int
Width
,
int
Height
)
wxSVGFileDC
::
wxSVGFileDC
(
wxString
f
,
int
Width
,
int
Height
)
{
{
Init
(
f
,
Width
,
Height
,
72.0
);
Init
(
f
,
Width
,
Height
,
72.0
);
};
};
wxSVGFileDC
::
wxSVGFileDC
(
wxString
f
,
int
Width
,
int
Height
,
float
dpi
)
wxSVGFileDC
::
wxSVGFileDC
(
wxString
f
,
int
Width
,
int
Height
,
float
dpi
)
{
{
Init
(
f
,
Width
,
Height
,
dpi
);
Init
(
f
,
Width
,
Height
,
dpi
);
};
};
wxSVGFileDC
::~
wxSVGFileDC
()
wxSVGFileDC
::~
wxSVGFileDC
()
{
{
wxString
s
=
wxT
(
"</g>
\n
</svg>
\n
"
)
;
wxString
s
=
wxT
(
"</g>
\n
</svg>
\n
"
);
write
(
s
);
delete
m_outfile
;
write
(
s
);
delete
m_outfile
;
}
}
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
void
wxSVGFileDC
::
DoDrawLine
(
wxCoord
x1
,
wxCoord
y1
,
wxCoord
x2
,
wxCoord
y2
)
void
wxSVGFileDC
::
DoDrawLine
(
wxCoord
x1
,
wxCoord
y1
,
wxCoord
x2
,
wxCoord
y2
)
{
{
if
(
m_graphics_changed
)
NewGraphics
();
if
(
m_graphics_changed
)
wxString
s
;
NewGraphics
();
s
.
Printf
(
wxT
(
"<path d=
\"
M%d %d L%d %d
\"
/>
\n
"
),
x1
,
y1
,
x2
,
y2
);
wxString
s
;
if
(
m_OK
)
s
.
Printf
(
wxT
(
"<path d=
\"
M%d %d L%d %d
\"
/>
\n
"
),
x1
,
y1
,
x2
,
y2
);
if
(
m_OK
)
{
{
write
(
s
);
write
(
s
);
}
}
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DrawLine Call executed"
))
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DrawLine Call executed"
)
)
;
CalcBoundingBox
(
x1
,
y1
)
;
CalcBoundingBox
(
x1
,
y1
)
;
CalcBoundingBox
(
x2
,
y2
)
;
CalcBoundingBox
(
x2
,
y2
)
;
return
;
return
;
};
};
void
wxSVGFileDC
::
DoDrawLines
(
int
n
,
wxPoint
points
[],
wxCoord
xoffset
,
wxCoord
yoffset
)
void
wxSVGFileDC
::
DoDrawLines
(
int
n
,
wxPoint
points
[],
wxCoord
xoffset
,
wxCoord
yoffset
)
{
{
for
(
int
i
=
1
;
i
<
n
;
i
++
)
for
(
int
i
=
1
;
i
<
n
;
i
++
)
{
{
DoDrawLine
(
points
[
i
-
1
].
x
+
xoffset
,
points
[
i
-
1
].
y
+
yoffset
,
DoDrawLine
(
points
[
i
-
1
].
x
+
xoffset
,
points
[
i
-
1
].
y
+
yoffset
,
points
[
i
].
x
+
xoffset
,
points
[
i
].
y
+
yoffset
)
;
points
[
i
].
x
+
xoffset
,
points
[
i
].
y
+
yoffset
)
;
}
}
}
}
void
wxSVGFileDC
::
DoDrawPoint
(
wxCoord
x1
,
wxCoord
y1
)
void
wxSVGFileDC
::
DoDrawPoint
(
wxCoord
x1
,
wxCoord
y1
)
{
{
wxString
s
;
wxString
s
;
if
(
m_graphics_changed
)
NewGraphics
();
s
=
wxT
(
"<g style =
\"
stroke-linecap:round;
\"
> "
)
+
newline
;
if
(
m_graphics_changed
)
write
(
s
);
NewGraphics
();
DrawLine
(
x1
,
y1
,
x1
,
y1
);
s
=
wxT
(
"<g style =
\"
stroke-linecap:round;
\"
> "
)
+
newline
;
s
=
wxT
(
"</g>"
);
write
(
s
);
write
(
s
);
DrawLine
(
x1
,
y1
,
x1
,
y1
);
s
=
wxT
(
"</g>"
);
write
(
s
);
}
}
void
wxSVGFileDC
::
DoDrawCheckMark
(
wxCoord
x1
,
wxCoord
y1
,
wxCoord
width
,
wxCoord
height
)
void
wxSVGFileDC
::
DoDrawCheckMark
(
wxCoord
x1
,
wxCoord
y1
,
wxCoord
width
,
wxCoord
height
)
{
{
wxDCBase
::
DoDrawCheckMark
(
x1
,
y1
,
width
,
height
)
;
wxDCBase
::
DoDrawCheckMark
(
x1
,
y1
,
width
,
height
)
;
}
}
void
wxSVGFileDC
::
DoDrawText
(
const
wxString
&
text
,
wxCoord
x1
,
wxCoord
y1
)
void
wxSVGFileDC
::
DoDrawText
(
const
wxString
&
text
,
wxCoord
x1
,
wxCoord
y1
)
{
{
DoDrawRotatedText
(
text
,
x1
,
y1
,
0.0
);
DoDrawRotatedText
(
text
,
x1
,
y1
,
0.0
);
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DrawText Call executed"
))
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DrawText Call executed"
)
)
;
}
}
void
wxSVGFileDC
::
DoDrawRotatedText
(
const
wxString
&
sText
,
wxCoord
x
,
wxCoord
y
,
double
angle
)
void
wxSVGFileDC
::
DoDrawRotatedText
(
const
wxString
&
sText
,
wxCoord
x
,
wxCoord
y
,
double
angle
)
{
{
//known bug; if the font is drawn in a scaled DC, it will not behave exactly as wxMSW
//known bug; if the font is drawn in a scaled DC, it will not behave exactly as wxMSW
if
(
m_graphics_changed
)
NewGraphics
();
if
(
m_graphics_changed
)
NewGraphics
();
wxString
s
,
sTmp
;
wxString
s
,
sTmp
;
// calculate bounding box
// calculate bounding box
wxCoord
w
,
h
,
desc
;
wxCoord
w
,
h
,
desc
;
DoGetTextExtent
(
sText
,
&
w
,
&
h
,
&
desc
);
DoGetTextExtent
(
sText
,
&
w
,
&
h
,
&
desc
);
double
rad
=
DegToRad
(
angle
);
double
rad
=
DegToRad
(
angle
);
// wxT("upper left") and wxT("upper right")
// wxT("upper left") and wxT("upper right")
CalcBoundingBox
(
x
,
y
);
CalcBoundingBox
(
x
,
y
);
CalcBoundingBox
(
(
wxCoord
)(
x
+
w
*
cos
(
rad
)),
(
wxCoord
)(
y
-
h
*
sin
(
rad
))
);
CalcBoundingBox
(
(
wxCoord
)
(
x
+
w
*
cos
(
rad
)
),
(
wxCoord
)
(
y
-
h
*
sin
(
rad
)
)
);
// wxT("bottom left") and wxT("bottom right")
// wxT("bottom left") and wxT("bottom right")
x
+=
(
wxCoord
)
(
h
*
sin
(
rad
)
);
x
+=
(
wxCoord
)
(
h
*
sin
(
rad
)
);
y
+=
(
wxCoord
)
(
h
*
cos
(
rad
)
);
y
+=
(
wxCoord
)
(
h
*
cos
(
rad
)
);
CalcBoundingBox
(
x
,
y
);
CalcBoundingBox
(
x
,
y
);
CalcBoundingBox
(
(
wxCoord
)(
x
+
h
*
sin
(
rad
)),
(
wxCoord
)(
y
+
h
*
cos
(
rad
))
);
CalcBoundingBox
(
(
wxCoord
)
(
x
+
h
*
sin
(
rad
)
),
(
wxCoord
)
(
y
+
h
*
cos
(
rad
)
)
);
if
(
m_backgroundMode
==
wxSOLID
)
if
(
m_backgroundMode
==
wxSOLID
)
{
{
// draw background first
// draw background first
// just like DoDrawRectangle except we pass the text color to it and set the border to a 1 pixel wide text background
// just like DoDrawRectangle except we pass the text color to it and set the border to a 1 pixel wide text background
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::Draw Rotated Text Call plotting text background"
))
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
sTmp
.
Printf
(
wxT
(
" <rect x=
\"
%d
\"
y=
\"
%d
\"
width=
\"
%d
\"
height=
\"
%d
\"
"
),
x
,
y
+
desc
-
h
,
w
,
h
);
wxT
(
"wxSVGFileDC::Draw Rotated Text Call plotting text background"
)
);
s
=
sTmp
+
wxT
(
"style=
\"
fill:#"
)
+
wxColStr
(
m_textBackgroundColour
)
+
wxT
(
"; "
)
;
sTmp
.
Printf
(
wxT
(
s
=
s
+
wxT
(
"stroke-width:1; stroke:#"
)
+
wxColStr
(
m_textBackgroundColour
)
+
wxT
(
"; "
)
;
" <rect x=
\"
%d
\"
y=
\"
%d
\"
width=
\"
%d
\"
height=
\"
%d
\"
"
),
x
,
y
+
desc
-
sTmp
.
Printf
(
wxT
(
"
\"
transform=
\"
rotate( %.2g %d %d )
\"
>"
),
-
angle
,
x
,
y
)
;
h
,
w
,
h
);
s
=
s
+
sTmp
+
newline
;
s
=
sTmp
+
wxT
(
"style=
\"
fill:#"
)
+
wxColStr
(
m_textBackgroundColour
)
+
wxT
(
"; "
);
write
(
s
);
s
=
s
+
wxT
(
"stroke-width:1; stroke:#"
)
+
wxColStr
(
m_textBackgroundColour
)
+
wxT
(
"; "
);
sTmp
.
Printf
(
wxT
(
"
\"
transform=
\"
rotate( %.2g %d %d )
\"
>"
),
-
angle
,
x
,
y
);
s
=
s
+
sTmp
+
newline
;
write
(
s
);
}
}
//now do the text itself
s
.
Printf
(
wxT
(
" <text x=
\"
%d
\"
y=
\"
%d
\"
"
),
x
,
y
);
sTmp
=
m_font
.
GetFaceName
()
;
//now do the text itself
if
(
sTmp
.
Len
()
>
0
)
s
=
s
+
wxT
(
"style=
\"
font-family:"
)
+
sTmp
+
wxT
(
"; "
);
s
.
Printf
(
wxT
(
" <text x=
\"
%d
\"
y=
\"
%d
\"
"
),
x
,
y
);
else
s
=
s
+
wxT
(
"style=
\"
"
)
;
wxString
fontweights
[
3
]
=
{
wxT
(
"normal"
),
wxT
(
"lighter"
),
wxT
(
"bold"
)
};
sTmp
=
m_font
.
GetFaceName
();
s
=
s
+
wxT
(
"font-weight:"
)
+
fontweights
[
m_font
.
GetWeight
()
-
wxNORMAL
]
+
semicolon
+
space
;
if
(
sTmp
.
Len
()
>
0
)
s
=
s
+
wxT
(
"style=
\"
font-family:"
)
+
sTmp
+
wxT
(
"; "
);
else
s
=
s
+
wxT
(
"style=
\"
"
);
wxString
font
styles
[
5
]
=
{
wxT
(
"normal"
),
wxT
(
"style error"
),
wxT
(
"style error"
),
wxT
(
"italic"
),
wxT
(
"oblique"
)
};
wxString
font
weights
[
3
]
=
{
wxT
(
"normal"
),
wxT
(
"lighter"
),
wxT
(
"bold"
)
};
s
=
s
+
wxT
(
"font-style:"
)
+
fontstyles
[
m_font
.
GetStyle
()
-
wxNORMAL
]
+
semicolon
+
space
;
s
=
s
+
wxT
(
"font-weight:"
)
+
fontweights
[
m_font
.
GetWeight
()
-
wxNORMAL
]
+
semicolon
+
space
;
sTmp
.
Printf
(
wxT
(
"font-size:%dpt; fill:#"
),
m_font
.
GetPointSize
()
);
wxString
fontstyles
[
5
]
=
{
s
=
s
+
sTmp
;
wxT
(
"normal"
),
wxT
(
"style error"
),
wxT
(
"style error"
),
wxT
(
s
=
s
+
wxColStr
(
m_textForegroundColour
)
+
wxT
(
"; stroke:#"
)
+
wxColStr
(
m_textForegroundColour
)
+
wxT
(
"; "
)
;
"italic"
),
wxT
(
"oblique"
)
sTmp
.
Printf
(
wxT
(
"stroke-width:0;
\"
transform=
\"
rotate( %.2g %d %d )
\"
>"
),
-
angle
,
x
,
y
)
;
};
s
=
s
+
sTmp
+
sText
+
wxT
(
"</text> "
)
+
newline
;
s
=
s
+
wxT
(
"font-style:"
)
+
fontstyles
[
m_font
.
GetStyle
()
-
wxNORMAL
]
+
semicolon
+
space
;
if
(
m_OK
)
sTmp
.
Printf
(
wxT
(
"font-size:%dpt; fill:#"
),
m_font
.
GetPointSize
()
);
s
=
s
+
sTmp
;
s
=
s
+
wxColStr
(
m_textForegroundColour
)
+
wxT
(
"; stroke:#"
)
+
wxColStr
(
m_textForegroundColour
)
+
wxT
(
"; "
);
sTmp
.
Printf
(
wxT
(
"stroke-width:0;
\"
transform=
\"
rotate( %.2g %d %d )
\"
>"
),
-
angle
,
x
,
y
);
s
=
s
+
sTmp
+
sText
+
wxT
(
"</text> "
)
+
newline
;
if
(
m_OK
)
{
{
write
(
s
);
write
(
s
);
}
}
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DrawRotatedText Call executed"
))
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DrawRotatedText Call executed"
)
);
}
}
void
wxSVGFileDC
::
DoDrawRectangle
(
wxCoord
x
,
wxCoord
y
,
wxCoord
width
,
wxCoord
height
)
void
wxSVGFileDC
::
DoDrawRectangle
(
wxCoord
x
,
wxCoord
y
,
wxCoord
width
,
wxCoord
height
)
{
{
DoDrawRoundedRectangle
(
x
,
y
,
width
,
height
,
0
)
;
DoDrawRoundedRectangle
(
x
,
y
,
width
,
height
,
0
)
;
}
}
void
wxSVGFileDC
::
DoDrawRoundedRectangle
(
wxCoord
x
,
wxCoord
y
,
wxCoord
width
,
wxCoord
height
,
double
radius
)
void
wxSVGFileDC
::
DoDrawRoundedRectangle
(
wxCoord
x
,
wxCoord
y
,
wxCoord
width
,
wxCoord
height
,
double
radius
)
{
{
if
(
m_graphics_changed
)
NewGraphics
();
if
(
m_graphics_changed
)
wxString
s
;
NewGraphics
();
wxString
s
;
s
.
Printf
(
wxT
(
" <rect x=
\"
%d
\"
y=
\"
%d
\"
width=
\"
%d
\"
height=
\"
%d
\"
rx=
\"
%.2g
\"
"
),
s
.
Printf
(
wxT
(
" <rect x=
\"
%d
\"
y=
\"
%d
\"
width=
\"
%d
\"
height=
\"
%d
\"
rx=
\"
%.2g
\"
"
),
x
,
y
,
width
,
height
,
radius
);
x
,
y
,
width
,
height
,
radius
);
s
=
s
+
wxT
(
" /> "
)
+
newline
;
s
=
s
+
wxT
(
" /> "
)
+
newline
;
write
(
s
);
write
(
s
);
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoDrawRoundedRectangle Call executed"
))
;
CalcBoundingBox
(
x
,
y
)
;
CalcBoundingBox
(
x
+
width
,
y
+
height
)
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoDrawRoundedRectangle Call executed"
)
);
CalcBoundingBox
(
x
,
y
);
CalcBoundingBox
(
x
+
width
,
y
+
height
);
}
}
void
wxSVGFileDC
::
DoDrawPolygon
(
int
n
,
wxPoint
points
[],
wxCoord
xoffset
,
wxCoord
yoffset
,
int
fillStyle
)
void
wxSVGFileDC
::
DoDrawPolygon
(
int
n
,
wxPoint
points
[],
wxCoord
xoffset
,
wxCoord
yoffset
,
int
fillStyle
)
{
{
if
(
m_graphics_changed
)
NewGraphics
();
if
(
m_graphics_changed
)
wxString
s
,
sTmp
;
NewGraphics
();
s
=
wxT
(
"<polygon style=
\"
"
)
;
wxString
s
,
sTmp
;
if
(
fillStyle
==
wxODDEVEN_RULE
)
s
=
wxT
(
"<polygon style=
\"
"
);
s
=
s
+
wxT
(
"fill-rule:evenodd; "
);
if
(
fillStyle
==
wxODDEVEN_RULE
)
s
=
s
+
wxT
(
"fill-rule:evenodd; "
);
else
else
s
=
s
+
wxT
(
"fill-rule:nonzero; "
);
s
=
s
+
wxT
(
"fill-rule:nonzero; "
);
s
=
s
+
wxT
(
"
\"
\n
points=
\"
"
)
;
s
=
s
+
wxT
(
"
\"
\n
points=
\"
"
)
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
{
sTmp
.
Printf
(
wxT
(
"%d,%d"
),
points
[
i
].
x
+
xoffset
,
points
[
i
].
y
+
yoffset
);
sTmp
.
Printf
(
wxT
(
"%d,%d"
),
points
[
i
].
x
+
xoffset
,
points
[
i
].
y
+
yoffset
);
s
=
s
+
sTmp
+
newline
;
s
=
s
+
sTmp
+
newline
;
CalcBoundingBox
(
points
[
i
].
x
+
xoffset
,
points
[
i
].
y
+
yoffset
);
CalcBoundingBox
(
points
[
i
].
x
+
xoffset
,
points
[
i
].
y
+
yoffset
);
}
}
s
=
s
+
wxT
(
"
\"
/> "
)
;
s
=
s
+
newline
;
write
(
s
);
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoDrawPolygon Call executed"
))
;
s
=
s
+
wxT
(
"
\"
/> "
);
s
=
s
+
newline
;
write
(
s
);
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoDrawPolygon Call executed"
)
);
}
}
void
wxSVGFileDC
::
DoDrawEllipse
(
wxCoord
x
,
wxCoord
y
,
wxCoord
width
,
wxCoord
height
)
void
wxSVGFileDC
::
DoDrawEllipse
(
wxCoord
x
,
wxCoord
y
,
wxCoord
width
,
wxCoord
height
)
{
{
if
(
m_graphics_changed
)
NewGraphics
();
if
(
m_graphics_changed
)
NewGraphics
();
int
rh
=
height
/
2
;
int
rh
=
height
/
2
;
int
rw
=
width
/
2
;
int
rw
=
width
/
2
;
wxString
s
;
wxString
s
;
s
.
Printf
(
wxT
(
"<ellipse cx=
\"
%d
\"
cy=
\"
%d
\"
rx=
\"
%d
\"
ry=
\"
%d
\"
"
),
x
+
rw
,
y
+
rh
,
rw
,
rh
);
s
.
Printf
(
wxT
(
"<ellipse cx=
\"
%d
\"
cy=
\"
%d
\"
rx=
\"
%d
\"
ry=
\"
%d
\"
"
),
x
+
rw
,
y
+
rh
,
rw
,
rh
);
s
=
s
+
wxT
(
" /> "
)
+
newline
;
s
=
s
+
wxT
(
" /> "
)
+
newline
;
write
(
s
);
write
(
s
);
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoDrawEllipse Call executed"
))
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoDrawEllipse Call executed"
)
)
;
CalcBoundingBox
(
x
,
y
)
;
CalcBoundingBox
(
x
,
y
)
;
CalcBoundingBox
(
x
+
width
,
y
+
height
)
;
CalcBoundingBox
(
x
+
width
,
y
+
height
)
;
}
}
void
wxSVGFileDC
::
DoDrawArc
(
wxCoord
x1
,
wxCoord
y1
,
wxCoord
x2
,
wxCoord
y2
,
wxCoord
xc
,
wxCoord
yc
)
void
wxSVGFileDC
::
DoDrawArc
(
wxCoord
x1
,
wxCoord
y1
,
wxCoord
x2
,
wxCoord
y2
,
wxCoord
xc
,
wxCoord
yc
)
{
{
/* Draws an arc of a circle, centred on (xc, yc), with starting point
/* Draws an arc of a circle, centred on (xc, yc), with starting point
(x1, y1) and ending at (x2, y2). The current pen is used for the outline
* (x1, y1) and ending at (x2, y2). The current pen is used for the outline
and the current brush for filling the shape.
* and the current brush for filling the shape.
*
The arc is drawn in an anticlockwise direction from the start point to
* The arc is drawn in an anticlockwise direction from the start point to
the end point. */
* the end point. */
if
(
m_graphics_changed
)
NewGraphics
();
if
(
m_graphics_changed
)
wxString
s
;
NewGraphics
();
wxString
s
;
// we need the radius of the circle which has two estimates
// we need the radius of the circle which has two estimates
double
r1
=
sqrt
(
double
(
(
x1
-
xc
)
*
(
x1
-
xc
)
)
+
double
(
(
y1
-
yc
)
*
(
y1
-
yc
)
)
);
double
r1
=
sqrt
(
double
(
(
x1
-
xc
)
*
(
x1
-
xc
)
)
+
double
(
(
y1
-
yc
)
*
(
y1
-
yc
)
)
);
double
r2
=
sqrt
(
double
(
(
x2
-
xc
)
*
(
x2
-
xc
)
)
+
double
(
(
y2
-
yc
)
*
(
y2
-
yc
)
)
);
double
r2
=
sqrt
(
double
(
(
x2
-
xc
)
*
(
x2
-
xc
)
)
+
double
(
(
y2
-
yc
)
*
(
y2
-
yc
)
)
);
wxASSERT_MSG
(
(
fabs
(
r2
-
r1
)
<=
3
),
wxT
(
"wxSVGFileDC::DoDrawArc Error in getting radii of circle"
))
;
wxASSERT_MSG
(
(
fabs
(
r2
-
r1
)
<=
3
),
if
(
fabs
(
r2
-
r1
)
>
3
)
//pixels
wxT
(
"wxSVGFileDC::DoDrawArc Error in getting radii of circle"
)
);
if
(
fabs
(
r2
-
r1
)
>
3
)
//pixels
{
{
s
=
wxT
(
"<!--- wxSVGFileDC::DoDrawArc Error in getting radii of circle -->
\n
"
)
;
s
=
wxT
(
"<!--- wxSVGFileDC::DoDrawArc Error in getting radii of circle -->
\n
"
)
;
write
(
s
);
write
(
s
);
}
}
double
theta1
=
atan2
((
double
)(
yc
-
y1
),(
double
)(
x1
-
xc
));
double
theta1
=
atan2
(
(
double
)
(
yc
-
y1
),
(
double
)
(
x1
-
xc
)
);
if
(
theta1
<
0
)
theta1
=
theta1
+
M_PI
*
2
;
if
(
theta1
<
0
)
double
theta2
=
atan2
((
double
)(
yc
-
y2
),
(
double
)(
x2
-
xc
));
theta1
=
theta1
+
M_PI
*
2
;
if
(
theta2
<
0
)
theta2
=
theta2
+
M_PI
*
2
;
double
theta2
=
atan2
(
(
double
)
(
yc
-
y2
),
(
double
)
(
x2
-
xc
)
);
if
(
theta2
<
theta1
)
theta2
=
theta2
+
M_PI
*
2
;
if
(
theta2
<
0
)
theta2
=
theta2
+
M_PI
*
2
;
int
fArc
;
// flag for large or small arc 0 means less than 180 degrees
if
(
theta2
<
theta1
)
if
(
fabs
(
theta2
-
theta1
)
>
M_PI
)
fArc
=
1
;
else
fArc
=
0
;
theta2
=
theta2
+
M_PI
*
2
;
int
fSweep
=
0
;
// flag for sweep always 0
int
fArc
;
// flag for large or small arc 0 means less than 180 degrees
if
(
fabs
(
theta2
-
theta1
)
>
M_PI
)
fArc
=
1
;
else
fArc
=
0
;
int
fSweep
;
if
(
(
theta2
-
theta1
)
>
0
)
fSweep
=
0
;
else
fSweep
=
1
;
float
Axis_rotation
=
0.0
;
// Draw arc as pie:
// s.Printf ( wxT("<path d=\"M%d %d A%.2g %.2g 0.0 %d %d %d %d L%d %d z "),
// s.Printf ( wxT("<path d=\"M%d %d A%.2g %.2g 0.0 %d %d %d %d L%d %d z "),
// the z means close the path and fill (usefull to draw a pie)
// the z means close the path and fill (usefull to draw a pie)
s
.
Printf
(
wxT
(
"<path d=
\"
M%d %d A%.2g %.2g 0.0 %d %d %d %d"
),
// x1, y1, r1, r2, fArc, fSweep, x2, y2, xc ,yc );
x1
,
y1
,
r1
,
r2
,
fArc
,
fSweep
,
x2
,
y2
,
xc
,
yc
);
// Draw a single arc:
s
.
Printf
(
wxT
(
"<path d=
\"
M%d %d A%.2g %.2g %g %d %d %d %d"
),
x1
,
y1
,
r1
,
r2
,
Axis_rotation
,
fArc
,
fSweep
,
x2
,
y2
);
s
=
s
+
wxT
(
"
\"
/> "
)
+
newline
;
s
=
s
+
wxT
(
"
\"
/> "
)
+
newline
;
if
(
m_OK
)
if
(
m_OK
)
{
{
write
(
s
);
write
(
s
);
}
}
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoDrawArc Call executed"
))
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoDrawArc Call executed"
)
)
;
}
}
void
wxSVGFileDC
::
DoDrawEllipticArc
(
wxCoord
x
,
wxCoord
y
,
wxCoord
w
,
wxCoord
h
,
double
sa
,
double
ea
)
void
wxSVGFileDC
::
DoDrawEllipticArc
(
wxCoord
x
,
wxCoord
y
,
wxCoord
w
,
wxCoord
h
,
double
sa
,
double
ea
)
{
{
/*
/*
Draws an arc of an ellipse. The current pen is used for drawing the arc
*
Draws an arc of an ellipse. The current pen is used for drawing the arc
and the current brush is used for drawing the pie. This function is
*
and the current brush is used for drawing the pie. This function is
currently only available for X window and PostScript device contexts.
*
currently only available for X window and PostScript device contexts.
*
x and y specify the x and y coordinates of the upper-left corner of the
*
x and y specify the x and y coordinates of the upper-left corner of the
rectangle that contains the ellipse.
*
rectangle that contains the ellipse.
*
width and height specify the width and height of the rectangle that
*
width and height specify the width and height of the rectangle that
contains the ellipse.
*
contains the ellipse.
*
start and end specify the start and end of the arc relative to the
*
start and end specify the start and end of the arc relative to the
three-o'clock position from the center of the rectangle. Angles are
*
three-o'clock position from the center of the rectangle. Angles are
specified in degrees (360 is a complete circle). Positive values mean
*
specified in degrees (360 is a complete circle). Positive values mean
counter-clockwise motion. If start is equal to end, a complete ellipse
*
counter-clockwise motion. If start is equal to end, a complete ellipse
will be drawn. */
*
will be drawn. */
//known bug: SVG draws with the current pen along the radii, but this does not happen in wxMSW
//known bug: SVG draws with the current pen along the radii, but this does not happen in wxMSW
if
(
m_graphics_changed
)
NewGraphics
();
if
(
m_graphics_changed
)
NewGraphics
();
wxString
s
;
wxString
s
;
//radius
//radius
double
rx
=
w
/
2
;
double
rx
=
w
/
2
;
double
ry
=
h
/
2
;
double
ry
=
h
/
2
;
// center
// center
double
xc
=
x
+
rx
;
double
xc
=
x
+
rx
;
double
yc
=
y
+
ry
;
double
yc
=
y
+
ry
;
double
xs
,
ys
,
xe
,
ye
;
xs
=
xc
+
rx
*
cos
(
DegToRad
(
sa
)
);
xe
=
xc
+
rx
*
cos
(
DegToRad
(
ea
)
);
double
xs
,
ys
,
xe
,
ye
;
ys
=
yc
-
ry
*
sin
(
DegToRad
(
sa
)
);
xs
=
xc
+
rx
*
cos
(
DegToRad
(
sa
))
;
xe
=
xc
+
rx
*
cos
(
DegToRad
(
ea
))
;
ye
=
yc
-
ry
*
sin
(
DegToRad
(
ea
)
);
ys
=
yc
-
ry
*
sin
(
DegToRad
(
sa
))
;
ye
=
yc
-
ry
*
sin
(
DegToRad
(
ea
))
;
///now same as circle arc...
///now same as circle arc...
double
theta1
=
atan2
(
ys
-
yc
,
xs
-
xc
);
double
theta1
=
atan2
(
ys
-
yc
,
xs
-
xc
);
double
theta2
=
atan2
(
ye
-
yc
,
xe
-
xc
);
double
theta2
=
atan2
(
ye
-
yc
,
xe
-
xc
);
int
fArc
;
// flag for large or small arc 0 means less than 180 degrees
int
fArc
;
// flag for large or small arc 0 means less than 180 degrees
if
(
(
theta2
-
theta1
)
>
0
)
fArc
=
1
;
else
fArc
=
0
;
if
(
fabs
(
theta2
-
theta1
)
>
M_PI
)
fArc
=
1
;
else
fArc
=
0
;
int
fSweep
;
int
fSweep
;
if
(
fabs
(
theta2
-
theta1
)
>
M_PI
)
fSweep
=
1
;
else
fSweep
=
0
;
if
(
(
theta2
-
theta1
)
>
0
)
fSweep
=
0
;
else
fSweep
=
1
;
float
Axis_rotation
=
0.0
;
// s.Printf ( wxT("<path d=\"M%d %d A%d %d 0.0 %d %d %d %d L %d %d z "),
// Draw a single arc:
s
.
Printf
(
wxT
(
"<path d=
\"
M%d %d A%d %d 0.0 %d %d %d %d L %d %d "
),
s
.
Printf
(
wxT
(
"<path d=
\"
M%d,%d A%d,%d %g %d %d %d,%d"
),
int
(
xs
),
int
(
ys
),
int
(
rx
),
int
(
ry
),
int
(
xs
),
int
(
ys
),
fArc
,
fSweep
,
int
(
xe
),
int
(
ye
),
int
(
xc
),
int
(
yc
)
);
int
(
rx
),
int
(
ry
),
Axis_rotation
,
fArc
,
fSweep
,
int
(
xe
),
int
(
ye
)
);
s
=
s
+
wxT
(
"
\"
/> "
)
+
newline
;
s
=
s
+
wxT
(
"
\"
/> "
)
+
newline
;
if
(
m_OK
)
if
(
m_OK
)
{
{
write
(
s
);
write
(
s
);
}
}
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoDrawEllipticArc Call executed"
))
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoDrawEllipticArc Call executed"
)
)
;
}
}
void
wxSVGFileDC
::
DoGetTextExtent
(
const
wxString
&
string
,
wxCoord
*
w
,
wxCoord
*
h
,
wxCoord
*
descent
,
wxCoord
*
externalLeading
,
wxFont
*
font
)
const
void
wxSVGFileDC
::
DoGetTextExtent
(
const
wxString
&
string
,
wxCoord
*
w
,
wxCoord
*
h
,
wxCoord
*
descent
,
wxCoord
*
externalLeading
,
wxFont
*
font
)
const
{
{
wxScreenDC
sDC
;
wxScreenDC
sDC
;
sDC
.
SetFont
(
m_font
);
sDC
.
SetFont
(
m_font
);
if
(
font
!=
NULL
)
sDC
.
SetFont
(
*
font
);
if
(
font
!=
NULL
)
sDC
.
GetTextExtent
(
string
,
w
,
h
,
descent
,
externalLeading
);
sDC
.
SetFont
(
*
font
);
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::GetTextExtent Call executed"
))
;
sDC
.
GetTextExtent
(
string
,
w
,
h
,
descent
,
externalLeading
);
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::GetTextExtent Call executed"
)
);
}
}
wxCoord
wxSVGFileDC
::
GetCharHeight
()
const
wxCoord
wxSVGFileDC
::
GetCharHeight
()
const
{
{
wxScreenDC
sDC
;
wxScreenDC
sDC
;
sDC
.
SetFont
(
m_font
);
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::GetCharHeight Call executing"
))
;
sDC
.
SetFont
(
m_font
);
return
(
sDC
.
GetCharHeight
()
);
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::GetCharHeight Call executing"
)
);
return
sDC
.
GetCharHeight
();
}
}
wxCoord
wxSVGFileDC
::
GetCharWidth
()
const
wxCoord
wxSVGFileDC
::
GetCharWidth
()
const
{
{
wxScreenDC
sDC
;
wxScreenDC
sDC
;
sDC
.
SetFont
(
m_font
);
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::GetCharWidth Call executing"
))
;
sDC
.
SetFont
(
m_font
);
return
(
sDC
.
GetCharWidth
()
)
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::GetCharWidth Call executing"
)
);
return
sDC
.
GetCharWidth
();
}
}
/// Set Functions /////////////////////////////////////////////////////////////////
/// Set Functions /////////////////////////////////////////////////////////////////
void
wxSVGFileDC
::
SetBackground
(
const
wxBrush
&
brush
)
void
wxSVGFileDC
::
SetBackground
(
const
wxBrush
&
brush
)
{
{
m_backgroundBrush
=
brush
;
m_backgroundBrush
=
brush
;
return
;
return
;
}
}
...
@@ -534,91 +615,106 @@ void wxSVGFileDC::SetBackgroundMode( int mode )
...
@@ -534,91 +615,106 @@ void wxSVGFileDC::SetBackgroundMode( int mode )
}
}
void
wxSVGFileDC
::
SetBrush
(
const
wxBrush
&
brush
)
void
wxSVGFileDC
::
SetBrush
(
const
wxBrush
&
brush
)
{
{
m_brush
=
brush
;
m_brush
=
brush
;
m_graphics_changed
=
TRUE
;
m_graphics_changed
=
TRUE
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::SetBrush Call executed"
))
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::SetBrush Call executed"
)
)
;
}
}
void
wxSVGFileDC
::
SetPen
(
const
wxPen
&
pen
)
void
wxSVGFileDC
::
SetPen
(
const
wxPen
&
pen
)
{
{
// width, color, ends, joins : currently implemented
// width, color, ends, joins : currently implemented
// dashes, stipple : not implemented
// dashes, stipple : not implemented
m_pen
=
pen
;
m_pen
=
pen
;
m_graphics_changed
=
TRUE
;
m_graphics_changed
=
TRUE
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::SetPen Call executed"
))
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::SetPen Call executed"
)
)
;
}
}
void
wxSVGFileDC
::
NewGraphics
()
{
int
w
=
m_pen
.
GetWidth
();
void
wxSVGFileDC
::
NewGraphics
()
wxColour
c
=
m_pen
.
GetColour
()
;
{
int
w
=
m_pen
.
GetWidth
();
wxColour
c
=
m_pen
.
GetColour
();
wxString
s
,
sBrush
,
sPenCap
,
sPenJoin
,
sPenStyle
,
sLast
,
sWarn
;
wxString
s
,
sBrush
,
sPenCap
,
sPenJoin
,
sPenStyle
,
sLast
,
sWarn
;
sBrush
=
wxT
(
"</g>
\n
<g style=
\"
"
)
+
wxBrushString
(
m_brush
.
GetColour
(),
m_brush
.
GetStyle
()
)
sBrush
=
wxT
(
"</g>
\n
<g style=
\"
"
)
+
wxBrushString
(
m_brush
.
GetColour
(),
m_brush
.
GetStyle
()
)
+
wxT
(
" stroke:#"
)
+
wxColStr
(
c
)
+
wxT
(
"; "
)
;
+
wxT
(
" stroke:#"
)
+
wxColStr
(
c
)
+
wxT
(
"; "
)
;
switch
(
m_pen
.
GetCap
()
)
switch
(
m_pen
.
GetCap
()
)
{
{
case
wxCAP_PROJECTING
:
case
wxCAP_PROJECTING
:
sPenCap
=
wxT
(
"stroke-linecap:square; "
)
;
sPenCap
=
wxT
(
"stroke-linecap:square; "
);
break
;
break
;
case
wxCAP_BUTT
:
sPenCap
=
wxT
(
"stroke-linecap:butt; "
)
;
case
wxCAP_BUTT
:
break
;
sPenCap
=
wxT
(
"stroke-linecap:butt; "
);
case
wxCAP_ROUND
:
break
;
default
:
sPenCap
=
wxT
(
"stroke-linecap:round; "
)
;
case
wxCAP_ROUND
:
};
default
:
switch
(
m_pen
.
GetJoin
()
)
sPenCap
=
wxT
(
"stroke-linecap:round; "
);
}
;
switch
(
m_pen
.
GetJoin
()
)
{
{
case
wxJOIN_BEVEL
:
case
wxJOIN_BEVEL
:
sPenJoin
=
wxT
(
"stroke-linejoin:bevel; "
)
;
sPenJoin
=
wxT
(
"stroke-linejoin:bevel; "
);
break
;
break
;
case
wxJOIN_MITER
:
sPenJoin
=
wxT
(
"stroke-linejoin:miter; "
)
;
case
wxJOIN_MITER
:
break
;
sPenJoin
=
wxT
(
"stroke-linejoin:miter; "
);
case
wxJOIN_ROUND
:
break
;
default
:
sPenJoin
=
wxT
(
"stroke-linejoin:round; "
)
;
case
wxJOIN_ROUND
:
};
default
:
sPenJoin
=
wxT
(
"stroke-linejoin:round; "
);
}
switch
(
m_pen
.
GetStyle
()
)
;
switch
(
m_pen
.
GetStyle
()
)
{
{
case
wxSOLID
:
case
wxSOLID
:
sPenStyle
=
wxT
(
"stroke-opacity:1.0; stroke-opacity:1.0; "
)
;
sPenStyle
=
wxT
(
"stroke-opacity:1.0; stroke-opacity:1.0; "
);
break
;
break
;
case
wxTRANSPARENT
:
sPenStyle
=
wxT
(
"stroke-opacity:0.0; stroke-opacity:0.0; "
)
;
case
wxTRANSPARENT
:
break
;
sPenStyle
=
wxT
(
"stroke-opacity:0.0; stroke-opacity:0.0; "
);
default
:
break
;
wxASSERT_MSG
(
FALSE
,
wxT
(
"wxSVGFileDC::SetPen Call called to set a Style which is not available"
))
;
sWarn
=
sWarn
+
wxT
(
"<!--- wxSVGFileDC::SetPen Call called to set a Style which is not available -->
\n
"
)
;
default
:
wxASSERT_MSG
(
FALSE
,
wxT
(
"wxSVGFileDC::SetPen Call called to set a Style which is not available"
)
);
sWarn
=
sWarn
+
wxT
(
"<!--- wxSVGFileDC::SetPen Call called to set a Style which is not available -->
\n
"
);
}
}
sLast
.
Printf
(
wxT
(
"stroke-width:%d
\"
\n
transform=
\"
translate(%.2g %.2g) scale(%.2g %.2g)
\"
>"
),
sLast
.
Printf
(
wxT
(
"stroke-width:%d
\"
\n
transform=
\"
translate(%.2g %.2g) scale(%.2g %.2g)
\"
>"
),
w
,
m_OriginX
,
m_OriginY
,
m_scaleX
,
m_scaleY
);
w
,
m_OriginX
,
m_OriginY
,
m_scaleX
,
m_scaleY
);
s
=
sBrush
+
sPenCap
+
sPenJoin
+
sPenStyle
+
sLast
+
newline
+
sWarn
;
s
=
sBrush
+
sPenCap
+
sPenJoin
+
sPenStyle
+
sLast
+
newline
+
sWarn
;
write
(
s
);
write
(
s
);
m_graphics_changed
=
FALSE
;
m_graphics_changed
=
FALSE
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::NewGraphics Call executed"
))
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::NewGraphics Call executed"
)
)
;
}
}
void
wxSVGFileDC
::
SetFont
(
const
wxFont
&
font
)
void
wxSVGFileDC
::
SetFont
(
const
wxFont
&
font
)
{
{
m_font
=
font
;
m_font
=
font
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::SetFont Call executed"
))
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::SetFont Call executed"
)
)
;
}
}
...
@@ -626,55 +722,60 @@ void wxSVGFileDC::ComputeScaleAndOrigin()
...
@@ -626,55 +722,60 @@ void wxSVGFileDC::ComputeScaleAndOrigin()
{
{
m_scaleX
=
m_logicalScaleX
*
m_userScaleX
;
m_scaleX
=
m_logicalScaleX
*
m_userScaleX
;
m_scaleY
=
m_logicalScaleY
*
m_userScaleY
;
m_scaleY
=
m_logicalScaleY
*
m_userScaleY
;
m_OriginX
=
m_logicalOriginX
*
m_logicalScaleX
+
m_deviceOriginX
;
m_OriginX
=
m_logicalOriginX
*
m_logicalScaleX
+
m_deviceOriginX
;
m_OriginY
=
m_logicalOriginY
*
m_logicalScaleY
+
m_deviceOriginY
;
m_OriginY
=
m_logicalOriginY
*
m_logicalScaleY
+
m_deviceOriginY
;
m_graphics_changed
=
TRUE
;
m_graphics_changed
=
TRUE
;
}
}
int
wxSVGFileDC
::
GetMapMode
()
int
wxSVGFileDC
::
GetMapMode
()
{
{
return
m_mappingMode
;
return
m_mappingMode
;
}
}
void
wxSVGFileDC
::
SetMapMode
(
int
mode
)
void
wxSVGFileDC
::
SetMapMode
(
int
mode
)
{
{
switch
(
mode
)
switch
(
mode
)
{
{
case
wxMM_TWIPS
:
case
wxMM_TWIPS
:
SetLogicalScale
(
twips2mm
*
m_mm_to_pix_x
,
twips2mm
*
m_mm_to_pix_y
);
SetLogicalScale
(
twips2mm
*
m_mm_to_pix_x
,
twips2mm
*
m_mm_to_pix_y
);
break
;
break
;
case
wxMM_POINTS
:
case
wxMM_POINTS
:
SetLogicalScale
(
pt2mm
*
m_mm_to_pix_x
,
pt2mm
*
m_mm_to_pix_y
);
SetLogicalScale
(
pt2mm
*
m_mm_to_pix_x
,
pt2mm
*
m_mm_to_pix_y
);
break
;
break
;
case
wxMM_METRIC
:
case
wxMM_METRIC
:
SetLogicalScale
(
m_mm_to_pix_x
,
m_mm_to_pix_y
);
SetLogicalScale
(
m_mm_to_pix_x
,
m_mm_to_pix_y
);
break
;
break
;
case
wxMM_LOMETRIC
:
case
wxMM_LOMETRIC
:
SetLogicalScale
(
m_mm_to_pix_x
/
10.0
,
m_mm_to_pix_y
/
10.0
);
SetLogicalScale
(
m_mm_to_pix_x
/
10.0
,
m_mm_to_pix_y
/
10.0
);
break
;
break
;
default
:
default
:
case
wxMM_TEXT
:
case
wxMM_TEXT
:
SetLogicalScale
(
1.0
,
1.0
);
SetLogicalScale
(
1.0
,
1.0
);
break
;
break
;
}
}
m_mappingMode
=
mode
;
m_mappingMode
=
mode
;
/* we don't do this mega optimisation
/* we don't do this mega optimisation
if (mode != wxMM_TEXT)
*
if (mode != wxMM_TEXT)
{
*
{
m_needComputeScaleX = TRUE;
*
m_needComputeScaleX = TRUE;
m_needComputeScaleY = TRUE;
*
m_needComputeScaleY = TRUE;
}
*
}
*/
*/
}
}
void
wxSVGFileDC
::
GetUserScale
(
double
*
x
,
double
*
y
)
const
void
wxSVGFileDC
::
GetUserScale
(
double
*
x
,
double
*
y
)
const
{
{
*
x
=
m_userScaleX
;
*
x
=
m_userScaleX
;
*
y
=
m_userScaleY
;
*
y
=
m_userScaleY
;
}
}
...
@@ -724,84 +825,93 @@ void wxSVGFileDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
...
@@ -724,84 +825,93 @@ void wxSVGFileDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
// export a bitmap as a raster image in png
// export a bitmap as a raster image in png
bool
wxSVGFileDC
::
DoBlit
(
wxCoord
xdest
,
wxCoord
ydest
,
wxCoord
width
,
wxCoord
height
,
bool
wxSVGFileDC
::
DoBlit
(
wxCoord
xdest
,
wxCoord
ydest
,
wxCoord
width
,
wxCoord
height
,
wxDC
*
source
,
wxCoord
xsrc
,
wxCoord
ysrc
,
wxDC
*
source
,
wxCoord
xsrc
,
wxCoord
ysrc
,
int
logicalFunc
/*= wxCOPY*/
,
bool
useMask
/*= FALSE*/
,
int
logicalFunc
/*= wxCOPY*/
,
bool
useMask
/*= FALSE*/
,
wxCoord
/*xsrcMask = -1*/
,
wxCoord
/*ysrcMask = -1*/
)
wxCoord
/*xsrcMask = -1*/
,
wxCoord
/*ysrcMask = -1*/
)
{
{
if
(
logicalFunc
!=
wxCOPY
)
if
(
logicalFunc
!=
wxCOPY
)
{
{
wxASSERT_MSG
(
FALSE
,
wxT
(
"wxSVGFileDC::DoBlit Call requested nonCopy mode; this is not possible"
))
;
wxASSERT_MSG
(
FALSE
,
return
FALSE
;
wxT
(
"wxSVGFileDC::DoBlit Call requested nonCopy mode; this is not possible"
)
);
return
FALSE
;
}
}
if
(
useMask
!=
FALSE
)
if
(
useMask
!=
FALSE
)
{
{
wxASSERT_MSG
(
FALSE
,
wxT
(
"wxSVGFileDC::DoBlit Call requested False mask ; this is not possible"
))
;
wxASSERT_MSG
(
FALSE
,
return
FALSE
;
wxT
(
"wxSVGFileDC::DoBlit Call requested False mask ; this is not possible"
)
);
return
FALSE
;
}
}
wxBitmap
myBitmap
(
width
,
height
)
;
wxBitmap
myBitmap
(
width
,
height
)
;
wxMemoryDC
memDC
;
wxMemoryDC
memDC
;
memDC
.
SelectObject
(
myBitmap
);
memDC
.
SelectObject
(
myBitmap
);
memDC
.
Blit
(
0
,
0
,
width
,
height
,
source
,
xsrc
,
ysrc
);
memDC
.
Blit
(
0
,
0
,
width
,
height
,
source
,
xsrc
,
ysrc
);
memDC
.
SelectObject
(
wxNullBitmap
);
memDC
.
SelectObject
(
wxNullBitmap
);
DoDrawBitmap
(
myBitmap
,
xdest
,
ydest
);
DoDrawBitmap
(
myBitmap
,
xdest
,
ydest
);
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoBlit Call executed"
))
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoBlit Call executed"
)
)
;
return
FALSE
;
return
FALSE
;
}
}
void
wxSVGFileDC
::
DoDrawIcon
(
const
class
wxIcon
&
myIcon
,
wxCoord
x
,
wxCoord
y
)
void
wxSVGFileDC
::
DoDrawIcon
(
const
class
wxIcon
&
myIcon
,
wxCoord
x
,
wxCoord
y
)
{
{
wxBitmap
myBitmap
(
myIcon
.
GetWidth
(),
myIcon
.
GetHeight
()
)
;
wxBitmap
myBitmap
(
myIcon
.
GetWidth
(),
myIcon
.
GetHeight
()
)
;
wxMemoryDC
memDC
;
wxMemoryDC
memDC
;
memDC
.
SelectObject
(
myBitmap
);
memDC
.
SelectObject
(
myBitmap
);
memDC
.
DrawIcon
(
myIcon
,
0
,
0
);
memDC
.
DrawIcon
(
myIcon
,
0
,
0
);
memDC
.
SelectObject
(
wxNullBitmap
);
memDC
.
SelectObject
(
wxNullBitmap
);
DoDrawBitmap
(
myBitmap
,
x
,
y
);
DoDrawBitmap
(
myBitmap
,
x
,
y
);
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoDrawIcon Call executed"
))
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoDrawIcon Call executed"
)
)
;
return
;
return
;
}
}
void
wxSVGFileDC
::
DoDrawBitmap
(
const
class
wxBitmap
&
bmp
,
void
wxSVGFileDC
::
DoDrawBitmap
(
const
class
wxBitmap
&
bmp
,
wxCoord
x
,
wxCoord
y
,
bool
WXUNUSED
(
bTransparent
)
/*=0*/
)
wxCoord
x
,
wxCoord
y
,
bool
WXUNUSED
(
bTransparent
)
/*=0*/
)
{
{
if
(
m_graphics_changed
)
NewGraphics
();
if
(
m_graphics_changed
)
NewGraphics
();
wxString
sTmp
,
s
,
sPNG
;
wxString
sTmp
,
s
,
sPNG
;
wxImage
::
AddHandler
(
new
wxPNGHandler
);
wxImage
::
AddHandler
(
new
wxPNGHandler
);
// create suitable file name
// create suitable file name
sTmp
.
Printf
(
wxT
(
"_image%d.png"
),
m_sub_images
);
sTmp
.
Printf
(
wxT
(
"_image%d.png"
),
m_sub_images
);
sPNG
=
m_filename
.
BeforeLast
(
wxT
(
'.'
)
)
+
sTmp
;
sPNG
=
m_filename
.
BeforeLast
(
wxT
(
'.'
)
)
+
sTmp
;
while
(
wxFile
::
Exists
(
sPNG
)
)
while
(
wxFile
::
Exists
(
sPNG
)
)
{
{
m_sub_images
++
;
m_sub_images
++
;
sTmp
.
Printf
(
wxT
(
"_image%d.png"
),
m_sub_images
);
sTmp
.
Printf
(
wxT
(
"_image%d.png"
),
m_sub_images
);
sPNG
=
m_filename
.
BeforeLast
(
wxT
(
'.'
)
)
+
sTmp
;
sPNG
=
m_filename
.
BeforeLast
(
wxT
(
'.'
)
)
+
sTmp
;
}
}
//create copy of bitmap (wxGTK doesn't like saving a constant bitmap)
//create copy of bitmap (wxGTK doesn't like saving a constant bitmap)
wxBitmap
myBitmap
=
bmp
;
wxBitmap
myBitmap
=
bmp
;
//save it
//save it
bool
bPNG_OK
=
myBitmap
.
SaveFile
(
sPNG
,
wxBITMAP_TYPE_PNG
);
bool
bPNG_OK
=
myBitmap
.
SaveFile
(
sPNG
,
wxBITMAP_TYPE_PNG
);
// refrence the bitmap from the SVG doc
// refrence the bitmap from the SVG doc
int
w
=
myBitmap
.
GetWidth
();
int
w
=
myBitmap
.
GetWidth
();
int
h
=
myBitmap
.
GetHeight
();
int
h
=
myBitmap
.
GetHeight
();
sTmp
.
Printf
(
wxT
(
" <image x=
\"
%d
\"
y=
\"
%d
\"
width=
\"
%dpx
\"
height=
\"
%dpx
\"
"
),
x
,
y
,
w
,
h
);
sTmp
.
Printf
(
wxT
(
" <image x=
\"
%d
\"
y=
\"
%d
\"
width=
\"
%dpx
\"
height=
\"
%dpx
\"
"
),
x
,
y
,
w
,
h
);
s
=
s
+
sTmp
;
s
=
s
+
sTmp
;
sTmp
.
Printf
(
wxT
(
" xlink:href=
\"
%s
\"
>
\n
"
),
sPNG
.
c_str
()
);
sTmp
.
Printf
(
wxT
(
" xlink:href=
\"
%s
\"
>
\n
"
),
sPNG
.
c_str
()
);
s
=
s
+
sTmp
+
wxT
(
"<title>Image from wxSVG</title> </image>"
)
+
newline
;
s
=
s
+
sTmp
+
wxT
(
"<title>Image from wxSVG</title> </image>"
)
+
newline
;
if
(
m_OK
&&
bPNG_OK
)
if
(
m_OK
&&
bPNG_OK
)
{
{
write
(
s
);
write
(
s
);
}
}
m_OK
=
m_outfile
->
Ok
()
&&
bPNG_OK
;
m_OK
=
m_outfile
->
Ok
()
&&
bPNG_OK
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoDrawBitmap Call executed"
))
;
wxASSERT_MSG
(
!
wxSVG_DEBUG
,
wxT
(
"wxSVGFileDC::DoDrawBitmap Call executed"
)
)
;
return
;
return
;
}
}
...
@@ -809,60 +919,63 @@ void wxSVGFileDC::DoDrawBitmap(const class wxBitmap & bmp, wxCoord x, wxCoord y
...
@@ -809,60 +919,63 @@ void wxSVGFileDC::DoDrawBitmap(const class wxBitmap & bmp, wxCoord x, wxCoord y
// coordinates transformations
// coordinates transformations
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
wxCoord
wxSVGFileDC
::
DeviceToLogicalX
(
wxCoord
x
)
const
wxCoord
wxSVGFileDC
::
DeviceToLogicalX
(
wxCoord
x
)
const
{
{
return
XDEV2LOG
(
x
);
return
XDEV2LOG
(
x
);
}
}
wxCoord
wxSVGFileDC
::
DeviceToLogicalY
(
wxCoord
y
)
const
wxCoord
wxSVGFileDC
::
DeviceToLogicalY
(
wxCoord
y
)
const
{
{
return
YDEV2LOG
(
y
);
return
YDEV2LOG
(
y
);
}
}
wxCoord
wxSVGFileDC
::
DeviceToLogicalXRel
(
wxCoord
x
)
const
wxCoord
wxSVGFileDC
::
DeviceToLogicalXRel
(
wxCoord
x
)
const
{
{
return
XDEV2LOGREL
(
x
);
return
XDEV2LOGREL
(
x
);
}
}
wxCoord
wxSVGFileDC
::
DeviceToLogicalYRel
(
wxCoord
y
)
const
wxCoord
wxSVGFileDC
::
DeviceToLogicalYRel
(
wxCoord
y
)
const
{
{
return
YDEV2LOGREL
(
y
);
return
YDEV2LOGREL
(
y
);
}
}
wxCoord
wxSVGFileDC
::
LogicalToDeviceX
(
wxCoord
x
)
const
wxCoord
wxSVGFileDC
::
LogicalToDeviceX
(
wxCoord
x
)
const
{
{
return
XLOG2DEV
(
x
);
return
XLOG2DEV
(
x
);
}
}
wxCoord
wxSVGFileDC
::
LogicalToDeviceY
(
wxCoord
y
)
const
wxCoord
wxSVGFileDC
::
LogicalToDeviceY
(
wxCoord
y
)
const
{
{
return
YLOG2DEV
(
y
);
return
YLOG2DEV
(
y
);
}
}
wxCoord
wxSVGFileDC
::
LogicalToDeviceXRel
(
wxCoord
x
)
const
wxCoord
wxSVGFileDC
::
LogicalToDeviceXRel
(
wxCoord
x
)
const
{
{
return
XLOG2DEVREL
(
x
);
return
XLOG2DEVREL
(
x
);
}
}
wxCoord
wxSVGFileDC
::
LogicalToDeviceYRel
(
wxCoord
y
)
const
wxCoord
wxSVGFileDC
::
LogicalToDeviceYRel
(
wxCoord
y
)
const
{
{
return
YLOG2DEVREL
(
y
);
return
YLOG2DEVREL
(
y
);
}
}
void
wxSVGFileDC
::
write
(
const
wxString
&
s
)
void
wxSVGFileDC
::
write
(
const
wxString
&
s
)
{
{
const
wxWX2MBbuf
buf
=
s
.
mb_str
(
wxConvUTF8
);
const
wxWX2MBbuf
buf
=
s
.
mb_str
(
wxConvUTF8
);
m_outfile
->
Write
(
buf
,
strlen
((
const
char
*
)
buf
));
m_outfile
->
Write
(
buf
,
strlen
(
(
const
char
*
)
buf
)
);
m_OK
=
m_outfile
->
Ok
();
m_OK
=
m_outfile
->
Ok
();
}
}
#ifdef __BORLANDC__
#ifdef __BORLANDC__
#pragma warn .rch
#pragma warn .rch
#pragma warn .ccc
#pragma warn .ccc
...
...
common/hotkeys_basic.cpp
View file @
ba04f832
...
@@ -18,11 +18,12 @@
...
@@ -18,11 +18,12 @@
* This class allows the real key code changed by user from a key code list file
* This class allows the real key code changed by user from a key code list file
*/
*/
Ki_HotkeyInfo
::
Ki_HotkeyInfo
(
const
wxChar
*
infomsg
,
int
idcommand
,
int
keycode
)
Ki_HotkeyInfo
::
Ki_HotkeyInfo
(
const
wxChar
*
infomsg
,
int
idcommand
,
int
keycode
,
int
idmenuevent
)
{
{
m_KeyCode
=
keycode
;
// Key code (ascii value for ascii keys or wxWidgets code for function key
m_KeyCode
=
keycode
;
// Key code (ascii value for ascii keys or wxWidgets code for function key
m_InfoMsg
=
infomsg
;
// info message.
m_InfoMsg
=
infomsg
;
// info message.
m_Idcommand
=
idcommand
;
// internal id for the corresponding command (see hotkey_id_commnand list)
m_Idcommand
=
idcommand
;
// internal id for the corresponding command (see hotkey_id_commnand list)
m_IdMenuEvent
=
idmenuevent
;
// id to call the corresponding event (if any) (see id.h)
}
}
...
@@ -315,25 +316,25 @@ void DisplayHotkeyList( WinEDA_DrawFrame* frame, struct Ki_HotkeyInfoSectionDesc
...
@@ -315,25 +316,25 @@ void DisplayHotkeyList( WinEDA_DrawFrame* frame, struct Ki_HotkeyInfoSectionDesc
}
}
/******************************************************************/
/******************************************************************
******
/
int
GetCommandCode
FromHotkey
(
int
key
,
Ki_HotkeyInfo
**
List
)
Ki_HotkeyInfo
*
GetDescriptor
FromHotkey
(
int
key
,
Ki_HotkeyInfo
**
List
)
/******************************************************************/
/******************************************************************
*****
/
/*
/*
* Return a
n id identifi
er fron a key code for OnHotKey() function
* Return a
Ki_HotkeyInfo * point
er fron a key code for OnHotKey() function
* @param key = key code (ascii value, or wxWidgets value for function keys
* @param key = key code (ascii value, or wxWidgets value for function keys
* @param List = pointer to a Ki_HotkeyInfo list of commands
* @param List = pointer to a Ki_HotkeyInfo list of commands
* @return the corresponding
function identifi
er from the Ki_HotkeyInfo List
* @return the corresponding
Ki_HotkeyInfo * point
er from the Ki_HotkeyInfo List
*/
*/
{
{
for
(
;
*
List
!=
NULL
;
List
++
)
for
(
;
*
List
!=
NULL
;
List
++
)
{
{
Ki_HotkeyInfo
*
hk_decr
=
*
List
;
Ki_HotkeyInfo
*
hk_decr
=
*
List
;
if
(
hk_decr
->
m_KeyCode
==
key
)
if
(
hk_decr
->
m_KeyCode
==
key
)
return
hk_decr
->
m_Idcommand
;
return
hk_decr
;
}
}
return
0
;
return
NULL
;
}
}
...
@@ -607,7 +608,8 @@ void AddHotkeyConfigMenu( wxMenu* menu )
...
@@ -607,7 +608,8 @@ void AddHotkeyConfigMenu( wxMenu* menu )
return
;
return
;
item
=
new
wxMenuItem
(
menu
,
ID_PREFERENCES_CREATE_CONFIG_HOTKEYS
,
item
=
new
wxMenuItem
(
menu
,
ID_PREFERENCES_CREATE_CONFIG_HOTKEYS
,
_
(
"Create Hotkey config file"
),
_
(
"Create Hotkey config file"
),
_
(
"Create or Recreate the hotkey config file from current hotkey list"
)
);
_
(
"Create or Recreate the hotkey config file from current hotkey list"
)
);
item
->
SetBitmap
(
save_setup_xpm
);
item
->
SetBitmap
(
save_setup_xpm
);
menu
->
Append
(
item
);
menu
->
Append
(
item
);
item
=
new
wxMenuItem
(
menu
,
ID_PREFERENCES_READ_CONFIG_HOTKEYS
,
item
=
new
wxMenuItem
(
menu
,
ID_PREFERENCES_READ_CONFIG_HOTKEYS
,
...
@@ -637,45 +639,49 @@ void AddHotkeyConfigMenu( wxMenu* menu )
...
@@ -637,45 +639,49 @@ void AddHotkeyConfigMenu( wxMenu* menu )
ADD_MENUITEM_WITH_HELP_AND_SUBMENU
(
menu
,
submenu_hkcfg
,
ADD_MENUITEM_WITH_HELP_AND_SUBMENU
(
menu
,
submenu_hkcfg
,
-
1
,
-
1
,
_
(
"Hotkey config location"
),
_
(
"Hotkey config location"
),
_
(
"Hotkey config file location selection (home directory or kicad tree)"
),
_
(
"Hotkey config file location selection (home directory or kicad tree)"
),
right_xpm
);
right_xpm
);
submenu_hkcfg
->
Check
(
ID_PREFERENCES_HOTKEY_PATH_IS_HOME
,
submenu_hkcfg
->
Check
(
ID_PREFERENCES_HOTKEY_PATH_IS_HOME
,
g_ConfigFileLocationChoice
==
0
);
g_ConfigFileLocationChoice
==
0
);
submenu_hkcfg
->
Check
(
ID_PREFERENCES_HOTKEY_PATH_IS_KICAD
,
submenu_hkcfg
->
Check
(
ID_PREFERENCES_HOTKEY_PATH_IS_KICAD
,
g_ConfigFileLocationChoice
==
1
);
g_ConfigFileLocationChoice
==
1
);
}
}
/************************************************************************/
/************************************************************************/
void
HandleHotkeyConfigMenuSelection
(
WinEDA_DrawFrame
*
frame
,
int
id
)
void
HandleHotkeyConfigMenuSelection
(
WinEDA_DrawFrame
*
frame
,
int
id
)
/************************************************************************/
/************************************************************************/
/* called on hotkey file location selecton menu
/* called on hotkey file location selecton menu
* @param frame = current WinEDA_DrawFrame
* @param frame = current WinEDA_DrawFrame
* @param id = selected menu id
* @param id = selected menu id
* @return g_ConfigFileLocationChoice (global) = new selection
* @return g_ConfigFileLocationChoice (global) = new selection
*/
*/
{
{
wxMenuBar
*
menu
=
frame
->
GetMenuBar
();
wxMenuBar
*
menu
=
frame
->
GetMenuBar
();
switch
(
id
)
switch
(
id
)
{
{
case
ID_PREFERENCES_HOTKEY_PATH_IS_HOME
:
case
ID_PREFERENCES_HOTKEY_PATH_IS_HOME
:
if
(
g_ConfigFileLocationChoice
!=
0
)
if
(
g_ConfigFileLocationChoice
!=
0
)
{
{
g_ConfigFileLocationChoice
=
0
;
g_ConfigFileLocationChoice
=
0
;
menu
->
Check
(
ID_PREFERENCES_HOTKEY_PATH_IS_HOME
,
true
);
menu
->
Check
(
ID_PREFERENCES_HOTKEY_PATH_IS_HOME
,
true
);
menu
->
Check
(
ID_PREFERENCES_HOTKEY_PATH_IS_KICAD
,
false
);
menu
->
Check
(
ID_PREFERENCES_HOTKEY_PATH_IS_KICAD
,
false
);
frame
->
m_Parent
->
m_EDA_CommonConfig
->
Write
(
HOTKEY_CFG_PATH_OPT
,
g_ConfigFileLocationChoice
);
frame
->
m_Parent
->
m_EDA_CommonConfig
->
Write
(
HOTKEY_CFG_PATH_OPT
,
g_ConfigFileLocationChoice
);
}
}
break
;
break
;
case
ID_PREFERENCES_HOTKEY_PATH_IS_KICAD
:
case
ID_PREFERENCES_HOTKEY_PATH_IS_KICAD
:
if
(
g_ConfigFileLocationChoice
!=
1
)
if
(
g_ConfigFileLocationChoice
!=
1
)
{
{
g_ConfigFileLocationChoice
=
1
;
g_ConfigFileLocationChoice
=
1
;
menu
->
Check
(
ID_PREFERENCES_HOTKEY_PATH_IS_HOME
,
false
);
menu
->
Check
(
ID_PREFERENCES_HOTKEY_PATH_IS_HOME
,
false
);
menu
->
Check
(
ID_PREFERENCES_HOTKEY_PATH_IS_KICAD
,
true
);
menu
->
Check
(
ID_PREFERENCES_HOTKEY_PATH_IS_KICAD
,
true
);
frame
->
m_Parent
->
m_EDA_CommonConfig
->
Write
(
HOTKEY_CFG_PATH_OPT
,
g_ConfigFileLocationChoice
);
frame
->
m_Parent
->
m_EDA_CommonConfig
->
Write
(
HOTKEY_CFG_PATH_OPT
,
g_ConfigFileLocationChoice
);
}
}
break
;
break
;
...
@@ -683,4 +689,3 @@ wxMenuBar * menu = frame->GetMenuBar();
...
@@ -683,4 +689,3 @@ wxMenuBar * menu = frame->GetMenuBar();
break
;
break
;
}
}
}
}
cvpcb/cvpcb.h
View file @
ba04f832
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
#include "colors.h"
#include "colors.h"
// Define print format d to display a schematic component line
// Define print format d to display a schematic component line
#define CMP_FORMAT wxT("%3d %
+8s - %+
16s : %-.32s")
#define CMP_FORMAT wxT("%3d %
8s - %
16s : %-.32s")
#define FILTERFOOTPRINTKEY "FilterFootprint"
#define FILTERFOOTPRINTKEY "FilterFootprint"
...
...
eeschema/hotkeys.cpp
View file @
ba04f832
...
@@ -27,7 +27,7 @@
...
@@ -27,7 +27,7 @@
* add the HkMyNewEntry pointer in the s_Schematic_Hotkey_List list or the s_LibEdit_Hotkey_List list
* add the HkMyNewEntry pointer in the s_Schematic_Hotkey_List list or the s_LibEdit_Hotkey_List list
* ( or s_Common_Hotkey_List if the same command is added both in eeschema and libedit)
* ( or s_Common_Hotkey_List if the same command is added both in eeschema and libedit)
* Add the new code in the switch in OnHotKey() function.
* Add the new code in the switch in OnHotKey() function.
* when the variable
PopupOn
is true, an item is currently edited.
* when the variable
ItemInEdit
is true, an item is currently edited.
* This can be usefull if the new function cannot be executed while an item is currently being edited
* This can be usefull 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.)
* ( For example, one cannot start a new wire when a component is moving.)
*
*
...
@@ -48,8 +48,8 @@ static Ki_HotkeyInfo HkZoomOut( wxT( "Zoom Out" ), HK_ZOOM_OUT, WXK_F2 );
...
@@ -48,8 +48,8 @@ static Ki_HotkeyInfo HkZoomOut( wxT( "Zoom Out" ), HK_ZOOM_OUT, WXK_F2 );
static
Ki_HotkeyInfo
HkZoomIn
(
wxT
(
"Zoom In"
),
HK_ZOOM_IN
,
WXK_F1
);
static
Ki_HotkeyInfo
HkZoomIn
(
wxT
(
"Zoom In"
),
HK_ZOOM_IN
,
WXK_F1
);
static
Ki_HotkeyInfo
HkHelp
(
wxT
(
"Help: this message"
),
HK_HELP
,
'?'
);
static
Ki_HotkeyInfo
HkHelp
(
wxT
(
"Help: this message"
),
HK_HELP
,
'?'
);
static
Ki_HotkeyInfo
HkResetLocalCoord
(
wxT
(
"Reset local coord."
),
HK_RESET_LOCAL_COORD
,
' '
);
static
Ki_HotkeyInfo
HkResetLocalCoord
(
wxT
(
"Reset local coord."
),
HK_RESET_LOCAL_COORD
,
' '
);
static
Ki_HotkeyInfo
HkUndo
(
wxT
(
"Undo"
),
HK_UNDO
,
GR_KB_CTRL
+
'Z'
);
static
Ki_HotkeyInfo
HkUndo
(
wxT
(
"Undo"
),
HK_UNDO
,
GR_KB_CTRL
+
'Z'
,
(
int
)
ID_SCHEMATIC_UNDO
);
static
Ki_HotkeyInfo
HkRedo
(
wxT
(
"Redo"
),
HK_REDO
,
GR_KB_CTRL
+
'Y'
);
static
Ki_HotkeyInfo
HkRedo
(
wxT
(
"Redo"
),
HK_REDO
,
GR_KB_CTRL
+
'Y'
,
(
int
)
ID_SCHEMATIC_REDO
);
// Schematic editor
// Schematic editor
static
Ki_HotkeyInfo
HkBeginWire
(
wxT
(
"begin Wire"
),
HK_BEGIN_WIRE
,
'W'
);
static
Ki_HotkeyInfo
HkBeginWire
(
wxT
(
"begin Wire"
),
HK_BEGIN_WIRE
,
'W'
);
...
@@ -62,7 +62,8 @@ static Ki_HotkeyInfo HkOrientNormalComponent( wxT(
...
@@ -62,7 +62,8 @@ static Ki_HotkeyInfo HkOrientNormalComponent( wxT(
"Orient Normal Component"
),
"Orient Normal Component"
),
HK_ORIENT_NORMAL_COMPONENT
,
'N'
);
HK_ORIENT_NORMAL_COMPONENT
,
'N'
);
static
Ki_HotkeyInfo
HkRotateComponent
(
wxT
(
"Rotate Component"
),
HK_ROTATE_COMPONENT
,
'R'
);
static
Ki_HotkeyInfo
HkRotateComponent
(
wxT
(
"Rotate Component"
),
HK_ROTATE_COMPONENT
,
'R'
);
static
Ki_HotkeyInfo
HkMoveComponent
(
wxT
(
"Move Component"
),
HK_MOVE_COMPONENT
,
'M'
);
static
Ki_HotkeyInfo
HkMoveComponent
(
wxT
(
"Move Component"
),
HK_MOVE_COMPONENT
,
'M'
,
ID_POPUP_SCH_MOVE_CMP_REQUEST
);
static
Ki_HotkeyInfo
HkDragComponent
(
wxT
(
"Drag Component"
),
HK_DRAG_COMPONENT
,
'G'
,
ID_POPUP_SCH_DRAG_CMP_REQUEST
);
static
Ki_HotkeyInfo
HkMove2Drag
(
wxT
(
static
Ki_HotkeyInfo
HkMove2Drag
(
wxT
(
"Switch move block to drag block"
),
"Switch move block to drag block"
),
HK_MOVEBLOCK_TO_DRAGBLOCK
,
'\t'
);
HK_MOVEBLOCK_TO_DRAGBLOCK
,
'\t'
);
...
@@ -88,7 +89,7 @@ Ki_HotkeyInfo* s_Common_Hotkey_List[] =
...
@@ -88,7 +89,7 @@ Ki_HotkeyInfo* s_Common_Hotkey_List[] =
Ki_HotkeyInfo
*
s_Schematic_Hotkey_List
[]
=
{
Ki_HotkeyInfo
*
s_Schematic_Hotkey_List
[]
=
{
&
HkNextSearch
,
&
HkNextSearch
,
&
HkDelete
,
&
HkInsert
,
&
HkMove2Drag
,
&
HkDelete
,
&
HkInsert
,
&
HkMove2Drag
,
&
HkMoveComponent
,
&
HkAddComponent
,
&
HkMoveComponent
,
&
Hk
DragComponent
,
&
Hk
AddComponent
,
&
HkRotateComponent
,
&
HkMirrorXComponent
,
&
HkMirrorYComponent
,
&
HkOrientNormalComponent
,
&
HkRotateComponent
,
&
HkMirrorXComponent
,
&
HkMirrorYComponent
,
&
HkOrientNormalComponent
,
&
HkBeginWire
,
&
HkBeginWire
,
NULL
NULL
...
@@ -135,7 +136,7 @@ void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
...
@@ -135,7 +136,7 @@ void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
* Commands are case insensitive
* Commands are case insensitive
*/
*/
{
{
bool
PopupOn
=
m_CurrentScreen
->
GetCurItem
()
bool
ItemInEdit
=
m_CurrentScreen
->
GetCurItem
()
&&
m_CurrentScreen
->
GetCurItem
()
->
m_Flags
;
&&
m_CurrentScreen
->
GetCurItem
()
->
m_Flags
;
bool
RefreshToolBar
=
FALSE
;
// We must refresh tool bar when the undo/redo tool state is modified
bool
RefreshToolBar
=
FALSE
;
// We must refresh tool bar when the undo/redo tool state is modified
...
@@ -152,11 +153,12 @@ void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
...
@@ -152,11 +153,12 @@ void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
hotkey
+=
'A'
-
'a'
;
hotkey
+=
'A'
-
'a'
;
// Search command from key :
// Search command from key :
int
CommandCode
=
GetCommandCodeFromHotkey
(
hotkey
,
s_Common_Hotkey_List
);
Ki_HotkeyInfo
*
HK_Descr
=
GetDescriptorFromHotkey
(
hotkey
,
s_Common_Hotkey_List
);
if
(
CommandCode
==
HK_NOT_FOUND
)
if
(
HK_Descr
==
NULL
)
CommandCode
=
GetCommandCodeFromHotkey
(
hotkey
,
s_Schematic_Hotkey_List
);
HK_Descr
=
GetDescriptorFromHotkey
(
hotkey
,
s_Schematic_Hotkey_List
);
if
(
HK_Descr
==
NULL
)
return
;
switch
(
CommandCode
)
switch
(
HK_Descr
->
m_Idcommand
)
{
{
default
:
default
:
case
HK_NOT_FOUND
:
case
HK_NOT_FOUND
:
...
@@ -188,16 +190,13 @@ void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
...
@@ -188,16 +190,13 @@ void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
break
;
break
;
case
HK_UNDO
:
case
HK_UNDO
:
{
wxCommandEvent
event
(
wxEVT_COMMAND_TOOL_CLICKED
,
ID_SCHEMATIC_UNDO
);
wxPostEvent
(
this
,
event
);
}
break
;
case
HK_REDO
:
case
HK_REDO
:
if
(
ItemInEdit
)
break
;
{
{
wxCommandEvent
event
(
wxEVT_COMMAND_TOOL_CLICKED
,
ID_SCHEMATIC_REDO
);
wxCommandEvent
event
(
wxEVT_COMMAND_TOOL_CLICKED
,
HK_Descr
->
m_IdMenuEvent
);
wxPostEvent
(
this
,
event
);
wxPostEvent
(
this
,
event
);
}
}
break
;
break
;
...
@@ -206,7 +205,7 @@ void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
...
@@ -206,7 +205,7 @@ void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
break
;
break
;
case
HK_DELETE
:
case
HK_DELETE
:
if
(
PopupOn
)
if
(
ItemInEdit
)
break
;
break
;
RefreshToolBar
=
LocateAndDeleteItem
(
this
,
DC
);
RefreshToolBar
=
LocateAndDeleteItem
(
this
,
DC
);
m_CurrentScreen
->
SetModify
();
m_CurrentScreen
->
SetModify
();
...
@@ -215,15 +214,17 @@ void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
...
@@ -215,15 +214,17 @@ void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
break
;
break
;
case
HK_REPEAT_LAST
:
case
HK_REPEAT_LAST
:
if
(
ItemInEdit
)
break
;
if
(
g_ItemToRepeat
&&
(
g_ItemToRepeat
->
m_Flags
==
0
)
)
if
(
g_ItemToRepeat
&&
(
g_ItemToRepeat
->
m_Flags
==
0
)
)
{
{
RepeatDrawItem
(
DC
);
RepeatDrawItem
(
DC
);
}
}
else
wxBell
();
break
;
break
;
case
HK_NEXT_SEARCH
:
case
HK_NEXT_SEARCH
:
if
(
ItemInEdit
)
break
;
if
(
g_LastSearchIsMarker
)
if
(
g_LastSearchIsMarker
)
WinEDA_SchematicFrame
::
FindMarker
(
1
);
WinEDA_SchematicFrame
::
FindMarker
(
1
);
else
else
...
@@ -231,7 +232,7 @@ void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
...
@@ -231,7 +232,7 @@ void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
break
;
break
;
case
HK_ADD_NEW_COMPONENT
:
// Add component
case
HK_ADD_NEW_COMPONENT
:
// Add component
if
(
DrawStruct
&&
DrawStruct
->
m_Flags
)
if
(
ItemInEdit
)
break
;
break
;
// switch to m_ID_current_state = ID_COMPONENT_BUTT;
// switch to m_ID_current_state = ID_COMPONENT_BUTT;
...
@@ -351,15 +352,18 @@ void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
...
@@ -351,15 +352,18 @@ void WinEDA_SchematicFrame::OnHotKey( wxDC* DC, int hotkey,
}
}
break
;
break
;
case
HK_DRAG_COMPONENT
:
// Start drag Component
case
HK_MOVE_COMPONENT
:
// Start move Component
case
HK_MOVE_COMPONENT
:
// Start move Component
if
(
PopupOn
)
if
(
ItemInEdit
)
break
;
break
;
if
(
DrawStruct
==
NULL
)
if
(
DrawStruct
==
NULL
)
DrawStruct
=
LocateSmallestComponent
(
GetScreen
()
);
DrawStruct
=
LocateSmallestComponent
(
GetScreen
()
);
if
(
DrawStruct
&&
(
DrawStruct
->
m_Flags
==
0
)
)
if
(
DrawStruct
&&
(
DrawStruct
->
m_Flags
==
0
)
)
{
{
m_CurrentScreen
->
SetCurItem
(
DrawStruct
);
m_CurrentScreen
->
SetCurItem
(
DrawStruct
);
Process_Move_Item
(
m_CurrentScreen
->
GetCurItem
(),
DC
);
wxCommandEvent
event
(
wxEVT_COMMAND_TOOL_CLICKED
,
HK_Descr
->
m_IdMenuEvent
);
wxPostEvent
(
this
,
event
);
}
}
break
;
break
;
}
}
...
@@ -378,6 +382,8 @@ void WinEDA_LibeditFrame::OnHotKey( wxDC* DC, int hotkey,
...
@@ -378,6 +382,8 @@ void WinEDA_LibeditFrame::OnHotKey( wxDC* DC, int hotkey,
* Commands are case insensitive
* Commands are case insensitive
*/
*/
{
{
bool
ItemInEdit
=
m_CurrentScreen
->
GetCurItem
()
&&
m_CurrentScreen
->
GetCurItem
()
->
m_Flags
;
bool
RefreshToolBar
=
FALSE
;
// We must refresh tool bar when the undo/redo tool state is modified
bool
RefreshToolBar
=
FALSE
;
// We must refresh tool bar when the undo/redo tool state is modified
if
(
hotkey
==
0
)
if
(
hotkey
==
0
)
...
@@ -391,11 +397,12 @@ void WinEDA_LibeditFrame::OnHotKey( wxDC* DC, int hotkey,
...
@@ -391,11 +397,12 @@ void WinEDA_LibeditFrame::OnHotKey( wxDC* DC, int hotkey,
/* Convert lower to upper case (the usual toupper function has problem with non ascii codes like function keys */
/* Convert lower to upper case (the usual toupper function has problem with non ascii codes like function keys */
if
(
(
hotkey
>=
'a'
)
&&
(
hotkey
<=
'z'
)
)
if
(
(
hotkey
>=
'a'
)
&&
(
hotkey
<=
'z'
)
)
hotkey
+=
'A'
-
'a'
;
hotkey
+=
'A'
-
'a'
;
int
CommandCode
=
GetCommandCodeFromHotkey
(
hotkey
,
s_Common_Hotkey_List
);
Ki_HotkeyInfo
*
HK_Descr
=
GetDescriptorFromHotkey
(
hotkey
,
s_Common_Hotkey_List
);
if
(
CommandCode
==
HK_NOT_FOUND
)
if
(
HK_Descr
==
NULL
)
CommandCode
=
GetCommandCodeFromHotkey
(
hotkey
,
s_LibEdit_Hotkey_List
);
HK_Descr
=
GetDescriptorFromHotkey
(
hotkey
,
s_LibEdit_Hotkey_List
);
if
(
HK_Descr
==
NULL
)
return
;
switch
(
CommandCode
)
switch
(
HK_Descr
->
m_Idcommand
)
{
{
default
:
default
:
case
HK_NOT_FOUND
:
case
HK_NOT_FOUND
:
...
@@ -427,16 +434,13 @@ void WinEDA_LibeditFrame::OnHotKey( wxDC* DC, int hotkey,
...
@@ -427,16 +434,13 @@ void WinEDA_LibeditFrame::OnHotKey( wxDC* DC, int hotkey,
break
;
break
;
case
HK_UNDO
:
case
HK_UNDO
:
{
wxCommandEvent
event
(
wxEVT_COMMAND_TOOL_CLICKED
,
ID_LIBEDIT_UNDO
);
wxPostEvent
(
this
,
event
);
}
break
;
case
HK_REDO
:
case
HK_REDO
:
if
(
ItemInEdit
)
break
;
{
{
wxCommandEvent
event
(
wxEVT_COMMAND_TOOL_CLICKED
,
ID_LIBEDIT_REDO
);
wxCommandEvent
event
(
wxEVT_COMMAND_TOOL_CLICKED
,
HK_Descr
->
m_IdMenuEvent
);
wxPostEvent
(
this
,
event
);
wxPostEvent
(
this
,
event
);
}
}
break
;
break
;
...
...
eeschema/hotkeys.h
View file @
ba04f832
...
@@ -25,6 +25,7 @@ enum hotkey_id_commnand {
...
@@ -25,6 +25,7 @@ enum hotkey_id_commnand {
HK_MIRROR_Y_COMPONENT
,
HK_MIRROR_Y_COMPONENT
,
HK_ORIENT_NORMAL_COMPONENT
,
HK_ORIENT_NORMAL_COMPONENT
,
HK_MOVE_COMPONENT
,
HK_MOVE_COMPONENT
,
HK_DRAG_COMPONENT
,
HK_ADD_NEW_COMPONENT
,
HK_ADD_NEW_COMPONENT
,
HK_BEGIN_WIRE
HK_BEGIN_WIRE
};
};
...
...
eeschema/onrightclick.cpp
View file @
ba04f832
...
@@ -284,6 +284,9 @@ void AddMenusForComponent( wxMenu* PopMenu, EDA_SchComponentStruct* Component )
...
@@ -284,6 +284,9 @@ void AddMenusForComponent( wxMenu* PopMenu, EDA_SchComponentStruct* Component )
msg
=
AddHotkeyName
(
_
(
"Move Component"
),
s_Schematic_Hokeys_Descr
,
HK_MOVE_COMPONENT
);
msg
=
AddHotkeyName
(
_
(
"Move Component"
),
s_Schematic_Hokeys_Descr
,
HK_MOVE_COMPONENT
);
ADD_MENUITEM
(
PopMenu
,
ID_POPUP_SCH_MOVE_CMP_REQUEST
,
ADD_MENUITEM
(
PopMenu
,
ID_POPUP_SCH_MOVE_CMP_REQUEST
,
msg
,
move_xpm
);
msg
,
move_xpm
);
msg
=
AddHotkeyName
(
_
(
"Drag Component"
),
s_Schematic_Hokeys_Descr
,
HK_DRAG_COMPONENT
);
ADD_MENUITEM
(
PopMenu
,
ID_POPUP_SCH_DRAG_CMP_REQUEST
,
msg
,
move_xpm
);
}
}
// add menu orient et sous menu:
// add menu orient et sous menu:
...
...
eeschema/schedit.cpp
View file @
ba04f832
...
@@ -53,6 +53,7 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
...
@@ -53,6 +53,7 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
case
ID_POPUP_SCH_MOVE_PINSHEET
:
case
ID_POPUP_SCH_MOVE_PINSHEET
:
case
ID_POPUP_SCH_MOVE_ITEM_REQUEST
:
case
ID_POPUP_SCH_MOVE_ITEM_REQUEST
:
case
ID_POPUP_SCH_MOVE_CMP_REQUEST
:
case
ID_POPUP_SCH_MOVE_CMP_REQUEST
:
case
ID_POPUP_SCH_DRAG_CMP_REQUEST
:
case
ID_POPUP_SCH_EDIT_CMP
:
case
ID_POPUP_SCH_EDIT_CMP
:
case
ID_POPUP_SCH_MIROR_X_CMP
:
case
ID_POPUP_SCH_MIROR_X_CMP
:
case
ID_POPUP_SCH_MIROR_Y_CMP
:
case
ID_POPUP_SCH_MIROR_Y_CMP
:
...
@@ -486,21 +487,27 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
...
@@ -486,21 +487,27 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
m_CurrentScreen
->
GetCurItem
(),
&
dc
);
m_CurrentScreen
->
GetCurItem
(),
&
dc
);
break
;
break
;
case
ID_POPUP_SCH_DRAG_CMP_REQUEST
:
case
ID_POPUP_SCH_MOVE_CMP_REQUEST
:
case
ID_POPUP_SCH_MOVE_CMP_REQUEST
:
// Ensure the struct is a component (could be a struct of a component, like Field, text..)
// Ensure the struct is a component (could be a struct of a component, like Field, text..)
if
(
m_CurrentScreen
->
GetCurItem
()
->
Type
()
!=
DRAW_LIB_ITEM_STRUCT_TYPE
)
if
(
m_CurrentScreen
->
GetCurItem
()
->
Type
()
!=
DRAW_LIB_ITEM_STRUCT_TYPE
)
m_CurrentScreen
->
SetCurItem
(
LocateSmallestComponent
(
GetScreen
()
)
);
m_CurrentScreen
->
SetCurItem
(
LocateSmallestComponent
(
GetScreen
()
)
);
if
(
m_CurrentScreen
->
GetCurItem
()
==
NULL
)
if
(
m_CurrentScreen
->
GetCurItem
()
==
NULL
)
break
;
break
;
case
ID_POPUP_SCH_MOVE_ITEM_REQUEST
:
case
ID_POPUP_SCH_MOVE_ITEM_REQUEST
:
DrawPanel
->
MouseToCursorSchema
();
DrawPanel
->
MouseToCursorSchema
();
Process_Move_Item
(
m_CurrentScreen
->
GetCurItem
(),
&
dc
);
if
(
id
==
ID_POPUP_SCH_DRAG_CMP_REQUEST
)
{
// The easiest way to handle a drag component is simulate a block drag command
if
(
GetScreen
()
->
BlockLocate
.
m_State
==
STATE_NO_BLOCK
)
{
if
(
!
HandleBlockBegin
(
&
dc
,
BLOCK_DRAG
,
GetScreen
()
->
m_Curseur
)
)
break
;
HandleBlockEnd
(
&
dc
);
}
}
else
Process_Move_Item
(
m_CurrentScreen
->
GetCurItem
(),
&
dc
);
break
;
break
;
case
ID_POPUP_SCH_EDIT_CMP
:
case
ID_POPUP_SCH_EDIT_CMP
:
// Ensure the struct is a component (could be a struct of a component, like Field, text..)
// Ensure the struct is a component (could be a struct of a component, like Field, text..)
if
(
m_CurrentScreen
->
GetCurItem
()
->
Type
()
!=
DRAW_LIB_ITEM_STRUCT_TYPE
)
if
(
m_CurrentScreen
->
GetCurItem
()
->
Type
()
!=
DRAW_LIB_ITEM_STRUCT_TYPE
)
m_CurrentScreen
->
SetCurItem
(
LocateSmallestComponent
(
GetScreen
()
)
);
m_CurrentScreen
->
SetCurItem
(
LocateSmallestComponent
(
GetScreen
()
)
);
...
...
gerbview/hotkeys.cpp
View file @
ba04f832
...
@@ -91,9 +91,10 @@ void WinEDA_GerberFrame::OnHotKey( wxDC* DC, int hotkey,
...
@@ -91,9 +91,10 @@ void WinEDA_GerberFrame::OnHotKey( wxDC* DC, int hotkey,
if
(
(
hotkey
>=
'a'
)
&&
(
hotkey
<=
'z'
)
)
if
(
(
hotkey
>=
'a'
)
&&
(
hotkey
<=
'z'
)
)
hotkey
+=
'A'
-
'a'
;
hotkey
+=
'A'
-
'a'
;
int
CommandCode
=
GetCommandCodeFromHotkey
(
hotkey
,
s_Gerbview_Hotkey_List
);
Ki_HotkeyInfo
*
HK_Descr
=
GetDescriptorFromHotkey
(
hotkey
,
s_Gerbview_Hotkey_List
);
if
(
HK_Descr
==
NULL
)
return
;
switch
(
CommandCode
)
switch
(
HK_Descr
->
m_Idcommand
)
{
{
default
:
default
:
case
HK_NOT_FOUND
:
case
HK_NOT_FOUND
:
...
...
include/build_version.h
View file @
ba04f832
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
COMMON_GLOBL
wxString
g_BuildVersion
COMMON_GLOBL
wxString
g_BuildVersion
#ifdef EDA_BASE
#ifdef EDA_BASE
(
wxT
(
"(2007-09-
19
)"
))
(
wxT
(
"(2007-09-
22
)"
))
#endif
#endif
;
;
...
...
include/hotkeys_basic.h
View file @
ba04f832
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
#define DEFAULT_HOTKEY_FILENAME_PATH_IS_KICAD EDA_Appl->m_BinDir + wxT( "../template/" )
#define DEFAULT_HOTKEY_FILENAME_PATH_IS_KICAD EDA_Appl->m_BinDir + wxT( "../template/" )
/* keyword idetifier in kicad config use ti store/retrieve path option */
/* keyword idetifier in kicad config use ti store/retrieve path option */
#define HOTKEY_CFG_PATH_OPT wxT(
"HotkeyPathOption"
)
#define HOTKEY_CFG_PATH_OPT wxT(
"HotkeyPathOption"
)
/* Class to handle hotkey commnands. hotkeys have a default value
/* Class to handle hotkey commnands. hotkeys have a default value
...
@@ -31,9 +31,10 @@ public:
...
@@ -31,9 +31,10 @@ public:
int
m_KeyCode
;
// Key code (ascii value for ascii keys or wxWidgets code for function key
int
m_KeyCode
;
// Key code (ascii value for ascii keys or wxWidgets code for function key
wxString
m_InfoMsg
;
// info message.
wxString
m_InfoMsg
;
// info message.
int
m_Idcommand
;
// internal id for the corresponding command (see hotkey_id_commnand list)
int
m_Idcommand
;
// internal id for the corresponding command (see hotkey_id_commnand list)
int
m_IdMenuEvent
;
// id to call the corresponding event (if any) (see id.h)
public
:
public
:
Ki_HotkeyInfo
(
const
wxChar
*
infomsg
,
int
idcommand
,
int
keycode
);
Ki_HotkeyInfo
(
const
wxChar
*
infomsg
,
int
idcommand
,
int
keycode
,
int
idmenuevent
=
0
);
};
};
/* handle a Section name and the corresponding list of hotkeys (Ki_HotkeyInfo list)
/* handle a Section name and the corresponding list of hotkeys (Ki_HotkeyInfo list)
...
@@ -92,7 +93,7 @@ COMMON_GLOBL int g_ConfigFileLocationChoice; /* 0 = files are in Home directo
...
@@ -92,7 +93,7 @@ COMMON_GLOBL int g_ConfigFileLocationChoice; /* 0 = files are in Home directo
*/
*/
wxString
ReturnHotkeyConfigFilePath
(
int
choice
);
wxString
ReturnHotkeyConfigFilePath
(
int
choice
);
void
AddHotkeyConfigMenu
(
wxMenu
*
menu
);
void
AddHotkeyConfigMenu
(
wxMenu
*
menu
);
void
HandleHotkeyConfigMenuSelection
(
WinEDA_DrawFrame
*
frame
,
int
id
);
void
HandleHotkeyConfigMenuSelection
(
WinEDA_DrawFrame
*
frame
,
int
id
);
wxString
ReturnKeyNameFromKeyCode
(
int
keycode
);
wxString
ReturnKeyNameFromKeyCode
(
int
keycode
);
wxString
ReturnKeyNameFromCommandId
(
Ki_HotkeyInfo
**
List
,
int
CommandId
);
wxString
ReturnKeyNameFromCommandId
(
Ki_HotkeyInfo
**
List
,
int
CommandId
);
wxString
AddHotkeyName
(
const
wxString
&
text
,
Ki_HotkeyInfo
**
List
,
int
CommandId
);
wxString
AddHotkeyName
(
const
wxString
&
text
,
Ki_HotkeyInfo
**
List
,
int
CommandId
);
...
@@ -101,7 +102,7 @@ wxString AddHotkeyName( const wxString& text,
...
@@ -101,7 +102,7 @@ wxString AddHotkeyName( const wxString& text,
int
CommandId
);
int
CommandId
);
void
DisplayHotkeyList
(
WinEDA_DrawFrame
*
frame
,
void
DisplayHotkeyList
(
WinEDA_DrawFrame
*
frame
,
struct
Ki_HotkeyInfoSectionDescriptor
*
List
);
struct
Ki_HotkeyInfoSectionDescriptor
*
List
);
int
GetCommandCode
FromHotkey
(
int
key
,
Ki_HotkeyInfo
**
List
);
Ki_HotkeyInfo
*
GetDescriptor
FromHotkey
(
int
key
,
Ki_HotkeyInfo
**
List
);
#endif // HOTKEYS_BASIC_H
#endif // HOTKEYS_BASIC_H
include/id.h
View file @
ba04f832
...
@@ -282,7 +282,7 @@ enum main_id {
...
@@ -282,7 +282,7 @@ enum main_id {
ID_POPUP_SCH_DELETE_NODE
,
ID_POPUP_SCH_DELETE_NODE
,
ID_POPUP_SCH_MOVE_CMP_REQUEST
,
ID_POPUP_SCH_MOVE_CMP_REQUEST
,
ID_POPUP_SCH_DELETE_CMP
,
ID_POPUP_SCH_DELETE_CMP
,
ID_POPUP_SCH_
UNUSED_0
,
ID_POPUP_SCH_
DRAG_CMP_REQUEST
,
ID_POPUP_SCH_UNUSED_1
,
ID_POPUP_SCH_UNUSED_1
,
ID_POPUP_SCH_UNUSED_2
,
ID_POPUP_SCH_UNUSED_2
,
ID_POPUP_SCH_ENTRY_SELECT_SLASH
,
ID_POPUP_SCH_ENTRY_SELECT_SLASH
,
...
...
libs.linux
View file @
ba04f832
...
@@ -25,9 +25,9 @@ KICAD_TEMPLATE=$(KICAD_DATA)/template
...
@@ -25,9 +25,9 @@ KICAD_TEMPLATE=$(KICAD_DATA)/template
else
else
# used by myself (JP Charras) to build a statically linked distribution intalled in /usr/local (with STD_INSTALL = 0)
# used by myself (JP Charras) to build a statically linked distribution intalled in /usr/local (with STD_INSTALL = 0)
PREFIX = /usr/local/
linux
PREFIX = /usr/local/
kicad
KICAD_BIN = $(PREFIX)/
bin
KICAD_BIN = $(PREFIX)/
linux
KICAD_PLUGINS = $(
PREFIX)/linux
/plugins
KICAD_PLUGINS = $(
KICAD_BIN)
/plugins
KICAD_DOCS=$(PREFIX)/help
KICAD_DOCS=$(PREFIX)/help
KICAD_DATA=$(PREFIX)
KICAD_DATA=$(PREFIX)
KICAD_MODULES=$(KICAD_DATA)/modules
KICAD_MODULES=$(KICAD_DATA)/modules
...
@@ -121,12 +121,15 @@ ifeq ($(KICAD_STATIC_LINK), 1)
...
@@ -121,12 +121,15 @@ ifeq ($(KICAD_STATIC_LINK), 1)
LIBS3D = $(WXPATH)/$(PREFIX_WX_LIBS)$(SUFFIX_WX_LIBGL)\
LIBS3D = $(WXPATH)/$(PREFIX_WX_LIBS)$(SUFFIX_WX_LIBGL)\
$(MESALIBSPATH)/libGL.a $(MESALIBSPATH)/libGLU.a
$(MESALIBSPATH)/libGL.a $(MESALIBSPATH)/libGLU.a
AUXLIB = -lXxf86vm
#AUXLIB = /usr/X11R6/lib/libXinerama.a
WXSYSLIB= $(WXPATH)/$(PREFIX_WX_LIBS)-$(LIBVERSION).a \
WXSYSLIB= $(WXPATH)/$(PREFIX_WX_LIBS)-$(LIBVERSION).a \
$(WXPATH)/libwxpng-$(LIBVERSION).a\
$(WXPATH)/libwxpng-$(LIBVERSION).a\
$(WXPATH)/libwxjpeg-$(LIBVERSION).a\
$(WXPATH)/libwxjpeg-$(LIBVERSION).a\
$(WXPATH)/libwxzlib-$(LIBVERSION).a\
$(WXPATH)/libwxzlib-$(LIBVERSION).a\
$(LIBREGEX)\
$(LIBREGEX)\
/usr/X11R6/lib/libXinerama.a
\
$(AUXLIB)
\
-lgtk-x11-2.0 -lgdk-x11-2.0 \
-lgtk-x11-2.0 -lgdk-x11-2.0 \
-latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lgthread-2.0\
-latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lgthread-2.0\
-lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl\
-lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl\
...
@@ -134,18 +137,8 @@ WXSYSLIB= $(WXPATH)/$(PREFIX_WX_LIBS)-$(LIBVERSION).a \
...
@@ -134,18 +137,8 @@ WXSYSLIB= $(WXPATH)/$(PREFIX_WX_LIBS)-$(LIBVERSION).a \
-L/usr/lib $(PYLIBS)
-L/usr/lib $(PYLIBS)
WXSYSLIB_WITH_GL= $(WXPATH)/$(PREFIX_WX_LIBS)-$(LIBVERSION).a \
WXSYSLIB_WITH_GL= $(WXSYSLIB) $(LIBS3D)
$(WXPATH)/libwxpng-$(LIBVERSION).a\
$(WXPATH)/libwxjpeg-$(LIBVERSION).a\
$(WXPATH)/libwxzlib-$(LIBVERSION).a\
$(LIBS3D)\
/usr/X11R6/lib/libXinerama.a \
/usr/X11R6/lib/libXxf86vm.a \
-lgtk-x11-2.0 -lgdk-x11-2.0 \
-latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lgthread-2.0\
-lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl\
-lglib-2.0 -lpangoft2-1.0 -lSM\
-L/usr/lib $(PYLIBS)
else
else
ifeq ($(DEBUG), 1)
ifeq ($(DEBUG), 1)
...
...
pcbnew/hotkeys.cpp
View file @
ba04f832
...
@@ -186,12 +186,14 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey,
...
@@ -186,12 +186,14 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey,
if
(
(
hotkey
>=
'a'
)
&&
(
hotkey
<=
'z'
)
)
if
(
(
hotkey
>=
'a'
)
&&
(
hotkey
<=
'z'
)
)
hotkey
+=
'A'
-
'a'
;
hotkey
+=
'A'
-
'a'
;
int
CommandCode
=
GetCommandCodeFromHotkey
(
hotkey
,
s_Common_Hotkey_List
);
Ki_HotkeyInfo
*
HK_Descr
=
GetDescriptorFromHotkey
(
hotkey
,
s_Common_Hotkey_List
);
if
(
CommandCode
==
HK_NOT_FOUND
)
if
(
HK_Descr
==
NULL
)
CommandCode
=
GetCommandCodeFromHotkey
(
hotkey
,
s_board_edit_Hotkey_List
);
HK_Descr
=
GetDescriptorFromHotkey
(
hotkey
,
s_board_edit_Hotkey_List
);
if
(
HK_Descr
==
NULL
)
return
;
int
ll
;
int
ll
;
switch
(
CommandCode
)
switch
(
HK_Descr
->
m_Idcommand
)
{
{
default
:
default
:
case
HK_NOT_FOUND
:
case
HK_NOT_FOUND
:
...
@@ -465,7 +467,7 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey,
...
@@ -465,7 +467,7 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey,
SetCurItem
(
module
);
SetCurItem
(
module
);
}
}
switch
(
CommandCode
)
switch
(
HK_Descr
->
m_Idcommand
)
{
{
case
HK_ROTATE_FOOTPRINT
:
// Rotation
case
HK_ROTATE_FOOTPRINT
:
// Rotation
Rotate_Module
(
DC
,
module
,
900
,
TRUE
);
Rotate_Module
(
DC
,
module
,
900
,
TRUE
);
...
@@ -506,11 +508,12 @@ void WinEDA_ModuleEditFrame::OnHotKey( wxDC* DC, int hotkey,
...
@@ -506,11 +508,12 @@ void WinEDA_ModuleEditFrame::OnHotKey( wxDC* DC, int hotkey,
if
(
(
hotkey
>=
'a'
)
&&
(
hotkey
<=
'z'
)
)
if
(
(
hotkey
>=
'a'
)
&&
(
hotkey
<=
'z'
)
)
hotkey
+=
'A'
-
'a'
;
hotkey
+=
'A'
-
'a'
;
int
CommandCode
=
GetCommandCodeFromHotkey
(
hotkey
,
s_Common_Hotkey_List
);
Ki_HotkeyInfo
*
HK_Descr
=
GetDescriptorFromHotkey
(
hotkey
,
s_Common_Hotkey_List
);
if
(
CommandCode
==
HK_NOT_FOUND
)
if
(
HK_Descr
==
NULL
)
CommandCode
=
GetCommandCodeFromHotkey
(
hotkey
,
s_module_edit_Hotkey_List
);
HK_Descr
=
GetDescriptorFromHotkey
(
hotkey
,
s_module_edit_Hotkey_List
);
if
(
HK_Descr
==
NULL
)
return
;
switch
(
CommandCode
)
switch
(
HK_Descr
->
m_Idcommand
)
{
{
default
:
default
:
case
HK_NOT_FOUND
:
case
HK_NOT_FOUND
:
...
...
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