mirror of
https://github.com/jankae/LibreVNA.git
synced 2026-04-04 22:17:31 +00:00
Merge branch 'master' of https://www.github.com/jankae/VNA2
This commit is contained in:
commit
c5cbfddbfe
79 changed files with 3275 additions and 1308 deletions
|
|
@ -34,6 +34,9 @@ void Deembedding::startMeasurementDialog(bool S11, bool S12, bool S21, bool S22)
|
|||
auto ui = new Ui_DeembeddingMeasurementDialog;
|
||||
measurementUI = ui;
|
||||
ui->setupUi(measurementDialog);
|
||||
connect(measurementDialog, &QDialog::finished, [=](){
|
||||
delete ui;
|
||||
});
|
||||
|
||||
// add the trace selector
|
||||
set<unsigned int> skip;
|
||||
|
|
@ -106,7 +109,8 @@ void Deembedding::startMeasurementDialog(bool S11, bool S12, bool S21, bool S22)
|
|||
|
||||
Deembedding::Deembedding(TraceModel &tm)
|
||||
: tm(tm),
|
||||
measuring(false)
|
||||
measuring(false),
|
||||
sweepPoints(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#include "matchingnetwork.h"
|
||||
|
||||
#include "ui_matchingnetworkdialog.h"
|
||||
#include "unit.h"
|
||||
#include "CustomWidgets/informationbox.h"
|
||||
|
||||
#include <QDialog>
|
||||
#include <QHBoxLayout>
|
||||
|
|
@ -11,6 +13,7 @@
|
|||
#include <QMimeData>
|
||||
#include <algorithm>
|
||||
#include <QDebug>
|
||||
#include <QFileDialog>
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
|
@ -68,6 +71,9 @@ void MatchingNetwork::edit()
|
|||
auto dialog = new QDialog();
|
||||
auto ui = new Ui::MatchingNetworkDialog();
|
||||
ui->setupUi(dialog);
|
||||
connect(dialog, &QDialog::finished, [=](){
|
||||
delete ui;
|
||||
});
|
||||
dialog->setModal(true);
|
||||
|
||||
graph = new QWidget();
|
||||
|
|
@ -83,24 +89,25 @@ void MatchingNetwork::edit()
|
|||
ui->lParallelC->installEventFilter(this);
|
||||
ui->lParallelL->installEventFilter(this);
|
||||
ui->lParallelR->installEventFilter(this);
|
||||
ui->lDefinedThrough->installEventFilter(this);
|
||||
layout->setContentsMargins(0,0,0,0);
|
||||
layout->setSpacing(0);
|
||||
layout->addStretch(1);
|
||||
auto p1 = new QWidget();
|
||||
p1->setMinimumSize(portWidth, 150);
|
||||
p1->setMaximumSize(portWidth, 150);
|
||||
p1->setMinimumSize(portWidth, 151);
|
||||
p1->setMaximumSize(portWidth, 151);
|
||||
p1->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
p1->setStyleSheet("image: url(:/icons/port1.svg);");
|
||||
p1->setStyleSheet("image: url(:/icons/port1.png);");
|
||||
auto DUT = new QWidget();
|
||||
DUT->setMinimumSize(DUTWidth, 150);
|
||||
DUT->setMaximumSize(DUTWidth, 150);
|
||||
DUT->setMinimumSize(DUTWidth, 151);
|
||||
DUT->setMaximumSize(DUTWidth, 151);
|
||||
DUT->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
DUT->setStyleSheet("image: url(:/icons/DUT.svg);");
|
||||
DUT->setStyleSheet("image: url(:/icons/DUT.png);");
|
||||
auto p2 = new QWidget();
|
||||
p2->setMinimumSize(portWidth, 150);
|
||||
p2->setMaximumSize(portWidth, 150);
|
||||
p2->setMinimumSize(portWidth, 151);
|
||||
p2->setMaximumSize(portWidth, 151);
|
||||
p2->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
p2->setStyleSheet("image: url(:/icons/port2.svg);");
|
||||
p2->setStyleSheet("image: url(:/icons/port2.png);");
|
||||
layout->addWidget(p1);
|
||||
for(auto w : p1Network) {
|
||||
layout->addWidget(w);
|
||||
|
|
@ -136,27 +143,31 @@ void MatchingNetwork::edit()
|
|||
nlohmann::json MatchingNetwork::toJSON()
|
||||
{
|
||||
nlohmann::json j;
|
||||
for(int i=0;i<2;i++) {
|
||||
auto network = i==0 ? p1Network : p2Network;
|
||||
nlohmann::json jn;
|
||||
for(auto c : network) {
|
||||
nlohmann::json jc;
|
||||
jc["component"] = c->getName().toStdString();
|
||||
jc["params"] = c->toJSON();
|
||||
jn.push_back(jc);
|
||||
}
|
||||
j.push_back(jn);
|
||||
nlohmann::json jn1, jn2;
|
||||
for(auto c : p1Network) {
|
||||
nlohmann::json jc;
|
||||
jc["component"] = c->getName().toStdString();
|
||||
jc["params"] = c->toJSON();
|
||||
jn1.push_back(jc);
|
||||
}
|
||||
for(auto c : p2Network) {
|
||||
nlohmann::json jc;
|
||||
jc["component"] = c->getName().toStdString();
|
||||
jc["params"] = c->toJSON();
|
||||
jn2.push_back(jc);
|
||||
}
|
||||
j["port1"] = jn1;
|
||||
j["port2"] = jn2;
|
||||
j["addNetwork"] = addNetwork;
|
||||
return j;
|
||||
}
|
||||
|
||||
void MatchingNetwork::fromJSON(nlohmann::json j)
|
||||
{
|
||||
for(int i=0;i<2;i++) {
|
||||
auto jn = j[i];
|
||||
auto &network = i==0 ? p1Network : p2Network;
|
||||
network.clear();
|
||||
for(auto jc : jn) {
|
||||
p1Network.clear();
|
||||
p2Network.clear();
|
||||
if(j.contains("port1")) {
|
||||
for(auto jc : j["port1"]) {
|
||||
if(!jc.contains("component")) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -165,9 +176,23 @@ void MatchingNetwork::fromJSON(nlohmann::json j)
|
|||
continue;
|
||||
}
|
||||
c->fromJSON(jc["params"]);
|
||||
network.push_back(c);
|
||||
p1Network.push_back(c);
|
||||
}
|
||||
}
|
||||
if(j.contains("port2")) {
|
||||
for(auto jc : j["port2"]) {
|
||||
if(!jc.contains("component")) {
|
||||
continue;
|
||||
}
|
||||
auto c = MatchingComponent::createFromName(QString::fromStdString(jc["component"]));
|
||||
if(!c) {
|
||||
continue;
|
||||
}
|
||||
c->fromJSON(jc["params"]);
|
||||
p2Network.push_back(c);
|
||||
}
|
||||
}
|
||||
addNetwork = j.value("addNetwork", true);
|
||||
matching.clear();
|
||||
}
|
||||
|
||||
|
|
@ -329,8 +354,8 @@ bool MatchingNetwork::eventFilter(QObject *object, QEvent *event)
|
|||
dropComponent = (MatchingComponent*) dropPtr;
|
||||
dragEvent->acceptProposedAction();
|
||||
insertIndicator = new QWidget();
|
||||
insertIndicator->setMinimumSize(2, 150);
|
||||
insertIndicator->setMaximumSize(2, 150);
|
||||
insertIndicator->setMinimumSize(2, imageHeight);
|
||||
insertIndicator->setMaximumSize(2, imageHeight);
|
||||
insertIndicator->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
insertIndicator->setStyleSheet("background-color:red;");
|
||||
updateInsertIndicator(dragEvent->pos().x());
|
||||
|
|
@ -368,6 +393,8 @@ bool MatchingNetwork::eventFilter(QObject *object, QEvent *event)
|
|||
dragComponent = new MatchingComponent(MatchingComponent::Type::ParallelL);
|
||||
} else if(object->objectName() == "lParallelR") {
|
||||
dragComponent = new MatchingComponent(MatchingComponent::Type::ParallelR);
|
||||
} else if(object->objectName() == "lDefinedThrough") {
|
||||
dragComponent = new MatchingComponent(MatchingComponent::Type::DefinedThrough);
|
||||
} else {
|
||||
dragComponent = nullptr;
|
||||
}
|
||||
|
|
@ -397,18 +424,21 @@ bool MatchingNetwork::eventFilter(QObject *object, QEvent *event)
|
|||
MatchingComponent::MatchingComponent(Type type)
|
||||
{
|
||||
this->type = type;
|
||||
setMinimumSize(150, 150);
|
||||
setMaximumSize(150, 150);
|
||||
eValue = nullptr;
|
||||
touchstone = nullptr;
|
||||
touchstoneLabel = nullptr;
|
||||
setMinimumSize(151, 151);
|
||||
setMaximumSize(151, 151);
|
||||
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
eValue = new SIUnitEdit();
|
||||
eValue->setPrecision(4);
|
||||
eValue->setPrefixes("fpnum k");
|
||||
connect(eValue, &SIUnitEdit::valueChanged, this, &MatchingComponent::valueChanged);
|
||||
setFocusPolicy(Qt::FocusPolicy::ClickFocus);
|
||||
switch(type) {
|
||||
case Type::SeriesR:
|
||||
case Type::SeriesL:
|
||||
case Type::SeriesC: {
|
||||
eValue = new SIUnitEdit();
|
||||
eValue->setPrecision(4);
|
||||
eValue->setPrefixes("fpnum k");
|
||||
connect(eValue, &SIUnitEdit::valueChanged, this, &MatchingComponent::valueChanged);
|
||||
auto layout = new QVBoxLayout();
|
||||
layout->addWidget(eValue);
|
||||
setLayout(layout);
|
||||
|
|
@ -417,13 +447,16 @@ MatchingComponent::MatchingComponent(Type type)
|
|||
case Type::ParallelR:
|
||||
case Type::ParallelL:
|
||||
case Type::ParallelC: {
|
||||
eValue = new SIUnitEdit();
|
||||
eValue->setPrecision(4);
|
||||
eValue->setPrefixes("fpnum k");
|
||||
connect(eValue, &SIUnitEdit::valueChanged, this, &MatchingComponent::valueChanged);
|
||||
auto layout = new QVBoxLayout();
|
||||
layout->addWidget(eValue);
|
||||
layout->addStretch(1);
|
||||
layout->setContentsMargins(9, 5, 9, 9);
|
||||
setLayout(layout);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -431,38 +464,58 @@ MatchingComponent::MatchingComponent(Type type)
|
|||
case Type::SeriesR:
|
||||
eValue->setUnit("Ω");
|
||||
eValue->setValue(50);
|
||||
setStyleSheet("image: url(:/icons/seriesR.svg);");
|
||||
setStyleSheet("image: url(:/icons/seriesR.png);");
|
||||
break;
|
||||
case Type::SeriesL:
|
||||
eValue->setUnit("H");
|
||||
eValue->setValue(1e-9);
|
||||
setStyleSheet("image: url(:/icons/seriesL.svg);");
|
||||
setStyleSheet("image: url(:/icons/seriesL.png);");
|
||||
break;
|
||||
case Type::SeriesC:
|
||||
eValue->setUnit("F");
|
||||
eValue->setValue(1e-12);
|
||||
setStyleSheet("image: url(:/icons/seriesC.svg);");
|
||||
setStyleSheet("image: url(:/icons/seriesC.png);");
|
||||
break;
|
||||
case Type::ParallelR:
|
||||
eValue->setUnit("Ω");
|
||||
eValue->setValue(50);
|
||||
setStyleSheet("image: url(:/icons/parallelR.svg);");
|
||||
setStyleSheet("image: url(:/icons/parallelR.png);");
|
||||
break;
|
||||
case Type::ParallelL:
|
||||
eValue->setUnit("H");
|
||||
eValue->setValue(1e-9);
|
||||
setStyleSheet("image: url(:/icons/parallelL.svg);");
|
||||
setStyleSheet("image: url(:/icons/parallelL.png);");
|
||||
break;
|
||||
case Type::ParallelC:
|
||||
eValue->setUnit("F");
|
||||
eValue->setValue(1e-12);
|
||||
setStyleSheet("image: url(:/icons/parallelC.svg);");
|
||||
setStyleSheet("image: url(:/icons/parallelC.png);");
|
||||
break;
|
||||
case Type::DefinedThrough: {
|
||||
touchstone = new Touchstone(2);
|
||||
touchstoneLabel = new QLabel();
|
||||
touchstoneLabel->setWordWrap(true);
|
||||
touchstoneLabel->setAlignment(Qt::AlignCenter);
|
||||
auto layout = new QVBoxLayout();
|
||||
layout->addWidget(touchstoneLabel);
|
||||
layout->setContentsMargins(0, 0, 0, 0);
|
||||
setLayout(layout);
|
||||
setStyleSheet("image: url(:/icons/definedThrough.png);");
|
||||
updateTouchstoneLabel();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
MatchingComponent::~MatchingComponent()
|
||||
{
|
||||
delete eValue;
|
||||
delete touchstone;
|
||||
delete touchstoneLabel;
|
||||
}
|
||||
|
||||
ABCDparam MatchingComponent::parameters(double freq)
|
||||
{
|
||||
switch(type) {
|
||||
|
|
@ -478,6 +531,15 @@ ABCDparam MatchingComponent::parameters(double freq)
|
|||
return ABCDparam(1.0, 0.0, 1.0/complex<double>(0, freq * 2 * M_PI * eValue->value()), 1.0);
|
||||
case Type::ParallelC:
|
||||
return ABCDparam(1.0, 0.0, 1.0/complex<double>(0, -1.0 / (freq * 2 * M_PI * eValue->value())), 1.0);
|
||||
case Type::DefinedThrough:
|
||||
if(touchstone->points() == 0 || freq < touchstone->minFreq() || freq > touchstone->maxFreq()) {
|
||||
// outside of provided frequency range, pass through unchanged
|
||||
return ABCDparam(1.0, 0.0, 0.0, 1.0);
|
||||
} else {
|
||||
auto d = touchstone->interpolate(freq);
|
||||
auto S = Sparam(d.S[0], d.S[1], d.S[2], d.S[3]);
|
||||
return ABCDparam(S, 50.0);
|
||||
}
|
||||
default:
|
||||
return ABCDparam(1.0, 0.0, 0.0, 1.0);
|
||||
}
|
||||
|
|
@ -485,7 +547,9 @@ ABCDparam MatchingComponent::parameters(double freq)
|
|||
|
||||
void MatchingComponent::MatchingComponent::setValue(double v)
|
||||
{
|
||||
eValue->setValue(v);
|
||||
if(eValue) {
|
||||
eValue->setValue(v);
|
||||
}
|
||||
}
|
||||
|
||||
MatchingComponent *MatchingComponent::createFromName(QString name)
|
||||
|
|
@ -507,13 +571,73 @@ QString MatchingComponent::getName()
|
|||
nlohmann::json MatchingComponent::toJSON()
|
||||
{
|
||||
nlohmann::json j;
|
||||
j["value"] = eValue->value();
|
||||
switch(type) {
|
||||
case Type::SeriesC:
|
||||
case Type::SeriesR:
|
||||
case Type::SeriesL:
|
||||
case Type::ParallelC:
|
||||
case Type::ParallelR:
|
||||
case Type::ParallelL:
|
||||
j["value"] = eValue->value();
|
||||
break;
|
||||
case Type::DefinedThrough:
|
||||
j["touchstone"] = touchstone->toJSON();
|
||||
break;
|
||||
case Type::Last:
|
||||
break;
|
||||
}
|
||||
return j;
|
||||
}
|
||||
|
||||
void MatchingComponent::fromJSON(nlohmann::json j)
|
||||
{
|
||||
eValue->setValue(j.value("value", 1e-12));
|
||||
switch(type) {
|
||||
case Type::SeriesC:
|
||||
case Type::SeriesR:
|
||||
case Type::SeriesL:
|
||||
case Type::ParallelC:
|
||||
case Type::ParallelR:
|
||||
case Type::ParallelL:
|
||||
eValue->setValue(j.value("value", 1e-12));
|
||||
break;
|
||||
case Type::DefinedThrough:
|
||||
touchstone->fromJSON(j["touchstone"]);
|
||||
updateTouchstoneLabel();
|
||||
break;
|
||||
case Type::Last:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MatchingComponent::mouseDoubleClickEvent(QMouseEvent *e)
|
||||
{
|
||||
Q_UNUSED(e);
|
||||
if(type == Type::DefinedThrough) {
|
||||
// select new touchstone file
|
||||
auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", "Touchstone files (*.s2p)", nullptr, QFileDialog::DontUseNativeDialog);
|
||||
if (!filename.isEmpty()) {
|
||||
try {
|
||||
*touchstone = Touchstone::fromFile(filename.toStdString());
|
||||
} catch(const std::exception& e) {
|
||||
InformationBox::ShowError("Failed to load file", QString("Attempt to load file ended with error: \"") + e.what()+"\"");
|
||||
}
|
||||
updateTouchstoneLabel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MatchingComponent::updateTouchstoneLabel()
|
||||
{
|
||||
if(!touchstone || !touchstoneLabel) {
|
||||
return;
|
||||
}
|
||||
if(touchstone->points() == 0) {
|
||||
touchstoneLabel->setText("No data. Double-click to select touchstone file");
|
||||
} else {
|
||||
QString text = QString::number(touchstone->points()) + " points from "+Unit::ToString(touchstone->minFreq(), "Hz", " kMG", 4)
|
||||
+ " to "+Unit::ToString(touchstone->maxFreq(), "Hz", " kMG", 4);
|
||||
touchstoneLabel->setText(text);
|
||||
}
|
||||
}
|
||||
|
||||
QString MatchingComponent::typeToName(MatchingComponent::Type type)
|
||||
|
|
@ -525,6 +649,7 @@ QString MatchingComponent::typeToName(MatchingComponent::Type type)
|
|||
case Type::ParallelR: return "ParallelR";
|
||||
case Type::ParallelL: return "ParallelL";
|
||||
case Type::ParallelC: return "ParallelC";
|
||||
case Type::DefinedThrough: return "Touchstone Through";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,8 +5,10 @@
|
|||
#include "deembeddingoption.h"
|
||||
#include "Tools/parameters.h"
|
||||
#include "savable.h"
|
||||
#include "touchstone.h"
|
||||
|
||||
#include <QWidget>
|
||||
#include <QLabel>
|
||||
#include <vector>
|
||||
|
||||
|
||||
|
|
@ -21,11 +23,13 @@ public:
|
|||
ParallelR,
|
||||
ParallelL,
|
||||
ParallelC,
|
||||
DefinedThrough,
|
||||
// Add new matching components here, do not explicitly assign values and keep the Last entry at the last position
|
||||
Last,
|
||||
};
|
||||
|
||||
MatchingComponent(Type type);
|
||||
~MatchingComponent();
|
||||
ABCDparam parameters(double freq);
|
||||
void setValue(double v);
|
||||
|
||||
|
|
@ -40,7 +44,11 @@ signals:
|
|||
void deleted(MatchingComponent* m);
|
||||
protected:
|
||||
SIUnitEdit *eValue;
|
||||
Touchstone *touchstone;
|
||||
QLabel *touchstoneLabel;
|
||||
private:
|
||||
void mouseDoubleClickEvent(QMouseEvent *e) override;
|
||||
void updateTouchstoneLabel();
|
||||
static QString typeToName(Type type);
|
||||
Type type;
|
||||
void keyPressEvent(QKeyEvent *event) override;
|
||||
|
|
@ -62,9 +70,10 @@ public:
|
|||
nlohmann::json toJSON() override;
|
||||
void fromJSON(nlohmann::json j) override;
|
||||
private:
|
||||
static constexpr int componentWidth = 150;
|
||||
static constexpr int DUTWidth = 150;
|
||||
static constexpr int portWidth = 75;
|
||||
static constexpr int imageHeight = 151;
|
||||
static constexpr int componentWidth = 151;
|
||||
static constexpr int DUTWidth = 151;
|
||||
static constexpr int portWidth = 76;
|
||||
MatchingComponent *componentAtPosition(int pos);
|
||||
unsigned int findInsertPosition(int xcoord);
|
||||
void addComponentAtPosition(int pos, MatchingComponent *c);
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>772</width>
|
||||
<height>442</height>
|
||||
<height>443</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
|
@ -131,20 +131,8 @@
|
|||
<property name="title">
|
||||
<string>Matching Components</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_10">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="font">
|
||||
<font>
|
||||
|
|
@ -159,369 +147,423 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
<item row="1" column="0">
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lSeriesC">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-image: url(:/icons/seriesC.svg);</string>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
<property name="text">
|
||||
<string>Series C</string>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lSeriesC">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-image: url(:/icons/seriesC.svg);</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Series C</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QFrame" name="frame_2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QFrame" name="frame_2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lSeriesL">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-image: url(:/icons/seriesL.svg);</string>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
<property name="text">
|
||||
<string>Series L</string>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lSeriesL">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-image: url(:/icons/seriesL.svg);</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Series L</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QFrame" name="frame_3">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QFrame" name="frame_3">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lSeriesR">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-image: url(:/icons/seriesR.svg);</string>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
<property name="text">
|
||||
<string>Series R</string>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lSeriesR">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-image: url(:/icons/seriesR.svg);</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Series R</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QFrame" name="frame_4">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<widget class="QFrame" name="frame_7">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_10">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lDefinedThrough">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-image: url(:/icons/definedThrough.svg);</string>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
<property name="text">
|
||||
<string><html><head/><body><p align="center"><br/><br/>Defined<br/>Through</p></body></html></string>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignHCenter|Qt::AlignTop</set>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lParallelC">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-image: url(:/icons/parallelC.svg);</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Parallel C</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignHCenter|Qt::AlignTop</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QFrame" name="frame_5">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QFrame" name="frame_4">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lParallelC">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-image: url(:/icons/parallelC.svg);</string>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
<property name="text">
|
||||
<string>Parallel C</string>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignHCenter|Qt::AlignTop</set>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lParallelL">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-image: url(:/icons/parallelL.svg);</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Parallel L</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignHCenter|Qt::AlignTop</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QFrame" name="frame_6">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QFrame" name="frame_5">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lParallelL">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-image: url(:/icons/parallelL.svg);</string>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
<property name="text">
|
||||
<string>Parallel L</string>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lParallelR">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-image: url(:/icons/parallelR.svg);</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Parallel R</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignHCenter|Qt::AlignTop</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignHCenter|Qt::AlignTop</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QFrame" name="frame_6">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lParallelR">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-image: url(:/icons/parallelR.svg);</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Parallel R</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignHCenter|Qt::AlignTop</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
|
|
|||
|
|
@ -81,6 +81,9 @@ void PortExtension::edit()
|
|||
auto dialog = new QDialog();
|
||||
ui = new Ui::PortExtensionEditDialog();
|
||||
ui->setupUi(dialog);
|
||||
connect(dialog, &QDialog::finished, [=](){
|
||||
delete ui;
|
||||
});
|
||||
|
||||
// set initial values
|
||||
ui->P1Enabled->setChecked(port1.enabled);
|
||||
|
|
|
|||
|
|
@ -126,6 +126,9 @@ void TwoThru::edit()
|
|||
auto dialog = new QDialog();
|
||||
ui = new Ui::TwoThruDialog();
|
||||
ui->setupUi(dialog);
|
||||
connect(dialog, &QDialog::finished, [=](){
|
||||
delete ui;
|
||||
});
|
||||
ui->Z0->setUnit("Ω");
|
||||
ui->Z0->setPrecision(4);
|
||||
ui->Z0->setValue(Z0);
|
||||
|
|
|
|||
|
|
@ -83,6 +83,9 @@ void TraceWidgetVNA::importDialog()
|
|||
auto dialog = new QDialog();
|
||||
auto ui = new Ui::s2pImportOptions;
|
||||
ui->setupUi(dialog);
|
||||
connect(dialog, &QDialog::finished, [=](){
|
||||
delete ui;
|
||||
});
|
||||
ui->applyCal->setEnabled(calAvailable);
|
||||
ui->deembed->setEnabled(deembedAvailable);
|
||||
bool applyCal = false;
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ VNA::VNA(AppWindow *window)
|
|||
: Mode(window, "Vector Network Analyzer"),
|
||||
SCPINode("VNA"),
|
||||
deembedding(traceModel),
|
||||
deembedding_active(false),
|
||||
central(new TileWidget(traceModel))
|
||||
{
|
||||
averages = 1;
|
||||
|
|
@ -60,6 +61,7 @@ VNA::VNA(AppWindow *window)
|
|||
calMeasuring = false;
|
||||
calDialog.reset();
|
||||
calEdited = false;
|
||||
settings.sweepType = SweepType::Frequency;
|
||||
|
||||
// Create default traces
|
||||
auto tS11 = new Trace("S11", Qt::yellow);
|
||||
|
|
@ -530,6 +532,12 @@ VNA::VNA(AppWindow *window)
|
|||
// Set initial sweep settings
|
||||
auto pref = Preferences::getInstance();
|
||||
|
||||
if(pref.Acquisition.useMedianAveraging) {
|
||||
average.setMode(Averaging::Mode::Median);
|
||||
} else {
|
||||
average.setMode(Averaging::Mode::Mean);
|
||||
}
|
||||
|
||||
if(pref.Startup.RememberSweepSettings) {
|
||||
LoadSweepSettings();
|
||||
} else {
|
||||
|
|
@ -545,6 +553,8 @@ VNA::VNA(AppWindow *window)
|
|||
SetPoints(pref.Startup.DefaultSweep.points);
|
||||
if(pref.Startup.DefaultSweep.type == "Power Sweep") {
|
||||
SetSweepType(SweepType::Power);
|
||||
} else {
|
||||
SetSweepType(SweepType::Frequency);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -760,6 +770,11 @@ using namespace std;
|
|||
|
||||
void VNA::NewDatapoint(Protocol::Datapoint d)
|
||||
{
|
||||
if(d.pointNum >= settings.npoints) {
|
||||
qWarning() << "Ignoring point with too large point number (" << d.pointNum << ")";
|
||||
return;
|
||||
}
|
||||
|
||||
d = average.process(d);
|
||||
if(calMeasuring) {
|
||||
if(average.currentSweep() == averages) {
|
||||
|
|
@ -1461,6 +1476,11 @@ void VNA::updateGraphColors()
|
|||
emit graphColorsChanged();
|
||||
}
|
||||
|
||||
void VNA::setAveragingMode(Averaging::Mode mode)
|
||||
{
|
||||
average.setMode(mode);
|
||||
}
|
||||
|
||||
QString VNA::SweepTypeToString(VNA::SweepType sw)
|
||||
{
|
||||
switch(sw) {
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ public:
|
|||
virtual void fromJSON(nlohmann::json j) override;
|
||||
|
||||
void updateGraphColors();
|
||||
void setAveragingMode(Averaging::Mode mode);
|
||||
|
||||
enum class SweepType {
|
||||
Frequency = 0,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue