Refactoring: splitting mode logic into different classes

This commit is contained in:
Jan Käberich 2020-09-13 14:44:45 +02:00
parent e266d37b96
commit b7033a029e
32 changed files with 1200 additions and 1563 deletions

View file

@ -0,0 +1,25 @@
#include "generator.h"
Generator::Generator(AppWindow *window)
: Mode(window, "Signal Generator")
{
central = new SignalgeneratorWidget();
finalize(central);
connect(central, &SignalgeneratorWidget::SettingsChanged, this, &Generator::updateDevice);
}
void Generator::initializeDevice()
{
updateDevice();
}
void Generator::updateDevice()
{
if(!window->getDevice()) {
// can't updat if not connected
return;
}
auto status = central->getDeviceStatus();
// TODO comment in once status is filled with valid values
// window->getDevice()->SetManual(status);
}

View file

@ -0,0 +1,18 @@
#ifndef GENERATOR_H
#define GENERATOR_H
#include "mode.h"
#include "signalgenwidget.h"
class Generator : public Mode
{
public:
Generator(AppWindow *window);
void initializeDevice() override;
private slots:
void updateDevice();
private:
SignalgeneratorWidget *central;
};
#endif // GENERATOR_H

View file

@ -0,0 +1,63 @@
#include "signalgenwidget.h"
#include "ui_signalgenerator.h"
SignalgeneratorWidget::SignalgeneratorWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::SignalgeneratorWidget)
{
ui->setupUi(this);
ui->frequency->setUnit("Hz");
ui->frequency->setPrefixes(" kMG");
connect(ui->frequency, &SIUnitEdit::valueChanged, [=](double newval) {
// TODO centralize min/max values
if(newval < 9000) {
newval = 9000;
} else if (newval > 6000000000) {
newval = 6000000000;
}
ui->frequency->setValueQuiet(newval);
emit SettingsChanged();
});
connect(ui->levelSpin, qOverload<double>(&QDoubleSpinBox::valueChanged), this, &SignalgeneratorWidget::setLevel);
connect(ui->levelSlider, &QSlider::valueChanged, [=](int value) {
setLevel((double) value / 100.0);
});
connect(ui->EnablePort1, &QCheckBox::clicked, [=](){
if(ui->EnablePort1->isChecked() && ui->EnablePort2->isChecked()) {
ui->EnablePort2->setCheckState(Qt::CheckState::Unchecked);
}
emit SettingsChanged();
});
connect(ui->EnablePort2, &QCheckBox::clicked, [=](){
if(ui->EnablePort1->isChecked() && ui->EnablePort2->isChecked()) {
ui->EnablePort1->setCheckState(Qt::CheckState::Unchecked);
}
emit SettingsChanged();
});
}
SignalgeneratorWidget::~SignalgeneratorWidget()
{
delete ui;
}
Protocol::ManualControl SignalgeneratorWidget::getDeviceStatus()
{
// TODO
Protocol::ManualControl s = {};
return s;
}
void SignalgeneratorWidget::setLevel(double level)
{
// TODO constrain to frequency dependent levels
ui->levelSpin->blockSignals(true);
ui->levelSlider->blockSignals(true);
ui->levelSpin->setValue(level);
ui->levelSlider->setValue(level * 100.0);
ui->levelSpin->blockSignals(false);
ui->levelSlider->blockSignals(false);
SettingsChanged();
}

View file

@ -0,0 +1,30 @@
#ifndef SIGNALGENERATOR_H
#define SIGNALGENERATOR_H
#include <QWidget>
#include "Device/device.h"
namespace Ui {
class SignalgeneratorWidget;
}
class SignalgeneratorWidget : public QWidget
{
Q_OBJECT
public:
explicit SignalgeneratorWidget(QWidget *parent = nullptr);
~SignalgeneratorWidget();
Protocol::ManualControl getDeviceStatus();
signals:
void SettingsChanged();
private slots:
void setLevel(double level);
private:
Ui::SignalgeneratorWidget *ui;
};
#endif // SIGNALGENERATOR_H

View file

@ -0,0 +1,189 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Signalgenerator</class>
<widget class="QWidget" name="Signalgenerator">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1093</width>
<height>594</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>197</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Generator</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Frequency:</string>
</property>
</widget>
</item>
<item>
<widget class="SIUnitEdit" name="frequency"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Level Control</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QDoubleSpinBox" name="levelSpin">
<property name="suffix">
<string>dbm</string>
</property>
<property name="minimum">
<double>-50.000000000000000</double>
</property>
<property name="maximum">
<double>0.000000000000000</double>
</property>
<property name="singleStep">
<double>0.250000000000000</double>
</property>
<property name="value">
<double>-10.000000000000000</double>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="levelSlider">
<property name="minimum">
<number>-5000</number>
</property>
<property name="maximum">
<number>0</number>
</property>
<property name="singleStep">
<number>25</number>
</property>
<property name="pageStep">
<number>500</number>
</property>
<property name="value">
<number>-1000</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>Enable</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QCheckBox" name="EnablePort1">
<property name="text">
<string>Port 1</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="EnablePort2">
<property name="text">
<string>Port 2</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>196</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>SIUnitEdit</class>
<extends>QLineEdit</extends>
<header>CustomWidgets/siunitedit.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>