cutelyst 4.0.0
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-2023 Daniel Nicoletti <dantti12@gmail.com>
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5#pragma once
6
7#include <Cutelyst/async.h>
8#include <Cutelyst/cutelyst_global.h>
9#include <Cutelyst/request.h>
10
11#include <QtCore/QObject>
12#include <QtCore/QStack>
13#include <QtCore/QStringList>
14#include <QtCore/QUrl>
15#include <QtCore/QVariant>
16
17namespace Cutelyst {
18
19class Action;
20class Application;
21class Component;
22class Engine;
23class Response;
24class Dispatcher;
25class Controller;
26class View;
27class Stats;
28class Plugin;
29class ContextPrivate;
30
37class CUTELYST_LIBRARY Context : public QObject
38{
39 Q_OBJECT
40 Q_PROPERTY(Action *action READ action CONSTANT)
41 Q_PROPERTY(QString actionName READ actionName CONSTANT)
42 Q_PROPERTY(QString ns READ ns CONSTANT)
43 Q_PROPERTY(QString namespace READ ns CONSTANT)
44 Q_PROPERTY(Request *req READ request CONSTANT)
45 Q_PROPERTY(Request *request READ request CONSTANT)
46 Q_PROPERTY(Controller *controller READ controller CONSTANT)
47 Q_PROPERTY(QString controllerName READ controllerName CONSTANT)
48 Q_PROPERTY(QVariantMap config READ config CONSTANT)
49 Q_PROPERTY(bool state READ state CONSTANT)
50public:
56 Context(Application *app);
57 virtual ~Context();
58
62 [[nodiscard]] bool error() const noexcept;
63
67 void appendError(const QString &error);
68
72 [[nodiscard]] QStringList errors() const noexcept;
73
77 [[nodiscard]] bool state() const noexcept;
78
83 void setState(bool state) noexcept;
84
88 [[nodiscard]] Engine *engine() const noexcept;
89
93 [[nodiscard]] Application *app() const noexcept;
94
98 [[nodiscard]] Response *response() const noexcept;
99
103 [[nodiscard]] Response *res() const noexcept;
104
108 [[nodiscard]] Action *action() const noexcept;
109
113 [[nodiscard]] QString actionName() const noexcept;
114
122 [[nodiscard]] QString ns() const noexcept;
123
128 [[nodiscard]] Request *request() const noexcept;
129
133 [[nodiscard]] Request *req() const noexcept;
134
138 [[nodiscard]] Dispatcher *dispatcher() const noexcept;
139
143 [[nodiscard]] QString controllerName() const noexcept;
144
148 [[nodiscard]] Controller *controller() const noexcept;
149
154 [[nodiscard]] Controller *controller(QStringView name) const;
155
159 [[nodiscard]] View *view(QStringView name = {}) const;
160
166 [[nodiscard]] View *customView() const noexcept;
167
179 bool setCustomView(QStringView name);
180
202 void stash(const QVariantHash &unite);
203
215 [[nodiscard]] QVariantHash &stash();
216
220 [[nodiscard]] QVariant stash(const QString &key) const;
221
225 [[nodiscard]] QVariant stash(const QString &key, const QVariant &defaultValue) const;
226
232 QVariant stashTake(const QString &key);
233
238 bool stashRemove(const QString &key);
239
243 void setStash(const QString &key, const QVariant &value);
244
248 void setStash(const QString &key, const ParamsMultiMap &map);
249
253 [[nodiscard]] QStack<Component *> stack() const noexcept;
254
266 [[nodiscard]] QUrl uriFor(const QString &path = {},
267 const QStringList &args = {},
268 const ParamsMultiMap &queryValues = {}) const;
269
280 [[nodiscard]] inline QUrl uriFor(const QString &path, const ParamsMultiMap &queryValues) const;
281
291 [[nodiscard]] QUrl uriFor(Action *action,
292 const QStringList &captures = {},
293 const QStringList &args = {},
294 const ParamsMultiMap &queryValues = {}) const;
295
301 [[nodiscard]] inline QUrl uriFor(Action *action, const ParamsMultiMap &queryValues) const;
302
326 [[nodiscard]] QUrl uriForAction(QStringView path,
327 const QStringList &captures = {},
328 const QStringList &args = {},
329 const ParamsMultiMap &queryValues = {}) const;
330
334 [[nodiscard]] inline QUrl uriForAction(QStringView path,
335 const ParamsMultiMap &queryValues) const;
336
341 bool detached() const noexcept;
342
348 void detach(Action *action = nullptr);
349
365 void detachAsync() noexcept;
366
374 void attachAsync();
375
394 bool forward(Component *component);
395
414 bool forward(QStringView action);
415
419 [[nodiscard]] Action *getAction(QStringView action, QStringView ns = {}) const;
420
424 [[nodiscard]] QVector<Action *> getActions(QStringView action, QStringView ns = {}) const;
425
429 [[nodiscard]] QVector<Plugin *> plugins() const;
430
434 template <typename T>
436 {
437 const auto pluginsConst = plugins();
438 for (Plugin *plugin : pluginsConst) {
439 auto p = qobject_cast<T>(plugin);
440 if (p) {
441 return p;
442 }
443 }
444 return nullptr;
445 }
446
450 bool execute(Component *code);
451
459 [[nodiscard]] QLocale locale() const noexcept;
460
475 void setLocale(const QLocale &locale);
476
480 [[nodiscard]] QVariant config(const QString &key, const QVariant &defaultValue = {}) const;
481
485 [[nodiscard]] QVariantMap config() const noexcept;
486
500 [[nodiscard]] QString translate(const char *context,
501 const char *sourceText,
502 const char *disambiguation = nullptr,
503 int n = -1) const;
539 [[nodiscard]] inline QString qtTrId(const char *id, int n = -1) const;
540
541public Q_SLOTS:
546 void finalize();
547
548protected:
552 Context(ContextPrivate *priv);
553
554 friend class Application;
555 friend class Action;
556 friend class ActionChain;
557 friend class DispatchType;
558 friend class Plugin;
559 friend class Engine;
560 friend class Controller;
561 friend class Async;
562 ContextPrivate *d_ptr;
563
564private:
565 Q_DECLARE_PRIVATE(Context)
566};
567
568inline QUrl Context::uriFor(const QString &path, const ParamsMultiMap &queryValues) const
569{
570 return uriFor(path, QStringList(), queryValues);
571}
572
573inline QUrl Context::uriFor(Action *action, const ParamsMultiMap &queryValues) const
574{
575 return uriFor(action, QStringList(), QStringList(), queryValues);
576}
577
578inline QUrl Context::uriForAction(QStringView path, const ParamsMultiMap &queryValues) const
579{
580 return uriForAction(path, QStringList(), QStringList(), queryValues);
581}
582
583inline QString Context::qtTrId(const char *id, int n) const
584{
585 return translate(nullptr, id, nullptr, n);
586}
587
588} // namespace Cutelyst
589
590Q_DECLARE_METATYPE(Cutelyst::Context *)
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:38
T plugin()
Returns the registered plugin that casts to the template type T.
Definition: context.h:435
Cutelyst Controller base class
Definition: controller.h:87
The Cutelyst Dispatcher.
Definition: dispatcher.h:27
The Cutelyst Engine.
Definition: engine.h:20
Cutelyst View abstract view component
Definition: view.h:21
The Cutelyst namespace holds all public Cutelyst API.
Definition: Mainpage.dox:8
QMultiMap< QString, QString > ParamsMultiMap