cutelyst  3.7.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-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 <QtCore/QObject>
9 #include <QtCore/QVariant>
10 #include <QtCore/QUrl>
11 #include <QtCore/QStringList>
12 #include <QtCore/QStack>
13 
14 #include <Cutelyst/async.h>
15 #include <Cutelyst/request.h>
16 #include <Cutelyst/cutelyst_global.h>
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,
287  const ParamsMultiMap &queryValues) const;
288 
298  QUrl uriFor(Action *action,
299  const QStringList &captures = QStringList(),
300  const QStringList &args = QStringList(),
301  const ParamsMultiMap &queryValues = ParamsMultiMap()) const;
302 
308  inline QUrl uriFor(Action *action,
309  const ParamsMultiMap &queryValues) const;
310 
334  QUrl uriForAction(const QString &path,
335  const QStringList &captures = QStringList(),
336  const QStringList &args = QStringList(),
337  const ParamsMultiMap &queryValues = ParamsMultiMap()) const;
338 
342  inline QUrl uriForAction(const QString &path,
343  const ParamsMultiMap &queryValues) const;
344 
349  bool detached() const noexcept;
350 
356  void detach(Action *action = nullptr);
357 
373  void detachAsync() noexcept;
374 
382  void attachAsync();
383 
402  bool forward(Component *component);
403 
422  bool forward(const QString &action);
423 
427  Action *getAction(const QString &action, const QString &ns = {}) const;
428 
432  QVector<Action *> getActions(const QString &action, const QString &ns = {}) const;
433 
437  QVector<Plugin *> plugins() const;
438 
442  template <typename T>
443  T plugin()
444  {
445  const auto pluginsConst = plugins();
446  for (Plugin *plugin : pluginsConst) {
447  auto p = qobject_cast<T>(plugin);
448  if (p) {
449  return p;
450  }
451  }
452  return nullptr;
453  }
454 
458  bool execute(Component *code);
459 
467  QLocale locale() const noexcept;
468 
483  void setLocale(const QLocale &locale);
484 
488  QVariant config(const QString &key, const QVariant &defaultValue = {}) const;
489 
493  QVariantMap config() const noexcept;
494 
508  QString translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const;
509 
510 public Q_SLOTS:
515  void finalize();
516 
517 protected:
521  Context(ContextPrivate *priv);
522 
523  friend class Application;
524  friend class Action;
525  friend class ActionChain;
526  friend class DispatchType;
527  friend class Plugin;
528  friend class Engine;
529  friend class Controller;
530  friend class Async;
531  ContextPrivate *d_ptr;
532 
533 private:
534  Q_DECLARE_PRIVATE(Context)
535 };
536 
537 inline QUrl Context::uriFor(const QString &path, const ParamsMultiMap &queryValues) const
538 { return uriFor(path, QStringList(), queryValues); }
539 
540 inline QUrl Context::uriFor(Action *action, const ParamsMultiMap &queryValues) const
541 { return uriFor(action, QStringList(), QStringList(), queryValues); }
542 
543 inline QUrl Context::uriForAction(const QString &path, const ParamsMultiMap &queryValues) const
544 { return uriForAction(path, QStringList(), QStringList(), queryValues); }
545 
546 }
547 
548 Q_DECLARE_METATYPE(Cutelyst::Context *)
549 
550 #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
QUrl uriFor(const QString &path=QString(), const QStringList &args=QStringList(), const ParamsMultiMap &queryValues=ParamsMultiMap()) const
Definition: context.cpp:236
QUrl uriForAction(const QString &path, const QStringList &captures=QStringList(), const QStringList &args=QStringList(), const ParamsMultiMap &queryValues=ParamsMultiMap()) const
Definition: context.cpp:318
T plugin()
Returns the registered plugin that casts to the template type T.
Definition: context.h:443
Cutelyst Controller base class
Definition: controller.h:90
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