Skip to content

Commit a4e3c6d

Browse files
iio-widgets: Add empty data strategy
Signed-off-by: Andrei-Fabian-Pop <[email protected]>
1 parent 900419b commit a4e3c6d

File tree

13 files changed

+207
-93
lines changed

13 files changed

+207
-93
lines changed

gr-util/src/grdeviceaddon.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,14 @@ QWidget *GRDeviceAddon::createAttrMenu(QWidget *parent)
2727
MenuSectionWidget *attrContainer = new MenuSectionWidget(parent);
2828
MenuCollapseSection *attr =
2929
new MenuCollapseSection("ATTRIBUTES", MenuCollapseSection::MHCW_NONE, attrContainer);
30-
QList<IIOWidget *> attrWidgets = IIOWidgetBuilder().device(m_src->iioDev()).parent(parent).buildAll();
30+
QList<IIOWidget *> attrWidgets = IIOWidgetBuilder(parent).device(m_src->iioDev()).buildAll();
3131
const struct iio_context *ctx = iio_device_get_context(m_src->iioDev());
32-
attrWidgets.append(IIOWidgetBuilder()
32+
attrWidgets.append(IIOWidgetBuilder(parent)
3333
.context(const_cast<iio_context *>(ctx))
3434
.device(m_src->iioDev())
3535
.attribute("Triggers")
3636
.uiStrategy(IIOWidgetBuilder::UIS::ComboUi)
3737
.dataStrategy(IIOWidgetBuilder::DS::TriggerData)
38-
.parent(parent)
3938
.buildSingle());
4039

4140
auto layout = new QVBoxLayout();

gr-util/src/grtimechanneladdon.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ QWidget *GRTimeChannelAddon::createAttrMenu(QWidget *parent)
193193
MenuSectionWidget *attrcontainer = new MenuSectionWidget(parent);
194194
MenuCollapseSection *attr =
195195
new MenuCollapseSection("ATTRIBUTES", MenuCollapseSection::MHCW_NONE, attrcontainer);
196-
QList<IIOWidget *> attrWidgets = IIOWidgetBuilder().channel(grch()->channel()).parent(parent).buildAll();
196+
QList<IIOWidget *> attrWidgets = IIOWidgetBuilder(parent).channel(grch()->channel()).buildAll();
197197

198198
auto layout = new QVBoxLayout();
199199
layout->setSpacing(10);
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#ifndef EMPTYDATASTRATEGY_H
2+
#define EMPTYDATASTRATEGY_H
3+
4+
#include <QObject>
5+
#include "datastrategy/datastrategyinterface.h"
6+
#include "scopy-iio-widgets_export.h"
7+
8+
namespace scopy {
9+
class SCOPY_IIO_WIDGETS_EXPORT EmptyDataStrategy : public QObject, public DataStrategyInterface
10+
{
11+
Q_OBJECT
12+
Q_INTERFACES(scopy::DataStrategyInterface)
13+
public:
14+
explicit EmptyDataStrategy(QObject *parent = nullptr);
15+
16+
QString data() override;
17+
QString optionalData() override;
18+
19+
public Q_SLOTS:
20+
int write(QString data) override;
21+
QPair<QString, QString> read() override;
22+
void writeAsync(QString data) override;
23+
void readAsync() override;
24+
25+
Q_SIGNALS:
26+
void sendData(QString data, QString dataOptions) override;
27+
void aboutToWrite(QString oldData, QString newData) override;
28+
void emitStatus(QDateTime timestamp, QString oldData, QString newData, int returnCode, bool isReadOp) override;
29+
30+
private:
31+
QString m_data;
32+
QString m_previousData;
33+
};
34+
} // namespace scopy
35+
36+
#endif // EMPTYDATASTRATEGY_H

iio-widgets/include/iio-widgets/iioconfigurationpopup.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class SCOPY_IIO_WIDGETS_EXPORT IIOConfigurationPopup : public QWidget
2525

2626
Q_SIGNALS:
2727
void selectButtonClicked(IIOItem *selected);
28+
void emptyButtonClicked();
2829
void exitButtonClicked();
2930

3031
protected Q_SLOTS:
@@ -39,6 +40,7 @@ protected Q_SLOTS:
3940
IIOWidgetSelector *m_widgetSelector;
4041
QPushButton *m_exitButton;
4142
QPushButton *m_selectButton;
43+
QPushButton *m_emptyButton;
4244
IIOItem *m_root;
4345
};
4446
} // namespace scopy

iio-widgets/include/iio-widgets/iiowidget.h

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,20 @@ class SCOPY_IIO_WIDGETS_EXPORT IIOWidget : public QWidget
124124
*/
125125
int lastReturnCode();
126126

127+
/**
128+
* @brief setUItoDataConversion Adds a function that is called before sending the data given as imput by the
129+
* user and modifies this data. The function receives as parameter a QString, converts it and returns the
130+
* converted string that will be sent to the DS after.
131+
* @param func std::function<QString(QString)>
132+
*/
127133
void setUItoDataConversion(std::function<QString(QString)> func);
134+
135+
/**
136+
* @brief setDataToUIConversion Adds a function that is called before sending the data read by the IIOWidget
137+
* and modifies this data. The function receives as parameter a QString, converts it and returns the
138+
* converted string that will be sent to the UI after.
139+
* @param func std::function<QString(QString)>
140+
*/
128141
void setDataToUIConversion(std::function<QString(QString)> func);
129142

130143
/**
@@ -239,12 +252,12 @@ protected Q_SLOTS:
239252
void setLastOperationTimestamp(QDateTime timestamp);
240253
void setLastOperationState(IIOWidget::State state);
241254

242-
// Core variables
255+
/* Core variables */
243256
GuiStrategyInterface *m_uiStrategy;
244257
DataStrategyInterface *m_dataStrategy;
245258
IIOWidgetFactoryRecipe m_recipe;
246259

247-
// Logged data
260+
/* Logged data */
248261
QString m_lastData;
249262
SmallProgressBar *m_progressBar;
250263
QDateTime *m_lastOpTimestamp;
@@ -255,7 +268,7 @@ protected Q_SLOTS:
255268
std::function<QString(QString)> m_UItoDS;
256269
std::function<QString(QString)> m_DStoUI;
257270

258-
// Optional configuration
271+
/* Optional configuration */
259272
QPushButton *m_configBtn;
260273
IIOConfigurationPopup *m_configPopup;
261274
bool m_isConfigurable;

iio-widgets/include/iio-widgets/iiowidgetbuilder.h

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class SCOPY_IIO_WIDGETS_EXPORT IIOWidgetBuilder : public QObject
4242
TriggerData,
4343
DeviceAttrData,
4444
ContextAttrData,
45+
EmptyData,
4546
};
4647

4748
enum UIS
@@ -53,7 +54,7 @@ class SCOPY_IIO_WIDGETS_EXPORT IIOWidgetBuilder : public QObject
5354
RangeUi,
5455
};
5556

56-
explicit IIOWidgetBuilder(QObject *parent = nullptr);
57+
explicit IIOWidgetBuilder(QWidget *parent = nullptr);
5758
~IIOWidgetBuilder();
5859

5960
/**
@@ -101,6 +102,13 @@ class SCOPY_IIO_WIDGETS_EXPORT IIOWidgetBuilder : public QObject
101102
*/
102103
IIOWidgetBuilder &configMode(bool isConfigurable);
103104

105+
/**
106+
* @brief title Sets the title of the IIOWidget
107+
* @param title QString
108+
* @return
109+
*/
110+
IIOWidgetBuilder &title(QString title);
111+
104112
/**
105113
* @brief Sets the context that will be used, if no iio_device or iio_channel
106114
* is set, the build functions will work with the context.
@@ -160,12 +168,6 @@ class SCOPY_IIO_WIDGETS_EXPORT IIOWidgetBuilder : public QObject
160168
*/
161169
IIOWidgetBuilder &uiStrategy(IIOWidgetBuilder::UIS uiStrategy);
162170

163-
/**
164-
* @brief Sets the parent of the IIOWidget that will be built.
165-
* @param parent
166-
*/
167-
IIOWidgetBuilder &parent(QWidget *parent);
168-
169171
private:
170172
DataStrategyInterface *createDS();
171173
GuiStrategyInterface *createUIS();
@@ -179,6 +181,7 @@ class SCOPY_IIO_WIDGETS_EXPORT IIOWidgetBuilder : public QObject
179181
QString m_attribute;
180182
QString m_optionsAttribute;
181183
QString m_optionsValues;
184+
QString m_title;
182185
IIOWidgetBuilder::DS m_dataStrategy;
183186
IIOWidgetBuilder::UIS m_uiStrategy;
184187
QWidget *m_widgetParent;
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include "emptydatastrategy.h"
2+
3+
using namespace scopy;
4+
5+
EmptyDataStrategy::EmptyDataStrategy(QObject *parent)
6+
: QObject{parent}
7+
, m_data("")
8+
, m_previousData("")
9+
{}
10+
11+
QString EmptyDataStrategy::data() { return m_data; }
12+
13+
QString EmptyDataStrategy::optionalData() { return ""; }
14+
15+
int EmptyDataStrategy::write(QString data)
16+
{
17+
m_previousData = data;
18+
m_data = data;
19+
return 0;
20+
}
21+
22+
QPair<QString, QString> EmptyDataStrategy::read() { return {m_data, ""}; }
23+
24+
void EmptyDataStrategy::writeAsync(QString data)
25+
{
26+
int res = write(data);
27+
Q_EMIT emitStatus(QDateTime::currentDateTime(), m_data, data, (int)(res), false);
28+
readAsync();
29+
}
30+
31+
void EmptyDataStrategy::readAsync()
32+
{
33+
QPair<QString, QString> res = read();
34+
Q_EMIT emitStatus(QDateTime::currentDateTime(), m_previousData, m_data, 0, true);
35+
Q_EMIT sendData(res.first, res.second);
36+
}
37+
38+
#include "moc_emptydatastrategy.cpp"

iio-widgets/src/iioconfigurationpopup.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ void IIOConfigurationPopup::init()
134134

135135
Q_EMIT selectButtonClicked(iioItem);
136136
});
137+
QObject::connect(m_emptyButton, &QPushButton::clicked, this, &IIOConfigurationPopup::emptyButtonClicked);
137138
QObject::connect(m_exitButton, &QPushButton::clicked, this, &IIOConfigurationPopup::exitButtonClicked);
138139
m_selectButton->setDisabled(true);
139140
}
@@ -161,12 +162,11 @@ void IIOConfigurationPopup::initUI()
161162
buttonGroupLayout->setSpacing(10);
162163

163164
m_selectButton = new QPushButton("Select", buttonGroup);
164-
m_selectButton->setObjectName("selectButton");
165-
165+
m_emptyButton = new QPushButton("No Data", buttonGroup);
166166
m_exitButton = new QPushButton("Exit", buttonGroup);
167-
m_exitButton->setObjectName("exitButton");
168167

169168
buttonGroupLayout->addWidget(m_exitButton);
169+
buttonGroupLayout->addWidget(m_emptyButton);
170170
buttonGroupLayout->addWidget(m_selectButton);
171171

172172
backgroundLayout->addWidget(m_titleLabel);
@@ -175,9 +175,10 @@ void IIOConfigurationPopup::initUI()
175175

176176
backgroundWidget->setLayout(backgroundLayout);
177177

178-
StyleHelper::TutorialChapterTitleLabel(m_titleLabel, "titleLabel");
179-
StyleHelper::BlueButton(m_selectButton, "selectButton");
180-
StyleHelper::BlueButton(m_exitButton, "exitButton");
178+
StyleHelper::TutorialChapterTitleLabel(m_titleLabel, "TitleLabel");
179+
StyleHelper::BlueButton(m_selectButton, "SelectButton");
180+
StyleHelper::BlueButton(m_emptyButton, "EmptyButton");
181+
StyleHelper::BlueButton(m_exitButton, "ExitButton");
181182
StyleHelper::OverlayMenu(this, "IIOConfigurationPopupOverlay");
182183
}
183184

0 commit comments

Comments
 (0)