diff --git a/scwx-qt/scwx-qt.cmake b/scwx-qt/scwx-qt.cmake index 6ee67f88..09b1a8a3 100644 --- a/scwx-qt/scwx-qt.cmake +++ b/scwx-qt/scwx-qt.cmake @@ -176,6 +176,7 @@ set(SRC_SETTINGS source/scwx/qt/settings/audio_settings.cpp source/scwx/qt/settings/text_settings.cpp source/scwx/qt/settings/ui_settings.cpp) set(HDR_TYPES source/scwx/qt/types/alert_types.hpp + source/scwx/qt/types/event_types.hpp source/scwx/qt/types/font_types.hpp source/scwx/qt/types/github_types.hpp source/scwx/qt/types/icon_types.hpp diff --git a/scwx-qt/source/scwx/qt/gl/draw/draw_item.cpp b/scwx-qt/source/scwx/qt/gl/draw/draw_item.cpp index a86d3362..861007c6 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/draw_item.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/draw_item.cpp @@ -58,7 +58,8 @@ bool DrawItem::RunMousePicking( const QPointF& /* mouseLocalPos */, const QPointF& /* mouseGlobalPos */, const glm::vec2& /* mouseCoords */, - const common::Coordinate& /* mouseGeoCoords */) + const common::Coordinate& /* mouseGeoCoords */, + std::shared_ptr& /* eventHandler */) { // By default, the draw item is not picked return false; diff --git a/scwx-qt/source/scwx/qt/gl/draw/draw_item.hpp b/scwx-qt/source/scwx/qt/gl/draw/draw_item.hpp index 33bb0ff5..809c5b1a 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/draw_item.hpp +++ b/scwx-qt/source/scwx/qt/gl/draw/draw_item.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -43,15 +44,17 @@ public: * @param [in] mouseGlobalPos Mouse cursor screen position * @param [in] mouseCoords Mouse cursor location in map screen coordinates * @param [in] mouseGeoCoords Mouse cursor location in geographic coordinates + * @param [out] eventHandler Event handler associated with picked draw item * * @return true if the draw item was picked, otherwise false */ virtual bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords, - const common::Coordinate& mouseGeoCoords); + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords, + std::shared_ptr& eventHandler); protected: void diff --git a/scwx-qt/source/scwx/qt/gl/draw/geo_icons.cpp b/scwx-qt/source/scwx/qt/gl/draw/geo_icons.cpp index 1304ac22..1f38d9c8 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/geo_icons.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/geo_icons.cpp @@ -736,7 +736,8 @@ bool GeoIcons::RunMousePicking( const QPointF& /* mouseLocalPos */, const QPointF& mouseGlobalPos, const glm::vec2& mouseCoords, - const common::Coordinate& /* mouseGeoCoords */) + const common::Coordinate& /* mouseGeoCoords */, + std::shared_ptr& /* eventHandler */) { std::unique_lock lock {p->iconMutex_}; diff --git a/scwx-qt/source/scwx/qt/gl/draw/geo_icons.hpp b/scwx-qt/source/scwx/qt/gl/draw/geo_icons.hpp index 4b69c8b4..f61443e1 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/geo_icons.hpp +++ b/scwx-qt/source/scwx/qt/gl/draw/geo_icons.hpp @@ -37,11 +37,13 @@ public: bool textureAtlasChanged) override; void Deinitialize() override; - bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords, - const common::Coordinate& mouseGeoCoords) override; + bool + RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords, + std::shared_ptr& eventHandler) override; /** * Sets the visibility of the geo icons. diff --git a/scwx-qt/source/scwx/qt/gl/draw/icons.cpp b/scwx-qt/source/scwx/qt/gl/draw/icons.cpp index fbf60697..ec32bde0 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/icons.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/icons.cpp @@ -32,7 +32,7 @@ static constexpr std::size_t kIconBufferLength = static constexpr std::size_t kTextureBufferLength = kNumTriangles * kVerticesPerTriangle * kPointsPerTexCoord; -struct IconDrawItem +struct IconDrawItem : types::EventHandler { boost::gil::rgba32f_pixel_t modulate_ {1.0f, 1.0f, 1.0f, 1.0f}; double x_ {}; @@ -424,7 +424,7 @@ void Icons::Impl::UpdateBuffers() x, y, lx, ty, mc0, mc1, mc2, mc3, a // TL }); - if (!di->hoverText_.empty()) + if (!di->hoverText_.empty() || di->event_ != nullptr) { const units::angle::radians radians = angle; @@ -579,7 +579,8 @@ bool Icons::RunMousePicking( const QPointF& mouseLocalPos, const QPointF& mouseGlobalPos, const glm::vec2& /* mouseCoords */, - const common::Coordinate& /* mouseGeoCoords */) + const common::Coordinate& /* mouseGeoCoords */, + std::shared_ptr& eventHandler) { std::unique_lock lock {p->iconMutex_}; @@ -617,12 +618,29 @@ bool Icons::RunMousePicking( if (it != p->currentHoverIcons_.crend()) { itemPicked = true; - util::tooltip::Show(it->di_->hoverText_, mouseGlobalPos); + + if (!it->di_->hoverText_.empty()) + { + // Show tooltip + util::tooltip::Show(it->di_->hoverText_, mouseGlobalPos); + } + if (it->di_->event_ != nullptr) + { + // Register event handler + eventHandler = it->di_; + } } return itemPicked; } +void Icons::RegisterEventHandler( + const std::shared_ptr& di, + const std::function& eventHandler) +{ + di->event_ = eventHandler; +} + } // namespace draw } // namespace gl } // namespace qt diff --git a/scwx-qt/source/scwx/qt/gl/draw/icons.hpp b/scwx-qt/source/scwx/qt/gl/draw/icons.hpp index 5ce4c13b..081e22f1 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/icons.hpp +++ b/scwx-qt/source/scwx/qt/gl/draw/icons.hpp @@ -6,6 +6,8 @@ #include #include +class QEvent; + namespace scwx { namespace qt @@ -34,11 +36,13 @@ public: bool textureAtlasChanged) override; void Deinitialize() override; - bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords, - const common::Coordinate& mouseGeoCoords) override; + bool + RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords, + std::shared_ptr& eventHandler) override; /** * Sets the visibility of the icons. @@ -151,6 +155,16 @@ public: */ void FinishIcons(); + /** + * Registers an event handler for an icon. + * + * @param [in] di Icon draw item + * @param [in] eventHandler Event handler function + */ + static void + RegisterEventHandler(const std::shared_ptr& di, + const std::function& eventHandler); + private: class Impl; diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.cpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.cpp index f5550c26..1daddd9f 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.cpp @@ -689,7 +689,8 @@ bool PlacefileIcons::RunMousePicking( const QPointF& /* mouseLocalPos */, const QPointF& mouseGlobalPos, const glm::vec2& mouseCoords, - const common::Coordinate& /* mouseGeoCoords */) + const common::Coordinate& /* mouseGeoCoords */, + std::shared_ptr& /* eventHandler */) { std::unique_lock lock {p->iconMutex_}; diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.hpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.hpp index 2e15c26d..f34f5ffe 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.hpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.hpp @@ -35,11 +35,13 @@ public: bool textureAtlasChanged) override; void Deinitialize() override; - bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords, - const common::Coordinate& mouseGeoCoords) override; + bool + RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords, + std::shared_ptr& eventHandler) override; /** * Resets and prepares the draw item for adding a new set of icons. diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp index d1d74299..f8815a22 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp @@ -500,7 +500,8 @@ bool PlacefileLines::RunMousePicking( const QPointF& /* mouseLocalPos */, const QPointF& mouseGlobalPos, const glm::vec2& mouseCoords, - const common::Coordinate& /* mouseGeoCoords */) + const common::Coordinate& /* mouseGeoCoords */, + std::shared_ptr& /* eventHandler */) { std::unique_lock lock {p->lineMutex_}; diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.hpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.hpp index 09589369..65ec03f0 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.hpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.hpp @@ -32,11 +32,13 @@ public: void Render(const QMapLibreGL::CustomLayerRenderParameters& params) override; void Deinitialize() override; - bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords, - const common::Coordinate& mouseGeoCoords) override; + bool + RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords, + std::shared_ptr& eventHandler) override; /** * Resets and prepares the draw item for adding a new set of lines. diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_text.cpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_text.cpp index f9de167a..e996bdfc 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_text.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_text.cpp @@ -242,7 +242,8 @@ bool PlacefileText::RunMousePicking( const QPointF& /* mouseLocalPos */, const QPointF& mouseGlobalPos, const glm::vec2& /* mouseCoords */, - const common::Coordinate& /* mouseGeoCoords */) + const common::Coordinate& /* mouseGeoCoords */, + std::shared_ptr& /* eventHandler */) { bool itemPicked = false; diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_text.hpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_text.hpp index 76cf9bbf..ee0ac0c8 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_text.hpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_text.hpp @@ -37,11 +37,13 @@ public: void Render(const QMapLibreGL::CustomLayerRenderParameters& params) override; void Deinitialize() override; - bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords, - const common::Coordinate& mouseGeoCoords) override; + bool + RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords, + std::shared_ptr& eventHandler) override; /** * Resets and prepares the draw item for adding a new set of text. diff --git a/scwx-qt/source/scwx/qt/map/draw_layer.cpp b/scwx-qt/source/scwx/qt/map/draw_layer.cpp index ef52f58d..5b0dd7ca 100644 --- a/scwx-qt/source/scwx/qt/map/draw_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/draw_layer.cpp @@ -81,7 +81,8 @@ bool DrawLayer::RunMousePicking( const QPointF& mouseLocalPos, const QPointF& mouseGlobalPos, const glm::vec2& mouseCoords, - const common::Coordinate& mouseGeoCoords) + const common::Coordinate& mouseGeoCoords, + std::shared_ptr& eventHandler) { bool itemPicked = false; @@ -93,7 +94,8 @@ bool DrawLayer::RunMousePicking( mouseLocalPos, mouseGlobalPos, mouseCoords, - mouseGeoCoords)) + mouseGeoCoords, + eventHandler)) { // If a draw item was picked, don't process additional items itemPicked = true; diff --git a/scwx-qt/source/scwx/qt/map/draw_layer.hpp b/scwx-qt/source/scwx/qt/map/draw_layer.hpp index 9fe6e719..adf71457 100644 --- a/scwx-qt/source/scwx/qt/map/draw_layer.hpp +++ b/scwx-qt/source/scwx/qt/map/draw_layer.hpp @@ -25,10 +25,11 @@ public: virtual bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords, - const common::Coordinate& mouseGeoCoords) override; + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords, + std::shared_ptr& eventHandler) override; protected: void AddDrawItem(const std::shared_ptr& drawItem); diff --git a/scwx-qt/source/scwx/qt/map/generic_layer.cpp b/scwx-qt/source/scwx/qt/map/generic_layer.cpp index 2c6a4e24..d93345ae 100644 --- a/scwx-qt/source/scwx/qt/map/generic_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/generic_layer.cpp @@ -31,7 +31,8 @@ bool GenericLayer::RunMousePicking( const QPointF& /* mouseLocalPos */, const QPointF& /* mouseGlobalPos */, const glm::vec2& /* mousePos */, - const common::Coordinate& /* mouseGeoCoords */) + const common::Coordinate& /* mouseGeoCoords */, + std::shared_ptr& /* eventHandler */) { // By default, the layer has nothing to pick return false; diff --git a/scwx-qt/source/scwx/qt/map/generic_layer.hpp b/scwx-qt/source/scwx/qt/map/generic_layer.hpp index 545873ea..0ebc4869 100644 --- a/scwx-qt/source/scwx/qt/map/generic_layer.hpp +++ b/scwx-qt/source/scwx/qt/map/generic_layer.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -38,15 +39,17 @@ public: * @param [in] mouseGlobalPos Mouse cursor screen position * @param [in] mouseCoords Mouse cursor location in map screen coordinates * @param [in] mouseGeoCoords Mouse cursor location in geographic coordinates + * @param [out] eventHandler Event handler associated with picked draw item * * @return true if a draw item was picked, otherwise false */ virtual bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords, - const common::Coordinate& mouseGeoCoords); + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords, + std::shared_ptr& eventHandler); signals: void NeedsRendering(); diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index 9cdd94ea..5f16ebf3 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -98,7 +98,6 @@ public: // Initialize ImGui Qt backend ImGui_ImplQt_Init(); - ImGui_ImplQt_RegisterWidget(widget_); // Set Map Provider Details mapProvider_ = GetMapProvider(generalSettings.map_provider().GetValue()); @@ -204,6 +203,8 @@ public: const MapStyle* currentStyle_; std::string initialStyleName_ {}; + std::shared_ptr pickedEventHandler_ {nullptr}; + uint64_t frameDraws_; double prevLatitude_; @@ -979,6 +980,17 @@ void MapWidgetImpl::AddLayer(const std::string& id, } } +bool MapWidget::event(QEvent* e) +{ + if (p->pickedEventHandler_ != nullptr && + p->pickedEventHandler_->event_ != nullptr) + { + p->pickedEventHandler_->event_(e); + } + + return QOpenGLWidget::event(e); +} + void MapWidget::enterEvent(QEnterEvent* /* ev */) { p->hasMouse_ = true; @@ -1083,6 +1095,7 @@ void MapWidget::initializeGL() // Initialize ImGui OpenGL3 backend ImGui::SetCurrentContext(p->imGuiContext_); + ImGui_ImplQt_RegisterWidget(this); ImGui_ImplOpenGL3_Init(); p->imGuiFontsBuildCount_ = manager::FontManager::Instance().imgui_fonts_build_count(); @@ -1209,7 +1222,8 @@ void MapWidgetImpl::RunMousePicking() util::maplibre::LatLongToScreenCoordinate(coordinate); // For each layer in reverse - bool itemPicked = false; + bool itemPicked = false; + std::shared_ptr eventHandler = nullptr; for (auto it = genericLayers_.rbegin(); it != genericLayers_.rend(); ++it) { // Run mouse picking for each layer @@ -1217,7 +1231,8 @@ void MapWidgetImpl::RunMousePicking() lastPos_, lastGlobalPos_, mouseScreenCoordinate, - {coordinate.first, coordinate.second})) + {coordinate.first, coordinate.second}, + eventHandler)) { // If a draw item was picked, don't process additional layers itemPicked = true; @@ -1229,6 +1244,43 @@ void MapWidgetImpl::RunMousePicking() if (!itemPicked) { util::tooltip::Hide(); + + if (pickedEventHandler_ != nullptr) + { + // Send leave event to picked event handler + if (pickedEventHandler_->event_ != nullptr) + { + QEvent event(QEvent::Type::Leave); + pickedEventHandler_->event_(&event); + } + + // Reset picked event handler + pickedEventHandler_ = nullptr; + } + } + else if (eventHandler != nullptr) + { + // If the event handler changed + if (pickedEventHandler_ != eventHandler) + { + // Send leave event to old event handler + if (pickedEventHandler_ != nullptr && + pickedEventHandler_->event_ != nullptr) + { + QEvent event(QEvent::Type::Leave); + pickedEventHandler_->event_(&event); + } + + // Send enter event to new event handler + if (eventHandler->event_ != nullptr) + { + QEvent event(QEvent::Type::Enter); + eventHandler->event_(&event); + } + + // Store picked event handler + pickedEventHandler_ = eventHandler; + } } Q_EMIT widget_->MouseCoordinateChanged( diff --git a/scwx-qt/source/scwx/qt/map/map_widget.hpp b/scwx-qt/source/scwx/qt/map/map_widget.hpp index bb9f4e42..007fd2f4 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.hpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.hpp @@ -122,6 +122,7 @@ private: qreal pixelRatio(); // QWidget implementation. + bool event(QEvent* e) override; void enterEvent(QEnterEvent* ev) override final; void keyPressEvent(QKeyEvent* ev) override final; void leaveEvent(QEvent* ev) override final; diff --git a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp index 40c323ba..df6208f3 100644 --- a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp @@ -274,14 +274,25 @@ void OverlayLayer::Deinitialize() } bool OverlayLayer::RunMousePicking( - const QMapLibreGL::CustomLayerRenderParameters& /* params */, - const QPointF& /* mouseLocalPos */, - const QPointF& /* mouseGlobalPos */, - const glm::vec2& /* mouseCoords */, - const common::Coordinate& /* mouseGeoCoords */) + const QMapLibreGL::CustomLayerRenderParameters& params, + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords, + std::shared_ptr& eventHandler) { // If sweep time was picked, don't process additional items - return p->sweepTimePicked_; + if (p->sweepTimePicked_) + { + return true; + } + + return DrawLayer::RunMousePicking(params, + mouseLocalPos, + mouseGlobalPos, + mouseCoords, + mouseGeoCoords, + eventHandler); } void OverlayLayer::UpdateSweepTimeNextFrame() diff --git a/scwx-qt/source/scwx/qt/map/overlay_layer.hpp b/scwx-qt/source/scwx/qt/map/overlay_layer.hpp index 6e5e4c35..a1ddae6f 100644 --- a/scwx-qt/source/scwx/qt/map/overlay_layer.hpp +++ b/scwx-qt/source/scwx/qt/map/overlay_layer.hpp @@ -21,12 +21,13 @@ public: void Render(const QMapLibreGL::CustomLayerRenderParameters&) override final; void Deinitialize() override final; - bool - RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords, - const common::Coordinate& mouseGeoCoords) override final; + bool RunMousePicking( + const QMapLibreGL::CustomLayerRenderParameters& params, + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords, + std::shared_ptr& eventHandler) override final; public slots: void UpdateSweepTimeNextFrame(); diff --git a/scwx-qt/source/scwx/qt/map/radar_product_layer.cpp b/scwx-qt/source/scwx/qt/map/radar_product_layer.cpp index e4737876..0bae51bf 100644 --- a/scwx-qt/source/scwx/qt/map/radar_product_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/radar_product_layer.cpp @@ -332,7 +332,8 @@ bool RadarProductLayer::RunMousePicking( const QPointF& /* mouseLocalPos */, const QPointF& mouseGlobalPos, const glm::vec2& /* mouseCoords */, - const common::Coordinate& mouseGeoCoords) + const common::Coordinate& mouseGeoCoords, + std::shared_ptr& /* eventHandler */) { bool itemPicked = false; diff --git a/scwx-qt/source/scwx/qt/map/radar_product_layer.hpp b/scwx-qt/source/scwx/qt/map/radar_product_layer.hpp index f39afac9..a081d842 100644 --- a/scwx-qt/source/scwx/qt/map/radar_product_layer.hpp +++ b/scwx-qt/source/scwx/qt/map/radar_product_layer.hpp @@ -23,10 +23,11 @@ public: virtual bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords, - const common::Coordinate& mouseGeoCoords) override; + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords, + std::shared_ptr& eventHandler) override; private: void UpdateColorTable(); diff --git a/scwx-qt/source/scwx/qt/map/radar_site_layer.cpp b/scwx-qt/source/scwx/qt/map/radar_site_layer.cpp index 9d4d6906..06d5168f 100644 --- a/scwx-qt/source/scwx/qt/map/radar_site_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/radar_site_layer.cpp @@ -158,7 +158,8 @@ bool RadarSiteLayer::RunMousePicking( const QPointF& /* mouseLocalPos */, const QPointF& mouseGlobalPos, const glm::vec2& /* mouseCoords */, - const common::Coordinate& /* mouseGeoCoords */) + const common::Coordinate& /* mouseGeoCoords */, + std::shared_ptr& /* eventHandler */) { if (!p->hoverText_.empty()) { diff --git a/scwx-qt/source/scwx/qt/map/radar_site_layer.hpp b/scwx-qt/source/scwx/qt/map/radar_site_layer.hpp index 6335e153..6cd75f42 100644 --- a/scwx-qt/source/scwx/qt/map/radar_site_layer.hpp +++ b/scwx-qt/source/scwx/qt/map/radar_site_layer.hpp @@ -22,12 +22,13 @@ public: void Render(const QMapLibreGL::CustomLayerRenderParameters&) override final; void Deinitialize() override final; - bool - RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords, - const common::Coordinate& mouseGeoCoords) override final; + bool RunMousePicking( + const QMapLibreGL::CustomLayerRenderParameters& params, + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords, + std::shared_ptr& eventHandler) override final; signals: void RadarSiteSelected(const std::string& id); diff --git a/scwx-qt/source/scwx/qt/types/event_types.hpp b/scwx-qt/source/scwx/qt/types/event_types.hpp new file mode 100644 index 00000000..f50783f2 --- /dev/null +++ b/scwx-qt/source/scwx/qt/types/event_types.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include + +class QEvent; + +namespace scwx +{ +namespace qt +{ +namespace types +{ + +struct EventHandler +{ + std::function event_ {}; +}; + +} // namespace types +} // namespace qt +} // namespace scwx