//! [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")); }
//! [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) { if (!m_debugger) { m_debugger = new QScriptEngineDebugger(this); m_debugWindow = m_debugger->standardWindow(); m_debugWindow->setWindowModality(Qt::ApplicationModal); m_debugWindow->resize(1280, 704); } m_debugger->attachTo(m_env->engine()); m_debugger->action(QScriptEngineDebugger::InterruptAction)->trigger(); } else { if (m_debugger) m_debugger->detach(); } #else Q_UNUSED(debug); #endif QScriptValue ret = m_env->evaluate(contents, fileName); #ifndef QT_NO_SCRIPTTOOLS if (m_debugWindow) m_debugWindow->hide(); #endif if (ret.isError()) reportScriptError(ret); }
//! [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); }