WebCFace 3.1.1
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
view.h
Go to the documentation of this file.
1#pragma once
2#include <vector>
3#include <ostream>
4#include <memory>
5#include <utility>
6#ifdef WEBCFACE_MESON
7#include "webcface-config.h"
8#else
9#include "webcface/common/webcface-config.h"
10#endif
11#include "components.h"
13
15namespace internal {
16template <typename Component>
17class DataSetBuffer;
18class ViewBuf;
19} // namespace internal
20
21namespace traits {
22template <typename T>
24 decltype(std::declval<std::ostream>() << std::declval<T>(), TraitOk);
25template <typename T>
27 decltype(std::declval<T>()(std::declval<View>()), TraitOk);
28} // namespace traits
29
36class WEBCFACE_DLL View : protected Field {
37 std::shared_ptr<internal::ViewBuf> sb;
38 mutable std::ostream os;
39
40 public:
41 View();
42 View(const Field &base);
43 View(const Field &base, const SharedString &field)
44 : View(Field{base, field}) {}
45 View(const View &rhs) : View() { *this = rhs; }
46 View(View &&rhs) noexcept : View() { *this = std::move(rhs); }
47 View &operator=(const View &rhs);
48 View &operator=(View &&rhs) noexcept;
49 ~View();
50
52
53 using Field::lastName;
54 using Field::lastNameW;
55 using Field::member;
56 using Field::name;
57 using Field::nameW;
65 return this->Field::child(static_cast<SharedString &>(field));
66 }
71 [[deprecated]]
72 View child(int index) const {
73 return this->Field::child(std::to_string(index));
74 }
82 View operator[](StringInitializer field) const { return child(std::move(field)); }
88 [[deprecated]]
89 View operator[](int index) const {
90 return child(std::to_string(index));
91 }
96 View parent() const { return this->Field::parent(); }
97
104 const View &
105 onChange(std::function<void WEBCFACE_CALL_FP(View)> callback) const;
112 template <typename F, typename std::enable_if_t<std::is_invocable_v<F>,
113 std::nullptr_t> = nullptr>
114 const View &onChange(F callback) const {
115 return onChange(
116 [callback = std::move(callback)](const auto &) { callback(); });
117 }
118
124 const View &request() const;
129 std::optional<std::vector<ViewComponent>> tryGet() const;
134 std::vector<ViewComponent> get() const {
135 return tryGet().value_or(std::vector<ViewComponent>{});
136 }
145 bool exists() const;
146
151 const View &free() const;
152
162 const View &init() const;
172 template <typename T, traits::EnableIfFormattable<T> = traits::TraitOk>
173 const View &operator<<(T &&rhs) const {
174 os << std::forward<T>(rhs);
175 return *this;
176 }
177 const View &operator<<(std::ostream &(*os_manip)(std::ostream &)) const {
178 os_manip(os);
179 return *this;
180 }
187 template <bool C2, bool C3>
189 *this << std::move(vc.component_v);
190 return *this;
191 }
198 const View &operator<<(TemporalViewComponent vc) const;
206 template <typename F, traits::EnableIfViewInvocable<F> = traits::TraitOk>
207 const View &operator<<(const F &manip) const {
208 manip(*this);
209 return *this;
210 }
211
220 template <typename T>
221 const View &add(T &&rhs) const {
222 *this << std::forward<T>(rhs);
223 return *this;
224 }
225
234 std::ostreambuf_iterator<char> inserter() const {
235 return std::ostreambuf_iterator<char>(os);
236 }
244 std::ostream &ostream() const { return os; }
245
253 const View &sync() const;
254
260 template <typename T, typename std::enable_if_t<std::is_same_v<T, View>,
261 std::nullptr_t> = nullptr>
262 bool operator==(const T &other) const {
263 return static_cast<Field>(*this) == static_cast<Field>(other);
264 }
265 template <typename T, typename std::enable_if_t<std::is_same_v<T, View>,
266 std::nullptr_t> = nullptr>
267 bool operator!=(const T &other) const {
268 return static_cast<Field>(*this) != static_cast<Field>(other);
269 }
270};
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:170
SharedString のpublicなコンストラクタインタフェース (入力専用)
Definition encoding.h:235
Viewを構築するときに使う一時的なViewComponent.
Definition component_view.h:292
Viewの送受信データを表すクラス
Definition view.h:36
View(View &&rhs) noexcept
Definition view.h:46
const View & operator<<(T &&rhs) const
文字列にフォーマットし、textコンポーネントとして追加
Definition view.h:173
bool operator==(const T &other) const
Viewの参照先を比較
Definition view.h:262
const View & operator<<(std::ostream &(*os_manip)(std::ostream &)) const
Definition view.h:177
View operator[](int index) const
Definition view.h:89
const View & operator<<(TemporalComponent< true, C2, C3 > vc) const
コンポーネントを追加
Definition view.h:188
View(const View &rhs)
Definition view.h:45
const View & onChange(F callback) const
値が変化したときに呼び出されるコールバックを設定
Definition view.h:114
std::ostream & ostream() const
このViewに文字列を出力するostreamを返す
Definition view.h:244
bool operator!=(const T &other) const
Definition view.h:267
std::vector< ViewComponent > get() const
Viewを取得する
Definition view.h:134
View operator[](StringInitializer field) const
Definition view.h:82
View child(StringInitializer field) const
「(thisの名前).(追加の名前)」を新しい名前とするField
Definition view.h:64
const View & operator<<(const F &manip) const
コンポーネントを追加
Definition view.h:207
View child(int index) const
Definition view.h:72
const View & add(T &&rhs) const
コンポーネントなどを追加
Definition view.h:221
View(const Field &base, const SharedString &field)
Definition view.h:43
std::ostreambuf_iterator< char > inserter() const
このViewに文字列を出力する back inserter iterator を返す
Definition view.h:234
View parent() const
nameの最後のピリオドの前までを新しい名前とするField
Definition view.h:96
View,Canvasなどで送信用にaddされたデータを管理する
Definition data_buffer.h:17
decltype(std::declval< T >()(std::declval< View >()), TraitOk) EnableIfViewInvocable
Definition view.h:27
decltype(std::declval< std::ostream >()<< std::declval< T >(), TraitOk) EnableIfFormattable
Definition view.h:24
constexpr std::nullptr_t TraitOk
Definition trait.h:12
std::ostream & operator<<(std::ostream &os, const Arg &arg)
Definition func_info.cc:99
ClientDataの参照とメンバ名とデータ名を持つクラス
Definition field.h:68
Field parent() const
nameの最後のピリオドの前までを新しい名前とするField
Definition field.cc:39
Field child(const SharedString &field) const
Definition field.cc:48
Canvas2D, Canvas3D (, View) に要素をaddするときに使うインタフェース
Definition components.h:23
TemporalViewComponent component_v
Definition components.h:24
#define WEBCFACE_DLL
Definition webcface-config.h:69
#define WEBCFACE_NS_END
Definition webcface-config.h:113
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:112
#define WEBCFACE_CALL_FP
Definition webcface-config.h:107