CVB++ 15.0
Loading...
Searching...
No Matches
detail_string_property.hpp
1#pragma once
2
3#pragma warning(push)
4#pragma warning(disable : 4800)
5#pragma warning(disable : 4251)
6#pragma warning(disable : 4244)
7#include <QLineEdit>
8#include <QEvent>
9#include <QKeyEvent>
10#pragma warning(pop)
11
12#include "../../global.hpp"
13#include "../../genapi/value_node.hpp"
14#include "../../genapi/string_node.hpp"
15#include "detail_property.hpp"
16
17namespace Cvb
18{
19
20 CVB_BEGIN_INLINE_NS
21
22 namespace UI
23 {
24 namespace Private
25 {
26
27 class StringProperty : public Private::Property
28 {
29
30 Q_OBJECT
31
32 public:
33 StringProperty(const NodePtr &node, Property *parent)
34 : Property(node, PT_String, parent)
35 {
36 }
37
38 QWidget *CreateEditor(QWidget *parent) override
39 {
40 auto stringNode = std::dynamic_pointer_cast<StringNode>(Node());
41 if (stringNode && stringNode->IsAvailable())
42 {
43 auto editor = new QLineEdit(UI::CvbToQt(stringNode->Value()), parent);
44
45 QObject::connect(editor, &QLineEdit::textChanged, this,
46 [=](const QString &text) { SetValue(QVariant(text)); });
47
48 return editor;
49 }
50 return EmptyEditor();
51 }
52
53 bool SetEditorData(QWidget *editor, const QVariant &data) override
54 {
55 if (auto le = qobject_cast<QLineEdit *>(editor))
56 {
57 le->setText(data.toString());
58 return true;
59 }
60 return false;
61 }
62
63 QVariant EditorData(QWidget *editor) override
64 {
65 if (auto le = qobject_cast<QLineEdit *>(editor))
66 return QVariant(le->text());
67 return QVariant();
68 }
69
70 QVariant Value(int column, int role = Qt::UserRole) override
71 {
72 switch (role)
73 {
74 case Qt::DisplayRole:
75 {
76 if (column == 0)
77 return Data(column, role);
78
79 auto stringNode = std::dynamic_pointer_cast<StringNode>(Node());
80 if (stringNode && stringNode->IsAvailable())
81 {
82 try
83 {
84 return QVariant::fromValue(UI::CvbToQt(stringNode->Value()));
85 }
86 catch (const CvbException &e)
87 {
88 if (e.ErrorCode() == ErrorCodes::CVB_TIMEOUT)
89 TimeoutOccurred(); // send signal
90 }
91 }
92 return QVariant("-");
93 }
94 }
95 return QVariant();
96 }
97
98 void SetValue(const QVariant &value) override
99 {
100 if (auto stringNode = std::dynamic_pointer_cast<StringNode>(Node()))
101 {
102 try
103 {
104 stringNode->SetValue(UI::QtToCvb(value.toString()));
105 }
106 catch (const CvbException &)
107 {
108 // ignore the exception
109 }
110 }
111 }
112
113 QString HtmlDescription() override
114 {
115 // Info about max length of string is not available
116 return QString();
117 }
118
119 }; /* class StringProperty */
120
121 } /* namespace Private */
122 } /* namespace UI */
123
124 CVB_END_INLINE_NS
125
126} /* namespace Cvb */
const int CVB_TIMEOUT
Timeout in function.
Definition exception.hpp:29
std::shared_ptr< Node > NodePtr
Convenience shared pointer for Node.
Definition genapi.hpp:71
Namespace for user interface components.
Definition decl_image_scene.hpp:39
Cvb::String QtToCvb(const QString text) noexcept
Convenience converter for strings.
Definition ui.hpp:242
QString CvbToQt(const Cvb::String &text) noexcept
Convenience converter for strings.
Definition ui.hpp:257
Root namespace for the Image Manager interface.
Definition version.hpp:11