MeshLib C++ Docs
Loading...
Searching...
No Matches
MRDrawViewportWidgetsItem.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRCommonPlugins/exports.h"
6#include "MRMesh/MRSignal.h"
7
8#include <boost/signals2/connection.hpp>
9
10namespace MR
11{
12
13// Inherit your plugin from this to draw viewport widgets from there.
15{
16public:
17 MRCOMMONPLUGINS_API ProvidesViewportWidget();
20 virtual ~ProvidesViewportWidget() = default; // Don't strictly need this, but MSVC warns otherwise.
21
22
24 {
25 virtual ~ViewportWidgetInterface() = default; // Don't strictly need this, but MSVC warns otherwise.
26
27 // Which viewport we're dealing with.
28 [[nodiscard]] virtual ViewportId viewportId() const = 0;
29
30 // Register a new button. They will be sorted by `order` (then by name) ascending, left-to-right.
31 // The `onClick` callback will be called late, make sure it doens't dangle the captures.
32 // `active` only affects how the button is rendered.
33 virtual void addButton( float order, std::string name, bool active, std::string icon, std::string tooltip, std::function<void()> onClick ) = 0;
34 };
35
37
38private:
39 boost::signals2::scoped_connection providedWidgetsConnection_;
40};
41
42// This sits in the background and renders various per-viewport buttons.
44{
45public:
46 MRCOMMONPLUGINS_API DrawViewportWidgetsItem();
47
48 bool action() override { return false; }
49
50private:
51 void handleViewport( Viewport& viewport );
52
53 boost::signals2::scoped_connection preDrawConnection_;
54
55 using HandleViewportSignal = boost::signals2::signal<void( ProvidesViewportWidget::ViewportWidgetInterface& in )>;
56 static HandleViewportSignal& getHandleViewportSignal_();
57
58 friend ProvidesViewportWidget; // To let it access `handleViewportSignal_`.
59};
60
61}
Definition MRDrawViewportWidgetsItem.h:44
bool action() override
Definition MRDrawViewportWidgetsItem.h:48
MRCOMMONPLUGINS_API DrawViewportWidgetsItem()
Definition MRDrawViewportWidgetsItem.h:15
ProvidesViewportWidget(const ProvidesViewportWidget &)=delete
virtual ~ProvidesViewportWidget()=default
ProvidesViewportWidget & operator=(const ProvidesViewportWidget &)=delete
MRCOMMONPLUGINS_API ProvidesViewportWidget()
virtual void providedViewportWidgets(ViewportWidgetInterface &in)=0
Definition MRRibbonMenuItem.h:20
Definition MRViewportId.h:16
Definition MRViewport.h:46
Definition MRCameraOrientationPlugin.h:8
Definition MRDrawViewportWidgetsItem.h:24
virtual void addButton(float order, std::string name, bool active, std::string icon, std::string tooltip, std::function< void()> onClick)=0