History

Merge pull request #9945 from mnafees/21233

Chris Collins committed 9 years ago

Commit ea131512 parents b6d1113 c46052322 files · +0 −3053Browse files

Unified · Split

22 files
  1. interface/resources/icons/load-script.svg +0 −125
  2. interface/resources/icons/new-script.svg +0 −129
  3. interface/resources/icons/save-script.svg +0 −674
  4. interface/resources/icons/start-script.svg +0 −550
  5. interface/resources/icons/stop-script.svg +0 −163
  6. interface/src/Application.cpp +0 −2
  7. interface/src/Menu.cpp +0 −5
  8. interface/src/Menu.h +0 −1
  9. interface/src/ui/DialogsManager.cpp +0 −7
  10. interface/src/ui/DialogsManager.h +0 −2
  11. interface/src/ui/ScriptEditBox.cpp +0 −111
  12. interface/src/ui/ScriptEditBox.h +0 −38
  13. interface/src/ui/ScriptEditorWidget.cpp +0 −256
  14. interface/src/ui/ScriptEditorWidget.h +0 −64
  15. interface/src/ui/ScriptEditorWindow.cpp +0 −259
  16. interface/src/ui/ScriptEditorWindow.h +0 −64
  17. interface/src/ui/ScriptLineNumberArea.cpp +0 −28
  18. interface/src/ui/ScriptLineNumberArea.h +0 −32
  19. interface/src/ui/ScriptsTableWidget.cpp +0 −49
  20. interface/src/ui/ScriptsTableWidget.h +0 −28
  21. interface/ui/scriptEditorWidget.ui +0 −142
  22. interface/ui/scriptEditorWindow.ui +0 −324
interface/resources/icons/load-script.svg+0−125
@@ -1,125 +0,0 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4<svg
5 xmlns:dc="http://purl.org/dc/elements/1.1/"
6 xmlns:cc="http://creativecommons.org/ns#"
7 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8 xmlns:svg="http://www.w3.org/2000/svg"
9 xmlns="http://www.w3.org/2000/svg"
10 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12 width="45"
13 height="45"
14 id="svg3827"
15 version="1.1"
16 inkscape:version="0.48.1 r9760"
17 sodipodi:docname="load-script.svg">
18 <defs
19 id="defs3829" />
20 <sodipodi:namedview
21 id="base"
22 pagecolor="#ffffff"
23 bordercolor="#666666"
24 borderopacity="1.0"
25 inkscape:pageopacity="0.0"
26 inkscape:pageshadow="2"
27 inkscape:zoom="3.959798"
28 inkscape:cx="171.17264"
29 inkscape:cy="-8.0710166"
30 inkscape:document-units="px"
31 inkscape:current-layer="layer1"
32 showgrid="false"
33 inkscape:window-width="1920"
34 inkscape:window-height="1028"
35 inkscape:window-x="-8"
36 inkscape:window-y="-8"
37 inkscape:window-maximized="1" />
38 <metadata
39 id="metadata3832">
40 <rdf:RDF>
41 <cc:Work
42 rdf:about="">
43 <dc:format>image/svg+xml</dc:format>
44 <dc:type
45 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
46 <dc:title></dc:title>
47 <dc:creator>
48 <cc:Agent>
49 <dc:title>T.Hofmeister</dc:title>
50 </cc:Agent>
51 </dc:creator>
52 </cc:Work>
53 </rdf:RDF>
54 </metadata>
55 <g
56 inkscape:label="Ebene 1"
57 inkscape:groupmode="layer"
58 id="layer1"
59 transform="translate(0,-1007.3622)">
60 <g
61 id="layer1-7"
62 transform="matrix(-0.25019951,0,0,0.28877175,123.44112,917.40972)"
63 style="fill:#696969">
64 <g
65 id="g3257"
66 transform="matrix(1.9175,0,0,1.9175,-607.19,-179.09)"
67 style="fill:#696969">
68 <path
69 id="path3224"
70 d="m 563.06,260.72 -1.25,0.16 -40.15,4.87 -1.66,0.22 0.38,1.62 c 3.78,16.93 -0.59,34.07 -2.88,51.57 l -0.22,1.84 1.81,-0.16 42,-3 1.25,-0.06 0.16,-1.25 c 2.13,-17.86 6.92,-36.12 0.94,-54.62 l -0.38,-1.19 z m -2.18,3.28 c 4.96,16.72 -1.56,33.17 -3.72,50.47 l -35.63,2.78 c 2.25,-16.14 7.03,-29.55 3.78,-46.19 L 560.88,264 z"
71 style="fill:#696969;fill-rule:evenodd"
72 inkscape:connector-curvature="0" />
73 <path
74 id="path3237"
75 d="m 531.39,275.61 23.34,-4.6"
76 style="fill:#696969;stroke:#000000;stroke-width:1px"
77 inkscape:connector-curvature="0" />
78 <path
79 id="path3243"
80 d="m 532.1,280.91 22.27,-2.83"
81 style="fill:#696969;stroke:#000000;stroke-width:1px"
82 inkscape:connector-curvature="0" />
83 <path
84 id="path3247"
85 d="m 531.92,285.86 22.89,-1.95"
86 style="fill:#696969;stroke:#000000;stroke-width:1px"
87 inkscape:connector-curvature="0" />
88 <path
89 id="path3249"
90 d="m 530.15,292.84 24.22,-2.12"
91 style="fill:#696969;stroke:#000000;stroke-width:1px"
92 inkscape:connector-curvature="0" />
93 <path
94 id="path3251"
95 d="m 529.45,297.53 22.98,-0.8"
96 style="fill:#696969;stroke:#000000;stroke-width:1px"
97 inkscape:connector-curvature="0" />
98 <path
99 id="path3253"
100 d="m 528.65,304.24 22.45,-2.56"
101 style="fill:#696969;stroke:#000000;stroke-width:1px"
102 inkscape:connector-curvature="0" />
103 <path
104 id="path3255"
105 d="m 527.5,309.37 22.81,-1.77"
106 style="fill:#696969;stroke:#000000;stroke-width:1px"
107 inkscape:connector-curvature="0" />
108 </g>
109 </g>
110 <path
111 display="block"
112 d="m 22.50945,1041.7031 c 10.249979,14.5758 18.326744,5.8628 15.179173,-14.1826 l 3.401516,-0.2354 -8.04206,-17.0393 -2.800459,17.789 3.507825,-0.2428 c 2.535261,14.6877 0.402108,18.0407 -11.324416,13.7916 z"
113 style="color:#000000;fill:#a9a9a9;stroke:#000000;stroke-width:0.61923206;display:block"
114 id="path1432"
115 inkscape:connector-curvature="0"
116 sodipodi:nodetypes="cccccccc" />
117 <rect
118 style="color:#000000;fill:#00ffff;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:0.42527184;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
119 id="rect3032"
120 width="44.57473"
121 height="44.57473"
122 x="0.18852967"
123 y="1007.5989" />
124 </g>
125</svg>
interface/resources/icons/new-script.svg+0−129
@@ -1,129 +0,0 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4<svg
5 xmlns:dc="http://purl.org/dc/elements/1.1/"
6 xmlns:cc="http://creativecommons.org/ns#"
7 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8 xmlns:svg="http://www.w3.org/2000/svg"
9 xmlns="http://www.w3.org/2000/svg"
10 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12 width="45"
13 height="45"
14 id="svg3827"
15 version="1.1"
16 inkscape:version="0.48.1 r9760"
17 sodipodi:docname="new-script - Kopie (2).svg">
18 <defs
19 id="defs3829" />
20 <sodipodi:namedview
21 id="base"
22 pagecolor="#ffffff"
23 bordercolor="#666666"
24 borderopacity="1.0"
25 inkscape:pageopacity="0.0"
26 inkscape:pageshadow="2"
27 inkscape:zoom="5.6"
28 inkscape:cx="39.376692"
29 inkscape:cy="9.0006701"
30 inkscape:document-units="px"
31 inkscape:current-layer="layer1"
32 showgrid="false"
33 inkscape:window-width="1920"
34 inkscape:window-height="1028"
35 inkscape:window-x="-8"
36 inkscape:window-y="-8"
37 inkscape:window-maximized="1" />
38 <metadata
39 id="metadata3832">
40 <rdf:RDF>
41 <cc:Work
42 rdf:about="">
43 <dc:format>image/svg+xml</dc:format>
44 <dc:type
45 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
46 <dc:title />
47 <dc:creator>
48 <cc:Agent>
49 <dc:title>T.Hofmeister</dc:title>
50 </cc:Agent>
51 </dc:creator>
52 </cc:Work>
53 </rdf:RDF>
54 </metadata>
55 <g
56 inkscape:label="Ebene 1"
57 inkscape:groupmode="layer"
58 id="layer1"
59 transform="translate(0,-1007.3622)">
60 <rect
61 style="color:#000000;fill:#00ffff;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:0.42527184;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
62 id="rect3032"
63 width="44.57473"
64 height="44.57473"
65 x="0.18852967"
66 y="1007.5989" />
67 <g
68 id="layer1-7-7"
69 transform="matrix(-0.23943965,0,0,0.3096188,117.90945,912.00498)"
70 style="fill:#696969">
71 <g
72 id="g3257-4"
73 transform="matrix(1.9175,0,0,1.9175,-607.19,-179.09)"
74 style="fill:#696969">
75 <path
76 id="path3224-0"
77 d="m 563.06,260.72 -1.25,0.16 -40.15,4.87 -1.66,0.22 0.38,1.62 c 3.78,16.93 -0.59,34.07 -2.88,51.57 l -0.22,1.84 1.81,-0.16 42,-3 1.25,-0.06 0.16,-1.25 c 2.13,-17.86 6.92,-36.12 0.94,-54.62 l -0.38,-1.19 z m -2.18,3.28 c 4.96,16.72 -1.56,33.17 -3.72,50.47 l -35.63,2.78 c 2.25,-16.14 7.03,-29.55 3.78,-46.19 L 560.88,264 z"
78 style="fill:#696969;fill-rule:evenodd"
79 inkscape:connector-curvature="0" />
80 <path
81 id="path3237-9"
82 d="m 531.39,275.61 23.34,-4.6"
83 style="fill:#696969;stroke:#000000;stroke-width:1px"
84 inkscape:connector-curvature="0" />
85 <path
86 id="path3243-4"
87 d="m 532.1,280.91 22.27,-2.83"
88 style="fill:#696969;stroke:#000000;stroke-width:1px"
89 inkscape:connector-curvature="0" />
90 <path
91 id="path3247-8"
92 d="m 531.92,285.86 22.89,-1.95"
93 style="fill:#696969;stroke:#000000;stroke-width:1px"
94 inkscape:connector-curvature="0" />
95 <path
96 id="path3249-8"
97 d="m 530.15,292.84 24.22,-2.12"
98 style="fill:#696969;stroke:#000000;stroke-width:1px"
99 inkscape:connector-curvature="0" />
100 <path
101 id="path3251-2"
102 d="m 529.45,297.53 22.98,-0.8"
103 style="fill:#696969;stroke:#000000;stroke-width:1px"
104 inkscape:connector-curvature="0" />
105 <path
106 id="path3253-4"
107 d="m 528.65,304.24 22.45,-2.56"
108 style="fill:#696969;stroke:#000000;stroke-width:1px"
109 inkscape:connector-curvature="0" />
110 <path
111 id="path3255-5"
112 d="m 527.5,309.37 22.81,-1.77"
113 style="fill:#696969;stroke:#000000;stroke-width:1px"
114 inkscape:connector-curvature="0" />
115 </g>
116 </g>
117 <g
118 id="layer1-1"
119 transform="matrix(0.85515704,0.72492349,-0.91920854,2.1402565,983.21735,-1213.0824)"
120 style="fill:#a9a9a9;stroke:#000000">
121 <path
122 style="fill:#a9a9a9;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
123 id="path2996"
124 transform="translate(0,1036.3622)"
125 d="m 3.4723994,8.5185577 3.0304576,-7.0710678 6.944799,0 -5.0191957,5.08233 4.1353117,0 -8.1127873,9.0913731 2.0834396,-7.1342026 z"
126 inkscape:connector-curvature="0" />
127 </g>
128 </g>
129</svg>
interface/resources/icons/save-script.svg+0−674
@@ -1,674 +0,0 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4<svg
5 xmlns:dc="http://purl.org/dc/elements/1.1/"
6 xmlns:cc="http://creativecommons.org/ns#"
7 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8 xmlns:svg="http://www.w3.org/2000/svg"
9 xmlns="http://www.w3.org/2000/svg"
10 xmlns:xlink="http://www.w3.org/1999/xlink"
11 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13 width="45"
14 height="45"
15 id="svg3827"
16 version="1.1"
17 inkscape:version="0.48.1 r9760"
18 sodipodi:docname="load-script - Kopie.svg">
19 <defs
20 id="defs3829">
21 <linearGradient
22 x1="28.061"
23 x2="28.061"
24 y1="31.431"
25 gradientUnits="userSpaceOnUse"
26 y2="36.437"
27 id="linearGradient6971">
28 <stop
29 offset="0"
30 stop-color="#ddd"
31 id="stop6967" />
32 <stop
33 offset="1"
34 stop-color="#fdfdfd"
35 id="stop6969" />
36 </linearGradient>
37 <linearGradient
38 x1="12.25"
39 x2="7"
40 y1="18.25"
41 gradientUnits="userSpaceOnUse"
42 y2="21.118"
43 id="linearGradient6931">
44 <stop
45 offset="0"
46 stop-color="#204a87"
47 id="stop6927" />
48 <stop
49 offset="1"
50 stop-opacity="0"
51 stop-color="#204a87"
52 id="stop6929" />
53 </linearGradient>
54 <linearGradient
55 x1="14.752"
56 x2="8.8953"
57 y1="15.868"
58 gradientUnits="userSpaceOnUse"
59 y2="16.743"
60 id="linearGradient6907">
61 <stop
62 offset="0"
63 stop-color="#3465a4"
64 id="stop6903" />
65 <stop
66 offset="1"
67 stop-opacity="0"
68 stop-color="#3465a4"
69 id="stop6905" />
70 </linearGradient>
71 <linearGradient
72 x1="33.431"
73 x2="21.748"
74 y1="31.965"
75 gradientUnits="userSpaceOnUse"
76 y2="11.781"
77 id="linearGradient2553">
78 <stop
79 offset="0"
80 stop-color="#fff"
81 id="stop2557" />
82 <stop
83 offset=".5"
84 stop-color="#e6e6e6"
85 id="stop2561" />
86 <stop
87 offset=".75"
88 stop-color="#fff"
89 id="stop2563" />
90 <stop
91 offset=".84167"
92 stop-color="#e1e1e1"
93 id="stop2565" />
94 <stop
95 offset="1"
96 stop-color="#fff"
97 id="stop2559" />
98 </linearGradient>
99 <linearGradient
100 y2="26.357"
101 y1="11.319"
102 gradientTransform="translate(0,5.125)"
103 x2="23.688"
104 gradientUnits="userSpaceOnUse"
105 x1="23.688"
106 id="linearGradient4272">
107 <stop
108 offset="0"
109 stop-opacity=".2549"
110 stop-color="#fff"
111 id="stop4276" />
112 <stop
113 offset="1"
114 stop-color="#fff"
115 id="stop4278" />
116 </linearGradient>
117 <linearGradient
118 y2="47.621"
119 y1="4.4331"
120 gradientTransform="translate(0,5.125)"
121 x2="44.096"
122 gradientUnits="userSpaceOnUse"
123 x1="12.378"
124 id="linearGradient4260">
125 <stop
126 offset="0"
127 stop-color="#fff"
128 id="stop4256" />
129 <stop
130 offset="1"
131 stop-opacity="0"
132 stop-color="#fff"
133 id="stop4258" />
134 </linearGradient>
135 <radialGradient
136 r="20.936"
137 gradientTransform="matrix(1.2862,0.7817,-0.71078,1.1696,-2.3543,0.24814)"
138 cx="15.571"
139 cy="2.9585"
140 gradientUnits="userSpaceOnUse"
141 id="radialGradient4250">
142 <stop
143 offset="0"
144 stop-color="#e4e4e4"
145 id="stop4246" />
146 <stop
147 offset="1"
148 stop-color="#d3d3d3"
149 id="stop4248" />
150 </radialGradient>
151 <linearGradient
152 y2="33.759"
153 y1="37.206"
154 gradientTransform="translate(0,5.125)"
155 x2="12.222"
156 gradientUnits="userSpaceOnUse"
157 x1="12.277"
158 id="linearGradient4242">
159 <stop
160 offset="0"
161 stop-color="#eee"
162 id="stop4238" />
163 <stop
164 offset="1"
165 stop-opacity="0"
166 stop-color="#eee"
167 id="stop4240" />
168 </linearGradient>
169 <linearGradient
170 y2="40.944"
171 y1="28.481"
172 gradientTransform="translate(0,5.125)"
173 x2="36.183"
174 gradientUnits="userSpaceOnUse"
175 x1="7.6046"
176 id="linearGradient4234">
177 <stop
178 offset="0"
179 stop-color="#bbb"
180 id="stop4230" />
181 <stop
182 offset="1"
183 stop-color="#9f9f9f"
184 id="stop4232" />
185 </linearGradient>
186 <linearGradient
187 y2="35.281"
188 y1="35.281"
189 gradientTransform="translate(0.79549,3.7992)"
190 x2="24.688"
191 gradientUnits="userSpaceOnUse"
192 x1="7.0625"
193 id="linearGradient4209">
194 <stop
195 offset="0"
196 stop-color="#838383"
197 id="stop4186" />
198 <stop
199 offset="1"
200 stop-opacity="0"
201 stop-color="#bbb"
202 id="stop4188" />
203 </linearGradient>
204 <radialGradient
205 r="15.645"
206 gradientTransform="matrix(1,0,0,0.53672,0,16.873)"
207 cx="24.837"
208 cy="36.421"
209 gradientUnits="userSpaceOnUse"
210 id="radialGradient8668">
211 <stop
212 offset="0"
213 id="stop8664" />
214 <stop
215 offset="1"
216 stop-opacity="0"
217 id="stop8666" />
218 </radialGradient>
219 <linearGradient
220 y2="12.584"
221 x2="12.624"
222 gradientTransform="matrix(0.91411,0,0,0.91411,-3.8687,-2.7069)"
223 y1="27.394"
224 gradientUnits="userSpaceOnUse"
225 x1="33.06"
226 id="linearGradient1764">
227 <stop
228 offset="0"
229 stop-color="#fff"
230 id="stop2189" />
231 <stop
232 offset="1"
233 stop-opacity="0"
234 stop-color="#fff"
235 id="stop2191" />
236 </linearGradient>
237 <radialGradient
238 r="19.062"
239 gradientTransform="matrix(-1.3145,-0.010063,-0.01023,1.3362,46.221,-4.9099)"
240 cx="23.447"
241 cy="6.4577"
242 gradientUnits="userSpaceOnUse"
243 id="radialGradient4997">
244 <stop
245 offset="0"
246 stop-color="#fff"
247 id="stop4993" />
248 <stop
249 offset="1"
250 stop-opacity="0"
251 stop-color="#fff"
252 id="stop4995" />
253 </radialGradient>
254 <linearGradient
255 y2="609.51"
256 x2="302.86"
257 gradientTransform="matrix(2.7744,0,0,1.9697,-1892.2,-872.89)"
258 y1="366.65"
259 gradientUnits="userSpaceOnUse"
260 x1="302.86"
261 id="linearGradient5027">
262 <stop
263 offset="0"
264 stop-opacity="0"
265 id="stop5050" />
266 <stop
267 offset=".5"
268 id="stop5056" />
269 <stop
270 offset="1"
271 stop-opacity="0"
272 id="stop5052" />
273 </linearGradient>
274 <radialGradient
275 r="117.14"
276 gradientTransform="matrix(2.7744,0,0,1.9697,-1891.6,-872.89)"
277 cx="605.71"
278 cy="486.65"
279 gradientUnits="userSpaceOnUse"
280 xlink:href="#linearGradient5060"
281 id="radialGradient5029" />
282 <linearGradient
283 id="linearGradient5060">
284 <stop
285 offset="0"
286 id="stop5062" />
287 <stop
288 offset="1"
289 stop-opacity="0"
290 id="stop5064" />
291 </linearGradient>
292 <radialGradient
293 r="117.14"
294 gradientTransform="matrix(-2.7744,0,0,1.9697,112.76,-872.89)"
295 cx="605.71"
296 cy="486.65"
297 gradientUnits="userSpaceOnUse"
298 xlink:href="#linearGradient5060"
299 id="radialGradient5031" />
300 <linearGradient
301 inkscape:collect="always"
302 xlink:href="#linearGradient6971"
303 id="linearGradient3239"
304 gradientUnits="userSpaceOnUse"
305 x1="28.061"
306 y1="31.431"
307 x2="28.061"
308 y2="36.437"
309 gradientTransform="translate(51.972416,1005.3761)" />
310 <radialGradient
311 inkscape:collect="always"
312 xlink:href="#radialGradient8668"
313 id="radialGradient3253"
314 gradientUnits="userSpaceOnUse"
315 gradientTransform="matrix(1.1302,0,0,-0.40769251,48.062716,1046.2254)"
316 cx="24.837"
317 cy="36.421"
318 r="15.645" />
319 <linearGradient
320 inkscape:collect="always"
321 xlink:href="#linearGradient5027"
322 id="linearGradient3361"
323 gradientUnits="userSpaceOnUse"
324 gradientTransform="matrix(2.7744,0,0,1.9697,-1892.2,-872.89)"
325 x1="302.86"
326 y1="366.65"
327 x2="302.86"
328 y2="609.51" />
329 <radialGradient
330 inkscape:collect="always"
331 xlink:href="#linearGradient5060"
332 id="radialGradient3363"
333 gradientUnits="userSpaceOnUse"
334 gradientTransform="matrix(2.7744,0,0,1.9697,-1891.6,-872.89)"
335 cx="605.71"
336 cy="486.65"
337 r="117.14" />
338 <radialGradient
339 inkscape:collect="always"
340 xlink:href="#linearGradient5060"
341 id="radialGradient3365"
342 gradientUnits="userSpaceOnUse"
343 gradientTransform="matrix(-2.7744,0,0,1.9697,112.76,-872.89)"
344 cx="605.71"
345 cy="486.65"
346 r="117.14" />
347 <linearGradient
348 inkscape:collect="always"
349 xlink:href="#linearGradient4234"
350 id="linearGradient3367"
351 gradientUnits="userSpaceOnUse"
352 gradientTransform="translate(0,5.125)"
353 x1="7.6046"
354 y1="28.481"
355 x2="36.183"
356 y2="40.944" />
357 <radialGradient
358 inkscape:collect="always"
359 xlink:href="#radialGradient4250"
360 id="radialGradient3369"
361 gradientUnits="userSpaceOnUse"
362 gradientTransform="matrix(1.2862,0.7817,-0.71078,1.1696,-2.3543,0.24814)"
363 cx="15.571"
364 cy="2.9585"
365 r="20.936" />
366 <linearGradient
367 inkscape:collect="always"
368 xlink:href="#linearGradient4209"
369 id="linearGradient3371"
370 gradientUnits="userSpaceOnUse"
371 gradientTransform="translate(0.79549,3.7992)"
372 x1="7.0625"
373 y1="35.281"
374 x2="24.688"
375 y2="35.281" />
376 <linearGradient
377 inkscape:collect="always"
378 xlink:href="#linearGradient4242"
379 id="linearGradient3373"
380 gradientUnits="userSpaceOnUse"
381 gradientTransform="translate(0,5.125)"
382 x1="12.277"
383 y1="37.206"
384 x2="12.222"
385 y2="33.759" />
386 <linearGradient
387 inkscape:collect="always"
388 xlink:href="#linearGradient4272"
389 id="linearGradient3375"
390 gradientUnits="userSpaceOnUse"
391 gradientTransform="translate(0,5.125)"
392 x1="23.688"
393 y1="11.319"
394 x2="23.688"
395 y2="26.357" />
396 <linearGradient
397 inkscape:collect="always"
398 xlink:href="#linearGradient4260"
399 id="linearGradient3377"
400 gradientUnits="userSpaceOnUse"
401 gradientTransform="translate(0,5.125)"
402 x1="12.378"
403 y1="4.4331"
404 x2="44.096"
405 y2="47.621" />
406 <linearGradient
407 inkscape:collect="always"
408 xlink:href="#linearGradient2553"
409 id="linearGradient3379"
410 gradientUnits="userSpaceOnUse"
411 x1="33.431"
412 y1="31.965"
413 x2="21.748"
414 y2="11.781" />
415 <radialGradient
416 inkscape:collect="always"
417 xlink:href="#radialGradient8668"
418 id="radialGradient3381"
419 gradientUnits="userSpaceOnUse"
420 gradientTransform="matrix(1.1302,0,0,-0.40769251,48.062716,1046.2254)"
421 cx="24.837"
422 cy="36.421"
423 r="15.645" />
424 <linearGradient
425 inkscape:collect="always"
426 xlink:href="#linearGradient6971"
427 id="linearGradient3383"
428 gradientUnits="userSpaceOnUse"
429 gradientTransform="translate(51.972416,1005.3761)"
430 x1="28.061"
431 y1="31.431"
432 x2="28.061"
433 y2="36.437" />
434 </defs>
435 <sodipodi:namedview
436 id="base"
437 pagecolor="#ffffff"
438 bordercolor="#666666"
439 borderopacity="1.0"
440 inkscape:pageopacity="0.0"
441 inkscape:pageshadow="2"
442 inkscape:zoom="5.6"
443 inkscape:cx="113.76169"
444 inkscape:cy="-12.107928"
445 inkscape:document-units="px"
446 inkscape:current-layer="layer1"
447 showgrid="false"
448 inkscape:window-width="1920"
449 inkscape:window-height="1028"
450 inkscape:window-x="-8"
451 inkscape:window-y="-8"
452 inkscape:window-maximized="1" />
453 <metadata
454 id="metadata3832">
455 <rdf:RDF>
456 <cc:Work
457 rdf:about="">
458 <dc:format>image/svg+xml</dc:format>
459 <dc:type
460 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
461 <dc:title></dc:title>
462 <dc:creator>
463 <cc:Agent>
464 <dc:title>T.Hofmeister</dc:title>
465 </cc:Agent>
466 </dc:creator>
467 </cc:Work>
468 </rdf:RDF>
469 </metadata>
470 <g
471 inkscape:label="Ebene 1"
472 inkscape:groupmode="layer"
473 id="layer1"
474 transform="translate(0,-1007.3622)">
475 <g
476 id="g3385">
477 <g
478 transform="matrix(0.87964671,0,0,1,-44.027424,-2)"
479 id="g3255">
480 <g
481 id="layer2"
482 transform="translate(51.972416,1005.3761)">
483 <g
484 id="g5022"
485 transform="matrix(0.024114,0,0,0.019292,45.49,41.752)">
486 <rect
487 id="rect4173"
488 style="opacity:0.40206;color:#000000;fill:url(#linearGradient3361)"
489 height="478.35999"
490 width="1339.6"
491 y="-150.7"
492 x="-1559.3" />
493 <path
494 inkscape:connector-curvature="0"
495 id="path5058"
496 style="opacity:0.40206;color:#000000;fill:url(#radialGradient3363)"
497 d="m -219.62,-150.68 v 478.33 c 142.88,0.9 345.4,-107.17 345.4,-239.2 0,-132.02 -159.44,-239.13 -345.4,-239.13 z" />
498 <path
499 inkscape:connector-curvature="0"
500 id="path5018"
501 style="opacity:0.40206;color:#000000;fill:url(#radialGradient3365)"
502 d="m -1559.3,-150.68 v 478.33 c -142.8,0.9 -345.4,-107.17 -345.4,-239.2 0,-132.02 159.5,-239.13 345.4,-239.13 z" />
503 </g>
504 <path
505 style="fill:none;stroke:#535353;stroke-width:2;stroke-linecap:round;stroke-linejoin:round"
506 inkscape:connector-curvature="0"
507 id="path4196"
508 d="m 11.286,13.088 c -0.625,0 -1.032,0.29 -1.282,0.843 L 3.5357,31.035 c 0,0 -0.25,0.671 -0.25,1.781 v 9.65 c 0,1.083 0.6578,1.625 1.6562,1.625 h 38.562 c 0.985,0 1.594,-0.718 1.594,-1.844 v -9.65 c 0,0 0.106,-0.77 -0.094,-1.312 l -6.718,-17.197 c -0.185,-0.512 -0.637,-0.988 -1.125,-1 h -25.875 z" />
509 <path
510 style="fill:url(#linearGradient3367);fill-rule:evenodd"
511 inkscape:connector-curvature="0"
512 id="path4170"
513 d="m 3.2736,32.122 0.7646,-0.692 37.61,0.062 3.462,0.317 v 10.439 c 0,1.125 -0.607,1.843 -1.592,1.843 H 4.9352 c -0.998,0 -1.6614,-0.542 -1.6614,-1.624 V 32.122 z" />
514 <path
515 style="fill:url(#radialGradient3369);fill-rule:evenodd"
516 inkscape:connector-curvature="0"
517 id="path3093"
518 d="m 3.5491,31.039 c -0.7143,1.465 -6e-4,2.393 1.0357,2.393 h 39 c 1.119,-0.024 1.845,-1.012 1.428,-2.143 l -6.714,-17.21 c -0.184,-0.512 -0.655,-0.988 -1.143,-1 h -25.857 c -0.625,0 -1.036,0.303 -1.286,0.857 L 3.5489,31.039 z" />
519 <rect
520 id="rect4174"
521 style="color:#000000;fill:url(#linearGradient3371);fill-rule:evenodd"
522 height="5.5625"
523 width="17.625"
524 y="36.299"
525 x="7.8579998" />
526 <path
527 style="opacity:0.81142997;fill:url(#linearGradient3373);fill-rule:evenodd"
528 inkscape:connector-curvature="0"
529 id="path4194"
530 d="M 7.858,41.862 V 37.85 c 1.8355,3.179 8.296,4.012 12.937,4.012 H 7.858 z" />
531 <path
532 style="fill:#ffffff;fill-rule:evenodd"
533 inkscape:connector-curvature="0"
534 id="path4201"
535 d="m 44.796,30.754 c 0.064,1.25 -0.414,2.316 -1.322,2.343 H 5.355 c -1.2889,0 -1.8674,-0.325 -2.0837,-0.868 0.0917,0.945 0.8258,1.65 2.084,1.65 h 38.119 c 1.076,-0.033 1.753,-1.424 1.352,-2.995 l -0.03,-0.13 z" />
536 <path
537 inkscape:connector-curvature="0"
538 id="path4211"
539 style="opacity:0.69142995;color:#000000;fill:url(#linearGradient3375);fill-rule:evenodd"
540 d="m 10.969,15.281 c -0.046,0.201 -0.188,0.387 -0.188,0.594 0,0.949 0.591,1.789 1.344,2.594 0.24,-0.154 0.365,-0.355 0.625,-0.5 -0.94,-0.816 -1.553,-1.717 -1.781,-2.688 z m 26.656,0 c -0.229,0.97 -0.842,1.873 -1.781,2.688 0.274,0.153 0.404,0.368 0.656,0.531 0.757,-0.807 1.312,-1.673 1.312,-2.625 0,-0.207 -0.141,-0.393 -0.187,-0.594 z m 2.187,8.438 c -0.613,4.04 -7.298,7.25 -15.531,7.25 -8.212,0 -14.86,-3.193 -15.5,-7.219 -0.0321,0.197 -0.1248,0.392 -0.1248,0.594 10e-5,4.318 6.9888,7.844 15.625,7.844 8.636,0 15.656,-3.526 15.657,-7.844 0,-0.213 -0.09,-0.418 -0.126,-0.625 z" />
541 <path
542 inkscape:connector-curvature="0"
543 id="path4224"
544 style="color:#000000;fill:#ffffff;fill-opacity:0.45762999;fill-rule:evenodd"
545 d="m 8.5737,25.594 a 1.37005,1.0165371 0 1 1 -2.7401,0 1.37005,1.0165371 0 1 1 2.7401,0 z"
546 transform="translate(0.088388,5.3018)" />
547 <path
548 inkscape:connector-curvature="0"
549 id="path4226"
550 style="color:#000000;fill:#ffffff;fill-opacity:0.45762999;fill-rule:evenodd"
551 d="m 8.5737,25.594 a 1.37005,1.0165371 0 1 1 -2.7401,0 1.37005,1.0165371 0 1 1 2.7401,0 z"
552 transform="translate(33.967,5.2134)" />
553 <path
554 style="fill:none;stroke:url(#linearGradient3377);stroke-linecap:round;stroke-linejoin:round"
555 inkscape:connector-curvature="0"
556 id="path4252"
557 d="m 11.643,13.541 c -0.602,0 -0.993,0.279 -1.234,0.812 L 3.994,30.944 c 0,0 -0.2406,0.646 -0.2406,1.715 v 9.29 c 0,1.354 0.444,1.627 1.5944,1.627 h 37.687 c 1.323,0 1.534,-0.317 1.534,-1.838 v -9.29 c 0,0 0.102,-0.742 -0.09,-1.264 l -6.593,-16.806 c -0.178,-0.492 -0.551,-0.826 -1.021,-0.837 h -25.222 z" />
558 <path
559 style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:square;stroke-opacity:0.42372999"
560 inkscape:connector-curvature="0"
561 id="path4282"
562 d="m 40.5,36.554 v 5.021" />
563 <path
564 style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:square;stroke-opacity:0.42372999"
565 inkscape:connector-curvature="0"
566 id="path4284"
567 d="m 38.5,36.614 v 5.021" />
568 <path
569 style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:square;stroke-opacity:0.42372999"
570 inkscape:connector-curvature="0"
571 id="path4286"
572 d="m 36.5,36.614 v 5.021" />
573 <path
574 style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:square;stroke-opacity:0.42372999"
575 inkscape:connector-curvature="0"
576 id="path4288"
577 d="m 34.5,36.614 v 5.021" />
578 <path
579 style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:square;stroke-opacity:0.42372999"
580 inkscape:connector-curvature="0"
581 id="path4290"
582 d="m 32.5,36.614 v 5.021" />
583 <path
584 style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:square;stroke-opacity:0.42372999"
585 inkscape:connector-curvature="0"
586 id="path4292"
587 d="m 30.5,36.614 v 5.021" />
588 <path
589 style="opacity:0.09714302;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:square"
590 inkscape:connector-curvature="0"
591 id="path4294"
592 d="m 39.5,36.604 v 5.021" />
593 <path
594 style="opacity:0.09714302;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:square"
595 inkscape:connector-curvature="0"
596 id="path4296"
597 d="m 37.5,36.664 v 5.021" />
598 <path
599 style="opacity:0.09714302;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:square"
600 inkscape:connector-curvature="0"
601 id="path4298"
602 d="m 35.5,36.664 v 5.021" />
603 <path
604 style="opacity:0.09714302;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:square"
605 inkscape:connector-curvature="0"
606 id="path4300"
607 d="m 33.5,36.664 v 5.021" />
608 <path
609 style="opacity:0.09714302;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:square"
610 inkscape:connector-curvature="0"
611 id="path4302"
612 d="m 31.5,36.664 v 5.021" />
613 <path
614 style="opacity:0.43999999;fill:#ffffff;fill-rule:evenodd"
615 inkscape:connector-curvature="0"
616 id="path4572"
617 d="m 7.875,36.312 v 5.532 H 20.438 L 8.219,41.5 7.875,36.312 z" />
618 <path
619 inkscape:connector-curvature="0"
620 id="path2545"
621 style="opacity:0.20571002;color:#000000;fill:url(#linearGradient3379);fill-rule:evenodd"
622 d="m 39.875,19.562 a 14.875,6.6875 0 1 1 -29.75,0 14.875,6.6875 0 1 1 29.75,0 z"
623 transform="matrix(1.0378,0,0,1.0607,-1.6329,3.0304)" />
624 </g>
625 <path
626 d="m 93.815472,1031.3767 a 17.681979,6.3782852 0 1 0 -35.363958,0 17.681979,6.3782852 0 1 0 35.363958,0 z"
627 style="opacity:0.14118;color:#000000;fill:url(#radialGradient3381);fill-rule:evenodd"
628 id="path8660"
629 inkscape:connector-curvature="0" />
630 <rect
631 x="56.535915"
632 y="1035.6741"
633 width="39.248001"
634 height="12.278"
635 ry="1.625"
636 rx="1.625"
637 display="block"
638 style="color:#000000;fill:url(#linearGradient3383);stroke:#7d7d7d;stroke-linecap:round;display:block"
639 id="rect6951" />
640 <rect
641 x="58.972416"
642 y="1038.3761"
643 width="16"
644 height="7"
645 ry="0"
646 display="block"
647 style="opacity:0.59658999;color:#000000;fill:#7d7d7d;display:block"
648 id="rect6953" />
649 <rect
650 display="block"
651 height="9"
652 x="75.97242"
653 y="1037.3761"
654 width="1"
655 style="color:#000000;display:block"
656 id="rect6957" />
657 </g>
658 <path
659 sodipodi:nodetypes="cccccccc"
660 inkscape:connector-curvature="0"
661 id="path1432"
662 style="color:#000000;fill:#a9a9a9;stroke:#000000;stroke-width:0.48586071;display:block"
663 d="m 6.087091,1019.0168 c -2.4783484,-13.3382 7.140839,-12.9964 16.821938,-0.5354 l 2.083662,-1.7011 5.154697,13.4755 -11.796108,-8.0529 2.148807,-1.7542 c -6.962373,-9.2534 -10.105498,-9.9089 -14.389461,-1.3256 z"
664 display="block" />
665 <rect
666 y="1007.8514"
667 x="0.20883489"
668 height="44.57473"
669 width="44.57473"
670 id="rect3032"
671 style="color:#000000;fill:#00ffff;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:0.42527184;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
672 </g>
673 </g>
674</svg>
interface/resources/icons/start-script.svg+0−550
@@ -1,550 +0,0 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4<svg
5 xmlns:dc="http://purl.org/dc/elements/1.1/"
6 xmlns:cc="http://creativecommons.org/ns#"
7 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8 xmlns:svg="http://www.w3.org/2000/svg"
9 xmlns="http://www.w3.org/2000/svg"
10 xmlns:xlink="http://www.w3.org/1999/xlink"
11 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13 width="45"
14 height="45"
15 id="svg3827"
16 version="1.1"
17 inkscape:version="0.48.3.1 r9886"
18 sodipodi:docname="start-script.svg">
19 <defs
20 id="defs3829">
21 <radialGradient
22 r="15.645"
23 cy="36.421"
24 cx="24.837"
25 gradientTransform="matrix(1.1302,0,0,-0.40769251,48.062716,1046.2254)"
26 gradientUnits="userSpaceOnUse"
27 id="radialGradient3253"
28 xlink:href="#radialGradient8668"
29 inkscape:collect="always" />
30 <linearGradient
31 gradientTransform="translate(51.972416,1005.3761)"
32 y2="36.437"
33 x2="28.061"
34 y1="31.431"
35 x1="28.061"
36 gradientUnits="userSpaceOnUse"
37 id="linearGradient3239"
38 xlink:href="#linearGradient6971"
39 inkscape:collect="always" />
40 <radialGradient
41 id="radialGradient5031"
42 xlink:href="#linearGradient5060"
43 gradientUnits="userSpaceOnUse"
44 cy="486.65"
45 cx="605.71"
46 gradientTransform="matrix(-2.7744,0,0,1.9697,112.76,-872.89)"
47 r="117.14" />
48 <linearGradient
49 id="linearGradient5060">
50 <stop
51 id="stop5062"
52 offset="0" />
53 <stop
54 id="stop5064"
55 stop-opacity="0"
56 offset="1" />
57 </linearGradient>
58 <radialGradient
59 id="radialGradient5029"
60 xlink:href="#linearGradient5060"
61 gradientUnits="userSpaceOnUse"
62 cy="486.65"
63 cx="605.71"
64 gradientTransform="matrix(2.7744,0,0,1.9697,-1891.6,-872.89)"
65 r="117.14" />
66 <linearGradient
67 id="linearGradient5027"
68 x1="302.86"
69 gradientUnits="userSpaceOnUse"
70 y1="366.65"
71 gradientTransform="matrix(2.7744,0,0,1.9697,-1892.2,-872.89)"
72 x2="302.86"
73 y2="609.51">
74 <stop
75 id="stop5050"
76 stop-opacity="0"
77 offset="0" />
78 <stop
79 id="stop5056"
80 offset=".5" />
81 <stop
82 id="stop5052"
83 stop-opacity="0"
84 offset="1" />
85 </linearGradient>
86 <radialGradient
87 id="radialGradient4997"
88 gradientUnits="userSpaceOnUse"
89 cy="6.4577"
90 cx="23.447"
91 gradientTransform="matrix(-1.3145,-0.010063,-0.01023,1.3362,46.221,-4.9099)"
92 r="19.062">
93 <stop
94 id="stop4993"
95 stop-color="#fff"
96 offset="0" />
97 <stop
98 id="stop4995"
99 stop-color="#fff"
100 stop-opacity="0"
101 offset="1" />
102 </radialGradient>
103 <linearGradient
104 id="linearGradient1764"
105 x1="33.06"
106 gradientUnits="userSpaceOnUse"
107 y1="27.394"
108 gradientTransform="matrix(0.91411,0,0,0.91411,-3.8687,-2.7069)"
109 x2="12.624"
110 y2="12.584">
111 <stop
112 id="stop2189"
113 stop-color="#fff"
114 offset="0" />
115 <stop
116 id="stop2191"
117 stop-color="#fff"
118 stop-opacity="0"
119 offset="1" />
120 </linearGradient>
121 <radialGradient
122 id="radialGradient8668"
123 gradientUnits="userSpaceOnUse"
124 cy="36.421"
125 cx="24.837"
126 gradientTransform="matrix(1,0,0,0.53672,0,16.873)"
127 r="15.645">
128 <stop
129 id="stop8664"
130 offset="0" />
131 <stop
132 id="stop8666"
133 stop-opacity="0"
134 offset="1" />
135 </radialGradient>
136 <linearGradient
137 id="linearGradient4209"
138 x1="7.0625"
139 gradientUnits="userSpaceOnUse"
140 x2="24.688"
141 gradientTransform="translate(0.79549,3.7992)"
142 y1="35.281"
143 y2="35.281">
144 <stop
145 id="stop4186"
146 stop-color="#838383"
147 offset="0" />
148 <stop
149 id="stop4188"
150 stop-color="#bbb"
151 stop-opacity="0"
152 offset="1" />
153 </linearGradient>
154 <linearGradient
155 id="linearGradient4234"
156 x1="7.6046"
157 gradientUnits="userSpaceOnUse"
158 x2="36.183"
159 gradientTransform="translate(0,5.125)"
160 y1="28.481"
161 y2="40.944">
162 <stop
163 id="stop4230"
164 stop-color="#bbb"
165 offset="0" />
166 <stop
167 id="stop4232"
168 stop-color="#9f9f9f"
169 offset="1" />
170 </linearGradient>
171 <linearGradient
172 id="linearGradient4242"
173 x1="12.277"
174 gradientUnits="userSpaceOnUse"
175 x2="12.222"
176 gradientTransform="translate(0,5.125)"
177 y1="37.206"
178 y2="33.759">
179 <stop
180 id="stop4238"
181 stop-color="#eee"
182 offset="0" />
183 <stop
184 id="stop4240"
185 stop-color="#eee"
186 stop-opacity="0"
187 offset="1" />
188 </linearGradient>
189 <radialGradient
190 id="radialGradient4250"
191 gradientUnits="userSpaceOnUse"
192 cy="2.9585"
193 cx="15.571"
194 gradientTransform="matrix(1.2862,0.7817,-0.71078,1.1696,-2.3543,0.24814)"
195 r="20.936">
196 <stop
197 id="stop4246"
198 stop-color="#e4e4e4"
199 offset="0" />
200 <stop
201 id="stop4248"
202 stop-color="#d3d3d3"
203 offset="1" />
204 </radialGradient>
205 <linearGradient
206 id="linearGradient4260"
207 x1="12.378"
208 gradientUnits="userSpaceOnUse"
209 x2="44.096"
210 gradientTransform="translate(0,5.125)"
211 y1="4.4331"
212 y2="47.621">
213 <stop
214 id="stop4256"
215 stop-color="#fff"
216 offset="0" />
217 <stop
218 id="stop4258"
219 stop-color="#fff"
220 stop-opacity="0"
221 offset="1" />
222 </linearGradient>
223 <linearGradient
224 id="linearGradient4272"
225 x1="23.688"
226 gradientUnits="userSpaceOnUse"
227 x2="23.688"
228 gradientTransform="translate(0,5.125)"
229 y1="11.319"
230 y2="26.357">
231 <stop
232 id="stop4276"
233 stop-color="#fff"
234 stop-opacity=".2549"
235 offset="0" />
236 <stop
237 id="stop4278"
238 stop-color="#fff"
239 offset="1" />
240 </linearGradient>
241 <linearGradient
242 id="linearGradient2553"
243 y2="11.781"
244 gradientUnits="userSpaceOnUse"
245 y1="31.965"
246 x2="21.748"
247 x1="33.431">
248 <stop
249 id="stop2557"
250 stop-color="#fff"
251 offset="0" />
252 <stop
253 id="stop2561"
254 stop-color="#e6e6e6"
255 offset=".5" />
256 <stop
257 id="stop2563"
258 stop-color="#fff"
259 offset=".75" />
260 <stop
261 id="stop2565"
262 stop-color="#e1e1e1"
263 offset=".84167" />
264 <stop
265 id="stop2559"
266 stop-color="#fff"
267 offset="1" />
268 </linearGradient>
269 <linearGradient
270 id="linearGradient6907"
271 y2="16.743"
272 gradientUnits="userSpaceOnUse"
273 y1="15.868"
274 x2="8.8953"
275 x1="14.752">
276 <stop
277 id="stop6903"
278 stop-color="#3465a4"
279 offset="0" />
280 <stop
281 id="stop6905"
282 stop-color="#3465a4"
283 stop-opacity="0"
284 offset="1" />
285 </linearGradient>
286 <linearGradient
287 id="linearGradient6931"
288 y2="21.118"
289 gradientUnits="userSpaceOnUse"
290 y1="18.25"
291 x2="7"
292 x1="12.25">
293 <stop
294 id="stop6927"
295 stop-color="#204a87"
296 offset="0" />
297 <stop
298 id="stop6929"
299 stop-color="#204a87"
300 stop-opacity="0"
301 offset="1" />
302 </linearGradient>
303 <linearGradient
304 id="linearGradient6971"
305 y2="36.437"
306 gradientUnits="userSpaceOnUse"
307 y1="31.431"
308 x2="28.061"
309 x1="28.061">
310 <stop
311 id="stop6967"
312 stop-color="#ddd"
313 offset="0" />
314 <stop
315 id="stop6969"
316 stop-color="#fdfdfd"
317 offset="1" />
318 </linearGradient>
319 <linearGradient
320 inkscape:collect="always"
321 xlink:href="#linearGradient5027"
322 id="linearGradient3248"
323 gradientUnits="userSpaceOnUse"
324 gradientTransform="matrix(2.7744,0,0,1.9697,-1892.2,-872.89)"
325 x1="302.86"
326 y1="366.65"
327 x2="302.86"
328 y2="609.51" />
329 <radialGradient
330 inkscape:collect="always"
331 xlink:href="#linearGradient5060"
332 id="radialGradient3250"
333 gradientUnits="userSpaceOnUse"
334 gradientTransform="matrix(2.7744,0,0,1.9697,-1891.6,-872.89)"
335 cx="605.71"
336 cy="486.65"
337 r="117.14" />
338 <radialGradient
339 inkscape:collect="always"
340 xlink:href="#linearGradient5060"
341 id="radialGradient3252"
342 gradientUnits="userSpaceOnUse"
343 gradientTransform="matrix(-2.7744,0,0,1.9697,112.76,-872.89)"
344 cx="605.71"
345 cy="486.65"
346 r="117.14" />
347 <linearGradient
348 inkscape:collect="always"
349 xlink:href="#linearGradient4234"
350 id="linearGradient3254"
351 gradientUnits="userSpaceOnUse"
352 gradientTransform="translate(0,5.125)"
353 x1="7.6046"
354 y1="28.481"
355 x2="36.183"
356 y2="40.944" />
357 <radialGradient
358 inkscape:collect="always"
359 xlink:href="#radialGradient4250"
360 id="radialGradient3256"
361 gradientUnits="userSpaceOnUse"
362 gradientTransform="matrix(1.2862,0.7817,-0.71078,1.1696,-2.3543,0.24814)"
363 cx="15.571"
364 cy="2.9585"
365 r="20.936" />
366 <linearGradient
367 inkscape:collect="always"
368 xlink:href="#linearGradient4209"
369 id="linearGradient3258"
370 gradientUnits="userSpaceOnUse"
371 gradientTransform="translate(0.79549,3.7992)"
372 x1="7.0625"
373 y1="35.281"
374 x2="24.688"
375 y2="35.281" />
376 <linearGradient
377 inkscape:collect="always"
378 xlink:href="#linearGradient4242"
379 id="linearGradient3260"
380 gradientUnits="userSpaceOnUse"
381 gradientTransform="translate(0,5.125)"
382 x1="12.277"
383 y1="37.206"
384 x2="12.222"
385 y2="33.759" />
386 <linearGradient
387 inkscape:collect="always"
388 xlink:href="#linearGradient4272"
389 id="linearGradient3262"
390 gradientUnits="userSpaceOnUse"
391 gradientTransform="translate(0,5.125)"
392 x1="23.688"
393 y1="11.319"
394 x2="23.688"
395 y2="26.357" />
396 <linearGradient
397 inkscape:collect="always"
398 xlink:href="#linearGradient4260"
399 id="linearGradient3264"
400 gradientUnits="userSpaceOnUse"
401 gradientTransform="translate(0,5.125)"
402 x1="12.378"
403 y1="4.4331"
404 x2="44.096"
405 y2="47.621" />
406 <linearGradient
407 inkscape:collect="always"
408 xlink:href="#linearGradient2553"
409 id="linearGradient3266"
410 gradientUnits="userSpaceOnUse"
411 x1="33.431"
412 y1="31.965"
413 x2="21.748"
414 y2="11.781" />
415 <radialGradient
416 inkscape:collect="always"
417 xlink:href="#radialGradient8668"
418 id="radialGradient3268"
419 gradientUnits="userSpaceOnUse"
420 gradientTransform="matrix(1.1302,0,0,-0.40769251,48.062716,1046.2254)"
421 cx="24.837"
422 cy="36.421"
423 r="15.645" />
424 <linearGradient
425 inkscape:collect="always"
426 xlink:href="#linearGradient6971"
427 id="linearGradient3270"
428 gradientUnits="userSpaceOnUse"
429 gradientTransform="translate(51.972416,1005.3761)"
430 x1="28.061"
431 y1="31.431"
432 x2="28.061"
433 y2="36.437" />
434 </defs>
435 <sodipodi:namedview
436 id="base"
437 pagecolor="#ffffff"
438 bordercolor="#666666"
439 borderopacity="1.0"
440 inkscape:pageopacity="0.0"
441 inkscape:pageshadow="2"
442 inkscape:zoom="22.4"
443 inkscape:cx="44.04179"
444 inkscape:cy="22.346221"
445 inkscape:document-units="px"
446 inkscape:current-layer="layer1"
447 showgrid="false"
448 inkscape:window-width="1680"
449 inkscape:window-height="997"
450 inkscape:window-x="-8"
451 inkscape:window-y="21"
452 inkscape:window-maximized="1" />
453 <metadata
454 id="metadata3832">
455 <rdf:RDF>
456 <cc:Work
457 rdf:about="">
458 <dc:format>image/svg+xml</dc:format>
459 <dc:type
460 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
461 <dc:title />
462 <dc:creator>
463 <cc:Agent>
464 <dc:title>Maximillian Merlin</dc:title>
465 </cc:Agent>
466 </dc:creator>
467 </cc:Work>
468 </rdf:RDF>
469 </metadata>
470 <g
471 inkscape:label="Ebene 1"
472 inkscape:groupmode="layer"
473 id="layer1"
474 transform="translate(0,-1007.3622)">
475 <g
476 id="layer1-7"
477 transform="matrix(-0.25019951,0,0,0.28877175,123.44112,917.40972)"
478 style="fill:#696969">
479 <g
480 id="g3257"
481 transform="matrix(1.9175,0,0,1.9175,-607.19,-179.09)"
482 style="fill:#696969">
483 <path
484 id="path3224"
485 d="m 563.06,260.72 -1.25,0.16 -40.15,4.87 -1.66,0.22 0.38,1.62 c 3.78,16.93 -0.59,34.07 -2.88,51.57 l -0.22,1.84 1.81,-0.16 42,-3 1.25,-0.06 0.16,-1.25 c 2.13,-17.86 6.92,-36.12 0.94,-54.62 l -0.38,-1.19 z m -2.18,3.28 c 4.96,16.72 -1.56,33.17 -3.72,50.47 l -35.63,2.78 c 2.25,-16.14 7.03,-29.55 3.78,-46.19 L 560.88,264 z"
486 style="fill:#696969;fill-rule:evenodd"
487 inkscape:connector-curvature="0" />
488 <path
489 id="path3237"
490 d="m 531.39,275.61 23.34,-4.6"
491 style="fill:#696969;stroke:#000000;stroke-width:1px"
492 inkscape:connector-curvature="0" />
493 <path
494 id="path3243"
495 d="m 532.1,280.91 22.27,-2.83"
496 style="fill:#696969;stroke:#000000;stroke-width:1px"
497 inkscape:connector-curvature="0" />
498 <path
499 id="path3247"
500 d="m 531.92,285.86 22.89,-1.95"
501 style="fill:#696969;stroke:#000000;stroke-width:1px"
502 inkscape:connector-curvature="0" />
503 <path
504 id="path3249"
505 d="m 530.15,292.84 24.22,-2.12"
506 style="fill:#696969;stroke:#000000;stroke-width:1px"
507 inkscape:connector-curvature="0" />
508 <path
509 id="path3251"
510 d="m 529.45,297.53 22.98,-0.8"
511 style="fill:#696969;stroke:#000000;stroke-width:1px"
512 inkscape:connector-curvature="0" />
513 <path
514 id="path3253"
515 d="m 528.65,304.24 22.45,-2.56"
516 style="fill:#696969;stroke:#000000;stroke-width:1px"
517 inkscape:connector-curvature="0" />
518 <path
519 id="path3255"
520 d="m 527.5,309.37 22.81,-1.77"
521 style="fill:#696969;stroke:#000000;stroke-width:1px"
522 inkscape:connector-curvature="0" />
523 </g>
524 </g>
525 <rect
526 style="color:#000000;fill:#00ffff;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:0.42527184;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
527 id="rect3032"
528 width="44.57473"
529 height="44.57473"
530 x="0.18852967"
531 y="1007.5989" />
532 <rect
533 style="color:#000000;fill:#00ffff;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:0.42527184;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
534 id="rect3032-4"
535 width="44.57473"
536 height="44.57473"
537 x="84.498352"
538 y="1050.0748" />
539 <g
540 id="run-arrow"
541 transform="translate(-46.607143,-3.5714285)"
542 inkscape:label="#run-arrow">
543 <path
544 d="m 75.506508,1023.3478 1.372845,5.4631 -14.094975,-1.152 2.35e-4,7.2772 14.094975,-1.152 -1.372845,5.1249 13.761293,-7.6113 -13.761293,-7.9499 z"
545 id="arrow-rect"
546 inkscape:connector-curvature="0"
547 style="fill:#d3d3d3;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.77974033;stroke-linecap:round;stroke-linejoin:round" />
548 </g>
549 </g>
550</svg>
interface/resources/icons/stop-script.svg+0−163
@@ -1,163 +0,0 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4<svg
5 xmlns:dc="http://purl.org/dc/elements/1.1/"
6 xmlns:cc="http://creativecommons.org/ns#"
7 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8 xmlns:svg="http://www.w3.org/2000/svg"
9 xmlns="http://www.w3.org/2000/svg"
10 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12 width="45"
13 height="45"
14 id="svg3827"
15 version="1.1"
16 inkscape:version="0.48.1 r9760"
17 sodipodi:docname="stop-script.svg">
18 <defs
19 id="defs3829" />
20 <sodipodi:namedview
21 id="base"
22 pagecolor="#ffffff"
23 bordercolor="#666666"
24 borderopacity="1.0"
25 inkscape:pageopacity="0.0"
26 inkscape:pageshadow="2"
27 inkscape:zoom="5.6"
28 inkscape:cx="15.598703"
29 inkscape:cy="22.861751"
30 inkscape:document-units="px"
31 inkscape:current-layer="layer1"
32 showgrid="false"
33 inkscape:window-width="1920"
34 inkscape:window-height="1028"
35 inkscape:window-x="-8"
36 inkscape:window-y="-8"
37 inkscape:window-maximized="1" />
38 <metadata
39 id="metadata3832">
40 <rdf:RDF>
41 <cc:Work
42 rdf:about="">
43 <dc:format>image/svg+xml</dc:format>
44 <dc:type
45 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
46 <dc:title />
47 <dc:creator>
48 <cc:Agent>
49 <dc:title>Maximillian Merlin</dc:title>
50 </cc:Agent>
51 </dc:creator>
52 </cc:Work>
53 </rdf:RDF>
54 </metadata>
55 <g
56 inkscape:label="Ebene 1"
57 inkscape:groupmode="layer"
58 id="layer1"
59 transform="translate(0,-1007.3622)">
60 <g
61 id="layer1-7"
62 transform="matrix(-0.25019951,0,0,0.28877175,123.44112,917.40972)"
63 style="fill:#696969">
64 <g
65 id="g3257"
66 transform="matrix(1.9175,0,0,1.9175,-607.19,-179.09)"
67 style="fill:#696969">
68 <path
69 id="path3224"
70 d="m 563.06,260.72 -1.25,0.16 -40.15,4.87 -1.66,0.22 0.38,1.62 c 3.78,16.93 -0.59,34.07 -2.88,51.57 l -0.22,1.84 1.81,-0.16 42,-3 1.25,-0.06 0.16,-1.25 c 2.13,-17.86 6.92,-36.12 0.94,-54.62 l -0.38,-1.19 z m -2.18,3.28 c 4.96,16.72 -1.56,33.17 -3.72,50.47 l -35.63,2.78 c 2.25,-16.14 7.03,-29.55 3.78,-46.19 L 560.88,264 z"
71 style="fill:#696969;fill-rule:evenodd"
72 inkscape:connector-curvature="0" />
73 <path
74 id="path3237"
75 d="m 531.39,275.61 23.34,-4.6"
76 style="fill:#696969;stroke:#000000;stroke-width:1px"
77 inkscape:connector-curvature="0" />
78 <path
79 id="path3243"
80 d="m 532.1,280.91 22.27,-2.83"
81 style="fill:#696969;stroke:#000000;stroke-width:1px"
82 inkscape:connector-curvature="0" />
83 <path
84 id="path3247"
85 d="m 531.92,285.86 22.89,-1.95"
86 style="fill:#696969;stroke:#000000;stroke-width:1px"
87 inkscape:connector-curvature="0" />
88 <path
89 id="path3249"
90 d="m 530.15,292.84 24.22,-2.12"
91 style="fill:#696969;stroke:#000000;stroke-width:1px"
92 inkscape:connector-curvature="0" />
93 <path
94 id="path3251"
95 d="m 529.45,297.53 22.98,-0.8"
96 style="fill:#696969;stroke:#000000;stroke-width:1px"
97 inkscape:connector-curvature="0" />
98 <path
99 id="path3253"
100 d="m 528.65,304.24 22.45,-2.56"
101 style="fill:#696969;stroke:#000000;stroke-width:1px"
102 inkscape:connector-curvature="0" />
103 <path
104 id="path3255"
105 d="m 527.5,309.37 22.81,-1.77"
106 style="fill:#696969;stroke:#000000;stroke-width:1px"
107 inkscape:connector-curvature="0" />
108 </g>
109 </g>
110 <rect
111 style="color:#000000;fill:#00ffff;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:0.42527184;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
112 id="rect3032"
113 width="44.57473"
114 height="44.57473"
115 x="0.18852967"
116 y="1007.5989" />
117 <g
118 id="stop"
119 transform="matrix(0.08804464,0,0,0.0856179,29.060719,1033.5397)">
120 <g
121 id="g3004">
122 <path
123 d="M 0,-150 H 62.132 L 150,-62.132 V 62.128 L 62.132,150 H -62.128 L -149,62.132 V -62.128 L -61.132,-150 H 1 0 z"
124 id="stop_octagon"
125 inkscape:connector-curvature="0"
126 style="fill:#e81108" />
127 </g>
128 <g
129 id="g3007"
130 transform="scale(0.95,0.95)">
131 <path
132 d="M 0,-142.5 H 59.025 L 142.5,-59.025 V 59.025 L 59.025,142.5 H -59.025 L -141.549,59.025 V -59.025 L -58.074,-142.5 H 0.951 0.001 z"
133 id="stop_octagon_1_"
134 inkscape:connector-curvature="0"
135 style="fill:none;stroke:#ffffff;stroke-width:5" />
136 </g>
137 <g
138 id="g3010"
139 transform="scale(1,1.45)">
140 <g
141 id="g3012"
142 style="fill:#ffffff;enable-background:new">
143 <path
144 id="path3014"
145 d="m -124.2,12.152 8.489,-0.742 c 0.401,3.402 1.337,6.192 2.806,8.373 1.469,2.18 3.75,3.943 6.842,5.288 3.092,1.345 6.571,2.018 10.437,2.018 3.433,0 6.463,-0.51 9.092,-1.53 2.628,-1.021 4.584,-2.42 5.868,-4.198 1.283,-1.778 1.925,-3.718 1.925,-5.821 0,-2.134 -0.619,-3.997 -1.855,-5.59 -1.237,-1.592 -3.278,-2.93 -6.123,-4.013 -1.825,-0.711 -5.861,-1.816 -12.107,-3.317 -6.247,-1.5 -10.623,-2.914 -13.127,-4.244 -3.247,-1.7 -5.667,-3.811 -7.26,-6.332 -1.593,-2.52 -2.389,-5.342 -2.389,-8.465 0,-3.433 0.974,-6.641 2.922,-9.625 1.948,-2.984 4.793,-5.249 8.535,-6.796 3.741,-1.546 7.901,-2.319 12.478,-2.319 5.04,0 9.486,0.812 13.336,2.435 3.85,1.623 6.811,4.012 8.883,7.167 2.071,3.154 3.185,6.726 3.34,10.715 l -8.628,0.65 c -0.464,-4.298 -2.034,-7.545 -4.708,-9.741 -2.675,-2.195 -6.626,-3.293 -11.852,-3.293 -5.443,0 -9.409,0.997 -11.898,2.992 -2.489,1.995 -3.734,4.4 -3.734,7.213 0,2.443 0.881,4.453 2.644,6.03 1.731,1.577 6.254,3.194 13.568,4.847 7.313,1.655 12.331,3.101 15.053,4.337 3.958,1.825 6.88,4.136 8.767,6.935 1.886,2.799 2.83,6.023 2.83,9.672 0,3.618 -1.037,7.028 -3.108,10.228 -2.072,3.201 -5.049,5.69 -8.93,7.468 -3.881,1.778 -8.25,2.667 -13.104,2.667 -6.154,0 -11.311,-0.897 -15.47,-2.691 -4.159,-1.793 -7.422,-4.492 -9.788,-8.094 -2.37,-3.604 -3.62,-7.678 -3.74,-12.224 z"
146 inkscape:connector-curvature="0" />
147 <path
148 id="path3016"
149 d="m -40.473,34 v -59.978 h -22.405 v -8.025 h 53.901 v 8.025 H -31.475 V 34 h -8.998 z"
150 inkscape:connector-curvature="0" />
151 <path
152 id="path3018"
153 d="m -4.198,0.88 c 0,-11.287 3.03,-20.124 9.092,-26.51 6.061,-6.385 13.885,-9.579 23.472,-9.579 6.277,0 11.937,1.5 16.978,4.5 5.04,3 8.883,7.182 11.527,12.547 2.644,5.366 3.966,11.45 3.966,18.253 0,6.896 -1.392,13.066 -4.175,18.508 -2.783,5.443 -6.726,9.564 -11.829,12.362 -5.103,2.799 -10.607,4.198 -16.514,4.198 -6.401,0 -12.123,-1.546 -17.163,-4.639 C 6.115,27.428 2.296,23.207 -0.302,17.856 -2.899,12.508 -4.198,6.848 -4.198,0.88 z m 9.277,0.139 c 0,8.195 2.203,14.651 6.61,19.366 4.407,4.716 9.934,7.074 16.583,7.074 6.772,0 12.346,-2.381 16.722,-7.143 4.376,-4.762 6.564,-11.519 6.564,-20.271 0,-5.535 -0.936,-10.367 -2.807,-14.496 -1.871,-4.129 -4.608,-7.329 -8.21,-9.602 -3.603,-2.273 -7.646,-3.41 -12.13,-3.41 -6.371,0 -11.852,2.188 -16.444,6.564 -4.592,4.377 -6.888,11.682 -6.888,21.918 z"
154 inkscape:connector-curvature="0" />
155 <path
156 id="path3020"
157 d="m 72.433,34 v -68.003 h 25.652 c 4.515,0 7.962,0.217 10.344,0.65 3.34,0.557 6.138,1.616 8.396,3.178 2.257,1.562 4.074,3.75 5.45,6.564 1.376,2.815 2.064,5.907 2.064,9.277 0,5.783 -1.84,10.677 -5.52,14.681 -3.681,4.005 -10.329,6.007 -19.946,6.007 H 81.431 V 34 h -8.999 z m 8.999,-35.672 h 17.581 c 5.813,0 9.942,-1.082 12.385,-3.247 2.442,-2.164 3.665,-5.21 3.665,-9.138 0,-2.845 -0.719,-5.28 -2.157,-7.306 -1.438,-2.025 -3.333,-3.363 -5.682,-4.012 -1.516,-0.401 -4.314,-0.603 -8.396,-0.603 H 81.436 v 24.306 z"
158 inkscape:connector-curvature="0" />
159 </g>
160 </g>
161 </g>
162 </g>
163</svg>
interface/src/Application.cpp+0−2
@@ -2745,8 +2745,6 @@ void Application::keyPressEvent(QKeyEvent* event) { · 2744 unmodified lines
2745 case Qt::Key_S:2745 case Qt::Key_S:
2746 if (isShifted && isMeta && !isOption) {2746 if (isShifted && isMeta && !isOption) {
2747 Menu::getInstance()->triggerOption(MenuOption::SuppressShortTimings);2747 Menu::getInstance()->triggerOption(MenuOption::SuppressShortTimings);
2748 } else if (isOption && !isShifted && !isMeta) {
2749 Menu::getInstance()->triggerOption(MenuOption::ScriptEditor);
2750 } else if (!isOption && !isShifted && isMeta) {2748 } else if (!isOption && !isShifted && isMeta) {
2751 takeSnapshot(true);2749 takeSnapshot(true);
2752 }2750 }
interface/src/Menu.cpp+0−5
@@ -117,11 +117,6 @@ Menu::Menu() { · 116 unmodified lines
117 scriptEngines.data(), SLOT(reloadAllScripts()),117 scriptEngines.data(), SLOT(reloadAllScripts()),
118 QAction::NoRole, UNSPECIFIED_POSITION, "Advanced");118 QAction::NoRole, UNSPECIFIED_POSITION, "Advanced");
119 119
120 // Edit > Scripts Editor... [advanced]
121 addActionToQMenuAndActionHash(editMenu, MenuOption::ScriptEditor, Qt::ALT | Qt::Key_S,
122 dialogsManager.data(), SLOT(showScriptEditor()),
123 QAction::NoRole, UNSPECIFIED_POSITION, "Advanced");
124
125 // Edit > Console... [advanced]120 // Edit > Console... [advanced]
126 addActionToQMenuAndActionHash(editMenu, MenuOption::Console, Qt::CTRL | Qt::ALT | Qt::Key_J,121 addActionToQMenuAndActionHash(editMenu, MenuOption::Console, Qt::CTRL | Qt::ALT | Qt::Key_J,
127 DependencyManager::get<StandAloneJSConsole>().data(),122 DependencyManager::get<StandAloneJSConsole>().data(),
interface/src/Menu.h+0−1
@@ -166,7 +166,6 @@ namespace MenuOption { · 165 unmodified lines
166 const QString RunningScripts = "Running Scripts...";166 const QString RunningScripts = "Running Scripts...";
167 const QString RunClientScriptTests = "Run Client Script Tests";167 const QString RunClientScriptTests = "Run Client Script Tests";
168 const QString RunTimingTests = "Run Timing Tests";168 const QString RunTimingTests = "Run Timing Tests";
169 const QString ScriptEditor = "Script Editor...";
170 const QString ScriptedMotorControl = "Enable Scripted Motor Control";169 const QString ScriptedMotorControl = "Enable Scripted Motor Control";
171 const QString SendWrongDSConnectVersion = "Send wrong DS connect version";170 const QString SendWrongDSConnectVersion = "Send wrong DS connect version";
172 const QString SendWrongProtocolVersion = "Send wrong protocol version";171 const QString SendWrongProtocolVersion = "Send wrong protocol version";
interface/src/ui/DialogsManager.cpp+0−7
@@ -26,7 +26,6 @@ · 25 unmodified lines
26#include "LoginDialog.h"26#include "LoginDialog.h"
27#include "OctreeStatsDialog.h"27#include "OctreeStatsDialog.h"
28#include "PreferencesDialog.h"28#include "PreferencesDialog.h"
29#include "ScriptEditorWindow.h"
30#include "UpdateDialog.h"29#include "UpdateDialog.h"
31 30
32template<typename T>31template<typename T>
@@ -120,12 +119,6 @@ void DialogsManager::hmdToolsClosed() { · 87 unmodified lines
120 }119 }
121}120}
122 121
123void DialogsManager::showScriptEditor() {
124 maybeCreateDialog(_scriptEditor);
125 _scriptEditor->show();
126 _scriptEditor->raise();
127}
128
129void DialogsManager::showTestingResults() {122void DialogsManager::showTestingResults() {
130 if (!_testingDialog) {123 if (!_testingDialog) {
131 _testingDialog = new TestingDialog(qApp->getWindow());124 _testingDialog = new TestingDialog(qApp->getWindow());
interface/src/ui/DialogsManager.h+0−2
@@ -50,7 +50,6 @@ public slots: · 49 unmodified lines
50 void octreeStatsDetails();50 void octreeStatsDetails();
51 void lodTools();51 void lodTools();
52 void hmdTools(bool showTools);52 void hmdTools(bool showTools);
53 void showScriptEditor();
54 void showDomainConnectionDialog();53 void showDomainConnectionDialog();
55 void showTestingResults();54 void showTestingResults();
56 55
@@ -78,7 +77,6 @@ private: · 21 unmodified lines
78 QPointer<HMDToolsDialog> _hmdToolsDialog;77 QPointer<HMDToolsDialog> _hmdToolsDialog;
79 QPointer<LodToolsDialog> _lodToolsDialog;78 QPointer<LodToolsDialog> _lodToolsDialog;
80 QPointer<OctreeStatsDialog> _octreeStatsDialog;79 QPointer<OctreeStatsDialog> _octreeStatsDialog;
81 QPointer<ScriptEditorWindow> _scriptEditor;
82 QPointer<TestingDialog> _testingDialog;80 QPointer<TestingDialog> _testingDialog;
83 QPointer<DomainConnectionDialog> _domainConnectionDialog;81 QPointer<DomainConnectionDialog> _domainConnectionDialog;
84};82};
interface/src/ui/ScriptEditBox.cpp+0−111
@@ -1,111 +0,0 @@
1//
2// ScriptEditBox.cpp
3// interface/src/ui
4//
5// Created by Thijs Wenker on 4/30/14.
6// Copyright 2014 High Fidelity, Inc.
7//
8// Distributed under the Apache License, Version 2.0.
9// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10//
11
12#include "ScriptEditBox.h"
13
14#include <QPainter>
15#include <QTextBlock>
16
17#include "ScriptLineNumberArea.h"
18
19ScriptEditBox::ScriptEditBox(QWidget* parent) :
20 QPlainTextEdit(parent)
21{
22 _scriptLineNumberArea = new ScriptLineNumberArea(this);
23
24 connect(this, &ScriptEditBox::blockCountChanged, this, &ScriptEditBox::updateLineNumberAreaWidth);
25 connect(this, &ScriptEditBox::updateRequest, this, &ScriptEditBox::updateLineNumberArea);
26 connect(this, &ScriptEditBox::cursorPositionChanged, this, &ScriptEditBox::highlightCurrentLine);
27
28 updateLineNumberAreaWidth(0);
29 highlightCurrentLine();
30}
31
32int ScriptEditBox::lineNumberAreaWidth() {
33 int digits = 1;
34 const int SPACER_PIXELS = 3;
35 const int BASE_TEN = 10;
36 int max = qMax(1, blockCount());
37 while (max >= BASE_TEN) {
38 max /= BASE_TEN;
39 digits++;
40 }
41 return SPACER_PIXELS + fontMetrics().width(QLatin1Char('H')) * digits;
42}
43
44void ScriptEditBox::updateLineNumberAreaWidth(int blockCount) {
45 setViewportMargins(lineNumberAreaWidth(), 0, 0, 0);
46}
47
48void ScriptEditBox::updateLineNumberArea(const QRect& rect, int deltaY) {
49 if (deltaY) {
50 _scriptLineNumberArea->scroll(0, deltaY);
51 } else {
52 _scriptLineNumberArea->update(0, rect.y(), _scriptLineNumberArea->width(), rect.height());
53 }
54
55 if (rect.contains(viewport()->rect())) {
56 updateLineNumberAreaWidth(0);
57 }
58}
59
60void ScriptEditBox::resizeEvent(QResizeEvent* event) {
61 QPlainTextEdit::resizeEvent(event);
62
63 QRect localContentsRect = contentsRect();
64 _scriptLineNumberArea->setGeometry(QRect(localContentsRect.left(), localContentsRect.top(), lineNumberAreaWidth(),
65 localContentsRect.height()));
66}
67
68void ScriptEditBox::highlightCurrentLine() {
69 QList<QTextEdit::ExtraSelection> extraSelections;
70
71 if (!isReadOnly()) {
72 QTextEdit::ExtraSelection selection;
73
74 QColor lineColor = QColor(Qt::gray).lighter();
75
76 selection.format.setBackground(lineColor);
77 selection.format.setProperty(QTextFormat::FullWidthSelection, true);
78 selection.cursor = textCursor();
79 selection.cursor.clearSelection();
80 extraSelections.append(selection);
81 }
82
83 setExtraSelections(extraSelections);
84}
85
86void ScriptEditBox::lineNumberAreaPaintEvent(QPaintEvent* event)
87{
88 QPainter painter(_scriptLineNumberArea);
89 painter.fillRect(event->rect(), Qt::lightGray);
90 QTextBlock block = firstVisibleBlock();
91 int blockNumber = block.blockNumber();
92 int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top();
93 int bottom = top + (int) blockBoundingRect(block).height();
94
95 while (block.isValid() && top <= event->rect().bottom()) {
96 if (block.isVisible() && bottom >= event->rect().top()) {
97 QFont font = painter.font();
98 font.setBold(this->textCursor().blockNumber() == block.blockNumber());
99 painter.setFont(font);
100 QString number = QString::number(blockNumber + 1);
101 painter.setPen(Qt::black);
102 painter.drawText(0, top, _scriptLineNumberArea->width(), fontMetrics().height(),
103 Qt::AlignRight, number);
104 }
105
106 block = block.next();
107 top = bottom;
108 bottom = top + (int) blockBoundingRect(block).height();
109 blockNumber++;
110 }
111}
interface/src/ui/ScriptEditBox.h+0−38
@@ -1,38 +0,0 @@
1//
2// ScriptEditBox.h
3// interface/src/ui
4//
5// Created by Thijs Wenker on 4/30/14.
6// Copyright 2014 High Fidelity, Inc.
7//
8// Distributed under the Apache License, Version 2.0.
9// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10//
11
12#ifndef hifi_ScriptEditBox_h
13#define hifi_ScriptEditBox_h
14
15#include <QPlainTextEdit>
16
17class ScriptEditBox : public QPlainTextEdit {
18 Q_OBJECT
19
20public:
21 ScriptEditBox(QWidget* parent = NULL);
22
23 void lineNumberAreaPaintEvent(QPaintEvent* event);
24 int lineNumberAreaWidth();
25
26protected:
27 void resizeEvent(QResizeEvent* event) override;
28
29private slots:
30 void updateLineNumberAreaWidth(int blockCount);
31 void highlightCurrentLine();
32 void updateLineNumberArea(const QRect& rect, int deltaY);
33
34private:
35 QWidget* _scriptLineNumberArea;
36};
37
38#endif // hifi_ScriptEditBox_h
interface/src/ui/ScriptEditorWidget.cpp+0−256
@@ -1,256 +0,0 @@
1//
2// ScriptEditorWidget.cpp
3// interface/src/ui
4//
5// Created by Thijs Wenker on 4/14/14.
6// Copyright 2014 High Fidelity, Inc.
7//
8// Distributed under the Apache License, Version 2.0.
9// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10//
11
12#include "ui_scriptEditorWidget.h"
13#include "ScriptEditorWidget.h"
14#include "ScriptEditorWindow.h"
15
16#include <QGridLayout>
17#include <QFileDialog>
18#include <QFrame>
19#include <QLayoutItem>
20#include <QMainWindow>
21#include <QMessageBox>
22#include <QPalette>
23#include <QScrollBar>
24#include <QSizePolicy>
25#include <QTimer>
26#include <QWidget>
27
28#include <ScriptEngines.h>
29#include <NetworkAccessManager.h>
30#include <OffscreenUi.h>
31
32#include "Application.h"
33#include "ScriptHighlighting.h"
34
35ScriptEditorWidget::ScriptEditorWidget() :
36 _scriptEditorWidgetUI(new Ui::ScriptEditorWidget),
37 _scriptEngine(NULL),
38 _isRestarting(false),
39 _isReloading(false)
40{
41 setAttribute(Qt::WA_DeleteOnClose);
42
43 _scriptEditorWidgetUI->setupUi(this);
44
45 connect(_scriptEditorWidgetUI->scriptEdit->document(), &QTextDocument::modificationChanged, this,
46 &ScriptEditorWidget::scriptModified);
47 connect(_scriptEditorWidgetUI->scriptEdit->document(), &QTextDocument::contentsChanged, this,
48 &ScriptEditorWidget::onScriptModified);
49
50 // remove the title bar (see the Qt docs on setTitleBarWidget)
51 setTitleBarWidget(new QWidget());
52 QFontMetrics fm(_scriptEditorWidgetUI->scriptEdit->font());
53 _scriptEditorWidgetUI->scriptEdit->setTabStopWidth(fm.width('0') * 4);
54 // We create a new ScriptHighligting QObject and provide it with a parent so this is NOT a memory leak.
55 new ScriptHighlighting(_scriptEditorWidgetUI->scriptEdit->document());
56 QTimer::singleShot(0, _scriptEditorWidgetUI->scriptEdit, SLOT(setFocus()));
57
58 _console = new JSConsole(this);
59 _console->setFixedHeight(CONSOLE_HEIGHT);
60 _scriptEditorWidgetUI->verticalLayout->addWidget(_console);
61 connect(_scriptEditorWidgetUI->clearButton, &QPushButton::clicked, _console, &JSConsole::clear);
62}
63
64ScriptEditorWidget::~ScriptEditorWidget() {
65 delete _scriptEditorWidgetUI;
66 delete _console;
67}
68
69void ScriptEditorWidget::onScriptModified() {
70 if(_scriptEditorWidgetUI->onTheFlyCheckBox->isChecked() && isModified() && isRunning() && !_isReloading) {
71 _isRestarting = true;
72 setRunning(false);
73 // Script is restarted once current script instance finishes.
74 }
75}
76
77void ScriptEditorWidget::onScriptFinished(const QString& scriptPath) {
78 _scriptEngine = NULL;
79 _console->setScriptEngine(NULL);
80 if (_isRestarting) {
81 _isRestarting = false;
82 setRunning(true);
83 }
84}
85
86bool ScriptEditorWidget::isModified() {
87 return _scriptEditorWidgetUI->scriptEdit->document()->isModified();
88}
89
90bool ScriptEditorWidget::isRunning() {
91 return (_scriptEngine != NULL) ? _scriptEngine->isRunning() : false;
92}
93
94bool ScriptEditorWidget::setRunning(bool run) {
95 if (run && isModified() && !save()) {
96 return false;
97 }
98
99 if (_scriptEngine != NULL) {
100 disconnect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);
101 disconnect(_scriptEngine, &ScriptEngine::update, this, &ScriptEditorWidget::onScriptModified);
102 disconnect(_scriptEngine, &ScriptEngine::finished, this, &ScriptEditorWidget::onScriptFinished);
103 }
104
105 auto scriptEngines = DependencyManager::get<ScriptEngines>();
106 if (run) {
107 const QString& scriptURLString = QUrl(_currentScript).toString();
108 // Reload script so that an out of date copy is not retrieved from the cache
109 _scriptEngine = scriptEngines->loadScript(scriptURLString, true, true, false, true);
110 connect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);
111 connect(_scriptEngine, &ScriptEngine::update, this, &ScriptEditorWidget::onScriptModified);
112 connect(_scriptEngine, &ScriptEngine::finished, this, &ScriptEditorWidget::onScriptFinished);
113 } else {
114 connect(_scriptEngine, &ScriptEngine::finished, this, &ScriptEditorWidget::onScriptFinished);
115 const QString& scriptURLString = QUrl(_currentScript).toString();
116 scriptEngines->stopScript(scriptURLString);
117 _scriptEngine = NULL;
118 }
119 _console->setScriptEngine(_scriptEngine);
120 return true;
121}
122
123bool ScriptEditorWidget::saveFile(const QString &scriptPath) {
124 QFile file(scriptPath);
125 if (!file.open(QFile::WriteOnly | QFile::Text)) {
126 OffscreenUi::warning(this, tr("Interface"), tr("Cannot write script %1:\n%2.").arg(scriptPath)
127 .arg(file.errorString()));
128 return false;
129 }
130
131 QTextStream out(&file);
132 out << _scriptEditorWidgetUI->scriptEdit->toPlainText();
133 file.close();
134
135 setScriptFile(scriptPath);
136 return true;
137}
138
139void ScriptEditorWidget::loadFile(const QString& scriptPath) {
140 QUrl url(scriptPath);
141
142 // if the scheme length is one or lower, maybe they typed in a file, let's try
143 const int WINDOWS_DRIVE_LETTER_SIZE = 1;
144 if (url.scheme().size() <= WINDOWS_DRIVE_LETTER_SIZE) {
145 QFile file(scriptPath);
146 if (!file.open(QFile::ReadOnly | QFile::Text)) {
147 OffscreenUi::warning(this, tr("Interface"), tr("Cannot read script %1:\n%2.").arg(scriptPath)
148 .arg(file.errorString()));
149 return;
150 }
151 QTextStream in(&file);
152 _scriptEditorWidgetUI->scriptEdit->setPlainText(in.readAll());
153 file.close();
154 setScriptFile(scriptPath);
155
156 if (_scriptEngine != NULL) {
157 disconnect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);
158 disconnect(_scriptEngine, &ScriptEngine::update, this, &ScriptEditorWidget::onScriptModified);
159 disconnect(_scriptEngine, &ScriptEngine::finished, this, &ScriptEditorWidget::onScriptFinished);
160 }
161 } else {
162 QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
163 QNetworkRequest networkRequest = QNetworkRequest(url);
164 networkRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
165 networkRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT);
166 QNetworkReply* reply = networkAccessManager.get(networkRequest);
167 qDebug() << "Downloading included script at" << scriptPath;
168 QEventLoop loop;
169 QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
170 loop.exec();
171 _scriptEditorWidgetUI->scriptEdit->setPlainText(reply->readAll());
172 delete reply;
173
174 if (!saveAs()) {
175 static_cast<ScriptEditorWindow*>(this->parent()->parent()->parent())->terminateCurrentTab();
176 }
177 }
178 const QString& scriptURLString = QUrl(_currentScript).toString();
179 _scriptEngine = DependencyManager::get<ScriptEngines>()->getScriptEngine(scriptURLString);
180 if (_scriptEngine != NULL) {
181 connect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);
182 connect(_scriptEngine, &ScriptEngine::update, this, &ScriptEditorWidget::onScriptModified);
183 connect(_scriptEngine, &ScriptEngine::finished, this, &ScriptEditorWidget::onScriptFinished);
184 }
185 _console->setScriptEngine(_scriptEngine);
186}
187
188bool ScriptEditorWidget::save() {
189 return _currentScript.isEmpty() ? saveAs() : saveFile(_currentScript);
190}
191
192bool ScriptEditorWidget::saveAs() {
193 auto scriptEngines = DependencyManager::get<ScriptEngines>();
194 QString fileName = QFileDialog::getSaveFileName(this, tr("Save script"),
195 qApp->getPreviousScriptLocation(),
196 tr("JavaScript Files (*.js)"));
197 if (!fileName.isEmpty()) {
198 qApp->setPreviousScriptLocation(fileName);
199 return saveFile(fileName);
200 } else {
201 return false;
202 }
203}
204
205void ScriptEditorWidget::setScriptFile(const QString& scriptPath) {
206 _currentScript = scriptPath;
207 _currentScriptModified = QFileInfo(_currentScript).lastModified();
208 _scriptEditorWidgetUI->scriptEdit->document()->setModified(false);
209 setWindowModified(false);
210
211 emit scriptnameChanged();
212}
213
214bool ScriptEditorWidget::questionSave() {
215 if (_scriptEditorWidgetUI->scriptEdit->document()->isModified()) {
216 QMessageBox::StandardButton button = OffscreenUi::warning(this, tr("Interface"),
217 tr("The script has been modified.\nDo you want to save your changes?"), QMessageBox::Save | QMessageBox::Discard |
218 QMessageBox::Cancel, QMessageBox::Save);
219 return button == QMessageBox::Save ? save() : (button == QMessageBox::Discard);
220 }
221 return true;
222}
223
224void ScriptEditorWidget::onWindowActivated() {
225 if (!_isReloading) {
226 _isReloading = true;
227
228 QDateTime fileStamp = QFileInfo(_currentScript).lastModified();
229 if (fileStamp > _currentScriptModified) {
230 bool doReload = false;
231 auto window = static_cast<ScriptEditorWindow*>(this->parent()->parent()->parent());
232 window->inModalDialog = true;
233 if (window->autoReloadScripts()
234 || OffscreenUi::question(this, tr("Reload Script"),
235 tr("The following file has been modified outside of the Interface editor:") + "\n" + _currentScript + "\n"
236 + (isModified()
237 ? tr("Do you want to reload it and lose the changes you've made in the Interface editor?")
238 : tr("Do you want to reload it?")),
239 QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
240 doReload = true;
241 }
242 window->inModalDialog = false;
243 if (doReload) {
244 loadFile(_currentScript);
245 if (_scriptEditorWidgetUI->onTheFlyCheckBox->isChecked() && isRunning()) {
246 _isRestarting = true;
247 setRunning(false);
248 // Script is restarted once current script instance finishes.
249 }
250 } else {
251 _currentScriptModified = fileStamp; // Asked and answered. Don't ask again until the external file is changed again.
252 }
253 }
254 _isReloading = false;
255 }
256}
interface/src/ui/ScriptEditorWidget.h+0−64
@@ -1,64 +0,0 @@
1//
2// ScriptEditorWidget.h
3// interface/src/ui
4//
5// Created by Thijs Wenker on 4/14/14.
6// Copyright 2014 High Fidelity, Inc.
7//
8// Distributed under the Apache License, Version 2.0.
9// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10//
11
12#ifndef hifi_ScriptEditorWidget_h
13#define hifi_ScriptEditorWidget_h
14
15#include <QDockWidget>
16
17#include "JSConsole.h"
18#include "ScriptEngine.h"
19
20namespace Ui {
21 class ScriptEditorWidget;
22}
23
24class ScriptEditorWidget : public QDockWidget {
25 Q_OBJECT
26
27public:
28 ScriptEditorWidget();
29 ~ScriptEditorWidget();
30
31 bool isModified();
32 bool isRunning();
33 bool setRunning(bool run);
34 bool saveFile(const QString& scriptPath);
35 void loadFile(const QString& scriptPath);
36 void setScriptFile(const QString& scriptPath);
37 bool save();
38 bool saveAs();
39 bool questionSave();
40 const QString getScriptName() const { return _currentScript; };
41
42signals:
43 void runningStateChanged();
44 void scriptnameChanged();
45 void scriptModified();
46
47public slots:
48 void onWindowActivated();
49
50private slots:
51 void onScriptModified();
52 void onScriptFinished(const QString& scriptName);
53
54private:
55 JSConsole* _console;
56 Ui::ScriptEditorWidget* _scriptEditorWidgetUI;
57 ScriptEngine* _scriptEngine;
58 QString _currentScript;
59 QDateTime _currentScriptModified;
60 bool _isRestarting;
61 bool _isReloading;
62};
63
64#endif // hifi_ScriptEditorWidget_h
interface/src/ui/ScriptEditorWindow.cpp+0−259
@@ -1,259 +0,0 @@
1//
2// ScriptEditorWindow.cpp
3// interface/src/ui
4//
5// Created by Thijs Wenker on 4/14/14.
6// Copyright 2014 High Fidelity, Inc.
7//
8// Distributed under the Apache License, Version 2.0.
9// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10//
11
12#include <QFileDialog>
13
14#include "ui_scriptEditorWindow.h"
15#include "ScriptEditorWindow.h"
16#include "ScriptEditorWidget.h"
17
18#include <QGridLayout>
19#include <QtCore/QSignalMapper>
20#include <QFrame>
21#include <QLayoutItem>
22#include <QMainWindow>
23#include <QMessageBox>
24#include <QPalette>
25#include <QScrollBar>
26#include <QShortcut>
27#include <QSizePolicy>
28#include <QTimer>
29#include <QWidget>
30
31#include <ScriptEngines.h>
32#include "Application.h"
33#include "PathUtils.h"
34
35ScriptEditorWindow::ScriptEditorWindow(QWidget* parent) :
36 QWidget(parent),
37 _ScriptEditorWindowUI(new Ui::ScriptEditorWindow),
38 _loadMenu(new QMenu),
39 _saveMenu(new QMenu)
40{
41 setAttribute(Qt::WA_DeleteOnClose);
42
43 _ScriptEditorWindowUI->setupUi(this);
44
45 this->setWindowFlags(Qt::Tool);
46 addScriptEditorWidget("New script");
47 connect(_loadMenu, &QMenu::aboutToShow, this, &ScriptEditorWindow::loadMenuAboutToShow);
48 _ScriptEditorWindowUI->loadButton->setMenu(_loadMenu);
49
50 _saveMenu->addAction("Save as..", this, SLOT(saveScriptAsClicked()), Qt::CTRL | Qt::SHIFT | Qt::Key_S);
51
52 _ScriptEditorWindowUI->saveButton->setMenu(_saveMenu);
53
54 connect(new QShortcut(QKeySequence("Ctrl+N"), this), &QShortcut::activated, this, &ScriptEditorWindow::newScriptClicked);
55 connect(new QShortcut(QKeySequence("Ctrl+S"), this), &QShortcut::activated, this,&ScriptEditorWindow::saveScriptClicked);
56 connect(new QShortcut(QKeySequence("Ctrl+O"), this), &QShortcut::activated, this, &ScriptEditorWindow::loadScriptClicked);
57 connect(new QShortcut(QKeySequence("F5"), this), &QShortcut::activated, this, &ScriptEditorWindow::toggleRunScriptClicked);
58
59 _ScriptEditorWindowUI->loadButton->setIcon(QIcon(QPixmap(PathUtils::resourcesPath() + "icons/load-script.svg")));
60 _ScriptEditorWindowUI->newButton->setIcon(QIcon(QPixmap(PathUtils::resourcesPath() + "icons/new-script.svg")));
61 _ScriptEditorWindowUI->saveButton->setIcon(QIcon(QPixmap(PathUtils::resourcesPath() + "icons/save-script.svg")));
62 _ScriptEditorWindowUI->toggleRunButton->setIcon(QIcon(QPixmap(PathUtils::resourcesPath() + "icons/start-script.svg")));
63}
64
65ScriptEditorWindow::~ScriptEditorWindow() {
66 delete _ScriptEditorWindowUI;
67}
68
69void ScriptEditorWindow::setRunningState(bool run) {
70 if (_ScriptEditorWindowUI->tabWidget->currentIndex() != -1) {
71 static_cast<ScriptEditorWidget*>(_ScriptEditorWindowUI->tabWidget->currentWidget())->setRunning(run);
72 }
73 this->updateButtons();
74}
75
76void ScriptEditorWindow::updateButtons() {
77 bool isRunning = _ScriptEditorWindowUI->tabWidget->currentIndex() != -1 &&
78 static_cast<ScriptEditorWidget*>(_ScriptEditorWindowUI->tabWidget->currentWidget())->isRunning();
79 _ScriptEditorWindowUI->toggleRunButton->setEnabled(_ScriptEditorWindowUI->tabWidget->currentIndex() != -1);
80 _ScriptEditorWindowUI->toggleRunButton->setIcon(QIcon(QPixmap(PathUtils::resourcesPath() + ((isRunning ?
81 "icons/stop-script.svg" : "icons/start-script.svg")))));
82}
83
84void ScriptEditorWindow::loadScriptMenu(const QString& scriptName) {
85 addScriptEditorWidget("loading...")->loadFile(scriptName);
86 updateButtons();
87}
88
89void ScriptEditorWindow::loadScriptClicked() {
90 QString scriptName = QFileDialog::getOpenFileName(this, tr("Interface"),
91 qApp->getPreviousScriptLocation(),
92 tr("JavaScript Files (*.js)"));
93 if (!scriptName.isEmpty()) {
94 qApp->setPreviousScriptLocation(scriptName);
95 addScriptEditorWidget("loading...")->loadFile(scriptName);
96 updateButtons();
97 }
98}
99
100void ScriptEditorWindow::loadMenuAboutToShow() {
101 _loadMenu->clear();
102 QStringList runningScripts = DependencyManager::get<ScriptEngines>()->getRunningScripts();
103 if (runningScripts.count() > 0) {
104 QSignalMapper* signalMapper = new QSignalMapper(this);
105 foreach (const QString& runningScript, runningScripts) {
106 QAction* runningScriptAction = new QAction(runningScript, _loadMenu);
107 connect(runningScriptAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
108 signalMapper->setMapping(runningScriptAction, runningScript);
109 _loadMenu->addAction(runningScriptAction);
110 }
111 connect(signalMapper, SIGNAL(mapped(const QString &)), this, SLOT(loadScriptMenu(const QString&)));
112 } else {
113 QAction* naAction = new QAction("(no running scripts)", _loadMenu);
114 naAction->setDisabled(true);
115 _loadMenu->addAction(naAction);
116 }
117}
118
119void ScriptEditorWindow::newScriptClicked() {
120 addScriptEditorWidget(QString("New script"));
121}
122
123void ScriptEditorWindow::toggleRunScriptClicked() {
124 this->setRunningState(!(_ScriptEditorWindowUI->tabWidget->currentIndex() !=-1
125 && static_cast<ScriptEditorWidget*>(_ScriptEditorWindowUI->tabWidget->currentWidget())->isRunning()));
126}
127
128void ScriptEditorWindow::saveScriptClicked() {
129 if (_ScriptEditorWindowUI->tabWidget->currentIndex() != -1) {
130 ScriptEditorWidget* currentScriptWidget = static_cast<ScriptEditorWidget*>(_ScriptEditorWindowUI->tabWidget
131 ->currentWidget());
132 currentScriptWidget->save();
133 }
134}
135
136void ScriptEditorWindow::saveScriptAsClicked() {
137 if (_ScriptEditorWindowUI->tabWidget->currentIndex() != -1) {
138 ScriptEditorWidget* currentScriptWidget = static_cast<ScriptEditorWidget*>(_ScriptEditorWindowUI->tabWidget
139 ->currentWidget());
140 currentScriptWidget->saveAs();
141 }
142}
143
144ScriptEditorWidget* ScriptEditorWindow::addScriptEditorWidget(QString title) {
145 ScriptEditorWidget* newScriptEditorWidget = new ScriptEditorWidget();
146 connect(newScriptEditorWidget, &ScriptEditorWidget::scriptnameChanged, this, &ScriptEditorWindow::updateScriptNameOrStatus);
147 connect(newScriptEditorWidget, &ScriptEditorWidget::scriptModified, this, &ScriptEditorWindow::updateScriptNameOrStatus);
148 connect(newScriptEditorWidget, &ScriptEditorWidget::runningStateChanged, this, &ScriptEditorWindow::updateButtons);
149 connect(this, &ScriptEditorWindow::windowActivated, newScriptEditorWidget, &ScriptEditorWidget::onWindowActivated);
150 _ScriptEditorWindowUI->tabWidget->addTab(newScriptEditorWidget, title);
151 _ScriptEditorWindowUI->tabWidget->setCurrentWidget(newScriptEditorWidget);
152 newScriptEditorWidget->setUpdatesEnabled(true);
153 newScriptEditorWidget->adjustSize();
154 return newScriptEditorWidget;
155}
156
157void ScriptEditorWindow::tabSwitched(int tabIndex) {
158 this->updateButtons();
159 if (_ScriptEditorWindowUI->tabWidget->currentIndex() != -1) {
160 ScriptEditorWidget* currentScriptWidget = static_cast<ScriptEditorWidget*>(_ScriptEditorWindowUI->tabWidget
161 ->currentWidget());
162 QString modifiedStar = (currentScriptWidget->isModified() ? "*" : "");
163 if (currentScriptWidget->getScriptName().length() > 0) {
164 this->setWindowTitle("Script Editor [" + currentScriptWidget->getScriptName() + modifiedStar + "]");
165 } else {
166 this->setWindowTitle("Script Editor [New script" + modifiedStar + "]");
167 }
168 } else {
169 this->setWindowTitle("Script Editor");
170 }
171}
172
173void ScriptEditorWindow::tabCloseRequested(int tabIndex) {
174 if (ignoreCloseForModal(nullptr)) {
175 return;
176 }
177 ScriptEditorWidget* closingScriptWidget = static_cast<ScriptEditorWidget*>(_ScriptEditorWindowUI->tabWidget
178 ->widget(tabIndex));
179 if(closingScriptWidget->questionSave()) {
180 _ScriptEditorWindowUI->tabWidget->removeTab(tabIndex);
181 }
182}
183
184// If this operating system window causes a qml overlay modal dialog (which might not even be seen by the user), closing this window
185// will crash the code that was waiting on the dialog result. So that code whousl set inModalDialog to true while the question is up.
186// This code will not be necessary when switch out all operating system windows for qml overlays.
187bool ScriptEditorWindow::ignoreCloseForModal(QCloseEvent* event) {
188 if (!inModalDialog) {
189 return false;
190 }
191 // Deliberately not using OffscreenUi, so that the dialog is seen.
192 QMessageBox::information(this, tr("Interface"), tr("There is a modal dialog that must be answered before closing."),
193 QMessageBox::Discard, QMessageBox::Discard);
194 if (event) {
195 event->ignore(); // don't close
196 }
197 return true;
198}
199
200void ScriptEditorWindow::closeEvent(QCloseEvent *event) {
201 if (ignoreCloseForModal(event)) {
202 return;
203 }
204 bool unsaved_docs_warning = false;
205 for (int i = 0; i < _ScriptEditorWindowUI->tabWidget->count(); i++){
206 if(static_cast<ScriptEditorWidget*>(_ScriptEditorWindowUI->tabWidget->widget(i))->isModified()){
207 unsaved_docs_warning = true;
208 break;
209 }
210 }
211
212 if (!unsaved_docs_warning || QMessageBox::warning(this, tr("Interface"),
213 tr("There are some unsaved scripts, are you sure you want to close the editor? Changes will be lost!"),
214 QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Cancel) == QMessageBox::Discard) {
215 event->accept();
216 } else {
217 event->ignore();
218 }
219}
220
221void ScriptEditorWindow::updateScriptNameOrStatus() {
222 ScriptEditorWidget* source = static_cast<ScriptEditorWidget*>(QObject::sender());
223 QString modifiedStar = (source->isModified()? "*" : "");
224 if (source->getScriptName().length() > 0) {
225 for (int i = 0; i < _ScriptEditorWindowUI->tabWidget->count(); i++){
226 if (_ScriptEditorWindowUI->tabWidget->widget(i) == source) {
227 _ScriptEditorWindowUI->tabWidget->setTabText(i, modifiedStar + QFileInfo(source->getScriptName()).fileName());
228 _ScriptEditorWindowUI->tabWidget->setTabToolTip(i, source->getScriptName());
229 }
230 }
231 }
232
233 if (_ScriptEditorWindowUI->tabWidget->currentWidget() == source) {
234 if (source->getScriptName().length() > 0) {
235 this->setWindowTitle("Script Editor [" + source->getScriptName() + modifiedStar + "]");
236 } else {
237 this->setWindowTitle("Script Editor [New script" + modifiedStar + "]");
238 }
239 }
240}
241
242void ScriptEditorWindow::terminateCurrentTab() {
243 if (_ScriptEditorWindowUI->tabWidget->currentIndex() != -1) {
244 _ScriptEditorWindowUI->tabWidget->removeTab(_ScriptEditorWindowUI->tabWidget->currentIndex());
245 this->raise();
246 }
247}
248
249bool ScriptEditorWindow::autoReloadScripts() {
250 return _ScriptEditorWindowUI->autoReloadCheckBox->isChecked();
251}
252
253bool ScriptEditorWindow::event(QEvent* event) {
254 if (event->type() == QEvent::WindowActivate) {
255 emit windowActivated();
256 }
257 return QWidget::event(event);
258}
259
interface/src/ui/ScriptEditorWindow.h+0−64
@@ -1,64 +0,0 @@
1//
2// ScriptEditorWindow.h
3// interface/src/ui
4//
5// Created by Thijs Wenker on 4/14/14.
6// Copyright 2014 High Fidelity, Inc.
7//
8// Distributed under the Apache License, Version 2.0.
9// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10//
11
12#ifndef hifi_ScriptEditorWindow_h
13#define hifi_ScriptEditorWindow_h
14
15#include "ScriptEditorWidget.h"
16
17namespace Ui {
18 class ScriptEditorWindow;
19}
20
21class ScriptEditorWindow : public QWidget {
22 Q_OBJECT
23
24public:
25 ScriptEditorWindow(QWidget* parent = nullptr);
26 ~ScriptEditorWindow();
27
28 void terminateCurrentTab();
29 bool autoReloadScripts();
30
31 bool inModalDialog { false };
32 bool ignoreCloseForModal(QCloseEvent* event);
33
34signals:
35 void windowActivated();
36
37protected:
38 void closeEvent(QCloseEvent* event) override;
39 virtual bool event(QEvent* event) override;
40
41private:
42 Ui::ScriptEditorWindow* _ScriptEditorWindowUI;
43 QMenu* _loadMenu;
44 QMenu* _saveMenu;
45
46 ScriptEditorWidget* addScriptEditorWidget(QString title);
47 void setRunningState(bool run);
48 void setScriptName(const QString& scriptName);
49
50private slots:
51 void loadScriptMenu(const QString& scriptName);
52 void loadScriptClicked();
53 void newScriptClicked();
54 void toggleRunScriptClicked();
55 void saveScriptClicked();
56 void saveScriptAsClicked();
57 void loadMenuAboutToShow();
58 void tabSwitched(int tabIndex);
59 void tabCloseRequested(int tabIndex);
60 void updateScriptNameOrStatus();
61 void updateButtons();
62};
63
64#endif // hifi_ScriptEditorWindow_h
interface/src/ui/ScriptLineNumberArea.cpp+0−28
@@ -1,28 +0,0 @@
1//
2// ScriptLineNumberArea.cpp
3// interface/src/ui
4//
5// Created by Thijs Wenker on 4/30/14.
6// Copyright 2014 High Fidelity, Inc.
7//
8// Distributed under the Apache License, Version 2.0.
9// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10//
11
12#include "ScriptLineNumberArea.h"
13
14#include "ScriptEditBox.h"
15
16ScriptLineNumberArea::ScriptLineNumberArea(ScriptEditBox* scriptEditBox) :
17 QWidget(scriptEditBox)
18{
19 _scriptEditBox = scriptEditBox;
20}
21
22QSize ScriptLineNumberArea::sizeHint() const {
23 return QSize(_scriptEditBox->lineNumberAreaWidth(), 0);
24}
25
26void ScriptLineNumberArea::paintEvent(QPaintEvent* event) {
27 _scriptEditBox->lineNumberAreaPaintEvent(event);
28}
interface/src/ui/ScriptLineNumberArea.h+0−32
@@ -1,32 +0,0 @@
1//
2// ScriptLineNumberArea.h
3// interface/src/ui
4//
5// Created by Thijs Wenker on 4/30/14.
6// Copyright 2014 High Fidelity, Inc.
7//
8// Distributed under the Apache License, Version 2.0.
9// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10//
11
12#ifndef hifi_ScriptLineNumberArea_h
13#define hifi_ScriptLineNumberArea_h
14
15#include <QWidget>
16
17class ScriptEditBox;
18
19class ScriptLineNumberArea : public QWidget {
20
21public:
22 ScriptLineNumberArea(ScriptEditBox* scriptEditBox);
23 QSize sizeHint() const override;
24
25protected:
26 void paintEvent(QPaintEvent* event) override;
27
28private:
29 ScriptEditBox* _scriptEditBox;
30};
31
32#endif // hifi_ScriptLineNumberArea_h
interface/src/ui/ScriptsTableWidget.cpp+0−49
@@ -1,49 +0,0 @@
1//
2// ScriptsTableWidget.cpp
3// interface
4//
5// Created by Mohammed Nafees on 04/03/2014.
6// Copyright (c) 2014 High Fidelity, Inc. All rights reserved.
7//
8// Distributed under the Apache License, Version 2.0.
9// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10//
11
12#include <QDebug>
13#include <QHeaderView>
14#include <QKeyEvent>
15#include <QPainter>
16
17#include "ScriptsTableWidget.h"
18
19ScriptsTableWidget::ScriptsTableWidget(QWidget* parent) :
20 QTableWidget(parent) {
21 verticalHeader()->setVisible(false);
22 horizontalHeader()->setVisible(false);
23 setShowGrid(false);
24 setSelectionMode(QAbstractItemView::NoSelection);
25 setEditTriggers(QAbstractItemView::NoEditTriggers);
26 setStyleSheet("QTableWidget { border: none; background: transparent; color: #333333; } QToolTip { color: #000000; background: #f9f6e4; padding: 2px; }");
27 setToolTipDuration(200);
28 setWordWrap(true);
29 setGeometry(0, 0, parent->width(), parent->height());
30}
31
32void ScriptsTableWidget::paintEvent(QPaintEvent* event) {
33 QPainter painter(viewport());
34 painter.setPen(QColor::fromRgb(225, 225, 225)); // #e1e1e1
35
36 int y = 0;
37 for (int i = 0; i < rowCount(); i++) {
38 painter.drawLine(5, rowHeight(i) + y, width(), rowHeight(i) + y);
39 y += rowHeight(i);
40 }
41 painter.end();
42
43 QTableWidget::paintEvent(event);
44}
45
46void ScriptsTableWidget::keyPressEvent(QKeyEvent* event) {
47 // Ignore keys so they will propagate correctly
48 event->ignore();
49}
interface/src/ui/ScriptsTableWidget.h+0−28
@@ -1,28 +0,0 @@
1//
2// ScriptsTableWidget.h
3// interface
4//
5// Created by Mohammed Nafees on 04/03/2014.
6// Copyright (c) 2014 High Fidelity, Inc. All rights reserved.
7//
8// Distributed under the Apache License, Version 2.0.
9// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10//
11
12#ifndef hifi__ScriptsTableWidget_h
13#define hifi__ScriptsTableWidget_h
14
15#include <QDebug>
16#include <QTableWidget>
17
18class ScriptsTableWidget : public QTableWidget {
19 Q_OBJECT
20public:
21 explicit ScriptsTableWidget(QWidget* parent);
22
23protected:
24 virtual void paintEvent(QPaintEvent* event) override;
25 virtual void keyPressEvent(QKeyEvent* event) override;
26};
27
28#endif // hifi__ScriptsTableWidget_h
interface/ui/scriptEditorWidget.ui+0−142
@@ -1,142 +0,0 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
3 <class>ScriptEditorWidget</class>
4 <widget class="QDockWidget" name="ScriptEditorWidget">
5 <property name="geometry">
6 <rect>
7 <x>0</x>
8 <y>0</y>
9 <width>691</width>
10 <height>549</height>
11 </rect>
12 </property>
13 <property name="sizePolicy">
14 <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
15 <horstretch>0</horstretch>
16 <verstretch>0</verstretch>
17 </sizepolicy>
18 </property>
19 <property name="minimumSize">
20 <size>
21 <width>690</width>
22 <height>328</height>
23 </size>
24 </property>
25 <property name="styleSheet">
26 <string notr="true">font-family: Helvetica, Arial, sans-serif;</string>
27 </property>
28 <property name="features">
29 <set>QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable</set>
30 </property>
31 <property name="allowedAreas">
32 <set>Qt::NoDockWidgetArea</set>
33 </property>
34 <property name="windowTitle">
35 <string>Edit Script</string>
36 </property>
37 <widget class="QWidget" name="dockWidgetContents">
38 <layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,1">
39 <property name="spacing">
40 <number>0</number>
41 </property>
42 <property name="leftMargin">
43 <number>0</number>
44 </property>
45 <property name="topMargin">
46 <number>0</number>
47 </property>
48 <property name="rightMargin">
49 <number>0</number>
50 </property>
51 <property name="bottomMargin">
52 <number>0</number>
53 </property>
54 <item>
55 <widget class="ScriptEditBox" name="scriptEdit">
56 <property name="font">
57 <font>
58 <family>Courier</family>
59 <pointsize>-1</pointsize>
60 <weight>50</weight>
61 <italic>false</italic>
62 <bold>false</bold>
63 </font>
64 </property>
65 <property name="styleSheet">
66 <string notr="true">font: 16px &quot;Courier&quot;;</string>
67 </property>
68 </widget>
69 </item>
70 <item>
71 <layout class="QHBoxLayout" name="horizontalLayout">
72 <property name="spacing">
73 <number>0</number>
74 </property>
75 <property name="leftMargin">
76 <number>0</number>
77 </property>
78 <property name="topMargin">
79 <number>0</number>
80 </property>
81 <item>
82 <widget class="QLabel" name="label">
83 <property name="sizePolicy">
84 <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
85 <horstretch>0</horstretch>
86 <verstretch>0</verstretch>
87 </sizepolicy>
88 </property>
89 <property name="styleSheet">
90 <string notr="true">font: 13px &quot;Helvetica&quot;,&quot;Arial&quot;,&quot;sans-serif&quot;;</string>
91 </property>
92 <property name="text">
93 <string>Debug Log:</string>
94 </property>
95 </widget>
96 </item>
97 <item>
98 <widget class="QCheckBox" name="onTheFlyCheckBox">
99 <property name="font">
100 <font>
101 <family>Helvetica,Arial,sans-serif</family>
102 <pointsize>-1</pointsize>
103 <weight>50</weight>
104 <italic>false</italic>
105 <bold>false</bold>
106 </font>
107 </property>
108 <property name="styleSheet">
109 <string notr="true">font: 13px &quot;Helvetica&quot;,&quot;Arial&quot;,&quot;sans-serif&quot;;</string>
110 </property>
111 <property name="text">
112 <string>Run on the fly (Careful: Any valid change made to the code will run immediately) </string>
113 </property>
114 </widget>
115 </item>
116 <item>
117 <widget class="QPushButton" name="clearButton">
118 <property name="text">
119 <string>Clear</string>
120 </property>
121 <property name="iconSize">
122 <size>
123 <width>16</width>
124 <height>16</height>
125 </size>
126 </property>
127 </widget>
128 </item>
129 </layout>
130 </item>
131 </layout>
132 </widget>
133 </widget>
134 <customwidgets>
135 <customwidget>
136 <class>ScriptEditBox</class>
137 <extends>QTextEdit</extends>
138 <header>ui/ScriptEditBox.h</header>
139 </customwidget>
140 </customwidgets>
141 <resources/>
142</ui>
interface/ui/scriptEditorWindow.ui+0−324
@@ -1,324 +0,0 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
3 <class>ScriptEditorWindow</class>
4 <widget class="QWidget" name="ScriptEditorWindow">
5 <property name="windowModality">
6 <enum>Qt::NonModal</enum>
7 </property>
8 <property name="geometry">
9 <rect>
10 <x>0</x>
11 <y>0</y>
12 <width>780</width>
13 <height>717</height>
14 </rect>
15 </property>
16 <property name="minimumSize">
17 <size>
18 <width>400</width>
19 <height>250</height>
20 </size>
21 </property>
22 <property name="windowTitle">
23 <string>Script Editor</string>
24 </property>
25 <property name="styleSheet">
26 <string notr="true">font-family: Helvetica, Arial, sans-serif;</string>
27 </property>
28 <layout class="QVBoxLayout" name="verticalLayout">
29 <property name="spacing">
30 <number>0</number>
31 </property>
32 <property name="leftMargin">
33 <number>0</number>
34 </property>
35 <property name="topMargin">
36 <number>0</number>
37 </property>
38 <property name="rightMargin">
39 <number>0</number>
40 </property>
41 <property name="bottomMargin">
42 <number>0</number>
43 </property>
44 <item>
45 <layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0,0,0,0,0">
46 <property name="spacing">
47 <number>3</number>
48 </property>
49 <property name="sizeConstraint">
50 <enum>QLayout::SetNoConstraint</enum>
51 </property>
52 <property name="leftMargin">
53 <number>0</number>
54 </property>
55 <property name="topMargin">
56 <number>0</number>
57 </property>
58 <item>
59 <widget class="QToolButton" name="newButton">
60 <property name="toolTip">
61 <string>New Script (Ctrl+N)</string>
62 </property>
63 <property name="text">
64 <string>New</string>
65 </property>
66 <property name="iconSize">
67 <size>
68 <width>32</width>
69 <height>32</height>
70 </size>
71 </property>
72 </widget>
73 </item>
74 <item>
75 <widget class="QToolButton" name="loadButton">
76 <property name="minimumSize">
77 <size>
78 <width>30</width>
79 <height>0</height>
80 </size>
81 </property>
82 <property name="baseSize">
83 <size>
84 <width>25</width>
85 <height>0</height>
86 </size>
87 </property>
88 <property name="toolTip">
89 <string>Load Script (Ctrl+O)</string>
90 </property>
91 <property name="text">
92 <string>Load</string>
93 </property>
94 <property name="iconSize">
95 <size>
96 <width>32</width>
97 <height>32</height>
98 </size>
99 </property>
100 <property name="checkable">
101 <bool>false</bool>
102 </property>
103 <property name="popupMode">
104 <enum>QToolButton::MenuButtonPopup</enum>
105 </property>
106 <property name="toolButtonStyle">
107 <enum>Qt::ToolButtonIconOnly</enum>
108 </property>
109 </widget>
110 </item>
111 <item>
112 <widget class="QToolButton" name="saveButton">
113 <property name="minimumSize">
114 <size>
115 <width>30</width>
116 <height>0</height>
117 </size>
118 </property>
119 <property name="baseSize">
120 <size>
121 <width>32</width>
122 <height>0</height>
123 </size>
124 </property>
125 <property name="focusPolicy">
126 <enum>Qt::NoFocus</enum>
127 </property>
128 <property name="contextMenuPolicy">
129 <enum>Qt::NoContextMenu</enum>
130 </property>
131 <property name="toolTip">
132 <string>Save Script (Ctrl+S)</string>
133 </property>
134 <property name="text">
135 <string>Save</string>
136 </property>
137 <property name="iconSize">
138 <size>
139 <width>32</width>
140 <height>32</height>
141 </size>
142 </property>
143 <property name="autoRepeatDelay">
144 <number>316</number>
145 </property>
146 <property name="popupMode">
147 <enum>QToolButton::MenuButtonPopup</enum>
148 </property>
149 </widget>
150 </item>
151 <item>
152 <widget class="QToolButton" name="toggleRunButton">
153 <property name="toolTip">
154 <string>Toggle Run Script (F5)</string>
155 </property>
156 <property name="text">
157 <string>Run/Stop</string>
158 </property>
159 <property name="iconSize">
160 <size>
161 <width>32</width>
162 <height>32</height>
163 </size>
164 </property>
165 </widget>
166 </item>
167 <item>
168 <spacer name="horizontalSpacer">
169 <property name="orientation">
170 <enum>Qt::Horizontal</enum>
171 </property>
172 <property name="sizeHint" stdset="0">
173 <size>
174 <width>40</width>
175 <height>20</height>
176 </size>
177 </property>
178 </spacer>
179 </item>
180 <item>
181 <widget class="QCheckBox" name="autoReloadCheckBox">
182 <property name="styleSheet">
183 <string notr="true">font: 13px &quot;Helvetica&quot;,&quot;Arial&quot;,&quot;sans-serif&quot;;</string>
184 </property>
185 <property name="text">
186 <string>Automatically reload externally changed files</string>
187 </property>
188 </widget>
189 </item>
190 </layout>
191 </item>
192 <item>
193 <widget class="QTabWidget" name="tabWidget">
194 <property name="enabled">
195 <bool>true</bool>
196 </property>
197 <property name="minimumSize">
198 <size>
199 <width>250</width>
200 <height>80</height>
201 </size>
202 </property>
203 <property name="tabPosition">
204 <enum>QTabWidget::West</enum>
205 </property>
206 <property name="tabShape">
207 <enum>QTabWidget::Triangular</enum>
208 </property>
209 <property name="currentIndex">
210 <number>-1</number>
211 </property>
212 <property name="elideMode">
213 <enum>Qt::ElideNone</enum>
214 </property>
215 <property name="tabsClosable">
216 <bool>true</bool>
217 </property>
218 <property name="movable">
219 <bool>true</bool>
220 </property>
221 </widget>
222 </item>
223 </layout>
224 </widget>
225 <resources/>
226 <connections>
227 <connection>
228 <sender>saveButton</sender>
229 <signal>clicked()</signal>
230 <receiver>ScriptEditorWindow</receiver>
231 <slot>saveScriptClicked()</slot>
232 <hints>
233 <hint type="sourcelabel">
234 <x>236</x>
235 <y>10</y>
236 </hint>
237 <hint type="destinationlabel">
238 <x>199</x>
239 <y>264</y>
240 </hint>
241 </hints>
242 </connection>
243 <connection>
244 <sender>toggleRunButton</sender>
245 <signal>clicked()</signal>
246 <receiver>ScriptEditorWindow</receiver>
247 <slot>toggleRunScriptClicked()</slot>
248 <hints>
249 <hint type="sourcelabel">
250 <x>330</x>
251 <y>10</y>
252 </hint>
253 <hint type="destinationlabel">
254 <x>199</x>
255 <y>264</y>
256 </hint>
257 </hints>
258 </connection>
259 <connection>
260 <sender>newButton</sender>
261 <signal>clicked()</signal>
262 <receiver>ScriptEditorWindow</receiver>
263 <slot>newScriptClicked()</slot>
264 <hints>
265 <hint type="sourcelabel">
266 <x>58</x>
267 <y>10</y>
268 </hint>
269 <hint type="destinationlabel">
270 <x>199</x>
271 <y>264</y>
272 </hint>
273 </hints>
274 </connection>
275 <connection>
276 <sender>loadButton</sender>
277 <signal>clicked()</signal>
278 <receiver>ScriptEditorWindow</receiver>
279 <slot>loadScriptClicked()</slot>
280 <hints>
281 <hint type="sourcelabel">
282 <x>85</x>
283 <y>10</y>
284 </hint>
285 <hint type="destinationlabel">
286 <x>199</x>
287 <y>264</y>
288 </hint>
289 </hints>
290 </connection>
291 <connection>
292 <sender>tabWidget</sender>
293 <signal>currentChanged(int)</signal>
294 <receiver>ScriptEditorWindow</receiver>
295 <slot>tabSwitched(int)</slot>
296 <hints>
297 <hint type="sourcelabel">
298 <x>352</x>
299 <y>360</y>
300 </hint>
301 <hint type="destinationlabel">
302 <x>352</x>
303 <y>340</y>
304 </hint>
305 </hints>
306 </connection>
307 <connection>
308 <sender>tabWidget</sender>
309 <signal>tabCloseRequested(int)</signal>
310 <receiver>ScriptEditorWindow</receiver>
311 <slot>tabCloseRequested(int)</slot>
312 <hints>
313 <hint type="sourcelabel">
314 <x>352</x>
315 <y>360</y>
316 </hint>
317 <hint type="destinationlabel">
318 <x>352</x>
319 <y>340</y>
320 </hint>
321 </hints>
322 </connection>
323 </connections>
324</ui>