6 #include "controller.h"
22 return Component::OnlyExecute;
29 if (method.returnType() == QMetaType::Bool) {
30 d->evaluateBool =
true;
33 if (method.parameterCount() == 2 && method.parameterType(1) == QMetaType::QStringList) {
34 d->listSignature =
true;
50 d->ns = args.value(QLatin1String(
"namespace")).toString();
55 const QString argsAttr =
attributes.value(QLatin1String(
"Args"));
56 if (!argsAttr.isEmpty()) {
57 d->numberOfArgs = qint8(argsAttr.toInt());
60 const QString capturesAttr =
attributes.value(QLatin1String(
"CaptureArgs"));
61 if (!capturesAttr.isEmpty()) {
62 d->numberOfCaptures = qint8(capturesAttr.toInt());
75 return d->attributes.value(
name, defaultValue);
87 return QString::fromLatin1(d->controller->metaObject()->className());
103 return d->numberOfArgs == -1 || d->numberOfArgs == numberOfArgs;
113 return d->numberOfCaptures == -1 || d->numberOfCaptures == numberOfCaptures;
125 return d->numberOfArgs;
131 return d->numberOfCaptures;
142 if (d->evaluateBool) {
145 if (d->listSignature) {
146 ret = d->method.invoke(d->controller,
147 Qt::DirectConnection,
148 Q_RETURN_ARG(
bool, methodRet),
150 Q_ARG(QStringList, c->request()->args()));
152 QStringList args = c->request()->args();
154 args.append(d->emptyArgs);
156 ret = d->method.invoke(d->controller,
157 Qt::DirectConnection,
158 Q_RETURN_ARG(
bool, methodRet),
160 Q_ARG(QString, args.at(0)),
161 Q_ARG(QString, args.at(1)),
162 Q_ARG(QString, args.at(2)),
163 Q_ARG(QString, args.at(3)),
164 Q_ARG(QString, args.at(4)),
165 Q_ARG(QString, args.at(5)),
166 Q_ARG(QString, args.at(6)),
167 Q_ARG(QString, args.at(7)),
168 Q_ARG(QString, args.at(8)));
182 if (d->listSignature) {
183 ret = d->method.invoke(d->controller,
184 Qt::DirectConnection,
186 Q_ARG(QStringList, c->request()->args()));
188 QStringList args = c->request()->args();
190 args.append(d->emptyArgs);
192 ret = d->method.invoke(d->controller,
193 Qt::DirectConnection,
195 Q_ARG(QString, args.at(0)),
196 Q_ARG(QString, args.at(1)),
197 Q_ARG(QString, args.at(2)),
198 Q_ARG(QString, args.at(3)),
199 Q_ARG(QString, args.at(4)),
200 Q_ARG(QString, args.at(5)),
201 Q_ARG(QString, args.at(6)),
202 Q_ARG(QString, args.at(7)),
203 Q_ARG(QString, args.at(8)));
210 #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