##// END OF EJS Templates
Connects variable widget to visualization widget...
Connects variable widget to visualization widget The connection is used to populate variable menu with the plot menu

File last commit:

r248:5b41c2a03db2
r249:3d1d1572319d
Show More
VisualizationWidget.cpp
131 lines | 4.2 KiB | text/x-c | CppLexer
/ gui / src / Visualization / VisualizationWidget.cpp
#include "Visualization/VisualizationWidget.h"
#include "Visualization/IVisualizationWidgetVisitor.h"
#include "Visualization/VisualizationGraphWidget.h"
#include "Visualization/VisualizationTabWidget.h"
#include "Visualization/VisualizationZoneWidget.h"
#include "Visualization/operations/GenerateVariableMenuOperation.h"
#include "Visualization/qcustomplot.h"
#include "ui_VisualizationWidget.h"
#include <QToolButton>
Q_LOGGING_CATEGORY(LOG_VisualizationWidget, "VisualizationWidget")
VisualizationWidget::VisualizationWidget(QWidget *parent)
: QWidget{parent}, ui{new Ui::VisualizationWidget}
{
ui->setupUi(this);
auto addTabViewButton = new QToolButton{ui->tabWidget};
addTabViewButton->setText(tr("Add View"));
addTabViewButton->setCursor(Qt::ArrowCursor);
ui->tabWidget->setCornerWidget(addTabViewButton, Qt::TopRightCorner);
auto enableMinimumCornerWidgetSize = [this](bool enable) {
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);
};
auto addTabView = [this, enableMinimumCornerWidgetSize]() {
auto widget = new VisualizationTabWidget{QString{"View %1"}.arg(ui->tabWidget->count() + 1),
ui->tabWidget};
auto index = ui->tabWidget->addTab(widget, widget->name());
if (ui->tabWidget->count() > 0) {
enableMinimumCornerWidgetSize(false);
}
qCInfo(LOG_VisualizationWidget()) << tr("add the tab of index %1").arg(index);
};
auto removeTabView = [this, enableMinimumCornerWidgetSize](int index) {
if (ui->tabWidget->count() == 1) {
enableMinimumCornerWidgetSize(true);
}
ui->tabWidget->removeTab(index);
qCInfo(LOG_VisualizationWidget()) << tr("remove the tab of index %1").arg(index);
};
ui->tabWidget->setTabsClosable(true);
connect(addTabViewButton, &QToolButton::clicked, addTabView);
connect(ui->tabWidget, &QTabWidget::tabCloseRequested, removeTabView);
// Adds default tab
addTabView();
}
VisualizationWidget::~VisualizationWidget()
{
delete ui;
}
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(IVisualizationWidgetVisitor *visitor)
{
if (visitor) {
visitor->visitEnter(this);
// Apply visitor for tab children
for (auto i = 0; i < ui->tabWidget->count(); ++i) {
// Widgets different from tabs are not visited (no action)
if (auto visualizationTabWidget
= dynamic_cast<VisualizationTabWidget *>(ui->tabWidget->widget(i))) {
visualizationTabWidget->accept(visitor);
}
}
visitor->visitLeave(this);
}
else {
qCCritical(LOG_VisualizationWidget()) << tr("Can't visit widget : the visitor is null");
}
}
bool VisualizationWidget::canDrop(const Variable &variable) const
{
// The main widget can never accomodate a variable
Q_UNUSED(variable);
return false;
}
void VisualizationWidget::close()
{
// The main view cannot be directly closed.
return;
}
QString VisualizationWidget::name() const
{
return QStringLiteral("MainView");
}
void VisualizationWidget::attachVariableMenu(QMenu *menu,
std::shared_ptr<Variable> variable) noexcept
{
// Generates the actions that make it possible to visualize the variable
auto generateVariableMenuOperation = GenerateVariableMenuOperation{menu, variable};
accept(&generateVariableMenuOperation);
}