QWidget *ScriptToolbox::openWindow(QString name, QWidget *parent, Qt::WindowModality modality, Qt::WindowFlags flags) { QWidget *returnVal = 0; XSqlQuery screenq; screenq.prepare("SELECT * " "FROM uiform " "WHERE (uiform_name=:uiform_name);"); screenq.bindValue(":uiform_name", name); screenq.exec(); if (screenq.first()) { XUiLoader 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.")); return 0; } QWidget *ui = loader.load(&uiFile); uiFile.close(); if (ui->inherits("QDialog")) { flags |= Qt::Dialog; if (modality == Qt::NonModal) modality = Qt::WindowModal; } XMainWindow *window = new XMainWindow(parent, screenq.value("uiform_name").toString(), flags); window->setCentralWidget(ui); window->setWindowTitle(ui->windowTitle()); window->setWindowModality(modality); if (ui->inherits("QDialog")) { QDialog *innerdlg = qobject_cast<QDialog*>(ui); connect(innerdlg, SIGNAL(finished(int)), window, SLOT(close())); connect(innerdlg, SIGNAL(accepted()), window, SLOT(close())); connect(innerdlg, SIGNAL(rejected()), window, SLOT(close())); // alternative to creating mydialog object: // for each property of mydialog (including functions) // add a property to _engine's mywindow property if (engine(window)) { QScriptValue mydialog = engine(window)->newQObject(innerdlg); engine(window)->globalObject().setProperty("mydialog", mydialog); } else qWarning("Could not find the script engine to embed a dialog inside " "a placeholder window"); omfgThis->handleNewWindow(window); returnVal = ui; } else { omfgThis->handleNewWindow(window); returnVal = window; } _lastWindow = window; } else if (screenq.lastError().type() != QSqlError::None) { systemError(0, screenq.lastError().databaseText(), __FILE__, __LINE__); return 0; } return returnVal; }