Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
CEditNum.hpp
Go to the documentation of this file.
1#ifndef LIBS_GUI_CEDITNUM_HPP_
2#define LIBS_GUI_CEDITNUM_HPP_
3
4#include "core/concepts.hpp"
5#include "core/constants.hpp"
6#include "ui/gui/CEdit.hpp"
8
9#include <fmt/format.h>
10#include <optional>
11#include <string>
12#include <type_traits>
13
14class CEditNum final : public CEdit
15{
16public:
24
25 enum class EPrvTypeEdit
26 {
27 Double,
28
29 Int64_t,
30 Int32_t,
31 Int16_t,
32
36 UInt8_t,
37 };
38
39 struct SEditNum
40 {
42 std::optional<ePrvTimeEdit> m_timeEdit {};
43
44 std::string m_nameField {};
45 std::string m_strData {};
46
47 double *m_dataDouble {nullptr};
48
49 int64_t *m_dataInt64_t {nullptr};
50 int32_t *m_dataInt32_t {nullptr};
51 int16_t *m_dataInt16_t {nullptr};
52
53 uint64_t *m_dataUInt64_t {nullptr};
54 uint32_t *m_dataUInt32_t {nullptr};
55 uint16_t *m_dataUInt16_t {nullptr};
56 uint8_t *m_dataUInt8_t {nullptr};
57
58 bool m_hasInterval {false};
59 double m_minData {0.};
60 double m_maxData {0.};
61 uint8_t maxNumDecimals {0};
62 };
63
64 template<iv::concepts::IntegerType T>
65 static CEditNum *createInteger(const std::string &nameField, T &valueRef, const uint16_t numMaxChar)
66 {
67 if constexpr (std::is_same_v<T, uint64_t>)
68 {
69 return CEditNum::createEditUInt64_t(nameField, &valueRef, numMaxChar);
70 }
71 else if constexpr (std::is_same_v<T, uint32_t>)
72 {
73 return CEditNum::createEditUInt32_t(nameField, &valueRef, numMaxChar);
74 }
75 else if constexpr (std::is_same_v<T, uint16_t>)
76 {
77 return CEditNum::createEditUInt16_t(nameField, &valueRef, numMaxChar);
78 }
79 else if constexpr (std::is_same_v<T, uint8_t>)
80 {
81 return CEditNum::createEditUChar(nameField, &valueRef, numMaxChar);
82 }
83 else if constexpr (std::is_same_v<T, int64_t>)
84 {
85 return CEditNum::createEditInt64_t(nameField, &valueRef, numMaxChar);
86 }
87 else if constexpr (std::is_same_v<T, int32_t>)
88 {
89 return CEditNum::createEditInt32_t(nameField, &valueRef, numMaxChar);
90 }
91 else if constexpr (std::is_same_v<T, int16_t>)
92 {
93 return CEditNum::createEditInt16_t(nameField, &valueRef, numMaxChar);
94 }
95
96 return nullptr;
97 }
98
99 template<iv::concepts::IntegerType T, iv::concepts::IntegerType R1, iv::concepts::IntegerType R2>
100 requires std::is_convertible_v<R1, T> && std::is_convertible_v<R2, T>
101 static CEditNum *createIntegerWithInterval(const std::string &nameField, T &valueRef, R1 minValue, R2 maxValue,
102 uint16_t numMaxChar)
103 {
104 if (static_cast<T>(minValue) > std::numeric_limits<T>::max())
105 {
106 throw std::out_of_range("minValue exceeds the limits of type T");
107 }
108 if (static_cast<T>(maxValue) > std::numeric_limits<T>::max())
109 {
110 throw std::out_of_range("maxValue exceeds the limits of type T");
111 }
112
113 if constexpr (std::is_same_v<T, uint64_t>)
114 {
115 return CEditNum::createEditUInt64WithInterval(nameField, &valueRef, static_cast<uint64_t>(minValue),
116 static_cast<uint64_t>(maxValue), numMaxChar);
117 }
118 else if constexpr (std::is_same_v<T, uint32_t>)
119 {
120 return CEditNum::createEditUInt32WithInterval(nameField, &valueRef, static_cast<uint32_t>(minValue),
121 static_cast<uint32_t>(maxValue), numMaxChar);
122 }
123 else if constexpr (std::is_same_v<T, uint16_t>)
124 {
125 return CEditNum::createEditUInt16WithInterval(nameField, &valueRef, static_cast<uint16_t>(minValue),
126 static_cast<uint16_t>(maxValue), numMaxChar);
127 }
128 else if constexpr (std::is_same_v<T, uint8_t>)
129 {
130 return CEditNum::createEditUCharWithInterval(nameField, &valueRef, static_cast<uint8_t>(minValue),
131 static_cast<uint8_t>(maxValue), numMaxChar);
132 }
133 else if constexpr (std::is_same_v<T, int64_t>)
134 {
135 return CEditNum::createEditInt64WithInterval(nameField, &valueRef, static_cast<int64_t>(minValue),
136 static_cast<int64_t>(maxValue), numMaxChar);
137 }
138 else if constexpr (std::is_same_v<T, int32_t>)
139 {
140 return CEditNum::createEditInt32WithInterval(nameField, &valueRef, static_cast<int32_t>(minValue),
141 static_cast<int32_t>(maxValue), numMaxChar);
142 }
143 else if constexpr (std::is_same_v<T, int16_t>)
144 {
145 return CEditNum::createEditInt16WithInterval(nameField, &valueRef, static_cast<int16_t>(minValue),
146 static_cast<int16_t>(maxValue), numMaxChar);
147 }
148
149 return nullptr;
150 }
151
152 template<iv::concepts::FloatingPointType T>
153 static CEditNum *createFloatingPoint(const std::string &nameField, T &valueRef, uint8_t numMaxDecimals,
154 uint8_t numMaxChar)
155 {
156 if constexpr (std::is_same_v<T, double>)
157 {
158 return CEditNum::createDouble(nameField, &valueRef, numMaxDecimals, numMaxChar);
159 }
160 else if constexpr (std::is_same_v<T, float>)
161 {
162 // return CEditNum::createEditFloat(nameField, &valueRef, numMaxChar);
163 }
164
165 return nullptr;
166 }
167
168 template<iv::concepts::FloatingPointType T>
169 static CEditNum *createFloatingPointWithInterval(const std::string &nameField, T &valueRef, T minValue, T maxValue,
170 uint8_t numMaxDecimals, uint8_t numMaxChar)
171 {
172 if constexpr (std::is_same_v<T, double>)
173 {
174 return CEditNum::createDoubleWithInterval(nameField, &valueRef, minValue, maxValue, numMaxDecimals,
175 numMaxChar);
176 }
177 else if constexpr (std::is_same_v<T, float>)
178 {
179 // return CEditNum::createEditFloatWithInterval(nameField, &valueRef, minValue, maxValue, numMaxChar);
180 }
181
182 return nullptr;
183 }
184
185 static CEditNum *createTime(const std::string &nameField, ePrvTimeEdit timeFormat, iv::types::milliseconds &time,
186 uint16_t numMaxChar);
187 static CEditNum *createTimeWithInterval(const std::string &nameField, ePrvTimeEdit timeFormat,
189 iv::types::milliseconds maxTime, uint16_t numMaxChar);
190
191 ~CEditNum() override;
192
193 [[nodiscard]] double getValueDouble() const;
194
195 bool getValueInt64_t(int64_t *value) const;
196 bool getValueInt32_t(int32_t *value) const;
197 bool getValueInt16_t(int16_t *value) const;
198
199 bool getValueUInt64_t(uint64_t *value) const;
200 bool getValueUInt32_t(uint32_t *value) const;
201 bool getValueUInt16_t(uint16_t *value) const;
202 bool getValueUChar(uint8_t *value) const;
203
204 template<typename T>
205 void setValue(T value)
207 {
208 const std::string strValue = iv::utils::formatNumber(value, m_sEditNum->maxNumDecimals);
209 setText(strValue);
210 }
211
212 template<typename T>
213 void setInterval(T minValue, T maxValue)
214 requires std::is_arithmetic_v<T>
215 {
217 m_sEditNum->m_minData = static_cast<double>(minValue);
218 m_sEditNum->m_maxData = static_cast<double>(maxValue);
219 }
220
221 [[nodiscard]] const std::string &getNameField() const;
222
223private:
224 static CEditNum *createDouble(const std::string &nameField, double *number, uint8_t numMaxDecimals,
225 uint8_t numMaxChar);
226 static CEditNum *createDoubleWithInterval(const std::string &nameField, double *number, double minDouble,
227 double maxDouble, uint8_t numMaxDecimals, uint8_t numMaxChar);
228
229 static CEditNum *createEditInt64_t(const std::string &nameField, int64_t *number, uint16_t numMaxChar);
230 static CEditNum *createEditInt32_t(const std::string &nameField, int32_t *number, int32_t numMaxChar);
231 static CEditNum *createEditInt16_t(const std::string &nameField, int16_t *number, uint16_t numMaxChar);
232
233 static CEditNum *createEditInt64WithInterval(const std::string &nameField, int64_t *number, int64_t minInt64,
234 int64_t maxInt64, int16_t numMaxChar);
235 static CEditNum *createEditInt32WithInterval(const std::string &nameField, int32_t *number, int32_t minInt32,
236 int32_t maxInt32, int16_t numMaxChar);
237 static CEditNum *createEditInt16WithInterval(const std::string &nameField, int16_t *number, int16_t minInt16,
238 int16_t maxInt16, int16_t numMaxChar);
239
240 static CEditNum *createEditUInt64_t(const std::string &nameField, uint64_t *number, uint16_t numMaxChar);
241 static CEditNum *createEditUInt32_t(const std::string &nameField, uint32_t *number, uint16_t numMaxChar);
242 static CEditNum *createEditUInt16_t(const std::string &nameField, uint16_t *number, uint16_t numMaxChar);
243 static CEditNum *createEditUChar(const std::string &nameField, uint8_t *number, unsigned short numMaxChar);
244
245 static CEditNum *createEditUInt64WithInterval(const std::string &nameField, uint64_t *number, uint64_t minUInt64,
246 uint64_t maxUInt64, uint16_t numMaxChar);
247 static CEditNum *createEditUInt32WithInterval(const std::string &nameField, uint32_t *number, uint32_t minUInt32,
248 uint32_t maxUInt32, uint16_t numMaxChar);
249 static CEditNum *createEditUInt16WithInterval(const std::string &nameField, uint16_t *number, uint16_t minUInt16,
250 uint16_t maxUInt16, uint16_t numMaxChar);
251 static CEditNum *createEditUCharWithInterval(const std::string &nameField, uint8_t *number, uint8_t minUInt8,
252 uint8_t maxUInt8, unsigned short numMaxChar);
253
254 bool filterChar(char car, std::string *filterReasonOpt) override;
255 bool filterCharAtEnd(char car, std::string *filterReasonOpt) override;
256
257 CEditNum(SEditNum **dataPrivate, std::string *strValue, unsigned short numMaxChar);
258
260};
261
262#endif /* LIBS_GUI_CEDITNUM_HPP_ */
Definition CEditNum.hpp:15
bool getValueUInt32_t(uint32_t *value) const
Definition CEditNum.cpp:818
bool getValueInt16_t(int16_t *value) const
Definition CEditNum.cpp:768
static CEditNum * createEditInt16_t(const std::string &nameField, int16_t *number, uint16_t numMaxChar)
Definition CEditNum.cpp:466
bool filterCharAtEnd(char car, std::string *filterReasonOpt) override
Definition CEditNum.cpp:965
static CEditNum * createInteger(const std::string &nameField, T &valueRef, const uint16_t numMaxChar)
Definition CEditNum.hpp:65
const std::string & getNameField() const
Definition CEditNum.cpp:893
EPrvTypeEdit
Definition CEditNum.hpp:26
SEditNum * m_sEditNum
Definition CEditNum.hpp:259
static CEditNum * createEditUInt32_t(const std::string &nameField, uint32_t *number, uint16_t numMaxChar)
Definition CEditNum.cpp:538
static CEditNum * createEditUChar(const std::string &nameField, uint8_t *number, unsigned short numMaxChar)
Definition CEditNum.cpp:610
static CEditNum * createDoubleWithInterval(const std::string &nameField, double *number, double minDouble, double maxDouble, uint8_t numMaxDecimals, uint8_t numMaxChar)
Definition CEditNum.cpp:425
static CEditNum * createTime(const std::string &nameField, ePrvTimeEdit timeFormat, iv::types::milliseconds &time, uint16_t numMaxChar)
Definition CEditNum.cpp:638
void setValue(T value)
Definition CEditNum.hpp:205
bool getValueInt64_t(int64_t *value) const
Definition CEditNum.cpp:718
bool filterChar(char car, std::string *filterReasonOpt) override
Definition CEditNum.cpp:899
static CEditNum * createEditInt32WithInterval(const std::string &nameField, int32_t *number, int32_t minInt32, int32_t maxInt32, int16_t numMaxChar)
Definition CEditNum.cpp:494
static CEditNum * createEditUInt32WithInterval(const std::string &nameField, uint32_t *number, uint32_t minUInt32, uint32_t maxUInt32, uint16_t numMaxChar)
Definition CEditNum.cpp:578
ePrvTimeEdit
Definition CEditNum.hpp:18
~CEditNum() override
Definition CEditNum.cpp:688
bool getValueInt32_t(int32_t *value) const
Definition CEditNum.cpp:743
void setInterval(T minValue, T maxValue)
Definition CEditNum.hpp:213
static CEditNum * createEditUInt16WithInterval(const std::string &nameField, uint16_t *number, uint16_t minUInt16, uint16_t maxUInt16, uint16_t numMaxChar)
Definition CEditNum.cpp:594
CEditNum(SEditNum **dataPrivate, std::string *strValue, unsigned short numMaxChar)
Definition CEditNum.cpp:672
bool getValueUInt16_t(uint16_t *value) const
Definition CEditNum.cpp:843
static CEditNum * createTimeWithInterval(const std::string &nameField, ePrvTimeEdit timeFormat, iv::types::milliseconds &time, iv::types::milliseconds minTime, iv::types::milliseconds maxTime, uint16_t numMaxChar)
Definition CEditNum.cpp:653
static CEditNum * createFloatingPoint(const std::string &nameField, T &valueRef, uint8_t numMaxDecimals, uint8_t numMaxChar)
Definition CEditNum.hpp:153
double getValueDouble() const
Definition CEditNum.cpp:695
static CEditNum * createEditUInt16_t(const std::string &nameField, uint16_t *number, uint16_t numMaxChar)
Definition CEditNum.cpp:550
static CEditNum * createFloatingPointWithInterval(const std::string &nameField, T &valueRef, T minValue, T maxValue, uint8_t numMaxDecimals, uint8_t numMaxChar)
Definition CEditNum.hpp:169
bool getValueUInt64_t(uint64_t *value) const
Definition CEditNum.cpp:793
static CEditNum * createEditInt16WithInterval(const std::string &nameField, int16_t *number, int16_t minInt16, int16_t maxInt16, int16_t numMaxChar)
Definition CEditNum.cpp:510
static CEditNum * createEditInt32_t(const std::string &nameField, int32_t *number, int32_t numMaxChar)
Definition CEditNum.cpp:454
static CEditNum * createEditInt64_t(const std::string &nameField, int64_t *number, uint16_t numMaxChar)
Definition CEditNum.cpp:442
static CEditNum * createEditUInt64_t(const std::string &nameField, uint64_t *number, uint16_t numMaxChar)
Definition CEditNum.cpp:526
static CEditNum * createEditInt64WithInterval(const std::string &nameField, int64_t *number, int64_t minInt64, int64_t maxInt64, int16_t numMaxChar)
Definition CEditNum.cpp:478
bool getValueUChar(uint8_t *value) const
Definition CEditNum.cpp:868
static CEditNum * createEditUCharWithInterval(const std::string &nameField, uint8_t *number, uint8_t minUInt8, uint8_t maxUInt8, unsigned short numMaxChar)
Definition CEditNum.cpp:622
static CEditNum * createIntegerWithInterval(const std::string &nameField, T &valueRef, R1 minValue, R2 maxValue, uint16_t numMaxChar)
Definition CEditNum.hpp:101
static CEditNum * createEditUInt64WithInterval(const std::string &nameField, uint64_t *number, uint64_t minUInt64, uint64_t maxUInt64, uint16_t numMaxChar)
Definition CEditNum.cpp:562
static CEditNum * createDouble(const std::string &nameField, double *number, uint8_t numMaxDecimals, uint8_t numMaxChar)
Definition CEditNum.cpp:411
Definition CEdit.hpp:40
void setText(const std::string &text)
Definition CEdit.cpp:288
Definition concepts.hpp:192
Definition concepts.hpp:187
static constexpr iv::types::timestamp MillisecondsInHours
Definition constants.hpp:37
static constexpr iv::types::timestamp MillisecondsInMinutes
Definition constants.hpp:36
static constexpr iv::types::timestamp MillisecondsInSeconds
Definition constants.hpp:35
static constexpr iv::types::timestamp MillisecondsInDays
Definition constants.hpp:38
uint64_t milliseconds
Definition types.hpp:22
std::string formatNumber(T number, std::optional< uint8_t > precision=std::nullopt)
Check if a string is a number, only applies precision to floating point numbers.
Definition stringUtils.hpp:343
Definition CEditNum.hpp:40
uint32_t * m_dataUInt32_t
Definition CEditNum.hpp:54
std::string m_nameField
Definition CEditNum.hpp:44
std::optional< ePrvTimeEdit > m_timeEdit
Definition CEditNum.hpp:42
double m_minData
Definition CEditNum.hpp:59
int16_t * m_dataInt16_t
Definition CEditNum.hpp:51
uint64_t * m_dataUInt64_t
Definition CEditNum.hpp:53
double m_maxData
Definition CEditNum.hpp:60
uint16_t * m_dataUInt16_t
Definition CEditNum.hpp:55
bool m_hasInterval
Definition CEditNum.hpp:58
int64_t * m_dataInt64_t
Definition CEditNum.hpp:49
EPrvTypeEdit m_type
Definition CEditNum.hpp:41
std::string m_strData
Definition CEditNum.hpp:45
int32_t * m_dataInt32_t
Definition CEditNum.hpp:50
uint8_t maxNumDecimals
Definition CEditNum.hpp:61
double * m_dataDouble
Definition CEditNum.hpp:47
uint8_t * m_dataUInt8_t
Definition CEditNum.hpp:56