CVB++ 15.0
detail_command_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 <QPushButton>
8#include <QEvent>
9#pragma warning(pop)
10
11#include "../../global.hpp"
12#include "../../genapi/value_node.hpp"
13#include "../../genapi/command_node.hpp"
14#include "detail_property.hpp"
15
16namespace Cvb
17{
18
19 CVB_BEGIN_INLINE_NS
20
21 namespace UI
22 {
23 namespace Private
24 {
25
26 class CommandProperty : public Private::Property
27 {
28
29 Q_OBJECT
30
31 public:
32 CommandProperty(const ValueNodePtr &node, Property *parent)
33 : Property(node, PT_Command, parent)
34 {
35 }
36
37 QWidget *CreateEditor(QWidget *parent) override
38 {
39 auto cmdNode = std::dynamic_pointer_cast<CommandNode>(Node());
40 if (cmdNode && cmdNode->IsAvailable())
41 {
42 auto editor = new QPushButton(tr("Execute"), parent);
43 editor->setFixedSize(100, 17);
44
45 QObject::connect(editor, &QPushButton::pressed, this, [=]() { SetValue(1); });
46
47 return editor;
48 }
49 return EmptyEditor();
50 }
51
52 bool SetEditorData(QWidget *, const QVariant &) override
53 {
54 return true;
55 }
56
57 QVariant EditorData(QWidget *) override
58 {
59 return QVariant();
60 }
61
62 QVariant Value(int column, int role = Qt::UserRole) override
63 {
64 switch (role)
65 {
66 case Qt::DisplayRole:
67 {
68 if (column == 0)
69 return Data(column, role);
70
71 auto cmdNode = std::dynamic_pointer_cast<CommandNode>(Node());
72 if (cmdNode && cmdNode->IsAvailable())
73 {
74 return QVariant(QString("[COMMAND]"));
75 }
76 return QVariant("-");
77 }
78 }
79 return QVariant();
80 }
81
82 void SetValue(const QVariant &) override
83 {
84 if (auto cmdNode = std::dynamic_pointer_cast<CommandNode>(Node()))
85 {
86 try
87 {
88 cmdNode->Execute();
89 }
90 catch (const Cvb::CvbException &)
91 {
92 // ignore the exception
93 }
94 }
95 }
96
97 QString HtmlDescription() override
98 {
99 return QString();
100 }
101
102 }; /* class CommandProperty */
103
104 } /* namespace Private */
105 } /* namespace UI */
106
107 CVB_END_INLINE_NS
108
109} /* namespace Cvb */
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
Root namespace for the Image Manager interface.
Definition c_bayer_to_rgb.h:17