Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer/SituationMap/FunctionDialog/simple_esri_layer.cpp
T
torstenandCopilot 124fbb4de8 Fix Qt6 deprecated APIs: QCheckBox::checkStateChanged, ExploratoryLocationViewshed
- Replace QCheckBox::stateChanged with checkStateChanged in:
  - lts_dialog.cpp
  - simple_esri_layer.cpp (2 occurrences)
  - layer_control_widget.cpp
  - symbol_dialog.cpp
- Replace LocationViewshed with ExploratoryLocationViewshed (ArcGIS SDK v300):
  - viewshed_analysis.h/.cpp
  - ViewshedLocation.h/.cpp
  - function_dialog.cpp (include)
- Update ViewshedLocation member variable type to ExploratoryLocationViewshed

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-13 14:41:33 +02:00

379 lines
11 KiB
C++
Executable File

/**
* @RDE_HEADER@
* FunctionDialog
* $Id$
* $HeadURL$
* $Author$
*/
#include "simple_esri_layer.h"
#include <Map.h>
#include <MapImpl/map_impl.h>
#include <Map.h>
#include <MapGraphicsView.h>
#include <LayerListModel.h>
#include <ArcGISTiledLayer.h>
// for overview
#include <QDebug>
#include <QDialog>
#include <QLabel>
#include <QCheckBox>
#include <QPushButton>
#include <QSlider>
#include <QGridLayout>
#include <QStandardItemModel>
namespace SituationMap
{
Esri::ArcGISRuntime::Layer *getEsriBasemap_Layer(Esri::ArcGISRuntime::Map *map,
const QString &layername)
{
if (!(map &&
map->basemap() &&
map->basemap()->baseLayers())
)
return nullptr;
Esri::ArcGISRuntime::Layer *layerFound = nullptr;
const Esri::ArcGISRuntime::LayerListModel *model = map->basemap()->baseLayers();
for (int i = 0; i < model->size(); ++i)
{
const Esri::ArcGISRuntime::Layer *curLayer = model->at(i);
const QString &curName = curLayer->name();
if (QString::compare(layername, curName) == 0)
{
layerFound = model->at(i);
break;
}
} // for
return layerFound;
}
Esri::ArcGISRuntime::ArcGISTiledLayer *getEsriBasemap_ArcGISTiledLayer(Esri::ArcGISRuntime::Map *map,
const QString &layername)
{
Esri::ArcGISRuntime::Layer *layerFound = getEsriBasemap_Layer(map, layername);
if (! layerFound)
return nullptr;
if (layerFound->layerType() == Esri::ArcGISRuntime::LayerType::ArcGISTiledLayer)
{
Esri::ArcGISRuntime::ArcGISTiledLayer *layer2 =
static_cast<Esri::ArcGISRuntime::ArcGISTiledLayer *>(layerFound);
return layer2;
}
return nullptr;
}
class SimpleEsriLayer::Private
{
public:
Private()
{
}
~Private()
{
}
// ESRI data:
Esri::ArcGISRuntime::Map *m_map = nullptr;
Esri::ArcGISRuntime::MapGraphicsView *m_mapView = nullptr;
// OWN data:
QGridLayout *m_layout = nullptr;
}; // class SimpleEsriLayer::Private
//-----------------------------------------------------------------------------
SimpleEsriLayer::SimpleEsriLayer(QWidget *parent, Esri::ArcGISRuntime::MapGraphicsView *mapView)
: QWidget(parent)
, d(new Private)
{
d->m_mapView = mapView;
if (d->m_mapView)
d->m_map = d->m_mapView->map();
d->m_layout = new QGridLayout(this);
updatePanel();
}
SimpleEsriLayer::~SimpleEsriLayer()
{
delete d;
}
bool SimpleEsriLayer::updatePanel()
{
for (int row = 0; row < d->m_layout->rowCount(); ++row)
{
for (int col = 0; col < d->m_layout->columnCount(); ++col)
{
QLayoutItem *item = d->m_layout->itemAtPosition(row, col);
if (item)
{
QWidget *w = item->widget();
delete w;
}
}
}
delete d->m_layout;
d->m_layout = new QGridLayout(this);
if (d->m_map)
{
// Header
int row = 0;
int col = 0;
for (const char *name : { "OnOff", "Opac", "Brightness", "Contrast", "Gamma" })
d->m_layout->addWidget(new QLabel(QString::fromLatin1(name)), row, col++);
row = d->m_layout->rowCount();
// GraphicalOverlay
Esri::ArcGISRuntime::GraphicsOverlayListModel *graphicsOverlayListModel = d->m_mapView->graphicsOverlays();
if (graphicsOverlayListModel)
{
int graphicsOverlaySize = graphicsOverlayListModel->size();
// qDebug() << LOGFUNCTION << " graphicsOverlayListModel -> size=" << graphicsOverlaySize;
row += graphicsOverlaySize;
for (int i = 0; i < graphicsOverlaySize; ++i)
{
--row;
col = 0;
// qDebug() << LOGFUNCTION << " graphicsOverlayListModel handle layer i='" << i;
Esri::ArcGISRuntime::GraphicsOverlay *gOverlay = graphicsOverlayListModel->at(i);
if (! gOverlay)
{
qWarning() << LOGFUNCTION << " gOverlay is nil";
return false;
}
const QString &layername = gOverlay->objectName();
QCheckBox *cbOnOff = new QCheckBox(layername);
cbOnOff->setChecked(gOverlay->isVisible());
connect(cbOnOff, &QCheckBox::checkStateChanged, this, &SimpleEsriLayer::layerOnOff);
d->m_layout->addWidget(cbOnOff, row, col++);
SimpleEsriLayerSlider *sl_opac = new SimpleEsriLayerSlider(layername, 0, 100);
sl_opac->setValue(gOverlay->opacity() * 100);
connect(sl_opac, &SimpleEsriLayerSlider::valueChanged, this, &SimpleEsriLayer::opacity);
d->m_layout->addWidget(sl_opac, row, col++);
} // for
} // if (graphicsOverlayListModel)
// BasemapLayer
row = d->m_layout->rowCount();
Esri::ArcGISRuntime::LayerListModel *baseLayerModel = d->m_map->basemap()->baseLayers();
if (baseLayerModel)
{
int baseLayerModelSize = baseLayerModel->size();
qWarning() << LOGFUNCTION << " baseLayerModel -> size=" << baseLayerModelSize;
row += baseLayerModelSize;
for (int i = 0; i < baseLayerModelSize; ++i)
{
col = 0;
--row;
qWarning() << LOGFUNCTION << " baseLayerModel handle layer i=" << i;
Esri::ArcGISRuntime::Layer *layer = baseLayerModel->at(i);
if (! layer)
{
qWarning() << LOGFUNCTION << " layer is nil";
return false;
}
const QString &layername = layer->name();
QCheckBox *cbOnOff = new QCheckBox(layername);
cbOnOff->setChecked(layer->isVisible());
// QString tooltip = layer->url();
// if (!l->serviceDescription().isEmpty())
// tooltip += QLatin1String(" ; ") % l->serviceDescription();
// if (!tooltip.isEmpty())
// cbOnOff->setToolTip(tooltip);
connect(cbOnOff, &QCheckBox::checkStateChanged, this, &SimpleEsriLayer::layerOnOff);
d->m_layout->addWidget(cbOnOff, row, col++);
SimpleEsriLayerSlider *sl_opac = new SimpleEsriLayerSlider(layername, 0, 100);
sl_opac->setValue(layer->opacity() * 100);
connect(sl_opac, &SimpleEsriLayerSlider::valueChanged, this, &SimpleEsriLayer::opacity);
d->m_layout->addWidget(sl_opac, row, col++);
if (layer->layerType() == Esri::ArcGISRuntime::LayerType::ArcGISTiledLayer
// || layer->type() == EsriRuntimeQt::LayerType::ArcGISTiledMapService
)
{
Esri::ArcGISRuntime::ArcGISTiledLayer *realLayer =
dynamic_cast<Esri::ArcGISRuntime::ArcGISTiledLayer *>(layer);
if (realLayer)
{
float brightness = realLayer->brightness();
float contrast = realLayer->contrast();
float gamma = realLayer->gamma();
qWarning() << " brightness=" << brightness; // QuartzBeta1 -> not supported
qWarning() << " contrast=" << contrast; // QuartzBeta1 -> not supported
qWarning() << " gamma=" << gamma; // QuartzBeta1 -> not supported
SimpleEsriLayerSlider *sl_brightness = new SimpleEsriLayerSlider(layername, -100, 100);
sl_brightness->setValue(brightness * 100);
connect(sl_brightness, &SimpleEsriLayerSlider::valueChanged, this, &SimpleEsriLayer::brightness);
d->m_layout->addWidget(sl_brightness, row, col++);
SimpleEsriLayerSlider *sl_contrast = new SimpleEsriLayerSlider(layername, -100, 100);
sl_contrast->setValue(contrast * 100);
connect(sl_contrast, &SimpleEsriLayerSlider::valueChanged, this, &SimpleEsriLayer::contrast);
d->m_layout->addWidget(sl_contrast, row, col++);
SimpleEsriLayerSlider *sl_gamma = new SimpleEsriLayerSlider(layername, -100, 100);
sl_gamma->setValue(gamma * 100);
connect(sl_gamma, &SimpleEsriLayerSlider::valueChanged, this, &SimpleEsriLayer::gamma);
d->m_layout->addWidget(sl_gamma, row, col++);
} // ir (realLayer)
} // if (layer->type() == Es
} // for
} // if (baseLayerModel)
QPushButton *pbMaximizeExtent = new QPushButton(QLatin1String("maximize scale of 1st basemap"));
d->m_layout->addWidget(pbMaximizeExtent, 9999, 0);
connect(pbMaximizeExtent, &QPushButton::clicked, this, [this]()
{
if (d->m_map)
{
d->m_map->setMinScale(500000000); // 5e+08
d->m_map->setMaxScale(100);
}
});
}
else
qWarning() << LOGFUNCTION << " no map !!! ";
return true;
}
void SimpleEsriLayer::layerOnOff()
{
QCheckBox *cb = qobject_cast<QCheckBox *>(sender());
if (!cb)
return;
QString layername = cb->text();
qDebug() << LOGFUNCTION << " layername=" << layername;
Esri::ArcGISRuntime::Layer *l = getEsriBasemap_Layer(d->m_map, layername);
if (l)
l->setVisible(cb->isChecked());
else
qDebug() << LOGFUNCTION << " no layer!!!, layername=" << layername;
}
void SimpleEsriLayer::opacity(int)
{
SimpleEsriLayerSlider *sl = qobject_cast<SimpleEsriLayerSlider *>(sender());
if (!sl)
return;
QString layername = sl->m_layername;
double value = sl->value() / 100.0;
Esri::ArcGISRuntime::Layer *l = getEsriBasemap_Layer(d->m_map, layername);
if (l)
{
qDebug() << LOGFUNCTION << " layername=" << layername << " set to val=" << value;
l->setOpacity(value);
}
else
qWarning() << LOGFUNCTION << " no layer!!!, layername=" << layername;
}
void SimpleEsriLayer::brightness(int)
{
SimpleEsriLayerSlider *sl = qobject_cast<SimpleEsriLayerSlider *>(sender());
if (!sl)
return;
QString layername = sl->m_layername;
Esri::ArcGISRuntime::ArcGISTiledLayer *l = getEsriBasemap_ArcGISTiledLayer(d->m_map, layername);
double value = sl->value() / 100.0;
// double value = sl->value();
qDebug() << LOGFUNCTION << " layername=" << layername << " set to val=" << value;
l->setBrightness(value);
}
void SimpleEsriLayer::contrast(int)
{
SimpleEsriLayerSlider *sl = qobject_cast<SimpleEsriLayerSlider *>(sender());
if (!sl)
return;
QString layername = sl->m_layername;
Esri::ArcGISRuntime::ArcGISTiledLayer *l = getEsriBasemap_ArcGISTiledLayer(d->m_map, layername);
double value = sl->value() / 100.0;
// double value = sl->value();
qDebug() << LOGFUNCTION << " layername=" << layername << " set to val=" << value;
l->setContrast(value);
}
void SimpleEsriLayer::gamma(int)
{
SimpleEsriLayerSlider *sl = qobject_cast<SimpleEsriLayerSlider *>(sender());
if (!sl)
return;
QString layername = sl->m_layername;
Esri::ArcGISRuntime::ArcGISTiledLayer *l = getEsriBasemap_ArcGISTiledLayer(d->m_map, layername);
double value = sl->value() / 100.0;
// double value = sl->value();
qDebug() << LOGFUNCTION << " layername=" << layername << " set to val=" << value;
l->setGamma(value);
}
} // namespace SituationMap