# HG changeset patch # User laurent # Date 1320786099 -3600 # Node ID 91b2ae63ea3d523c125fab75206c2fc93778910f # Parent 2a8476222ba87a1d22f8b5754a4a6b64963d6ed0 Including external tools for editing plugin informations into Beremiz window diff -r 2a8476222ba8 -r 91b2ae63ea3d images/Cfile.png Binary file images/Cfile.png has changed diff -r 2a8476222ba8 -r 91b2ae63ea3d images/icons.svg --- a/images/icons.svg Mon Oct 17 09:04:13 2011 +0200 +++ b/images/icons.svg Tue Nov 08 22:01:39 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 2a8476222ba8 -r 91b2ae63ea3d plugger.py --- a/plugger.py Mon Oct 17 09:04:13 2011 +0200 +++ b/plugger.py Tue Nov 08 22:01:39 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 2a8476222ba8 -r 91b2ae63ea3d plugins/c_ext/CFileEditor.py --- a/plugins/c_ext/CFileEditor.py Mon Oct 17 09:04:13 2011 +0200 +++ b/plugins/c_ext/CFileEditor.py Tue Nov 08 22:01:39 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 2a8476222ba8 -r 91b2ae63ea3d plugins/c_ext/c_ext.py --- a/plugins/c_ext/c_ext.py Mon Oct 17 09:04:13 2011 +0200 +++ b/plugins/c_ext/c_ext.py Tue Nov 08 22:01:39 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()