4#pragma warning(disable : 4800)
5#pragma warning(disable : 4251)
6#pragma warning(disable : 4244)
12#include "../../global.hpp"
13#include "../../genapi/value_node.hpp"
14#include "../../genapi/enumeration_node.hpp"
15#include "../../genapi/enum_entry_node.hpp"
16#include "detail_property.hpp"
28 class EnumProperty :
public Private::Property
35 : Property(node, PT_Enumeration, parent)
40 QWidget *CreateEditor(QWidget *parent)
override
42 auto enumNode = std::dynamic_pointer_cast<EnumerationNode>(Node());
43 if (enumNode && enumNode->IsAvailable())
45 auto editor =
new QComboBox(parent);
46 editor->addItems(entriesList_);
47 auto dispName = DisplayNameForSymbolicValue(
UI::CvbToQt(enumNode->Value()));
48 editor->setCurrentIndex(IndexForDisplayName(dispName));
50 QObject::connect(editor, QOverload<int>::of(&QComboBox::currentIndexChanged),
this,
51 [=](
int index) { SetValue(index); });
58 bool SetEditorData(QWidget *editor,
const QVariant &data)
override
60 if (
auto cb = qobject_cast<QComboBox *>(editor))
62 cb->setCurrentIndex(cb->findText(data.toString()));
68 QVariant EditorData(QWidget *editor)
override
70 if (
auto cb = qobject_cast<QComboBox *>(editor))
72 return QVariant(cb->currentText());
80 QVariant Value(
int column,
int role = Qt::UserRole)
override
87 return Data(column, role);
89 auto enumNode = std::dynamic_pointer_cast<EnumerationNode>(Node());
90 if (enumNode && enumNode->IsAvailable())
92 auto dispName = DisplayNameForSymbolicValue(
UI::CvbToQt(enumNode->Value()));
93 return QVariant(dispName);
101 void SetValue(
const QVariant &value)
override
103 auto enumNode = std::dynamic_pointer_cast<EnumerationNode>(Node());
104 if (enumNode && enumNode->IsAvailable())
106 auto curDispName = entriesList_.at(value.toInt());
109 enumNode->SetValue(
UI::QtToCvb(SymbolicValueForDisplayName(curDispName)));
111 catch (
const CvbException &)
118 QString HtmlDescription()
override
120 auto txt = QString(
"<table><tr><td><b>Entries:</b></td></tr>");
121 txt.append(
"<table border=1 cellspacing=\"0\" cellpadding=\"5\">");
123 "<tr><th align=\"left\"><b>Display Name</b></th><th align=\"left\"><b>Symbolic</b></th><th "
124 "align=\"left\"><b>Integer</b></th><th align=\"left\"><b>ToolTip</b></b></th></tr>");
126 QMap<int64_t, QStringList>::const_iterator i = entriesMap_.constBegin();
127 while (i != entriesMap_.constEnd())
129 auto nInfo = i.value();
130 auto tooltip = nInfo.at(2);
131 if (tooltip.isEmpty())
133 txt.append(
"<tr><td>" + nInfo.at(0) +
"</td><td>" + nInfo.at(1) +
"</td><td>" + QString::number(i.key())
134 +
"</td><td>" + tooltip +
"</td></tr>");
139 txt.append(
"</table></table>");
144 void RetrieveEntries()
146 auto enumNode = std::dynamic_pointer_cast<EnumerationNode>(Node());
150 entriesList_.clear();
153 auto entries = enumNode->Entries();
155 for (std::size_t i = 0; i < entries.size(); i++)
157 auto entry = entries.at(i);
158 if (entry->IsAvailable())
160 entriesList_.append(
UI::CvbToQt(entry->DisplayName()));
162 QStringList entryInfo;
165 entriesMap_.insert(entry->NumericValue(), entryInfo);
171 QString SymbolicValueForDisplayName(
const QString &name)
173 QMap<int64_t, QStringList>::const_iterator iter = entriesMap_.constBegin();
174 while (iter != entriesMap_.constEnd())
176 auto lst = iter.value();
177 if (lst.at(0) == name)
186 QString DisplayNameForSymbolicValue(
const QString &symbolicValue)
190 QMap<int64_t, QStringList>::const_iterator iter = entriesMap_.constBegin();
191 while (iter != entriesMap_.constEnd())
193 auto lst = iter.value();
194 if (lst.at(1) == symbolicValue)
201 int IndexForDisplayName(
const QString &displayName)
203 for (
int i = 0; i < entriesList_.size(); i++)
205 if (entriesList_.at(i) == displayName)
213 QStringList entriesList_;
214 QMap<int64_t, QStringList> entriesMap_;
std::shared_ptr< ValueNode > ValueNodePtr
Convenience shared pointer for ValueNode.
Definition genapi.hpp:91
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 c_bayer_to_rgb.h:17