Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
SheetModelEntryFactory.hpp
Go to the documentation of this file.
1#ifndef IV_SRC_UI_GUI_SHEETMODELENTRYFACTORY_HPP_
2#define IV_SRC_UI_GUI_SHEETMODELENTRYFACTORY_HPP_
3
4#include "core/concepts.hpp"
5#include "third_party/magic_enum/magic_enum.hpp"
8#include "ui/gui/CEditNum.hpp"
12#include "units/model/Unit.hpp"
13
14#include <map>
15#include <memory>
16#include <optional>
17#include <set>
18#include <string>
19#include <vector>
20
21namespace iv::gui::factory
22{
23
28{
29public:
38 template<iv::concepts::IntegerType T>
40 createEntryNumberIntegerCellDefinition(const std::string &nameField, T &valueRef, unsigned short numMaxChar)
41 {
42 iv::gui::sheets::CellDefinition cellDefinition {};
43
44 if (CEditNum *editNum = CEditNum::createInteger<T>(nameField, valueRef, numMaxChar))
45 {
47
48 cellDefinition.m_component = editNum;
49
50 editNum->setShouldDisplayPopOverIfError(true);
51 editNum->setDefineSize(CEditNum::kDefaultSizeString);
52 }
53
54 return cellDefinition;
55 }
56
65 template<iv::concepts::IntegerType T>
67 std::optional<T> &valueRef,
68 unsigned short numMaxChar)
69 {
70 iv::gui::sheets::CellDefinition cellDefinition {};
71
72 auto sharedValue = std::make_shared<T>(valueRef.value_or(0));
73 if (CEditNum *editNum = CEditNum::createInteger<T>(nameField, *sharedValue, numMaxChar))
74 {
76
77 auto checkButton = new CCheckButton(valueRef.has_value());
78
80
81 auto layout = new CLayoutHorizontal();
82 layout->addStart(checkButton, false, false, 0);
83 layout->addEnd(editNum, true, true, 0);
84
85 layout->emplaceListenerAccept(
86 [checkButton, sharedValue, &valueRef]()
87 {
88 if (checkButton->getValue())
89 {
90 valueRef = *sharedValue;
91 }
92 else
93 {
94 valueRef = std::nullopt;
95 }
96 });
97
98 cellDefinition.m_component = layout;
99
100 editNum->setShouldDisplayPopOverIfError(true);
101 editNum->setDefineSize(CEditNum::kDefaultSizeString);
102 }
103
104 return cellDefinition;
105 }
106
113 {
114 iv::gui::sheets::CellDefinition cellDefinition {};
115
116 auto sharedValue = std::make_shared<std::string>(valueRef.value_or(""));
117 if (CEdit *edit = new CEdit(sharedValue.get()))
118 {
120
121 auto checkButton = new CCheckButton(valueRef.has_value());
122
124
125 auto layout = new CLayoutHorizontal();
126 layout->addStart(checkButton, false, false, 0);
127 layout->addEnd(edit, true, true, 0);
128
129 layout->emplaceListenerAccept(
130 [checkButton, sharedValue, &valueRef]()
131 {
132 if (checkButton->getValue())
133 {
134 valueRef = *sharedValue;
135 }
136 else
137 {
138 valueRef = std::nullopt;
139 }
140 });
141
142 cellDefinition.m_component = layout;
143
144 edit->setShouldDisplayPopOverIfError(true);
145 edit->setDefineSize(CEditNum::kDefaultSizeString);
146 }
147
148 return cellDefinition;
149 }
150
161 template<iv::concepts::IntegerType T>
163 createEntryNumberIntegerCellDefinitionWithInterval(const std::string &nameField, T &valueRef, T minValue,
164 T maxValue, unsigned short numMaxChar)
165 {
166 iv::gui::sheets::CellDefinition cellDefinition {};
167
168 if (CEditNum *editNum =
169 CEditNum::createIntegerWithInterval(nameField, valueRef, minValue, maxValue, numMaxChar))
170 {
172
173 cellDefinition.m_component = editNum;
174
175 editNum->setShouldDisplayPopOverIfError(true);
176 editNum->setDefineSize(CEdit::kDefaultSizeString);
177 }
178
179 return cellDefinition;
180 }
181
191 template<iv::concepts::FloatingPointType T>
193 T &valueRef, uint16_t numMaxChar,
194 uint16_t numMaxDecimals)
195 {
196 iv::gui::sheets::CellDefinition cellDefinition {};
197
198 if (CEditNum *editNum = CEditNum::createFloatingPoint<T>(nameField, valueRef, numMaxDecimals, numMaxChar))
199 {
201
202 cellDefinition.m_component = editNum;
203
204 editNum->setShouldDisplayPopOverIfError(true);
205 editNum->setDefineSize(CEdit::kDefaultSizeString);
206 }
207
208 return cellDefinition;
209 }
210
222 template<iv::concepts::FloatingPointType T>
224 createEntryNumberDecimalCellDefinitionWithInterval(const std::string &nameField, T &valueRef, T minValue,
225 T maxValue, uint16_t numMaxChar, uint16_t numMaxDecimals)
226 {
227 iv::gui::sheets::CellDefinition cellDefinition {};
228
229 if (CEditNum *editNum = CEditNum::createFloatingPointWithInterval<T>(nameField, valueRef, minValue, maxValue,
230 numMaxDecimals, numMaxChar))
231 {
233
234 cellDefinition.m_component = editNum;
235
236 editNum->setShouldDisplayPopOverIfError(true);
237 editNum->setDefineSize(CEdit::kDefaultSizeString);
238 }
239
240 return cellDefinition;
241 }
242
249 template<iv::concepts::EnumType T>
251 {
252 auto options = magic_enum::enum_values<T>();
253 return createComboBoxEnumCellDefinitionLimitedOptions(option, std::set(std::begin(options), std::end(options)));
254 }
255
262 template<iv::concepts::EnumType T>
264 std::set<T> options)
265 {
266 iv::gui::sheets::CellDefinition cellDefinition {};
267 CComboBoxEnum<T> *comboBoxEnum {};
268
269 comboBoxEnum = new CComboBoxEnum<T>(&option);
270 IV_ASSERT_NULL_POINTER(comboBoxEnum);
271
272 for (T comboBoxValue: options)
273 {
274 comboBoxEnum->addOption(comboBoxValue, magic_enum::enum_name(comboBoxValue));
275 }
276
277 comboBoxEnum->setOption(static_cast<uint32_t>(option));
278
279 comboBoxEnum->emplaceListenerChange(
280 [](CDialog *, AbstractComponentGUI *comboBox)
281 {
282 if (auto tComboBoxEnum = dynamic_cast<CComboBoxEnum<T> *>(comboBox))
283 {
284 tComboBoxEnum->setTooltip(
285 magic_enum::enum_name(static_cast<T>(tComboBoxEnum->getIdOptionSelection())));
286 }
287 });
288
289 cellDefinition.m_component = comboBoxEnum;
290
291 return cellDefinition;
292 }
293
295 std::map<uint32_t, std::string> options);
296
298 const std::string &text = "");
299 static iv::gui::sheets::CellDefinition createButtonCellDefinition(std::string_view text, IListenerClick *listener);
300
303 IListenerIsAccept *listenerIsAccept);
305 createEntryCellDefinitionForTag(const std::shared_ptr<iv::channels::AbstractChannel> &channel,
306 const std::weak_ptr<iv::units::Unit> &unit);
308 iv::types::channelId &channelIdOut,
309 const std::optional<std::function<bool(std::shared_ptr<iv::channels::AbstractChannel>)>> &filterCallback =
310 std::nullopt,
311 const std::function<void(const std::weak_ptr<iv::channels::AbstractChannel> &)> &selectionCallback =
312 [](const auto &) {});
313
314 static iv::gui::sheets::CellDefinition createEntryCellDefinitionStatic(std::string_view value = "");
315
316private:
317 static void prvSetEntryChangeListener(AbstractComponentGUI *entryComponent);
318};
319
320}// namespace iv::gui::factory
321
322#endif//IV_SRC_UI_GUI_SHEETMODELENTRYFACTORY_HPP_
#define IV_ASSERT_NULL_POINTER(ptr)
Definition assert.hpp:128
Definition AbstractComponentGUI.hpp:30
Definition CCheckButton.hpp:12
Definition CComboBox.hpp:111
Definition CDialog.hpp:21
Definition CEditNum.hpp:15
static CEditNum * createInteger(const std::string &nameField, T &valueRef, const uint16_t numMaxChar)
Definition CEditNum.hpp:65
static CEditNum * createFloatingPoint(const std::string &nameField, T &valueRef, uint8_t numMaxDecimals, uint8_t numMaxChar)
Definition CEditNum.hpp:153
static CEditNum * createFloatingPointWithInterval(const std::string &nameField, T &valueRef, T minValue, T maxValue, uint8_t numMaxDecimals, uint8_t numMaxChar)
Definition CEditNum.hpp:169
static CEditNum * createIntegerWithInterval(const std::string &nameField, T &valueRef, R1 minValue, R2 maxValue, uint16_t numMaxChar)
Definition CEditNum.hpp:101
Definition CEdit.hpp:40
static const int32_t kDefaultSizeString
Definition CEdit.hpp:42
Definition CLayoutHorizontal.hpp:7
static void linkCheckWithComponent(CCheckButton *checkButton, AbstractComponentGUI *panel, bool inverted=false)
Definition CPanelsTools.cpp:157
Definition IListenerClick.hpp:7
Definition IListenerIsAccept.hpp:7
The SheetModelEntryFactory class. It contains the methods to create cell widgets for the sheet model.
Definition SheetModelEntryFactory.hpp:28
static iv::gui::sheets::CellDefinition createButtonCellDefinition(std::string_view text, IListenerClick *listener)
Definition SheetModelEntryFactory.cpp:345
static iv::gui::sheets::CellDefinition createEntryNumberIntegerCellDefinition(const std::string &nameField, T &valueRef, unsigned short numMaxChar)
Create a cell definition for an integer number.
Definition SheetModelEntryFactory.hpp:40
static iv::gui::sheets::CellDefinition createComboBoxEnumCellDefinition(T &option)
Create a cell definition for a combo box with enum values.
Definition SheetModelEntryFactory.hpp:250
static void prvSetEntryChangeListener(AbstractComponentGUI *entryComponent)
Definition SheetModelEntryFactory.cpp:337
static iv::gui::sheets::CellDefinition createCheckButtonCellDefinition(bool &activated, const std::string &text="")
Definition SheetModelEntryFactory.cpp:178
static iv::gui::sheets::CellDefinition createEntryOptionalStringCellDefinition(std::optional< std::string > &valueRef)
Create a cell definition for an optional string.
Definition SheetModelEntryFactory.hpp:112
static iv::gui::sheets::CellDefinition createEntryNumberIntegerCellDefinitionWithInterval(const std::string &nameField, T &valueRef, T minValue, T maxValue, unsigned short numMaxChar)
Create a cell definition for an integer number with interval.
Definition SheetModelEntryFactory.hpp:163
static iv::gui::sheets::CellDefinition createEntryNumberDecimalCellDefinitionWithInterval(const std::string &nameField, T &valueRef, T minValue, T maxValue, uint16_t numMaxChar, uint16_t numMaxDecimals)
Create a cell definition for a decimal number with interval.
Definition SheetModelEntryFactory.hpp:224
static iv::gui::sheets::CellDefinition createEntryCellDefinition(std::string &value)
Definition SheetModelEntryFactory.cpp:200
static iv::gui::sheets::CellDefinition createEntryCellDefinitionForTag(const std::shared_ptr< iv::channels::AbstractChannel > &channel, const std::weak_ptr< iv::units::Unit > &unit)
Definition SheetModelEntryFactory.cpp:241
static iv::gui::sheets::CellDefinition createButtonSelectChannelCellDefinition(iv::types::channelId &channelIdOut, const std::optional< std::function< bool(std::shared_ptr< iv::channels::AbstractChannel >)> > &filterCallback=std::nullopt, const std::function< void(const std::weak_ptr< iv::channels::AbstractChannel > &)> &selectionCallback=[](const auto &) {})
Definition SheetModelEntryFactory.cpp:275
static iv::gui::sheets::CellDefinition createComboBoxCellDefinition(uint32_t &option, std::map< uint32_t, std::string > options)
Definition SheetModelEntryFactory.cpp:155
static iv::gui::sheets::CellDefinition createEntryCellDefinitionStatic(std::string_view value="")
Definition SheetModelEntryFactory.cpp:321
static iv::gui::sheets::CellDefinition createComboBoxEnumCellDefinitionLimitedOptions(T &option, std::set< T > options)
Create a cell definition for a combo box with enum values.
Definition SheetModelEntryFactory.hpp:263
static iv::gui::sheets::CellDefinition createEntryNumberDecimalCellDefinition(const std::string &nameField, T &valueRef, uint16_t numMaxChar, uint16_t numMaxDecimals)
Create a cell definition for a decimal number.
Definition SheetModelEntryFactory.hpp:192
static iv::gui::sheets::CellDefinition createEntryOptionalNumberIntegerCellDefinition(const std::string &nameField, std::optional< T > &valueRef, unsigned short numMaxChar)
Create a cell definition for an integer number.
Definition SheetModelEntryFactory.hpp:66
Definition SheetModelCabinetsFactory.cpp:9
std::string channelId
Definition types.hpp:66
Definition structs.hpp:18