mirror of
https://github.com/jankae/LibreVNA.git
synced 2026-04-06 15:04:11 +00:00
PC Application: partial firmware update dialog
This commit is contained in:
parent
8c8749accd
commit
07ba714f1f
134 changed files with 13954 additions and 7 deletions
141
Software/PC_Application/CustomWidgets/tilewidget.cpp
Normal file
141
Software/PC_Application/CustomWidgets/tilewidget.cpp
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
#include "tilewidget.h"
|
||||
#include "ui_tilewidget.h"
|
||||
#include <QDebug>
|
||||
#include "Traces/tracebodeplot.h"
|
||||
#include "Traces/tracesmithchart.h"
|
||||
|
||||
TileWidget::TileWidget(TraceModel &model, QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::TileWidget),
|
||||
splitter(0),
|
||||
isSplit(false),
|
||||
parent(0),
|
||||
child1(0),
|
||||
child2(0),
|
||||
hasContent(false),
|
||||
content(0),
|
||||
model(model)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
auto layout = new QGridLayout;
|
||||
layout->setContentsMargins(0,0,0,0);
|
||||
ui->ContentPage->setLayout(layout);
|
||||
ui->bClose->setVisible(false);
|
||||
}
|
||||
|
||||
TileWidget::~TileWidget()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void TileWidget::splitVertically()
|
||||
{
|
||||
if(isSplit) {
|
||||
return;
|
||||
}
|
||||
isSplit = true;
|
||||
splitter = new QSplitter(Qt::Vertical);
|
||||
split();
|
||||
}
|
||||
|
||||
void TileWidget::splitHorizontally()
|
||||
{
|
||||
if(isSplit) {
|
||||
return;
|
||||
}
|
||||
isSplit = true;
|
||||
splitter = new QSplitter(Qt::Horizontal);
|
||||
split();
|
||||
}
|
||||
|
||||
void TileWidget::closeTile()
|
||||
{
|
||||
if(!parent) {
|
||||
// Unable to close toplevel tile
|
||||
return;
|
||||
}
|
||||
auto pTile = parent;
|
||||
TileWidget *absorbedTile;
|
||||
if(this == parent->child1) {
|
||||
absorbedTile = parent->child2;
|
||||
} else {
|
||||
absorbedTile = parent->child1;
|
||||
}
|
||||
delete this;
|
||||
|
||||
if(absorbedTile->isSplit) {
|
||||
pTile->isSplit = true;
|
||||
pTile->child1 = absorbedTile->child1;
|
||||
pTile->child2 = absorbedTile->child2;
|
||||
pTile->child1->parent = pTile;
|
||||
pTile->child2->parent = pTile;
|
||||
pTile->ui->ContentPage->layout()->addWidget(absorbedTile->splitter);
|
||||
auto oldsplitter = pTile->splitter;
|
||||
pTile->splitter = absorbedTile->splitter;
|
||||
delete absorbedTile;
|
||||
delete oldsplitter;
|
||||
} else if(absorbedTile->hasContent) {
|
||||
pTile->setContent(absorbedTile->content);
|
||||
delete absorbedTile;
|
||||
pTile->isSplit = false;
|
||||
delete pTile->splitter;
|
||||
pTile->splitter = nullptr;
|
||||
} else {
|
||||
delete absorbedTile;
|
||||
pTile->isSplit = false;
|
||||
pTile->hasContent = false;
|
||||
delete pTile->splitter;
|
||||
pTile->ui->stack->setCurrentWidget(pTile->ui->TilePage);
|
||||
}
|
||||
}
|
||||
|
||||
void TileWidget::setPlot(TracePlot *plot)
|
||||
{
|
||||
if(!isSplit && !hasContent) {
|
||||
setContent(plot);
|
||||
}
|
||||
}
|
||||
|
||||
TileWidget::TileWidget(TraceModel &model, TileWidget &parent)
|
||||
: TileWidget(model)
|
||||
{
|
||||
this->parent = &parent;
|
||||
ui->bClose->setVisible(true);
|
||||
}
|
||||
|
||||
void TileWidget::split()
|
||||
{
|
||||
splitter->setHandleWidth(0);
|
||||
child1 = new TileWidget(model, *this);
|
||||
child2 = new TileWidget(model, *this);
|
||||
splitter->addWidget(child1);
|
||||
splitter->addWidget(child2);
|
||||
ui->ContentPage->layout()->addWidget(splitter);
|
||||
ui->stack->setCurrentWidget(ui->ContentPage);
|
||||
}
|
||||
|
||||
void TileWidget::setContent(TracePlot *plot)
|
||||
{
|
||||
content = plot;
|
||||
hasContent = true;
|
||||
ui->ContentPage->layout()->addWidget(plot);
|
||||
ui->stack->setCurrentWidget(ui->ContentPage);
|
||||
connect(content, &TracePlot::deleted, this, &TileWidget::traceDeleted);
|
||||
}
|
||||
|
||||
void TileWidget::on_bSmithchart_clicked()
|
||||
{
|
||||
setContent(new TraceSmithChart(model));
|
||||
}
|
||||
|
||||
void TileWidget::on_bBodeplot_clicked()
|
||||
{
|
||||
setContent(new TraceBodePlot(model));
|
||||
}
|
||||
|
||||
void TileWidget::traceDeleted(TracePlot *)
|
||||
{
|
||||
ui->stack->setCurrentWidget(ui->TilePage);
|
||||
hasContent = false;
|
||||
content = nullptr;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue