Skip to content

Commit 43e0485

Browse files
committed
Read binding table keyboard shortcut Ctrl+B
Note prior to version 2.05.81 the dialog needs to have active focus to trigger the action.
1 parent 5e3002e commit 43e0485

File tree

5 files changed

+71
-12
lines changed

5 files changed

+71
-12
lines changed

bindings.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,10 @@ bool DeRestPluginPrivate::readBindingTable(RestNodeBase *node, quint8 startIndex
123123
Resource *r = dynamic_cast<Resource*>(node);
124124

125125
// whitelist
126-
if (checkMacVendor(node->address(), VENDOR_DDEL))
126+
if (node->mgmtBindSupported())
127+
{
128+
}
129+
else if (checkMacVendor(node->address(), VENDOR_DDEL))
127130
{
128131
}
129132
else if (checkMacVendor(node->address(), VENDOR_UBISYS))

de_web_plugin.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -16777,7 +16777,7 @@ QDialog *DeRestPlugin::createDialog()
1677716777
{
1677816778
if (!m_w)
1677916779
{
16780-
m_w = new DeRestWidget(0);
16780+
m_w = new DeRestWidget(nullptr, this);
1678116781
}
1678216782

1678316783
return m_w;

de_web_plugin.h

+5-4
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,12 @@ public Q_SLOTS:
6868
void nodeUpdated(quint64 extAddress, QString key, QString value);
6969

7070
private:
71-
QTimer *m_idleTimer;
72-
QTimer *m_readAttributesTimer;
71+
QTimer *m_idleTimer = nullptr;
72+
QTimer *m_readAttributesTimer = nullptr;
7373
State m_state;
74-
DeRestWidget *m_w;
75-
DeRestPluginPrivate *d;
74+
friend class DeRestWidget;
75+
DeRestWidget *m_w = nullptr;
76+
DeRestPluginPrivate *d = nullptr;
7677
};
7778

7879
#endif // REST_PLUGIN_H

de_web_widget.cpp

+51-3
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,22 @@
88
*
99
*/
1010

11+
#include <QAction>
1112
#include <QLabel>
1213
#include <QNetworkInterface>
1314
#include "de_web_plugin.h"
15+
#include "de_web_plugin_private.h"
1416
#include "de_web_widget.h"
1517
#include "ui_de_web_widget.h"
1618

1719
/*! Constructor. */
18-
DeRestWidget::DeRestWidget(QWidget *parent) :
20+
DeRestWidget::DeRestWidget(QWidget *parent, DeRestPlugin *_plugin) :
1921
QDialog(parent),
20-
ui(new Ui::DeWebWidget)
22+
ui(new Ui::DeWebWidget),
23+
plugin(_plugin)
2124
{
2225
ui->setupUi(this);
23-
setWindowTitle(tr("DE REST API"));
26+
setWindowTitle(tr("DE REST-API"));
2427
deCONZ::ApsController *apsCtrl = deCONZ::ApsController::instance();
2528

2629
quint16 httpPort = apsCtrl ? deCONZ::ApsController::instance()->getParameter(deCONZ::ParamHttpPort) : 0;
@@ -77,6 +80,15 @@ DeRestWidget::DeRestWidget(QWidget *parent) :
7780
}
7881

7982
ui->ipAddressesLabel->setText(str);
83+
84+
//
85+
connect(deCONZ::ApsController::instance(), &deCONZ::ApsController::nodeEvent, this, &DeRestWidget::nodeEvent);
86+
87+
// keyboard shortcuts
88+
auto *readBindingTableAction = new QAction(tr("Read binding table"), this);
89+
readBindingTableAction->setShortcut(Qt::CTRL + Qt::Key_B);
90+
connect(readBindingTableAction, &QAction::triggered, this, &DeRestWidget::readBindingTableTriggered);
91+
addAction(readBindingTableAction);
8092
}
8193

8294
/*! Deconstructor. */
@@ -97,6 +109,42 @@ bool DeRestWidget::pluginActive() const
97109
return false;
98110
}
99111

112+
void DeRestWidget::readBindingTableTriggered()
113+
{
114+
if (m_selectedNodeAddress.hasExt())
115+
{
116+
117+
auto *restNode = dynamic_cast<RestNodeBase*>(plugin->d->getLightNodeForAddress(m_selectedNodeAddress));
118+
119+
if (!restNode)
120+
{
121+
restNode = dynamic_cast<RestNodeBase*>(plugin->d->getSensorNodeForAddress(m_selectedNodeAddress));
122+
}
123+
124+
if (restNode)
125+
{
126+
restNode->setMgmtBindSupported(true);
127+
DBG_Printf(DBG_INFO, "read binding table for %s (%s) \n", qPrintable(m_selectedNodeAddress.toStringExt()), qPrintable(m_selectedNodeAddress.toStringNwk()));
128+
plugin->d->readBindingTable(restNode, 0);
129+
}
130+
}
131+
}
132+
133+
void DeRestWidget::nodeEvent(const deCONZ::NodeEvent &event)
134+
{
135+
if (event.node())
136+
{
137+
if (event.event() == deCONZ::NodeEvent::NodeSelected)
138+
{
139+
m_selectedNodeAddress = event.node()->address();
140+
}
141+
else if (event.event() == deCONZ::NodeEvent::NodeSelected)
142+
{
143+
m_selectedNodeAddress = {};
144+
}
145+
}
146+
}
147+
100148
void DeRestWidget::showEvent(QShowEvent *)
101149
{
102150
deCONZ::ApsController *apsCtrl = deCONZ::ApsController::instance();

de_web_widget.h

+10-3
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,32 @@
1212
#define DE_WEB_WIDGET_H
1313

1414
#include <QDialog>
15+
#include <deconz.h>
1516

1617
namespace Ui {
1718
class DeWebWidget;
1819
}
1920

21+
class DeRestPlugin;
22+
2023
class DeRestWidget : public QDialog
2124
{
2225
Q_OBJECT
2326

2427
public:
25-
explicit DeRestWidget(QWidget *parent);
28+
explicit DeRestWidget(QWidget *parent, DeRestPlugin *_plugin);
2629
~DeRestWidget();
2730
bool pluginActive() const;
2831

29-
public Q_SLOTS:
32+
private Q_SLOTS:
33+
void readBindingTableTriggered();
34+
void nodeEvent(const deCONZ::NodeEvent &event);
3035

3136
private:
3237
void showEvent(QShowEvent *);
33-
Ui::DeWebWidget *ui;
38+
deCONZ::Address m_selectedNodeAddress;
39+
Ui::DeWebWidget *ui = nullptr;
40+
DeRestPlugin *plugin = nullptr;
3441
};
3542

3643
#endif // DE_WEB_WIDGET_H

0 commit comments

Comments
 (0)