diff options
author | Jedrzej Nowacki <[email protected]> | 2011-08-02 09:52:43 +0200 |
---|---|---|
committer | Qt by Nokia <[email protected]> | 2011-08-04 14:38:49 +0200 |
commit | aa54e27adeff3c7e6f59e2d68e9f006e60e542dc (patch) | |
tree | 3888da760d3243e9f0af883e46b82d21ce801aed | |
parent | ee06564a979a4677d117bc29e610e0368671fbdd (diff) |
Move shell example from QtScript to QtDeclarative.
The example is interesting as debugging tool too.
Change-Id: I9ba69a85f21b776bbfcc65469c8a0e90426f21fd
Reviewed-on: http://codereview.qt.nokia.com/2495
Reviewed-by: Qt Sanity Bot <[email protected]>
Reviewed-by: Kent Hansen <[email protected]>
-rw-r--r-- | examples/declarative/declarative.pro | 3 | ||||
-rw-r--r-- | examples/declarative/script/script.pro | 4 | ||||
-rw-r--r-- | examples/declarative/script/shell/main.cpp | 153 | ||||
-rw-r--r-- | examples/declarative/script/shell/shell.pro | 8 |
4 files changed, 167 insertions, 1 deletions
diff --git a/examples/declarative/declarative.pro b/examples/declarative/declarative.pro index c2950616a2..d3683fe376 100644 --- a/examples/declarative/declarative.pro +++ b/examples/declarative/declarative.pro @@ -6,7 +6,8 @@ SUBDIRS = \ minehunt \ modelviews \ painteditem \ - tutorials + tutorials \ + script # plugins uses a 'Time' class that conflicts with symbian e32std.h also defining a class of the same name symbian:SUBDIRS -= plugins diff --git a/examples/declarative/script/script.pro b/examples/declarative/script/script.pro new file mode 100644 index 0000000000..98c1bbc5ee --- /dev/null +++ b/examples/declarative/script/script.pro @@ -0,0 +1,4 @@ +TEMPLATE = subdirs + +SUBDIRS = \ + shell diff --git a/examples/declarative/script/shell/main.cpp b/examples/declarative/script/shell/main.cpp new file mode 100644 index 0000000000..ad29fb87e1 --- /dev/null +++ b/examples/declarative/script/shell/main.cpp @@ -0,0 +1,153 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation ([email protected]) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtCore/qfile.h> +#include <QtCore/qtextstream.h> +#include <QtCore/qstringlist.h> +#include <QtCore/qscopedpointer.h> + +#include <QtGui/qapplication.h> + +#include <QtDeclarative/qjsengine.h> + +#include <stdlib.h> + + +class CommandInterface : public QObject +{ + Q_OBJECT +public: + Q_INVOKABLE void quit() { m_wantsToQuit = true; } + static bool wantsToQuit() { return m_wantsToQuit; } +private: + static bool m_wantsToQuit; +}; + +bool CommandInterface::m_wantsToQuit = false; + + +static void interactive(QJSEngine *eng) +{ + QTextStream qin(stdin, QFile::ReadOnly); + const char *prompt = "qs> "; + + forever { + QString line; + + printf("%s", prompt); + fflush(stdout); + + line = qin.readLine(); + if (line.isNull()) + break; + + if (line.trimmed().isEmpty()) + continue; + + line += QLatin1Char('\n'); + + QJSValue result = eng->evaluate(line, QLatin1String("typein")); + + fprintf(stderr, "%s\n", qPrintable(result.toString())); + + if (CommandInterface::wantsToQuit()) + break; + } +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QScopedPointer<QJSEngine> eng(new QJSEngine()); + { + QJSValue globalObject = eng->globalObject(); + QJSValue interface = eng->newQObject(new CommandInterface); + globalObject.setProperty("qt", interface); + } + + if (! *++argv) { + interactive(eng.data()); + return EXIT_SUCCESS; + } + + while (const char *arg = *argv++) { + QString fileName = QString::fromLocal8Bit(arg); + + if (fileName == QLatin1String("-i")) { + interactive(eng.data()); + break; + } + + QString contents; + int lineNumber = 1; + + if (fileName == QLatin1String("-")) { + QTextStream stream(stdin, QFile::ReadOnly); + contents = stream.readAll(); + } else { + QFile file(fileName); + if (file.open(QFile::ReadOnly)) { + QTextStream stream(&file); + contents = stream.readAll(); + file.close(); + + // strip off #!/usr/bin/env qjs line + if (contents.startsWith("#!")) { + contents.remove(0, contents.indexOf("\n")); + ++lineNumber; + } + } + } + + if (contents.isEmpty()) + continue; + + QJSValue result = eng->evaluate(contents, fileName, lineNumber); + if (eng->hasUncaughtException()) { + fprintf (stderr, " %s\n\n", qPrintable(result.toString())); + return EXIT_FAILURE; + } + } + + return EXIT_SUCCESS; +} + +#include <main.moc>
\ No newline at end of file diff --git a/examples/declarative/script/shell/shell.pro b/examples/declarative/script/shell/shell.pro new file mode 100644 index 0000000000..7ddc06b3c4 --- /dev/null +++ b/examples/declarative/script/shell/shell.pro @@ -0,0 +1,8 @@ +QT += declarative + +win32: CONFIG += console +mac:CONFIG -= app_bundle +symbian: CONFIG += qt_example + +SOURCES += main.cpp + |