QCAD
Open Source 2D CAD
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 <QFileInfo>
26 #include <QMap>
27 #include <QMetaType>
28 #include <QString>
29 #include <QStringList>
30 #include <QList>
31 #include <QAction>
32 
33 #include "RTransactionListener.h"
34 #include "RFocusListener.h"
35 #include "RSelectionListener.h"
36 
37 class QToolBar;
38 
39 class RDocument;
40 class RDocumentInterface;
41 
61  public QAction,
62  public RFocusListener,
63  public RTransactionListener,
64  public RSelectionListener {
65 
66 Q_OBJECT
67 
68 public:
69  typedef void (*FactoryFunction)(RGuiAction*);
70 
71 public:
72  RGuiAction(const QString& text, QObject* parent = 0);
73  virtual ~RGuiAction();
74 
79  virtual void initTexts();
80 
81  virtual void init();
82 
83  static QString formatToolTip(const QString& text, const QString& shortcut);
84  QString getToolTip(const QString& text, const QString& shortcut);
85 
86  void setDocumentInterface(RDocumentInterface* di);
87  RDocumentInterface* getDocumentInterface();
88 
94  void setShortcut(const QKeySequence& shortcut);
95  void setDefaultShortcut(const QKeySequence& shortcut);
96  void setShortcuts(const QList<QKeySequence>& shortcuts);
97  void setDefaultShortcuts(const QList<QKeySequence>& shortcuts);
98  QList<QKeySequence> getDefaultShortcuts();
99  void setShortcutText(const QString& text);
100  QString getShortcutText();
101 
102  static void setGroupSortOrderStatic(QAction* a, int sortOrder);
103  static void setGroupSortOrderOverrideStatic(QAction* a, const QString& widgetName, int sortOrder);
104  static int getGroupSortOrderStatic(const QAction* a, const QWidget* w = NULL);
105 
106  static void setSortOrderStatic(QAction* a, int sortOrder);
107  static void setSortOrderOverrideStatic(QAction* a, const QString& widgetName, int sortOrder);
108  static int getSortOrderStatic(const QAction* a, const QWidget* w = NULL);
109 
110  void setGroupSortOrder(int sortOrder);
111  void setGroupSortOrderOverride(const QString& widgetName, int sortOrder);
112  int getGroupSortOrder(const QWidget* w = NULL);
113 
114  void setSortOrder(int sortOrder);
115  void setSortOrderOverride(const QString& widgetName, int sortOrder);
116  int getSortOrder(const QWidget* w = NULL);
117 
118  void addToMenu(QMenu* menu);
119  void addToToolBar(QToolBar* tb);
120 
121  static void fixSeparators(const QWidget* w);
122  static void addSeparatorToWidget(QAction* a, QWidget* w);
123  static void addToWidget(QAction* a, QWidget* w);
124  static void removeFromWidget(QAction* a, QWidget* w);
125 
129  virtual void setIcon(const QString& iconFile);
130 
131  void disableIcon();
132  bool isIconDisabled();
133 
138  virtual void setToolTip(const QString& tip);
139 
144  virtual void setStatusTip(const QString& tip);
145 
149  virtual void setEnabled(bool on);
150 
154  virtual void setEnabledOverride(bool on, int override);
155 
159  virtual void setChecked(bool on);
160 
161  static void triggerGroupDefault(const QString& group);
162  static void triggerGroupDefaults();
163 
167  virtual bool isChecked();
168 
173  void setRequiresDocument(bool on) {
174  requiresDocument = on;
175  }
176 
182  return requiresDocument;
183  }
184 
189  void setRequiresSelection(bool on) {
190  requiresSelection = on;
191  }
192 
198  return requiresSelection;
199  }
200 
202  requiresUndoableTransaction = on;
203  }
204 
206  return requiresUndoableTransaction;
207  }
208 
210  requiresRedoableTransaction = on;
211  }
212 
214  return requiresRedoableTransaction;
215  }
216 
217  void setOverride() {
218  override = true;
219  }
220 
221  bool isOverride() {
222  return override;
223  }
224 
225  void setNoState(bool checkable = false) {
226  noState = true;
227  setCheckable(checkable);
228  }
229 
230  bool hasNoState() {
231  return noState;
232  }
233 
234  void setUniqueGroup(const QString& ug) {
235  uniqueGroup = ug;
236  }
237 
238  QString getUniqueGroup() {
239  return uniqueGroup;
240  }
241 
247  QString getMainCommand() {
248  return mainCommand;
249  }
250 
254  QStringList getCommands() {
255  return commandList;
256  }
257 
258  QStringList getDefaultCommands() {
259  return defaultCommandList;
260  }
261 
262  void setDefaultCommands(const QStringList& cmds);
263  void setCommands(const QStringList& cmds);
264 
268  void setFactory(FactoryFunction f);
269 
274  void setScriptFile(const QString& sf, bool isSecondary = false);
275 
279  QString getScriptFile() const {
280  return scriptFile;
281  }
282 
283  QString getScriptClass() const {
284  return QFileInfo(scriptFile).baseName();
285  }
286 
287  virtual void setGroup(const QString& title);
288  QString getGroup();
289 
290  void setGroupDefault(bool on);
291  bool isGroupDefault();
292 
293 // void setSeparatorGroup(const QString& title);
294 // QString getSeparatorGroup();
295 
299  static QList<RGuiAction*> getActions() {
300  return actions;
301  }
302 
303  static bool triggerByCommand(const QString& cmd);
304  static RGuiAction* getByScriptFile(const QString& scriptFile);
305  static RGuiAction* getByClassName(const QString& className);
306  static bool triggerByScriptFile(const QString& scriptFile);
307 
308  static QStringList getAvailableCommands(bool primaryOnly=false);
309  static QStringList getAvailableCommands(const QString& start, bool primaryOnly=false);
310 
311  static void clear();
312 
313  virtual void updateTransactionListener(RDocument* document, RTransaction* transaction = NULL);
314  virtual void updateSelectionListener(RDocumentInterface* documentInterface);
315  virtual void updateFocus(RDocumentInterface* documentInterface);
316 
317  void addArgument(const QString& arg);
318  QStringList getArguments();
319  void clearArguments();
320 
321  static void setWidgetNamesStatic(QAction* a, const QStringList& widgetNames);
322  static QStringList getWidgetNamesStatic(const QAction *a);
323 
324  void setWidgetNames(const QStringList& widgetNames);
325  QStringList getWidgetNames() const;
326 
327 public slots:
331  bool slotTrigger(const QString& command = QString::null);
332 
333 signals:
334  void postTriggered();
335 
336 protected:
337  static QMap<QString, RGuiAction*> actionsByCommand;
338  static QMap<QString, RGuiAction*> actionsByPrimaryCommand;
339  static QMap<QString, RGuiAction*> actionsByScriptFile;
340  static QMultiMap<QString, RGuiAction*> actionsByGroup;
341  static QList<RGuiAction*> actions;
342 
343  FactoryFunction factory;
344  QString scriptFile;
345  QString mainCommand;
346  QStringList commandList;
347  QStringList defaultCommandList;
348  QString group;
350 
355  bool override;
356  bool noState;
357  QString uniqueGroup;
358  QStringList arguments;
359 
360  QList<QKeySequence> defaultShortcuts;
361  QString shortcutText;
362  QString toolTip;
366 };
367 
370 
371 #endif