Files
qt5-legatus-legacy/Lts/Viewer/SituationMap/Symbology/symbol_dictionary.cpp
T
2026-08-13 18:33:10 +02:00

243 lines
6.3 KiB
C++
Executable File

/**
* @RDE_HEADER@
* Interface of SymbolDictionary
* $Id$
* $HeadURL$
* $Author$
*/
// Own
#include "symbol_dictionary.h"
#include <Common/resource_path.h>
#include <SymbologyImpl/symbol_dictionary_impl.h>
#include "sidc_codec.h"
// Qt
#include <QCoreApplication>
#include <QMap>
#include <QProcessEnvironment>
void initResource()
{
Q_INIT_RESOURCE(symbols);
}
namespace AdvancedSymbology
{
bool SymbolDictionary::doParanoiaChecks()
{
static bool s_read = false;
static bool s_doParanoiaChecks = false;
if (!s_read)
{
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
QString val = env.value(QStringLiteral("DO_SITMAP_CHECKS"), QStringLiteral("1"));
s_read = true;
s_doParanoiaChecks = (val.compare(QStringLiteral("1"))==0);
if (s_doParanoiaChecks)
qCritical() << " paranoiaChecks are ON (via DO_SITMAP_CHECKS)";
else
qCritical() << " paranoiaChecks are OFF (via DO_SITMAP_CHECKS)";
}
return s_doParanoiaChecks;
}
static QMap<SymbologyType, QString> &s_symbologyResourcePaths()
{
static QMap<SymbologyType, QString> map;
return map;
} // QMap<SymbologyType, QString> &s_symbologyResourcePaths()
static QMap<SymbologyType, SymbolDictionary *> &s_symbologyDictionaries()
{
static QMap<SymbologyType, SymbolDictionary *> map;
return map;
} // QMap<SymbologyType, SymbolDictionary *> &s_symbologyDictionaries
static void cleanupDictionary()
{
qDeleteAll(s_symbologyDictionaries());
s_symbologyDictionaries().clear();
}
bool SearchParameters::isEmpty() const
{
return keys.isEmpty() &&
names.isEmpty() &&
categories.isEmpty() &&
symbolClasses.isEmpty() &&
tags.isEmpty();
}
int SearchParameters::numberOfParameter() const
{
int count = 0;
if (!keys.isEmpty()) ++count;
if (!names.isEmpty()) ++count;
if (!categories.isEmpty()) ++count;
if (!symbolClasses.isEmpty()) ++count;
if (!tags.isEmpty()) ++count;
return count;
}
SymbolDictionary::SymbolDictionary(QObject *parent)
: QObject(parent)
{
LOGGER_T m_logger = getLogger("SymbolDictionary");
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
initResource();
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
static SymbologyType _defaultSymbologyType = SymbologyType::None;
SymbologyType SymbolDictionary::defaultSymbologyType()
{
return _defaultSymbologyType;
} // SymbologyType SymbolDictionary::defaultSymbologyType()
void SymbolDictionary::setDefaultSymbologyType( SymbologyType symbologyType )
{
if (SymbologyType::None == _defaultSymbologyType)
{
// set default only once
_defaultSymbologyType = symbologyType;
}
} // void SymbolDictionary::setDefaultSymbologyType( SymbologyType symbologyType )
QString SymbolDictionary::initializeSymbologyResourcePath(SymbologyType symbologyType)
{
LOGGER_T m_logger = getLogger("SymbolDictionary");
TRACE_LOG(m_logger) << LOGFUNCTION << " START"
<< " symbologyType=" << symbologyType;
if (s_symbologyResourcePaths()[symbologyType].isEmpty())
{
#ifdef USE_ARCADE_SYMBOLOGY
QString finalSymbologyResourcePath = SituationMap::getResourcePath() + QLatin1String("symbols_arcade/");
#else
QString finalSymbologyResourcePath = SituationMap::getResourcePath() + QLatin1String("symbols/");
#endif // USE_ARCADE_SYMBOLOGY
switch (symbologyType)
{
case AdvancedSymbology::SymbologyType::MIL2525D:
finalSymbologyResourcePath.append(QLatin1String("mil2525d/mil2525d.stylx")); // like /arcgis/runtime_sdk/qt100.0/resources/symbols/mil2525d/mil2525d.stylx
break;
case AdvancedSymbology::SymbologyType::MIL2525C:
finalSymbologyResourcePath.append(QLatin1String("mil2525c_b2/mil2525c_2b.stylX"));
break;
case AdvancedSymbology::SymbologyType::APP6B:
finalSymbologyResourcePath.append(QLatin1String("app6b/app6b.stylx"));
break;
case AdvancedSymbology::SymbologyType::APP6D:
finalSymbologyResourcePath.append(QLatin1String("app6d/app6d.stylx"));
break;
case AdvancedSymbology::SymbologyType::None:
finalSymbologyResourcePath.clear();
break;
} // switch
s_symbologyResourcePaths()[symbologyType] = finalSymbologyResourcePath;
}
DEBUG_LOG(m_logger) << LOGFUNCTION << " dict of type/path:"
<< " symbologyType=" << symbologyType
<< ", symbologyResourcePath='" << s_symbologyResourcePaths()[symbologyType] << "'";
TRACE_LOG(m_logger) << LOGFUNCTION << " END"
<< " symbologyType=" << symbologyType
<< ", symbologyResourcePath='" << s_symbologyResourcePaths()[symbologyType] << "'";
return s_symbologyResourcePaths()[symbologyType];
}
SymbolDictionary &SymbolDictionary::dictionary(SymbologyType symbologyType)
{
LOGGER_T m_logger = getLogger("SymbolDictionary");
TRACE_LOG(m_logger) << LOGFUNCTION << " START"
<< " symbologyType=" << symbologyType;
if (!s_symbologyDictionaries().contains(symbologyType))
{
// store and get final path:
const QString &resPath = initializeSymbologyResourcePath(symbologyType);
// Do NOT removed this message!!!
NOTICE_LOG(m_logger) << LOGFUNCTION << " dictionary path: '" << resPath << "'"
<< ", symbologyType " << symbologyType;
// Do NOT removed this message!!!
// create dict:
AdvancedSymbology::SymbolDictionaryImpl *dict =
new AdvancedSymbology::SymbolDictionaryImpl(symbologyType, resPath);
// store dict:
s_symbologyDictionaries()[symbologyType] = dict;
qAddPostRoutine(cleanupDictionary);
}
TRACE_LOG(m_logger) << LOGFUNCTION << " END"
<< " symbologyType=" << symbologyType;
return *(s_symbologyDictionaries()[symbologyType]);
}
bool SymbolDictionary::alreadyExists(SymbologyType symbologyType)
{
return s_symbologyDictionaries().contains(symbologyType);
}
QImage SymbolDictionary::temporaryImage(int sizeL)
{
return SymbolDictionaryImpl::temporaryImage(sizeL);
}
void cleanupSymbolDictionaryInternal()
{
LOGGER_T m_logger = getLogger("SymbolDictionary");
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
cleanupDictionary();
if (! s_symbologyDictionaries().isEmpty())
FATAL_LOG(m_logger) << LOGFUNCTION << " s_symbologyDictionaries NOT empty";
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
} // namespace AdvancedSymbology