Files
qt5-legatus-legacy/Lts/Plugins/BuildingViewer/Common/BgViewer/viewerCtrl/viewermainwindow.cpp
T
2026-08-13 18:33:10 +02:00

150 lines
4.1 KiB
C++
Executable File

#include "viewermainwindow.h"
#include "viewwidget.h"
#include "viewerinterfaceimpl.h"
#include <QHBoxLayout>
#include <QLabel>
#include <QPushButton>
namespace VCtrl
{
////////////////////////////////////////////////////////////////////////////////
TransparencyDialog::TransparencyDialog(QWidget *parent)
: QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowTitleHint)
{
setWindowTitle(tr("BgViewer - Set Global Transparency"));
auto plabel = new QLabel(tr("Set transparency value:"));
m_pSlider = new QSlider(Qt::Horizontal);
m_pSlider->setMinimum(0);
m_pSlider->setMaximum(100);
m_pSlider->setValue(50);
m_pSlider->setMinimumWidth(200);
auto pButton = new QPushButton(tr("Apply"));
connect(pButton, &QPushButton::clicked, this, &VCtrl::TransparencyDialog::accept);
auto pLayout = new QHBoxLayout(this);
pLayout->addWidget(plabel);
pLayout->addWidget(m_pSlider);
pLayout->addWidget(pButton);
pLayout->setSizeConstraint(QLayout::SetFixedSize);
}
////////////////////////////////////////////////////////////////////////////////
CtrlMainWindow::CtrlMainWindow(QWidget *parent)
: QWidget(parent)
{
connect(&m_highlighterTimer, &QTimer::timeout,
this, &CtrlMainWindow::onHighlighterTimerTimeout);
setWindowTitle(tr("BgViewer"));
// Remove minimize/maximize and close button
setWindowFlags(Qt::Window | Qt::CustomizeWindowHint);
new QGridLayout(this);
}
////////////////////////////////////////////////////////////////////////////////
void CtrlMainWindow::updateHighlightThreads(ViewWidget *pWidget)
{
m_highlighterCounter[pWidget] = 6;
if (!m_highlighterTimer.isActive())
m_highlighterTimer.start(500);
}
////////////////////////////////////////////////////////////////////////////////
void CtrlMainWindow::onHighlighterTimerTimeout()
{
auto it = m_highlighterCounter.begin();
while (it != m_highlighterCounter.end())
{
ViewWidget *ww = it.key();
ww->highlightBorder(it.value() % 2 == 0);
it.value() = it.value() - 1;
if (it.value() <= 0)
it = m_highlighterCounter.erase(it);
else
++it;
}
if (m_highlighterCounter.isEmpty())
m_highlighterTimer.stop();
}
////////////////////////////////////////////////////////////////////////////////
void CtrlMainWindow::openView(ViewWidget *pViewWidget)
{
openViews({pViewWidget});
}
////////////////////////////////////////////////////////////////////////////////
void CtrlMainWindow::openViews(const std::vector<ViewWidget *> &vecMainWindowSubWidgets)
{
constexpr int maxViewsPerCol = 4;
// Append where we stopped last time
QGridLayout *gridLayout = static_cast<QGridLayout *>(layout());
int row = gridLayout->count() / maxViewsPerCol, col = gridLayout->count() % maxViewsPerCol;
// Add all requested ViewWidgets which are actually new
for (auto &pWidget : vecMainWindowSubWidgets)
{
auto itm = gridLayout->itemAtPosition(row, col);
if (itm && itm->widget() == pWidget)
continue;
gridLayout->addWidget(pWidget, row, col);
pWidget->show();
if (++col >= maxViewsPerCol)
{
col = 0;
++row;
}
}
}
void CtrlMainWindow::closeView(ViewWidget *pViewWidget)
{
if (!pViewWidget)
return;
QGridLayout *gridLayout = dynamic_cast<QGridLayout *>(layout());
std::vector<ViewWidget*> currentViews;
currentViews.reserve(gridLayout->count());
for (int idx = 0; idx < gridLayout->count(); idx++)
{
QLayoutItem *item = gridLayout->itemAt(idx);
ViewWidget *vw = static_cast<ViewWidget*>(item->widget());
if (vw != pViewWidget)
currentViews.push_back(vw);
}
m_highlighterCounter.remove(pViewWidget);
pViewWidget->close();
delete gridLayout;
setLayout(new QGridLayout);
openViews(currentViews);
}
////////////////////////////////////////////////////////////////////////////////
void CtrlMainWindow::clearGridLayout()
{
QGridLayout *gridLayout = dynamic_cast<QGridLayout *>(layout());
for (int idx = 0; idx < gridLayout->count(); idx++)
{
QLayoutItem *item = gridLayout->itemAt(idx);
item->widget()->hide();
}
m_highlighterCounter.clear();
delete gridLayout;
setLayout(new QGridLayout);
}
}