1 /*
2 **********************************************************************************
3 **
4 ** This file was created for the LibreCAD project (librecad.org), a 2D CAD program.
5 **
6 ** Copyright (C) 2015 ravas (github.com/r-a-v-a-s)
7 **
8 ** This program is free software; you can redistribute it and/or
9 ** modify it under the terms of the GNU General Public License
10 ** as published by the Free Software Foundation; either version 2
11 ** of the License, or (at your option) any later version.
12 **
13 ** This program is distributed in the hope that it will be useful,
14 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 ** GNU General Public License for more details.
17 **
18 ** You should have received a copy of the GNU General Public License
19 ** along with this program; if not, write to the Free Software
20 ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 **
22 **********************************************************************************
23 */
24
25 // This file was first published at: github.com/r-a-v-a-s/LibreCAD.git
26
27 // lc_actionfactory is a rewrite of qg_actionfactory; some copied content remains.
28 // qg_actionfactory contributors:
29 // Andrew Mustun, Claude Sylvain, R. van Twisk, Dongxu Li, Rallaz, Armin Stebich, ravas, korhadris
30
31 #include "lc_actionfactory.h"
32 #include "lc_actiongroupmanager.h"
33 #include <QAction>
34 #include <QActionGroup>
35
LC_ActionFactory(QObject * parent,QObject * a_handler)36 LC_ActionFactory::LC_ActionFactory(QObject* parent, QObject* a_handler)
37 : QObject(parent)
38 , using_theme(false)
39 , main_window(parent)
40 , action_handler(a_handler)
41 {
42 }
43
fillActionContainer(QMap<QString,QAction * > & a_map,LC_ActionGroupManager * agm)44 void LC_ActionFactory::fillActionContainer(QMap<QString, QAction*>& a_map, LC_ActionGroupManager* agm)
45 {
46 QAction* action;
47
48 // <[~ Zoom ~]>
49
50 action = new QAction(tr("Zoom &Panning"), agm->other);
51 action->setIcon(QIcon(":/icons/zoom_pan.svg"));
52 connect(action, SIGNAL(triggered()),
53 action_handler, SLOT(slotZoomPan()));
54 action->setObjectName("ZoomPan");
55 a_map["ZoomPan"] = action;
56
57 // <[~ Select ~]>
58
59 action = new QAction(tr("Select Entity"), agm->select);
60 action->setIcon(QIcon(":/icons/select_entity.svg"));
61 connect(action, SIGNAL(triggered()),
62 action_handler, SLOT(slotSelectSingle()));
63 action->setObjectName("SelectSingle");
64 a_map["SelectSingle"] = action;
65
66 action = new QAction(tr("Select Window"), agm->select);
67 action->setIcon(QIcon(":/icons/select_window.svg"));
68 connect(action, SIGNAL(triggered()),
69 action_handler, SLOT(slotSelectWindow()));
70 action->setObjectName("SelectWindow");
71 a_map["SelectWindow"] = action;
72
73 action = new QAction(tr("Deselect Window"), agm->select);
74 action->setIcon(QIcon(":/icons/deselect_window.svg"));
75 connect(action, SIGNAL(triggered()),
76 action_handler, SLOT(slotDeselectWindow()));
77 action->setObjectName("DeselectWindow");
78 a_map["DeselectWindow"] = action;
79
80 action = new QAction(tr("(De-)Select &Contour"), agm->select);
81 action->setIcon(QIcon(":/icons/deselect_contour.svg"));
82 connect(action, SIGNAL(triggered()),
83 action_handler, SLOT(slotSelectContour()));
84 action->setObjectName("SelectContour");
85 a_map["SelectContour"] = action;
86
87 action = new QAction(tr("Select Intersected Entities"), agm->select);
88 action->setIcon(QIcon(":/icons/select_intersected_entities.svg"));
89 connect(action, SIGNAL(triggered()),
90 action_handler, SLOT(slotSelectIntersected()));
91 action->setObjectName("SelectIntersected");
92 a_map["SelectIntersected"] = action;
93
94 action = new QAction(tr("Deselect Intersected Entities"), agm->select);
95 action->setIcon(QIcon(":/icons/deselect_intersected_entities.svg"));
96 connect(action, SIGNAL(triggered()),
97 action_handler, SLOT(slotDeselectIntersected()));
98 action->setObjectName("DeselectIntersected");
99 a_map["DeselectIntersected"] = action;
100
101 action = new QAction(tr("(De-)Select Layer"), agm->select);
102 action->setIcon(QIcon(":/icons/deselect_layer.svg"));
103 connect(action, SIGNAL(triggered()),
104 action_handler, SLOT(slotSelectLayer()));
105 action->setObjectName("SelectLayer");
106 a_map["SelectLayer"] = action;
107
108 // <[~ Draw ~]>
109
110 action = new QAction(tr("&Points"), agm->other);
111 action->setIcon(QIcon(":/icons/points.svg"));
112
113 connect(action, SIGNAL(triggered()),
114 action_handler, SLOT(slotDrawPoint()));
115 action->setObjectName("DrawPoint");
116 a_map["DrawPoint"] = action;
117
118 // <[~ Line ~]>
119
120 action = new QAction(tr("&2 Points"), agm->line);
121 action->setIcon(QIcon(":/icons/line_2p.svg"));
122 connect(action, SIGNAL(triggered()),
123 action_handler, SLOT(slotDrawLine()));
124 action->setObjectName("DrawLine");
125 a_map["DrawLine"] = action;
126
127 action = new QAction(tr("&Angle"), agm->line);
128 action->setIcon(QIcon(":/icons/line_angle.svg"));
129 connect(action, SIGNAL(triggered()),
130 action_handler, SLOT(slotDrawLineAngle()));
131 action->setObjectName("DrawLineAngle");
132 a_map["DrawLineAngle"] = action;
133
134 action = new QAction(tr("&Horizontal"), agm->line);
135 action->setIcon(QIcon(":/icons/line_horizontal.svg"));
136 connect(action, SIGNAL(triggered()),
137 action_handler, SLOT(slotDrawLineHorizontal()));
138 action->setObjectName("DrawLineHorizontal");
139 a_map["DrawLineHorizontal"] = action;
140
141 action = new QAction(tr("Vertical"), agm->line);
142 action->setIcon(QIcon(":/icons/line_vertical.svg"));
143 connect(action, SIGNAL(triggered()),
144 action_handler, SLOT(slotDrawLineVertical()));
145 action->setObjectName("DrawLineVertical");
146 a_map["DrawLineVertical"] = action;
147
148 // action = new QAction(tr("Vertical"), agm->line);
149 // connect(action, SIGNAL(triggered()),
150 // action_handler, SLOT(slotDrawLineHorVert()));
151 // action->setObjectName("DrawLineHorVert");
152 // a_map["DrawLineHorVert"] = action;
153
154 action = new QAction(tr("&Freehand Line"), agm->line);
155 action->setIcon(QIcon(":/icons/line_freehand.svg"));
156 connect(action, SIGNAL(triggered()),
157 action_handler, SLOT(slotDrawLineFree()));
158 action->setObjectName("DrawLineFree");
159 a_map["DrawLineFree"] = action;
160
161 action = new QAction(tr("&Parallel"), agm->line);
162 action->setIcon(QIcon(":/icons/line_parallel.svg"));
163 connect(action, SIGNAL(triggered()),
164 action_handler, SLOT(slotDrawLineParallel()));
165 action->setObjectName("DrawLineParallel");
166 a_map["DrawLineParallel"] = action;
167
168 action = new QAction(tr("Parallel through point"), agm->line);
169 action->setIcon(QIcon(":/icons/line_parallel_p.svg"));
170 connect(action, SIGNAL(triggered()),
171 action_handler, SLOT(slotDrawLineParallelThrough()));
172 action->setObjectName("DrawLineParallelThrough");
173 a_map["DrawLineParallelThrough"] = action;
174
175 action = new QAction(tr("Rectangle"), agm->line);
176 action->setIcon(QIcon(":/icons/line_rectangle.svg"));
177 connect(action, SIGNAL(triggered()),
178 action_handler, SLOT(slotDrawLineRectangle()));
179 action->setObjectName("DrawLineRectangle");
180 a_map["DrawLineRectangle"] = action;
181
182 action = new QAction(tr("Bisector"), agm->line);
183 action->setIcon(QIcon(":/icons/line_bisector.svg"));
184 connect(action, SIGNAL(triggered()),
185 action_handler, SLOT(slotDrawLineBisector()));
186 action->setObjectName("DrawLineBisector");
187 a_map["DrawLineBisector"] = action;
188
189 action = new QAction(tr("Tangent (P,C)"), agm->line);
190 action->setIcon(QIcon(":/icons/line_tangent_pc.svg"));
191 connect(action, SIGNAL(triggered()),
192 action_handler, SLOT(slotDrawLineTangent1()));
193 action->setObjectName("DrawLineTangent1");
194 a_map["DrawLineTangent1"] = action;
195
196 action = new QAction(tr("Tangent (C,C)"), agm->line);
197 action->setIcon(QIcon(":/icons/line_tangent_cc.svg"));
198 connect(action, SIGNAL(triggered()),
199 action_handler, SLOT(slotDrawLineTangent2()));
200 action->setObjectName("DrawLineTangent2");
201 a_map["DrawLineTangent2"] = action;
202
203 action = new QAction(tr("Tangent &Orthogonal"), agm->line);
204 action->setIcon(QIcon(":/icons/line_tangent_perpendicular.svg"));
205 connect(action, SIGNAL(triggered()),
206 action_handler, SLOT(slotDrawLineOrthTan()));
207 action->setObjectName("DrawLineOrthTan");
208 a_map["DrawLineOrthTan"] = action;
209
210 action = new QAction(tr("Orthogonal"), agm->line);
211 action->setIcon(QIcon(":/icons/line_perpendicular.svg"));
212 connect(action, SIGNAL(triggered()),
213 action_handler, SLOT(slotDrawLineOrthogonal()));
214 action->setObjectName("DrawLineOrthogonal");
215 a_map["DrawLineOrthogonal"] = action;
216
217 action = new QAction(tr("Relative angle"), agm->line);
218 action->setIcon(QIcon(":/icons/line_relative_angle.svg"));
219 connect(action, SIGNAL(triggered()),
220 action_handler, SLOT(slotDrawLineRelAngle()));
221 action->setObjectName("DrawLineRelAngle");
222 a_map["DrawLineRelAngle"] = action;
223
224 action = new QAction(tr("Pol&ygon (Cen,Cor)"), agm->line);
225 action->setIcon(QIcon(":/icons/line_polygon_cen_cor.svg"));
226 connect(action, SIGNAL(triggered()),
227 action_handler, SLOT(slotDrawLinePolygon()));
228 action->setObjectName("DrawLinePolygonCenCor");
229 a_map["DrawLinePolygonCenCor"] = action;
230
231 action = new QAction(tr("Pol&ygon (Cen,Tan)"), agm->line); //20161223 added by txmy
232 action->setIcon(QIcon(":/icons/line_polygon_cen_tan.svg"));
233 connect(action, SIGNAL(triggered()),
234 action_handler, SLOT(slotDrawLinePolygon3()));
235 action->setObjectName("DrawLinePolygonCenTan");
236 a_map["DrawLinePolygonCenTan"] = action;
237
238 action = new QAction(tr("Polygo&n (Cor,Cor)"), agm->line);
239 action->setIcon(QIcon(":/icons/line_polygon_cor_cor.svg"));
240 connect(action, SIGNAL(triggered()),
241 action_handler, SLOT(slotDrawLinePolygon2()));
242 action->setObjectName("DrawLinePolygonCorCor");
243 a_map["DrawLinePolygonCorCor"] = action;
244
245 // <[~ Circle ~]>
246
247 action = new QAction(tr("Center, &Point"), agm->circle);
248 action->setIcon(QIcon(":/icons/circle_center_point.svg"));
249 connect(action, SIGNAL(triggered()), action_handler, SLOT(slotDrawCircle()));
250 action->setObjectName("DrawCircle");
251 a_map["DrawCircle"] = action;
252
253 action = new QAction(tr("Center, &Radius"), agm->circle);
254 action->setIcon(QIcon(":/icons/circle_center_radius.svg"));
255 connect(action, SIGNAL(triggered()),
256 action_handler, SLOT(slotDrawCircleCR()));
257 action->setObjectName("DrawCircleCR");
258 a_map["DrawCircleCR"] = action;
259
260 action = new QAction(tr("2 Points"), agm->circle);
261 action->setIcon(QIcon(":/icons/circle_2_points.svg"));
262 connect(action, SIGNAL(triggered()),
263 action_handler, SLOT(slotDrawCircle2P()));
264 action->setObjectName("DrawCircle2P");
265 a_map["DrawCircle2P"] = action;
266
267 action = new QAction(tr("2 Points, Radius"), agm->circle);
268 action->setIcon(QIcon(":/icons/circle_2_points_radius.svg"));
269 connect(action, SIGNAL(triggered()),
270 action_handler, SLOT(slotDrawCircle2PR()));
271 action->setObjectName("DrawCircle2PR");
272 a_map["DrawCircle2PR"] = action;
273
274 action = new QAction(tr("3 Points"), agm->circle);
275 action->setIcon(QIcon(":/icons/circle_3_points.svg"));
276 connect(action, SIGNAL(triggered()),
277 action_handler, SLOT(slotDrawCircle3P()));
278 action->setObjectName("DrawCircle3P");
279 a_map["DrawCircle3P"] = action;
280
281 action = new QAction(tr("&Concentric"), agm->circle);
282 action->setIcon(QIcon(":/icons/circle_concentric.svg"));
283 action->setCheckable(true);
284 connect(action, SIGNAL(triggered()),
285 action_handler, SLOT(slotDrawCircleParallel()));
286 action->setObjectName("DrawCircleParallel");
287 a_map["DrawCircleParallel"] = action;
288
289 action = new QAction(tr("Circle &Inscribed"), agm->circle);
290 action->setIcon(QIcon(":/icons/circle_inscribed.svg"));
291 connect(action, SIGNAL(triggered()),
292 action_handler, SLOT(slotDrawCircleInscribe()));
293 action->setObjectName("DrawCircleInscribe");
294 a_map["DrawCircleInscribe"] = action;
295
296 action = new QAction(tr("Tangential 2 Circles, Radius", "circle tangential with two circles, and given radius"), agm->circle);
297 action->setIcon(QIcon(":/icons/circle_tangential_2circles_radius.svg"));
298 connect(action, SIGNAL(triggered()),
299 action_handler, SLOT(slotDrawCircleTan2()));
300 action->setObjectName("DrawCircleTan2");
301 a_map["DrawCircleTan2"] = action;
302
303 action = new QAction(tr("Tangential 2 Circles, 1 Point"), agm->circle);
304 action->setIcon(QIcon(":/icons/circle_tangential_2circles_point.svg"));
305 connect(action, SIGNAL(triggered()),
306 action_handler, SLOT(slotDrawCircleTan2_1P()));
307 action->setObjectName("DrawCircleTan2_1P");
308 a_map["DrawCircleTan2_1P"] = action;
309
310 action = new QAction(tr("Tangential &3 Circles"), agm->circle);
311 action->setIcon(QIcon(":/icons/circle_tangential_3entities.svg"));
312 connect(action, SIGNAL(triggered()),
313 action_handler, SLOT(slotDrawCircleTan3()));
314 action->setObjectName("DrawCircleTan3");
315 a_map["DrawCircleTan3"] = action;
316
317 action = new QAction(tr("Tangential, 2 P&oints"), agm->circle);
318 action->setIcon(QIcon(":/icons/circle_tangential_2points.svg"));
319 connect(action, SIGNAL(triggered()),
320 action_handler, SLOT(slotDrawCircleTan1_2P()));
321 action->setObjectName("DrawCircleTan1_2P");
322 a_map["DrawCircleTan1_2P"] = action;
323
324 // <[~ Arc ~]>
325
326 action = new QAction(tr("&Center, Point, Angles"), agm->curve);
327 action->setIcon(QIcon(":/icons/arc_center_point_angle.svg"));
328 action->setCheckable(true);
329 connect(action, SIGNAL(triggered()),
330 action_handler, SLOT(slotDrawArc()));
331 action->setObjectName("DrawArc");
332 a_map["DrawArc"] = action;
333
334 action = new QAction(tr("&3 Points"), agm->curve);
335 action->setIcon(QIcon(":/icons/arc_3_points.svg"));
336 action->setCheckable(true);
337 connect(action, SIGNAL(triggered()),
338 action_handler, SLOT(slotDrawArc3P()));
339 action->setObjectName("DrawArc3P");
340 a_map["DrawArc3P"] = action;
341
342 action = new QAction(tr("&Concentric"), agm->curve);
343 action->setIcon(QIcon(":/icons/arc_concentric.svg"));
344 action->setCheckable(true);
345 connect(action, SIGNAL(triggered()),
346 action_handler, SLOT(slotDrawArcParallel()));
347 action->setObjectName("DrawArcParallel");
348 a_map["DrawArcParallel"] = action;
349
350 action = new QAction(tr("Arc &Tangential"), agm->curve);
351 action->setIcon(QIcon(":/icons/arc_continuation.svg"));
352 action->setCheckable(true);
353 connect(action, SIGNAL(triggered()),
354 action_handler, SLOT(slotDrawArcTangential()));
355 action->setObjectName("DrawArcTangential");
356 a_map["DrawArcTangential"] = action;
357
358 // <[~ Ellipse ~]>
359
360 action = new QAction(tr("&Ellipse (Axis)"), agm->ellipse);
361 action->setIcon(QIcon(":/icons/ellipse_axis.svg"));
362 connect(action, SIGNAL(triggered()),
363 action_handler, SLOT(slotDrawEllipseAxis()));
364 action->setObjectName("DrawEllipseAxis");
365 a_map["DrawEllipseAxis"] = action;
366
367 action = new QAction(tr("Ellipse &Arc (Axis)"), agm->ellipse);
368 action->setIcon(QIcon(":/icons/ellipse_arc_axis.svg"));
369 connect(action, SIGNAL(triggered()),
370 action_handler, SLOT(slotDrawEllipseArcAxis()));
371 action->setObjectName("DrawEllipseArcAxis");
372 a_map["DrawEllipseArcAxis"] = action;
373
374 action = new QAction(tr("Ellipse &Foci Point"), agm->ellipse);
375 action->setIcon(QIcon(":/icons/ellipse_foci_point.svg"));
376 connect(action, SIGNAL(triggered()),
377 action_handler, SLOT(slotDrawEllipseFociPoint()));
378 action->setObjectName("DrawEllipseFociPoint");
379 a_map["DrawEllipseFociPoint"] = action;
380
381 action = new QAction(tr("Ellipse &4 Point"), agm->ellipse);
382 action->setIcon(QIcon(":/icons/ellipse_4_points.svg"));
383 connect(action, SIGNAL(triggered()),
384 action_handler, SLOT(slotDrawEllipse4Points()));
385 action->setObjectName("DrawEllipse4Points");
386 a_map["DrawEllipse4Points"] = action;
387
388 action = new QAction(tr("Ellipse Center and &3 Points"), agm->ellipse);
389 action->setIcon(QIcon(":/icons/ellipse_center_3_points.svg"));
390 connect(action, SIGNAL(triggered()),
391 action_handler, SLOT(slotDrawEllipseCenter3Points()));
392 action->setObjectName("DrawEllipseCenter3Points");
393 a_map["DrawEllipseCenter3Points"] = action;
394
395 action = new QAction(tr("Ellipse &Inscribed"), agm->ellipse);
396 action->setIcon(QIcon(":/icons/ellipse_inscribed.svg"));
397 connect(action, SIGNAL(triggered()),
398 action_handler, SLOT(slotDrawEllipseInscribe()));
399 action->setObjectName("DrawEllipseInscribe");
400 a_map["DrawEllipseInscribe"] = action;
401
402 // <[~ Spline ~]>
403
404 action = new QAction(tr("&Spline"), agm->curve);
405 action->setIcon(QIcon(":/icons/spline.svg"));
406 connect(action, SIGNAL(triggered()),
407 action_handler, SLOT(slotDrawSpline()));
408 action->setObjectName("DrawSpline");
409 a_map["DrawSpline"] = action;
410
411 action = new QAction(tr("&Spline through points"), agm->curve);
412 action->setIcon(QIcon(":/icons/spline_points.svg"));
413 connect(action, SIGNAL(triggered()),
414 action_handler, SLOT(slotDrawSplinePoints()));
415 action->setObjectName("DrawSplinePoints");
416 a_map["DrawSplinePoints"] = action;
417
418 // <[~ Polyline ~]>
419
420 action = new QAction(tr("&Polyline"), agm->polyline);
421 action->setIcon(QIcon(":/icons/polylines_polyline.svg"));
422 connect(action, SIGNAL(triggered()),
423 action_handler, SLOT(slotDrawPolyline()));
424 action->setObjectName("DrawPolyline");
425 a_map["DrawPolyline"] = action;
426
427 action = new QAction(tr("&Add node"), agm->polyline);
428 action->setShortcut(QKeySequence());
429 action->setIcon(QIcon(":/icons/insert_node.svg"));
430 connect(action, SIGNAL(triggered()),
431 action_handler, SLOT(slotPolylineAdd()));
432 action->setObjectName("PolylineAdd");
433 a_map["PolylineAdd"] = action;
434
435 action = new QAction(tr("A&ppend node"), agm->polyline);
436 action->setShortcut(QKeySequence());
437 action->setIcon(QIcon(":/icons/append_node.svg"));
438 connect(action, SIGNAL(triggered()),
439 action_handler, SLOT(slotPolylineAppend()));
440 action->setObjectName("PolylineAppend");
441 a_map["PolylineAppend"] = action;
442
443 action = new QAction(tr("&Delete node"), agm->polyline);
444 action->setShortcut(QKeySequence());
445 action->setIcon(QIcon(":/icons/delete_node.svg"));
446 connect(action, SIGNAL(triggered()),
447 action_handler, SLOT(slotPolylineDel()));
448 action->setObjectName("PolylineDel");
449 a_map["PolylineDel"] = action;
450
451 action = new QAction(tr("Delete &between two nodes"), agm->polyline);
452 action->setShortcut(QKeySequence());
453 action->setIcon(QIcon(":/icons/delete_between_nodes.svg"));
454 connect(action, SIGNAL(triggered()),
455 action_handler, SLOT(slotPolylineDelBetween()));
456 action->setObjectName("PolylineDelBetween");
457 a_map["PolylineDelBetween"] = action;
458
459 action = new QAction(tr("&Trim segments"), agm->polyline);
460 action->setShortcut(QKeySequence());
461 action->setIcon(QIcon(":/icons/trim.svg"));
462 connect(action, SIGNAL(triggered()),
463 action_handler, SLOT(slotPolylineTrim()));
464 action->setObjectName("PolylineTrim");
465 a_map["PolylineTrim"] = action;
466
467 action = new QAction(tr("Create &Equidistant Polylines"), agm->polyline);
468 action->setIcon(QIcon(":/icons/create_equidistant_polyline.svg"));
469 connect(action, SIGNAL(triggered()),
470 action_handler, SLOT(slotPolylineEquidistant()));
471 action->setObjectName("PolylineEquidistant");
472 a_map["PolylineEquidistant"] = action;
473
474 action = new QAction(tr("Create Polyline from Existing &Segments"), agm->polyline);
475 action->setIcon(QIcon(":/icons/create_polyline_from_existing_segments.svg"));
476 connect(action, SIGNAL(triggered()),
477 action_handler, SLOT(slotPolylineSegment()));
478 action->setObjectName("PolylineSegment");
479 a_map["PolylineSegment"] = action;
480
481 // <[~ Misc ~]>
482
483 action = new QAction(QIcon(":/icons/text.svg"), tr("&MText"), agm->other);
484 connect(action, SIGNAL(triggered()),
485 action_handler, SLOT(slotDrawMText()));
486 action->setObjectName("DrawMText");
487 a_map["DrawMText"] = action;
488
489 action = new QAction(tr("&Text"), agm->other);
490 action->setIcon(QIcon(":/icons/text.svg"));
491 connect(action, SIGNAL(triggered()),
492 action_handler, SLOT(slotDrawText()));
493 action->setObjectName("DrawText");
494 a_map["DrawText"] = action;
495
496 action = new QAction(tr("&Hatch"), agm->other);
497 action->setIcon(QIcon(":/icons/hatch.svg"));
498 connect(action, SIGNAL(triggered()),
499 action_handler, SLOT(slotDrawHatch()));
500 action->setObjectName("DrawHatch");
501 a_map["DrawHatch"] = action;
502
503 action = new QAction(tr("Insert &Image"), agm->other);
504 action->setIcon(QIcon(":/icons/camera.svg"));
505 connect(action, SIGNAL(triggered()),
506 action_handler, SLOT(slotDrawImage()));
507 action->setObjectName("DrawImage");
508 a_map["DrawImage"] = action;
509
510 // <[~ Dimension ~]>
511
512 action = new QAction(tr("&Aligned"), agm->dimension);
513 action->setIcon(QIcon(":/icons/dim_aligned.svg"));
514 connect(action, SIGNAL(triggered()),
515 action_handler, SLOT(slotDimAligned()));
516 action->setObjectName("DimAligned");
517 a_map["DimAligned"] = action;
518
519 action = new QAction(tr("&Linear"), agm->dimension);
520 action->setIcon(QIcon(":/icons/dim_linear.svg"));
521 connect(action, SIGNAL(triggered()),
522 action_handler, SLOT(slotDimLinear()));
523 action->setObjectName("DimLinear");
524 a_map["DimLinear"] = action;
525
526 action = new QAction(tr("&Horizontal"), agm->dimension);
527 action->setIcon(QIcon(":/icons/dim_horizontal.svg"));
528 connect(action, SIGNAL(triggered()),
529 action_handler, SLOT(slotDimLinearHor()));
530 action->setObjectName("DimLinearHor");
531 a_map["DimLinearHor"] = action;
532
533 action = new QAction(tr("&Vertical"), agm->dimension);
534 action->setIcon(QIcon(":/icons/dim_vertical.svg"));
535 connect(action, SIGNAL(triggered()),
536 action_handler, SLOT(slotDimLinearVer()));
537 action->setObjectName("DimLinearVer");
538 a_map["DimLinearVer"] = action;
539
540 action = new QAction(tr("&Radial"), agm->dimension);
541 action->setIcon(QIcon(":/icons/dim_radial.svg"));
542 connect(action, SIGNAL(triggered()),
543 action_handler, SLOT(slotDimRadial()));
544 action->setObjectName("DimRadial");
545 a_map["DimRadial"] = action;
546
547 action = new QAction(tr("&Diametric"), agm->dimension);
548 action->setIcon(QIcon(":/icons/dim_diametric.svg"));
549 connect(action, SIGNAL(triggered()),
550 action_handler, SLOT(slotDimDiametric()));
551 action->setObjectName("DimDiametric");
552 a_map["DimDiametric"] = action;
553
554 action = new QAction(tr("&Angular"), agm->dimension);
555 action->setIcon(QIcon(":/icons/dim_angular.svg"));
556 connect(action, SIGNAL(triggered()),
557 action_handler, SLOT(slotDimAngular()));
558 action->setObjectName("DimAngular");
559 a_map["DimAngular"] = action;
560
561 action = new QAction(tr("&Leader"), agm->dimension);
562 action->setIcon(QIcon(":/icons/dim_leader.svg"));
563 connect(action, SIGNAL(triggered()),
564 action_handler, SLOT(slotDimLeader()));
565 action->setObjectName("DimLeader");
566 a_map["DimLeader"] = action;
567
568 // <[~ Modify ~]>
569
570 action = new QAction(tr("&Attributes"), agm->modify);
571 action->setIcon(QIcon(":/icons/attributes.svg"));
572 connect(action, SIGNAL(triggered()),
573 action_handler, SLOT(slotModifyAttributes()));
574 action->setObjectName("ModifyAttributes");
575 action->setData("modifyattr, attr, ma");
576 a_map["ModifyAttributes"] = action;
577
578 action = new QAction(tr("&Delete"), agm->modify);
579 action->setIcon(QIcon(":/icons/delete.svg"));
580 connect(action, SIGNAL(triggered()),
581 action_handler, SLOT(slotModifyDelete()));
582 action->setObjectName("ModifyDelete");
583 a_map["ModifyDelete"] = action;
584
585 action = new QAction(tr("Delete Freehand"), agm->modify);
586 connect(action, SIGNAL(triggered()),
587 action_handler, SLOT(slotModifyDeleteFree()));
588 action->setObjectName("ModifyDeleteFree");
589 a_map["ModifyDeleteFree"] = action;
590
591 action = new QAction(tr("&Move / Copy"), agm->modify);
592 action->setIcon(QIcon(":/icons/move_copy.svg"));
593 connect(action, SIGNAL(triggered()),
594 action_handler, SLOT(slotModifyMove()));
595 action->setObjectName("ModifyMove");
596 action->setData("move, mv");
597 a_map["ModifyMove"] = action;
598
599 action = new QAction(tr("Re&vert direction"), agm->modify);
600 action->setIcon(QIcon(":/icons/revert_direction.svg"));
601 action->setShortcut(QKeySequence(tr("Ctrl+R")));
602 connect(action, SIGNAL(triggered()), action_handler, SLOT(slotModifyRevertDirection()));
603 action->setObjectName("ModifyRevertDirection");
604 action->setData("revert, rev");
605 a_map["ModifyRevertDirection"] = action;
606
607 action = new QAction(tr("&Rotate"), agm->modify);
608 action->setIcon(QIcon(":/icons/rotate.svg"));
609 connect(action, SIGNAL(triggered()),
610 action_handler, SLOT(slotModifyRotate()));
611 action->setObjectName("ModifyRotate");
612 action->setData("rotate, ro");
613 a_map["ModifyRotate"] = action;
614
615 action = new QAction(tr("&Scale"), agm->modify);
616 action->setIcon(QIcon(":/icons/scale.svg"));
617 connect(action, SIGNAL(triggered()),
618 action_handler, SLOT(slotModifyScale()));
619 action->setObjectName("ModifyScale");
620 action->setData("scale, sz");
621 a_map["ModifyScale"] = action;
622
623 action = new QAction(tr("&Mirror"), agm->modify);
624 action->setIcon(QIcon(":/icons/mirror.svg"));
625 connect(action, SIGNAL(triggered()),
626 action_handler, SLOT(slotModifyMirror()));
627 action->setObjectName("ModifyMirror");
628 action->setData("mirror, mi");
629 a_map["ModifyMirror"] = action;
630
631 action = new QAction(tr("Mo&ve and Rotate"), agm->modify);
632 action->setIcon(QIcon(":/icons/move_rotate.svg"));
633 connect(action, SIGNAL(triggered()),
634 action_handler, SLOT(slotModifyMoveRotate()));
635 action->setObjectName("ModifyMoveRotate");
636 a_map["ModifyMoveRotate"] = action;
637
638 action = new QAction(tr("Rotate T&wo"), agm->modify);
639 action->setIcon(QIcon(":/icons/rotate2.svg"));
640 connect(action, SIGNAL(triggered()),
641 action_handler, SLOT(slotModifyRotate2()));
642 action->setObjectName("ModifyRotate2");
643 a_map["ModifyRotate2"] = action;
644
645 action = new QAction(tr("&Properties"), agm->modify);
646 action->setIcon(QIcon(":/icons/properties.svg"));
647 connect(action, SIGNAL(triggered()),
648 action_handler, SLOT(slotModifyEntity()));
649 action->setObjectName("ModifyEntity");
650 action->setData("properties, prop");
651 a_map["ModifyEntity"] = action;
652
653 action = new QAction(tr("&Trim"), agm->modify);
654 action->setIcon(QIcon(":/icons/trim.svg"));
655 connect(action, SIGNAL(triggered()),
656 action_handler, SLOT(slotModifyTrim()));
657 action->setObjectName("ModifyTrim");
658 action->setData("trim, tm");
659 a_map["ModifyTrim"] = action;
660
661 action = new QAction(tr("Tr&im Two"), agm->modify);
662 action->setIcon(QIcon(":/icons/trim2.svg"));
663 connect(action, SIGNAL(triggered()),
664 action_handler, SLOT(slotModifyTrim2()));
665 action->setObjectName("ModifyTrim2");
666 action->setData("trim2, tm2");
667 a_map["ModifyTrim2"] = action;
668
669 action = new QAction(tr("&Lengthen"), agm->modify);
670 action->setIcon(QIcon(":/icons/trim_value.svg"));
671 connect(action, SIGNAL(triggered()),
672 action_handler, SLOT(slotModifyTrimAmount()));
673 action->setObjectName("ModifyTrimAmount");
674 action->setData("lengthen, le");
675 a_map["ModifyTrimAmount"] = action;
676
677 action = new QAction(tr("O&ffset"),agm->modify);
678 action->setIcon(QIcon(":/icons/offset.svg"));
679 connect(action, SIGNAL(triggered()),
680 action_handler, SLOT(slotModifyOffset()));
681 action->setObjectName("ModifyOffset");
682 action->setData("offset, o");
683 a_map["ModifyOffset"] = action;
684
685 action = new QAction(tr("&Divide"), agm->modify);
686 action->setIcon(QIcon(":/icons/divide.svg"));
687 connect(action, SIGNAL(triggered()),
688 action_handler, SLOT(slotModifyCut()));
689 action->setObjectName("ModifyCut");
690 action->setData("divide, cut, div");
691 a_map["ModifyCut"] = action;
692
693 action = new QAction(tr("&Stretch"), agm->modify);
694 action->setIcon(QIcon(":/icons/stretch.svg"));
695 connect(action, SIGNAL(triggered()),
696 action_handler, SLOT(slotModifyStretch()));
697 action->setObjectName("ModifyStretch");
698 action->setData("stretch, ss");
699 a_map["ModifyStretch"] = action;
700
701 action = new QAction(tr("&Bevel"), agm->modify);
702 action->setIcon(QIcon(":/icons/bevel.svg"));
703 connect(action, SIGNAL(triggered()),
704 action_handler, SLOT(slotModifyBevel()));
705 action->setObjectName("ModifyBevel");
706 action->setData("bevel, bev, ch");
707 a_map["ModifyBevel"] = action;
708
709 action = new QAction(tr("&Fillet"), agm->modify);
710 action->setIcon(QIcon(":/icons/fillet.svg"));
711 connect(action, SIGNAL(triggered()),
712 action_handler, SLOT(slotModifyRound()));
713 action->setObjectName("ModifyRound");
714 action->setData("fillet, fi");
715 a_map["ModifyRound"] = action;
716
717 action = new QAction(tr("&Explode Text into Letters"), agm->modify);
718 action->setIcon(QIcon(":/icons/explode_text_to_letters.svg"));
719 connect(action, SIGNAL(triggered()),
720 action_handler, SLOT(slotModifyExplodeText()));
721 action->setObjectName("ModifyExplodeText");
722 a_map["ModifyExplodeText"] = action;
723
724 action = new QAction(tr("Ex&plode"), agm->modify);
725 action->setIcon(QIcon(":/icons/explode.svg"));
726 connect(action, SIGNAL(triggered()),
727 action_handler, SLOT(slotBlocksExplode()));
728 action->setObjectName("BlocksExplode");
729 a_map["BlocksExplode"] = action;
730
731 // <[~ Info ~]>
732
733 action = new QAction(tr("Point inside contour"), agm->info);
734 connect(action, SIGNAL(triggered()),
735 action_handler, SLOT(slotInfoInside()));
736 action->setObjectName("InfoInside");
737 a_map["InfoInside"] = action;
738
739 action = new QAction(tr("&Distance Point to Point"), agm->info);
740 action->setIcon(QIcon(":/icons/distance_point_to_point.svg"));
741 connect(action, SIGNAL(triggered()),
742 action_handler, SLOT(slotInfoDist()));
743 action->setObjectName("InfoDist");
744 a_map["InfoDist"] = action;
745
746 action = new QAction(tr("&Distance Entity to Point"), agm->info);
747 action->setIcon(QIcon(":/icons/distance_point_to_entity.svg"));
748 connect(action, SIGNAL(triggered()),
749 action_handler, SLOT(slotInfoDist2()));
750 action->setObjectName("InfoDist2");
751 a_map["InfoDist2"] = action;
752
753 action = new QAction(tr("An&gle between two lines"), agm->info);
754 action->setIcon(QIcon(":/icons/angle_line_to_line.svg"));
755 connect(action, SIGNAL(triggered()),
756 action_handler, SLOT(slotInfoAngle()));
757 action->setObjectName("InfoAngle");
758 a_map["InfoAngle"] = action;
759
760 action = new QAction(tr("&Total length of selected entities"), agm->info);
761 action->setIcon(QIcon(":/icons/total_length_selected_entities.svg"));
762 connect(action, SIGNAL(triggered()),
763 action_handler, SLOT(slotInfoTotalLength()));
764 action->setObjectName("InfoTotalLength");
765 a_map["InfoTotalLength"] = action;
766
767 action = new QAction(tr("Polygonal &Area"), agm->info);
768 action->setIcon(QIcon(":/icons/polygonal_area.svg"));
769 connect(action, SIGNAL(triggered()),
770 action_handler, SLOT(slotInfoArea()));
771 action->setObjectName("InfoArea");
772 a_map["InfoArea"] = action;
773
774 foreach (QAction* value, a_map)
775 {
776 value->setCheckable(true);
777 }
778
779 // =============================
780 // <[~ not checkable actions ~]>
781 // =============================
782
783
784 // <[~ Order ~]>
785
786 action = new QAction(tr("move to bottom"), agm->modify);
787 action->setShortcut(QKeySequence(Qt::Key_End));
788 action->setIcon(QIcon(":/icons/downmost.svg"));
789 connect(action, SIGNAL(triggered()),
790 action_handler, SLOT(slotOrderBottom()));
791 action->setObjectName("OrderBottom");
792 a_map["OrderBottom"] = action;
793
794 action = new QAction(tr("lower after entity"), agm->modify);
795 action->setShortcut(QKeySequence(Qt::Key_PageDown));
796 action->setIcon(QIcon(":/icons/down.svg"));
797 connect(action, SIGNAL(triggered()),
798 action_handler, SLOT(slotOrderLower()));
799 action->setObjectName("OrderLower");
800 a_map["OrderLower"] = action;
801
802 action = new QAction(tr("raise over entity"), agm->modify);
803 action->setShortcut(QKeySequence(Qt::Key_PageUp));
804 action->setIcon(QIcon(":/icons/up.svg"));
805 connect(action, SIGNAL(triggered()),
806 action_handler, SLOT(slotOrderRaise()));
807 action->setObjectName("OrderRaise");
808 a_map["OrderRaise"] = action;
809
810 action = new QAction(tr("move to top"), agm->modify);
811 action->setShortcut(QKeySequence(Qt::Key_Home));
812 action->setIcon(QIcon(":/icons/upmost.svg"));
813 connect(action, SIGNAL(triggered()),
814 action_handler, SLOT(slotOrderTop()));
815 action->setObjectName("OrderTop");
816 a_map["OrderTop"] = action;
817
818 // <[~ Layer ~]>
819
820 action = new QAction(tr("&Show all"), agm->layer);
821 action->setIcon(QIcon(":/ui/visibleblock.png"));
822 connect(action, SIGNAL(triggered()),
823 action_handler, SLOT(slotLayersDefreezeAll()));
824 action->setObjectName("LayersDefreezeAll");
825 a_map["LayersDefreezeAll"] = action;
826
827 action = new QAction(tr("&Hide all"), agm->layer);
828 action->setIcon(QIcon(":/ui/hiddenblock.png"));
829 connect(action, SIGNAL(triggered()),
830 action_handler, SLOT(slotLayersFreezeAll()));
831 action->setObjectName("LayersFreezeAll");
832 a_map["LayersFreezeAll"] = action;
833
834 action = new QAction(tr("&Unlock all"), agm->layer);
835 action->setIcon(QIcon(":/ui/unlockedlayer.png"));
836 connect(action, SIGNAL(triggered()),
837 action_handler, SLOT(slotLayersUnlockAll()));
838 action->setObjectName("LayersUnlockAll");
839 a_map["LayersUnlockAll"] = action;
840
841 action = new QAction(tr("&Lock all"), agm->layer);
842 action->setIcon(QIcon(":/ui/lockedlayer.png"));
843 connect(action, SIGNAL(triggered()),
844 action_handler, SLOT(slotLayersLockAll()));
845 action->setObjectName("LayersLockAll");
846 a_map["LayersLockAll"] = action;
847
848 action = new QAction(tr("&Add Layer"), agm->layer);
849 action->setIcon(QIcon(":/icons/add.svg"));
850 connect(action, SIGNAL(triggered()),
851 action_handler, SLOT(slotLayersAdd()));
852 action->setObjectName("LayersAdd");
853 a_map["LayersAdd"] = action;
854
855 action = new QAction(tr("&Remove Layer"), agm->layer);
856 action->setIcon(QIcon(":/icons/remove.svg"));
857 connect(action, SIGNAL(triggered()),
858 action_handler, SLOT(slotLayersRemove()));
859 action->setObjectName("LayersRemove");
860 a_map["LayersRemove"] = action;
861
862 action = new QAction(tr("&Edit Layer"), agm->layer);
863 action->setIcon(QIcon(":/icons/attributes.svg"));
864 connect(action, SIGNAL(triggered()),
865 action_handler, SLOT(slotLayersEdit()));
866 action->setObjectName("LayersEdit");
867 a_map["LayersEdit"] = action;
868
869 action = new QAction(tr("Toggle Layer Loc&k"), agm->layer);
870 action->setIcon(QIcon(":/icons/locked.svg"));
871 connect(action, SIGNAL(triggered()),
872 action_handler, SLOT(slotLayersToggleLock()));
873 action->setObjectName("LayersToggleLock");
874 a_map["LayersToggleLock"] = action;
875
876 action = new QAction(tr("&Toggle Layer Visibility"), agm->layer);
877 action->setIcon(QIcon(":/icons/visible.svg"));
878 connect(action, SIGNAL(triggered()),
879 action_handler, SLOT(slotLayersToggleView()));
880 action->setObjectName("LayersToggleView");
881 a_map["LayersToggleView"] = action;
882
883 action = new QAction(tr("Toggle Layer &Print"), agm->layer);
884 action->setIcon(QIcon(":/icons/print.svg"));
885 connect(action, SIGNAL(triggered()), action_handler,
886 SLOT(slotLayersTogglePrint()));
887 action->setObjectName("LayersTogglePrint");
888 a_map["LayersTogglePrint"] = action;
889
890 action = new QAction(tr("Toggle &Construction Layer"), agm->layer);
891 action->setIcon(QIcon(":/icons/construction_layer.svg"));
892 connect(action, SIGNAL(triggered()),
893 action_handler, SLOT(slotLayersToggleConstruction()));
894 action->setObjectName("LayersToggleConstruction");
895 a_map["LayersToggleConstruction"] = action;
896
897 // <[~ Block ~]>
898
899 action = new QAction(tr("&Show all"), agm->block);
900 action->setIcon(QIcon(":/ui/blockdefreeze.png"));
901 connect(action, SIGNAL(triggered()),
902 action_handler, SLOT(slotBlocksDefreezeAll()));
903 action->setObjectName("BlocksDefreezeAll");
904 a_map["BlocksDefreezeAll"] = action;
905
906 action= new QAction(tr("&Hide all"), agm->block);
907 action->setIcon(QIcon(":/ui/blockfreeze.png"));
908 connect(action, SIGNAL(triggered()),
909 action_handler, SLOT(slotBlocksFreezeAll()));
910 action->setObjectName("BlocksFreezeAll");
911 a_map["BlocksFreezeAll"] = action;
912
913 action = new QAction(tr("&Add Block"), agm->block);
914 action->setIcon(QIcon(":/icons/add.svg"));
915 connect(action, SIGNAL(triggered()),
916 action_handler, SLOT(slotBlocksAdd()));
917 action->setObjectName("BlocksAdd");
918 a_map["BlocksAdd"] = action;
919
920 action = new QAction(tr("&Remove Block"), agm->block);
921 action->setIcon(QIcon(":/icons/remove.svg"));
922 connect(action, SIGNAL(triggered()),
923 action_handler, SLOT(slotBlocksRemove()));
924 action->setObjectName("BlocksRemove");
925 a_map["BlocksRemove"] = action;
926
927 action = new QAction(tr("&Rename Block"), agm->block);
928 action->setIcon(QIcon(":/icons/rename_active_block.svg"));
929 connect(action, SIGNAL(triggered()),
930 action_handler, SLOT(slotBlocksAttributes()));
931 action->setObjectName("BlocksAttributes");
932 a_map["BlocksAttributes"] = action;
933
934 action = new QAction(tr("&Edit Block"), agm->block);
935 action->setIcon(QIcon(":/icons/properties.svg"));
936 connect(action, SIGNAL(triggered()),
937 action_handler, SLOT(slotBlocksEdit()));
938 action->setObjectName("BlocksEdit");
939 a_map["BlocksEdit"] = action;
940
941 action = new QAction( tr("&Save Block"), agm->block);
942 action->setIcon(QIcon(":/icons/save.svg"));
943 connect(action, SIGNAL(triggered()),
944 action_handler, SLOT(slotBlocksSave()));
945 action->setObjectName("BlocksSave");
946 a_map["BlocksSave"] = action;
947
948 action = new QAction(tr("&Insert Block"), agm->block);
949 action->setIcon(QIcon(":/icons/insert_active_block.svg"));
950 connect(action, SIGNAL(triggered()),
951 action_handler, SLOT(slotBlocksInsert()));
952 action->setObjectName("BlocksInsert");
953 a_map["BlocksInsert"] = action;
954
955 action = new QAction(tr("Toggle Block &Visibility"), agm->block);
956 action->setIcon(QIcon(":/ui/layertoggle.png"));
957 connect(action, SIGNAL(triggered()),
958 action_handler, SLOT(slotBlocksToggleView()));
959 action->setObjectName("BlocksToggleView");
960 a_map["BlocksToggleView"] = action;
961
962 action = new QAction(tr("&Create Block"), agm->block);
963 action->setIcon(QIcon(":/icons/create_block.svg"));
964 connect(action, SIGNAL(triggered()),
965 action_handler, SLOT(slotBlocksCreate()));
966 action->setObjectName("BlocksCreate");
967 a_map["BlocksCreate"] = action;
968
969 // <[~ Options ~]>
970
971 action = new QAction(tr("&Application Preferences"), agm->options);
972 action->setIcon(QIcon(":/icons/settings.svg"));
973 connect(action, SIGNAL(triggered()),
974 main_window, SLOT(slotOptionsGeneral()));
975 action->setMenuRole(QAction::NoRole);
976 action->setObjectName("OptionsGeneral");
977 a_map["OptionsGeneral"] = action;
978
979 action = new QAction(tr("Current &Drawing Preferences"), agm->options);
980 action->setIcon(QIcon(":/icons/drawing_settings.svg"));
981 action->setShortcut(QKeySequence::Preferences);
982 connect(action, SIGNAL(triggered()),
983 action_handler, SLOT(slotOptionsDrawing()));
984 action->setObjectName("OptionsDrawing");
985 a_map["OptionsDrawing"] = action;
986
987 action = new QAction(tr("Widget Options"), agm->options);
988 action->setObjectName("WidgetOptions");
989 a_map["WidgetOptions"] = action;
990 connect(action, SIGNAL(triggered()),
991 main_window, SLOT(widgetOptionsDialog()));
992
993 action = new QAction(tr("Device Options"), agm->options);
994 action->setObjectName("DeviceOptions");
995 a_map["DeviceOptions"] = action;
996 connect(action, SIGNAL(triggered()),
997 main_window, SLOT(showDeviceOptions()));
998
999 // <[~ Modify ~]>
1000
1001 action = new QAction(tr("&Delete selected"), agm->edit);
1002 action->setIcon(QIcon(":/icons/delete.svg"));
1003 action->setShortcuts(QList<QKeySequence>() << QKeySequence::Delete << QKeySequence(Qt::Key_Backspace));
1004 connect(action, SIGNAL(triggered()),
1005 action_handler, SLOT(slotModifyDeleteQuick()));
1006 action->setObjectName("ModifyDeleteQuick");
1007 a_map["ModifyDeleteQuick"] = action;
1008
1009 action = new QAction(tr("Select &All"), agm->select);
1010 action->setShortcut(QKeySequence::SelectAll);
1011 action->setIcon(QIcon(":/icons/select_all.svg"));
1012 connect(action, SIGNAL(triggered()),
1013 action_handler, SLOT(slotSelectAll()));
1014 action->setObjectName("SelectAll");
1015 a_map["SelectAll"] = action;
1016
1017 // <[~ Select ~]>
1018
1019 action = new QAction(tr("Deselect &all"), agm->select);
1020 // RVT April 29, 2011 - Added esc key to de-select all entities
1021 action->setShortcuts(QList<QKeySequence>() << QKeySequence(tr("Ctrl+K")));
1022 action->setIcon(QIcon(":/icons/deselect_all.svg"));
1023 connect(action, SIGNAL(triggered()),
1024 action_handler, SLOT(slotDeselectAll()));
1025 action->setObjectName("DeselectAll");
1026 a_map["DeselectAll"] = action;
1027
1028 action = new QAction(tr("Invert Selection"), agm->select);
1029 action->setIcon(QIcon(":/icons/select_inverted.svg"));
1030 connect(action, SIGNAL(triggered()),
1031 action_handler, SLOT(slotSelectInvert()));
1032 action->setObjectName("SelectInvert");
1033 a_map["SelectInvert"] = action;
1034
1035 // <[~ Misc ~]>
1036
1037 action = new QAction(tr("Export as CA&M/plain SVG..."), agm->file);
1038 connect(action, SIGNAL(triggered()), action_handler, SLOT(slotFileExportMakerCam()));
1039 action->setObjectName("FileExportMakerCam");
1040 a_map["FileExportMakerCam"] = action;
1041
1042 // action = new QAction(tr("Regenerate Dimension Entities"), disable_group);
1043 // connect(action, SIGNAL(triggered()), action_handler, SLOT(slotToolRegenerateDimensions()));
1044 // action->setObjectName("ToolRegenerateDimensions");
1045 // a_map["ToolRegenerateDimensions"] = action;
1046
1047
1048 // ===========================
1049 // <[~ Main Window Actions ~]>
1050 // ===========================
1051
1052
1053 action = new QAction(tr("&Export as image"), agm->file);
1054 action->setIcon(QIcon(":/icons/export.svg"));
1055 connect(action, SIGNAL( triggered()), main_window, SLOT(slotFileExport()));
1056 action->setObjectName("FileExport");
1057 a_map["FileExport"] = action;
1058
1059 action = new QAction(tr("&Close"), agm->file);
1060 action->setIcon(QIcon(":/icons/close.svg"));
1061 action->setShortcut(QKeySequence::Close);
1062 action->setShortcutContext(Qt::WidgetShortcut);
1063 action->setObjectName("FileClose");
1064 a_map["FileClose"] = action;
1065
1066 action = new QAction(tr("Close All"), agm->file);
1067 action->setIcon(QIcon(":/icons/close_all.svg"));
1068 QKeySequence shortcut = QKeySequence::Close;
1069 action->setShortcut(QKeySequence("Shift+" + shortcut.toString()));
1070 connect(action, SIGNAL(triggered()), main_window, SLOT(slotFileCloseAll()));
1071 action->setObjectName("FileCloseAll");
1072 a_map["FileCloseAll"] = action;
1073
1074 action = new QAction(tr("Export as PDF"), agm->file);
1075 action->setIcon(QIcon(":/icons/export_pdf.svg"));
1076 connect(action, SIGNAL(triggered()), main_window, SLOT(slotFilePrintPDF()));
1077 action->setObjectName("FilePrintPDF");
1078 a_map["FilePrintPDF"] = action;
1079
1080 action = new QAction(tr("&Block"), agm->file);
1081 action->setIcon(QIcon(":/icons/insert_active_block.svg"));
1082 connect(action, SIGNAL(triggered()), main_window, SLOT(slotImportBlock()));
1083 action->setObjectName("BlocksImport");
1084 a_map["BlocksImport"] = action;
1085
1086 // <[~ View ~]>
1087
1088 action = new QAction(tr("&Fullscreen"), agm->view);
1089 #if defined(Q_OS_LINUX)
1090 action->setShortcut(QKeySequence("F11"));
1091 #else
1092 action->setShortcut(QKeySequence::FullScreen);
1093 #endif
1094 action->setCheckable(true);
1095 connect(action, SIGNAL(toggled(bool)), main_window, SLOT(toggleFullscreen(bool)));
1096 action->setObjectName("Fullscreen");
1097 a_map["Fullscreen"] = action;
1098
1099 action = new QAction(tr("&Grid"), agm->view);
1100 action->setIcon(QIcon(":/icons/grid.svg"));
1101 action->setShortcut(QKeySequence(tr("Ctrl+G", "Toggle Grid")));
1102 action->setCheckable(true);
1103 action->setChecked(true);
1104 connect(main_window, SIGNAL(gridChanged(bool)), action, SLOT(setChecked(bool)));
1105 connect(action, SIGNAL(toggled(bool)), main_window, SLOT(slotViewGrid(bool)));
1106 action->setObjectName("ViewGrid");
1107 a_map["ViewGrid"] = action;
1108
1109 action = new QAction(tr("&Draft"), agm->view);
1110 action->setIcon(QIcon(":/icons/draft.svg"));
1111 action->setCheckable(true);
1112 action->setShortcut(QKeySequence(tr("Ctrl+D", "Toggle Draft Mode")));
1113 connect(action, SIGNAL(toggled(bool)), main_window, SLOT(slotViewDraft(bool)));
1114 connect(main_window, SIGNAL(draftChanged(bool)), action, SLOT(setChecked(bool)));
1115 action->setObjectName("ViewDraft");
1116 a_map["ViewDraft"] = action;
1117
1118 action = new QAction(tr("&Statusbar"), agm->view);
1119 action->setCheckable(true);
1120 action->setChecked(true);
1121 action->setShortcut(QKeySequence(tr("Ctrl+I", "Hide Statusbar")));
1122 connect(action, SIGNAL(toggled(bool)), main_window, SLOT(slotViewStatusBar(bool)));
1123 action->setObjectName("ViewStatusBar");
1124 a_map["ViewStatusBar"] = action;
1125
1126 action = new QAction(tr("Focus on &Command Line"), agm->view);
1127 action->setIcon(QIcon(":/main/editclear.png"));
1128 QList<QKeySequence> commandLineShortcuts;
1129 commandLineShortcuts<<QKeySequence(Qt::CTRL + Qt::Key_M)<<QKeySequence(Qt::Key_Colon)<<QKeySequence(Qt::Key_Space);
1130 action->setShortcuts(commandLineShortcuts);
1131 connect(action, SIGNAL(triggered()), main_window, SLOT(slotFocusCommandLine()));
1132 action->setObjectName("FocusCommand");
1133 a_map["FocusCommand"] = action;
1134
1135 action = new QAction(tr("Left"), agm->widgets);
1136 action->setIcon(QIcon(":/icons/dockwidgets_left"));
1137 connect(action, SIGNAL(toggled(bool)),
1138 main_window, SLOT(toggleLeftDockArea(bool)));
1139 action->setCheckable(true);
1140 action->setChecked(false);
1141 action->setObjectName("LeftDockAreaToggle");
1142 a_map["LeftDockAreaToggle"] = action;
1143
1144 action = new QAction(tr("Right"), agm->widgets);
1145 action->setIcon(QIcon(":/icons/dockwidgets_right"));
1146 connect(action, SIGNAL(toggled(bool)),
1147 main_window, SLOT(toggleRightDockArea(bool)));
1148 action->setCheckable(true);
1149 action->setChecked(true);
1150 action->setObjectName("RightDockAreaToggle");
1151 a_map["RightDockAreaToggle"] = action;
1152
1153 action = new QAction(tr("Top"), agm->widgets);
1154 action->setIcon(QIcon(":/icons/dockwidgets_top"));
1155 connect(action, SIGNAL(toggled(bool)),
1156 main_window, SLOT(toggleTopDockArea(bool)));
1157 action->setCheckable(true);
1158 action->setChecked(false);
1159 action->setObjectName("TopDockAreaToggle");
1160 a_map["TopDockAreaToggle"] = action;
1161
1162 action = new QAction(tr("Bottom"), agm->widgets);
1163 action->setIcon(QIcon(":/icons/dockwidgets_bottom"));
1164 connect(action, SIGNAL(toggled(bool)),
1165 main_window, SLOT(toggleBottomDockArea(bool)));
1166 action->setCheckable(true);
1167 action->setChecked(false);
1168 action->setObjectName("BottomDockAreaToggle");
1169 a_map["BottomDockAreaToggle"] = action;
1170
1171 action = new QAction(tr("Floating"), agm->widgets);
1172 action->setIcon(QIcon(":/icons/dockwidgets_floating"));
1173 connect(action, SIGNAL(toggled(bool)),
1174 main_window, SLOT(toggleFloatingDockwidgets(bool)));
1175 action->setCheckable(true);
1176 action->setChecked(false);
1177 action->setObjectName("FloatingDockwidgetsToggle");
1178 a_map["FloatingDockwidgetsToggle"] = action;
1179
1180 action = new QAction(tr("Reload Style Sheet"), agm->options);
1181 action->setShortcut(QKeySequence("Ctrl+T"));
1182 connect(action, SIGNAL(triggered()),
1183 main_window, SLOT(reloadStyleSheet()));
1184 action->setObjectName("ReloadStyleSheet");
1185 a_map["ReloadStyleSheet"] = action;
1186
1187 action = new QAction(tr("Menu Creator"), agm->widgets);
1188 action->setIcon(QIcon(":/icons/create_menu.svg"));
1189 connect(action, SIGNAL(triggered()),
1190 main_window, SLOT(invokeMenuCreator()));
1191 action->setObjectName("InvokeMenuCreator");
1192 a_map["InvokeMenuCreator"] = action;
1193
1194 action = new QAction(tr("Toolbar Creator"), agm->widgets);
1195 action->setIcon(QIcon(":/icons/create_toolbar.svg"));
1196 connect(action, SIGNAL(triggered()),
1197 main_window, SLOT(invokeToolbarCreator()));
1198 action->setObjectName("InvokeToolbarCreator");
1199 a_map["InvokeToolbarCreator"] = action;
1200
1201 commonActions(a_map, agm);
1202 }
1203
commonActions(QMap<QString,QAction * > & a_map,LC_ActionGroupManager * agm)1204 void LC_ActionFactory::commonActions(QMap<QString, QAction*>& a_map, LC_ActionGroupManager* agm)
1205 {
1206 QAction* action;
1207
1208 // <[~ Edit ~]>
1209
1210 action = new QAction(tr("&Selection pointer"), agm->edit);
1211 if (using_theme)
1212 action->setIcon(QIcon::fromTheme("go-previous-view", QIcon(":/icons/cursor.svg")));
1213 else
1214 action->setIcon(QIcon(":/icons/cursor.svg"));
1215 connect(action, SIGNAL(triggered()),
1216 action_handler, SLOT(slotEditKillAllActions()));
1217 action->setObjectName("EditKillAllActions");
1218 a_map["EditKillAllActions"] = action;
1219
1220 action = new QAction(tr("&Undo"), agm->edit);
1221 if (using_theme)
1222 action->setIcon(QIcon::fromTheme("edit-undo", QIcon(":/icons/undo.svg")));
1223 else
1224 action->setIcon(QIcon(":/icons/undo.svg"));
1225 action->setShortcut(QKeySequence::Undo);
1226 connect(action, SIGNAL(triggered()),
1227 action_handler, SLOT(slotEditUndo()));
1228 action->setObjectName("EditUndo");
1229 a_map["EditUndo"] = action;
1230
1231 action = new QAction(tr("&Redo"), agm->edit);
1232 if (using_theme)
1233 action->setIcon(QIcon::fromTheme("edit-redo", QIcon(":/icons/redo.svg")));
1234 else
1235 action->setIcon(QIcon(":/icons/redo.svg"));
1236 action->setShortcut(QKeySequence::Redo);
1237 connect(action, SIGNAL(triggered()),
1238 action_handler, SLOT(slotEditRedo()));
1239 action->setObjectName("EditRedo");
1240 a_map["EditRedo"] = action;
1241
1242 action = new QAction(tr("Cu&t"), agm->edit);
1243 if (using_theme)
1244 action->setIcon(QIcon::fromTheme("edit-cut", QIcon(":/icons/cut.svg")));
1245 else
1246 action->setIcon(QIcon(":/icons/cut.svg"));
1247 action->setShortcut(QKeySequence::Cut);
1248 connect(action, SIGNAL(triggered()),
1249 action_handler, SLOT(slotEditCut()));
1250 action->setObjectName("EditCut");
1251 a_map["EditCut"] = action;
1252
1253 action = new QAction(tr("&Copy"), agm->edit);
1254 if (using_theme)
1255 action->setIcon(QIcon::fromTheme("edit-copy", QIcon(":/icons/copy.svg")));
1256 else
1257 action->setIcon(QIcon(":/icons/copy.svg"));
1258 action->setShortcut(QKeySequence::Copy);
1259 connect(action, SIGNAL(triggered()),
1260 action_handler, SLOT(slotEditCopy()));
1261 action->setObjectName("EditCopy");
1262 a_map["EditCopy"] = action;
1263
1264 action = new QAction(tr("&Paste"), agm->edit);
1265 if (using_theme)
1266 action->setIcon(QIcon::fromTheme("edit-paste", QIcon(":/icons/paste.svg")));
1267 else
1268 action->setIcon(QIcon(":/icons/paste.svg"));
1269 action->setShortcut(QKeySequence::Paste);
1270 connect(action, SIGNAL(triggered()),
1271 action_handler, SLOT(slotEditPaste()));
1272 action->setObjectName("EditPaste");
1273 a_map["EditPaste"] = action;
1274
1275 // <[~ Zoom ~]>
1276
1277 action = new QAction(tr("Zoom &In"), agm->view);
1278 if (using_theme)
1279 action->setIcon(QIcon::fromTheme("zoom-in", QIcon(":/icons/zoom_in.svg")));
1280 else
1281 action->setIcon(QIcon(":/icons/zoom_in.svg"));
1282 action->setShortcut(QKeySequence::ZoomIn);
1283 connect(action, SIGNAL(triggered()), action_handler, SLOT(slotZoomIn()));
1284 action->setObjectName("ZoomIn");
1285 a_map["ZoomIn"] = action;
1286
1287 action = new QAction(tr("Zoom &Out"), agm->view);
1288 if (using_theme)
1289 action->setIcon(QIcon::fromTheme("zoom-out", QIcon(":/icons/zoom_out.svg")));
1290 else
1291 action->setIcon(QIcon(":/icons/zoom_out.svg"));
1292 action->setShortcut(QKeySequence::ZoomOut);
1293 connect(action, SIGNAL(triggered()), action_handler, SLOT(slotZoomOut()));
1294 action->setObjectName("ZoomOut");
1295 a_map["ZoomOut"] = action;
1296
1297 action = new QAction(tr("&Auto Zoom"), agm->view);
1298 if (using_theme)
1299 action->setIcon(QIcon::fromTheme("zoom-fit-best", QIcon(":/icons/zoom_auto.svg")));
1300 else
1301 action->setIcon(QIcon(":/icons/zoom_auto.svg"));
1302 connect(action, SIGNAL(triggered()), action_handler, SLOT(slotZoomAuto()));
1303 action->setObjectName("ZoomAuto");
1304 a_map["ZoomAuto"] = action;
1305
1306 action = new QAction(tr("Previous &View"), agm->view);
1307 if (using_theme)
1308 action->setIcon(QIcon::fromTheme("zoom-previous", QIcon(":/icons/zoom_previous.svg")));
1309 else
1310 action->setIcon(QIcon(":/icons/zoom_previous.svg"));
1311 connect(action, SIGNAL(triggered()),
1312 action_handler, SLOT(slotZoomPrevious()));
1313 action->setEnabled(false);
1314 action->setObjectName("ZoomPrevious");
1315 a_map["ZoomPrevious"] = action;
1316
1317 action = new QAction(tr("&Redraw"), agm->view);
1318 if (using_theme)
1319 action->setIcon(QIcon::fromTheme("view-refresh", QIcon(":/icons/redraw.svg")));
1320 else
1321 action->setIcon(QIcon(":/icons/redraw.svg"));
1322 action->setShortcut(QKeySequence::Refresh);
1323 connect(action, SIGNAL(triggered()),
1324 action_handler, SLOT(slotZoomRedraw()));
1325 action->setObjectName("ZoomRedraw");
1326 a_map["ZoomRedraw"] = action;
1327
1328 action = new QAction(tr("&Window Zoom"), agm->other);
1329 action->setCheckable(true);
1330 if (using_theme)
1331 action->setIcon(QIcon::fromTheme("zoom-select", QIcon(":/icons/zoom_window.svg")));
1332 else
1333 action->setIcon(QIcon(":/icons/zoom_window.svg"));
1334 connect(action, SIGNAL(triggered()), action_handler, SLOT(slotZoomWindow()));
1335 action->setObjectName("ZoomWindow");
1336 a_map["ZoomWindow"] = action;
1337
1338 // <[~ File ~]>
1339
1340 action = new QAction(tr("&New"), agm->file);
1341 if (using_theme)
1342 action->setIcon(QIcon::fromTheme("document-new", QIcon(":/icons/new.svg")));
1343 else
1344 action->setIcon(QIcon(":/icons/new.svg"));
1345 action->setShortcut(QKeySequence::New);
1346 connect(action, SIGNAL(triggered()), main_window, SLOT(slotFileNewNew()));
1347 action->setObjectName("FileNew");
1348 a_map["FileNew"] = action;
1349
1350 action = new QAction(tr("New From &Template"), agm->file);
1351 if (using_theme)
1352 action->setIcon(QIcon::fromTheme("document-new", QIcon(":/icons/new_from_template.svg")));
1353 else
1354 action->setIcon(QIcon(":/icons/new_from_template.svg"));
1355 connect(action, SIGNAL(triggered()), main_window, SLOT(slotFileNewTemplate()));
1356 action->setObjectName("FileNewTemplate");
1357 a_map["FileNewTemplate"] = action;
1358
1359 action = new QAction(tr("&Open..."), agm->file);
1360 if (using_theme)
1361 action->setIcon(QIcon::fromTheme("document-open", QIcon(":/icons/open.svg")));
1362 else
1363 action->setIcon(QIcon(":/icons/open.svg"));
1364 action->setShortcut(QKeySequence::Open);
1365 connect(action, SIGNAL(triggered()), main_window, SLOT(slotFileOpen()));
1366 action->setObjectName("FileOpen");
1367 a_map["FileOpen"] = action;
1368
1369 action = new QAction(tr("&Save"), agm->file);
1370 if (using_theme)
1371 action->setIcon(QIcon::fromTheme("document-save", QIcon(":/icons/save.svg")));
1372 else
1373 action->setIcon(QIcon(":/icons/save.svg"));
1374 action->setShortcut(QKeySequence::Save);
1375 connect(action, SIGNAL(triggered()), main_window, SLOT(slotFileSave()));
1376 action->setObjectName("FileSave");
1377 a_map["FileSave"] = action;
1378
1379 action = new QAction(tr("Save &as..."), agm->file);
1380 if (using_theme)
1381 action->setIcon(QIcon::fromTheme("document-save-as", QIcon(":/icons/save_as.svg")));
1382 else
1383 action->setIcon(QIcon(":/icons/save_as.svg"));
1384 action->setShortcut(QKeySequence::SaveAs);
1385 connect(action, SIGNAL(triggered()), main_window, SLOT(slotFileSaveAs()));
1386 action->setObjectName("FileSaveAs");
1387 a_map["FileSaveAs"] = action;
1388
1389 action = new QAction(tr("Save A&ll..."), agm->file);
1390 action->setIcon(QIcon(":/icons/save_all.svg"));
1391 QKeySequence shortcut = QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_S);
1392 // only define this shortcut for platforms not already using it for save as
1393 if (shortcut != QKeySequence::SaveAs)
1394 action->setShortcut(shortcut);
1395 connect(action, SIGNAL(triggered()), main_window, SLOT(slotFileSaveAll()));
1396 action->setObjectName("FileSaveAll");
1397 a_map["FileSaveAll"] = action;
1398
1399 action = new QAction(tr("&Print..."), agm->file);
1400 if (using_theme)
1401 action->setIcon(QIcon::fromTheme("document-print", QIcon(":/icons/print.svg")));
1402 else
1403 action->setIcon(QIcon(":/icons/print.svg"));
1404 action->setShortcut(QKeySequence::Print);
1405 connect(action, SIGNAL(triggered()), main_window, SLOT(slotFilePrint()));
1406 connect(main_window, SIGNAL(printPreviewChanged(bool)), action, SLOT(setChecked(bool)));
1407 action->setObjectName("FilePrint");
1408 a_map["FilePrint"] = action;
1409
1410 action = new QAction(tr("Print Pre&view"), agm->file);
1411 if (using_theme)
1412 action->setIcon(QIcon::fromTheme("document-print-preview", QIcon(":/icons/print_preview.svg")));
1413 else
1414 action->setIcon(QIcon(":/icons/print_preview.svg"));
1415 action->setCheckable(true);
1416 connect(action, SIGNAL(triggered(bool)), main_window, SLOT(slotFilePrintPreview(bool)));
1417 connect(main_window, SIGNAL(printPreviewChanged(bool)), action, SLOT(setChecked(bool)));
1418 action->setObjectName("FilePrintPreview");
1419 a_map["FilePrintPreview"] = action;
1420
1421 action = new QAction(tr("&Quit"), agm->file);
1422 if (using_theme)
1423 action->setIcon(QIcon::fromTheme("application-exit", QIcon(":/icons/quit.svg")));
1424 else
1425 action->setIcon(QIcon(":/icons/quit.svg"));
1426 action->setShortcut(QKeySequence::Quit);
1427 connect(action, SIGNAL(triggered()), main_window, SLOT(slotFileQuit()));
1428 action->setObjectName("FileQuit");
1429 a_map["FileQuit"] = action;
1430 }
1431