Krita Source Code Documentation
Loading...
Searching...
No Matches
main.cpp File Reference
#include <cstdlib>
#include <QString>
#include <QCommandLineParser>
#include <QCommandLineOption>
#include "PythonPluginManager.h"
#include <KisApplication.h>
#include <opengl/kis_opengl.h>

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 26 of file main.cpp.

27{
28 KLocalizedString::setApplicationDomain("kritarunner");
29 QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true);
31
32
33 // first create the application so we can create a pixmap
34 KisApplication app("kritarunner", argc, argv);
35 app.setApplicationDisplayName("Krita Script Runner");
36 app.setApplicationName("kritarunner");
37 app.setOrganizationDomain("krita.org");
38
39 QCommandLineParser parser;
40 parser.setApplicationDescription("kritarunner executes one python script and then returns.");
41 parser.addVersionOption();
42 parser.addHelpOption();
43
44 QCommandLineOption scriptOption(QStringList() << "s" << "script", "The script to run. Do not append the .py extension.", "script");
45 parser.addOption(scriptOption);
46
47 QCommandLineOption functionOption(QStringList() << "f" << "function",
48 "The function to call (by default __main__ is called).", "function", "__main__");
49 parser.addOption(functionOption);
50
51 parser.addPositionalArgument("[argument(s)]", "The arguments for the script");
52 parser.process(app);
53
54 if (!parser.isSet(scriptOption)) {
55 qDebug("No script given, aborting.");
56 return 1;
57 }
58
59 qDebug() << "running:" << parser.value(scriptOption) << parser.value(functionOption);
60 qDebug() << parser.positionalArguments();
61
62 app.addResourceTypes();
63 app.registerResources();
64 app.loadPlugins();
65
66
67 QByteArray pythonPath = qgetenv("PYTHONPATH");
68 qDebug() << "\tPython path:" << pythonPath;
69
70 qDebug() << "Creating engine";
71
72 // TODO: refactor to share common parts with plugin.cpp
73
75
76 switch (initResult) {
78 break;
80 qWarning() << i18n("Cannot load Python library");
81 return 1;
83 qWarning() << i18n("Cannot set Python paths");
84 return 1;
86 qWarning() << i18n("Cannot load built-in pykrita module");
87 return 1;
88 default:
89 qWarning() << i18n("Unexpected error initializing python plugin.");
90 return 1;
91 }
92
93 qDebug() << "Try to import the pykrita module";
95 PyObject* pykritaPackage = py.moduleImport("pykrita");
96 pykritaPackage = py.moduleImport("krita");
97
98 if (!pykritaPackage) {
99 qDebug("Cannot load the PyKrita module, aborting");
100 return 1;
101 }
102
103 PyObject *argsList = PyList_New(0);
104 Q_FOREACH(const QString arg, parser.positionalArguments()) {
105 PyObject* const u = py.unicode(arg);
106 PyList_Append(argsList, u);
107 Py_DECREF(u);
108 }
109
110 PyObject *args = PyTuple_New(1);
111 PyTuple_SetItem(args, 0, argsList);
112
113 py.functionCall(parser.value(functionOption).toUtf8().constData(), parser.value(scriptOption).toUtf8().constData(), args);
114
115 Py_DECREF(argsList);
116 Py_DECREF(args);
117
118 app.quit();
119 return 0;
120}
qreal u
QList< QString > QStringList
Base class for the Krita app.
static void testingInitializeDefaultSurfaceFormat()
static PyObject * unicode(const QString &string)
Convert a QString to a Python unicode object.
bool functionCall(const char *functionName, const char *moduleName=PYKRITA_ENGINE)
PyObject * moduleImport(const char *moduleName)
@ INIT_CANNOT_LOAD_PYKRITA_MODULE
Definition utilities.h:32
@ INIT_CANNOT_LOAD_PYTHON_LIBRARY
Definition utilities.h:30
@ INIT_CANNOT_SET_PYTHON_PATHS
Definition utilities.h:31
@ INIT_OK
Definition utilities.h:29
InitResult initialize()
Definition utilities.cpp:44

References PyKrita::Python::functionCall(), PyKrita::INIT_CANNOT_LOAD_PYKRITA_MODULE, PyKrita::INIT_CANNOT_LOAD_PYTHON_LIBRARY, PyKrita::INIT_CANNOT_SET_PYTHON_PATHS, PyKrita::INIT_OK, PyKrita::initialize(), PyKrita::Python::moduleImport(), KisOpenGL::testingInitializeDefaultSurfaceFormat(), u, and PyKrita::Python::unicode().