Modify usage of get_marker for updated interface, and update checks for lat/lon input

This commit is contained in:
AdenKoperczak 2024-10-06 12:23:45 -04:00
parent 0ec81e5832
commit 0cfad82933
2 changed files with 30 additions and 34 deletions

View file

@ -57,10 +57,14 @@ void MarkerLayer::Impl::ReloadMarkers()
for (size_t i = 0; i < markerManager->marker_count(); i++) for (size_t i = 0; i < markerManager->marker_count(); i++)
{ {
const types::MarkerInfo& marker = markerManager->get_marker(i); std::optional<types::MarkerInfo> marker = markerManager->get_marker(i);
if (!marker)
{
break;
}
std::shared_ptr<gl::draw::GeoIconDrawItem> icon = geoIcons_->AddIcon(); std::shared_ptr<gl::draw::GeoIconDrawItem> icon = geoIcons_->AddIcon();
geoIcons_->SetIconTexture(icon, markerIconName_, 0); geoIcons_->SetIconTexture(icon, markerIconName_, 0);
geoIcons_->SetIconLocation(icon, marker.latitude, marker.longitude); geoIcons_->SetIconLocation(icon, marker->latitude, marker->longitude);
} }
geoIcons_->FinishIcons(); geoIcons_->FinishIcons();

View file

@ -87,15 +87,17 @@ QVariant MarkerModel::data(const QModelIndex& index, int role) const
static const char COORDINATE_FORMAT = 'g'; static const char COORDINATE_FORMAT = 'g';
static const int COORDINATE_PRECISION = 6; static const int COORDINATE_PRECISION = 6;
if (!index.isValid() || index.row() < 0 || if (!index.isValid() || index.row() < 0)
static_cast<std::size_t>(index.row()) >=
p->markerManager_->marker_count())
{ {
return QVariant(); return QVariant();
} }
const types::MarkerInfo markerInfo = std::optional<types::MarkerInfo> markerInfo =
p->markerManager_->get_marker(index.row()); p->markerManager_->get_marker(index.row());
if (!markerInfo)
{
return QVariant();
}
switch(index.column()) switch(index.column())
{ {
@ -104,7 +106,7 @@ QVariant MarkerModel::data(const QModelIndex& index, int role) const
role == Qt::ItemDataRole::ToolTipRole || role == Qt::ItemDataRole::ToolTipRole ||
role == Qt::ItemDataRole::EditRole) role == Qt::ItemDataRole::EditRole)
{ {
return QString::fromStdString(markerInfo.name); return QString::fromStdString(markerInfo->name);
} }
break; break;
@ -114,7 +116,7 @@ QVariant MarkerModel::data(const QModelIndex& index, int role) const
role == Qt::ItemDataRole::EditRole) role == Qt::ItemDataRole::EditRole)
{ {
return QString::number( return QString::number(
markerInfo.latitude, COORDINATE_FORMAT, COORDINATE_PRECISION); markerInfo->latitude, COORDINATE_FORMAT, COORDINATE_PRECISION);
} }
break; break;
@ -124,7 +126,7 @@ QVariant MarkerModel::data(const QModelIndex& index, int role) const
role == Qt::ItemDataRole::EditRole) role == Qt::ItemDataRole::EditRole)
{ {
return QString::number( return QString::number(
markerInfo.longitude, COORDINATE_FORMAT, COORDINATE_PRECISION); markerInfo->longitude, COORDINATE_FORMAT, COORDINATE_PRECISION);
} }
break; break;
@ -167,14 +169,16 @@ bool MarkerModel::setData(const QModelIndex& index,
const QVariant& value, const QVariant& value,
int role) int role)
{ {
if (!index.isValid() || index.row() < 0 || if (!index.isValid() || index.row() < 0)
static_cast<std::size_t>(index.row()) >= {
p->markerManager_->marker_count()) return false;
}
std::optional<types::MarkerInfo> markerInfo =
p->markerManager_->get_marker(index.row());
if (!markerInfo)
{ {
return false; return false;
} }
types::MarkerInfo markerInfo = p->markerManager_->get_marker(index.row());
bool result = false; bool result = false;
switch(index.column()) switch(index.column())
@ -183,8 +187,8 @@ bool MarkerModel::setData(const QModelIndex& index,
if (role == Qt::ItemDataRole::EditRole) if (role == Qt::ItemDataRole::EditRole)
{ {
QString str = value.toString(); QString str = value.toString();
markerInfo.name = str.toStdString(); markerInfo->name = str.toStdString();
p->markerManager_->set_marker(index.row(), markerInfo); p->markerManager_->set_marker(index.row(), *markerInfo);
result = true; result = true;
} }
break; break;
@ -195,16 +199,10 @@ bool MarkerModel::setData(const QModelIndex& index,
QString str = value.toString(); QString str = value.toString();
bool ok; bool ok;
double latitude = str.toDouble(&ok); double latitude = str.toDouble(&ok);
if (str.isEmpty()) if (ok && str.isEmpty() && -90 <= latitude && latitude <= 90)
{ {
markerInfo.latitude = 0; markerInfo->latitude = latitude;
p->markerManager_->set_marker(index.row(), markerInfo); p->markerManager_->set_marker(index.row(), *markerInfo);
result = true;
}
else if (ok)
{
markerInfo.latitude = latitude;
p->markerManager_->set_marker(index.row(), markerInfo);
result = true; result = true;
} }
} }
@ -216,16 +214,10 @@ bool MarkerModel::setData(const QModelIndex& index,
QString str = value.toString(); QString str = value.toString();
bool ok; bool ok;
double longitude = str.toDouble(&ok); double longitude = str.toDouble(&ok);
if (str.isEmpty()) if (str.isEmpty() && ok && -180 <= longitude && longitude <= 180)
{ {
markerInfo.longitude = 0; markerInfo->longitude = longitude;
p->markerManager_->set_marker(index.row(), markerInfo); p->markerManager_->set_marker(index.row(), *markerInfo);
result = true;
}
else if (ok)
{
markerInfo.longitude = longitude;
p->markerManager_->set_marker(index.row(), markerInfo);
result = true; result = true;
} }
} }