Files
qt5-legatus-legacy/Lts/Plugins/InfrastructureManagement/Gui/ResourceManagement/Overview/ism_overview_dialog.cpp
T
2026-08-13 18:33:10 +02:00

232 lines
7.5 KiB
C++
Executable File

/**
* @RDE_HEADER@
* The OverviewDialog shows how many assets are needed for a specific schedule, needed elsewhere,
* totally possessed, free, and missing
* $Id$
* $HeadURL$
* $Author$
* Created by Hannes Baeuerle, SLSE, 2016-11-03
*/
#include "ism_overview_dialog.h"
#include "ism_overview_conflicts_dialog.h"
#include "ui_ism_overview_dialog.h"
#include "ism_overview_dialog_model.h"
#include "ism_overview_conflicts_dialog.h"
#include <ngltools/ngltools_dtg.h>
#include <InfrastructureManagement/ism_translation.h>
#include <LtsSession/lts_session.h>
#include <LtsPrinting/printing.h>
#include <LtsWidgets/lts_base_layout_widget.h>
#include <QTreeView>
#include <QDateTime>
#include <QComboBox>
#include <QTimer>
namespace InfrastructureManagement
{
OverviewDialog::OverviewDialog(const QString &menuGroup, LtsSession::LtsSession *session, QWidget *parent)
: LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::CloseOnly)
, m_session(session)
, m_ui(new Ui::OverviewDialog)
, m_menuGroup(menuGroup)
, m_logger(getLogger("OverviewDialog"))
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
m_ui->setupUi(this);
m_timerUpdateView = new QTimer(this);
m_timerUpdateView->setSingleShot(true);
m_buttonBox->connectButton(LtsWidgets::DialogButton::Print, this, &OverviewDialog::onPrint);
connect(m_ui->cbComparePlan, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &OverviewDialog::onCbComparePlanIndexChanged);
connect(m_ui->cbBasePlan, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &OverviewDialog::onCbBasePlanIndexChanged);
setOnlineHelpFilename(QStringLiteral("Ressourcen-Overview"));
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
OverviewDialog::~OverviewDialog()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
delete m_ui;
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
void OverviewDialog::aboutToClose()
{
DEBUG_LOG(m_logger) << "About to close";
if (m_session->baseLayout()->getWidget(m_menuGroup, QStringLiteral("OverviewConflicts")))
m_session->baseLayout()->getWidget(m_menuGroup, QStringLiteral("OverviewConflicts"))->closeRequest();
}
void OverviewDialog::retranslate()
{
translate(m_ui, m_dtc->mainSchedule(m_scheduleId), tr("Overview"));
}
void OverviewDialog::tableColumnOrganiserSetting()
{
//LtsColumnOrganiser
m_ui->overviewView->setColumnsOrganiserEnabled(identifier(), true);
}
bool OverviewDialog::init(int planId,
const std::shared_ptr<InfrastructureManagement::Interface::Dtc> &dtc,
const std::shared_ptr<Interface::Ftc> &ftc,
const std::shared_ptr<ForeignDataInterface> &dataInterface)
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
m_scheduleId = planId;
m_dtc = dtc;
m_ftc = ftc;
m_dataIfc = dataInterface;
delete m_model;
setCbComparePlan();
setCbBasePlan();
m_model = new OverviewDialogModel(this);
if (!m_model->initModel(m_scheduleId, m_dtc, 0))
{
delete m_model;
m_model = nullptr;
return false;
}
m_ui->overviewView->setModel(m_model);
connect(m_dataIfc.get(), &ForeignDataInterface::scheduleIdChanged, this, &OverviewDialog::onScheduleIdChanged);
connect(m_dtc.get(), &Interface::Dtc::mainStructureElementChanged, this, &OverviewDialog::onPlansDataChanged);
connect(m_dtc.get(), &Interface::Dtc::instrumentationAssetChanged, this, &OverviewDialog::onPlansDataChanged);
connect(m_dtc.get(), &Interface::Dtc::mainScheduleChanged, this, &OverviewDialog::onPlansDataChanged);
connect(m_timerUpdateView, &QTimer::timeout, this, &OverviewDialog::reloadModel);
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
return true;
}
void OverviewDialog::setCbBasePlan()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
m_ui->cbBasePlan->clear();
m_ui->cbBasePlan->addItem(tr("Actual Mountings"), 0);
m_ui->cbBasePlan->insertSeparator(1);
for (auto ms : m_dtc->mainSchedules())
m_ui->cbBasePlan->addItem(QString::fromStdString(ms.name()), ms.id());
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
void OverviewDialog::setCbComparePlan()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
m_ui->cbComparePlan->clear();
m_ui->cbComparePlan->addItem(tr("All active(*) plans"),0);
m_ui->cbComparePlan->insertSeparator(1);
for (auto ms : m_dtc->mainSchedules())
m_ui->cbComparePlan->addItem((ms.statusId() == ScheduleStatus_def::Active ? QLatin1Literal("* ") : QLatin1Literal(" ")) +
QString::fromStdString(ms.name()), ms.id());
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
void OverviewDialog::onPrint()
{
MainSchedule ms = m_dtc->mainSchedule(m_scheduleId);
QString header;
header += QStringLiteral("<p>");
header += tr("Instrumentation Plan: %1").arg(QString::fromStdString(ms.name()));
header += QStringLiteral("<br/>");
header += tr("Status: %1").arg(toString(ms.statusId()));
header += QStringLiteral("<br/>");
header += tr("Created: %1").arg(DTG::toStringMSec(ms.timeCreated()));
header += QStringLiteral("<br/>");
if (ms.timeStart().is_set())
header += tr("START: %1").arg(DTG::toStringMSec(ms.timeStart().get()));
else
header += tr("START: %1").arg(tr("[N/A]"));
header += QStringLiteral(" - ");
if (ms.timeEnd().is_set())
header += tr("END: %1").arg(DTG::toStringMSec(ms.timeEnd().get()));
else
header += tr("END: %1").arg(tr("[N/A]"));
header += QStringLiteral("<br/>");
header += QStringLiteral("</p>");
LtsPrinting::printView(m_session, this, m_ui->overviewView->treeView() , header);
}
void OverviewDialog::onScheduleIdChanged(int32_t scheduleId)
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
if (m_scheduleId == scheduleId)
return;
setCbComparePlan();
setCbBasePlan();
m_scheduleId = scheduleId;
updateOverviewData();
// close Dialog OverviewConflicts, if open
if (m_session->baseLayout()->getWidget(m_menuGroup, QStringLiteral("OverviewConflicts")))
m_session->baseLayout()->getWidget(m_menuGroup, QStringLiteral("OverviewConflicts"))->closeRequest();
retranslate();
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
void OverviewDialog::onCbComparePlanIndexChanged(int index)
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
Q_UNUSED(index);
updateOverviewData();
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
void OverviewDialog::onCbBasePlanIndexChanged(int index)
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
Q_UNUSED(index);
updateOverviewData();
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
void OverviewDialog::onPlansDataChanged()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
updateOverviewData(); //reloadModel();
ConflictsDialog *dialog = static_cast<ConflictsDialog*>(m_session->baseLayout()->getWidget(m_menuGroup, QStringLiteral("OverviewConflicts")));
if (dialog)
{
dialog->updateModel();
}
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
void OverviewDialog::updateOverviewData()
{
m_timerUpdateView->start(100);
}
void OverviewDialog::reloadModel()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
if (m_model == nullptr)
return;
const int simPlanId = m_ui->cbBasePlan->currentData().toInt();
const int cmpPlanId = m_ui->cbComparePlan->currentData().toInt();
m_model->initModel(m_scheduleId, m_dtc, cmpPlanId, simPlanId);
// close conflict dialog if opened
if (m_session->baseLayout()->getWidget(m_menuGroup, QStringLiteral("OverviewConflicts")))
m_session->baseLayout()->getWidget(m_menuGroup, QStringLiteral("OverviewConflicts"))->closeRequest();
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
} // namespace InfrastructureManagement