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 
196  return requiresSelection;
197  }
198 
200  requiresUndoableTransaction = on;
201  }
202 
204  return requiresUndoableTransaction;
205  }
206 
208  requiresRedoableTransaction = on;
209  }
210 
212  return requiresRedoableTransaction;
213  }
214 
215  void setOverride() {
216  override = true;
217  }
218 
219  bool isOverride() {
220  return override;
221  }
222 
223  void setNoState(bool checkable = false) {
224  noState = true;
225  setCheckable(checkable);
226  }
227 
228  bool hasNoState() {
229  return noState;
230  }
231 
232  void setUniqueGroup(const QString& ug) {
233  uniqueGroup = ug;
234  }
235 
236  QString getUniqueGroup() {
237  return uniqueGroup;
238  }
239 
245  QString getMainCommand() {
246  return mainCommand;
247  }
248 
252  QStringList getCommands() {
253  return commandList;
254  }
255 
256  QStringList getDefaultCommands() {
257  return defaultCommandList;
258  }
259 
260  void setDefaultCommands(const QStringList& cmds);
261  void setCommands(const QStringList& cmds);
262 
266  void setFactory(FactoryFunction f);
267 
272  void setScriptFile(const QString& sf, bool isSecondary = false);
273 
277  QString getScriptFile() const {
278  return scriptFile;
279  }
280 
281  QString getScriptClass() const {
282  return QFileInfo(scriptFile).baseName();
283  }
284 
285  virtual void setGroup(const QString& title);
286  QString getGroup();
287 
288  void setGroupDefault(bool on);
289  bool isGroupDefault();
290 
291 // void setSeparatorGroup(const QString& title);
292 // QString getSeparatorGroup();
293 
297  static QList<RGuiAction*> getActions() {
298  return actions;
299  }
300 
301  static bool triggerByCommand(const QString& cmd);
302  static RGuiAction* getByScriptFile(const QString& scriptFile);
303  static RGuiAction* getByClassName(const QString& className);
304  static bool triggerByScriptFile(const QString& scriptFile);
305 
306  static QStringList getAvailableCommands(bool primaryOnly=false);
307  static QStringList getAvailableCommands(const QString& start, bool primaryOnly=false);
308 
309  static void clear();
310 
311  virtual void updateTransactionListener(RDocument* document, RTransaction* transaction = NULL);
312  virtual void updateSelectionListener(RDocumentInterface* documentInterface);
313  virtual void updateFocus(RDocumentInterface* documentInterface);
314 
315  void addArgument(const QString& arg);
316  QStringList getArguments();
317  void clearArguments();
318 
319  static void setWidgetNamesStatic(QAction* a, const QStringList& widgetNames);
320  static QStringList getWidgetNamesStatic(const QAction *a);
321 
322  void setWidgetNames(const QStringList& widgetNames);
323  QStringList getWidgetNames() const;
324 
325 public slots:
329  bool slotTrigger(const QString& command = QString::null);
330 
331 signals:
332  void postTriggered();
333 
334 protected:
335  static QMap<QString, RGuiAction*> actionsByCommand;
336  static QMap<QString, RGuiAction*> actionsByPrimaryCommand;
337  static QMap<QString, RGuiAction*> actionsByScriptFile;
338  static QMultiMap<QString, RGuiAction*> actionsByGroup;
339  static QList<RGuiAction*> actions;
340 
341  FactoryFunction factory;
342  QString scriptFile;
343  QString mainCommand;
344  QStringList commandList;
345  QStringList defaultCommandList;
346  QString group;
348 
353  bool override;
354  bool noState;
355  QString uniqueGroup;
356  QStringList arguments;
357 
358  QList<QKeySequence> defaultShortcuts;
359  QString shortcutText;
360  QString toolTip;
364 };
365 
368 
369 #endif