MeshLib C++ Docs
Loading...
Searching...
No Matches
MRStatePlugin.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRViewerPlugin.h"
4#include "MRSceneStateCheck.h"
8#include "MRRibbonMenuItem.h"
9#include "ImGuiHelpers.h"
10#include <filesystem>
11
12struct ImGuiContext;
13
14namespace MR
15{
18
61{
62 Basic,
63 Mesh,
67 Voxels,
69 Test,
70 Other,
71 Count
72};
73
74class Object;
75
76class MRVIEWER_CLASS StateBasePlugin :
77 public ViewerPlugin,
78 public RibbonMenuItem,
79 public virtual IPluginUpdate,
80 public virtual ISceneSelectionChange
81{
82public:
83 MRVIEWER_API StateBasePlugin( std::string name, StatePluginTabs tab = StatePluginTabs::Other );
84 virtual ~StateBasePlugin() = default;
85
86 MRVIEWER_API virtual void drawDialog( ImGuiContext* ctx );
87
88 virtual bool action() override { return enable( !isEnabled() ); }
89
90 virtual bool isActive() const override { return isEnabled(); };
91
92 virtual bool blocking() const override { return true; }
93
94 MRVIEWER_API virtual void shutdown() override;
95
96 MRVIEWER_API bool isEnabled() const;
97 MRVIEWER_API virtual bool enable( bool on );
98
99 MRVIEWER_API virtual bool dialogIsOpen() const;
100
101 MRVIEWER_API static const char* UINameSuffix();
102
103 virtual const std::string& uiName() const override { return plugin_name; }
104
106 MRVIEWER_API void setUIName( std::string name );
107
108 MRVIEWER_API StatePluginTabs getTab() const;
109
110 MRVIEWER_API static const char* getTabName( StatePluginTabs tab );
111
112 MRVIEWER_API virtual std::string getTooltip() const;
113
115 virtual std::string sortString() const { return name(); }
116
118 MRVIEWER_API bool checkStringMask( const std::string& mask ) const;
119
120 std::string plugin_name;
121
122protected:
126
127 MRVIEWER_API virtual bool onEnable_();
128 MRVIEWER_API virtual bool onDisable_();
129
130 bool isEnabled_{false};
131 bool dialogIsOpen_{false};
132 bool dialogIsCollapsed_{ false };
133
134 StatePluginTabs tab_{StatePluginTabs::Other};
135};
136
137template<typename ...Connectables>
138class StateListenerPlugin : public StateBasePlugin, public MultiListener<Connectables...>
139{
140public:
142 virtual ~StateListenerPlugin() = default;
143
144 using PluginParent = StateListenerPlugin<Connectables...>;
145 using MultiListenerBase = MultiListener<Connectables...>;
146
147 virtual bool enable( bool on ) override final
148 {
149 if ( StateBasePlugin::enable( on ) )
150 {
151 if ( on )
153 MultiListenerBase::connect( viewer, 10, boost::signals2::at_front );
154 else
156 return true;
157 }
158 return false;
159 }
160};
161
162}
Interface for automatically update StatePlugins internal data.
Definition MRStatePluginUpdate.h:15
Interface for processing scene state change in RibbonItems.
Definition MRSceneSelectionChange.h:15
Definition MRRibbonMenuItem.h:23
Definition MRStatePlugin.h:81
Definition MRStatePlugin.h:139
Definition MRViewerPlugin.h:30
virtual MRVIEWER_API bool enable(bool on)
MRVIEWER_API void setUIName(std::string name)
set plugin name that will be used for dialog in ImGuiBeginWindow_
static MRVIEWER_API const char * getTabName(StatePluginTabs tab)
virtual bool isActive() const override
for state items returns true if activated
Definition MRStatePlugin.h:90
virtual MRVIEWER_API std::string getTooltip() const
virtual MRVIEWER_API bool onDisable_()
MRVIEWER_API StateBasePlugin(std::string name, StatePluginTabs tab=StatePluginTabs::Other)
virtual bool action() override
returns true if state of item changed
Definition MRStatePlugin.h:88
std::string plugin_name
Definition MRStatePlugin.h:120
MRVIEWER_API StatePluginTabs getTab() const
virtual const std::string & uiName() const override
Definition MRStatePlugin.h:103
static MRVIEWER_API const char * UINameSuffix()
virtual MRVIEWER_API bool onEnable_()
MRVIEWER_API bool checkStringMask(const std::string &mask) const
check if search mask satisfies for this plugin
virtual bool enable(bool on) override final
Definition MRStatePlugin.h:147
virtual ~StateListenerPlugin()=default
StatePluginTabs
Definition MRStatePlugin.h:61
virtual ~StateBasePlugin()=default
virtual MRVIEWER_API bool ImGuiBeginWindow_(ImGui::CustomStatePluginWindowParameters params)
virtual MRVIEWER_API void drawDialog(ImGuiContext *ctx)
virtual void disconnect()
Definition MRViewerEventsListener.h:45
Viewer * viewer
Pointer to the main Viewer class.
Definition MRViewerPlugin.h:49
virtual MRVIEWER_API bool dialogIsOpen() const
virtual std::string sortString() const
returns special string for sorting plugins in menu (plugin name by default)
Definition MRStatePlugin.h:115
virtual bool blocking() const override
true if this item is blocking (only one blocking item can be active at once)
Definition MRStatePlugin.h:92
MRVIEWER_API bool isEnabled() const
virtual MRVIEWER_API void shutdown() override
This function is called before shutdown.
virtual void connect(Viewer *viewer, int group=0, boost::signals2::connect_position pos=boost::signals2::connect_position::at_back)
Definition MRViewerEventsListener.h:38
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Structure that contains parameters for State plugin window with custom style.
Definition ImGuiHelpers.h:184
Definition MRViewerEventsListener.h:32