211 lines
6.9 KiB
C++
Executable File
211 lines
6.9 KiB
C++
Executable File
/**
|
|
* @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 <LtsWidgets/lts_dialog_button_box.h>
|
|
#include <LtsUtilsSettings/settings.h>
|
|
|
|
#include <Symbology/symbol_dictionary.h>
|
|
#include <SymbologyImpl/symbol_dictionary_impl.h>
|
|
#include <SymbologyImpl/base_symbol_model.h>
|
|
|
|
#include <Symbology/sidc_builder_base.h> // for baseSymbolCodeToSidc
|
|
|
|
#include <QVBoxLayout>
|
|
#include <QHash>
|
|
#include <QPointer>
|
|
|
|
|
|
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<QString> &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<AdvancedSymbology::SymbolDictionaryImpl &>(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<BaseSymbolItem> 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<BaseSymbolLookupDialog> 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
|