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
Sets the state of the current executed action, setting to false will make the dispatcher skip non pro...
bool detached() const noexcept
Cutelyst Controller base class
The Cutelyst namespace holds all public Cutelyst API.
QMultiMap< QString, QString > ParamsMultiMap