Loading...
Searching...
No Matches
AddressLineEdit.hpp
1#pragma once
2#include <State/MessageListSerialization.hpp>
3#include <State/Widgets/AddressValidator.hpp>
4
5#include <score/model/Skin.hpp>
6#include <score/widgets/ValidationPalette.hpp>
7
8#include <Explorer/Explorer/DeviceExplorerModel.hpp>
9
10#include <QDropEvent>
11#include <QGuiApplication>
12#include <QLineEdit>
13#include <QPalette>
14#include <QValidator>
15
16namespace Process
17{
23template <class Validator_T, class Parent_T>
24class AddressLineEditBase : public QLineEdit
25{
26public:
27 explicit AddressLineEditBase(Device::NodeBasedItemModel* model, QWidget* parent)
28 : QLineEdit{parent}
29 , m_model{model}
30 {
31 setAcceptDrops(true);
32 setMinimumHeight(24);
33 connect(this, &QLineEdit::textChanged, this, &AddressLineEditBase::updatePalette);
34 }
35
36 void updatePalette(const QString& str)
37 {
38 QString s = str;
39 int i = 0;
40 auto validity = score::InputValidity::Valid;
41 if(m_validator.validate(s, i) == QValidator::State::Acceptable)
42 {
43 if(m_model)
44 {
45 // Look into the tree to see if the node actually exists
46 auto addr = State::parseAddressAccessor(s);
47
48 if(!Device::try_getNodeFromAddress(m_model->rootNode(), addr->address))
50 }
51 }
52 else
53 {
54 validity = score::InputValidity::Invalid;
55 }
56 score::setInputValidity(*this, validity);
57 }
58
59private:
60 void dragEnterEvent(QDragEnterEvent* ev) override
61 {
62 static_cast<Parent_T*>(parent())->dragEnterEvent(ev);
63 }
64 void dropEvent(QDropEvent* ev) override
65 {
66 static_cast<Parent_T*>(parent())->dropEvent(ev);
67 }
68
69 Validator_T m_validator;
71};
72
73template <typename Parent_T>
74class AddressLineEdit final
75 : public AddressLineEditBase<State::AddressValidator, Parent_T>
76{
77public:
78 using AddressLineEditBase<State::AddressValidator, Parent_T>::AddressLineEditBase;
79};
80
81template <typename Parent_T>
83 : public AddressLineEditBase<State::AddressAccessorValidator, Parent_T>
84{
85public:
87 State::AddressAccessorValidator, Parent_T>::AddressLineEditBase;
88};
89}
Definition NodeBasedItemModel.hpp:18
Definition AddressLineEdit.hpp:84
The AddressLineEdit class.
Definition AddressLineEdit.hpp:25
Definition AddressLineEdit.hpp:76
Definition AddressValidator.hpp:28
The AddressValidator class.
Definition AddressValidator.hpp:18
Base classes and tools to implement processes and layers.
Definition JSONVisitor.hpp:1115
void setInputValidity(QWidget &w, InputValidity v)
Tint a widget to flag what it holds, and keep the tint skin-aware.
Definition ValidationPalette.cpp:36
@ Valid
No tint: the widget inherits the application palette.
@ Unknown
Well-formed but does not resolve to anything.