Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+237
@@ -0,0 +1,237 @@
|
||||
/**
|
||||
**
|
||||
** @RDE_HEADER@
|
||||
** Used to manage symbol look up dialog.
|
||||
** $Id$
|
||||
** $HeadURL$
|
||||
** $Author$
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
**
|
||||
** Hardware-Environment: Intel-PC
|
||||
** Software-Environment: Windows 7, Qt 5.4. ArcGIS 10.2.5
|
||||
**
|
||||
** Language ........: C++ 11
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
**
|
||||
** Author ...........: Jörg Turla, SPD G, Tel. 3132
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
**
|
||||
** Notes .........:
|
||||
**
|
||||
** 17.08.2016, JT : First edition for use with Qt5
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
#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> // AdvancedSymbology::Gui::SYMBOL_TYPE
|
||||
|
||||
#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;
|
||||
|
||||
// use QPointer here because LtsDialog has a close button which can destroy the widget
|
||||
QPointer<LookupSymbolDlg> m_dlgSymbolLookup; // 'wraps' bslWidget
|
||||
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; // baseSymbolCodes
|
||||
|
||||
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::InternalData
|
||||
|
||||
|
||||
LookupSymbolManager::LookupSymbolManager(PlanEditor *planEditor
|
||||
, SituationMap::Map *map
|
||||
, const PlanEditorSession &session)
|
||||
|
||||
: QObject(planEditor),
|
||||
m_internal(new LookupSymbolManager::InternalData(planEditor, map, session))
|
||||
{
|
||||
// in former times, every single change of the (user) searchString leads
|
||||
// to a re-fill of the m_baseSymbolModel.
|
||||
// Following, this signal BaseSymbolModel::readModelFinished was connect to
|
||||
// LookupSymbolManager::readModelFinished.
|
||||
// Since the model is stable, use singleShot now:
|
||||
QTimer::singleShot(1000, this, [this]()
|
||||
{
|
||||
emit readModelFinished();
|
||||
});
|
||||
}
|
||||
|
||||
LookupSymbolManager::~LookupSymbolManager()
|
||||
{
|
||||
// most likely we have still the lookupWidgets, cleanup:
|
||||
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()
|
||||
{
|
||||
// not supported anymore,
|
||||
// since approach using DropHandlerKey does not really match with SINGLE
|
||||
// baseSymbol per process.
|
||||
// DropHandlyerKey is the address of the DropCreateSymbol and the method
|
||||
// transfers these adresses to every single baseSymbolItem...
|
||||
// If there will exists more than one PlanEditor simultaneously it will not work :-(
|
||||
//
|
||||
// for (int idx = 0; idx < m_internal->m_baseSymbolModel->size(); ++idx)
|
||||
// {
|
||||
// if (m_internal->m_baseSymbolModel->getDropHandlerKey(idx) == 0L)
|
||||
// {
|
||||
// const QString &sidc = m_internal->m_baseSymbolModel->getSidc(idx);
|
||||
// qulonglong dropEventHandlerKey = m_internal->m_planEditor->createSymbolDropEvent(sidc);
|
||||
|
||||
// m_internal->m_baseSymbolModel->setDropHandlerKey(idx, dropEventHandlerKey);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
} // namespace PlanEditor
|
||||
Reference in new issue
Block a user