]> git.sven.stormbind.net Git - sven/vym.git/blobdiff - src/scripting.cpp
New upstream version 2.9.22
[sven/vym.git] / src / scripting.cpp
diff --git a/src/scripting.cpp b/src/scripting.cpp
new file mode 100644 (file)
index 0000000..788d8df
--- /dev/null
@@ -0,0 +1,157 @@
+#include "scripting.h"
+
+#include "branchitem.h"
+#include "confluence-agent.h"
+#include "imageitem.h"
+#include "mainwindow.h"
+#include "misc.h"
+#include "vymmodelwrapper.h"
+#include "vymtext.h"
+#include "xlink.h"
+
+extern Main *mainWindow;
+extern QString vymVersion;
+
+///////////////////////////////////////////////////////////////////////////
+void logError(QScriptContext *context, QScriptContext::Error error,
+              const QString &text)
+{
+    if (context)
+        context->throwError(error, text);
+    else
+        qDebug() << "VymWrapper: " << text;
+}
+
+///////////////////////////////////////////////////////////////////////////
+VymScriptContext::VymScriptContext() {}
+
+QString VymScriptContext::setResult(const QString &r)
+{
+    context()->engine()->globalObject().setProperty("lastResult", r);
+    return r;
+}
+
+bool VymScriptContext::setResult(bool r)
+{
+    context()->engine()->globalObject().setProperty("lastResult", r);
+    return r;
+}
+
+int VymScriptContext::setResult(int r)
+{
+    context()->engine()->globalObject().setProperty("lastResult", r);
+    return r;
+}
+
+uint VymScriptContext::setResult(uint r)
+{
+    context()->engine()->globalObject().setProperty("lastResult", r);
+    return r;
+}
+
+///////////////////////////////////////////////////////////////////////////
+VymWrapper::VymWrapper() {}
+
+void VymWrapper::clearConsole() { mainWindow->clearScriptOutput(); }
+
+bool VymWrapper::isConfluenceAgentAvailable()
+{
+    return ConfluenceAgent::available();
+}
+
+QObject *VymWrapper::currentMap()
+{
+    return mainWindow->getCurrentModelWrapper();
+}
+
+void VymWrapper::editHeading()
+{
+    MapEditor *me = mainWindow->currentMapEditor();
+    if (me) me->editHeading();
+}
+
+bool VymWrapper::loadMap(const QString &filename)
+{
+    bool r;
+    if (File::Success == mainWindow->fileLoad(filename, NewMap, VymMap))
+        r = true;
+    else
+        r = false;
+    return setResult(r);
+}
+
+int VymWrapper::mapCount()
+{
+    context()->engine()->globalObject().setProperty("lastResult",
+                                                    mainWindow->modelCount());
+    return setResult(mainWindow->modelCount());
+}
+
+void VymWrapper::gotoMap(uint n)
+{
+    if (!mainWindow->gotoWindow(n)) {
+        logError(context(), QScriptContext::RangeError,
+                 QString("Map '%1' not available.").arg(n));
+    }
+}
+
+bool VymWrapper::closeMapWithID(uint n)
+{
+    bool r = mainWindow->closeModelWithID(n);
+    if (!r)
+        logError(context(), QScriptContext::RangeError,
+                 QString("Map '%1' not available.").arg(n));
+    return setResult(r);
+}
+
+void VymWrapper::selectQuickColor(int n)
+{
+    mainWindow->selectQuickColor(n);
+}
+
+QString VymWrapper::currentColor()
+{
+    return mainWindow->getCurrentColor().name();
+}
+
+uint VymWrapper::currentMapID()
+{
+    uint id = mainWindow->currentMapID();
+    return setResult(id);
+}
+
+void VymWrapper::toggleTreeEditor() { mainWindow->windowToggleTreeEditor(); }
+
+QString VymWrapper::loadFile(
+    const QString
+        &filename) // FIXME-3 error handling missing (in vymmodel and here)
+{
+    QString s;
+    loadStringFromDisk(filename, s);
+    return s;
+}
+
+void VymWrapper::saveFile(
+    const QString &filename,
+    const QString &s) // FIXME-3 error handling missing (in vymmodel and here)
+{
+    saveStringToDisk(filename, s);
+}
+
+QString VymWrapper::version() { return setResult(vymVersion); }
+
+// See also http://doc.qt.io/qt-5/qscriptengine.html#newFunction
+Selection::Selection() { modelWrapper = NULL; }
+
+void Selection::test()
+{
+    qDebug() << "Selection::testSelection called"; // TODO debug
+    if (modelWrapper)
+        modelWrapper->setHeadingPlainText("huhu!");
+}
+
+void Selection::setModel(VymModelWrapper *mw)
+{
+    qDebug() << "Selection::setModel called: " << mw; // TODO debug
+    modelWrapper = mw;
+}