Stellarium 0.15.0
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 resetOutput(void);
149 
151  void pauseScript();
152 
154  void resumeScript();
155 
156 private slots:
158  void scriptEnded();
159 signals:
161  void scriptRunning();
163  void scriptStopped();
165  void scriptDebug(const QString&);
167  void scriptOutput(const QString&);
168 
169 private:
170  // Utility functions for preprocessor
171  QMap<QString, QString> mappify(const QStringList& args, bool lowerKey=false);
172  bool strToBool(const QString& str);
173 
176  void initActions();
177 
184  const QString getHeaderSingleLineCommentText(const QString& s, const QString& id, const QString& notFoundText="");
185  QScriptEngine engine;
186 
188  StelMainScriptAPI *mainAPI;
189 
190  QString scriptFileName;
191 
192  //Script engine agent
193  StelScriptEngineAgent *agent;
194 
195 };
196 
197 class StelScriptEngineAgent : public QScriptEngineAgent
198 {
199 public:
200  explicit StelScriptEngineAgent(QScriptEngine *engine);
201  virtual ~StelScriptEngineAgent() {}
202 
203  void setPauseScript(bool pause) { isPaused=pause; }
204  bool getPauseScript() { return isPaused; }
205 
206  void positionChange(qint64 scriptId, int lineNumber, int columnNumber);
207 
208 private:
209  bool isPaused;
210 
211 };
212 
213 #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.
void resetOutput(void)
Reset output file and cause the emission of an (empty) scriptOutput signal.
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...