65{
66 QCommandLineParser parser;
67 parser.addVersionOption();
68 parser.addHelpOption();
69 parser.addOption(QCommandLineOption(
QStringList() << QLatin1String(
"template"), i18n(
"Open a new document with a template")));
70 parser.addOption(QCommandLineOption(
QStringList() << QLatin1String(
"new-image"), i18n(
"Create a new image.\n"
71 "Possible colorspace values are:\n"
72 " * RGBA\n"
73 " * XYZA\n"
74 " * LABA\n"
75 " * CMYKA\n"
76 " * GRAY\n"
77 " * YCbCrA\n"
78 "Possible channel depth arguments are\n"
79 " * U8 (8 bits integer)\n"
80 " * U16 (16 bits integer)\n"
81 " * F16 (16 bits floating point)\n"
82 " * F32 (32 bits floating point)\n"),
83 QLatin1String("colorspace,depth,width,height")));
84 parser.addOption(QCommandLineOption(
QStringList() << QLatin1String(
"workspace"), i18n(
"The name of the workspace to open Krita with"), QLatin1String(
"workspace")));
85 parser.addOption(QCommandLineOption(
QStringList() << QLatin1String(
"windowlayout"), i18n(
"The name of the window layout to open Krita with"), QLatin1String(
"windowlayout")));
86 parser.addOption(QCommandLineOption(
QStringList() << QLatin1String(
"load-session"), i18n(
"The name of the session to open Krita with"), QLatin1String(
"load-session")));
87 parser.addOption(QCommandLineOption(
QStringList() << QLatin1String(
"canvasonly"), i18n(
"Start Krita in canvas-only mode")));
88 parser.addOption(QCommandLineOption(
QStringList() << QLatin1String(
"nosplash"), i18n(
"Do not show the splash screen")));
89 parser.addOption(QCommandLineOption(
QStringList() << QLatin1String(
"fullscreen"), i18n(
"Start Krita in full-screen mode")));
90 {
91 QCommandLineOption opt(
QStringList() << QLatin1String(
"dpi"), i18n(
"Override display DPI"), QLatin1String(
"dpiX,dpiY"));
92 opt.setFlags(QCommandLineOption::HiddenFromHelp);
93 parser.addOption(opt);
94 }
95 parser.addOption(QCommandLineOption(
QStringList() << QLatin1String(
"export"), i18n(
"Export to the given filename and exit")));
96 parser.addOption(QCommandLineOption(
QStringList() << QLatin1String(
"export-sequence"), i18n(
"Export animation to the given filename and exit")));
97 parser.addOption(QCommandLineOption(
QStringList() << QLatin1String(
"export-filename"), i18n(
"Filename for export"), QLatin1String(
"filename")));
98 parser.addOption(QCommandLineOption(
QStringList() << QLatin1String(
"file-layer"), i18n(
"File layer to be added to existing or new file"), QLatin1String(
"file-layer")));
99 parser.addOption(QCommandLineOption(
QStringList() << QLatin1String(
"resource-location"), i18n(
"A location that overrides the configured location for Krita's resources"), QLatin1String(
"file-layer")));
100 parser.addPositionalArgument(QLatin1String("[file(s)]"), i18n("File(s) or URL(s) to open"));
101
103 {
104 auto checkIsIgnoreEpic = [](const QString &arg) {
105
107 QStringLiteral("AUTH_PASSWORD="),
108 QStringLiteral("AUTH_LOGIN="),
109 QStringLiteral("AUTH_TYPE="),
110 QStringLiteral("epicapp="),
111 QStringLiteral("epicenv="),
112 QStringLiteral("epicusername="),
113 QStringLiteral("epicuserid="),
114 QStringLiteral("epiclocale="),
115 QStringLiteral("epicsandboxid="),
116 };
118 QStringLiteral("EpicPortal"),
119 };
120#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
121 QStringRef argDashless(&arg);
122#else
123 QStringView argDashless(arg);
124#endif
125
126 while (argDashless.startsWith('-')) {
127 argDashless = argDashless.mid(1);
128 }
129 Q_FOREACH(const auto &argToIgnore, epicIgnoreArgsStart) {
130 if (argDashless.startsWith(argToIgnore, Qt::CaseInsensitive)) {
131 return true;
132 }
133 }
134 Q_FOREACH(const auto &argToIgnore, epicIgnoreArgsExact) {
135 if (argDashless.compare(argToIgnore, Qt::CaseInsensitive) == 0) {
136 return true;
137 }
138 }
139 return false;
140 };
141
142 QStringListIterator iter(
app.arguments());
143 if (iter.hasNext()) {
144
145 filteredArgs.append(iter.next());
146
147 bool isAfterDoubleDash = false;
148 while (iter.hasNext()) {
149 QString arg = iter.next();
150 if (arg == QLatin1String("--")) {
151 isAfterDoubleDash = true;
152 }
153 if (isAfterDoubleDash || !checkIsIgnoreEpic(arg)) {
154 filteredArgs.append(arg);
155 }
156 }
157 }
158 }
159
160 parser.process(filteredArgs);
161
162 QString dpiValues = parser.value("dpi");
163 if (!dpiValues.isEmpty()) {
164 qWarning() << "The `dpi` argument does nothing!";
165 }
166
167 QString newImageValues = parser.value("new-image");
168 d->newImage = !newImageValues.isEmpty();
173 qWarning() << "Cannot create a new image: please specify colormodel, depth, width and height.";
174 }
175 d->colorModel =
v[0].toUpper();
176 d->colorDepth =
v[1].toUpper();
177 d->width =
v[2].toInt();
178 d->height =
v[3].toInt();
179 }
180
181 d->fileLayer = parser.value(
"file-layer");
182 d->exportFileName = parser.value(
"export-filename");
183 d->workspace = parser.value(
"workspace");
184 d->windowLayout = parser.value(
"windowlayout");
185 d->session = parser.value(
"load-session");
186 d->doTemplate = parser.isSet(
"template");
187 d->exportAs = parser.isSet(
"export");
188 d->exportSequence = parser.isSet(
"export-sequence");
189 d->canvasOnly = parser.isSet(
"canvasonly");
190 d->noSplash = parser.isSet(
"nosplash");
191 d->fullScreen = parser.isSet(
"fullscreen");
192
194
195 const QDir currentDir = QDir::current();
196 Q_FOREACH (const QString &filename, parser.positionalArguments()) {
197 d->filenames << currentDir.absoluteFilePath(filename);
198 }
199}
QList< QString > QStringList
static QString s_overrideAppDataLocation
getAppDataLocation Use this instead of QStandardPaths::AppDataLocation! The user can configure the lo...
const QScopedPointer< Private > d