11using namespace Qt::Literals::StringLiterals;
25 return Component::OnlyExecute;
32 if (method.returnType() == QMetaType::Bool) {
33 d->evaluateBool =
true;
36 if (method.parameterCount() == 2 && method.parameterType(1) == QMetaType::QStringList) {
37 d->listSignature =
true;
53 d->ns = args.value(u
"namespace"_s).toString();
58 const QString argsAttr =
attributes.value(u
"Args"_s);
59 if (!argsAttr.isEmpty()) {
60 d->numberOfArgs = qint8(argsAttr.toInt());
63 const QString capturesAttr =
attributes.value(u
"CaptureArgs"_s);
64 if (!capturesAttr.isEmpty()) {
65 d->numberOfCaptures = qint8(capturesAttr.toInt());
78 return d->attributes.value(
name, defaultValue);
90 return d->controller->objectName();
106 return d->numberOfArgs == -1 || d->numberOfArgs == numberOfArgs;
116 return d->numberOfCaptures == -1 || d->numberOfCaptures == numberOfCaptures;
128 return d->numberOfArgs;
134 return d->numberOfCaptures;
146#if (QT_VERSION < QT_VERSION_CHECK(6, 5, 0))
148 if (d->evaluateBool) {
151 if (d->listSignature) {
153 ret = d->method.invoke(d->controller,
154 Qt::DirectConnection,
155 Q_RETURN_ARG(
bool, methodRet),
157 Q_ARG(QStringList, c->
request()->args()));
160 QStringList args = c->
request()->args();
162 args.append(d->emptyArgs);
165 ret = d->method.invoke(d->controller,
166 Qt::DirectConnection,
167 Q_RETURN_ARG(
bool, methodRet),
169 Q_ARG(QString, args.at(0)),
170 Q_ARG(QString, args.at(1)),
171 Q_ARG(QString, args.at(2)),
172 Q_ARG(QString, args.at(3)),
173 Q_ARG(QString, args.at(4)),
174 Q_ARG(QString, args.at(5)),
175 Q_ARG(QString, args.at(6)),
176 Q_ARG(QString, args.at(7)),
177 Q_ARG(QString, args.at(8)));
192 if (d->listSignature) {
194 ret = d->method.invoke(d->controller,
195 Qt::DirectConnection,
197 Q_ARG(QStringList, c->
request()->args()));
200 QStringList args = c->
request()->args();
202 args.append(d->emptyArgs);
205 ret = d->method.invoke(d->controller,
206 Qt::DirectConnection,
208 Q_ARG(QString, args.at(0)),
209 Q_ARG(QString, args.at(1)),
210 Q_ARG(QString, args.at(2)),
211 Q_ARG(QString, args.at(3)),
212 Q_ARG(QString, args.at(4)),
213 Q_ARG(QString, args.at(5)),
214 Q_ARG(QString, args.at(6)),
215 Q_ARG(QString, args.at(7)),
216 Q_ARG(QString, args.at(8)));
236 const QStringList args = c->
request()->args();
238 if (d->evaluateBool) {
241 if (d->listSignature) {
242 ret = d->method.invoke(
243 d->controller, Qt::DirectConnection, qReturnArg(methodRet), c, args);
245 switch (d->method.parameterCount()) {
247 ret = d->method.invoke(d->controller, Qt::DirectConnection, qReturnArg(methodRet));
251 d->method.invoke(d->controller, Qt::DirectConnection, qReturnArg(methodRet), c);
254 ret = d->method.invoke(
255 d->controller, Qt::DirectConnection, qReturnArg(methodRet), c, args.value(0));
258 ret = d->method.invoke(d->controller,
259 Qt::DirectConnection,
260 qReturnArg(methodRet),
266 ret = d->method.invoke(d->controller,
267 Qt::DirectConnection,
268 qReturnArg(methodRet),
275 ret = d->method.invoke(d->controller,
276 Qt::DirectConnection,
277 qReturnArg(methodRet),
285 ret = d->method.invoke(d->controller,
286 Qt::DirectConnection,
287 qReturnArg(methodRet),
296 ret = d->method.invoke(d->controller,
297 Qt::DirectConnection,
298 qReturnArg(methodRet),
308 ret = d->method.invoke(d->controller,
309 Qt::DirectConnection,
310 qReturnArg(methodRet),
321 ret = d->method.invoke(d->controller,
322 Qt::DirectConnection,
323 qReturnArg(methodRet),
335 ret = d->method.invoke(d->controller,
336 Qt::DirectConnection,
337 qReturnArg(methodRet),
363 if (d->listSignature) {
364 ret = d->method.invoke(d->controller, Qt::DirectConnection, c, args);
366 switch (d->method.parameterCount()) {
368 ret = d->method.invoke(d->controller, Qt::DirectConnection);
371 ret = d->method.invoke(d->controller, Qt::DirectConnection, c);
374 ret = d->method.invoke(d->controller, Qt::DirectConnection, c, args.value(0));
377 ret = d->method.invoke(
378 d->controller, Qt::DirectConnection, c, args.value(0), args.value(1));
381 ret = d->method.invoke(d->controller,
382 Qt::DirectConnection,
389 ret = d->method.invoke(d->controller,
390 Qt::DirectConnection,
398 ret = d->method.invoke(d->controller,
399 Qt::DirectConnection,
408 ret = d->method.invoke(d->controller,
409 Qt::DirectConnection,
419 ret = d->method.invoke(d->controller,
420 Qt::DirectConnection,
431 ret = d->method.invoke(d->controller,
432 Qt::DirectConnection,
444 ret = d->method.invoke(d->controller,
445 Qt::DirectConnection,
466#include "moc_action.cpp"
This class represents a Cutelyst Action.
void setAttributes(const ParamsMultiMap &attributes)
void setupAction(const QVariantHash &args, Application *app)
QString ns() const noexcept
virtual qint8 numberOfArgs() const
bool doExecute(Context *c) override
virtual bool match(int numberOfArgs) const noexcept
void setMethod(const QMetaMethod &method)
QString className() const noexcept
Action(QObject *parent=nullptr)
virtual qint8 numberOfCaptures() const
virtual Modifiers modifiers() const override
virtual bool matchCaptures(int numberOfCaptures) const noexcept
ParamsMultiMap attributes() const noexcept
Controller * controller() const noexcept
void setController(Controller *controller)
QString attribute(const QString &name, const QString &defaultValue={}) const
The Cutelyst application.
The Cutelyst Component base class.
virtual bool init(Application *application, const QVariantHash &args)
QString name() const noexcept
void detach(Action *action=nullptr)
void setState(bool state) noexcept
bool detached() const noexcept
Cutelyst Controller base class.
QMultiMap< QString, QString > ParamsMultiMap
The Cutelyst namespace holds all public Cutelyst API.