Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer/SituationMap/Tests/SituationMap/sit_map.cpp
T

689 lines
25 KiB
C++
Executable File

/**
* @RDE_HEADER@
* Interface
* $Id$
* $HeadURL$
* $Author$
*/
// Own
#include "sit_map.h"
#include <ngltools/ngltools_filesystem.h>
#include <Map/grid.h>
#include <Map/situation_map_utils.h>
#include <Symbology/symbol_dictionary.h>
#include <Map/map_initializer.h>
#include <Map/object_factory.h>
#include <Map/camera.h>
#include <MapObjectsImpl/polygon_impl.h>
#include <MapObjectsImpl/polyline_impl.h>
#include <MapObjectsImpl/text_impl.h>
#include <MapObjectsImpl/area_fire_impl.h>
#include <MapObjectsImpl/biological_agent_impl.h>
#include <MapObjectsImpl/chemical_agent_impl.h>
#include <MapObjectsImpl/cube_impl.h>
#include <MapObjectsImpl/building_outline_impl.h>
#include <MapObjectsImpl/danger_area_impl.h>
#include <MapObjectsImpl/functional_area_impl.h>
#include <MapObjectsImpl/geo_image_impl.h>
#include <MapObjectsImpl/hit_line_impl.h>
#include <MapObjectsImpl/line_of_sight_impl.h>
#include <MapObjectsImpl/map_object_attributes_impl.h>
#include <MapObjectsImpl/map_object_indicator_impl.h>
#include <MapObjectsImpl/mine_impl.h>
#include <MapObjectsImpl/mine_field_impl.h>
#include <MapObjectsImpl/nuclear_agent_impl.h>
#include <MapObjectsImpl/participant_impl.h>
#include <MapObjectsImpl/single_fire_impl.h>
//#include <MapObjectsImpl/single_fire_central_impl.h>
#include <MapObjectsImpl/sound_area_impl.h>
#include <MapImpl/sidc_symbol_impl.h>
#include <MapImpl/sight_fan_impl.h>
#include <Map/camera.h>
#include <Map/viewshed.h>
#include <FunctionDialog/function_dialog.h>
#include <QStackedLayout>
#include <SideBar/side_bar.h>
#include <Map/party_id_to_color_functor.h>
// PlanModel:
#include <GeometryModel/geometry_model_factory.h>
#include <GeometryModel/geometry_model.h>
#include <Map/geometry_model_renderer.h>
// Qt
#include <QApplication>
#include <QTimer>
#include <QPushButton>
#include <QComboBox>
#include <QGridLayout>
#include <QSharedPointer>
#include <QGraphicsView>
#include <QGraphicsProxyWidget>
#include <QMenu>
#include <QFileDialog>
#include <QDir>
//-----------------------------------------------------------------------------
class myMapInitializer : public SituationMap::MapInitializer
{
Q_OBJECT
using BaseClass = SituationMap::MapInitializer;
public:
explicit myMapInitializer(SituationMap::Map &map
, SituationMap::MapSettings &mapSettings
, const QString &debugName)
: SituationMap::MapInitializer(map, mapSettings, debugName)
{}
bool initializeObjectFactory() override
{
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::MapObjectIndicator), new SituationMap::GenericObjectFactory<SituationMap::MapObjectIndicatorImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::Cube), new SituationMap::GenericObjectFactory<SituationMap::CubeImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::Polygon), new SituationMap::GenericObjectFactory<SituationMap::PolygonImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::Polyline), new SituationMap::GenericObjectFactory<SituationMap::PolylineImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::Text), new SituationMap::GenericObjectFactory<SituationMap::TextImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::Participant), new SituationMap::GenericObjectFactory<SituationMap::ParticipantImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::AreaFire), new SituationMap::GenericObjectFactory<SituationMap::AreaFireImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::BiologicalAgent), new SituationMap::GenericObjectFactory<SituationMap::BiologicalAgentImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::ChemicalAgent), new SituationMap::GenericObjectFactory<SituationMap::ChemicalAgentImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::BuildingOutline), new SituationMap::GenericObjectFactory<SituationMap::BuildingOutlineImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::DangerArea), new SituationMap::GenericObjectFactory<SituationMap::DangerAreaImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::FunctionalArea), new SituationMap::GenericObjectFactory<SituationMap::FunctionalAreaImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::GeoImage), new SituationMap::GenericObjectFactory<SituationMap::GeoImageImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::HitLine), new SituationMap::GenericObjectFactory<SituationMap::HitLineImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::LineOfSight), new SituationMap::GenericObjectFactory<SituationMap::LineOfSightImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::MapObjectAttributes), new SituationMap::GenericObjectFactory<SituationMap::MapObjectAttributesImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::Mine), new SituationMap::GenericObjectFactory<SituationMap::MineImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::MineField), new SituationMap::GenericObjectFactory<SituationMap::MineFieldImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::NuclearAgent), new SituationMap::GenericObjectFactory<SituationMap::NuclearAgentImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::SingleFire), new SituationMap::GenericObjectFactory<SituationMap::SingleFireImpl>() );
// SituationMap::ObjectFactory::registerMe(typeid(SituationMap::SingleFireCentral), new SituationMap::GenericObjectFactory<SituationMap::SingleFireCentralImpl>());
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::SoundArea), new SituationMap::GenericObjectFactory<SituationMap::SoundAreaImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::SidcSymbol), new SituationMap::GenericObjectFactory<SituationMap::SidcSymbolImpl>() );
SituationMap::ObjectFactory::registerMe(typeid(SituationMap::SightFan), new SituationMap::GenericObjectFactory<SituationMap::SightFanImpl>());
return true;
} // initializeObjectFactory()
AdvancedSymbology::SymbologyType symbologyType() const override
{
return m_symbologyType;
} // symbologyType
void setSymbologyType(AdvancedSymbology::SymbologyType symbologyType)
{
m_symbologyType = symbologyType;
}
protected:
AdvancedSymbology::SymbologyType m_symbologyType = AdvancedSymbology::SymbologyType::APP6B;
};
//-----------------------------------------------------------------------------
class SitMap::Private
{
public:
Private() = default;
~Private() = default;
// map
QPointer<SituationMap::Map> m_map = nullptr;
bool m_demoMode = false;
QStackedLayout* m_stackedLayout = nullptr;
QSharedPointer<SituationMap::MapSettings> m_mapSettings;
QSharedPointer<myMapInitializer> m_mapInitializer;
// admin
QGridLayout* m_mainLayout = nullptr;
QPushButton* m_pbDestroyMap = nullptr;
QPushButton* m_pbToggleMode = nullptr;
SituationMap::Viewpoint2D m_viewpoint4Toggle;
QPushButton* m_pbQuit = nullptr;
QComboBox* m_cbIniFile = nullptr;
QString m_initFilePath;
QComboBox* m_cb2D3D = nullptr;
QComboBox* m_cbSymbologyType = nullptr;
int symbologyType() const
{
if (m_cbSymbologyType)
{
return m_cbSymbologyType->currentData().toInt();
}
return -1;
}
QPushButton* m_pbPlan = nullptr;
QMenu* m_popupMenu = nullptr;
QTimer* m_getRotationTimer = nullptr;
}; // class SitMap::Private
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//SitMap
//-----------------------------------------------------------------------------
SitMap::SitMap(bool demoMode, QWidget *parent)
: QDialog(parent)
, m_logger(SituationMap::getLogger("SitMap"))
, d(new Private)
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
this->setObjectName( QLatin1String("SitMapExample-Widget") );
d->m_mainLayout = new QGridLayout(this);
d->m_mainLayout->setObjectName( QLatin1String("SitMapExample-MainLayoutGrid") );
//-----------------------------------
// Buttons
//-----------------------------------
QVariant data;
QGridLayout* topLayout = new QGridLayout();
topLayout->setObjectName( QLatin1String("SitMapExample-TopLayoutGrid") );
d->m_mainLayout->addLayout(topLayout, 0, 0);
d->m_cbIniFile = new QComboBox();
d->m_cbIniFile->setObjectName( QLatin1String("SitMapExample-IniFileComboBox") );
topLayout->addWidget(d->m_cbIniFile, 0, 0);
d->m_cbIniFile->addItem(QStringLiteral("situation_map_defaults.ini"), QLatin1String("situation_map_defaults.ini"));
d->m_cbIniFile->addItem(QStringLiteral("situation_map_ahtc.ini"), QLatin1String("situation_map_ahtc.ini"));
d->m_cbIniFile->addItem(QStringLiteral("situation_map_demo_center.ini"), QLatin1String("situation_map_demo_center.ini"));
d->m_cbIniFile->addItem(QStringLiteral("situation_map_guez.ini"), QLatin1String("situation_map_guez.ini"));
d->m_cbIniFile->addItem(QStringLiteral("situation_map_land400.ini"), QLatin1String("situation_map_land400.ini"));
d->m_cbIniFile->addItem(QStringLiteral("situation_map_qatar.ini"), QLatin1String("situation_map_qatar.ini"));
d->m_cbIniFile->addItem(QStringLiteral("situation_map_luxemburg.ini"), QLatin1String("situation_map_luxemburg.ini"));
d->m_cbIniFile->addItem(QStringLiteral("select"), QString());
onIniFileActivated(d->m_cbIniFile->currentText());
connect(d->m_cbIniFile, QOverload<const QString&>::of(&QComboBox::activated),
this, &SitMap::onIniFileActivated);
d->m_cbSymbologyType = new QComboBox();
d->m_cbSymbologyType->setObjectName( QLatin1String("SitMapExample-SymbologyComboBox") );
topLayout->addWidget(d->m_cbSymbologyType, 0, 1);
// debugging :
if (0)
{
// highlighted -> UserInteraction
connect(d->m_cbSymbologyType, static_cast<void (QComboBox::*)(int)>(&QComboBox::highlighted), this, [](int idx){
qCritical() << " called: highlighted(int) " << idx;
});
// currentIndexChanged -> programmatically & UserInteraction
connect(d->m_cbSymbologyType, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, [](int idx){
qCritical() << " called: currentIndexChanged(int) " << idx;
});
// activated -> UserInteraction
connect(d->m_cbSymbologyType, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, [](int idx)
{
qCritical() << " called: activated(int) " << idx;
});
} //
// : debugging
d->m_cb2D3D = new QComboBox();
d->m_cb2D3D->setObjectName( QLatin1String("SitMapExample-cb2D3D") );
data.setValue(SituationMap::Mode::Mode_2D);
d->m_cb2D3D->addItem(QStringLiteral("2D"), data);
data.setValue(SituationMap::Mode::Mode_3D);
d->m_cb2D3D->addItem(QStringLiteral("3D"), data);
topLayout->addWidget(d->m_cb2D3D, 0, 2);
d->m_pbDestroyMap = new QPushButton( QLatin1String("Create Map") );
d->m_pbDestroyMap->setObjectName( QLatin1String("SitMapExample-CreateDestroyMapButton") );
topLayout->addWidget(d->m_pbDestroyMap, 0, 3);
connect(d->m_pbDestroyMap, &QPushButton::clicked, this, &SitMap::onCreateDestroyClicked);
d->m_pbToggleMode = new QPushButton( QLatin1String("Toggle Mode") );
d->m_pbToggleMode->setObjectName( QLatin1String("SitMapExample-ToggleModeButton") );
topLayout->addWidget(d->m_pbToggleMode, 0, 4);
connect(d->m_pbToggleMode, &QPushButton::clicked, this, &SitMap::onToggleModeClicked);
d->m_pbToggleMode->setDisabled(true);
AdvancedSymbology::SymbologyType symType;
symType = AdvancedSymbology::SymbologyType::MIL2525D;
data.setValue(symType); d->m_cbSymbologyType->addItem(AdvancedSymbology::toString(symType), data);
symType = AdvancedSymbology::SymbologyType::MIL2525C;
data.setValue(symType); d->m_cbSymbologyType->addItem(AdvancedSymbology::toString(symType), data);
symType = AdvancedSymbology::SymbologyType::APP6B;
data.setValue(symType); d->m_cbSymbologyType->addItem(AdvancedSymbology::toString(symType), data);
symType = AdvancedSymbology::SymbologyType::APP6D;
data.setValue(symType); d->m_cbSymbologyType->addItem(AdvancedSymbology::toString(symType), data);
symType = AdvancedSymbology::SymbologyType::None;
data.setValue(symType); d->m_cbSymbologyType->addItem(AdvancedSymbology::toString(symType), data);
d->m_cbSymbologyType->setCurrentText(AdvancedSymbology::toString(AdvancedSymbology::SymbologyType::APP6D));
//-----------------------------------
// Map
//-----------------------------------
// createMap();
{
QGridLayout* bottomLayout = new QGridLayout();
bottomLayout->setObjectName( QLatin1String("SitMapExample-TopBottomLayoutGrid") );
d->m_mainLayout->addLayout(bottomLayout, 2, 0);
d->m_pbPlan = new QPushButton( QLatin1String("Plan") );
d->m_pbPlan->setObjectName( QLatin1String("SitMapExample-Plan") );
connect(d->m_pbPlan, &QPushButton::clicked, this, &SitMap::onPlanClicked);
bottomLayout->addWidget(d->m_pbPlan, 0, 0);
d->m_pbQuit = new QPushButton( QLatin1String("Quit") );
d->m_pbQuit->setObjectName( QLatin1String("SitMapExample-Quit") );
bottomLayout->addWidget(d->m_pbQuit, 1, 0);
connect(d->m_pbQuit, &QPushButton::clicked, []() {
QCoreApplication::quit();
});
// tbc
}
if (demoMode)
{
// topLayout
d->m_cbSymbologyType->hide();
d->m_cb2D3D->hide();
d->m_pbDestroyMap->hide();
// bottomLayout
d->m_pbPlan->hide();
// createMap:
onCreateDestroyClicked();
} // if (demoMode)
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
SitMap::~SitMap()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
delete d;
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
SituationMap::Map *SitMap::map()
{
return d->m_map;
}
void SitMap::onCreateDestroyClicked()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
static bool destroy = true;
destroy = !destroy;
if (destroy)
{
d->m_cbIniFile->setEnabled(true);
d->m_cbSymbologyType->setEnabled(true);
d->m_cb2D3D->setEnabled(true);
d->m_pbDestroyMap->setText( QLatin1String("Create Map") );
if (d->m_getRotationTimer)
d->m_getRotationTimer->stop(); // to avoid slot being called
delete d->m_map;
} else {
d->m_cbIniFile->setEnabled(false);
d->m_cbSymbologyType->setEnabled(false);
d->m_cb2D3D->setEnabled(false);
d->m_pbDestroyMap->setText( QLatin1String("Destroy Map") );
createMap();
}
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
void SitMap::onToggleModeClicked()
{
NOTICE_LOG(m_logger) << LOGFUNCTION << " START" << " curMode=" << d->m_cb2D3D->currentText();
d->m_pbToggleMode->setDisabled(true);
d->m_viewpoint4Toggle = d->m_map->viewpoint2D();
qCritical() << " save last d->m_viewpoint4Toggle=" << d->m_viewpoint4Toggle.toString();
// toogle mode:
SituationMap::Mode newMapMode = SituationMap::toggleMode(d->m_map->mode());
// destroy:
onCreateDestroyClicked();
// rebuild
QVariant data;
data.setValue(newMapMode);
int idx = d->m_cb2D3D->findData(data);
d->m_cb2D3D->setCurrentIndex(idx);
// create
onCreateDestroyClicked();
}
void SitMap::createMap()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
d->m_map = SituationMap::Map::create(this);
d->m_map->setObjectName(QLatin1String("SitMapExample-Map"));
// d->m_mainLayout->addWidget(d->m_map, 1, 0);
if (!d->m_stackedLayout)
d->m_stackedLayout = new QStackedLayout();
d->m_stackedLayout->setStackingMode(QStackedLayout::StackAll);
d->m_mainLayout->addLayout(d->m_stackedLayout, 1, 0);
d->m_stackedLayout->addWidget(d->m_map);
NOTICE_LOG(m_logger) << LOGFUNCTION << " iniFile = '" << d->m_initFilePath << "'";
d->m_mapSettings = QSharedPointer<SituationMap::MapSettings> ( new SituationMap::MapSettings(d->m_initFilePath) );
d->m_mapInitializer = QSharedPointer<myMapInitializer>
( new myMapInitializer(*d->m_map, *d->m_mapSettings, QLatin1String("SitMapExample")) );
// toggle?
if (! d->m_viewpoint4Toggle.isNull())
d->m_mapInitializer->setViewPoint(d->m_viewpoint4Toggle);
// Take SymbologyType from UI and not from ini file:
int symbologyTypeInt = d->symbologyType();
if (symbologyTypeInt == -1)
{
ERROR_LOG(m_logger) << LOGFUNCTION << " Error retrieving symbologyType";
abort();
}
AdvancedSymbology::SymbologyType symbologyTypeUI =
static_cast<AdvancedSymbology::SymbologyType>(symbologyTypeInt);
d->m_mapInitializer->setSymbologyType(symbologyTypeUI);
if (d->m_mapInitializer->hasErrors())
{
FATAL_LOG(m_logger) << LOGFUNCTION << " MapInitializer-filename='" << d->m_mapInitializer->filename()
<< "'' has following errors: "
<< " exists = " << d->m_mapInitializer->exists()
<< " accessError = " << d->m_mapInitializer->accessError()
<< " formatError = " << d->m_mapInitializer->formatError();
return;
} else {
const SituationMap::Mode mapMode = d->m_cb2D3D->currentData().value<SituationMap::Mode>();
if (d->m_mapInitializer->initMap(mapMode) )
{
INFO_LOG(m_logger) << LOGFUNCTION << " MapInitializer::initMap() ok";
} else {
ERROR_LOG(m_logger) << LOGFUNCTION << " MapInitializer::initMap() failed";
return;
}
}
// 50. turn over to application (if required):
d->m_map->setTimeString(QStringLiteral("#"));
// connect (d->m_map.data(), &SituationMap::Map::mapObjectsClicked, this, &SitMap::onMapObjectClicked);
connect( d->m_map.data()
, &SituationMap::Map::contextMenuClicked
, this
, &SitMap::onMapContextClicked );
if (d->m_map->isReady())
d->m_pbToggleMode->setEnabled(true);
else
connect(d->m_map.data(), &SituationMap::Map::mapReady, this, [this]() {
d->m_pbToggleMode->setEnabled(true);
});
// Create FunctionDialog:
SituationMap::FunctionDialog::addButtonToMap(d->m_map);
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
} // SitMap::createMap
static QVector<SituationMap::RefPointer<SituationMap::Participant>>& participantMap()
{
static QVector<SituationMap::RefPointer<SituationMap::Participant>> s_participantCont;
return s_participantCont;
}
void SitMap::onPlanClicked()
{
if (!d->m_map || !d->m_map->isReady())
return;
const SituationMap::PartyIdToColorFunctor::PartyData pData1(QStringLiteral("P1"),
AdvancedSymbology::Role::Friend,
Qt::blue, Qt::blue);
const SituationMap::PartyIdToColorFunctor::PartyData pData2(QStringLiteral("P2"),
AdvancedSymbology::Role::HostileFaker,
Qt::red, Qt::red);
d->m_map->partyIdToColorFunctor().setParty(1, pData1);
d->m_map->partyIdToColorFunctor().setParty(2, pData2);
const QSize windowSize = this->size();
const QSize offset(50, 50);
SituationMap::LayerFactory &layerFac = d->m_map->layerFactory();
QStringList layernames = layerFac.layernames(SituationMap::LayerType::Operational);
QString layername = layernames[0];
layername = QStringLiteral("Participants");
SituationMap::ObjectFactory &objFac = d->m_map->objectFactory();
SituationMap::RefPointer<SituationMap::Participant> participant;
int counter = 0;
int partyId = 1;
for (int x = offset.width(); x<windowSize.width()-offset.width(); x+=offset.width())
{
for (int y = offset.height(); y<windowSize.height()-offset.height(); y+=offset.height())
{
++counter;
QString debugName = QString(QStringLiteral("ModuleTestId1 cnt=%1")).arg(counter);
QPointF geoCoord = d->m_map->viewPortWindowPointToGeoCoordinate(QPointF(x,y));
SituationMap::SymbolData symData;
symData.sidc = QStringLiteral("AP6D|CMPL|10031000111205000000");
symData.color = Qt::cyan; // Will be overwritten via partyId.
participant = objFac.create<SituationMap::Participant>(layername, debugName);
participantMap().append(participant);
participant->setOrigin(SituationMap::Point3D::fromQPointF(geoCoord));
participant->setSymbol(symData);
if (partyId == 2)
partyId = 1;
else
partyId = 2;
participant->setPartyId(partyId);
if (!participant->updateView())
{
qCritical() << "updateView failed: debugName='" << debugName << "'";
abort();
}
} // for
} // for
QTimer *timer = new QTimer(this);
timer->setInterval(150);
static int s_partyId = 1;
static int s_finishCounter=0;
connect(timer, &QTimer::timeout, this, [timer]() {
qCritical() << " new partyId= " << s_partyId << " count=" << participantMap().size() << ")";
++s_finishCounter;
if (s_finishCounter>10)
timer->stop();
int counter = rand()%5;
for(auto participant : std::as_const(participantMap()))
{
int curPartyId = participant->partyId();
if (curPartyId == 2)
curPartyId = 1;
else
curPartyId = 2;
participant->setPartyId(curPartyId);
SituationMap::SymbolData symData = participant->symbol();
int mod = ((++counter)%9);
switch (mod)
{
case 0: symData.sidc = QStringLiteral("AP6D|CMPL|10031000111205000000"); break;
case 1: symData.sidc = QStringLiteral("AP6D|CMPL|10031500001202000000"); break;
case 2: symData.sidc = QStringLiteral("AP6D|CMPL|10031500001302000000"); break;
case 3: symData.sidc = QStringLiteral("AP6D|CMPL|10031500001402000000"); break;
case 4: symData.sidc = QStringLiteral("AP6D|CMPL|10031500001502000000"); break;
case 5: symData.sidc = QStringLiteral("AP6D|CMPL|10031500001602000000"); break;
case 6: symData.sidc = QStringLiteral("AP6D|CMPL|10031500001702000000"); break;
case 7: symData.sidc = QStringLiteral("AP6D|CMPL|10031500001802000000"); break;
case 8: symData.sidc = QStringLiteral("AP6D|CMPL|10031500001902000000"); break;
}
participant->setSymbol(symData);
if (!participant->updateView())
{
qCritical() << "updateView failed:";
abort();
}
}
});
timer->start();
}
void SitMap::onMapObjectClicked(const SituationMap::Map::RefPointerMapObjectList & mapObjList, const QPointF &viewportPosition)
{
DEBUG_LOG(m_logger) << LOGFUNCTION << "START onMapObjectClicked"
<< " viewportPosition=" << viewportPosition
<< " mapObjList.size()=" << mapObjList.size();
for (auto mapObj : mapObjList)
{
DEBUG_LOG(m_logger) << LOGFUNCTION << " id=" << mapObj->uniqueMapId()
<< " object-debugInfo=" << mapObj->debugInfo()
<< " object-identifier=" << mapObj->identifier();
// Selection:
if (mapObj->pickable())
{
mapObj->setSelected(!mapObj->selected());
mapObj->updateView();
DEBUG_LOG(m_logger) << LOGFUNCTION << (mapObj->selected() ? " is selected" : " is not selected");
}
}
DEBUG_LOG(m_logger) << LOGFUNCTION << "END onMapObjectClicked";
}
void SitMap::onMapContextClicked(const SituationMap::Map::RefPointerMapObjectList & mapObjList, const QPointF & pos)
{
DEBUG_LOG(m_logger) << LOGFUNCTION << "START onMapContextClicked window pos x=" << pos.x() << " y=" << pos.y()
<< " mapObjList.size()=" << mapObjList.size();
return;
// delete d->m_popupMenu;
// d->m_popupMenu = new QMenu( d->m_map );
// d->m_popupMenu->addSection( QLatin1String("Object at mouse position") );
// for (auto mapObj : mapObjList)
// {
// DEBUG_LOG(m_logger) << LOGFUNCTION << " id=" << mapObj->uniqueMapId()
// << "object-debugInfo=" << mapObj->debugInfo()
// << "object-identifier=" << mapObj->identifier();
// d->m_popupMenu->addAction( mapObj->identifier() );
// }
// d->m_popupMenu->addSeparator();
// // d->m_popupMenu->popup(d->m_map->getQGraphicsView()->mapToGlobal(pos.toPoint()));
// d->m_popupMenu->popup( QPoint(100, 100) );
// DEBUG_LOG(m_logger) << LOGFUNCTION << "END onMapContextClicked";
}
void SitMap::onIniFileActivated(const QString &text)
{
if (text.compare(QLatin1String("select")) == 0)
{
d->m_initFilePath = QFileDialog::getOpenFileName(this,
QLatin1String("get ini file"),
QLatin1String(""),
QLatin1String("Ini files (*.ini)"));
} else {
// e.g. TDS-build/share/Lts/situation_map/situation_map_defaults.ini
d->m_initFilePath = NGL::findFile(NGL::FileType::ConfigFile, text);
}
NOTICE_LOG(m_logger) << LOGFUNCTION << "selected filename= '" << d->m_initFilePath << "'";
}
// SitMap::onMapContextClicked(const SituationMap::Map::RefPointerMapObjectList & mapObjList, const QPoint &)
#include "sit_map.moc"