cutelyst 5.0.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-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_export.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
41class CUTELYST_EXPORT Context : public QObject
42{
47 Q_PROPERTY(Action *action READ action CONSTANT)
56 Q_PROPERTY(QString ns READ ns CONSTANT)
66 Q_PROPERTY(Request *req READ request CONSTANT)
75 Q_PROPERTY(Controller *controller READ controller CONSTANT)
86 Q_PROPERTY(QVariantMap config READ config CONSTANT)
90 Q_PROPERTY(bool state READ state CONSTANT)
91public:
98 explicit Context(Application *app);
99
104 virtual ~Context();
105
110 [[nodiscard]] bool error() const noexcept;
111
116 void appendError(const QString &error);
117
122 [[nodiscard]] QStringList errors() const noexcept;
123
127 [[nodiscard]] bool state() const noexcept;
128
133 void setState(bool state) noexcept;
134
138 [[nodiscard]] Engine *engine() const noexcept;
139
143 [[nodiscard]] Application *app() const noexcept;
144
148 [[nodiscard]] Response *response() const noexcept;
149
153 [[nodiscard]] Response *res() const noexcept;
154
158 [[nodiscard]] Action *action() const noexcept;
159
163 [[nodiscard]] QString actionName() const noexcept;
164
173 [[nodiscard]] QString ns() const noexcept;
174
179 [[nodiscard]] Request *request() const noexcept;
180
184 [[nodiscard]] Request *req() const noexcept;
185
189 [[nodiscard]] Dispatcher *dispatcher() const noexcept;
190
194 [[nodiscard]] QString controllerName() const noexcept;
195
199 [[nodiscard]] Controller *controller() const noexcept;
200
205 [[nodiscard]] Controller *controller(QStringView name) const;
206
210 [[nodiscard]] View *view(QStringView name = {}) const;
211
217 [[nodiscard]] View *customView() const noexcept;
218
230 bool setCustomView(QStringView name);
231
253 void stash(const QVariantHash &unite);
254
266 [[nodiscard]] QVariantHash &stash();
267
271 [[nodiscard]] QVariant stash(const QString &key) const;
272
277 [[nodiscard]] QVariant stash(const QString &key, const QVariant &defaultValue) const;
278
284 QVariant stashTake(const QString &key);
285
290 bool stashRemove(const QString &key);
291
295 void setStash(const QString &key, const QVariant &value);
296
300 void setStash(const QString &key, const ParamsMultiMap &map);
301
305 [[nodiscard]] QStack<Component *> stack() const noexcept;
306
319 [[nodiscard]] QUrl uriFor(const QString &path = {},
320 const QStringList &args = {},
321 const ParamsMultiMap &queryValues = {}) const;
322
334 [[nodiscard]] inline QUrl uriFor(const QString &path, const ParamsMultiMap &queryValues) const;
335
345 [[nodiscard]] QUrl uriFor(Action *action,
346 const QStringList &captures = {},
347 const QStringList &args = {},
348 const ParamsMultiMap &queryValues = {}) const;
349
355 [[nodiscard]] inline QUrl uriFor(Action *action, const ParamsMultiMap &queryValues) const;
356
380 [[nodiscard]] QUrl uriForAction(QStringView path,
381 const QStringList &captures = {},
382 const QStringList &args = {},
383 const ParamsMultiMap &queryValues = {}) const;
384
388 [[nodiscard]] inline QUrl uriForAction(QStringView path,
389 const ParamsMultiMap &queryValues) const;
390
395 bool detached() const noexcept;
396
404 void detach(Action *action = nullptr);
405
421 void detachAsync() noexcept;
422
429 void attachAsync();
430
449 bool forward(Component *component);
450
469 bool forward(QStringView action);
470
474 [[nodiscard]] Action *getAction(QStringView action, QStringView ns = {}) const;
475
479 [[nodiscard]] QVector<Action *> getActions(QStringView action, QStringView ns = {}) const;
480
484 [[nodiscard]] QVector<Plugin *> plugins() const;
485
489 template <typename T>
491 {
492 const auto pluginsConst = plugins();
493 for (Plugin *pluginPtr : pluginsConst) {
494 auto p = qobject_cast<T>(pluginPtr);
495 if (p) {
496 return p;
497 }
498 }
499 return nullptr;
500 }
501
505 bool execute(Component *code);
506
516 [[nodiscard]] QLocale locale() const noexcept;
517
535 void setLocale(const QLocale &locale);
536
546 [[nodiscard]] QVariant config(const QString &key, const QVariant &defaultValue = {}) const;
547
554 [[nodiscard]] QVariantMap config() const noexcept;
555
571 [[nodiscard]] QString translate(const char *context,
572 const char *sourceText,
573 const char *disambiguation = nullptr,
574 int n = -1) const;
612 [[nodiscard]] inline QString qtTrId(const char *id, int n = -1) const;
613
614public Q_SLOTS:
619 void finalize();
620
621protected:
625 explicit Context(ContextPrivate *priv);
626
627 friend class Application;
628 friend class Action;
629 friend class ActionREST;
630 friend class ActionChain;
631 friend class DispatchType;
632 friend class Plugin;
633 friend class Engine;
634 friend class Controller;
635 friend class Async;
636 ContextPrivate *d_ptr;
637
638private:
639 Q_DECLARE_PRIVATE(Context)
640};
641
642inline QUrl Context::uriFor(const QString &path, const ParamsMultiMap &queryValues) const
643{
644 return uriFor(path, QStringList(), queryValues);
645}
646
647inline QUrl Context::uriFor(Action *action, const ParamsMultiMap &queryValues) const
648{
649 return uriFor(action, QStringList(), QStringList(), queryValues);
650}
651
652inline QUrl Context::uriForAction(QStringView path, const ParamsMultiMap &queryValues) const
653{
654 return uriForAction(path, QStringList(), QStringList(), queryValues);
655}
656
657inline QString Context::qtTrId(const char *id, int n) const
658{
659 return translate(nullptr, id, nullptr, n);
660}
661
662} // namespace Cutelyst
663
664Q_DECLARE_METATYPE(Cutelyst::Context *)
This class represents a Cutelyst Action.
Definition action.h:35
The Cutelyst application.
Definition application.h:66
The Cutelyst Component base class.
Definition component.h:30
The Cutelyst Context.
Definition context.h:42
QStringList errors() const noexcept
Definition context.cpp:68
QVector< Plugin * > plugins() const
Definition context.cpp:418
Context(Application *app)
Definition context.cpp:30
void setState(bool state) noexcept
Definition context.cpp:80
QUrl uriFor(const QString &path={}, const QStringList &args={}, const ParamsMultiMap &queryValues={}) const
Definition context.cpp:231
Response * res() const noexcept
Definition context.cpp:104
QString translate(const char *context, const char *sourceText, const char *disambiguation=nullptr, int n=-1) const
Definition context.cpp:485
Request * request
Definition context.h:71
Request * req
Definition context.h:66
Controller * controller
Definition context.h:75
QString qtTrId(const char *id, int n=-1) const
Definition context.h:657
Action * action
Definition context.h:47
QVariantMap config
Definition context.h:86
Dispatcher * dispatcher() const noexcept
Definition context.cpp:140
Application * app() const noexcept
Definition context.cpp:92
QString namespace
Definition context.h:61
View * view(QStringView name={}) const
Definition context.cpp:170
QUrl uriForAction(QStringView path, const QStringList &captures={}, const QStringList &args={}, const ParamsMultiMap &queryValues={}) const
Definition context.cpp:314
QString actionName
Definition context.h:51
void appendError(const QString &error)
Definition context.cpp:57
QString controllerName
Definition context.h:79
Engine * engine() const noexcept
Definition context.cpp:86
bool error() const noexcept
Definition context.cpp:51
Response * response() const noexcept
Definition context.cpp:98
Cutelyst Controller base class.
Definition controller.h:56
The Cutelyst Dispatcher.
Definition dispatcher.h:29
The Cutelyst Engine.
Definition engine.h:20
Base class for Cutelyst Plugins.
Definition plugin.h:25
A request.
Definition request.h:42
A Cutelyst response.
Definition response.h:29
Abstract View component for Cutelyst.
Definition view.h:25
QMultiMap< QString, QString > ParamsMultiMap
The Cutelyst namespace holds all public Cutelyst API.
QObject(QObject *parent)
Q_OBJECTQ_OBJECT
Q_PROPERTY(...)
T qobject_cast(QObject *object)