mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 23:00:04 +00:00
Radar site buttons, styling and hover
This commit is contained in:
parent
798dc479f0
commit
de2e1fea3f
3 changed files with 46 additions and 9 deletions
|
|
@ -165,6 +165,8 @@ public:
|
|||
std::shared_ptr<QMapLibreGL::Map> map_;
|
||||
std::list<std::string> layerList_;
|
||||
|
||||
std::vector<std::shared_ptr<GenericLayer>> genericLayers_ {};
|
||||
|
||||
QStringList styleLayers_;
|
||||
types::LayerVector customLayers_;
|
||||
|
||||
|
|
@ -802,6 +804,7 @@ void MapWidgetImpl::AddLayers()
|
|||
map_->removeLayer(id.c_str());
|
||||
}
|
||||
layerList_.clear();
|
||||
genericLayers_.clear();
|
||||
placefileLayers_.clear();
|
||||
|
||||
// Update custom layer list from model
|
||||
|
|
@ -961,6 +964,7 @@ void MapWidgetImpl::AddLayer(const std::string& id,
|
|||
map_->addCustomLayer(id.c_str(), std::move(pHost), before.c_str());
|
||||
|
||||
layerList_.push_back(id);
|
||||
genericLayers_.push_back(layer);
|
||||
}
|
||||
catch (const std::exception&)
|
||||
{
|
||||
|
|
@ -1206,10 +1210,8 @@ void MapWidgetImpl::RunMousePicking()
|
|||
util::maplibre::LatLongToScreenCoordinate(coordinate);
|
||||
|
||||
// For each layer in reverse
|
||||
// TODO: All Generic Layers, not just Placefile Layers
|
||||
bool itemPicked = false;
|
||||
for (auto it = placefileLayers_.rbegin(); it != placefileLayers_.rend();
|
||||
++it)
|
||||
for (auto it = genericLayers_.rbegin(); it != genericLayers_.rend(); ++it)
|
||||
{
|
||||
// Run mouse picking for each layer
|
||||
if ((*it)->RunMousePicking(
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#include <scwx/qt/map/radar_site_layer.hpp>
|
||||
#include <scwx/qt/config/radar_site.hpp>
|
||||
#include <scwx/qt/util/maplibre.hpp>
|
||||
#include <scwx/qt/util/tooltip.hpp>
|
||||
#include <scwx/common/geographic.hpp>
|
||||
#include <scwx/util/logger.hpp>
|
||||
|
||||
|
|
@ -21,12 +22,17 @@ static const auto logger_ = scwx::util::Logger::Create(logPrefix_);
|
|||
class RadarSiteLayer::Impl
|
||||
{
|
||||
public:
|
||||
explicit Impl(std::shared_ptr<MapContext> context) {}
|
||||
explicit Impl(RadarSiteLayer* self, std::shared_ptr<MapContext> context) :
|
||||
self_ {self}
|
||||
{
|
||||
}
|
||||
~Impl() = default;
|
||||
|
||||
void RenderRadarSite(const QMapLibreGL::CustomLayerRenderParameters& params,
|
||||
std::shared_ptr<config::RadarSite>& radarSite);
|
||||
|
||||
RadarSiteLayer* self_;
|
||||
|
||||
std::vector<std::shared_ptr<config::RadarSite>> radarSites_ {};
|
||||
|
||||
glm::vec2 mapScreenCoordLocation_ {};
|
||||
|
|
@ -35,10 +41,12 @@ public:
|
|||
float mapBearingSin_ {0.0f};
|
||||
float halfWidth_ {};
|
||||
float halfHeight_ {};
|
||||
|
||||
std::string hoverText_ {};
|
||||
};
|
||||
|
||||
RadarSiteLayer::RadarSiteLayer(std::shared_ptr<MapContext> context) :
|
||||
DrawLayer(context), p(std::make_unique<Impl>(context))
|
||||
DrawLayer(context), p(std::make_unique<Impl>(this, context))
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -68,11 +76,18 @@ void RadarSiteLayer::Render(
|
|||
p->halfWidth_ = params.width * 0.5f;
|
||||
p->halfHeight_ = params.height * 0.5f;
|
||||
|
||||
p->hoverText_.clear();
|
||||
|
||||
// Radar site ImGui windows shouldn't have padding
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2 {0.0f, 0.0f});
|
||||
|
||||
for (auto& radarSite : p->radarSites_)
|
||||
{
|
||||
p->RenderRadarSite(params, radarSite);
|
||||
}
|
||||
|
||||
ImGui::PopStyleVar();
|
||||
|
||||
SCWX_GL_CHECK_ERROR();
|
||||
}
|
||||
|
||||
|
|
@ -112,12 +127,21 @@ void RadarSiteLayer::Impl::RenderRadarSite(
|
|||
ImGuiWindowFlags_AlwaysAutoResize))
|
||||
{
|
||||
// Render text
|
||||
ImGui::TextUnformatted(radarSite->id().c_str());
|
||||
if (ImGui::Button(radarSite->id().c_str()))
|
||||
{
|
||||
Q_EMIT self_->RadarSiteSelected(radarSite->id());
|
||||
}
|
||||
|
||||
// Store hover text for mouse picking pass
|
||||
if (ImGui::IsItemHovered())
|
||||
{
|
||||
// TODO
|
||||
hoverText_ =
|
||||
fmt::format("{} ({})\n{}\n{}, {}",
|
||||
radarSite->id(),
|
||||
radarSite->type_name(),
|
||||
radarSite->location_name(),
|
||||
common::GetLatitudeString(radarSite->latitude()),
|
||||
common::GetLongitudeString(radarSite->longitude()));
|
||||
}
|
||||
|
||||
// End window
|
||||
|
|
@ -135,10 +159,15 @@ void RadarSiteLayer::Deinitialize()
|
|||
bool RadarSiteLayer::RunMousePicking(
|
||||
const QMapLibreGL::CustomLayerRenderParameters& /* params */,
|
||||
const QPointF& /* mouseLocalPos */,
|
||||
const QPointF& /* mouseGlobalPos */,
|
||||
const QPointF& mouseGlobalPos,
|
||||
const glm::vec2& /* mouseCoords */)
|
||||
{
|
||||
// TODO
|
||||
if (!p->hoverText_.empty())
|
||||
{
|
||||
util::tooltip::Show(p->hoverText_, mouseGlobalPos);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,9 @@ namespace map
|
|||
|
||||
class RadarSiteLayer : public DrawLayer
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_DISABLE_COPY_MOVE(RadarSiteLayer)
|
||||
|
||||
public:
|
||||
explicit RadarSiteLayer(std::shared_ptr<MapContext> context);
|
||||
~RadarSiteLayer();
|
||||
|
|
@ -24,6 +27,9 @@ public:
|
|||
const QPointF& mouseGlobalPos,
|
||||
const glm::vec2& mouseCoords) override final;
|
||||
|
||||
signals:
|
||||
void RadarSiteSelected(const std::string& id);
|
||||
|
||||
private:
|
||||
class Impl;
|
||||
std::unique_ptr<Impl> p;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue