Stellarium 0.13.1
StelScriptMgr.hpp
1 /*
2  * Stellarium
3  * Copyright (C) 2007 Fabien Chereau, 2009 Matthew Gates
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA.
18  */
19 
20 #ifndef _STELSCRIPTMGR_HPP_
21 #define _STELSCRIPTMGR_HPP_
22 
23 #include <QObject>
24 #include <QtScript>
25 #include <QStringList>
26 #include <QFile>
27 #include <QTime>
28 #include <QTimer>
29 #include <QScriptEngineAgent>
30 
31 class StelMainScriptAPI;
33 
34 #ifdef ENABLE_SCRIPT_CONSOLE
35 class ScriptConsole;
36 #endif
37 
39 class StelScriptMgr : public QObject
40 {
41  Q_OBJECT
42 
43 #ifdef ENABLE_SCRIPT_CONSOLE
44 friend class ScriptConsole;
45 #endif
46 
47 public:
48  StelScriptMgr(QObject *parent=0);
49  ~StelScriptMgr();
50 
51  QStringList getScriptList();
52 
55  bool scriptIsRunning();
59  QString runningScriptId();
60 
61  // Pre-processor functions
62  bool preprocessScript(const QString& input, QString& output, const QString& scriptDir);
63  bool preprocessScript(QFile &input, QString& output, const QString& scriptDir);
64 
66  void addModules();
67 public slots:
74  const QString getName(const QString& s);
75 
82  const QString getAuthor(const QString& s);
83 
90  const QString getLicense(const QString& s);
91 
99  const QString getDescription(const QString& s);
100 
107  const QString getShortcut(const QString& s);
108 
112  bool runPreprocessedScript(const QString& preprocessedScript);
113 
122  bool runScript(const QString& fileName, const QString& includePath="");
123 
126  void stopScript();
127 
133  void setScriptRate(float r);
134 
137  double getScriptRate();
138 
141  void debug(const QString& msg);
142 
145  void output(const QString& msg);
146 
148  void pauseScript();
149 
151  void resumeScript();
152 
153 private slots:
155  void scriptEnded();
156 signals:
158  void scriptRunning();
160  void scriptStopped();
162  void scriptDebug(const QString&);
164  void scriptOutput(const QString&);
165 
166 private:
167  // Utility functions for preprocessor
168  QMap<QString, QString> mappify(const QStringList& args, bool lowerKey=false);
169  bool strToBool(const QString& str);
170 
173  void initActions();
174 
175 #ifdef ENABLE_STRATOSCRIPT_COMPAT
176  bool preprocessStratoScript(QFile& input, QString& output, const QString& scriptDir);
177 #endif
178 
185  const QString getHeaderSingleLineCommentText(const QString& s, const QString& id, const QString& notFoundText="");
186  QScriptEngine engine;
187 
189  StelMainScriptAPI *mainAPI;
190 
191  QString scriptFileName;
192 
193  //Script engine agent
194  StelScriptEngineAgent *agent;
195 
196 };
197 
198 class StelScriptEngineAgent : public QScriptEngineAgent
199 {
200 public:
201  explicit StelScriptEngineAgent(QScriptEngine *engine);
202  virtual ~StelScriptEngineAgent() {}
203 
204  void setPauseScript(bool pause) { isPaused=pause; }
205  bool getPauseScript() { return isPaused; }
206 
207  void positionChange(qint64 scriptId, int lineNumber, int columnNumber);
208 
209 private:
210  bool isPaused;
211 
212 };
213 
214 #endif // _STELSCRIPTMGR_HPP_
const QString getLicense(const QString &s)
Gets the licensing terms for the script.
const QString getAuthor(const QString &s)
Gets the name of the script Author.
bool runScript(const QString &fileName, const QString &includePath="")
Run the script located at the given location.
void debug(const QString &msg)
cause the emission of the scriptDebug signal.
void setScriptRate(float r)
Changes the rate at which the script executes as a multiple of real time.
void scriptRunning()
Notification when a script starts running.
void scriptDebug(const QString &)
Notification of a script event - warnings, current execution line etc.
void stopScript()
Stops any running script.
bool scriptIsRunning()
Find out if a script is running.
void addModules()
Add all the StelModules into the script engine.
Provide script API for Stellarium global functions.
void resumeScript()
Resume a paused script.
void scriptStopped()
Notification when a script has stopped running.
void output(const QString &msg)
cause the emission of the scriptOutput signal.
void pauseScript()
Pause a running script.
Manage scripting in Stellarium.
const QString getDescription(const QString &s)
Gets a description of the script.
const QString getName(const QString &s)
Gets a single line name of the script.
QString runningScriptId()
Get the ID (filename) of the currently running script.
bool runPreprocessedScript(const QString &preprocessedScript)
Run the prprocessed script.
void scriptOutput(const QString &)
Notification of a script event - output line.
const QString getShortcut(const QString &s)
Gets the default shortcut of the script.
double getScriptRate()
Get the rate at which the script is running as a multiple of the normal execution rate...