WebCFace 2.5.2
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
component_view.h
Go to the documentation of this file.
1#pragma once
2#include <functional>
3#include <optional>
4#include <unordered_map>
5#include <vector>
6#ifdef WEBCFACE_MESON
7#include "webcface-config.h"
8#else
9#include "webcface/common/webcface-config.h"
10#endif
12#include "webcface/text.h"
13
14#ifdef min
15// clang-format off
16#pragma message("warning: Disabling macro definition of 'min' and 'max', since they conflicts in webcface/component_view.h.")
17// clang-format on
18#undef min
19#undef max
20#endif
21
22extern "C" {
25typedef struct wcfMultiVal wcfMultiVal;
27}
29namespace message {
30struct ViewComponentData;
31}
32namespace internal {
33struct TemporalViewComponentData;
34struct ClientData;
35class ViewBuf;
36} // namespace internal
37class Func;
38class FuncListener;
39
40enum class ViewColor {
41 inherit = 0,
42 black = 1,
43 white = 2,
44 // slate = 3,
45 gray = 4,
46 // zinc = 5,
47 // neutral = 6,
48 // stone = 7,
49 red = 8,
50 orange = 9,
51 // amber = 10,
52 yellow = 11,
53 // lime = 12,
54 green = 13,
55 // emerald = 14,
56 teal = 15,
57 cyan = 16,
58 // sky = 17,
59 blue = 18,
60 indigo = 19,
61 // violet = 20,
62 purple = 21,
63 // fuchsia = 22,
64 pink = 23,
65 // rose = 24,
66};
75WEBCFACE_DLL ViewColor colorFromRGB(double r, double g, double b);
76
78 text = 0,
79 new_line = 1,
80 button = 2,
81 text_input = 3,
82 decimal_input = 4,
83 number_input = 5,
84 toggle_input = 6,
85 select_input = 7,
86 slider_input = 8,
87 check_input = 9,
88};
89
111 std::shared_ptr<message::ViewComponentData> msg_data;
112 std::weak_ptr<internal::ClientData> data_w;
113 SharedString id_;
114
115 // for cData()
116 mutable std::unique_ptr<wcfMultiVal[]> options_s;
117 mutable std::unique_ptr<wcfMultiValW[]> options_sw;
118
119 void checkData() const;
120
121 template <typename CComponent, typename CVal, std::size_t v_index>
122 CComponent cDataT() const;
123
124 public:
130
131 ViewComponent(const std::shared_ptr<message::ViewComponentData> &msg_data,
132 const std::weak_ptr<internal::ClientData> &data_w,
133 const SharedString &id);
134
136 ViewComponent &operator=(const ViewComponent &);
138 ViewComponent &operator=(ViewComponent &&) noexcept;
139 ~ViewComponent() noexcept;
140
141 wcfViewComponent cData() const;
142 wcfViewComponentW cDataW() const;
143
153 std::string id() const;
163 std::wstring idW() const;
164
175 bool operator==(const ViewComponent &other) const;
179 bool operator!=(const ViewComponent &other) const {
180 return !(*this == other);
181 }
182
187 ViewComponentType type() const;
192 std::string text() const;
197 std::wstring textW() const;
202 std::optional<Func> onClick() const;
213 std::optional<Func> onChange() const;
223 std::optional<Variant> bind() const;
224
229 ViewColor textColor() const;
234 ViewColor bgColor() const;
240 std::optional<double> min() const;
241
247 std::optional<double> max() const;
253 std::optional<double> step() const;
259 std::vector<ValAdaptor> option() const;
260};
261
268 std::unique_ptr<internal::TemporalViewComponentData> msg_data;
269
270 public:
275 explicit TemporalViewComponent(std::nullptr_t = nullptr);
282 TemporalViewComponent &operator=(const TemporalViewComponent &other);
292
293 friend class View;
294 friend class internal::ViewBuf;
295
304 std::unique_ptr<internal::TemporalViewComponentData>
305 lockTmp(const std::shared_ptr<internal::ClientData> &data,
306 const SharedString &view_name,
307 std::unordered_map<ViewComponentType, int> *idx_next = nullptr);
308
313 TemporalViewComponent &id(std::string_view id);
318 TemporalViewComponent &id(std::wstring_view id);
325 TemporalViewComponent &text(std::string_view text) &;
329 TemporalViewComponent &&text(std::string_view text) && {
330 this->text(text);
331 return std::move(*this);
332 }
337 TemporalViewComponent &text(std::wstring_view text) &;
342 TemporalViewComponent &&text(std::wstring_view text) && {
343 this->text(text);
344 return std::move(*this);
345 }
351 TemporalViewComponent &onClick(const Func &func) &;
357 this->onClick(func);
358 return std::move(*this);
359 }
365 TemporalViewComponent &onClick(const FuncListener &func) &;
371 this->onClick(func);
372 return std::move(*this);
373 }
383 template <typename T, decltype(std::declval<T>()(), nullptr) = nullptr>
385 return onClick(std::make_shared<std::function<void WEBCFACE_CALL_FP()>>(
386 std::move(func)));
387 }
392 template <typename T, decltype(std::declval<T>()(), nullptr) = nullptr>
394 this->onClick(std::move(func));
395 return std::move(*this);
396 }
400 TemporalViewComponent &onClick(
401 const std::shared_ptr<std::function<void WEBCFACE_CALL_FP()>> &func);
402
410 TemporalViewComponent &bind(const InputRef &ref) &;
416 this->bind(ref);
417 return std::move(*this);
418 }
428 template <typename T>
430 InputRef ref;
431 return onChange(
432 std::make_shared<std::function<void WEBCFACE_CALL_FP(ValAdaptor)>>(
433 [ref, func = std::move(func)](ValAdaptor val) {
434 ref.lockedField().set(val);
435 return func(val);
436 }),
437 ref);
438 }
443 template <typename T>
445 this->onChange(std::move(func));
446 return std::move(*this);
447 }
451 TemporalViewComponent &onChange(
452 const std::shared_ptr<std::function<void WEBCFACE_CALL_FP(ValAdaptor)>>
453 &func,
454 const InputRef &ref);
455
460 TemporalViewComponent &textColor(ViewColor c) &;
465 this->textColor(c);
466 return std::move(*this);
467 }
472 TemporalViewComponent &bgColor(ViewColor c) &;
477 this->bgColor(c);
478 return std::move(*this);
479 }
489 template <typename T>
490 TemporalViewComponent &init(const T &init) & {
491 return this->init(ValAdaptor{init});
492 }
497 template <typename T>
498 TemporalViewComponent &&init(const T &init) && {
499 this->init(init);
500 return std::move(*this);
501 }
502
503 protected:
504 TemporalViewComponent &init(const ValAdaptor &init);
505
506 public:
516 TemporalViewComponent &min(double min) &;
521 TemporalViewComponent &&min(double min) && {
522 this->min(min);
523 return std::move(*this);
524 }
534 TemporalViewComponent &max(double max) &;
539 TemporalViewComponent &&max(double max) && {
540 this->max(max);
541 return std::move(*this);
542 }
550 TemporalViewComponent &step(double step) &;
555 TemporalViewComponent &&step(double step) && {
556 this->step(step);
557 return std::move(*this);
558 }
559
567 template <typename T>
568 TemporalViewComponent &option(std::initializer_list<T> option) & {
569 std::vector<ValAdaptor> option_v;
570 for (const auto &v : option) {
571 option_v.emplace_back(ValAdaptor(v));
572 }
573 return this->option(std::move(option_v));
574 }
579 template <typename T>
580 TemporalViewComponent &&option(std::initializer_list<T> option) && {
581 this->option(option);
582 return std::move(*this);
583 }
584
585 TemporalViewComponent &option(std::vector<ValAdaptor> option) &;
589 TemporalViewComponent &&option(std::vector<ValAdaptor> option) && {
590 this->option(std::move(option));
591 return std::move(*this);
592 }
593};
594
Definition func.h:590
関数1つを表すクラス
Definition func.h:95
名前を指定しないText
Definition text.h:439
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:69
Viewを構築するときに使う一時的なViewComponent.
Definition component_view.h:267
TemporalViewComponent && onChange(T func) &&
値が変化した時に実行される関数を設定
Definition component_view.h:444
TemporalViewComponent && textColor(ViewColor c) &&
Definition component_view.h:464
TemporalViewComponent && init(const T &init) &&
デフォルト値を設定する。
Definition component_view.h:498
TemporalViewComponent && step(double step) &&
数値の刻み幅を設定する。
Definition component_view.h:555
TemporalViewComponent & init(const T &init) &
デフォルト値を設定する。
Definition component_view.h:490
TemporalViewComponent && onClick(T func) &&
クリック時に実行される関数を設定
Definition component_view.h:393
TemporalViewComponent & onChange(T func) &
値が変化した時に実行される関数を設定
Definition component_view.h:429
TemporalViewComponent && onClick(const Func &func) &&
クリック時に実行される関数を設定 (登録済みFunc)
Definition component_view.h:356
TemporalViewComponent & option(std::initializer_list< T > option) &
引数の選択肢を設定する。
Definition component_view.h:568
TemporalViewComponent & onClick(T func) &
クリック時に実行される関数を設定
Definition component_view.h:384
TemporalViewComponent && bind(const InputRef &ref) &&
変更した値を格納するInputRefを設定
Definition component_view.h:415
TemporalViewComponent & operator=(TemporalViewComponent &&other) noexcept
TemporalViewComponent && option(std::vector< ValAdaptor > option) &&
Definition component_view.h:589
TemporalViewComponent && max(double max) &&
最大値を設定する。
Definition component_view.h:539
TemporalViewComponent && min(double min) &&
最小値を設定する。
Definition component_view.h:521
TemporalViewComponent && option(std::initializer_list< T > option) &&
引数の選択肢を設定する。
Definition component_view.h:580
TemporalViewComponent(TemporalViewComponent &&other) noexcept
TemporalViewComponent && onClick(const FuncListener &func) &&
クリック時に実行される関数を設定 (FuncListener)
Definition component_view.h:370
TemporalViewComponent && bgColor(ViewColor c) &&
Definition component_view.h:476
TemporalViewComponent && text(std::wstring_view text) &&
表示する文字列を設定 (wstring)
Definition component_view.h:342
数値、文字列などの値を相互変換するクラス
Definition val_adaptor.h:87
Viewに表示する要素です
Definition component_view.h:110
ViewComponent(ViewComponent &&) noexcept
Viewの送受信データを表すクラス
Definition view.h:26
TemporalViewComponent button(std::string_view text, T &&func)
buttonコンポーネント
Definition components.h:615
ViewComponentType
Definition component_view.h:77
ViewColor
Definition component_view.h:40
数値と文字列をまとめて扱うためのstruct (wstring)
Definition def_types.h:84
数値と文字列をまとめて扱うためのstruct
Definition def_types.h:50
Viewの要素を表すstruct (wstring)
Definition def_types.h:289
Viewの要素を表すstruct.
Definition def_types.h:218
#define WEBCFACE_DLL
Definition webcface-config.h:60
#define WEBCFACE_NS_END
Definition webcface-config.h:104
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:103
#define WEBCFACE_CALL_FP
Definition webcface-config.h:98