Files
qt-migration-legatus/qt5-before/dlbo/Lts/Viewer/SituationMap/MapImpl/logical_layer.h
T
torstenandCopilot 7173785915 Qt6 Migration: Complete migration with DDS/RTI support and build validation
Major Changes:
- Merged latest Qt5 devel content from dlbo (292 files changed, 7 new dirs)
- Consolidated forward-declarations and include folders
- Removed unneeded modules per Niklas' repo check list

Build System Fixes:
- Fixed CMake VERSION_GREATER syntax in ParticipantManagement/CMakeLists.txt
- Added VLC packages (libvlc-dev, vlc-plugin-base) to docker_build.sh
- Added PostgreSQL dev packages (libpq-dev, postgresql-server-dev-all) to Dockerfile
- Fixed locale warnings (ANSI_X3.4-1968 → C.UTF-8)
- Fixed ArcGIS SDK path warnings when BUILD_ARCGIS=OFF

Code Generation Fixes:
- Fixed IDL enum collisions (PortType→CorePortType/DdsutPortType, PdmEventType)
- Fixed Grantlee template svc_translation.cpp.grantlee:
  - Changed {{ idl_enum.name }}_def:: to {{ idl_enum.name }}::
  - Fixed .underlying() calls for C++11 scoped enums (enum class)
- Removed generated files from repo (moc_*, *_dtc.h, *_ftc.h)

Validation:
- BUILD_RTI=ON: SUCCESS
- BUILD_RTI=OFF: SUCCESS
- C++17 standard maintained for RTI 7.7 compatibility
- Ubuntu 26.04 Docker environment verified

Remaining Warnings (expected):
- BgViewer, KDChart, KDReports, Poppler-Qt6 not found (optional features)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-09-15 18:20:26 +00:00

191 lines
5.8 KiB
C++

/**
* @RDE_HEADER@
* MapLayer
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
// Own
#include <Map/map.h>
#include <Map/layer_parameter.h>
#include <Common/situation_map_logging.h>
//ESRI
#include <arcgis/LayerListModel.h>
#include <arcgis/Layer.h>
#include <arcgis/GraphicsOverlay.h>
#include <arcgis/GraphicsOverlayListModel.h>
// Qt
#include <QVector>
//----------------------------------------------------------------------------
namespace SituationMap
{
class MapImpl;
enum class TechnicalLayerType
{
GraphicsLayer,
GraphicsLayer_Dict,
GraphicsLayer_3D_Extrusion,
GraphicsLayer_3D_Absolute
};
SITUATIONMAP_EXPORT QLatin1String toString(const TechnicalLayerType &value);
class LogicalLayer final : public QObject
{
Q_OBJECT
using BaseClass = QObject;
public:
/*! \name Creation, Destruction */
//@{
explicit LogicalLayer(const QString &logicalName, QObject *parent = nullptr);
~LogicalLayer();
void init(SituationMap::Map *map,
Esri::ArcGISRuntime::LayerListModel *layerListModel,
Esri::ArcGISRuntime::GraphicsOverlayListModel *graphicsOverlayListModel);
void fini();
void setLayerType(const LayerType &layerType);
void setBasemapType(const BasemapType &basemapType);
RenderingMode renderingMode() const; ///< has to be set early
void setRenderingMode(RenderingMode renderingMode); ///< has to be set early
SurfacePlacement surfacePlacement() const; ///< has to be set early
void setSurfacePlacement(SurfacePlacement surfacePlacement); ///< has to be set early
void setOrderOfGraphicalOverlays(const QVector<TechnicalLayerType> &orderOfGraphicalOverlays);
//@}
/*! \name Some names */
//@{
QString logicalName() const;
void setLogicalName(const QString &logicalName);
static QString createInternalLayerName(const QString &logicalLayerName,
const TechnicalLayerType &technicalLayerType);
//@}
/*! \name Access to some types */
//@{
LayerType layerType() const;
BasemapType basemapType() const;
//@}
/*! \name Access to LayerParameter*/
//@{
const LayerParameter &layerParameter() const;
void setLayerParameter(const LayerParameter &layerParameter);
//@}
/*! \name Main Access without creation on demand*/
//@{
void setLayer(Esri::ArcGISRuntime::Layer *layer);
Esri::ArcGISRuntime::Layer *layer() const;
QList<Esri::ArcGISRuntime::GraphicsOverlay *> getCurrentGraphicalOverlaysOrdered() const;
QList<QPair<QString, Esri::ArcGISRuntime::GraphicsOverlay *>> getCurrentGraphicalOverlaysOrderedWithName() const;
//@}
/*! \name Main Access with creation on demand*/
//@{
Esri::ArcGISRuntime::GraphicsOverlay *getCreateGraphicalOverlay(const TechnicalLayerType &technicalLayerType);
//@}
/*! \name Access to LayerIndex*/
//@{
int layerIndex() const;
//@}
protected:
QString m_logicalName;
// Some enums:
LayerType m_layerType = LayerType::Undefined;
BasemapType m_basemapType = BasemapType::Undefined;
RenderingMode m_graphicsOverlayRenderingMode = RenderingMode::Dynamic;
SurfacePlacement m_surfacePlacement = SurfacePlacement::Draped;
// visi, opac, brigth, gamma, contrast...
LayerParameter m_layerParameter;
// to enable/allow GraphicalOverlays and set their order:
QVector<TechnicalLayerType> m_orderOfGraphicalOverlays;
// ESRI:
Esri::ArcGISRuntime::Layer *m_layer = nullptr; // store BasemapLayer
QVector<Esri::ArcGISRuntime::GraphicsOverlay *> m_graphicalOverlays; // store GraphicsOverlays (unordered)
int m_retryCounter = 0;
signals:
void layerCreatedOnDemand(const QString &logicalName);
void layerDoneLoading(const QString &logicalName);
void layerParameterChanged(const QString &logicalName, const LayerParameter &newLayerParameter);
protected slots:
void onLayerError(const Esri::ArcGISRuntime::Error &error);
void onGraphicsOverlayLayerError(const Esri::ArcGISRuntime::Error &error);
void onRendererError(const Esri::ArcGISRuntime::Error &error);
void onLayerDoneLoading(const Esri::ArcGISRuntime::Error &loadError); // not for GraphicOverlays
void onLayerLoadStatusChanged(const Esri::ArcGISRuntime::LoadStatus &loadStatus); // not for GraphicOverlays
private:
// to be able to handle with BaseLayers (got from Map)
Esri::ArcGISRuntime::LayerListModel *m_layerListModel = nullptr;
// to be able to handle with GraphicalOverlays (got from GeoView)
Esri::ArcGISRuntime::GraphicsOverlayListModel *m_graphicsOverlayListModel = nullptr;
// to be able to create DictionaryRenderer:
SituationMap::Map *m_map = nullptr;
// Since GraphicOverlays don`t support setName yet:
// (and objectname returns an empty string in any case):
mutable QMap<QString, Esri::ArcGISRuntime::GraphicsOverlay *> m_graphicOverlayContainer; // workaround
Esri::ArcGISRuntime::GraphicsOverlay *createGraphicLayer(const TechnicalLayerType &technicalLayerType,
RenderingMode renderingMode = RenderingMode::Dynamic);
Esri::ArcGISRuntime::GraphicsOverlay *createGraphicLayerInternal(const TechnicalLayerType &technicalLayerType,
RenderingMode renderingMode = RenderingMode::Dynamic);
void applyLayerParameterToEsri();
LOGGER_T m_logger; ///< Interface of the Logging-Facility
};
std::ostream &operator<< (std::ostream &stream,
const SituationMap::TechnicalLayerType &value);
} // namespace SituationMap