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 
18 namespace Cutelyst {
19 
20 class Action;
21 class Application;
22 class Component;
23 class Engine;
24 class Response;
25 class Dispatcher;
26 class Controller;
27 class View;
28 class Stats;
29 class Plugin;
30 class ContextPrivate;
31 
38 class CUTELYST_LIBRARY Context : public QObject
39 {
40  Q_OBJECT
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)
51 public:
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 
434  QVector<Plugin *> plugins() const;
435 
439  template <typename T>
440  T plugin()
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 
546 public Q_SLOTS:
551  void finalize();
552 
553 protected:
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 
569 private:
570  Q_DECLARE_PRIVATE(Context)
571 };
572 
573 inline QUrl Context::uriFor(const QString &path, const ParamsMultiMap &queryValues) const
574 {
575  return uriFor(path, QStringList(), queryValues);
576 }
577 
578 inline QUrl Context::uriFor(Action *action, const ParamsMultiMap &queryValues) const
579 {
580  return uriFor(action, QStringList(), QStringList(), queryValues);
581 }
582 
583 inline QUrl Context::uriForAction(const QString &path, const ParamsMultiMap &queryValues) const
584 {
585  return uriForAction(path, QStringList(), QStringList(), queryValues);
586 }
587 
588 inline QString Context::qtTrId(const char *id, int n) const
589 {
590  return translate(nullptr, id, nullptr, n);
591 }
592 
593 } // namespace Cutelyst
594 
595 Q_DECLARE_METATYPE(Cutelyst::Context *)
596 
597 #endif // CUTELYST_CONTEXT_H
QUrl uriFor(const QString &path=QString(), const QStringList &args=QStringList(), const ParamsMultiMap &queryValues=ParamsMultiMap()) const
Definition: context.cpp:235
QMultiMap< QString, QString > ParamsMultiMap
The Cutelyst Component base class.
Definition: component.h:25
This class represents a Cutelyst Action.
Definition: action.h:34
QUrl uriForAction(const QString &path, const QStringList &captures=QStringList(), const QStringList &args=QStringList(), const ParamsMultiMap &queryValues=ParamsMultiMap()) const
Definition: context.cpp:321
The Cutelyst Context.
Definition: context.h:38
Cutelyst Controller base class
Definition: controller.h:87
T plugin()
Returns the registered plugin that casts to the template type T.
Definition: context.h:440
The Cutelyst namespace holds all public Cutelyst API.
Definition: Mainpage.dox:7
QString qtTrId(const char *id, int n=-1) const
Definition: context.h:588
Cutelyst View abstract view component
Definition: view.h:21
The Cutelyst Application.
Definition: application.h:42
The Cutelyst Engine
Definition: engine.h:20
The Cutelyst Dispatcher.
Definition: dispatcher.h:27