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(QLatin1String(
"namespace")).toString();
57 const QString argsAttr =
attributes.value(QLatin1String(
"Args"));
58 if (!argsAttr.isEmpty()) {
59 d->numberOfArgs = qint8(argsAttr.toInt());
62 const QString capturesAttr =
attributes.value(QLatin1String(
"CaptureArgs"));
63 if (!capturesAttr.isEmpty()) {
64 d->numberOfCaptures = qint8(capturesAttr.toInt());
77 return d->attributes.value(
name, defaultValue);
89 return QString::fromLatin1(d->controller->metaObject()->className());
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) {
151 ret = d->method.invoke(d->controller,
152 Qt::DirectConnection,
153 Q_RETURN_ARG(
bool, methodRet),
155 Q_ARG(QStringList, c->request()->args()));
157 QStringList args = c->request()->args();
159 args.append(d->emptyArgs);
161 ret = d->method.invoke(d->controller,
162 Qt::DirectConnection,
163 Q_RETURN_ARG(
bool, methodRet),
165 Q_ARG(QString, args.at(0)),
166 Q_ARG(QString, args.at(1)),
167 Q_ARG(QString, args.at(2)),
168 Q_ARG(QString, args.at(3)),
169 Q_ARG(QString, args.at(4)),
170 Q_ARG(QString, args.at(5)),
171 Q_ARG(QString, args.at(6)),
172 Q_ARG(QString, args.at(7)),
173 Q_ARG(QString, args.at(8)));
187 if (d->listSignature) {
188 ret = d->method.invoke(d->controller,
189 Qt::DirectConnection,
191 Q_ARG(QStringList, c->request()->args()));
193 QStringList args = c->request()->args();
195 args.append(d->emptyArgs);
197 ret = d->method.invoke(d->controller,
198 Qt::DirectConnection,
200 Q_ARG(QString, args.at(0)),
201 Q_ARG(QString, args.at(1)),
202 Q_ARG(QString, args.at(2)),
203 Q_ARG(QString, args.at(3)),
204 Q_ARG(QString, args.at(4)),
205 Q_ARG(QString, args.at(5)),
206 Q_ARG(QString, args.at(6)),
207 Q_ARG(QString, args.at(7)),
208 Q_ARG(QString, args.at(8)));
227 const QStringList args = c->request()->args();
229 if (d->evaluateBool) {
232 if (d->listSignature) {
233 ret = d->method.invoke(
234 d->controller, Qt::DirectConnection, qReturnArg(methodRet), c, args);
236 switch (d->method.parameterCount()) {
238 ret = d->method.invoke(d->controller, Qt::DirectConnection, qReturnArg(methodRet));
242 d->method.invoke(d->controller, Qt::DirectConnection, qReturnArg(methodRet), c);
245 ret = d->method.invoke(
246 d->controller, Qt::DirectConnection, qReturnArg(methodRet), c, args.value(0));
249 ret = d->method.invoke(d->controller,
250 Qt::DirectConnection,
251 qReturnArg(methodRet),
257 ret = d->method.invoke(d->controller,
258 Qt::DirectConnection,
259 qReturnArg(methodRet),
266 ret = d->method.invoke(d->controller,
267 Qt::DirectConnection,
268 qReturnArg(methodRet),
276 ret = d->method.invoke(d->controller,
277 Qt::DirectConnection,
278 qReturnArg(methodRet),
287 ret = d->method.invoke(d->controller,
288 Qt::DirectConnection,
289 qReturnArg(methodRet),
299 ret = d->method.invoke(d->controller,
300 Qt::DirectConnection,
301 qReturnArg(methodRet),
312 ret = d->method.invoke(d->controller,
313 Qt::DirectConnection,
314 qReturnArg(methodRet),
326 ret = d->method.invoke(d->controller,
327 Qt::DirectConnection,
328 qReturnArg(methodRet),
354 if (d->listSignature) {
355 ret = d->method.invoke(d->controller, Qt::DirectConnection, c, args);
357 switch (d->method.parameterCount()) {
359 ret = d->method.invoke(d->controller, Qt::DirectConnection);
362 ret = d->method.invoke(d->controller, Qt::DirectConnection, c);
365 ret = d->method.invoke(d->controller, Qt::DirectConnection, c, args.value(0));
368 ret = d->method.invoke(
369 d->controller, Qt::DirectConnection, c, args.value(0), args.value(1));
372 ret = d->method.invoke(d->controller,
373 Qt::DirectConnection,
380 ret = d->method.invoke(d->controller,
381 Qt::DirectConnection,
389 ret = d->method.invoke(d->controller,
390 Qt::DirectConnection,
399 ret = d->method.invoke(d->controller,
400 Qt::DirectConnection,
410 ret = d->method.invoke(d->controller,
411 Qt::DirectConnection,
422 ret = d->method.invoke(d->controller,
423 Qt::DirectConnection,
435 ret = d->method.invoke(d->controller,
436 Qt::DirectConnection,
457#include "moc_action.cpp"
This class represents a Cutelyst Action.
void setAttributes(const ParamsMultiMap &attributes)
void setupAction(const QVariantHash &args, Application *app)
virtual qint8 numberOfArgs() const noexcept
QString ns() const noexcept
virtual bool doExecute(Context *c) override
virtual qint8 numberOfCaptures() const noexcept
QString className() const
virtual bool match(int numberOfArgs) const noexcept
void setMethod(const QMetaMethod &method)
Action(QObject *parent=nullptr)
virtual Modifiers modifiers() const override
virtual bool matchCaptures(int numberOfCaptures) const noexcept
ParamsMultiMap attributes() const noexcept
void setController(Controller *controller)
Controller * controller() const
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)
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