VisualizationWidget.cpp
117 lines
| 3.8 KiB
| text/x-c
|
CppLexer
r95 | #include "Visualization/VisualizationWidget.h" | |||
Alexandre Leroux
|
r176 | #include "Visualization/VisualizationGraphWidget.h" | ||
r95 | #include "Visualization/VisualizationTabWidget.h" | |||
Alexandre Leroux
|
r176 | #include "Visualization/VisualizationZoneWidget.h" | ||
r118 | #include "Visualization/qcustomplot.h" | |||
r58 | #include "ui_VisualizationWidget.h" | |||
r88 | ||||
#include <QToolButton> | ||||
Q_LOGGING_CATEGORY(LOG_VisualizationWidget, "VisualizationWidget") | ||||
r58 | ||||
VisualizationWidget::VisualizationWidget(QWidget *parent) | ||||
r91 | : QWidget{parent}, ui{new Ui::VisualizationWidget} | |||
r58 | { | |||
ui->setupUi(this); | ||||
r88 | ||||
r91 | auto addTabViewButton = new QToolButton{ui->tabWidget}; | |||
addTabViewButton->setText(tr("Add View")); | ||||
r88 | addTabViewButton->setCursor(Qt::ArrowCursor); | |||
ui->tabWidget->setCornerWidget(addTabViewButton, Qt::TopRightCorner); | ||||
r186 | ||||
Alexandre Leroux
|
r188 | auto enableMinimumCornerWidgetSize = [this](bool enable) { | ||
r186 | ||||
auto tabViewCornerWidget = ui->tabWidget->cornerWidget(); | ||||
auto width = enable ? tabViewCornerWidget->width() : 0; | ||||
auto height = enable ? tabViewCornerWidget->height() : 0; | ||||
tabViewCornerWidget->setMinimumHeight(height); | ||||
tabViewCornerWidget->setMinimumWidth(width); | ||||
ui->tabWidget->setMinimumHeight(height); | ||||
ui->tabWidget->setMinimumWidth(width); | ||||
}; | ||||
Alexandre Leroux
|
r188 | auto addTabView = [this, enableMinimumCornerWidgetSize]() { | ||
r88 | auto index = ui->tabWidget->addTab(new VisualizationTabWidget(ui->tabWidget), | |||
QString("View %1").arg(ui->tabWidget->count() + 1)); | ||||
r186 | if (ui->tabWidget->count() > 0) { | |||
Alexandre Leroux
|
r188 | enableMinimumCornerWidgetSize(false); | ||
r186 | } | |||
r88 | qCInfo(LOG_VisualizationWidget()) << tr("add the tab of index %1").arg(index); | |||
}; | ||||
Alexandre Leroux
|
r188 | auto removeTabView = [this, enableMinimumCornerWidgetSize](int index) { | ||
r186 | if (ui->tabWidget->count() == 1) { | |||
Alexandre Leroux
|
r188 | enableMinimumCornerWidgetSize(true); | ||
r186 | } | |||
r88 | ui->tabWidget->removeTab(index); | |||
qCInfo(LOG_VisualizationWidget()) << tr("remove the tab of index %1").arg(index); | ||||
r186 | ||||
r88 | }; | |||
ui->tabWidget->setTabsClosable(true); | ||||
connect(addTabViewButton, &QToolButton::clicked, addTabView); | ||||
connect(ui->tabWidget, &QTabWidget::tabCloseRequested, removeTabView); | ||||
r58 | } | |||
VisualizationWidget::~VisualizationWidget() | ||||
{ | ||||
delete ui; | ||||
} | ||||
r118 | ||||
void VisualizationWidget::addTab(VisualizationTabWidget *tabWidget) | ||||
{ | ||||
// NOTE: check is this method has to be deleted because of its dupplicated version visible as | ||||
// lambda function (in the constructor) | ||||
} | ||||
VisualizationTabWidget *VisualizationWidget::createTab() | ||||
{ | ||||
} | ||||
void VisualizationWidget::removeTab(VisualizationTabWidget *tab) | ||||
{ | ||||
// NOTE: check is this method has to be deleted because of its dupplicated version visible as | ||||
// lambda function (in the constructor) | ||||
} | ||||
void VisualizationWidget::accept(IVisualizationWidget *visitor) | ||||
{ | ||||
// TODO: manage the visitor | ||||
} | ||||
void VisualizationWidget::close() | ||||
{ | ||||
// The main view cannot be directly closed. | ||||
return; | ||||
} | ||||
r119 | QString VisualizationWidget::name() const | |||
r118 | { | |||
return QStringLiteral("MainView"); | ||||
} | ||||
Alexandre Leroux
|
r175 | |||
void VisualizationWidget::displayVariable(std::shared_ptr<Variable> variable) noexcept | ||||
{ | ||||
Alexandre Leroux
|
r176 | if (auto currentTab = dynamic_cast<VisualizationTabWidget *>(ui->tabWidget->currentWidget())) { | ||
if (auto newZone = currentTab->createZone()) { | ||||
if (auto newGraph = newZone->createGraph()) { | ||||
newGraph->addVariable(variable); | ||||
} | ||||
else { | ||||
Alexandre Leroux
|
r188 | qCCritical(LOG_VisualizationWidget()) | ||
Alexandre Leroux
|
r176 | << tr("Can't display the variable : can't create the graph"); | ||
} | ||||
} | ||||
else { | ||||
Alexandre Leroux
|
r188 | qCCritical(LOG_VisualizationWidget()) | ||
Alexandre Leroux
|
r176 | << tr("Can't display the variable : can't create a new zone in the current tab"); | ||
} | ||||
} | ||||
else { | ||||
Alexandre Leroux
|
r188 | qCCritical(LOG_VisualizationWidget()) | ||
Alexandre Leroux
|
r176 | << tr("Can't display the variable : there is no current tab"); | ||
} | ||||
Alexandre Leroux
|
r175 | } | ||