# HG changeset patch
# User laurent
# Date 1320788384 -3600
# Node ID 3c9fbe483124ee2f717b1405e5420cab62117c78
# Parent 61347cc521d188ca67b9626fdca023a653e66e72# Parent 9a9636e16d1551e4bc9206c874491f21803c3863
Merging with Edouard's modifications
diff -r 61347cc521d1 -r 3c9fbe483124 Beremiz.py
--- a/Beremiz.py Mon Oct 17 21:43:20 2011 +0200
+++ b/Beremiz.py Tue Nov 08 22:39:44 2011 +0100
@@ -489,7 +489,7 @@
name = _("Beremiz")
if self.PluginRoot is not None:
projectname = self.PluginRoot.GetProjectName()
- if self.PluginRoot.PlugTestModified():
+ if self.PluginRoot.ProjectTestModified():
projectname = "~%s~" % projectname
self.SetTitle("%s - %s" % (name, projectname))
else:
@@ -615,7 +615,7 @@
self.FileMenu.Enable(wx.ID_PREVIEW, False)
self.FileMenu.Enable(wx.ID_PRINT, False)
self.FileMenu.Enable(wx.ID_PAGE_SETUP, True)
- self.FileMenu.Enable(wx.ID_SAVE, self.PluginRoot.PlugTestModified())
+ self.FileMenu.Enable(wx.ID_SAVE, self.PluginRoot.ProjectTestModified())
self.FileMenu.Enable(wx.ID_SAVEAS, True)
self.FileMenu.Enable(wx.ID_PROPERTIES, True)
self.FileMenu.Enable(wx.ID_CLOSE_ALL, True)
diff -r 61347cc521d1 -r 3c9fbe483124 images/Cfile.png
Binary file images/Cfile.png has changed
diff -r 61347cc521d1 -r 3c9fbe483124 images/icons.svg
--- a/images/icons.svg Mon Oct 17 21:43:20 2011 +0200
+++ b/images/icons.svg Tue Nov 08 22:39:44 2011 +0100
@@ -15,7 +15,7 @@
height="1052.3622"
id="svg2"
sodipodi:version="0.32"
- inkscape:version="0.48.1 r9760"
+ inkscape:version="0.48.2 r9819"
sodipodi:docname="icons.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ transform="matrix(0.9968636,0,0,0.9968648,-6.725278,-132.08626)">
+ style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
@@ -83980,90 +84387,104 @@
mask="url(#mask2542)"
id="use28985">
+ style="fill:#bcbcbc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#bcbcbc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:url(#linearGradient19277);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:url(#linearGradient19279);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
%% Add Delete Disabled Enabled HideVars IECCDown IECCUp Maximize Minimize minus plus ShowVars %%
@@ -84993,33 +85414,37 @@
transform="matrix(4.5011397,0,0,4.5011397,2971.834,-119.97324)" />
+ transform="translate(25.999952,3.97794)">
+ style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:url(#linearGradient18989);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#000000;fill-opacity:0.3707483;fill-rule:nonzero;stroke:none;stroke-width:3.8948915;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.8948915;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:url(#linearGradient18991);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ transform="translate(19.498009,-0.38403)">
+ style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#000000;fill-opacity:0.3707483;fill-rule:nonzero;stroke:none;stroke-width:3.8948915;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.8948915;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ transform="matrix(0.9968618,0,0,0.996865,-396.72428,-20.086391)">
+ style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:url(#linearGradient19189);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ inkscape:connector-curvature="0" />
+ transform="matrix(0.9968618,0,0,0.9968618,-339.72428,-40.08488)">
+ style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#00fe1a;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ inkscape:connector-curvature="0" />
+ transform="matrix(0.965737,0,0,0.965737,-233.99669,-40.83328)">
+ style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
@@ -85111,16 +85540,17 @@
id="g28153"
style="opacity:0.14110431">
+ style="fill:url(#radialGradient19191);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:url(#linearGradient19205);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:url(#radialGradient19207);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:url(#linearGradient19221);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:url(#linearGradient19223);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:url(#linearGradient19225);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:url(#linearGradient19227);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ transform="matrix(1,0,0,-1,-6.571463,684.20104)">
+ d="m 355.05621,241.25824 -12.96954,0 6.48477,7.16116 6.48477,-7.16116 z"
+ inkscape:connector-curvature="0" />
+ transform="translate(39.428537,194.5234)">
+ d="m 355.05621,241.25824 -12.96954,0 6.48477,7.16116 6.48477,-7.16116 z"
+ inkscape:connector-curvature="0" />
+ transform="matrix(0.9968629,0,0,0.9968629,-119.72484,-118.08517)">
+ style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
@@ -85417,258 +85856,289 @@
id="g26641"
style="opacity:0.19938654">
+ style="fill:#bcbcbc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#bcbcbc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#bcbcbc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#bcbcbc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#7f7f7f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:url(#linearGradient19245);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:url(#linearGradient19247);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:url(#linearGradient19249);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:url(#linearGradient19251);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ transform="matrix(0.996861,0,0,0.996861,17.276127,-163.08392)">
+ style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#9b9b9b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.07859244px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.07859244px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.07859244px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ transform="matrix(0.996861,0,0,0.996861,58.276127,-183.08387)">
+ style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#9b9b9b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.07859244px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.07859244px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.07859244px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.07859244px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
Params
Buttons
+ transform="translate(20,-0.08439)">
+ style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="font-size:5.94289637px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:80.00000119%;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient18415);stroke:none;font-family:Courier New;-inkscape-font-specification:Courier New Bold"
+ d="m 347.35174,239.62236 0,2.32725 0.60068,0 c 0.14315,0 0.24471,0.028 0.30469,0.0841 0.0619,0.0542 0.0928,0.12575 0.0928,0.21474 0,0.0871 -0.031,0.15863 -0.0928,0.21473 -0.06,0.0542 -0.16154,0.0812 -0.30469,0.0812 l -1.79622,0 c -0.14316,0 -0.24569,-0.0271 -0.30759,-0.0812 -0.06,-0.0561 -0.09,-0.12865 -0.09,-0.21764 0,-0.0871 0.03,-0.15766 0.09,-0.21183 0.0619,-0.0561 0.16443,-0.0841 0.30759,-0.0841 l 0.60067,0 0,-2.32725 -0.60067,0 c -0.14316,0 -0.24569,-0.0271 -0.30759,-0.0812 -0.06,-0.0561 -0.09,-0.12864 -0.09,-0.21763 0,-0.089 0.03,-0.16057 0.09,-0.21474 0.0619,-0.0561 0.16443,-0.0842 0.30759,-0.0842 l 1.79622,0.003 c 0.14315,1e-5 0.24471,0.0271 0.30469,0.0813 0.0619,0.0542 0.0928,0.12575 0.0928,0.21474 0,0.089 -0.031,0.16153 -0.0928,0.21763 -0.06,0.0542 -0.16154,0.0812 -0.30469,0.0812 l -0.60068,0 m 3.65628,1.1288 0.99242,1.19845 c 0.118,0.002 0.20602,0.0309 0.26406,0.0871 0.06,0.0542 0.0899,0.12478 0.09,0.21184 -10e-6,0.0871 -0.031,0.15863 -0.0929,0.21473 -0.06,0.0542 -0.16154,0.0812 -0.30469,0.0812 l -0.67032,0 c -0.14122,0 -0.24279,-0.0271 -0.30469,-0.0812 -0.06,-0.0561 -0.09,-0.12865 -0.0899,-0.21764 -10e-6,-0.0832 0.028,-0.15186 0.0841,-0.20602 0.0561,-0.0561 0.14025,-0.0861 0.25246,-0.09 l -0.59778,-0.73706 -0.60357,0.73706 c 0.11027,0.004 0.19345,0.0339 0.24955,0.09 0.0561,0.0561 0.0841,0.12574 0.0842,0.20893 -10e-6,0.0871 -0.031,0.15863 -0.0929,0.21473 -0.06,0.0542 -0.16154,0.0812 -0.30469,0.0812 l -0.66742,0 c -0.14315,0 -0.24568,-0.0271 -0.30759,-0.0812 -0.06,-0.0561 -0.0899,-0.12865 -0.0899,-0.21764 0,-0.0851 0.03,-0.15573 0.0899,-0.21183 0.06,-0.0561 0.14799,-0.0841 0.26407,-0.0841 l 0.98661,-1.20425 -0.94019,-1.123 c -0.11607,-0.004 -0.20312,-0.0329 -0.26116,-0.087 -0.0561,-0.0561 -0.0842,-0.12671 -0.0842,-0.21183 0,-0.089 0.03,-0.16057 0.09,-0.21474 0.0619,-0.0561 0.16443,-0.0842 0.30759,-0.0842 l 0.54844,0.003 c 0.14315,1e-5 0.24472,0.0271 0.30469,0.0813 0.0619,0.0542 0.0928,0.12575 0.0929,0.21474 -10e-6,0.0658 -0.0193,0.12574 -0.058,0.17991 -0.0251,0.0329 -0.0813,0.0726 -0.16831,0.11897 l 0.55425,0.66452 0.54264,-0.66452 c -0.0871,-0.0464 -0.14316,-0.0861 -0.16831,-0.11897 -0.0387,-0.0542 -0.058,-0.11414 -0.058,-0.17991 -10e-6,-0.087 0.03,-0.15863 0.0899,-0.21474 0.0619,-0.0561 0.16444,-0.0842 0.30759,-0.0842 l 0.54554,0.003 c 0.14316,10e-6 0.24472,0.0271 0.30469,0.0813 0.0619,0.0542 0.0929,0.12575 0.0929,0.21474 0,0.0851 -0.03,0.15573 -0.09,0.21183 -0.058,0.0561 -0.14315,0.0851 -0.25535,0.087 l -0.92858,1.1288 m 4.47168,-0.41495 0,0.6529 c 0,0.38691 -0.11221,0.75737 -0.33661,1.11139 -0.22247,0.35402 -0.54167,0.53103 -0.9576,0.53103 -0.23988,0 -0.44301,-0.0522 -0.60937,-0.15669 -0.16444,-0.1064 -0.32114,-0.30082 -0.4701,-0.58327 -0.14702,-0.28437 -0.22053,-0.58519 -0.22053,-0.90246 l 0,-0.6529 c 0,-0.38497 0.11123,-0.75447 0.3337,-1.10849 0.22247,-0.35595 0.54167,-0.53393 0.9576,-0.53394 0.23794,1e-5 0.43914,0.0522 0.60357,0.1567 0.16637,0.10447 0.32404,0.29889 0.473,0.58326 0.15089,0.28245 0.22634,0.58327 0.22634,0.90247 m -0.59777,0 c 0,-0.32307 -0.09,-0.60551 -0.26987,-0.84733 -0.10253,-0.13348 -0.24666,-0.20022 -0.43237,-0.20023 -0.17991,1e-5 -0.32694,0.0735 -0.44107,0.22054 -0.17218,0.22248 -0.25827,0.49815 -0.25826,0.82702 l 0,0.6529 c -1e-5,0.32501 0.0909,0.60745 0.27277,0.84733 0.10059,0.13348 0.24471,0.20022 0.43236,0.20022 0.17798,0 0.32404,-0.0735 0.43818,-0.22053 0.17217,-0.22247 0.25826,-0.49815 0.25826,-0.82702 l 0,-0.6529 m -7.51816,6.17938 0,2.32725 0.60068,0 c 0.14315,0 0.24471,0.0281 0.30469,0.0841 0.0619,0.0542 0.0928,0.12575 0.0928,0.21473 0,0.0871 -0.031,0.15864 -0.0928,0.21474 -0.06,0.0542 -0.16154,0.0813 -0.30469,0.0813 l -1.79622,0 c -0.14316,0 -0.24569,-0.0271 -0.30759,-0.0813 -0.06,-0.0561 -0.09,-0.12865 -0.09,-0.21764 0,-0.0871 0.03,-0.15766 0.09,-0.21183 0.0619,-0.0561 0.16443,-0.0841 0.30759,-0.0841 l 0.60067,0 0,-2.32725 -0.60067,0 c -0.14316,0 -0.24569,-0.0271 -0.30759,-0.0813 -0.06,-0.0561 -0.09,-0.12864 -0.09,-0.21764 0,-0.089 0.03,-0.16056 0.09,-0.21473 0.0619,-0.0561 0.16443,-0.0841 0.30759,-0.0841 l 1.79622,0.003 c 0.14315,0 0.24471,0.0271 0.30469,0.0813 0.0619,0.0542 0.0928,0.12575 0.0928,0.21473 0,0.089 -0.031,0.16154 -0.0928,0.21764 -0.06,0.0542 -0.16154,0.0813 -0.30469,0.0813 l -0.60068,0 m 2.05158,2.32725 0,-2.32725 -0.0929,0 c -0.14315,0 -0.24568,-0.0271 -0.30759,-0.0813 -0.06,-0.0561 -0.09,-0.12864 -0.09,-0.21764 0,-0.089 0.03,-0.16056 0.09,-0.21473 0.0619,-0.0561 0.16444,-0.0841 0.30759,-0.0841 l 1.49153,0 c 0.35595,0 0.64226,0.0996 0.85893,0.29888 0.21667,0.19733 0.325,0.43238 0.32501,0.70514 -1e-5,0.12962 -0.0252,0.25149 -0.0754,0.36563 -0.0503,0.11414 -0.12672,0.21957 -0.22924,0.3163 0.18764,0.1122 0.3279,0.24375 0.42076,0.39464 0.0948,0.14896 0.14218,0.31823 0.14219,0.50782 -1e-5,0.15089 -0.0339,0.29115 -0.10157,0.42076 -0.0503,0.0987 -0.1122,0.17701 -0.18571,0.23505 -0.0987,0.0813 -0.21957,0.14799 -0.36273,0.20022 -0.14316,0.0503 -0.3221,0.0755 -0.53683,0.0755 l -1.74689,0 c -0.14315,0 -0.24568,-0.0271 -0.30759,-0.0813 -0.06,-0.0561 -0.09,-0.12865 -0.09,-0.21764 0,-0.0871 0.031,-0.15766 0.0929,-0.21183 0.0619,-0.0561 0.16347,-0.0841 0.30469,-0.0841 l 0.0929,0 m 0.59487,-1.46251 0.65291,0 c 0.23407,0 0.42849,-0.059 0.58326,-0.17701 0.10446,-0.0793 0.15669,-0.17798 0.1567,-0.29599 -10e-6,-0.10446 -0.0493,-0.19538 -0.148,-0.27277 -0.0987,-0.0793 -0.25536,-0.11897 -0.47009,-0.11897 l -0.77478,0 0,0.86474 m 0,1.46251 1.02724,0 c 0.24181,0 0.41205,-0.0358 0.51072,-0.10737 0.0754,-0.0542 0.11316,-0.13155 0.11317,-0.23214 -10e-6,-0.11994 -0.0745,-0.23795 -0.22344,-0.35402 -0.14896,-0.11607 -0.36273,-0.17411 -0.6413,-0.17411 l -0.78639,0 0,0.86764 m 5.48151,-1.61341 0,0.65291 c 0,0.38691 -0.11221,0.75737 -0.33661,1.11139 -0.22247,0.35402 -0.54167,0.53103 -0.9576,0.53103 -0.23988,0 -0.44301,-0.0522 -0.60937,-0.1567 -0.16444,-0.1064 -0.32114,-0.30082 -0.4701,-0.58326 -0.14702,-0.28437 -0.22053,-0.58519 -0.22053,-0.90246 l 0,-0.65291 c 0,-0.38497 0.11123,-0.75446 0.3337,-1.10849 0.22247,-0.35595 0.54167,-0.53392 0.9576,-0.53393 0.23794,1e-5 0.43914,0.0522 0.60357,0.1567 0.16637,0.10447 0.32404,0.29889 0.473,0.58326 0.15089,0.28245 0.22634,0.58327 0.22634,0.90246 m -0.59777,0 c 0,-0.32306 -0.09,-0.6055 -0.26987,-0.84732 -0.10253,-0.13348 -0.24666,-0.20022 -0.43237,-0.20023 -0.17991,10e-6 -0.32694,0.0735 -0.44107,0.22054 -0.17218,0.22247 -0.25827,0.49815 -0.25826,0.82701 l 0,0.65291 c -10e-6,0.325 0.0909,0.60745 0.27277,0.84733 0.10059,0.13348 0.24471,0.20022 0.43236,0.20022 0.17798,0 0.32404,-0.0735 0.43818,-0.22054 0.17217,-0.22247 0.25826,-0.49814 0.25826,-0.82701 l 0,-0.65291 m -7.69451,8.50083 -0.0174,0.0261 c 0.20506,0 0.39755,0.0416 0.57746,0.12477 0.0735,0.0348 0.13445,0.0522 0.18282,0.0522 0.0696,0 0.15476,-0.0329 0.25536,-0.0987 0.10059,-0.0658 0.1799,-0.0987 0.23794,-0.0987 0.0832,0 0.15283,0.0281 0.20893,0.0842 0.058,0.058 0.0871,0.12961 0.0871,0.21473 -1e-5,0.10253 -0.0532,0.19152 -0.1596,0.26697 -0.21087,0.15089 -0.47493,0.22634 -0.6355,0.22634 -0.16056,0 -0.21763,-0.0213 -0.3279,-0.0638 -0.17798,-0.0697 -0.3192,-0.10447 -0.42366,-0.10447 -0.16831,0 -0.42464,0.0435 -0.76898,0.13058 -0.0716,0.0174 -0.12768,0.0261 -0.16831,0.0261 -0.0754,0 -0.14219,-0.03 -0.20022,-0.09 -0.0561,-0.058 -0.0842,-0.13154 -0.0842,-0.22053 -1e-5,-0.0774 0.0387,-0.1538 0.11607,-0.22925 l 0.38013,-0.36852 c -0.31339,-0.13542 -0.56972,-0.35596 -0.76897,-0.66162 -0.19733,-0.30565 -0.29599,-0.65774 -0.29599,-1.05625 0,-0.57649 0.19829,-1.04658 0.59487,-1.41028 0.31726,-0.29211 0.67419,-0.43817 1.07077,-0.43817 0.39851,0 0.7564,0.14606 1.07367,0.43817 0.39657,0.3637 0.59486,0.83379 0.59487,1.41028 -1e-5,0.49524 -0.14993,0.916 -0.44978,1.26228 -0.29986,0.34435 -0.65968,0.53684 -1.07948,0.57746 m 0.93439,-1.83974 c -10e-6,-0.36176 -0.10931,-0.66064 -0.32791,-0.89666 -0.2186,-0.23795 -0.46719,-0.35692 -0.74576,-0.35692 -0.27664,0 -0.52426,0.11897 -0.74286,0.35692 -0.21861,0.23795 -0.32791,0.53684 -0.32791,0.89666 0,0.35982 0.1093,0.65871 0.32791,0.89665 0.2186,0.23602 0.46622,0.35403 0.74286,0.35402 0.27857,1e-5 0.52716,-0.118 0.74576,-0.35402 0.2186,-0.23601 0.3279,-0.53489 0.32791,-0.89665 m 1.27679,1.16362 0,-2.32725 -0.0929,0 c -0.14315,1e-5 -0.24568,-0.0271 -0.30759,-0.0813 -0.06,-0.0561 -0.09,-0.12864 -0.09,-0.21763 0,-0.089 0.03,-0.16057 0.09,-0.21474 0.0619,-0.0561 0.16444,-0.0841 0.30759,-0.0841 l 1.49153,0 c 0.35595,0 0.64226,0.0996 0.85893,0.29889 0.21667,0.19732 0.325,0.43237 0.32501,0.70514 -10e-6,0.12961 -0.0252,0.25149 -0.0754,0.36562 -0.0503,0.11414 -0.12672,0.21958 -0.22924,0.3163 0.18764,0.1122 0.3279,0.24375 0.42076,0.39465 0.0948,0.14896 0.14218,0.31823 0.14219,0.50781 -1e-5,0.1509 -0.0339,0.29115 -0.10157,0.42076 -0.0503,0.0987 -0.1122,0.17701 -0.18571,0.23505 -0.0987,0.0812 -0.21957,0.14799 -0.36273,0.20022 -0.14316,0.0503 -0.3221,0.0755 -0.53683,0.0755 l -1.74689,0 c -0.14315,0 -0.24568,-0.0271 -0.30759,-0.0813 -0.06,-0.0561 -0.09,-0.12865 -0.09,-0.21764 0,-0.0871 0.031,-0.15766 0.0929,-0.21183 0.0619,-0.0561 0.16347,-0.0842 0.30469,-0.0842 l 0.0929,0 m 0.59487,-1.46251 0.65291,0 c 0.23407,0 0.42849,-0.059 0.58326,-0.17701 0.10446,-0.0793 0.15669,-0.17797 0.1567,-0.29598 -1e-5,-0.10447 -0.0493,-0.19539 -0.148,-0.27277 -0.0987,-0.0793 -0.25536,-0.11897 -0.47009,-0.11898 l -0.77478,0 0,0.86474 m 0,1.46251 1.02724,0 c 0.24181,0 0.41205,-0.0358 0.51072,-0.10737 0.0754,-0.0542 0.11316,-0.13154 0.11317,-0.23214 -1e-5,-0.11994 -0.0745,-0.23795 -0.22344,-0.35402 -0.14896,-0.11607 -0.36273,-0.17411 -0.6413,-0.17411 l -0.78639,0 0,0.86764 m 5.48151,-1.6134 0,0.6529 c 0,0.38691 -0.11221,0.75738 -0.33661,1.11139 -0.22247,0.35402 -0.54167,0.53103 -0.9576,0.53103 -0.23988,0 -0.44301,-0.0522 -0.60937,-0.15669 -0.16444,-0.1064 -0.32114,-0.30082 -0.4701,-0.58327 -0.14702,-0.28437 -0.22053,-0.58519 -0.22053,-0.90246 l 0,-0.6529 c 0,-0.38497 0.11123,-0.75447 0.3337,-1.10849 0.22247,-0.35595 0.54167,-0.53393 0.9576,-0.53393 0.23794,0 0.43914,0.0522 0.60357,0.15669 0.16637,0.10447 0.32404,0.29889 0.473,0.58327 0.15089,0.28244 0.22634,0.58326 0.22634,0.90246 m -0.59777,0 c 0,-0.32307 -0.09,-0.60551 -0.26987,-0.84733 -0.10253,-0.13348 -0.24666,-0.20022 -0.43237,-0.20022 -0.17991,0 -0.32694,0.0735 -0.44107,0.22053 -0.17218,0.22248 -0.25827,0.49815 -0.25826,0.82702 l 0,0.6529 c -10e-6,0.32501 0.0909,0.60745 0.27277,0.84733 0.10059,0.13348 0.24471,0.20023 0.43236,0.20022 0.17798,1e-5 0.32404,-0.0735 0.43818,-0.22053 0.17217,-0.22247 0.25826,-0.49814 0.25826,-0.82702 l 0,-0.6529 m -7.68979,7.04385 -0.0174,0.0261 c 0.20506,0 0.40045,1.76474 0.58036,1.84793 0.0735,0.0348 0.13445,0.0522 0.18282,0.0522 0.0696,0 0.15476,-0.0329 0.25536,-0.0987 0.10059,-0.0658 0.1799,-0.0987 0.23794,-0.0987 0.0832,0 0.15283,0.0281 0.20893,0.0842 0.058,0.058 0.0871,0.12961 0.0871,0.21473 -1e-5,0.10253 -0.0532,0.19152 -0.1596,0.26697 -0.21087,0.15089 -0.4227,0.22634 -0.6355,0.22634 -0.10833,0 -0.21763,-0.0213 -0.3279,-0.0638 -0.17798,-0.0696 -0.3192,-0.10446 -0.42366,-0.10446 -0.16831,0 -0.42464,0.0435 -0.76898,0.13058 -0.0716,0.0174 -0.12768,0.0261 -0.16831,0.0261 -0.0754,0 -0.14219,-0.03 -0.20022,-0.0899 -0.0561,-0.058 -0.0842,-0.13155 -0.0842,-0.22054 -10e-6,-0.0774 0.0387,-0.1538 0.11607,-0.22924 l 0.38013,-0.36853 c -0.31339,-0.13542 -0.56972,-0.35596 -0.76897,-0.66161 -0.19733,-0.30566 -0.29599,-0.65774 -0.29599,-1.05626 0,-0.57649 0.19829,-1.04658 0.59487,-1.41028 0.31726,-0.29211 0.67419,-0.43817 1.07077,-0.43817 0.39851,0 0.7564,0.14606 1.07367,0.43817 0.39657,0.3637 0.59486,0.83379 0.59487,1.41028 -1e-5,0.49524 -0.14993,0.916 -0.44978,1.26229 -0.29986,0.34434 -0.65968,0.53683 -1.07948,0.57745 m 0.93439,-1.83974 c -10e-6,-0.36176 -0.10931,-0.66064 -0.32791,-0.89666 -0.2186,-0.23794 -0.46719,-0.35692 -0.74576,-0.35692 -0.27664,0 -0.52426,0.11898 -0.74286,0.35692 -0.21861,0.23795 -0.32791,0.53684 -0.32791,0.89666 0,0.35983 0.1093,0.65871 0.32791,0.89666 0.2186,0.23601 0.46622,0.35402 0.74286,0.35402 0.27857,0 0.52716,-0.11801 0.74576,-0.35402 0.2186,-0.23601 0.3279,-0.5349 0.32791,-0.89666 m 2.49265,0.0696 -0.55135,1.68885 -0.66741,0 -0.35402,-2.92211 c -0.0909,-0.0116 -0.1596,-0.0426 -0.20603,-0.0929 -0.0464,-0.0522 -0.0696,-0.118 -0.0696,-0.19732 0,-0.0929 0.03,-0.16734 0.0899,-0.22344 0.0619,-0.0561 0.16444,-0.0842 0.30759,-0.0842 l 0.7922,0.003 c 0.14315,0 0.24471,0.0271 0.30469,0.0813 0.0619,0.0542 0.0928,0.12575 0.0928,0.21473 0,0.089 -0.031,0.16154 -0.0928,0.21764 -0.06,0.0542 -0.16154,0.0813 -0.30469,0.0813 l -0.3105,0 0.19733,1.66273 0.46719,-1.38416 0.61808,0 0.46429,1.38416 0.19732,-1.66273 -0.31049,0 c -0.14316,0 -0.24569,-0.0271 -0.30759,-0.0813 -0.06,-0.0561 -0.09,-0.12865 -0.09,-0.21764 0,-0.089 0.03,-0.16056 0.09,-0.21473 0.0619,-0.0561 0.16443,-0.0842 0.30759,-0.0842 l 0.78929,0.003 c 0.14315,0 0.24472,0.0271 0.30469,0.0813 0.0619,0.0542 0.0928,0.12575 0.0929,0.21473 -1e-5,0.0754 -0.0242,0.14026 -0.0726,0.19442 -0.0484,0.0542 -0.11801,0.089 -0.20893,0.10447 l -0.34241,2.92211 -0.65581,0 -0.57165,-1.68885 m 4.86052,-0.51942 0,0.65291 c 0,0.38691 -0.11221,0.75737 -0.33661,1.11139 -0.22247,0.35402 -0.54167,0.53103 -0.9576,0.53103 -0.23988,0 -0.44301,-0.0522 -0.60937,-0.1567 -0.16444,-0.1064 -0.32114,-0.30082 -0.4701,-0.58326 -0.14702,-0.28438 -0.22053,-0.5852 -0.22053,-0.90246 l 0,-0.65291 c 0,-0.38497 0.11123,-0.75447 0.3337,-1.10849 0.22247,-0.35595 0.54167,-0.53393 0.9576,-0.53393 0.23794,0 0.43914,0.0522 0.60357,0.1567 0.16637,0.10447 0.32404,0.29889 0.473,0.58326 0.15089,0.28244 0.22634,0.58326 0.22634,0.90246 m -0.59777,0 c 0,-0.32306 -0.09,-0.60551 -0.26987,-0.84733 -0.10253,-0.13348 -0.24666,-0.20022 -0.43237,-0.20022 -0.17991,0 -0.32694,0.0735 -0.44107,0.22054 -0.17218,0.22247 -0.25827,0.49814 -0.25826,0.82701 l 0,0.65291 c -1e-5,0.325 0.0909,0.60744 0.27277,0.84732 0.10059,0.13349 0.24471,0.20023 0.43236,0.20023 0.17798,0 0.32404,-0.0735 0.43818,-0.22054 0.17217,-0.22247 0.25826,-0.49814 0.25826,-0.82701 l 0,-0.65291 m 1.37808,-17.67263 c 0,0.11221 -0.0397,0.20603 -0.11897,0.28148 -0.0793,0.0754 -0.18862,0.11317 -0.32791,0.11317 -0.13929,0 -0.24859,-0.0377 -0.3279,-0.11317 -0.0793,-0.0755 -0.11898,-0.16927 -0.11898,-0.28148 0,-0.1122 0.0397,-0.20602 0.11898,-0.28147 0.0793,-0.0755 0.18861,-0.11317 0.3279,-0.11317 0.13929,0 0.24859,0.0377 0.32791,0.11317 0.0793,0.0754 0.11897,0.16927 0.11897,0.28147 m 0.012,6.89323 c 0,0.11221 -0.0397,0.20603 -0.11897,0.28148 -0.0793,0.0754 -0.18862,0.11317 -0.32791,0.11317 -0.13929,0 -0.24859,-0.0377 -0.3279,-0.11317 -0.0793,-0.0754 -0.11898,-0.16927 -0.11898,-0.28148 0,-0.1122 0.0397,-0.20603 0.11898,-0.28147 0.0793,-0.0754 0.18861,-0.11317 0.3279,-0.11317 0.13929,0 0.24859,0.0377 0.32791,0.11317 0.0793,0.0754 0.11897,0.16927 0.11897,0.28147 m -0.005,6.2113 c 0,0.11221 -0.0397,0.20603 -0.11897,0.28148 -0.0793,0.0755 -0.18862,0.11317 -0.32791,0.11317 -0.13929,0 -0.24859,-0.0377 -0.3279,-0.11317 -0.0793,-0.0754 -0.11898,-0.16927 -0.11898,-0.28148 0,-0.1122 0.0397,-0.20602 0.11898,-0.28147 0.0793,-0.0754 0.18861,-0.11317 0.3279,-0.11317 0.13929,0 0.24859,0.0377 0.32791,0.11317 0.0793,0.0755 0.11897,0.16927 0.11897,0.28147 m 0.003,6.47749 c 0,0.1122 -0.0397,0.20603 -0.11897,0.28147 -0.0793,0.0754 -0.18862,0.11317 -0.32791,0.11317 -0.13929,0 -0.24859,-0.0377 -0.3279,-0.11317 -0.0793,-0.0754 -0.11898,-0.16927 -0.11898,-0.28147 0,-0.1122 0.0397,-0.20603 0.11898,-0.28148 0.0793,-0.0754 0.18861,-0.11317 0.3279,-0.11317 0.13929,0 0.24859,0.0377 0.32791,0.11317 0.0793,0.0754 0.11897,0.16928 0.11897,0.28148 m 2.91954,-21.4914 0,0.6529 c 0,0.38691 -0.1122,0.75737 -0.33661,1.11139 -0.22247,0.35402 -0.54167,0.53103 -0.95759,0.53103 -0.23989,0 -0.44301,-0.0522 -0.60938,-0.15669 -0.16444,-0.1064 -0.32114,-0.30082 -0.47009,-0.58327 -0.14703,-0.28437 -0.22054,-0.58519 -0.22054,-0.90246 l 0,-0.6529 c 0,-0.38497 0.11123,-0.75447 0.33371,-1.10849 0.22247,-0.35595 0.54167,-0.53393 0.95759,-0.53394 0.23795,1e-5 0.43914,0.0522 0.60358,0.1567 0.16637,0.10447 0.32403,0.29889 0.47299,0.58326 0.15089,0.28245 0.22634,0.58327 0.22634,0.90247 m -0.59777,0 c 0,-0.32307 -0.09,-0.60551 -0.26987,-0.84733 -0.10253,-0.13348 -0.24665,-0.20022 -0.43237,-0.20023 -0.17991,10e-6 -0.32693,0.0735 -0.44107,0.22054 -0.17218,0.22248 -0.25826,0.49815 -0.25826,0.82702 l 0,0.6529 c 0,0.32501 0.0909,0.60745 0.27277,0.84733 0.10059,0.13348 0.24472,0.20022 0.43237,0.20022 0.17797,0 0.32403,-0.0735 0.43817,-0.22053 0.17217,-0.22247 0.25826,-0.49815 0.25826,-0.82702 l 0,-0.6529 m -0.38552,5.2508 0,3.25583 0.60068,0 c 0.14315,0 0.24471,0.0281 0.30469,0.0841 0.0619,0.0542 0.0928,0.12575 0.0928,0.21473 0,0.0871 -0.031,0.15864 -0.0928,0.21474 -0.06,0.0542 -0.16154,0.0813 -0.30469,0.0813 l -1.79622,0 c -0.14316,0 -0.24569,-0.0271 -0.30759,-0.0813 -0.06,-0.0561 -0.09,-0.12865 -0.09,-0.21764 0,-0.0871 0.03,-0.15766 0.09,-0.21183 0.0619,-0.0561 0.16443,-0.0841 0.30759,-0.0841 l 0.60067,0 0,-2.48105 -0.53103,0.13929 c -0.0851,0.0232 -0.14896,0.0348 -0.19152,0.0348 -0.0754,1e-5 -0.14122,-0.03 -0.19732,-0.0899 -0.0542,-0.06 -0.0812,-0.13348 -0.0812,-0.22054 0,-0.0793 0.0203,-0.14122 0.0609,-0.18572 0.0406,-0.0464 0.12574,-0.0871 0.25536,-0.12187 l 1.27969,-0.33081 m -0.86365,9.46713 1.30291,0 c 0.0716,-0.058 0.13928,-0.087 0.20313,-0.087 0.0909,0 0.16249,0.03 0.21473,0.0899 0.0542,0.06 0.0813,0.1625 0.0813,0.30759 l 0,0.28438 -2.71029,0 0,-0.62969 c 1.07174,-0.88408 1.71884,-1.45284 1.94131,-1.70626 0.1122,-0.12961 0.1683,-0.25246 0.16831,-0.36853 -10e-6,-0.14509 -0.0639,-0.27277 -0.19152,-0.38304 -0.12575,-0.1122 -0.29405,-0.1683 -0.50492,-0.1683 -0.2128,0 -0.38981,0.0619 -0.53103,0.18571 -0.0735,0.0658 -0.13251,0.16347 -0.17701,0.29308 -0.0271,0.0813 -0.0648,0.13929 -0.11317,0.17411 -0.0464,0.0348 -0.10446,0.0522 -0.17411,0.0522 -0.0813,1e-5 -0.15186,-0.029 -0.21183,-0.0871 -0.058,-0.058 -0.087,-0.12574 -0.087,-0.20313 0,-0.11607 0.0532,-0.26116 0.1596,-0.43527 0.10833,-0.1741 0.26503,-0.31339 0.47009,-0.41786 0.20699,-0.10446 0.4314,-0.15669 0.67322,-0.15669 0.3753,0 0.68289,0.11414 0.92277,0.34241 0.23988,0.22634 0.35982,0.50105 0.35983,0.82411 -10e-6,0.16444 -0.0348,0.31727 -0.10447,0.45849 -0.0677,0.13928 -0.23215,0.33274 -0.49331,0.58036 -0.20506,0.19539 -0.60454,0.54554 -1.19844,1.05045 m 1.40737,5.08462 c 0.17604,0.11994 0.30759,0.25923 0.39465,0.41786 0.087,0.1567 0.13058,0.33274 0.13058,0.52813 0,0.21086 -0.058,0.40625 -0.17411,0.58616 -0.11414,0.17798 -0.28051,0.3134 -0.49911,0.40625 -0.2186,0.0909 -0.50492,0.13639 -0.85893,0.13639 -0.46042,0 -0.80671,-0.0716 -1.03885,-0.21474 -0.12961,-0.0813 -0.19442,-0.17797 -0.19442,-0.29018 0,-0.0851 0.0281,-0.15669 0.0841,-0.21473 0.058,-0.06 0.12768,-0.0899 0.20893,-0.09 0.0561,1e-5 0.11414,0.0194 0.17411,0.058 0.0851,0.058 0.1654,0.0967 0.24085,0.11607 0.11607,0.0271 0.27567,0.0406 0.4788,0.0406 0.34628,0 0.5968,-0.0445 0.75156,-0.13348 0.15477,-0.0909 0.23215,-0.21861 0.23215,-0.38304 0,-0.12188 -0.0455,-0.23892 -0.13639,-0.35112 -0.089,-0.11414 -0.20893,-0.20216 -0.35982,-0.26407 -0.0871,-0.0348 -0.23408,-0.059 -0.44107,-0.0725 -0.0987,-0.006 -0.17508,-0.0358 -0.22925,-0.09 -0.0522,-0.0561 -0.0784,-0.12477 -0.0783,-0.20602 -1e-5,-0.0851 0.029,-0.1567 0.087,-0.21474 0.058,-0.058 0.13155,-0.087 0.22054,-0.087 0.19732,0 0.30275,-9.7e-4 0.31629,-0.003 0.0774,-0.008 0.15476,-0.0329 0.23215,-0.0754 0.0774,-0.0426 0.13928,-0.10059 0.18571,-0.17411 0.0484,-0.0754 0.0725,-0.15283 0.0725,-0.23214 0,-0.12575 -0.0561,-0.23408 -0.16831,-0.32501 -0.11027,-0.0928 -0.27664,-0.13928 -0.49911,-0.13928 -0.28631,0 -0.50491,0.0832 -0.6558,0.24955 -0.0445,0.0484 -0.0803,0.0793 -0.10737,0.0929 -0.0406,0.0213 -0.0861,0.0319 -0.13639,0.0319 -0.0813,0 -0.15089,-0.029 -0.20893,-0.087 -0.058,-0.058 -0.087,-0.12961 -0.087,-0.21474 0,-0.13348 0.089,-0.26309 0.26697,-0.38884 0.25922,-0.18378 0.58326,-0.27567 0.9721,-0.27567 0.36756,0 0.66258,0.10447 0.88505,0.31339 0.22247,0.20894 0.33371,0.46043 0.33371,0.75447 0,0.15283 -0.0329,0.29599 -0.0987,0.42947 -0.0658,0.13155 -0.16444,0.25343 -0.29599,0.36563"
+ sodipodi:nodetypes="cccsssccsssccccsssccsssccccsssccssscccsssccssscccsssccssscccsssccsssccccssssccssssccsssccssscccccsssccsssccccsssccssscccccsssccssscsssssccsssccccssscccccssscccccssssccssssccsssccsssccccssssssszssssssccsssssssccsssssssccccsssccssscsssssccsssccccssscccccssscccccssssccssssccsssccsssccccssssssssssssssccsssssssccssssssscccccsssccsssccccccccsssccsssccccccssssccssssccsssccssscccsssssssccsssssssccsssssssccssssssscccssssccssssccsssccssscccccsssccsssccccssssccccssccccsssssssssssssssssccsssssssssssssssssssssssssssssssssssssc"
+ inkscape:connector-curvature="0" />
+ d="m 362.10787,248.52166 5,5 -3,0 0,7 -4,0 0,-7 -3,0 5,-5 z"
+ inkscape:connector-curvature="0" />
+ d="m 363.10787,249.52166 5,5 -3,0 0,7 -4,0 0,-7 -3,0 5,-5 z"
+ inkscape:connector-curvature="0" />
+ sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
+ inkscape:connector-curvature="0" />
+ style="opacity:0.33333333;fill:#ffd5d5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.83641905px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="fill:#d5f6ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.83641905px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+
+ PluginTabs icons
+ %% Cfile %%
+
+
+
+
+
+ C
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 61347cc521d1 -r 3c9fbe483124 plugger.py
--- a/plugger.py Mon Oct 17 21:43:20 2011 +0200
+++ b/plugger.py Tue Nov 08 22:39:44 2011 +0100
@@ -58,6 +58,9 @@
def GetBlockTypes(self, tagname = "", debug = False):
return []
+ def GetDataTypes(self, tagname = "", basetypes = True, only_locatables = False, debug = False):
+ return []
+
def GetEnumeratedDataValues(self, debug = False):
return []
@@ -1500,28 +1503,32 @@
def _showIECcode(self):
plc_file = self._getIECcodepath()
- new_dialog = wx.Frame(self.AppFrame)
- ST_viewer = TextViewer(new_dialog, "", None, None)
- #ST_viewer.Enable(False)
- ST_viewer.SetKeywords(IEC_KEYWORDS)
+
+ IEC_code_viewer = TextViewer(self.AppFrame.TabsOpened, "", None, None, instancepath="IEC code")
+ #IEC_code_viewer.Enable(False)
+ IEC_code_viewer.SetTextSyntax("ALL")
+ IEC_code_viewer.SetKeywords(IEC_KEYWORDS)
try:
text = file(plc_file).read()
except:
text = '(* No IEC code have been generated at that time ! *)'
- ST_viewer.SetText(text = text)
+ IEC_code_viewer.SetText(text = text)
+ IEC_code_viewer.SetIcon(self.AppFrame.GenerateBitmap("ST"))
- new_dialog.Show()
-
+ self.AppFrame.EditProjectElement(IEC_code_viewer, "IEC code")
+
def _editIECrawcode(self):
new_dialog = wx.Frame(self.AppFrame)
controler = MiniTextControler(self._getIECrawcodepath())
- ST_viewer = TextViewer(new_dialog, "", None, controler)
- #ST_viewer.Enable(False)
- ST_viewer.SetKeywords(IEC_KEYWORDS)
- ST_viewer.RefreshView()
+ IEC_raw_code_viewer = TextViewer(self.AppFrame.TabsOpened, "", None, controler, instancepath="IEC raw code")
+ #IEC_raw_code_viewer.Enable(False)
+ IEC_raw_code_viewer.SetTextSyntax("ALL")
+ IEC_raw_code_viewer.SetKeywords(IEC_KEYWORDS)
+ IEC_raw_code_viewer.RefreshView()
+ IEC_raw_code_viewer.SetIcon(self.AppFrame.GenerateBitmap("ST"))
- new_dialog.Show()
+ self.AppFrame.EditProjectElement(IEC_raw_code_viewer, "IEC raw code")
def _Clean(self):
if os.path.isdir(os.path.join(self._getBuildPath())):
diff -r 61347cc521d1 -r 3c9fbe483124 plugins/c_ext/CFileEditor.py
--- a/plugins/c_ext/CFileEditor.py Mon Oct 17 21:43:20 2011 +0200
+++ b/plugins/c_ext/CFileEditor.py Tue Nov 08 22:39:44 2011 +0100
@@ -1,8 +1,11 @@
-import wx, wx.grid
-import wx.stc as stc
import keyword
-from controls import CustomGrid
+import wx
+import wx.grid
+import wx.stc as stc
+import wx.lib.buttons
+
+from controls import CustomGrid, EditorPanel
if wx.Platform == '__WXMSW__':
faces = { 'times': 'Times New Roman',
@@ -69,7 +72,7 @@
def __init__(self, parent, name, window, controler):
stc.StyledTextCtrl.__init__(self, parent, ID_CPPEDITOR, wx.DefaultPosition,
- wx.DefaultSize, 0)
+ wx.Size(0, 0), 0)
self.SetMarginType(1, stc.STC_MARGIN_NUMBER)
self.SetMarginWidth(1, 25)
@@ -231,6 +234,7 @@
self.ParentWindow.RefreshTitle()
self.ParentWindow.RefreshFileMenu()
self.ParentWindow.RefreshEditMenu()
+ self.ParentWindow.RefreshPageTitles()
def StartBuffering(self):
self.Controler.StartBuffering()
@@ -238,6 +242,7 @@
self.ParentWindow.RefreshTitle()
self.ParentWindow.RefreshFileMenu()
self.ParentWindow.RefreshEditMenu()
+ self.ParentWindow.RefreshPageTitles()
def ResetBuffer(self):
if self.CurrentAction != None:
@@ -262,6 +267,9 @@
self.Colourise(0, -1)
+ def DoGetBestSize(self):
+ return self.ParentWindow.GetPanelBestSize()
+
def RefreshModel(self):
self.Controler.SetPartText(self.Name, self.GetText())
@@ -622,7 +630,7 @@
def _init_ctrls(self, prnt):
wx.Panel.__init__(self, id=ID_VARIABLESEDITOR, name='', parent=prnt,
- size=wx.Size(0, 0), style=wx.SUNKEN_BORDER)
+ size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
self.VariablesGrid = CustomGrid(id=ID_VARIABLESEDITORVARIABLESGRID,
name='VariablesGrid', parent=self, pos=wx.Point(0, 0),
@@ -719,12 +727,16 @@
self.ParentWindow.RefreshTitle()
self.ParentWindow.RefreshFileMenu()
self.ParentWindow.RefreshEditMenu()
+ self.ParentWindow.RefreshPageTitles()
def RefreshView(self):
self.Table.SetData(self.Controler.GetVariables())
self.Table.ResetView(self.VariablesGrid)
self.VariablesGrid.RefreshButtons()
+ def DoGetBestSize(self):
+ return self.ParentWindow.GetPanelBestSize()
+
def OnVariablesGridCellChange(self, event):
self.RefreshModel()
self.RefreshView()
@@ -796,264 +808,257 @@
# SVGUIEditor Main Frame Class
#-------------------------------------------------------------------------------
-
-CFILE_PARTS = ["Includes", "Variables", "Globals", "Init", "CleanUp", "Retrieve",
- "Publish"]
+CFILE_PARTS = [
+ ("Includes", CppEditor),
+ ("Variables", VariablesEditor),
+ ("Globals", CppEditor),
+ ("Init", CppEditor),
+ ("CleanUp", CppEditor),
+ ("Retrieve", CppEditor),
+ ("Publish", CppEditor),
+]
+
+#----------------------------------------------------------------------
+# different icons for the collapsed/expanded states.
+# Taken from standard Windows XP collapsed/expanded states.
+#----------------------------------------------------------------------
+
+def GetCollapsedIconData():
+ return \
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
+\x00\x01\x8eIDAT8\x8d\xa5\x93-n\xe4@\x10\x85?g\x03\n6lh)\xc4\xd2\x12\xc3\x81\
+\xd6\xa2I\x90\x154\xb9\x81\x8f1G\xc8\x11\x16\x86\xcd\xa0\x99F\xb3A\x91\xa1\
+\xc9J&\x96L"5lX\xcc\x0bl\xf7v\xb2\x7fZ\xa5\x98\xebU\xbdz\xf5\\\x9deW\x9f\xf8\
+H\\\xbfO|{y\x9dT\x15P\x04\x01\x01UPUD\x84\xdb/7YZ\x9f\xa5\n\xce\x97aRU\x8a\
+\xdc`\xacA\x00\x04P\xf0!0\xf6\x81\xa0\xf0p\xff9\xfb\x85\xe0|\x19&T)K\x8b\x18\
+\xf9\xa3\xe4\xbe\xf3\x8c^#\xc9\xd5\n\xa8*\xc5?\x9a\x01\x8a\xd2b\r\x1cN\xc3\
+\x14\t\xce\x97a\xb2F0Ks\xd58\xaa\xc6\xc5\xa6\xf7\xdfya\xe7\xbdR\x13M2\xf9\
+\xf9qKQ\x1fi\xf6-\x00~T\xfac\x1dq#\x82,\xe5q\x05\x91D\xba@\xefj\xba1\xf0\xdc\
+zzW\xcff&\xb8,\x89\xa8@Q\xd6\xaaf\xdfRm,\xee\xb1BDxr#\xae\xf5|\xddo\xd6\xe2H\
+\x18\x15\x84\xa0q@]\xe54\x8d\xa3\xedf\x05M\xe3\xd8Uy\xc4\x15\x8d\xf5\xd7\x8b\
+~\x82\x0fh\x0e"\xb0\xad,\xee\xb8c\xbb\x18\xe7\x8e;6\xa5\x89\x04\xde\xff\x1c\
+\x16\xef\xe0p\xfa>\x19\x11\xca\x8d\x8d\xe0\x93\x1b\x01\xd8m\xf3(;x\xa5\xef=\
+\xb7w\xf3\x1d$\x7f\xc1\xe0\xbd\xa7\xeb\xa0(,"Kc\x12\xc1+\xfd\xe8\tI\xee\xed)\
+\xbf\xbcN\xc1{D\x04k\x05#\x12\xfd\xf2a\xde[\x81\x87\xbb\xdf\x9cr\x1a\x87\xd3\
+0)\xba>\x83\xd5\xb97o\xe0\xaf\x04\xff\x13?\x00\xd2\xfb\xa9`z\xac\x80w\x00\
+\x00\x00\x00IEND\xaeB`\x82'
+
+def GetCollapsedIconBitmap():
+ return wx.BitmapFromImage(GetCollapsedIconImage())
+
+def GetCollapsedIconImage():
+ import cStringIO
+ stream = cStringIO.StringIO(GetCollapsedIconData())
+ return wx.ImageFromStream(stream)
+
+#----------------------------------------------------------------------
+def GetExpandedIconData():
+ return \
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
+\x00\x01\x9fIDAT8\x8d\x95\x93\xa1\x8e\xdc0\x14EO\xb2\xc4\xd0\xd2\x12\xb7(mI\
+\xa4%V\xd1lQT4[4-\x9a\xfe\xc1\xc2|\xc6\xc2~BY\x83:A3E\xd3\xa0*\xa4\xd2\x90H!\
+\x95\x0c\r\r\x1fK\x81g\xb2\x99\x84\xb4\x0fY\xd6\xbb\xc7\xf7>=\'Iz\xc3\xbcv\
+\xfbn\xb8\x9c\x15 \xe7\xf3\xc7\x0fw\xc9\xbc7\x99\x03\x0e\xfbn0\x99F+\x85R\
+\x80RH\x10\x82\x08\xde\x05\x1ef\x90+\xc0\xe1\xd8\ryn\xd0Z-\\A\xb4\xd2\xf7\
+\x9e\xfbwoF\xc8\x088\x1c\xbbae\xb3\xe8y&\x9a\xdf\xf5\xbd\xe7\xfem\x84\xa4\
+\x97\xccYf\x16\x8d\xdb\xb2a]\xfeX\x18\xc9s\xc3\xe1\x18\xe7\x94\x12cb\xcc\xb5\
+\xfa\xb1l8\xf5\x01\xe7\x84\xc7\xb2Y@\xb2\xcc0\x02\xb4\x9a\x88%\xbe\xdc\xb4\
+\x9e\xb6Zs\xaa74\xadg[6\x88<\xb7]\xc6\x14\x1dL\x86\xe6\x83\xa0\x81\xba\xda\
+\x10\x02x/\xd4\xd5\x06\r\x840!\x9c\x1fM\x92\xf4\x86\x9f\xbf\xfe\x0c\xd6\x9ae\
+\xd6u\x8d \xf4\xf5\x165\x9b\x8f\x04\xe1\xc5\xcb\xdb$\x05\x90\xa97@\x04lQas\
+\xcd*7\x14\xdb\x9aY\xcb\xb8\\\xe9E\x10|\xbc\xf2^\xb0E\x85\xc95_\x9f\n\xaa/\
+\x05\x10\x81\xce\xc9\xa8\xf6>\x13\xc0n\xff{PJ\xc5\xfdP\x11""<\xbc\
+\xff\x87\xdf\xf8\xbf\xf5\x17FF\xaf\x8f\x8b\xd3\xe6K\x00\x00\x00\x00IEND\xaeB\
+`\x82'
+
+def GetExpandedIconBitmap():
+ return wx.BitmapFromImage(GetExpandedIconImage())
+
+def GetExpandedIconImage():
+ import cStringIO
+ stream = cStringIO.StringIO(GetExpandedIconData())
+ return wx.ImageFromStream(stream)
+
+class FoldPanelCaption(wx.lib.buttons.GenBitmapTextToggleButton):
+
+ def GetBackgroundBrush(self, dc):
+ colBg = self.GetBackgroundColour()
+ brush = wx.Brush(colBg, wx.SOLID)
+ if self.style & wx.BORDER_NONE:
+ myAttr = self.GetDefaultAttributes()
+ parAttr = self.GetParent().GetDefaultAttributes()
+ myDef = colBg == myAttr.colBg
+ parDef = self.GetParent().GetBackgroundColour() == parAttr.colBg
+ if myDef and parDef:
+ if wx.Platform == "__WXMAC__":
+ brush.MacSetTheme(1) # 1 == kThemeBrushDialogBackgroundActive
+ elif wx.Platform == "__WXMSW__":
+ if self.DoEraseBackground(dc):
+ brush = None
+ elif myDef and not parDef:
+ colBg = self.GetParent().GetBackgroundColour()
+ brush = wx.Brush(colBg, wx.SOLID)
+ return brush
+
+ def DrawLabel(self, dc, width, height, dx=0, dy=0):
+ bmp = self.bmpLabel
+ if bmp is not None: # if the bitmap is used
+ if self.bmpDisabled and not self.IsEnabled():
+ bmp = self.bmpDisabled
+ if self.bmpFocus and self.hasFocus:
+ bmp = self.bmpFocus
+ if self.bmpSelected and not self.up:
+ bmp = self.bmpSelected
+ bw,bh = bmp.GetWidth(), bmp.GetHeight()
+ hasMask = bmp.GetMask() is not None
+ else:
+ bw = bh = 0 # no bitmap -> size is zero
+
+ dc.SetFont(self.GetFont())
+ if self.IsEnabled():
+ dc.SetTextForeground(self.GetForegroundColour())
+ else:
+ dc.SetTextForeground(wx.SystemSettings.GetColour(wx.SYS_COLOUR_GRAYTEXT))
+
+ label = self.GetLabel()
+ tw, th = dc.GetTextExtent(label) # size of text
+
+ if bmp is not None:
+ dc.DrawBitmap(bmp, width - bw - 2, (height-bh)/2, hasMask) # draw bitmap if available
+
+ dc.DrawText(label, 2, (height-th)/2) # draw the text
+
+ dc.SetPen(wx.Pen(self.GetForegroundColour()))
+ dc.SetBrush(wx.TRANSPARENT_BRUSH)
+ dc.DrawRectangle(0, 0, width, height)
[ID_CFILEEDITOR, ID_CFILEEDITORMAINSPLITTER,
ID_CFILEEDITORCFILETREE, ID_CFILEEDITORPARTSOPENED,
] = [wx.NewId() for _init_ctrls in range(4)]
-class CFileEditor(wx.Frame):
-
- if wx.VERSION < (2, 6, 0):
- def Bind(self, event, function, id = None):
- if id is not None:
- event(self, id, function)
+class CFileEditor(EditorPanel):
+
+ def _init_Editor(self, prnt):
+ self.Editor = wx.Panel(id=-1, parent=prnt, pos=wx.Point(0, 0),
+ size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
+
+ self.Panels = {}
+ self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2 * len(CFILE_PARTS) + 1, vgap=0)
+ self.MainSizer.AddGrowableCol(0)
+
+ for idx, (name, panel_class) in enumerate(CFILE_PARTS):
+ button_id = wx.NewId()
+ button = FoldPanelCaption(id=button_id, name='FoldPanelCaption_%s' % name,
+ label=name, bitmap=GetCollapsedIconBitmap(), parent=self.Editor, pos=wx.Point(0, 0),
+ size=wx.Size(0, 20), style=wx.NO_BORDER|wx.ALIGN_LEFT)
+ button.SetBitmapSelected(GetExpandedIconBitmap())
+ button.Bind(wx.EVT_BUTTON, self.GenPanelButtonCallback(name), id=button_id)
+ self.MainSizer.AddWindow(button, 0, border=0, flag=wx.TOP|wx.GROW)
+
+ if panel_class == VariablesEditor:
+ panel = VariablesEditor(self.Editor, self.ParentWindow, self.Controler)
else:
- event(self, function)
-
- def _init_coll_EditMenu_Items(self, parent):
- AppendMenu(parent, help='', id=wx.ID_REFRESH,
- kind=wx.ITEM_NORMAL, text=u'Refresh\tCTRL+R')
- AppendMenu(parent, help='', id=wx.ID_UNDO,
- kind=wx.ITEM_NORMAL, text=u'Undo\tCTRL+Z')
- AppendMenu(parent, help='', id=wx.ID_REDO,
- kind=wx.ITEM_NORMAL, text=u'Redo\tCTRL+Y')
- self.Bind(wx.EVT_MENU, self.OnRefreshMenu, id=wx.ID_REFRESH)
- self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO)
- self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO)
-
- def _init_coll_FileMenu_Items(self, parent):
- AppendMenu(parent, help='', id=wx.ID_SAVE,
- kind=wx.ITEM_NORMAL, text=u'Save\tCTRL+S')
- self.Bind(wx.EVT_MENU, self.OnSaveMenu, id=wx.ID_SAVE)
-
- def _init_coll_MenuBar_Menus(self, parent):
- parent.Append(menu=self.FileMenu, title=u'&File')
- parent.Append(menu=self.EditMenu, title=u'&Edit')
-
- def _init_utils(self):
- self.MenuBar = wx.MenuBar()
-
- self.FileMenu = wx.Menu(title='')
- self.EditMenu = wx.Menu(title='')
-
- self._init_coll_MenuBar_Menus(self.MenuBar)
- self._init_coll_FileMenu_Items(self.FileMenu)
- self._init_coll_EditMenu_Items(self.EditMenu)
-
- def _init_ctrls(self, prnt):
- wx.Frame.__init__(self, id=ID_CFILEEDITOR, name=u'CFileEditor',
- parent=prnt, pos=wx.DefaultPosition, size=wx.Size(800, 650),
- style=wx.DEFAULT_FRAME_STYLE, title=u'CFileEditor')
- self._init_utils()
- self.SetClientSize(wx.Size(1000, 600))
- self.SetMenuBar(self.MenuBar)
- self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
-
- self.Bind(wx.EVT_MENU, self.OnSaveMenu, id=wx.ID_SAVE)
- accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL, 83, wx.ID_SAVE)])
- self.SetAcceleratorTable(accel)
-
- if wx.VERSION >= (2, 8, 0):
- self.AUIManager = wx.aui.AuiManager(self)
- self.AUIManager.SetDockSizeConstraint(0.5, 0.5)
-
- if wx.VERSION < (2, 8, 0):
- self.MainSplitter = wx.SplitterWindow(id=ID_CFILEEDITORMAINSPLITTER,
- name='MainSplitter', parent=self, point=wx.Point(0, 0),
- size=wx.Size(-1, -1), style=wx.SP_3D)
- self.MainSplitter.SetNeedUpdating(True)
- self.MainSplitter.SetMinimumPaneSize(1)
-
- self.CFileTree = wx.TreeCtrl(id=ID_CFILEEDITORCFILETREE,
- name='CFileTree', parent=self.MainSplitter, pos=wx.Point(0, 0),
- size=wx.Size(-1, -1), style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER)
- else:
- self.CFileTree = wx.TreeCtrl(id=ID_CFILEEDITORCFILETREE,
- name='CFileTree', parent=self, pos=wx.Point(0, 0),
- size=wx.Size(-1, -1), style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER)
- self.AUIManager.AddPane(self.CFileTree, wx.aui.AuiPaneInfo().Caption("CFile Tree").Left().Layer(1).BestSize(wx.Size(200, 500)).CloseButton(False))
- self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnCFileTreeItemSelected,
- id=ID_CFILEEDITORCFILETREE)
- self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnCFileTreeItemActivated,
- id=ID_CFILEEDITORCFILETREE)
-
- if wx.VERSION < (2, 8, 0):
- self.PartsOpened = wx.Notebook(id=ID_CFILEEDITORPARTSOPENED,
- name='PartsOpened', parent=self.MainSplitter, pos=wx.Point(0,
- 0), size=wx.Size(0, 0), style=0)
- if wx.VERSION >= (2, 6, 0):
- self.PartsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
- self.OnPartSelectedChanged, id=ID_CFILEEDITORPARTSOPENED)
+ panel = panel_class(self.Editor, name, self.ParentWindow, self.Controler)
+ self.MainSizer.AddWindow(panel, 0, border=0, flag=wx.BOTTOM|wx.GROW)
+ panel.Hide()
+
+ self.Panels[name] = {"button": button, "panel": panel, "expanded": False, "row": 2 * idx + 1}
+
+ self.Spacer = wx.Panel(self.Editor, -1)
+ self.SpacerExpanded = True
+ self.MainSizer.AddWindow(self.Spacer, 0, border=0, flag=wx.GROW)
+
+ self.MainSizer.AddGrowableRow(2 * len(CFILE_PARTS))
+
+ self.Editor.SetSizer(self.MainSizer)
+
+ def __init__(self, parent, controler, window):
+ EditorPanel.__init__(self, parent, "", window, controler)
+
+ img = wx.Bitmap(self.Controler.GetIconPath("Cfile.png"), wx.BITMAP_TYPE_PNG).ConvertToImage()
+ self.SetIcon(wx.BitmapFromImage(img.Rescale(16, 16)))
+
+ def GetTitle(self):
+ filename = self.Controler.GetFilename()
+ if not self.Controler.CFileIsSaved():
+ return "~%s~" % filename
+ return filename
+
+ def GetBufferState(self):
+ return self.Controler.GetBufferState()
+
+ def Undo(self):
+ self.Controler.LoadPrevious()
+ self.RefreshView()
+
+ def Redo(self):
+ self.Controler.LoadNext()
+ self.RefreshView()
+
+ def HasNoModel(self):
+ return False
+
+ def RefreshView(self):
+ for infos in self.Panels.itervalues():
+ infos["panel"].RefreshView()
+
+ def GenPanelButtonCallback(self, name):
+ def PanelButtonCallback(event):
+ self.TogglePanel(name)
+ return PanelButtonCallback
+
+ def ExpandPanel(self, name):
+ infos = self.Panels.get(name, None)
+ if infos is not None and not infos["expanded"]:
+ infos["expanded"] = True
+ infos["button"].SetToggle(True)
+ infos["panel"].Show()
+ self.MainSizer.AddGrowableRow(infos["row"])
+
+ self.RefreshSizerLayout()
+
+ def CollapsePanel(self, name):
+ infos = self.Panels.get(name, None)
+ if infos is not None and infos["expanded"]:
+ infos["expanded"] = False
+ infos["button"].SetToggle(False)
+ infos["panel"].Hide()
+ self.MainSizer.RemoveGrowableRow(infos["row"])
+
+ self.RefreshSizerLayout()
+
+ def TogglePanel(self, name):
+ infos = self.Panels.get(name, None)
+ if infos is not None:
+ infos["expanded"] = not infos["expanded"]
+ infos["button"].SetToggle(infos["expanded"])
+ if infos["expanded"]:
+ infos["panel"].Show()
+ self.MainSizer.AddGrowableRow(infos["row"])
else:
- wx.EVT_NOTEBOOK_PAGE_CHANGED(self.PartsOpened, ID_CFILEEDITORPARTSOPENED,
- self.OnPartSelectedChanged)
+ infos["panel"].Hide()
+ self.MainSizer.RemoveGrowableRow(infos["row"])
- self.MainSplitter.SplitVertically(self.ProjectTree, self.PartsOpened, 200)
- else:
- self.PartsOpened = wx.aui.AuiNotebook(self)
- self.PartsOpened.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED,
- self.OnPartSelectedChanged)
- self.AUIManager.AddPane(self.PartsOpened, wx.aui.AuiPaneInfo().CentrePane())
+ self.RefreshSizerLayout()
+
+ def RefreshSizerLayout(self):
+ expand_spacer = True
+ for infos in self.Panels.itervalues():
+ expand_spacer = expand_spacer and not infos["expanded"]
+
+ if self.SpacerExpanded != expand_spacer:
+ self.SpacerExpanded = expand_spacer
+ if expand_spacer:
+ self.Spacer.Show()
+ self.MainSizer.AddGrowableRow(2 * len(CFILE_PARTS))
+ else:
+ self.Spacer.Hide()
+ self.MainSizer.RemoveGrowableRow(2 * len(CFILE_PARTS))
+
+ self.MainSizer.Layout()
- self.StatusBar = wx.StatusBar( name='HelpBar',
- parent=self, style=wx.ST_SIZEGRIP)
- self.SetStatusBar(self.StatusBar)
-
- if wx.VERSION >= (2, 8, 0):
- self.AUIManager.Update()
-
- def __init__(self, parent, controler):
- self._init_ctrls(parent)
-
- self.Controler = controler
-
- self.InitCFileTree()
- self.RefreshTitle()
- self.RefreshEditMenu()
-
- def OnCloseFrame(self, event):
- if wx.VERSION >= (2, 8, 0):
- self.AUIManager.UnInit()
- if getattr(self, "_onclose", None) is not None:
- self._onclose()
- event.Skip()
-
- def OnCloseTabMenu(self, event):
- selected = self.PartsOpened.GetSelection()
- if selected >= 0:
- self.PartsOpened.DeletePage(selected)
-
- def OnSaveMenu(self, event):
- if getattr(self, "_onsave", None) != None:
- self._onsave()
- self.RefreshTitle()
- self.RefreshEditMenu()
-
-#-------------------------------------------------------------------------------
-# Notebook Unified Functions
-#-------------------------------------------------------------------------------
-
- def DeleteAllPages(self):
- if wx.VERSION >= (2, 8, 0):
- for idx in xrange(self.PartsOpened.GetPageCount()):
- self.PartsOpened.DeletePage(0)
- else:
- self.PartsOpened.DeleteAllPages()
-
- def SetPageBitmap(self, idx, bitmap):
- if wx.VERSION >= (2, 8, 0):
- return self.PartsOpened.SetPageBitmap(idx, bitmap)
- else:
- return self.PartsOpened.SetPageImage(idx, bitmap)
-
- def IsOpened(self, name):
- for idx in xrange(self.PartsOpened.GetPageCount()):
- if self.PartsOpened.GetPage(idx).IsViewing(name):
- return idx
- return None
-
- def RefreshTitle(self):
- self.SetTitle("CFileEditor - %s"%self.Controler.GetFilename())
-
-#-------------------------------------------------------------------------------
-# Edit Project Menu Functions
-#-------------------------------------------------------------------------------
-
- def RefreshEditMenu(self):
- undo, redo = self.Controler.GetBufferState()
- self.EditMenu.Enable(wx.ID_UNDO, undo)
- self.EditMenu.Enable(wx.ID_REDO, redo)
-
- def OnRefreshMenu(self, event):
- selected = self.PartsOpened.GetSelection()
- if selected != -1:
- window = self.PartsOpened.GetPage(selected)
- window.RefreshView()
-
- def OnUndoMenu(self, event):
- self.Controler.LoadPrevious()
- selected = self.PartsOpened.GetSelection()
- if selected != -1:
- window = self.PartsOpened.GetPage(selected)
- window.RefreshView()
- self.RefreshTitle()
- self.RefreshEditMenu()
-
- def OnRedoMenu(self, event):
- self.Controler.LoadNext()
- selected = self.PartsOpened.GetSelection()
- if selected != -1:
- window = self.PartsOpened.GetPage(selected)
- window.RefreshView()
- self.RefreshTitle()
- self.RefreshEditMenu()
-
-#-------------------------------------------------------------------------------
-# File Project Menu Functions
-#-------------------------------------------------------------------------------
- def RefreshFileMenu(self):
- self.FileMenu.Enable(wx.ID_SAVE, True)
-
-#-------------------------------------------------------------------------------
-# CFile Editor Panels Management Functions
-#-------------------------------------------------------------------------------
-
- def OnPartSelectedChanged(self, event):
- old_selected = self.PartsOpened.GetSelection()
- if old_selected >= 0:
- self.PartsOpened.GetPage(old_selected).ResetBuffer()
- selected = event.GetSelection()
- if selected >= 0:
- window = self.PartsOpened.GetPage(selected)
- window.RefreshView()
- event.Skip()
-
-#-------------------------------------------------------------------------------
-# CFile Tree Management Functions
-#-------------------------------------------------------------------------------
-
- def InitCFileTree(self):
- root = self.CFileTree.AddRoot("C File")
- for name in CFILE_PARTS:
- self.CFileTree.AppendItem(root, name)
- self.CFileTree.Expand(root)
-
- def OnCFileTreeItemActivated(self, event):
- self.EditCFilePart(self.CFileTree.GetItemText(event.GetItem()))
- event.Skip()
-
- def OnCFileTreeItemSelected(self, event):
- select_item = event.GetItem()
- self.EditCFilePart(self.CFileTree.GetItemText(event.GetItem()), True)
- event.Skip()
-
- def EditCFilePart(self, name, onlyopened = False):
- openedidx = self.IsOpened(name)
- if openedidx is not None:
- old_selected = self.PartsOpened.GetSelection()
- if old_selected != openedidx:
- if old_selected >= 0:
- self.PartsOpened.GetPage(old_selected).ResetBuffer()
- self.PartsOpened.SetSelection(openedidx)
- self.PartsOpened.GetPage(openedidx).RefreshView()
- elif not onlyopened:
- if name == "Variables":
- new_window = VariablesEditor(self.PartsOpened, self, self.Controler)
- self.PartsOpened.AddPage(new_window, name)
- else:
- new_window = CppEditor(self.PartsOpened, name, self, self.Controler)
- self.PartsOpened.AddPage(new_window, name)
- openedidx = self.IsOpened(name)
- old_selected = self.PartsOpened.GetSelection()
- if old_selected != openedidx:
- if old_selected >= 0:
- self.PartsOpened.GetPage(old_selected).ResetBuffer()
- for i in xrange(self.PartsOpened.GetPageCount()):
- window = self.PartsOpened.GetPage(i)
- if window.IsViewing(name):
- self.PartsOpened.SetSelection(i)
- window.RefreshView()
- window.SetFocus()
diff -r 61347cc521d1 -r 3c9fbe483124 plugins/c_ext/c_ext.py
--- a/plugins/c_ext/c_ext.py Mon Oct 17 21:43:20 2011 +0200
+++ b/plugins/c_ext/c_ext.py Tue Nov 08 22:39:44 2011 +0100
@@ -5,94 +5,11 @@
from xmlclass import *
-from plugger import PlugTemplate
+from plugger import PlugTemplate, opjimg
from CFileEditor import CFileEditor
-from PLCControler import PLCControler, LOCATION_PLUGIN, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY
-
-CFileClasses = GenerateClassesFromXSD(os.path.join(os.path.dirname(__file__), "cext_xsd.xsd"))
-
-#-------------------------------------------------------------------------------
-# Undo Buffer for CFile
-#-------------------------------------------------------------------------------
-
-# Length of the buffer
-UNDO_BUFFER_LENGTH = 20
-
-"""
-Class implementing a buffer of changes made on the current editing model
-"""
-class UndoBuffer:
-
- # Constructor initialising buffer
- def __init__(self, currentstate, issaved = False):
- self.Buffer = []
- self.CurrentIndex = -1
- self.MinIndex = -1
- self.MaxIndex = -1
- # if current state is defined
- if currentstate:
- self.CurrentIndex = 0
- self.MinIndex = 0
- self.MaxIndex = 0
- # Initialising buffer with currentstate at the first place
- for i in xrange(UNDO_BUFFER_LENGTH):
- if i == 0:
- self.Buffer.append(currentstate)
- else:
- self.Buffer.append(None)
- # Initialising index of state saved
- if issaved:
- self.LastSave = 0
- else:
- self.LastSave = -1
-
- # Add a new state in buffer
- def Buffering(self, currentstate):
- self.CurrentIndex = (self.CurrentIndex + 1) % UNDO_BUFFER_LENGTH
- self.Buffer[self.CurrentIndex] = currentstate
- # Actualising buffer limits
- self.MaxIndex = self.CurrentIndex
- if self.MinIndex == self.CurrentIndex:
- # If the removed state was the state saved, there is no state saved in the buffer
- if self.LastSave == self.MinIndex:
- self.LastSave = -1
- self.MinIndex = (self.MinIndex + 1) % UNDO_BUFFER_LENGTH
- self.MinIndex = max(self.MinIndex, 0)
-
- # Return current state of buffer
- def Current(self):
- return self.Buffer[self.CurrentIndex]
-
- # Change current state to previous in buffer and return new current state
- def Previous(self):
- if self.CurrentIndex != self.MinIndex:
- self.CurrentIndex = (self.CurrentIndex - 1) % UNDO_BUFFER_LENGTH
- return self.Buffer[self.CurrentIndex]
- return None
-
- # Change current state to next in buffer and return new current state
- def Next(self):
- if self.CurrentIndex != self.MaxIndex:
- self.CurrentIndex = (self.CurrentIndex + 1) % UNDO_BUFFER_LENGTH
- return self.Buffer[self.CurrentIndex]
- return None
-
- # Return True if current state is the first in buffer
- def IsFirst(self):
- return self.CurrentIndex == self.MinIndex
-
- # Return True if current state is the last in buffer
- def IsLast(self):
- return self.CurrentIndex == self.MaxIndex
-
- # Note that current state is saved
- def CurrentSaved(self):
- self.LastSave = self.CurrentIndex
-
- # Return True if current state is saved
- def IsCurrentSaved(self):
- return self.LastSave == self.CurrentIndex
-
+from PLCControler import PLCControler, UndoBuffer, LOCATION_PLUGIN, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY
+
+CFileClasses = GenerateClassesFromXSD(os.path.join(os.path.dirname(__file__), "cext_xsd.xsd"))
TYPECONVERSION = {"BOOL" : "X", "SINT" : "B", "INT" : "W", "DINT" : "D", "LINT" : "L",
"USINT" : "B", "UINT" : "W", "UDINT" : "D", "ULINT" : "L", "REAL" : "D", "LREAL" : "L",
@@ -127,14 +44,14 @@
else:
self.OnPlugSave()
+ def GetIconPath(self, name):
+ return opjimg(name)
+
def CFileName(self):
return os.path.join(self.PlugPath(), "cfile.xml")
def GetFilename(self):
- if self.CFileBuffer.IsCurrentSaved():
- return "cfile"
- else:
- return "~cfile~"
+ return self.MandatoryParams[1].getName()
def GetBaseTypes(self):
return self.GetPlugRoot().GetBaseTypes()
@@ -227,32 +144,13 @@
return self.CFile.publishFunction.gettext()
return ""
- _View = None
def _OpenView(self):
- if not self._View:
- open_cfileeditor = True
- has_permissions = self.GetPlugRoot().CheckProjectPathPerm()
- if not has_permissions:
- dialog = wx.MessageDialog(self.GetPlugRoot().AppFrame,
- _("You don't have write permissions.\nOpen CFileEditor anyway ?"),
- _("Open CFileEditor"),
- wx.YES_NO|wx.ICON_QUESTION)
- open_cfileeditor = dialog.ShowModal() == wx.ID_YES
- dialog.Destroy()
- if open_cfileeditor:
- def _onclose():
- self._View = None
- if has_permissions:
- def _onsave():
- self.GetPlugRoot().SaveProject()
- else:
- def _onsave():
- pass
- self._View = CFileEditor(self.GetPlugRoot().AppFrame, self)
- self._View._onclose = _onclose
- self._View._onsave = _onsave
- self._View.Show()
-
+ app_frame = self.GetPlugRoot().AppFrame
+
+ cfileeditor = CFileEditor(app_frame.TabsOpened, self, app_frame)
+
+ app_frame.EditProjectElement(cfileeditor, self.GetFilename())
+
PluginMethods = [
{"bitmap" : os.path.join("images", "EditCfile"),
"name" : _("Edit C File"),
@@ -260,6 +158,9 @@
"method" : "_OpenView"},
]
+ def PlugTestModified(self):
+ return self.ChangesToSave or not self.CFileIsSaved()
+
def OnPlugSave(self):
filepath = self.CFileName()