cutelyst 3.9.1
A C++ Web Framework built on top of Qt, using the simple approach of Catalyst (Perl) framework.
context.h
1/*
2 * SPDX-FileCopyrightText: (C) 2013-2022 Daniel Nicoletti <dantti12@gmail.com>
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5#ifndef CUTELYST_CONTEXT_H
6#define CUTELYST_CONTEXT_H
7
8#include <Cutelyst/async.h>
9#include <Cutelyst/cutelyst_global.h>
10#include <Cutelyst/request.h>
11
12#include <QtCore/QObject>
13#include <QtCore/QStack>
14#include <QtCore/QStringList>
15#include <QtCore/QUrl>
16#include <QtCore/QVariant>
17
18namespace Cutelyst {
19
20class Action;
21class Application;
22class Component;
23class Engine;
24class Response;
25class Dispatcher;
26class Controller;
27class View;
28class Stats;
29class Plugin;
30class ContextPrivate;
31
38class CUTELYST_LIBRARY Context : public QObject
39{
41 Q_PROPERTY(Action *action READ action CONSTANT)
42 Q_PROPERTY(QString actionName READ actionName CONSTANT)
43 Q_PROPERTY(QString ns READ ns CONSTANT)
44 Q_PROPERTY(QString namespace READ ns CONSTANT)
45 Q_PROPERTY(Request *req READ request CONSTANT)
46 Q_PROPERTY(Request *request READ request CONSTANT)
47 Q_PROPERTY(Controller *controller READ controller CONSTANT)
48 Q_PROPERTY(QString controllerName READ controllerName CONSTANT)
49 Q_PROPERTY(QVariantMap config READ config CONSTANT)
50 Q_PROPERTY(bool state READ state CONSTANT)
51public:
57 Context(Application *app);
58 virtual ~Context();
59
63 bool error() const noexcept;
64
68 void error(const QString &error);
69
73 QStringList errors() const noexcept;
74
78 bool state() const noexcept;
79
84 void setState(bool state) noexcept;
85
89 Engine *engine() const noexcept;
90
94 Application *app() const noexcept;
95
99 Response *response() const noexcept;
100
104 Response *res() const noexcept;
105
109 Action *action() const noexcept;
110
114 QString actionName() const noexcept;
115
123 QString ns() const noexcept;
124
129 Request *request() const noexcept;
130
134 Request *req() const noexcept;
135
139 Dispatcher *dispatcher() const noexcept;
140
144 QString controllerName() const;
145
149 Controller *controller() const noexcept;
150
155 Controller *controller(const QString &name) const;
156
160 View *view(const QString &name) const;
161
165 View *view(QStringView name = {}) const;
166
172 View *customView() const noexcept;
173
185 bool setCustomView(const QString &name);
186
208 void stash(const QVariantHash &unite);
209
221 QVariantHash &stash();
222
226 QVariant stash(const QString &key) const;
227
231 QVariant stash(const QString &key, const QVariant &defaultValue) const;
232
238 QVariant stashTake(const QString &key);
239
244 bool stashRemove(const QString &key);
245
249 void setStash(const QString &key, const QVariant &value);
250
254 void setStash(const QString &key, const ParamsMultiMap &map);
255
259 QStack<Component *> stack() const noexcept;
260
272 QUrl uriFor(const QString &path = QString(),
273 const QStringList &args = QStringList(),
274 const ParamsMultiMap &queryValues = ParamsMultiMap()) const;
275
286 inline QUrl uriFor(const QString &path, const ParamsMultiMap &queryValues) const;
287
297 QUrl uriFor(Action *action,
298 const QStringList &captures = QStringList(),
299 const QStringList &args = QStringList(),
300 const ParamsMultiMap &queryValues = ParamsMultiMap()) const;
301
307 inline QUrl uriFor(Action *action, const ParamsMultiMap &queryValues) const;
308
332 QUrl uriForAction(const QString &path,
333 const QStringList &captures = QStringList(),
334 const QStringList &args = QStringList(),
335 const ParamsMultiMap &queryValues = ParamsMultiMap()) const;
336
340 inline QUrl uriForAction(const QString &path, const ParamsMultiMap &queryValues) const;
341
346 bool detached() const noexcept;
347
353 void detach(Action *action = nullptr);
354
370 void detachAsync() noexcept;
371
379 void attachAsync();
380
399 bool forward(Component *component);
400
419 bool forward(const QString &action);
420
424 Action *getAction(const QString &action, const QString &ns = {}) const;
425
429 QVector<Action *> getActions(const QString &action, const QString &ns = {}) const;
430
435
439 template <typename T>
441 {
442 const auto pluginsConst = plugins();
443 for (Plugin *plugin : pluginsConst) {
444 auto p = qobject_cast<T>(plugin);
445 if (p) {
446 return p;
447 }
448 }
449 return nullptr;
450 }
451
455 bool execute(Component *code);
456
464 QLocale locale() const noexcept;
465
480 void setLocale(const QLocale &locale);
481
485 QVariant config(const QString &key, const QVariant &defaultValue = {}) const;
486
490 QVariantMap config() const noexcept;
491
505 QString translate(const char *context,
506 const char *sourceText,
507 const char *disambiguation = nullptr,
508 int n = -1) const;
544 inline QString qtTrId(const char *id, int n = -1) const;
545
546public Q_SLOTS:
551 void finalize();
552
553protected:
557 Context(ContextPrivate *priv);
558
559 friend class Application;
560 friend class Action;
561 friend class ActionChain;
562 friend class DispatchType;
563 friend class Plugin;
564 friend class Engine;
565 friend class Controller;
566 friend class Async;
567 ContextPrivate *d_ptr;
568
569private:
570 Q_DECLARE_PRIVATE(Context)
571};
572
573inline QUrl Context::uriFor(const QString &path, const ParamsMultiMap &queryValues) const
574{
575 return uriFor(path, QStringList(), queryValues);
576}
577
578inline QUrl Context::uriFor(Action *action, const ParamsMultiMap &queryValues) const
579{
580 return uriFor(action, QStringList(), QStringList(), queryValues);
581}
582
583inline QUrl Context::uriForAction(const QString &path, const ParamsMultiMap &queryValues) const
584{
585 return uriForAction(path, QStringList(), QStringList(), queryValues);
586}
587
588inline QString Context::qtTrId(const char *id, int n) const
589{
590 return translate(nullptr, id, nullptr, n);
591}
592
593} // namespace Cutelyst
594
595Q_DECLARE_METATYPE(Cutelyst::Context *)
596
597#endif // CUTELYST_CONTEXT_H
This class represents a Cutelyst Action.
Definition action.h:35
The Cutelyst Application.
Definition application.h:43
The Cutelyst Component base class.
Definition component.h:26
The Cutelyst Context.
Definition context.h:39
QVector< Action * > getActions(const QString &action, const QString &ns={}) const
Definition context.cpp:417
QStringList errors() const noexcept
Returns a list of errors that were defined.
Definition context.cpp:66
bool forward(Component *component)
Definition context.cpp:399
void stash(const QVariantHash &unite)
Definition context.cpp:566
QUrl uriFor(const QString &path=QString(), const QStringList &args=QStringList(), const ParamsMultiMap &queryValues=ParamsMultiMap()) const
Definition context.cpp:235
QVector< Plugin * > plugins() const
Definition context.cpp:423
Context(Application *app)
Constructs a new DUMMY Context object that is child of Application This currently is experimental to ...
Definition context.cpp:29
Action * getAction(const QString &action, const QString &ns={}) const
Definition context.cpp:411
void detach(Action *action=nullptr)
Definition context.cpp:345
QStack< Component * > stack() const noexcept
Definition context.cpp:229
void setState(bool state) noexcept
Sets the state of the current executed action, setting to false will make the dispatcher skip non pro...
Definition context.cpp:78
Response * res() const noexcept
Definition context.cpp:102
QString translate(const char *context, const char *sourceText, const char *disambiguation=nullptr, int n=-1) const
Definition context.cpp:490
void setStash(const QString &key, const QVariant &value)
Definition context.cpp:217
bool stashRemove(const QString &key)
Definition context.cpp:211
QVariant stashTake(const QString &key)
Definition context.cpp:205
void attachAsync()
attachAsync
Definition context.cpp:361
QString qtTrId(const char *id, int n=-1) const
Definition context.h:588
View * customView() const noexcept
Definition context.cpp:162
bool detached() const noexcept
Definition context.cpp:339
View * view(const QString &name) const
Definition context.cpp:168
QUrl uriForAction(const QString &path, const QStringList &captures=QStringList(), const QStringList &args=QStringList(), const ParamsMultiMap &queryValues=ParamsMultiMap()) const
Definition context.cpp:321
Dispatcher * dispatcher() const noexcept
Definition context.cpp:138
Application * app() const noexcept
Definition context.cpp:90
void detachAsync() noexcept
Definition context.cpp:355
bool setCustomView(const QString &name)
Definition context.cpp:180
Engine * engine() const noexcept
Definition context.cpp:84
T plugin()
Returns the registered plugin that casts to the template type T.
Definition context.h:440
bool error() const noexcept
Returns true if an error was set.
Definition context.cpp:49
Response * response() const noexcept
Definition context.cpp:96
Cutelyst Controller base class
Definition controller.h:88
The Cutelyst Dispatcher.
Definition dispatcher.h:28
The Cutelyst Engine.
Definition engine.h:21
Cutelyst View abstract view component
Definition view.h:22
The Cutelyst namespace holds all public Cutelyst API.
Definition Mainpage.dox:8
QMultiMap< QString, QString > ParamsMultiMap
QObject(QObject *parent)
Q_OBJECTQ_OBJECT
Q_PROPERTY(...)
T qobject_cast(QObject *object)