1919 */
2020
2121#include " iiowidget.h"
22- #include " channelattrdatastrategy.h"
23- #include " contextattrdatastrategy.h"
24- #include " deviceattrdatastrategy.h"
25- #include " iiowidgetselector.h"
22+ #include " datastrategy/channelattrdatastrategy.h"
23+ #include " datastrategy/contextattrdatastrategy.h"
24+ #include " datastrategy/deviceattrdatastrategy.h"
25+ #include " datastrategy/emptydatastrategy.h"
26+
2627#include < iioutil/connectionprovider.h>
27- #include < QDateTime>
28- #include < QApplication>
2928#include < pluginbase/preferences.h>
3029#include < gui/utils.h>
3130
31+ #include < QDateTime>
32+ #include < QApplication>
33+
3234using namespace scopy ;
3335
3436Q_LOGGING_CATEGORY (CAT_IIOWIDGET , " iioWidget" )
@@ -46,15 +48,27 @@ IIOWidget::IIOWidget(GuiStrategyInterface *uiStrategy, DataStrategyInterface *da
4648 , m_DStoUI(nullptr )
4749 , m_isConfigurable(false )
4850{
51+ // Config button
52+ m_configBtn->setStyleSheet (" border-image: url(\" :/gui/icons/scopy-default/icons/gear_wheel.svg\" );" );
53+ m_configBtn->setVisible (m_isConfigurable);
54+
55+ // General layout
4956 setLayout (new QVBoxLayout (this ));
5057 layout ()->setContentsMargins (0 , 0 , 0 , 0 );
5158 layout ()->setSpacing (0 );
5259 setSizePolicy (QSizePolicy::Preferred, QSizePolicy::Fixed);
5360
61+ QWidget *topWidget = new QWidget (this );
62+ topWidget->setLayout (new QHBoxLayout (topWidget));
63+ topWidget->layout ()->setContentsMargins (0 , 0 , 0 , 0 );
64+
5465 QWidget *ui = m_uiStrategy->ui ();
5566 if (ui) {
56- layout ()->addWidget (ui);
67+ topWidget-> layout ()->addWidget (ui);
5768 }
69+ topWidget->layout ()->addWidget (m_configBtn);
70+
71+ layout ()->addWidget (topWidget);
5872 layout ()->addWidget (m_progressBar);
5973
6074 QObject *uiStrategyObject = dynamic_cast <QObject *>(m_uiStrategy);
@@ -65,23 +79,31 @@ IIOWidget::IIOWidget(GuiStrategyInterface *uiStrategy, DataStrategyInterface *da
6579
6680 connect (m_progressBar, &SmallProgressBar::progressFinished, this ,
6781 [this ]() { this ->convertUItoDS (m_lastData); });
82+ connect (m_configBtn, &QPushButton::clicked, this , &IIOWidget::reconfigure);
6883
6984 connect (uiStrategyObject, SIGNAL (emitData (QString)), this , SLOT (startTimer (QString)));
85+ connect (uiStrategyObject, SIGNAL (emitData (QString)), this , SIGNAL (emitData (QString)));
86+ connect (uiStrategyObject, SIGNAL (displayedNewData (QString, QString)), this ,
87+ SIGNAL (displayedNewData (QString, QString)));
7088
7189 connect (dataStrategyObject, SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )), this ,
7290 SLOT (emitDataStatus (QDateTime, QString, QString, int , bool )));
7391
7492 // forward data request from ui strategy to data strategy
7593 connect (uiStrategyObject, SIGNAL (requestData ()), dataStrategyObject, SLOT (readAsync ()));
94+ connect (dataStrategyObject, SIGNAL (sendData (QString, QString)), this , SIGNAL (sendData (QString, QString)));
95+ connect (dataStrategyObject, SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )), this ,
96+ SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )));
7697
7798 // forward data from data strategy to ui strategy
7899 connect (dataStrategyObject, SIGNAL (sendData (QString, QString)), this , SLOT (convertDStoUI (QString, QString)));
100+ connect (dataStrategyObject, SIGNAL (aboutToWrite (QString, QString)), this ,
101+ SIGNAL (aboutToWrite (QString, QString)));
79102
80103 // intercept the sendData from dataStrategy to collect information
81104 connect (dataStrategyObject, SIGNAL (sendData (QString, QString)), this , SLOT (storeReadInfo (QString, QString)));
82105
83- // The data will be populated here
84- bool useLazyLoading = Preferences::GetInstance ()->get (" iiowidgets_use_lazy_loading" ).toBool ();
106+ bool useLazyLoading = Preferences::get (" iiowidgets_use_lazy_loading" ).toBool ();
85107 if (!useLazyLoading) { // force skip lazy load
86108 LAZY_LOAD (initialize);
87109 }
@@ -97,41 +119,41 @@ void IIOWidget::writeAsync(QString data) { m_dataStrategy->writeAsync(data); }
97119
98120DataStrategyInterface *IIOWidget::swapDataStrategy (DataStrategyInterface *dataStrategy)
99121{
100- QWidget *dataStrategyWidget = dynamic_cast <QWidget *>(m_dataStrategy);
101- QWidget *uiStrategyWidget = dynamic_cast <QWidget *>(m_uiStrategy);
102- QWidget *newDataStrategyWidget = dynamic_cast <QWidget *>(dataStrategy);
122+ QObject *dataStrategyObject = dynamic_cast <QObject *>(m_dataStrategy);
123+ QObject *uiStrategyObject = dynamic_cast <QObject *>(m_uiStrategy);
124+ QObject *newDataStrategyObject = dynamic_cast <QObject *>(dataStrategy);
103125
104126 // disconnect old data strategy
105- disconnect (dataStrategyWidget , SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )), this ,
127+ disconnect (dataStrategyObject , SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )), this ,
106128 SLOT (emitDataStatus (QDateTime, QString, QString, int , bool )));
107- disconnect (uiStrategyWidget , SIGNAL (requestData ()), dataStrategyWidget , SLOT (readAsync ()));
108- disconnect (dataStrategyWidget , SIGNAL (sendData (QString, QString)), uiStrategyWidget ,
129+ disconnect (uiStrategyObject , SIGNAL (requestData ()), dataStrategyObject , SLOT (readAsync ()));
130+ disconnect (dataStrategyObject , SIGNAL (sendData (QString, QString)), uiStrategyObject ,
109131 SLOT (receiveData (QString, QString)));
110- disconnect (dataStrategyWidget , SIGNAL (sendData (QString, QString)), this ,
132+ disconnect (dataStrategyObject , SIGNAL (sendData (QString, QString)), this ,
111133 SLOT (storeReadInfo (QString, QString))); // TODO: maybe do something with this slot..
112- disconnect (dataStrategyWidget , SIGNAL (sendData (QString, QString)), this , SIGNAL (sendData (QString, QString)));
113- disconnect (dataStrategyWidget , SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )), this ,
134+ disconnect (dataStrategyObject , SIGNAL (sendData (QString, QString)), this , SIGNAL (sendData (QString, QString)));
135+ disconnect (dataStrategyObject , SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )), this ,
114136 SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )));
115- disconnect (dataStrategyWidget , SIGNAL (aboutToWrite (QString, QString)), this ,
137+ disconnect (dataStrategyObject , SIGNAL (aboutToWrite (QString, QString)), this ,
116138 SIGNAL (aboutToWrite (QString, QString)));
117- disconnect (uiStrategyWidget , SIGNAL (emitData (QString)), this , SIGNAL (emitData (QString)));
118- disconnect (uiStrategyWidget , SIGNAL (displayedNewData (QString, QString)), this ,
139+ disconnect (uiStrategyObject , SIGNAL (emitData (QString)), this , SIGNAL (emitData (QString)));
140+ disconnect (uiStrategyObject , SIGNAL (displayedNewData (QString, QString)), this ,
119141 SIGNAL (displayedNewData (QString, QString)));
120142
121143 // connect new data strategy
122- connect (newDataStrategyWidget , SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )), this ,
144+ connect (newDataStrategyObject , SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )), this ,
123145 SLOT (emitDataStatus (QDateTime, QString, QString, int , bool )));
124- connect (uiStrategyWidget , SIGNAL (requestData ()), newDataStrategyWidget , SLOT (readAsync ()));
125- connect (newDataStrategyWidget , SIGNAL (sendData (QString, QString)), uiStrategyWidget ,
146+ connect (uiStrategyObject , SIGNAL (requestData ()), newDataStrategyObject , SLOT (readAsync ()));
147+ connect (newDataStrategyObject , SIGNAL (sendData (QString, QString)), uiStrategyObject ,
126148 SLOT (receiveData (QString, QString)));
127- connect (newDataStrategyWidget , SIGNAL (sendData (QString, QString)), this , SLOT (storeReadInfo (QString, QString)));
128- connect (dataStrategyWidget , SIGNAL (sendData (QString, QString)), this , SIGNAL ( sendData (QString, QString)));
129- connect (dataStrategyWidget , SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )), this ,
149+ connect (newDataStrategyObject , SIGNAL (sendData (QString, QString)), this , SLOT (storeReadInfo (QString, QString)));
150+ connect (dataStrategyObject , SIGNAL (sendData (QString, QString)), this , SLOT ( convertDStoUI (QString, QString)));
151+ connect (dataStrategyObject , SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )), this ,
130152 SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )));
131- connect (dataStrategyWidget , SIGNAL (aboutToWrite (QString, QString)), this ,
153+ connect (dataStrategyObject , SIGNAL (aboutToWrite (QString, QString)), this ,
132154 SIGNAL (aboutToWrite (QString, QString)));
133- connect (uiStrategyWidget , SIGNAL (emitData (QString)), this , SIGNAL (emitData (QString)));
134- connect (uiStrategyWidget , SIGNAL (displayedNewData (QString, QString)), this ,
155+ connect (uiStrategyObject , SIGNAL (emitData (QString)), this , SIGNAL (emitData (QString)));
156+ connect (uiStrategyObject , SIGNAL (displayedNewData (QString, QString)), this ,
135157 SIGNAL (displayedNewData (QString, QString)));
136158
137159 // save the new data strategy and return the old one
@@ -263,6 +285,13 @@ void IIOWidget::reconfigure()
263285
264286 connect (m_configPopup, &IIOConfigurationPopup::exitButtonClicked, this ,
265287 [&]() { m_configPopup->deleteLater (); });
288+ connect (m_configPopup, &IIOConfigurationPopup::emptyButtonClicked, this , [&]() {
289+ DataStrategyInterface *ds = new EmptyDataStrategy (this );
290+ DataStrategyInterface *oldDS = swapDataStrategy (ds);
291+ delete oldDS;
292+ delete m_configPopup;
293+ m_uiStrategy->changeName (" Empty" );
294+ });
266295 connect (m_configPopup, &IIOConfigurationPopup::selectButtonClicked, this , [&](IIOItem *item) {
267296 DataStrategyInterface *dsCreated = nullptr ;
268297 switch (item->type ()) {
0 commit comments