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"  )
@@ -44,41 +46,61 @@ IIOWidget::IIOWidget(GuiStrategyInterface *uiStrategy, DataStrategyInterface *da
4446	, m_lastReturnCode(0 )
4547	, m_isConfigurable(false )
4648{
49+ 	//  Config button
50+ 	m_configBtn->setStyleSheet (" border-image: url(\" :/gui/icons/scopy-default/icons/gear_wheel.svg\" );"  );
51+ 	m_configBtn->setVisible (m_isConfigurable);
52+ 
53+ 	//  General layout
4754	setLayout (new  QVBoxLayout (this ));
4855	layout ()->setContentsMargins (0 , 0 , 0 , 0 );
4956	layout ()->setSpacing (0 );
5057	setSizePolicy (QSizePolicy::Preferred, QSizePolicy::Fixed);
5158
59+ 	QWidget *topWidget = new  QWidget (this );
60+ 	topWidget->setLayout (new  QHBoxLayout (topWidget));
61+ 	topWidget->layout ()->setContentsMargins (0 , 0 , 0 , 0 );
62+ 
5263	QWidget *ui = m_uiStrategy->ui ();
5364	if (ui) {
54- 		layout ()->addWidget (ui);
65+ 		topWidget-> layout ()->addWidget (ui);
5566	}
67+ 	topWidget->layout ()->addWidget (m_configBtn);
68+ 
69+ 	layout ()->addWidget (topWidget);
5670	layout ()->addWidget (m_progressBar);
5771
58- 	QObject *uiStrategyObject  = dynamic_cast <QObject *>(m_uiStrategy);
59- 	QObject *dataStrategyObject  = dynamic_cast <QObject *>(m_dataStrategy);
72+ 	QObject *uiStrategyWidget  = dynamic_cast <QObject *>(m_uiStrategy);
73+ 	QObject *dataStrategyWidget  = dynamic_cast <QObject *>(m_dataStrategy);
6074
61- 	uiStrategyObject ->setParent (this );
62- 	dataStrategyObject ->setParent (this );
75+ 	uiStrategyWidget ->setParent (this );
76+ 	dataStrategyWidget ->setParent (this );
6377
78+ 	connect (m_configBtn, &QPushButton::clicked, this , &IIOWidget::reconfigure);
6479	connect (m_progressBar, &SmallProgressBar::progressFinished, this , [this ]() { this ->saveData (m_lastData); });
6580
66- 	connect (uiStrategyObject, SIGNAL (emitData (QString)), this , SLOT (startTimer (QString)));
81+ 	connect (uiStrategyWidget, SIGNAL (emitData (QString)), this , SLOT (startTimer (QString)));
82+ 	connect (uiStrategyWidget, SIGNAL (emitData (QString)), this , SIGNAL (emitData (QString)));
83+ 	connect (uiStrategyWidget, SIGNAL (displayedNewData (QString, QString)), this ,
84+ 		SIGNAL (displayedNewData (QString, QString)));
6785
68- 	connect (dataStrategyObject , SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )), this ,
86+ 	connect (dataStrategyWidget , SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )), this ,
6987		SLOT (emitDataStatus (QDateTime, QString, QString, int , bool )));
7088
7189	//  forward data request from ui strategy to data strategy
72- 	connect (uiStrategyObject, SIGNAL (requestData ()), dataStrategyObject, SLOT (readAsync ()));
90+ 	connect (uiStrategyWidget, SIGNAL (requestData ()), dataStrategyWidget, SLOT (readAsync ()));
91+ 	connect (dataStrategyWidget, SIGNAL (sendData (QString, QString)), this , SIGNAL (sendData (QString, QString)));
92+ 	connect (dataStrategyWidget, SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )), this ,
93+ 		SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )));
7394
7495	//  forward data from data strategy to ui strategy
75- 	connect (dataStrategyObject , SIGNAL (sendData (QString, QString)), uiStrategyObject ,
96+ 	connect (dataStrategyWidget , SIGNAL (sendData (QString, QString)), uiStrategyWidget ,
7697		SLOT (receiveData (QString, QString)));
98+ 	connect (dataStrategyWidget, SIGNAL (aboutToWrite (QString, QString)), this ,
99+ 		SIGNAL (aboutToWrite (QString, QString)));
77100
78101	//  intercept the sendData from dataStrategy to collect information
79- 	connect (dataStrategyObject , SIGNAL (sendData (QString, QString)), this , SLOT (storeReadInfo (QString, QString)));
102+ 	connect (dataStrategyWidget , SIGNAL (sendData (QString, QString)), this , SLOT (storeReadInfo (QString, QString)));
80103
81- 	//  The data will be populated here
82104	bool  useLazyLoading = Preferences::GetInstance ()->get (" iiowidgets_use_lazy_loading"  ).toBool ();
83105	if (!useLazyLoading) { //  force skip lazy load
84106		LAZY_LOAD (initialize);
@@ -95,9 +117,9 @@ void IIOWidget::writeAsync(QString data) { m_dataStrategy->writeAsync(data); }
95117
96118DataStrategyInterface *IIOWidget::swapDataStrategy (DataStrategyInterface *dataStrategy)
97119{
98- 	QWidget  *dataStrategyWidget = dynamic_cast <QWidget  *>(m_dataStrategy);
99- 	QWidget  *uiStrategyWidget = dynamic_cast <QWidget  *>(m_uiStrategy);
100- 	QWidget  *newDataStrategyWidget = dynamic_cast <QWidget  *>(dataStrategy);
120+ 	QObject  *dataStrategyWidget = dynamic_cast <QObject  *>(m_dataStrategy);
121+ 	QObject  *uiStrategyWidget = dynamic_cast <QObject  *>(m_uiStrategy);
122+ 	QObject  *newDataStrategyWidget = dynamic_cast <QObject  *>(dataStrategy);
101123
102124	//  disconnect old data strategy
103125	disconnect (dataStrategyWidget, SIGNAL (emitStatus (QDateTime, QString, QString, int , bool )), this ,
@@ -241,6 +263,13 @@ void IIOWidget::reconfigure()
241263
242264	connect (m_configPopup, &IIOConfigurationPopup::exitButtonClicked, this ,
243265		[&]() { m_configPopup->deleteLater (); });
266+ 	connect (m_configPopup, &IIOConfigurationPopup::emptyButtonClicked, this , [&]() {
267+ 		DataStrategyInterface *ds = new  EmptyDataStrategy (this );
268+ 		DataStrategyInterface *oldDS = swapDataStrategy (ds);
269+ 		delete  oldDS;
270+ 		delete  m_configPopup;
271+ 		m_uiStrategy->changeName (" Empty"  );
272+ 	});
244273	connect (m_configPopup, &IIOConfigurationPopup::selectButtonClicked, this , [&](IIOItem *item) {
245274		DataStrategyInterface *dsCreated = nullptr ;
246275		switch (item->type ()) {
0 commit comments