mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 19:10:06 +00:00
Added location marker icon support to marker_types and marker_manager
This commit is contained in:
parent
7ed89fdd5d
commit
6da34fc151
3 changed files with 67 additions and 14 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
#include <scwx/qt/manager/marker_manager.hpp>
|
#include <scwx/qt/manager/marker_manager.hpp>
|
||||||
#include <scwx/qt/types/marker_types.hpp>
|
#include <scwx/qt/types/marker_types.hpp>
|
||||||
|
#include <scwx/qt/util/color.hpp>
|
||||||
#include <scwx/qt/util/json.hpp>
|
#include <scwx/qt/util/json.hpp>
|
||||||
#include <scwx/qt/main/application.hpp>
|
#include <scwx/qt/main/application.hpp>
|
||||||
#include <scwx/util/logger.hpp>
|
#include <scwx/util/logger.hpp>
|
||||||
|
|
@ -27,6 +28,12 @@ static const auto logger_ = scwx::util::Logger::Create(logPrefix_);
|
||||||
static const std::string kNameName_ = "name";
|
static const std::string kNameName_ = "name";
|
||||||
static const std::string kLatitudeName_ = "latitude";
|
static const std::string kLatitudeName_ = "latitude";
|
||||||
static const std::string kLongitudeName_ = "longitude";
|
static const std::string kLongitudeName_ = "longitude";
|
||||||
|
static const std::string kIconName_ = "icon";
|
||||||
|
static const std::string kIconColorName_ = "icon-color";
|
||||||
|
|
||||||
|
static const std::string defaultIconName = types::getMarkerIcons()[0].name;
|
||||||
|
static const boost::gil::rgba8_pixel_t defaultIconColor =
|
||||||
|
util::color::ToRgba8PixelT("#ffff0000");
|
||||||
|
|
||||||
class MarkerManager::Impl
|
class MarkerManager::Impl
|
||||||
{
|
{
|
||||||
|
|
@ -59,10 +66,7 @@ public:
|
||||||
class MarkerManager::Impl::MarkerRecord
|
class MarkerManager::Impl::MarkerRecord
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MarkerRecord(const std::string& name, double latitude, double longitude) :
|
|
||||||
markerInfo_ {types::MarkerInfo(name, latitude, longitude)}
|
|
||||||
{
|
|
||||||
}
|
|
||||||
MarkerRecord(const types::MarkerInfo& info) :
|
MarkerRecord(const types::MarkerInfo& info) :
|
||||||
markerInfo_ {info}
|
markerInfo_ {info}
|
||||||
{
|
{
|
||||||
|
|
@ -81,16 +85,47 @@ public:
|
||||||
{
|
{
|
||||||
jv = {{kNameName_, record->markerInfo_.name},
|
jv = {{kNameName_, record->markerInfo_.name},
|
||||||
{kLatitudeName_, record->markerInfo_.latitude},
|
{kLatitudeName_, record->markerInfo_.latitude},
|
||||||
{kLongitudeName_, record->markerInfo_.longitude}};
|
{kLongitudeName_, record->markerInfo_.longitude},
|
||||||
|
{kIconName_, record->markerInfo_.iconName},
|
||||||
|
{kIconColorName_, util::color::ToArgbString(record->markerInfo_.iconColor)}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
friend MarkerRecord tag_invoke(boost::json::value_to_tag<MarkerRecord>,
|
friend MarkerRecord tag_invoke(boost::json::value_to_tag<MarkerRecord>,
|
||||||
const boost::json::value& jv)
|
const boost::json::value& jv)
|
||||||
{
|
{
|
||||||
return MarkerRecord(
|
|
||||||
|
const boost::json::object& jo = jv.as_object();
|
||||||
|
|
||||||
|
std::string iconName = defaultIconName;
|
||||||
|
boost::gil::rgba8_pixel_t iconColor = defaultIconColor;
|
||||||
|
|
||||||
|
if (jo.contains(kIconName_) && jo.at(kIconName_).is_string())
|
||||||
|
{
|
||||||
|
iconName = boost::json::value_to<std::string>(jv.at(kIconName_));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jo.contains(kIconColorName_) && jo.at(kIconName_).is_string())
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
iconColor = util::color::ToRgba8PixelT(
|
||||||
|
boost::json::value_to<std::string>(jv.at(kIconColorName_)));
|
||||||
|
}
|
||||||
|
catch (const std::exception& ex)
|
||||||
|
{
|
||||||
|
logger_->warn(
|
||||||
|
"Could not parse color value in location-markers.json with the "
|
||||||
|
"following exception: {}",
|
||||||
|
ex.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return MarkerRecord(types::MarkerInfo(
|
||||||
boost::json::value_to<std::string>(jv.at(kNameName_)),
|
boost::json::value_to<std::string>(jv.at(kNameName_)),
|
||||||
boost::json::value_to<double>(jv.at(kLatitudeName_)),
|
boost::json::value_to<double>(jv.at(kLatitudeName_)),
|
||||||
boost::json::value_to<double>(jv.at(kLongitudeName_)));
|
boost::json::value_to<double>(jv.at(kLongitudeName_)),
|
||||||
|
iconName,
|
||||||
|
iconColor));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
|
#include <boost/gil.hpp>
|
||||||
#include <QIcon>
|
#include <QIcon>
|
||||||
|
|
||||||
namespace scwx
|
namespace scwx
|
||||||
|
|
@ -17,15 +18,25 @@ typedef std::uint64_t MarkerId;
|
||||||
|
|
||||||
struct MarkerInfo
|
struct MarkerInfo
|
||||||
{
|
{
|
||||||
MarkerInfo(const std::string& name, double latitude, double longitude) :
|
MarkerInfo(const std::string& name,
|
||||||
name {name}, latitude {latitude}, longitude {longitude}
|
double latitude,
|
||||||
|
double longitude,
|
||||||
|
const std::string iconName,
|
||||||
|
boost::gil::rgba8_pixel_t iconColor) :
|
||||||
|
name {name},
|
||||||
|
latitude {latitude},
|
||||||
|
longitude {longitude},
|
||||||
|
iconName {iconName},
|
||||||
|
iconColor {iconColor}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
MarkerId id;
|
MarkerId id;
|
||||||
std::string name;
|
std::string name;
|
||||||
double latitude;
|
double latitude;
|
||||||
double longitude;
|
double longitude;
|
||||||
|
std::string iconName;
|
||||||
|
boost::gil::rgba8_pixel_t iconColor;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MarkerIconInfo {
|
struct MarkerIconInfo {
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,8 @@
|
||||||
#include <scwx/qt/ui/open_url_dialog.hpp>
|
#include <scwx/qt/ui/open_url_dialog.hpp>
|
||||||
#include <scwx/util/logger.hpp>
|
#include <scwx/util/logger.hpp>
|
||||||
|
|
||||||
|
#include <scwx/qt/util/color.hpp>
|
||||||
|
|
||||||
#include <QSortFilterProxyModel>
|
#include <QSortFilterProxyModel>
|
||||||
|
|
||||||
namespace scwx
|
namespace scwx
|
||||||
|
|
@ -63,7 +65,12 @@ void MarkerSettingsWidgetImpl::ConnectSignals()
|
||||||
self_,
|
self_,
|
||||||
[this]()
|
[this]()
|
||||||
{
|
{
|
||||||
markerManager_->add_marker(types::MarkerInfo("", 0, 0));
|
markerManager_->add_marker(types::MarkerInfo(
|
||||||
|
"",
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
types::getMarkerIcons()[0].name,
|
||||||
|
util::color::ToRgba8PixelT("#ffff0000")));
|
||||||
});
|
});
|
||||||
QObject::connect(
|
QObject::connect(
|
||||||
self_->ui->removeButton,
|
self_->ui->removeButton,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue