24 return Component::OnlyExecute;
31 if (method.returnType() == QMetaType::Bool) {
32 d->evaluateBool =
true;
35 if (method.parameterCount() == 2 && method.parameterType(1) == QMetaType::QStringList) {
36 d->listSignature =
true;
52 d->ns = args.value(u
"namespace"_qs).toString();
57 const QString argsAttr =
attributes.value(u
"Args"_qs);
58 if (!argsAttr.isEmpty()) {
59 d->numberOfArgs = qint8(argsAttr.toInt());
62 const QString capturesAttr =
attributes.value(u
"CaptureArgs"_qs);
63 if (!capturesAttr.isEmpty()) {
64 d->numberOfCaptures = qint8(capturesAttr.toInt());
77 return d->attributes.value(
name, defaultValue);
89 return d->controller->objectName();
105 return d->numberOfArgs == -1 || d->numberOfArgs == numberOfArgs;
115 return d->numberOfCaptures == -1 || d->numberOfCaptures == numberOfCaptures;
127 return d->numberOfArgs;
133 return d->numberOfCaptures;
145#if (QT_VERSION < QT_VERSION_CHECK(6, 5, 0))
147 if (d->evaluateBool) {
150 if (d->listSignature) {
152 ret = d->method.invoke(d->controller,
153 Qt::DirectConnection,
154 Q_RETURN_ARG(
bool, methodRet),
156 Q_ARG(QStringList, c->
request()->args()));
159 QStringList args = c->
request()->args();
161 args.append(d->emptyArgs);
164 ret = d->method.invoke(d->controller,
165 Qt::DirectConnection,
166 Q_RETURN_ARG(
bool, methodRet),
168 Q_ARG(QString, args.at(0)),
169 Q_ARG(QString, args.at(1)),
170 Q_ARG(QString, args.at(2)),
171 Q_ARG(QString, args.at(3)),
172 Q_ARG(QString, args.at(4)),
173 Q_ARG(QString, args.at(5)),
174 Q_ARG(QString, args.at(6)),
175 Q_ARG(QString, args.at(7)),
176 Q_ARG(QString, args.at(8)));
191 if (d->listSignature) {
193 ret = d->method.invoke(d->controller,
194 Qt::DirectConnection,
196 Q_ARG(QStringList, c->
request()->args()));
199 QStringList args = c->
request()->args();
201 args.append(d->emptyArgs);
204 ret = d->method.invoke(d->controller,
205 Qt::DirectConnection,
207 Q_ARG(QString, args.at(0)),
208 Q_ARG(QString, args.at(1)),
209 Q_ARG(QString, args.at(2)),
210 Q_ARG(QString, args.at(3)),
211 Q_ARG(QString, args.at(4)),
212 Q_ARG(QString, args.at(5)),
213 Q_ARG(QString, args.at(6)),
214 Q_ARG(QString, args.at(7)),
215 Q_ARG(QString, args.at(8)));
235 const QStringList args = c->
request()->args();
237 if (d->evaluateBool) {
240 if (d->listSignature) {
241 ret = d->method.invoke(
242 d->controller, Qt::DirectConnection, qReturnArg(methodRet), c, args);
244 switch (d->method.parameterCount()) {
246 ret = d->method.invoke(d->controller, Qt::DirectConnection, qReturnArg(methodRet));
250 d->method.invoke(d->controller, Qt::DirectConnection, qReturnArg(methodRet), c);
253 ret = d->method.invoke(
254 d->controller, Qt::DirectConnection, qReturnArg(methodRet), c, args.value(0));
257 ret = d->method.invoke(d->controller,
258 Qt::DirectConnection,
259 qReturnArg(methodRet),
265 ret = d->method.invoke(d->controller,
266 Qt::DirectConnection,
267 qReturnArg(methodRet),
274 ret = d->method.invoke(d->controller,
275 Qt::DirectConnection,
276 qReturnArg(methodRet),
284 ret = d->method.invoke(d->controller,
285 Qt::DirectConnection,
286 qReturnArg(methodRet),
295 ret = d->method.invoke(d->controller,
296 Qt::DirectConnection,
297 qReturnArg(methodRet),
307 ret = d->method.invoke(d->controller,
308 Qt::DirectConnection,
309 qReturnArg(methodRet),
320 ret = d->method.invoke(d->controller,
321 Qt::DirectConnection,
322 qReturnArg(methodRet),
334 ret = d->method.invoke(d->controller,
335 Qt::DirectConnection,
336 qReturnArg(methodRet),
362 if (d->listSignature) {
363 ret = d->method.invoke(d->controller, Qt::DirectConnection, c, args);
365 switch (d->method.parameterCount()) {
367 ret = d->method.invoke(d->controller, Qt::DirectConnection);
370 ret = d->method.invoke(d->controller, Qt::DirectConnection, c);
373 ret = d->method.invoke(d->controller, Qt::DirectConnection, c, args.value(0));
376 ret = d->method.invoke(
377 d->controller, Qt::DirectConnection, c, args.value(0), args.value(1));
380 ret = d->method.invoke(d->controller,
381 Qt::DirectConnection,
388 ret = d->method.invoke(d->controller,
389 Qt::DirectConnection,
397 ret = d->method.invoke(d->controller,
398 Qt::DirectConnection,
407 ret = d->method.invoke(d->controller,
408 Qt::DirectConnection,
418 ret = d->method.invoke(d->controller,
419 Qt::DirectConnection,
430 ret = d->method.invoke(d->controller,
431 Qt::DirectConnection,
443 ret = d->method.invoke(d->controller,
444 Qt::DirectConnection,
465#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.