/** * @RDE_HEADER@ * GUI Plugin for ParticipantManagement - Combat Power Dialog * $Id$ * $HeadURL$ * $Author$ * Created by Patric Karwat, SLSE, 2017-04-07 */ #include "combat_power.h" #include "ui_combat_power.h" namespace ParticipantManagement { int CombatPower::s_preselectedParty = -1; CombatPower::CombatPower(QWidget *parent) : LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::CloseOnly) , m_orgChart(nullptr) , m_dtc(nullptr) , m_asbIfc(nullptr) , m_ppmGuiCbxIfc(nullptr) , m_ppmGuiInfoIfc(nullptr) , m_ui(new Ui::CombatPower) , m_logger(getLogger("CombatPower")) { m_ui->setupUi(this); setOnlineHelpFilename(QStringLiteral("Situation-Combat_Power")); } //---------------------------------------------------------------------------- CombatPower::~CombatPower() { m_orgChart->setParent(nullptr); //Workaround m_orgChart->deleteLater(); delete m_ui; } void CombatPower::retranslate() { translate(m_ui, tr("Combat Power")); m_ppmGuiCbxIfc->fillPartyComboBox(m_ui->cbParty); } bool CombatPower::init(const std::shared_ptr &dtc, const std::shared_ptr &asbIfc, const std::shared_ptr &ppmGuiCbxIfc, const std::shared_ptr &ppmGuiInfoIfc) { if (!dtc || !asbIfc || !ppmGuiCbxIfc) { ERROR_LOG(m_logger) << "Could not load all interfaces needed"; return false; } m_dtc = dtc; m_asbIfc = asbIfc; m_ppmGuiCbxIfc = ppmGuiCbxIfc; if (ppmGuiInfoIfc) m_ppmGuiInfoIfc = ppmGuiInfoIfc; m_orgChart = new ParticipantManagement::LtsParticipantsOrgChart(this); connect(m_orgChart, &LtsParticipantsOrgChart::startDBClick, this, &CombatPower::onOpenInfo); if (!m_orgChart->init(m_dtc, m_asbIfc)) return false; connect(m_dtc.get(), &Interface::Dtc::dynamicParticipantDataChanged, this, &CombatPower::onUpdateDynamicParticipantData, Qt::UniqueConnection); connect(m_dtc.get(), &Interface::Dtc::participantChanged, this, &CombatPower::onUpdateParticipant, Qt::UniqueConnection); connect(m_ui->cbParty, static_cast(&LtsWidgets::LtsComboBox::currentIndexChanged), this, &CombatPower::onPartyChanged, Qt::UniqueConnection); m_ppmGuiCbxIfc->fillPartyComboBox(m_ui->cbParty); const int idx = m_ui->cbParty->findData(s_preselectedParty); if (idx >= 0) m_ui->cbParty->setCurrentIndex(idx); DEBUG_LOG(m_logger) << "Init CombatPower - parties: " << m_ui->cbParty->count(); onPartyChanged(); m_ui->vLay->addWidget(m_orgChart); return true; } void CombatPower::onPartyChanged() { DEBUG_LOG(m_logger) << "onPartyChanged - parties: " << m_ui->cbParty->count(); if (s_preselectedParty == -1) m_ui->cbParty->setCurrentIndex(s_preselectedParty); s_preselectedParty = m_ui->cbParty->currentData().toUInt(); if (m_orgChart) m_orgChart->loadParty(m_ui->cbParty->currentData().toInt()); } void CombatPower::onOpenInfo(int id) { if (m_ppmGuiInfoIfc) m_ppmGuiInfoIfc->showParticipantInfoWindow(id); } void CombatPower::onUpdateParticipant(const Participant &data, DataModification modType) { DEBUG_LOG(m_logger) << "onUpdateParticipant - parties: " << m_ui->cbParty->count(); if (data.partyId() != m_ui->cbParty->currentData().toInt()) return; if (modType == DataModification::eModified) m_orgChart->updateParticipant(data.id()); else onPartyChanged(); } void CombatPower::onUpdateDynamicParticipantData(const DynamicParticipantData &data, DataModification modType) { DEBUG_LOG(m_logger) << "onUpdateDynamicParticipantData - parties: " << m_ui->cbParty->count(); if (m_dtc->participant(data.participantId()).partyId() != m_ui->cbParty->currentData().toInt()) return; if (modType == DataModification::eModified) m_orgChart->updateParticipant(data.participantId()); else onPartyChanged(); } } //namespace ParticipantManagement