#include "lookup_symbol_manager.h" #include "lookup_symbol_dlg.h" #include "plan_editor.h" #include "plan_editor_session.h" #include #include #include #include #include #include #include namespace PlanEditor { class LookupSymbolManager::InternalData { public: PlanEditor *m_planEditor; SituationMap::Map *m_map; const PlanEditorSession &m_session; QPointer m_dlgSymbolLookup; QPointer m_bslWidgetSymbols; QPointer m_bslWidgetParticipant; QPointer &getBaseSymbolLookupWidgetRef() { if (m_isParticipantDialog) return m_bslWidgetParticipant; return m_bslWidgetSymbols; } QSet m_participantSidcsInUse; QStringList m_symbolScopeList; bool m_isParticipantDialog; InternalData(PlanEditor *planEditor, SituationMap::Map *map, const PlanEditorSession &session) : m_planEditor(planEditor) , m_map(map) , m_session(session) , m_dlgSymbolLookup() , m_symbolScopeList() , m_isParticipantDialog(false) {} ~InternalData() { delete m_dlgSymbolLookup; m_dlgSymbolLookup = nullptr; } }; LookupSymbolManager::LookupSymbolManager(PlanEditor *planEditor , SituationMap::Map *map , const PlanEditorSession &session) : QObject(planEditor), m_internal(new LookupSymbolManager::InternalData(planEditor, map, session)) { QTimer::singleShot(1000, this, [this]() { emit readModelFinished(); }); } LookupSymbolManager::~LookupSymbolManager() { delete m_internal->m_bslWidgetSymbols; m_internal->m_bslWidgetSymbols = nullptr; delete m_internal->m_bslWidgetParticipant; m_internal->m_bslWidgetParticipant = nullptr; delete m_internal; m_internal = nullptr; } void LookupSymbolManager::setParticipantsSidcsInUse(const QSet &sidcs) { m_internal->m_participantSidcsInUse = sidcs; } AdvancedSymbology::SymbolDictionary &LookupSymbolManager::symbolDictionary() { return m_internal->m_map->symbolDictionary(); } bool LookupSymbolManager::isParticipantDialog() const { return m_internal->m_isParticipantDialog; } void LookupSymbolManager::openDialog(const QString &title, const QString &widgetId) { if (m_internal->m_dlgSymbolLookup) onCloseDialog(); m_internal->m_dlgSymbolLookup = new LookupSymbolDlg(this, m_internal->m_planEditor, widgetId, m_internal->getBaseSymbolLookupWidgetRef()); if (m_internal->m_isParticipantDialog) { m_internal->m_dlgSymbolLookup->setParticipantMode(true); m_internal->m_dlgSymbolLookup->setValidBaseSymbolCodes(m_internal->m_participantSidcsInUse); } m_internal->m_session.addWidget(m_internal->m_dlgSymbolLookup , m_internal->m_planEditor->title() , title , LtsWidgets::LayoutArea::eDialogTab , true); m_internal->m_dlgSymbolLookup->setTitle(title); connect(m_internal->m_dlgSymbolLookup.data(), &LookupSymbolDlg::beginDestroy, this, &LookupSymbolManager::onLookupSymbolDialogBeginDestroy); connect(m_internal->m_dlgSymbolLookup.data(), &LookupSymbolDlg::addToSymbolFavourites, this, &LookupSymbolManager::addToSymbolFavourites); connect(m_internal->m_dlgSymbolLookup.data(), &LookupSymbolDlg::symbolDoubleClicked, this, &LookupSymbolManager::onSymbolDoubleClicked); m_internal->m_dlgSymbolLookup->onUpdateSymbolScopes(m_internal->m_symbolScopeList); } void LookupSymbolManager::onLookupSymbolDialogBeginDestroy() { m_internal->getBaseSymbolLookupWidgetRef() = m_internal->m_dlgSymbolLookup->detachAndTakeBaseSymbolLookupWidget(); } void LookupSymbolManager::onCloseDialog() { if (m_internal->m_dlgSymbolLookup) { delete m_internal->m_dlgSymbolLookup; m_internal->m_dlgSymbolLookup = nullptr; } } void LookupSymbolManager::onOpenSymbolDialog() { if (m_internal->m_dlgSymbolLookup) return; m_internal->m_isParticipantDialog = false; openDialog(tr("Symbol-Lookup"), QStringLiteral("PlanEditor_Symbols")); } void LookupSymbolManager::onOpenParticipantDialog() { if (m_internal->m_dlgSymbolLookup) return; m_internal->m_isParticipantDialog = true; openDialog(tr("Participant-Lookup"), QStringLiteral("PlanEditor_Participants")); } void LookupSymbolManager::onUpdateSymbolScopes(const QStringList &scopeList) { m_internal->m_symbolScopeList = scopeList; if (m_internal->m_dlgSymbolLookup) m_internal->m_dlgSymbolLookup->onUpdateSymbolScopes(m_internal->m_symbolScopeList); } void LookupSymbolManager::initializeSymbolLookupModelDrag() { } void LookupSymbolManager::onSymbolDoubleClicked(const QString &baseSymbolCode) { if (!m_internal->m_planEditor) return; const QString &encodedCompleteCode = AdvancedSymbology::SidcBuilderBase::baseSymbolCodeToSidc(baseSymbolCode); m_internal->m_planEditor->onSymbolCreateRubberband(encodedCompleteCode, m_internal->m_isParticipantDialog); } }