LibreVNA/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembeddingdialog.cpp
2022-12-12 17:39:17 +01:00

110 lines
3.3 KiB
C++

#include "deembeddingdialog.h"
#include "ui_deembeddingdialog.h"
#include "deembeddingoption.h"
#include <QMenu>
DeembeddingDialog::DeembeddingDialog(Deembedding *d, QWidget *parent) :
QDialog(parent),
ui(new Ui::DeembeddingDialog),
model(d)
{
ui->setupUi(this);
ui->view->setModel(&model);
auto addMenu = new QMenu();
for(unsigned int i=0;i<(unsigned int)DeembeddingOption::Type::Last;i++) {
auto type = (DeembeddingOption::Type) i;
auto action = new QAction(DeembeddingOption::TypeToString(type));
connect(action, &QAction::triggered, [=](){
auto option = DeembeddingOption::create(type);
model.addOption(option);
});
addMenu->addAction(action);
}
ui->bAdd->setMenu(addMenu);
connect(ui->view->selectionModel(), &QItemSelectionModel::currentRowChanged, [=](const QModelIndex &current, const QModelIndex &previous){
Q_UNUSED(previous)
if(!current.isValid()) {
ui->bDelete->setEnabled(false);
ui->bMoveUp->setEnabled(false);
ui->bMoveDown->setEnabled(false);
ui->bEdit->setEnabled(false);
} else {
ui->bDelete->setEnabled(true);
ui->bMoveUp->setEnabled(current.row() > 0);
ui->bMoveDown->setEnabled(current.row() + 1 < model.rowCount());
ui->bEdit->setEnabled(true);
}
});
connect(ui->bDelete, &QPushButton::clicked, [=](){
model.deleteRow(ui->view->currentIndex().row());
});
connect(ui->bMoveUp, &QPushButton::clicked, [=](){
auto index = ui->view->currentIndex();
d->swapOptions(index.row() - 1);
ui->view->setCurrentIndex(index.sibling(index.row() - 1, 0));
});
connect(ui->bMoveDown, &QPushButton::clicked, [=](){
auto index = ui->view->currentIndex();
d->swapOptions(index.row());
ui->view->setCurrentIndex(index.sibling(index.row() + 1, 0));
});
connect(ui->view, &QListView::doubleClicked, [=](const QModelIndex &index) {
if(index.isValid()) {
d->getOptions()[index.row()]->edit();
}
});
connect(ui->bEdit, &QPushButton::clicked, [=](){
auto index = ui->view->currentIndex();
if(index.isValid()) {
d->getOptions()[index.row()]->edit();
}
});
connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
}
DeembeddingDialog::~DeembeddingDialog()
{
delete ui;
}
OptionModel::OptionModel(Deembedding *d, QObject *parent)
: QAbstractListModel(parent),
d(d){}
int OptionModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return d->getOptions().size();
}
QVariant OptionModel::data(const QModelIndex &index, int role) const
{
if(index.isValid() && role == Qt::DisplayRole) {
auto type = d->getOptions()[index.row()]->getType();
return DeembeddingOption::TypeToString(type);
} else {
return QVariant();
}
}
void OptionModel::addOption(DeembeddingOption *option)
{
beginInsertRows(QModelIndex(), d->getOptions().size(), d->getOptions().size());
d->addOption(option);
endInsertRows();
// open the editor for the newly added operation
option->edit();
}
void OptionModel::deleteRow(unsigned int row)
{
beginRemoveRows(QModelIndex(), row, row);
d->removeOption(row);
endRemoveRows();
}