QCAD
Open Source 2D CAD
Loading...
Searching...
No Matches
RGuiAction.h
Go to the documentation of this file.
1
20#ifndef RGUIACTION_H
21#define RGUIACTION_H
22
23#include "core_global.h"
24
25#include <QMetaType>
26#include <QString>
27#include <QStringList>
28#include <QList>
29#include <QAction>
30
32#include "RFocusListener.h"
33#include "RSelectionListener.h"
34
35class QToolBar;
36
37class RDocument;
39
59 public QAction,
60 public RFocusListener,
62 public RSelectionListener {
63
64Q_OBJECT
65
66public:
67 typedef void (*FactoryFunction)(RGuiAction*);
68
69public:
70 RGuiAction(const QString& oriText, QObject* parent = 0);
71 virtual ~RGuiAction();
72
73 void setText(const QString& oriText);
74
79 virtual void initTexts();
80
81 virtual void init();
82
83 static QString formatToolTip(const QString& oriText, const QString& shortcut);
84 QString getToolTip(const QString& oriText, const QString& shortcut);
85
86 //void setDocumentInterface(RDocumentInterface* di);
87 //RDocumentInterface* getDocumentInterface() const;
88
89 void addShortcut(const QKeySequence& shortcut);
90 void removeShortcuts();
96 void setShortcut(const QKeySequence& shortcut);
97 void setDefaultShortcut(const QKeySequence& shortcut);
98 void setShortcuts(const QList<QKeySequence>& shortcuts);
99 void setShortcutsFromStrings(const QStringList& shortcuts);
100 QList<QKeySequence> getShortcuts() const;
101 void setDefaultShortcuts(const QList<QKeySequence>& shortcuts);
102 QList<QKeySequence> getDefaultShortcuts();
103 void setShortcutText(const QString& oriText);
104 QString getShortcutText() const;
105 QString getShortcutsString(const QString& separator = ",", QKeySequence::SequenceFormat format = QKeySequence::PortableText) const;
106
107 static void setGroupSortOrderStatic(QAction* a, int sortOrder);
108 static void setGroupSortOrderOverrideStatic(QAction* a, const QString& widgetName, int sortOrder);
109 static int getGroupSortOrderStatic(const QAction* a, const QWidget* w = NULL);
110
111 static void setSortOrderStatic(QAction* a, int sortOrder);
112 static void setSortOrderOverrideStatic(QAction* a, const QString& widgetName, int sortOrder);
113 static int getSortOrderStatic(const QAction* a, const QWidget* w = NULL);
114
115 void setGroupSortOrder(int sortOrder);
116 void setGroupSortOrderOverride(const QString& widgetName, int sortOrder);
117 int getGroupSortOrder(const QWidget* w = NULL) const;
118
119 void setSortOrder(int sortOrder);
120 void setSortOrderOverride(const QString& widgetName, int sortOrder);
121 int getSortOrder(const QWidget* w = NULL) const;
122
123 void addToMenu(QMenu* menu);
124 void addToToolBar(QToolBar* tb);
125
126 static void fixSeparators(const QWidget* w);
127 static void addSeparatorToWidget(QAction* a, QWidget* w);
128 static void addToWidget(QAction* a, QWidget* w);
129 static void removeFromWidget(QAction* a, QWidget* w);
130
131 static void updateIcons();
132 void updateIcon();
133
134 static void updateToolTips();
135
139 virtual void setIcon(const QString& iconFile);
140
141 void disableIcon();
142 bool isIconDisabled() const;
143
148 virtual void setToolTip(const QString& tip);
149
154 virtual void setStatusTip(const QString& tip);
155
159 virtual void setEnabled(bool on);
160
164 virtual void setEnabledOverride(bool on, int override);
165
169 virtual void setChecked(bool on);
170
171 static void triggerGroupDefault(const QString& group);
172 static void triggerGroupDefaults();
173
177 virtual bool isChecked() const;
178
183 void setForceGlobal(bool on) {
184 forceGlobal = on;
185 }
186
187 bool getForceGlobal() const {
188 return forceGlobal;
189 }
190
195 void setRequiresDocument(bool on) {
196 requiresDocument = on;
197 }
198
203 bool getRequiresDocument() const {
204 return requiresDocument;
205 }
206
211 void setRequiresSelection(bool on);
212
217 bool getRequiresSelection() const {
218 return requiresSelection;
219 }
220
222 requiresUndoableTransaction = on;
223 }
224
226 return requiresUndoableTransaction;
227 }
228
230 requiresRedoableTransaction = on;
231 }
232
234 return requiresRedoableTransaction;
235 }
236
237 void setOverride() {
238 override = true;
239 }
240
241 bool isOverride() const {
242 return override;
243 }
244
246 allowInterrupt = true;
247 }
248
249 bool getAllowInterrupt() const {
250 return allowInterrupt;
251 }
252
253 void setNoState(bool checkable = false) {
254 noState = true;
255 setCheckable(checkable);
256 }
257
258 bool hasNoState() const {
259 return noState;
260 }
261
265 void setToggleable(bool on = true) {
266 toggleable = on;
267 }
268
269 bool isToggleable() const {
270 return toggleable;
271 }
272
273 void setUniqueGroup(const QString& ug) {
274 uniqueGroup = ug;
275 }
276
277 QString getUniqueGroup() const {
278 return uniqueGroup;
279 }
280
286 QString getMainCommand() const {
287 return mainCommand;
288 }
289
293 QStringList getCommands() const {
294 return commandList;
295 }
296
297 QStringList getDefaultCommands() {
298 return defaultCommandList;
299 }
300
301 void setDefaultCommands(const QStringList& cmds);
302 void setCommands(const QStringList& cmds);
303
307 void setFactory(FactoryFunction f);
308
313 void setScriptFile(const QString& sf, bool isSecondary = false);
314
318 QString getScriptFile() const {
319 return scriptFile;
320 }
321
322 QString getScriptClass() const;
323
324 virtual void setGroup(const QString& title);
325 QString getGroup();
326
327 void setGroupDefault(bool on);
328 bool isGroupDefault();
329
330// void setSeparatorGroup(const QString& title);
331// QString getSeparatorGroup();
332
336 static QList<RGuiAction*> getActions() {
337 return actions;
338 }
339
340 static bool triggerByCommand(const QString& cmd);
341 static bool triggerByShortcut(const QString& sc);
342 static RGuiAction* getByScriptFile(const QString& scriptFile);
343 static RGuiAction* getByClassName(const QString& className);
344 static RGuiAction* getByCommand(const QString& command);
345 static bool triggerByScriptFile(const QString& scriptFile);
346
347 static QStringList getAvailableCommands(bool primaryOnly=false);
348 static QStringList getAvailableCommands(const QString& start, bool primaryOnly=false);
349
350 static void clear();
351
352 virtual void updateTransactionListener(RDocument* document, RTransaction* transaction = NULL);
353 virtual void setCurrentBlock(RDocument* document) {
354 Q_UNUSED(document);
355 }
356 virtual void updateSelectionListener(RDocumentInterface* documentInterface);
357 virtual void updateFocus(RDocumentInterface* documentInterface);
358
359 void addArgument(const QString& arg);
360 QStringList getArguments();
361 void clearArguments();
362
363 static void setWidgetNamesStatic(QAction* a, const QStringList& widgetNames);
364 static QStringList getWidgetNamesStatic(const QAction *a);
365
366 void setWidgetNames(const QStringList& widgetNames);
367 QStringList getWidgetNames() const;
368
369public slots:
373 bool slotTrigger(const QString& command = QString());
374
375signals:
377
378protected:
383 static QMultiMap<QString, RGuiAction*> actionsByGroup;
384 static QList<RGuiAction*> actions;
385
386 FactoryFunction factory;
387 QString oriText;
388 QString scriptFile;
389 QString iconFile;
390 QString mainCommand;
391 QStringList commandList;
393 QString group;
395
396 // TODO: refactor to use flags:
402 bool override;
406 QString uniqueGroup;
407 QStringList arguments;
408
409 QList<QKeySequence> defaultShortcuts;
410 QList<QKeySequence> multiKeyShortcuts;
412 QString oriToolTip;
415 //RDocumentInterface* documentInterface;
416};
417
419Q_DECLARE_METATYPE(QList<RGuiAction*>)
420
421#endif
void init(void basePath)
Definition AddBlockInit.js:2
Q_DECLARE_METATYPE(RMath *)
void getArguments(void args, void shortFlag, void longFlag)
Definition arguments.js:23
Definition RDebug.h:38
A graphics document contains and owns entities, layers, user coordinate systems, variables,...
Definition RDocument.h:78
Interface for interaction between a graphics document and a user.
Definition RDocumentInterface.h:97
Abstract base class for classes that are interested in the current focus.
Definition RFocusListener.h:36
virtual void updateFocus(RDocumentInterface *di)=0
Called by the document whenever the focus changed from one MDI to another.
Abstract base class for GUI action classes.
Definition RGuiAction.h:62
bool getRequiresRedoableTransaction() const
Definition RGuiAction.h:233
bool forceGlobal
Definition RGuiAction.h:397
void setNoState(bool checkable=false)
Definition RGuiAction.h:253
QList< QKeySequence > defaultShortcuts
Definition RGuiAction.h:409
static QList< RGuiAction * > getActions()
Definition RGuiAction.h:336
void setRequiresDocument(bool on)
If on is true, this action requires a document to be open.
Definition RGuiAction.h:195
QStringList defaultCommandList
Definition RGuiAction.h:392
bool getAllowInterrupt() const
Definition RGuiAction.h:249
void setRequiresRedoableTransaction(bool on)
Definition RGuiAction.h:229
bool requiresUndoableTransaction
Definition RGuiAction.h:400
bool getRequiresDocument() const
Definition RGuiAction.h:203
bool allowInterrupt
Definition RGuiAction.h:403
bool noState
Definition RGuiAction.h:404
static QMap< QString, RGuiAction * > actionsByShortcut
Definition RGuiAction.h:380
QString oriText
Definition RGuiAction.h:387
static QMap< QString, RGuiAction * > actionsByPrimaryCommand
Definition RGuiAction.h:381
QString shortcutText
Definition RGuiAction.h:411
QString scriptFile
Definition RGuiAction.h:388
bool toggleable
Definition RGuiAction.h:405
int enabledOverride
Definition RGuiAction.h:414
QStringList arguments
Definition RGuiAction.h:407
QString uniqueGroup
Definition RGuiAction.h:406
void setUniqueGroup(const QString &ug)
Definition RGuiAction.h:273
bool iconDisabled
Definition RGuiAction.h:413
void setOverride()
Definition RGuiAction.h:237
bool groupDefault
Definition RGuiAction.h:394
void setRequiresUndoableTransaction(bool on)
Definition RGuiAction.h:221
bool isToggleable() const
Definition RGuiAction.h:269
QString getScriptFile() const
Definition RGuiAction.h:318
QString getUniqueGroup() const
Definition RGuiAction.h:277
static QMultiMap< QString, RGuiAction * > actionsByGroup
Definition RGuiAction.h:383
static QMap< QString, RGuiAction * > actionsByCommand
Copyright (c) 2011-2018 by Andrew Mustun.
Definition RGuiAction.h:379
QString group
Definition RGuiAction.h:393
bool requiresDocument
Definition RGuiAction.h:398
QString oriToolTip
Definition RGuiAction.h:412
FactoryFunction factory
Definition RGuiAction.h:386
void setForceGlobal(bool on)
If on is true, this action runs in the global script context (default for actions that don't require ...
Definition RGuiAction.h:183
bool isOverride() const
Definition RGuiAction.h:241
QStringList commandList
Definition RGuiAction.h:391
void setAllowInterrupt()
Definition RGuiAction.h:245
void setToggleable(bool on=true)
If enabled, action terminates when activated and already running.
Definition RGuiAction.h:265
bool getRequiresSelection() const
Definition RGuiAction.h:217
static QList< RGuiAction * > actions
Definition RGuiAction.h:384
bool getRequiresUndoableTransaction() const
Definition RGuiAction.h:225
void postTriggered()
QStringList getCommands() const
Definition RGuiAction.h:293
QStringList getDefaultCommands()
Definition RGuiAction.h:297
bool requiresRedoableTransaction
Definition RGuiAction.h:401
bool requiresSelection
Definition RGuiAction.h:399
bool hasNoState() const
Definition RGuiAction.h:258
static QMap< QString, RGuiAction * > actionsByScriptFile
Definition RGuiAction.h:382
QString getMainCommand() const
Definition RGuiAction.h:286
virtual void setCurrentBlock(RDocument *document)
Definition RGuiAction.h:353
bool getForceGlobal() const
Definition RGuiAction.h:187
QString iconFile
Definition RGuiAction.h:389
QString mainCommand
Definition RGuiAction.h:390
QList< QKeySequence > multiKeyShortcuts
Definition RGuiAction.h:410
Abstract base class for classes that are interested in the current selection and want to be notified ...
Definition RSelectionListener.h:36
virtual void updateSelectionListener(RDocumentInterface *documentInterface)=0
Called by the document whenever the current selection changes.
Transaction implementation.
Definition RTransaction.h:73
Abstract base class for classes that want to be notified on every transaction (objects added,...
Definition RTransactionListener.h:40
virtual void updateTransactionListener(RDocument *document, RTransaction *transaction=NULL)=0
Called by the document whenever the current transaction stack changes.
#define QCADCORE_EXPORT
Definition core_global.h:10
#define NULL
Definition opennurbs_system.h:256