Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Plugins/PlanEditor/lookup_symbol_manager.cpp
T

213 lines
5.5 KiB
C++
Executable File

#include "lookup_symbol_manager.h"
#include "lookup_symbol_dlg.h"
#include "plan_editor.h"
#include "plan_editor_session.h"
#include <Symbology/sidc_codec.h>
#include <Symbology/sidc_builder_base.h>
#include <SymbologyGui/base_symbol_lookup_widget.h>
#include <LtsWidgets/lts_base_layout_widget.h>
#include <LtsWidgets/lts_dialog.h>
#include <QtCore/QPointer>
#include <QTimer>
namespace PlanEditor
{
class LookupSymbolManager::InternalData
{
public:
PlanEditor *m_planEditor;
SituationMap::Map *m_map;
const PlanEditorSession &m_session;
QPointer<LookupSymbolDlg> m_dlgSymbolLookup;
QPointer<AdvancedSymbology::Gui::BaseSymbolLookupWidget> m_bslWidgetSymbols;
QPointer<AdvancedSymbology::Gui::BaseSymbolLookupWidget> m_bslWidgetParticipant;
QPointer<AdvancedSymbology::Gui::BaseSymbolLookupWidget> &getBaseSymbolLookupWidgetRef()
{
if (m_isParticipantDialog)
return m_bslWidgetParticipant;
return m_bslWidgetSymbols;
}
QSet<QString> 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<QString> &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);
}
}