Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
@@ -0,0 +1,378 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* FunctionDialog
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
|
||||
#include "simple_esri_layer.h"
|
||||
|
||||
#include <arcgis/Map.h>
|
||||
|
||||
#include <MapImpl/map_impl.h>
|
||||
#include <arcgis/Map.h>
|
||||
#include <arcgis/MapGraphicsView.h>
|
||||
#include <arcgis/LayerListModel.h>
|
||||
#include <arcgis/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::stateChanged, 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::stateChanged, 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
|
||||
Reference in new issue
Block a user