221 lines
5.0 KiB
C++
Executable File
221 lines
5.0 KiB
C++
Executable File
/**
|
|
* @RDE_HEADER@
|
|
* Interface-Implementation of Grid
|
|
* $Id$
|
|
* $HeadURL$
|
|
* $Author$
|
|
*/
|
|
|
|
// Own
|
|
#include "grid_impl.h"
|
|
#include "map_impl.h"
|
|
|
|
|
|
// ESRI
|
|
#include <arcgis/arcgisversion.h> // This file is created by RME, not ESRI
|
|
#include <arcgis/Map.h>
|
|
#include <arcgis/MapGraphicsView.h>
|
|
#include <arcgis/LatitudeLongitudeGrid.h>
|
|
#include <arcgis/MGRSGrid.h>
|
|
#include <arcgis/UTMGrid.h>
|
|
#include <arcgis/USNGGrid.h>
|
|
#include <arcgis/SimpleLineSymbol.h>
|
|
#include <arcgis/TextSymbol.h>
|
|
|
|
|
|
// Qt
|
|
|
|
|
|
namespace SituationMap
|
|
{
|
|
|
|
|
|
class GridImpl::Private
|
|
{
|
|
public:
|
|
Private() = default;
|
|
~Private() = default;
|
|
|
|
// ESRI data:
|
|
Esri::ArcGISRuntime::Grid *m_esriGrid = nullptr;
|
|
|
|
// Own data:
|
|
SituationMap::MapImpl *m_mapImpl = nullptr;
|
|
|
|
|
|
}; // class GridImpl::Private
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
GridImpl::GridImpl(SituationMap::MapImpl *mapImpl)
|
|
: m_logger(getLogger("GridImpl"))
|
|
, d(new Private)
|
|
{
|
|
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
|
|
|
d->m_mapImpl = mapImpl;
|
|
if (d->m_mapImpl && d->m_mapImpl->getEsriMapGraphicsView())
|
|
d->m_esriGrid = d->m_mapImpl->getEsriMapGraphicsView()->grid();
|
|
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
|
}
|
|
|
|
|
|
GridImpl::~GridImpl()
|
|
{
|
|
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
|
|
delete d;
|
|
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
|
|
}
|
|
|
|
GridType GridImpl::gridType()
|
|
{
|
|
GridType curType = GridType::NoType;
|
|
|
|
if (d->m_esriGrid)
|
|
{
|
|
Esri::ArcGISRuntime::GridType esriGridType = d->m_esriGrid->gridType();
|
|
switch (esriGridType)
|
|
{
|
|
case Esri::ArcGISRuntime::GridType::Unknown:
|
|
curType = GridType::NoType;
|
|
break;
|
|
case Esri::ArcGISRuntime::GridType::LatitudeLongitudeGrid:
|
|
curType = GridType::LatLon;
|
|
break;
|
|
case Esri::ArcGISRuntime::GridType::MGRSGrid:
|
|
curType = GridType::MGRS;
|
|
break;
|
|
case Esri::ArcGISRuntime::GridType::UTMGrid:
|
|
curType = GridType::UTM;
|
|
break;
|
|
case Esri::ArcGISRuntime::GridType::USNGGrid:
|
|
curType = GridType::USGN;
|
|
break;
|
|
} // switch
|
|
|
|
}
|
|
else
|
|
DEBUG_LOG(m_logger) << LOGFUNCTION << " no object";
|
|
|
|
return curType;
|
|
}
|
|
|
|
void GridImpl::setGridType(GridType gridType)
|
|
{
|
|
// change?
|
|
if (this->gridType() == gridType)
|
|
return;
|
|
|
|
if (d->m_esriGrid)
|
|
d->m_esriGrid->deleteLater();
|
|
|
|
if (! d->m_mapImpl->getEsriMapGraphicsView())
|
|
return;
|
|
|
|
QObject *parent = d->m_mapImpl->getEsriMapGraphicsView();
|
|
|
|
switch (gridType)
|
|
{
|
|
case GridType::NoType:
|
|
d->m_esriGrid = nullptr;
|
|
break;
|
|
case GridType::LatLon:
|
|
d->m_esriGrid = new Esri::ArcGISRuntime::LatitudeLongitudeGrid(parent);
|
|
break;
|
|
case GridType::MGRS:
|
|
d->m_esriGrid = new Esri::ArcGISRuntime::MGRSGrid(parent);
|
|
break;
|
|
case GridType::UTM:
|
|
d->m_esriGrid = new Esri::ArcGISRuntime::UTMGrid(parent);
|
|
break;
|
|
case GridType::USGN:
|
|
d->m_esriGrid = new Esri::ArcGISRuntime::USNGGrid(parent);
|
|
break;
|
|
} // switch
|
|
|
|
if (d->m_esriGrid)
|
|
{
|
|
d->m_esriGrid->setLabelPosition(Esri::ArcGISRuntime::GridLabelPosition::AllSides);
|
|
|
|
int levelCount = d->m_esriGrid->levelCount();
|
|
for (int i = 0; i < levelCount; ++i)
|
|
{
|
|
Esri::ArcGISRuntime::TextSymbol *gridLabel = static_cast<Esri::ArcGISRuntime::TextSymbol *>(d->m_esriGrid->textSymbol(i));
|
|
if (gridLabel)
|
|
{
|
|
gridLabel->setSize(10);
|
|
gridLabel->setHaloWidth(1.0);
|
|
}
|
|
const QColor col(0, 0, 0, 200);
|
|
Esri::ArcGISRuntime::SimpleLineSymbol sls(Esri::ArcGISRuntime::SimpleLineSymbolStyle::Solid,
|
|
col,
|
|
1);
|
|
d->m_esriGrid->setLineSymbol(i, &sls);
|
|
} // for
|
|
}
|
|
|
|
// call setGrid even if d->m_esriGrid is nullptr !!!
|
|
d->m_mapImpl->getEsriMapGraphicsView()->setGrid(d->m_esriGrid);
|
|
|
|
d->m_mapImpl->emitVisualComponentChanged(VisualComponent::Grid);
|
|
}
|
|
|
|
|
|
void GridImpl::setVisible(bool visible)
|
|
{
|
|
if (d->m_esriGrid)
|
|
{
|
|
if (d->m_esriGrid->isVisible() != visible)
|
|
{
|
|
d->m_esriGrid->setVisible(visible);
|
|
d->m_mapImpl->emitVisualComponentChanged(VisualComponent::Grid);
|
|
}
|
|
}
|
|
else
|
|
ERROR_LOG(m_logger) << LOGFUNCTION << " no object";
|
|
}
|
|
|
|
bool GridImpl::isVisible()
|
|
{
|
|
if (d->m_esriGrid)
|
|
return d->m_esriGrid->isVisible();
|
|
else
|
|
DEBUG_LOG(m_logger) << LOGFUNCTION << " no object";
|
|
return false;
|
|
}
|
|
|
|
int GridImpl::levelCount()
|
|
{
|
|
if (d->m_esriGrid)
|
|
return d->m_esriGrid->levelCount();
|
|
else
|
|
ERROR_LOG(m_logger) << LOGFUNCTION << " no object";
|
|
return -1;
|
|
}
|
|
|
|
bool GridImpl::isLabelVisible()
|
|
{
|
|
if (d->m_esriGrid)
|
|
return d->m_esriGrid->isLabelsVisible();
|
|
else
|
|
ERROR_LOG(m_logger) << LOGFUNCTION << " no object";
|
|
return false;
|
|
}
|
|
|
|
void GridImpl::setLabelVisible(bool visible)
|
|
{
|
|
if (d->m_esriGrid)
|
|
{
|
|
if (d->m_esriGrid->isLabelsVisible() != visible)
|
|
{
|
|
d->m_esriGrid->setLabelsVisible(visible);
|
|
d->m_mapImpl->emitVisualComponentChanged(VisualComponent::Grid);
|
|
}
|
|
}
|
|
else
|
|
ERROR_LOG(m_logger) << LOGFUNCTION << " no object";
|
|
}
|
|
|
|
|
|
} // namespace SituationMap
|