コード例 #1
0
ファイル: _WebPage.cpp プロジェクト: tasosbull/yewtic
void WebPage::evalStepScript(const QString &script){
	evalScript(m_jsLib);
	evalScript(m_script);

	if(!script.isEmpty()){
		yINFO(QString::fromLocal8Bit("处理脚本:%1").arg(script).toLocal8Bit().data());
		evalScript(script);
	}
}
コード例 #2
0
void Scripting::changeWorkingDirectory() {
    auto value = getSettingsValue(PYTHON_WORKING_DIRECTORY);
    if (value.isNull()) { return; }
    auto workingDir = value.toString();
    if (workingDir.isEmpty()) { return; }

    evalScript("import os");
    evalScript(QString("os.chdir('%1')").arg(workingDir));
}
コード例 #3
0
bool Scripting::isPluginOpen(const QString &pluginName) {
    return      (
                isPluginImported(pluginName)
                &&
                evalScript(QString("'%1' in %2").arg(SCRIPTING_INSTANCE_KEY).arg(getPluginInContainerStr(pluginName)), Py_eval_input).toBool()
                &&
                evalScript(QString("%1 != None").arg(getInstanceInContainerStr(pluginName)), Py_eval_input).toBool()
                );
}
コード例 #4
0
bool Scripting::isPluginImported(const QString &pluginName) {
    return      (
                evalScript(QString("'%1' in %2").arg(pluginName).arg(getContainerStr()), Py_eval_input).toBool()
                &&
                evalScript(QString("'%1' in %2").arg(SCRIPTING_IMPORT_KEY).arg(getPluginInContainerStr(pluginName)), Py_eval_input).toBool()
                &&
                evalScript(QString("%1 != None").arg(getImportInContainerStr(pluginName)), Py_eval_input).toBool()
                );
}
コード例 #5
0
bool Scripting::importPlugin(const QString &pluginName, bool isQuiet) {
    auto actionStr = "import";
    if (isPluginImported(pluginName)) {
        return true;
    }
    evalScript(QString("%1 = {}").arg(getPluginInContainerStr(pluginName)));
    evalScript(QString("import %1").arg(pluginName));
    if (!evalScript(QString("'%1' in sys.modules").arg(pluginName), Py_eval_input).toBool()) {
        return pluginActionError(actionStr, pluginName, "import error", isQuiet);
    }
    evalScript(QString("%1 = %2; del %2").arg(getImportInContainerStr(pluginName)).arg(pluginName));
    return true;
}
コード例 #6
0
void Scripting::addPythonPath(const QString &path) {
    if (_customPathDirs.contains(path)) {
        return;
    }
    _customPathDirs.append(path);
    evalScript(QString("sys.path.append('%1')").arg(path));
}
コード例 #7
0
void Scripting::runFile(const QString &filename) {
    QFile pyFile(filename);
    pyFile.open(QIODevice::ReadOnly);
    QString s;
    QTextStream textStream(&pyFile);
    s.append(textStream.readAll());
    pyFile.close();

    evalScript(s, Py_file_input);
}
コード例 #8
0
bool Scripting::removePluginImport(const QString &pluginName, bool isQuiet) {
    auto actionStr = "remove import";
    if (!isPluginImported(pluginName)) {
        return true;
    }
    evalScript(QString("%1 = None").arg(getImportInContainerStr(pluginName)));
    if (isPluginImported(pluginName)) {
        return pluginActionError(actionStr, pluginName, "still imported", isQuiet);
    }
    return true;
}
コード例 #9
0
bool Scripting::showPlugin(const QString &pluginName, bool isQuiet) {
    auto actionStr = "show";
    auto instanceInContainer = getInstanceInContainerStr(pluginName);
    if (!isPluginOpen(pluginName)) {
        return pluginActionError(actionStr, pluginName, "not open", isQuiet);
    }
    if (!isPluginVisible(pluginName)) {
        evalScript(QString("%1.show()").arg(instanceInContainer));
        if (!isPluginVisible(pluginName)) {
            return pluginActionError(actionStr, pluginName, "still not visible", isQuiet);
        }
    }
    if (!isPluginActive(pluginName)) {
        evalScript(QString("%1.activateWindow()").arg(instanceInContainer));
        if (!isPluginActive(pluginName)) {
            return pluginActionError(actionStr, pluginName, "still not active", isQuiet);
        }
    }
    return true;
}
コード例 #10
0
bool Scripting::removePluginInstance(const QString &pluginName, bool isQuiet) {
    auto actionStr = "remove instance";
    if (!isPluginOpen(pluginName)) {
        return true;
    }
    evalScript(QString("%1 = None").arg(getInstanceInContainerStr(pluginName)));
    if (isPluginOpen(pluginName)) {
        return pluginActionError(actionStr, pluginName, "still open", isQuiet);
    }
    return true;
}
コード例 #11
0
bool Scripting::closePlugin(const QString &pluginName, bool isQuiet) {
    auto actionStr = "close";
    if (!isPluginOpen(pluginName)) {
        return true;
    }
    if (!evalScript(QString("%1.close()").arg(getInstanceInContainerStr(pluginName)), Py_eval_input).toBool()) {
        return pluginActionError(actionStr, pluginName, "close failed", isQuiet);
    }
    if (!removePluginInstance(pluginName, isQuiet)) {
        return pluginActionError(actionStr, pluginName, "instance not removed", isQuiet);
    }
    return true;
}
コード例 #12
0
bool Scripting::hidePlugin(const QString &pluginName, bool isQuiet) {
    auto actionStr = "hide";
    if (!isPluginOpen(pluginName)) {
        return pluginActionError(actionStr, pluginName, "not open", isQuiet);
    }
    if (!isPluginVisible(pluginName)) {
        return true;
    }
    evalScript(QString("%1.hide()").arg(getInstanceInContainerStr(pluginName)));
    if (isPluginVisible(pluginName)) {
        return pluginActionError(actionStr, pluginName, "still visible", isQuiet);
    }
    return true;
}
コード例 #13
0
bool Scripting::instantiatePlugin(const QString &pluginName, bool isQuiet) {
    auto actionStr = "instanstiate";
    if (!isPluginImported(pluginName)) {
        return pluginActionError(actionStr, pluginName, "not imported", isQuiet);
    }
    if (isPluginOpen(pluginName)) {
        return true;
    }
    evalScript(QString("%1.main_class()").arg(getImportInContainerStr(pluginName)));
    if (!isPluginOpen(pluginName)) {
        return pluginActionError(actionStr, pluginName, "still not open", isQuiet);
    }
    return true;
}
コード例 #14
0
bool Scripting::reloadPlugin(const QString &pluginName, bool isQuiet) {
    auto actionStr = "reload";
    if (!closePlugin(pluginName, isQuiet)) {
        return pluginActionError(actionStr, pluginName, "close failed", isQuiet);
    }
    if (isPluginImported(pluginName))  {
        if (!evalScript(QString("reload(%1) != None").arg(getImportInContainerStr(pluginName)), Py_eval_input).toBool()) {
            return pluginActionError(actionStr, pluginName, "reload failed", isQuiet);
        }
    }
    if (!openPlugin(pluginName, isQuiet)) {
        return pluginActionError(actionStr, pluginName, "open failed", isQuiet);
    }
    return true;
}
コード例 #15
0
Scripting::Scripting() : _ctx{[](){
        PythonQtInit();
        return PythonQt::self()->getMainModule();
    }()} {
    state->scripting = this;

    PythonQt::self()->registerClass(&EmitOnCtorDtor::staticMetaObject);

    evalScript("import sys");
    evalScript("sys.argv = ['']");  // <- this is needed to import the ipython module from the site-package
#ifdef Q_OS_OSX
    // as ipython does not export it's sys paths after the installation we refer to that site-package
    evalScript("sys.path.append('/Library/Python/2.7/site-packages')");
#endif
    PythonQt::self()->createModuleFromScript(SCRIPTING_KNOSSOS_MODULE);
    evalScript(QString("import %1").arg(SCRIPTING_KNOSSOS_MODULE));

    evalScript(QString("%1.%2 = {}").arg(SCRIPTING_KNOSSOS_MODULE).arg(SCRIPTING_PLUGIN_CONTAINER));

    addObject("signalRelay", state->signalRelay);
    addObject("knossos", &pythonProxy);
    addObject("scripting", this);
    addObject("segmentation", &segmentationProxy);
    addObject("skeleton", &skeletonProxy);
    addObject("knossos_global_viewer", state->viewer);
    addObject("knossos_global_mainwindow", state->viewer->window);
    addObject("knossos_global_skeletonizer", &Skeletonizer::singleton());
    addObject("knossos_global_segmentation", &Segmentation::singleton());
    addObject("knossos_global_loader", &Loader::Controller::singleton());
    addVariable("GL_POINTS", GL_POINTS);
    addVariable("GL_LINES", GL_LINES);
    addVariable("GL_LINE_STRIP", GL_LINE_STRIP);
    addVariable("GL_LINE_LOOP", GL_LINE_LOOP);
    addVariable("GL_TRIANGLES", GL_TRIANGLES);
    addVariable("GL_TRIANGLES_STRIP", GL_TRIANGLE_STRIP);
    addVariable("GL_TRIANGLE_FAN", GL_TRIANGLE_FAN);
    addVariable("GL_QUADS", GL_QUADS);
    addVariable("GL_QUAD_STRIP", GL_QUAD_STRIP);
    addVariable("GL_POLYGON", GL_POLYGON);
    addWidgets();

    auto makeDecorator = [](QObject * decorator, const char * typeName){
        // PythonQt tries to reparent the decorators, we do their missing work of pushing it into their thread first
        // due to the QObject handling they also get deleted by PythonQt then
        decorator->moveToThread(PythonQt::self()->thread());
        PythonQt::self()->addDecorators(decorator);
        PythonQt::self()->registerCPPClass(typeName, "", "internal");
    };
    makeDecorator(new CoordinateDecorator, "Coordinate");
    makeDecorator(new FloatCoordinateDecorator, "floatCoordinate");
    makeDecorator(new NodeListDecorator, "Node");
    makeDecorator(new SegmentListDecorator, "Segment");
    makeDecorator(new TreeListDecorator, "Tree");

    createDefaultPluginDir();
    addPythonPath(getPluginDir());
    addPresetCustomPythonPaths();

#ifdef Q_OS_LINUX //in linux there’s an explicit symlink to a python 2 binary
    _ctx.evalFile(QString("sys.path.append('%1')").arg("./python2"));
#else
    _ctx.evalFile(QString("sys.path.append('%1')").arg("./python"));
#endif

    changeWorkingDirectory();
    executeResourceStartup();
    executeFromUserDirectory();

    QObject::connect(&state->scripting->pythonProxy, &PythonProxy::viewport_snapshot, &state->viewer->window->widgetContainer.snapshotWidget, &SnapshotWidget::snapshotRequest);
    state->viewer->window->widgetContainer.pythonInterpreterWidget.startConsole();
}
コード例 #16
0
bool Scripting::isPluginActive(const QString &pluginName) {
    return evalScript(QString("%1.isActiveWindow").arg(getInstanceInContainerStr(pluginName)), Py_eval_input).toBool();
}
コード例 #17
0
bool Scripting::isPluginVisible(const QString &pluginName) {
    if (!isPluginOpen(pluginName)) {
        return false;
    }
    return evalScript(QString("%1.isVisible()").arg(getInstanceInContainerStr(pluginName)), Py_eval_input).toBool();
}
コード例 #18
0
void Scripting::moveSymbolIntoKnossosModule(const QString& name) {
    evalScript(QString("%1.%2 = %2; del %2").arg(SCRIPTING_KNOSSOS_MODULE).arg(name));
}