/** * @RDE_HEADER@ * Dialog for selecting (base) symbols * $Id$ * $HeadURL$ * $Author$ * Created by Norbert Thoden, NLE, 12.12.2019 */ #include "base_symbol_lookup_dialog.h" #include "base_symbol_lookup_widget.h" #include #include #include #include #include #include // for baseSymbolCodeToSidc #include #include #include namespace AdvancedSymbology { namespace Gui { //------------------------------------------------------------------------------ // BaseSymbolLookupDialog::Private //------------------------------------------------------------------------------ struct BaseSymbolLookupDialog::Private { public: Private() = default; ~Private() { delete m_baseSymbolWidget; delete m_buttonBox; } BaseSymbolLookupWidget *m_baseSymbolWidget = nullptr; LtsWidgets::LtsDialogButtonBox *m_buttonBox = nullptr; }; //------------------------------------------------------------------------------ // BaseSymbolLookupDialog //------------------------------------------------------------------------------ BaseSymbolLookupDialog::BaseSymbolLookupDialog(QWidget *parent) : BaseClass(parent, LtsWidgets::Behaviour::Modal) , m_logger(getLogger("BaseSymbolLookupDialog")) , d(new Private()) { TRACE_LOG(m_logger) << LOGFUNCTION << " START"; TRACE_LOG(m_logger) << LOGFUNCTION << " END"; } bool BaseSymbolLookupDialog::participantMode() const { if (!d->m_baseSymbolWidget) return false; return d->m_baseSymbolWidget->participantMode(); } void BaseSymbolLookupDialog::setParticipantMode(bool onOff) { if (!d->m_baseSymbolWidget) return; d->m_baseSymbolWidget->setParticipantMode(onOff); } void BaseSymbolLookupDialog::setValidBaseSymbolCodes(const QSet &validBaseSymbolCodes) { if (!d->m_baseSymbolWidget) return; d->m_baseSymbolWidget->setValidBaseSymbolCodes(validBaseSymbolCodes); } bool BaseSymbolLookupDialog::init(AdvancedSymbology::SymbolDictionary &symbolDictionary) { TRACE_LOG(m_logger) << LOGFUNCTION << " START"; LtsUtils::ProjectSettings *ps = LtsUtils::ProjectSettings::getInstance(); bool enableEtsSymbols = ps->value(QStringLiteral("SituationMap"), QStringLiteral("enableEtsSymbols"), true).toBool(); // setup: delete d->m_baseSymbolWidget; delete d->m_buttonBox; AdvancedSymbology::SymbolDictionaryImpl &sdi = static_cast(symbolDictionary); AdvancedSymbology::BaseSymbolModel *bsmEsri = sdi.getBaseSymbolModelEsri(); AdvancedSymbology::BaseSymbolModel *bsmXml = sdi.getBaseSymbolModelXML(); AdvancedSymbology::BaseSymbolModel *bsmEts = sdi.getBaseSymbolModelEts(); DEBUG_LOG(m_logger) << LOGFUNCTION << " bsmEsri rowCount" << bsmEsri->rowCount(); const SymbologyType symbologyType = sdi.symbologyType(); AdvancedSymbology::Gui::MODEL_CONT modelCont; modelCont.append(AdvancedSymbology::Gui::ModelItem(AdvancedSymbology::Gui::SYMBOL_TYPE::ESRI, toString(symbologyType), bsmEsri)); modelCont.append(AdvancedSymbology::Gui::ModelItem(AdvancedSymbology::Gui::SYMBOL_TYPE::XML, QLatin1String("User-defined Symbols"), bsmXml)); if (enableEtsSymbols ) modelCont.append(AdvancedSymbology::Gui::ModelItem(AdvancedSymbology::Gui::SYMBOL_TYPE::ETS, QLatin1String("Ets"), bsmEts)); d->m_baseSymbolWidget = new AdvancedSymbology::Gui::BaseSymbolLookupWidget(modelCont, this); connect(d->m_baseSymbolWidget, &AdvancedSymbology::Gui::BaseSymbolLookupWidget::symbolClicked, this, &BaseSymbolLookupDialog::onSymbolClicked); connect(d->m_baseSymbolWidget, &AdvancedSymbology::Gui::BaseSymbolLookupWidget::symbolDoubleClicked, this, &BaseSymbolLookupDialog::onSymbolDoubleClicked); d->m_buttonBox = new LtsWidgets::LtsDialogButtonBox(this); connect(d->m_buttonBox->getButton(LtsWidgets::DialogButton::Ok), &QPushButton::clicked, this, &BaseSymbolLookupDialog::apply); connect(d->m_buttonBox->getButton(LtsWidgets::DialogButton::Close), &QPushButton::clicked, this, &BaseSymbolLookupDialog::close); d->m_buttonBox->getButton(LtsWidgets::DialogButton::Ok)->setEnabled(false); // until an item is selected // setup layout: QVBoxLayout *layout = new QVBoxLayout(); layout->addWidget(d->m_baseSymbolWidget, 2); layout->addWidget(d->m_buttonBox); setLayout(layout); setMinimumWidth(800); resize(sizeHint().height(), minimumWidth()); TRACE_LOG(m_logger) << LOGFUNCTION << " END"; return true; } BaseSymbolLookupDialog::~BaseSymbolLookupDialog() { TRACE_LOG(m_logger) << LOGFUNCTION << " START"; delete d; TRACE_LOG(m_logger) << LOGFUNCTION << " END"; } QString BaseSymbolLookupDialog::getCurrentBaseSymbolCode() const { if (!d->m_baseSymbolWidget) return QString(); return d->m_baseSymbolWidget->getCurrentBaseSymbolCode(); } bool BaseSymbolLookupDialog::setCurrentSidc(const QString &sidc) { if (!d->m_baseSymbolWidget) return false; bool success = d->m_baseSymbolWidget->setCurrentSidc(sidc); // d->m_buttonBox->getButton(LtsWidgets::DialogButton::Ok)->setEnabled(success); return success; } void BaseSymbolLookupDialog::onSymbolClicked(const QString &baseSymbolCode, const QString &sidc) { TRACE_LOG(m_logger) << LOGFUNCTION << " START, " << " baseSymbolCode='" << baseSymbolCode << "'" << " sidc='" << sidc << "'"; d->m_buttonBox->getButton(LtsWidgets::DialogButton::Ok)->setEnabled(!sidc.isEmpty()); // slotChangesMade(); } void BaseSymbolLookupDialog::onSymbolDoubleClicked(const QString &baseSymbolCode, const QString &sidc) { TRACE_LOG(m_logger) << LOGFUNCTION << " START, " << " baseSymbolCode='" << baseSymbolCode << "'" << " sidc='" << sidc << "'"; apply(); } void BaseSymbolLookupDialog::apply() { if (!d->m_baseSymbolWidget) return ; QSharedPointer bsi = d->m_baseSymbolWidget->getCurrentBaseSymbolItem(); if (!bsi) return; const QString &curBsc = bsi->baseSymbolCode(); const QString &curSidc = bsi->sidc(); emit lookupAppliedBaseSymbolCode(curBsc); emit lookupAppliedCompleteSidc(curSidc); accept(); } BaseSymbolLookupDialog *BaseSymbolLookupDialog::showInstance() { static QPointer s_BaseSymbolLookupDialog; if (!s_BaseSymbolLookupDialog) s_BaseSymbolLookupDialog = createDlg(); return s_BaseSymbolLookupDialog; } BaseSymbolLookupDialog *BaseSymbolLookupDialog::createDlg(QWidget *parent) { AdvancedSymbology::Gui::BaseSymbolLookupDialog *dlg = new AdvancedSymbology::Gui::BaseSymbolLookupDialog(parent); dlg->init(AdvancedSymbology::SymbolDictionary::dictionary(AdvancedSymbology::SymbolDictionary::defaultSymbologyType())); return dlg; } } // namespace Gui } // namespace AdvancedSymbology