QCAD Application Framework
CAD Application Development and Automation.
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
RScriptHandler.h
Go to the documentation of this file.
1 #ifndef RSCRIPTHANDLER_H
2 #define RSCRIPTHANDLER_H
3 
4 #include <QList>
5 #include <QMetaType>
6 #include <QString>
7 
8 #include "RNonCopyable.h"
9 #include "RDocumentInterface.h"
10 #include "RAction.h"
11 #include "RGuiAction.h"
12 #include "RScriptAction.h"
13 #include "RMainWindow.h"
14 
16 
17 
24 
25 public:
26 
28 
29  virtual ~RScriptHandler() { };
30 
35  virtual QList<QString> getSupportedFileExtensions() = 0;
36 
37  virtual void init(const QString& autostartFile = QString::null, const QStringList& arguments = QStringList());
38 
42  virtual void doScript(const QString& scriptFile, const QStringList& arguments = QStringList()) = 0;
43 
47  virtual void eval(const QString& script, const QString& fileName = QString()) = 0;
48 
52  virtual RFileImporterAdapter* createFileImporter(const QString& className, RDocument& document) = 0;
53 
58  virtual bool isRunning() = 0;
59 
60  virtual void abort() = 0;
61 
62  virtual bool hasUncaughtExceptions() = 0;
63 
64  static void triggerActionApplicationLevel(const QString& scriptFile,
65  RGuiAction* guiAction = NULL);
66 
70  virtual void
71  createActionDocumentLevel(const QString& scriptFile,
72  RGuiAction* guiAction,
73  RDocumentInterface* documentInterface = NULL) = 0;
74  virtual void createActionApplicationLevel(const QString& scriptFile,
75  RGuiAction* guiAction) = 0;
76 
83  template<class T>
84  void createActionDocumentLevelT(const QString& scriptFile,
85  RGuiAction* guiAction, RDocumentInterface* documentInterface) {
86  if (documentInterface == NULL) {
87  documentInterface = RMainWindow::getDocumentInterfaceStatic();
88  if (documentInterface == NULL) {
89  qWarning("RScriptHandler::createActionDocumentLevelT(): No document interface given or found.");
90  return;
91  }
92  }
93 
94  RScriptAction* a = new T(scriptFile, guiAction);
95  a->setDocumentInterface(documentInterface);
96  documentInterface->setCurrentAction(a);
97  }
98 
106  template<class T>
107  void createActionApplicationLevelT(const QString& scriptFile, RGuiAction* guiAction) {
108  T action(scriptFile, guiAction);
109  action.beginEvent();
110  action.finishEvent();
111  }
112 
113 protected:
114  static QString autostartScriptName;
115 };
116 
117 #endif