void ScriptablePrivate::loadScript(const QString& oName) { qDebug() << "Looking for a script " << oName; XSqlQuery scriptq; scriptq.prepare("SELECT script_source, script_order" " FROM script" " WHERE((script_name=:script_name)" " AND (script_enabled))" " ORDER BY script_order;"); scriptq.bindValue(":script_name", oName); scriptq.exec(); while(scriptq.next()) { if(engine()) { QString script = scriptHandleIncludes(scriptq.value("script_source").toString()); QScriptValue result = _engine->evaluate(script, _parent->objectName()); if (_engine->hasUncaughtException()) { int line = _engine->uncaughtExceptionLineNumber(); qDebug() << "uncaught exception at line" << line << ":" << result.toString(); } } else qDebug() << "could not initialize engine"; } }
QString scriptHandleIncludes(QString source) { QString returnVal = source; if (returnVal.contains(QRegExp("#include"))) { QStringList line = returnVal.split(QRegExp("\n\r?|\r\n?")); for (int i = 0; i < line.size(); i++) { if (line.at(i).startsWith("#include")) { QStringList words = line.at(i).split(QRegExp("\\s+")); if (words.size() <= 1) qWarning("scriptByName(%s): found #include with no script name", qPrintable(line.at(i))); int order = -1; if (words.size() > 2) order = words.at(2).toInt(); QString name; if (words.size() > 1) name = words.at(1); line.replace(i, "// " + line.at(i)); XSqlQuery inclq; inclq.prepare("SELECT script_source " "FROM script " "WHERE ((script_name=:name)" " AND ((script_order=:order) OR (:order = -1))" " AND script_enabled) " "ORDER BY script_order;"); inclq.bindValue(":name", name); inclq.bindValue(":order", order); inclq.exec(); bool found = false; while (inclq.next()) { found = true; line.replace(i, line.at(i) + "\n" + scriptHandleIncludes(inclq.value("script_source").toString())); } if (found) line.replace(i, line.at(i) + "\n// end include of " + name); } } returnVal = line.join("\n"); } return returnVal; }
void XWidget::loadScriptEngine() { if(_private->_scriptLoaded) return; _private->_scriptLoaded = true; QStringList parts = objectName().split(" "); QStringList search_parts; QString oName; while(!parts.isEmpty()) { search_parts.append(parts.takeFirst()); oName = search_parts.join(" "); // load and run an QtScript that applies to this window qDebug() << "Looking for a script on widget " << oName; XSqlQuery scriptq; scriptq.prepare("SELECT script_source, script_order" " FROM script" " WHERE((script_name=:script_name)" " AND (script_enabled))" " ORDER BY script_order;"); scriptq.bindValue(":script_name", oName); scriptq.exec(); while(scriptq.next()) { QString script = scriptHandleIncludes(scriptq.value("script_source").toString()); if(!_private->_engine) { _private->_engine = new QScriptEngine(); if (_preferences->boolean("EnableScriptDebug")) { _private->_debugger = new QScriptEngineDebugger(this); _private->_debugger->attachTo(_private->_engine); } omfgThis->loadScriptGlobals(_private->_engine); QScriptValue mywindow = _private->_engine->newQObject(this); _private->_engine->globalObject().setProperty("mywindow", mywindow); } QScriptValue result = _private->_engine->evaluate(script, objectName()); if (_private->_engine->hasUncaughtException()) { int line = _private->_engine->uncaughtExceptionLineNumber(); qDebug() << "uncaught exception at line" << line << ":" << result.toString(); } } } }
void XMainWindow::loadScriptEngine() { if(_private->_scriptLoaded) return; _private->_scriptLoaded = true; QStringList parts = objectName().split(" "); QStringList search_parts; QString oName; while(!parts.isEmpty()) { search_parts.append(parts.takeFirst()); oName = search_parts.join(" "); // load and run an QtScript that applies to this window qDebug() << "Looking for a script on window " << oName; XSqlQuery scriptq; scriptq.prepare("SELECT script_source, script_order" " FROM script" " WHERE((script_name=:script_name)" " AND (script_enabled))" " ORDER BY script_order;"); scriptq.bindValue(":script_name", oName); scriptq.exec(); while(scriptq.next()) { if(engine(this)) { QString script = scriptHandleIncludes(scriptq.value("script_source").toString()); QScriptValue result = _private->_engine->evaluate(script, objectName()); if (_private->_engine->hasUncaughtException()) { int line = _private->_engine->uncaughtExceptionLineNumber(); qDebug() << "uncaught exception at line" << line << ":" << result.toString(); } } } } }
void setup::setCurrentIndex(XTreeWidgetItem* item) { QString uiName = item->data(0, Xt::RawRole).toString(); QString label = "<span style=\" font-size:14pt; font-weight:600;\">%1</span></p></body></html>"; if (_itemMap.contains(uiName) && _itemMap.value(uiName).index >= 0) { _stack->setCurrentIndex(_itemMap.value(uiName).index); _stackLit->setText(label.arg(item->text(0))); return; } else if (_itemMap.contains(uiName) && !item->isDisabled()) { // First look for a class... QWidget *w = xtGetScreen(uiName, this); if (w) _itemMap[uiName].implementation = w; else { // No class, so look for an extension XSqlQuery screenq; screenq.prepare("SELECT * " " FROM uiform " " WHERE((uiform_name=:uiform_name)" " AND (uiform_enabled))" " ORDER BY uiform_order DESC" " LIMIT 1;"); screenq.bindValue(":uiform_name", uiName); screenq.exec(); if (screenq.first()) { QUiLoader loader; QByteArray ba = screenq.value("uiform_source").toByteArray(); QBuffer uiFile(&ba); if (!uiFile.open(QIODevice::ReadOnly)) QMessageBox::critical(0, tr("Could not load UI"), tr("<p>There was an error loading the UI Form " "from the database.")); w = loader.load(&uiFile); w->setObjectName(uiName); uiFile.close(); // Load scripts if applicable XSqlQuery scriptq; scriptq.prepare("SELECT script_source, script_order" " FROM script" " WHERE((script_name=:script_name)" " AND (script_enabled))" " ORDER BY script_order;"); scriptq.bindValue(":script_name", uiName); scriptq.exec(); QScriptEngine* engine = new QScriptEngine(); if (_preferences->boolean("EnableScriptDebug")) { QScriptEngineDebugger* debugger = new QScriptEngineDebugger(this); debugger->attachTo(engine); } omfgThis->loadScriptGlobals(engine); QScriptValue mywindow = engine->newQObject(w); engine->globalObject().setProperty("mywindow", mywindow); while(scriptq.next()) { QString script = scriptHandleIncludes(scriptq.value("script_source").toString()); QScriptValue result = engine->evaluate(script, uiName); if (engine->hasUncaughtException()) { int line = engine->uncaughtExceptionLineNumber(); qDebug() << "uncaught exception at line" << line << ":" << result.toString(); } } _itemMap[uiName].implementation = engine; } } if (w) { // Hide buttons out of context here QWidget* close = w->findChild<QWidget*>("_close"); if (close) close->hide(); QWidget* buttons = w->findChild<QDialogButtonBox*>(); if (buttons) buttons->hide(); //Set mode if applicable int mode = _itemMap.value(uiName).mode; if (mode && w->inherits("XDialog")) { XWidget* x = dynamic_cast<XWidget*>(w); ParameterList params; if (mode == cEdit) params.append("mode", "edit"); else if (mode == cView) params.append("mode", "view"); if (x) x->set(params); } int idx = _stack->count(); _itemMap[uiName].index = idx; _stack->addWidget(w); _stack->setCurrentIndex(idx); _stackLit->setText(label.arg(item->text(0))); return; } } // Nothing here so try the next one XTreeWidgetItem* next = dynamic_cast<XTreeWidgetItem*>(_tree->itemBelow(item)); if (next) setCurrentIndex(next); }
void XDialog::showEvent(QShowEvent *event) { if(!_private->_shown) { _private->_shown = true; QRect availableGeometry = QApplication::desktop()->availableGeometry(); QString objName = objectName(); QPoint pos = xtsettingsValue(objName + "/geometry/pos").toPoint(); QSize lsize = xtsettingsValue(objName + "/geometry/size").toSize(); if(lsize.isValid() && xtsettingsValue(objName + "/geometry/rememberSize", true).toBool()) resize(lsize); // do I want to do this for a dialog? //_windowList.append(w); QRect r(pos, size()); if(!pos.isNull() && availableGeometry.contains(r) && xtsettingsValue(objName + "/geometry/rememberPos", true).toBool()) move(pos); _private->_rememberPos = new QAction(tr("Remember Posisition"), this); _private->_rememberPos->setCheckable(true); _private->_rememberPos->setChecked(xtsettingsValue(objectName() + "/geometry/rememberPos", true).toBool()); connect(_private->_rememberPos, SIGNAL(triggered(bool)), this, SLOT(setRememberPos(bool))); _private->_rememberSize = new QAction(tr("Remember Size"), this); _private->_rememberSize->setCheckable(true); _private->_rememberSize->setChecked(xtsettingsValue(objectName() + "/geometry/rememberSize", true).toBool()); connect(_private->_rememberSize, SIGNAL(triggered(bool)), this, SLOT(setRememberSize(bool))); addAction(_private->_rememberPos); addAction(_private->_rememberSize); setContextMenuPolicy(Qt::ActionsContextMenu); QStringList parts = objectName().split(" "); QStringList search_parts; QString oName; while(!parts.isEmpty()) { search_parts.append(parts.takeFirst()); oName = search_parts.join(" "); // load and run an QtScript that applies to this window qDebug() << "Looking for a script on dialog " << oName; q.prepare("SELECT script_source, script_order" " FROM script" " WHERE((script_name=:script_name)" " AND (script_enabled))" " ORDER BY script_order;"); q.bindValue(":script_name", oName); q.exec(); while(q.next()) { QString script = scriptHandleIncludes(q.value("script_source").toString()); if(!_private->_engine) { _private->_engine = new QScriptEngine(); omfgThis->loadScriptGlobals(_private->_engine); QScriptValue mywindow = _private->_engine->newQObject(this); _private->_engine->globalObject().setProperty("mywindow", mywindow); } QScriptValue result = _private->_engine->evaluate(script, objectName()); if (_private->_engine->hasUncaughtException()) { int line = _private->_engine->uncaughtExceptionLineNumber(); qDebug() << "uncaught exception at line" << line << ":" << result.toString(); } } } }