/** * @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 #include #include #include #include #include #include #include #include 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::of(&QComboBox::currentIndexChanged), this, &OverviewDialog::onCbComparePlanIndexChanged); connect(m_ui->cbBasePlan, QOverload::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 &dtc, const std::shared_ptr &ftc, const std::shared_ptr &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("

"); header += tr("Instrumentation Plan: %1").arg(QString::fromStdString(ms.name())); header += QStringLiteral("
"); header += tr("Status: %1").arg(toString(ms.statusId())); header += QStringLiteral("
"); header += tr("Created: %1").arg(DTG::toStringMSec(ms.timeCreated())); header += QStringLiteral("
"); 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("
"); header += QStringLiteral("

"); 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(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