summaryrefslogtreecommitdiffstats
path: root/examples/script/context2d/window.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/script/context2d/window.cpp')
-rw-r--r--examples/script/context2d/window.cpp174
1 files changed, 174 insertions, 0 deletions
diff --git a/examples/script/context2d/window.cpp b/examples/script/context2d/window.cpp
new file mode 100644
index 0000000..a93bf30
--- /dev/null
+++ b/examples/script/context2d/window.cpp
@@ -0,0 +1,174 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "window.h"
+#include "environment.h"
+#include "context2d.h"
+#include "qcontext2dcanvas.h"
+#include <QHBoxLayout>
+#include <QListWidget>
+#include <QDir>
+#include <QMessageBox>
+
+#ifndef QT_NO_SCRIPTTOOLS
+#include <QAction>
+#include <QApplication>
+#include <QMainWindow>
+#include <QPushButton>
+#include <QVBoxLayout>
+#include <QScriptEngineDebugger>
+#endif
+
+static QString scriptsDir()
+{
+ if (QFile::exists("./scripts"))
+ return "./scripts";
+ return ":/scripts";
+}
+
+//! [0]
+Window::Window(QWidget *parent)
+ : QWidget(parent)
+{
+ m_env = new Environment(this);
+ QObject::connect(m_env, SIGNAL(scriptError(QScriptValue)),
+ this, SLOT(reportScriptError(QScriptValue)));
+
+ Context2D *context = new Context2D(this);
+ context->setSize(150, 150);
+ m_canvas = new QContext2DCanvas(context, m_env, this);
+ m_canvas->setFixedSize(context->size());
+ m_canvas->setObjectName("tutorial");
+ m_env->addCanvas(m_canvas);
+//! [0]
+
+#ifndef QT_NO_SCRIPTTOOLS
+ QVBoxLayout *vbox = new QVBoxLayout();
+ vbox->addWidget(m_canvas);
+ m_debugButton = new QPushButton(tr("Run in Debugger"));
+ connect(m_debugButton, SIGNAL(clicked()), this, SLOT(runInDebugger()));
+ vbox->addWidget(m_debugButton);
+#endif
+
+ QHBoxLayout *hbox = new QHBoxLayout(this);
+ m_view = new QListWidget(this);
+ m_view->setEditTriggers(QAbstractItemView::NoEditTriggers);
+ hbox->addWidget(m_view);
+#ifndef QT_NO_SCRIPTTOOLS
+ hbox->addLayout(vbox);
+#else
+ hbox->addWidget(m_canvas);
+#endif
+
+//! [1]
+ QDir dir(scriptsDir());
+ QFileInfoList entries = dir.entryInfoList(QStringList() << "*.js");
+ for (int i = 0; i < entries.size(); ++i)
+ m_view->addItem(entries.at(i).fileName());
+ connect(m_view, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
+ this, SLOT(selectScript(QListWidgetItem*)));
+//! [1]
+
+#ifndef QT_NO_SCRIPTTOOLS
+ m_debugger = new QScriptEngineDebugger(this);
+ m_debugger->attachTo(m_env->engine());
+ m_debugWindow = m_debugger->standardWindow();
+ m_debugWindow->setWindowModality(Qt::ApplicationModal);
+ m_debugWindow->resize(1280, 704);
+#endif
+
+ setWindowTitle(tr("Context 2D"));
+}
+
+//! [2]
+void Window::selectScript(QListWidgetItem *item)
+{
+ QString fileName = item->text();
+ runScript(fileName, /*debug=*/false);
+}
+//! [2]
+
+void Window::reportScriptError(const QScriptValue &error)
+{
+ QMessageBox::warning(this, tr("Context 2D"), tr("Line %0: %1")
+ .arg(error.property("lineNumber").toInt32())
+ .arg(error.toString()));
+}
+
+#ifndef QT_NO_SCRIPTTOOLS
+//! [3]
+void Window::runInDebugger()
+{
+ QListWidgetItem *item = m_view->currentItem();
+ if (item) {
+ QString fileName = item->text();
+ runScript(fileName, /*debug=*/true);
+ }
+}
+//! [3]
+#endif
+
+//! [4]
+void Window::runScript(const QString &fileName, bool debug)
+{
+ QFile file(scriptsDir() + "/" + fileName);
+ file.open(QIODevice::ReadOnly);
+ QString contents = file.readAll();
+ file.close();
+ m_env->reset();
+
+#ifndef QT_NO_SCRIPTTOOLS
+ if (debug)
+ m_debugger->action(QScriptEngineDebugger::InterruptAction)->trigger();
+#else
+ Q_UNUSED(debug);
+#endif
+
+ QScriptValue ret = m_env->evaluate(contents, fileName);
+
+#ifndef QT_NO_SCRIPTTOOLS
+ m_debugWindow->hide();
+#endif
+
+ if (ret.isError())
+ reportScriptError(ret);
+}
+//! [4]