232 lines
7.5 KiB
C++
Executable File
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
|