MeshLib C++ Docs
Loading...
Searching...
No Matches
MRRibbonMenu.h
Go to the documentation of this file.
1#pragma once
2#include "ImGuiMenu.h"
3#include "MRRibbonMenuItem.h"
7#include "MRAsyncTimer.h"
8#include "MRRibbonSchema.h"
10#include "MRMesh/MRSignal.h"
12#include <type_traits>
13#include <array>
14
15namespace MR
16{
19
20
21class Object;
22
26class MRVIEWER_CLASS RibbonMenu : public ImGuiMenu
27{
28 struct CustomContextMenuCheckbox
29 {
30 using Setter = std::function<void( std::shared_ptr<Object> object, ViewportId id, bool checked )>;
31 using Getter = std::function<bool( std::shared_ptr<Object> object, ViewportId id )>;
37 };
38
39public:
40 MRVIEWER_API RibbonMenu();
41 MRVIEWER_API ~RibbonMenu();
42
44 MRVIEWER_API static std::shared_ptr<RibbonMenu> instance();
45
48 MRVIEWER_API void setCustomContextCheckbox(
49 const std::string& name,
50 CustomContextMenuCheckbox customContextMenuCheckbox );
51
52 MRVIEWER_API virtual void init( MR::Viewer* _viewer ) override;
53
54 MRVIEWER_API virtual void shutdown() override;
55
56 virtual void drawViewerWindow() override {}
57
58 MRVIEWER_API virtual void drawAdditionalWindows() override;
59
61 MRVIEWER_API void openToolbarCustomize();
62
63 MRVIEWER_API virtual void loadFonts( int font_size = 13 ) override;
64
65 MRVIEWER_API virtual std::filesystem::path getMenuFontPath() const override;
66
68 MRVIEWER_API virtual void pinTopPanel( bool on );
69 MRVIEWER_API bool isTopPannelPinned() const;
71 int getTopPanelOpenedHeight() const { return topPanelOpenedHeight_; }
72 int getTopPanelHiddenHeight() const { return topPanelHiddenHeight_; }
73 int getTopPanelCurrentHeight() const { return currentTopPanelHeight_; }
76 void setTopPanelMaxOpenedTimer( float sec ) { openedMaxSecs_ = std::max( 0.0f, sec ); }
77
79 MRVIEWER_API virtual void setQuickAccessListVersion( int version );
81 MRVIEWER_API virtual void readQuickAccessList( const Json::Value& root );
82
84 MRVIEWER_API void resetQuickAccessList();
85
87 Vector2i getSceneSize() { return Vector2i( int( sceneSize_.x ), int( sceneSize_.y ) ); };
88
90 MRVIEWER_API void setSceneSize( const Vector2i& size );
91
93 bool hasActiveBlockingItem() const { return bool( activeBlockingItem_.item ); }
95 bool hasAnyActiveItem() const { return bool( activeBlockingItem_.item ) || !activeNonBlockingItems_.empty(); }
96
98 MRVIEWER_API void updateItemStatus( const std::string& itemName );
99
101 MRVIEWER_API virtual void addRibbonItemShortcut( const std::string& itemName, const Shortcut& shortcut );
102
104 [[deprecated( "use addRibbonItemShortcut( itemName, Shortcut )" )]]
105 void addRibbonItemShortcut( const std::string& itemName, const ShortcutKey& key, ShortcutCategory category )
106 { addRibbonItemShortcut( itemName, { key, category } ); }
107
109 int getActiveTabIndex() const { return activeTabIndex_; }
110
111
113 RibbonFontManager& getFontManager() { return fontManager_; };
114
116 RibbonButtonDrawer& getRibbonButtonDrawer() { return buttonDrawer_; }
117
119 Toolbar& getToolbar() { return *toolbar_; }
120
122 RibbonNotifier& getRibbonNotifier() { return notifier_; };
123
124 void setActiveListPos( const ImVec2& pos ) { activeListPos_ = pos; }
125
127 void showActiveList() { activeListPressed_ = true; };
128
131 MRVIEWER_API virtual void pushNotification( const RibbonNotification& notification );
132
134 MRVIEWER_API static void cloneTree( const std::vector<std::shared_ptr<Object>>& selectedObjects );
136 MRVIEWER_API static void cloneSelectedPart( const std::shared_ptr<Object>& object );
137
138 using TabChangedSignal = boost::signals2::signal<void( int prevTabId, int newTabId )>;
141
143 bool getAutoCloseBlockingPlugins() const { return autoCloseBlockingPlugins_; }
145 void setAutoCloseBlockingPlugins( bool value ) { autoCloseBlockingPlugins_ = value; }
146
148 const RibbonMenuUIConfig& getMenuUIConfig() const { return menuUIConfig_; }
149 MRVIEWER_API virtual void setMenuUIConfig( const RibbonMenuUIConfig& newConfig );
150
152 bool drawGroupUngroupButton( const std::vector<std::shared_ptr<Object>>& selected );
153 bool drawSelectSubtreeButton( const std::vector<std::shared_ptr<Object>>& selected );
154 bool drawCloneButton( const std::vector<std::shared_ptr<Object>>& selected );
155 bool drawCustomCheckBox( const std::vector<std::shared_ptr<Object>>& selected, SelectedTypesMask selectedMask );
156 bool drawCloneSelectionButton( const std::vector<std::shared_ptr<Object>>& selected );
157 bool drawMergeSubtreeButton( const std::vector<std::shared_ptr<Object>>& selected );
158protected:
160 MRVIEWER_API virtual void drawBigButtonItem_( const MenuItemInfo& item );
162 MRVIEWER_API virtual void drawSmallButtonsSet_( const std::vector<std::string>& group, int setFrontIndex, int setLength,
163 bool withText );
164
167 {
168 int numBig{ 0 };
169 int numSmallText{ 0 };
170 int numSmall{ 0 };
171 };
172 using DrawTabConfig = std::vector<DrawGroupConfig>;
174 MRVIEWER_API virtual DrawTabConfig setupItemsGroupConfig_( const std::vector<std::string>& groupsInTab, const std::string& tabName, bool centerItems );
175 MRVIEWER_API virtual void setupItemsGroup_( const std::vector<std::string>& groupsInTab, const std::string& tabName, bool centerItems );
176 MRVIEWER_API virtual void drawItemsGroup_( const std::string& tabName, const std::string& groupName,
177 DrawGroupConfig config );
181 MRVIEWER_API virtual bool itemPressed_( const std::shared_ptr<RibbonMenuItem>& item, const std::string& requiremetnsHint = {} );
182
184 MRVIEWER_API virtual std::string getRequirements_( const std::shared_ptr<RibbonMenuItem>& item ) const;
185
186 MRVIEWER_API virtual void drawActiveBlockingDialog_();
187 MRVIEWER_API virtual void drawActiveNonBlockingDialogs_();
188
189 MRVIEWER_API virtual void postResize_( int width, int height ) override;
190 MRVIEWER_API virtual void postRescale_( float x, float y ) override;
191
193 {
194 std::shared_ptr<RibbonMenuItem> item;
195 };
197 std::vector<DialogItemPtr> activeNonBlockingItems_;
198 MRVIEWER_API virtual void drawItemDialog_( DialogItemPtr& itemPtr );
199
201 MRVIEWER_API virtual void drawTopPanel_( bool drawTabs = true, bool centerItems = false );
203 MRVIEWER_API virtual void drawRibbonSceneList_();
206 MRVIEWER_API virtual Vector2f drawRibbonSceneResizeLine_();
208 MRVIEWER_API virtual void drawRibbonViewportsLabels_();
209
210 MRVIEWER_API virtual void drawRibbonSceneInformation_( const std::vector<std::shared_ptr<Object>>& selected );
211
212 MRVIEWER_API virtual bool drawCollapsingHeaderTransform_() override;
213 MRVIEWER_API virtual bool drawTransformContextMenu_( const std::vector<std::shared_ptr<Object>>& selected ) override;
214
215 MRVIEWER_API virtual void setupShortcuts_() override;
216
219 MRVIEWER_API virtual HashSet<std::string> allowedShortcutTags_() const;
220
224 MRVIEWER_API void registerItemsShortcuts_( const HashSet<std::string>& allowedTags );
225
226 MRVIEWER_API virtual void drawShortcutsWindow_() override;
228 MRVIEWER_API virtual void readMenuItemsStructure_();
229
230 std::vector<std::shared_ptr<const Object>> prevFrameSelectedObjectsCache_;
231
232 MRVIEWER_API virtual bool drawCollapsingHeader_( const char* label, ImGuiTreeNodeFlags flags = 0 ) override;
233
234 MRVIEWER_API virtual void highlightBlocking_();
235
237 MRVIEWER_API virtual void drawSceneListButtons_();
238
240 MRVIEWER_API virtual void fixViewportsSize_( int w, int h );
241
243 MRVIEWER_API void drawActiveList_();
244
246 MRVIEWER_API virtual void drawNotifications_();
247
249 MRVIEWER_API virtual void updateTopPanelSize_( bool drawTabs );
250
252 MRVIEWER_API virtual void drawHeaderQuickAccess_();
253
260 MRVIEWER_API virtual float drawHeaderHelpers_( float requiredTabSize );
261
263 MRVIEWER_API virtual void drawActiveListButton_( float btnSize );
265 MRVIEWER_API virtual void drawSearchButton_();
267 MRVIEWER_API virtual void drawCollapseButton_();
269 MRVIEWER_API virtual void drawHelpButton_( const std::string& url );
271 MRVIEWER_API virtual void drawLanguageButton_();
272
274
275private:
276 void changeTab_( int newTab );
277
278 void sortObjectsRecursive_( std::shared_ptr<Object> object );
279
281 void drawHeaderPannel_();
282
283 ImVec2 activeListPos_{ 0,0 };
284 bool activeListPressed_{ false };
285
286 void beginTopPanel_();
287 void endTopPanel_();
288 void drawTopPanelOpened_( bool drawTabs, bool centerItems );
289
290 std::string transformClipboardText_;
291
292 int currentTopPanelHeight_ = 113;
293 int topPanelOpenedHeight_ = 113;
294 int topPanelHiddenHeight_ = 33;
295
296 ImVec2 sceneSize_{ 310, 0 };
297 float informationHeight_{ 0.f };
298 float transformHeight_{ 0.f };
299
300 RibbonMenuUIConfig menuUIConfig_;
301
303 float blockingHighlightTimer_{ 0.0f };
304
306 float tabPanelScroll_{ 0.0f };
307
308 bool autoCloseBlockingPlugins_{ true };
309
310 enum class CollapseState
311 {
312 Closed,
313 Opened,
314 Pinned
315 } collapseState_{ CollapseState::Pinned };
317 float openedMaxSecs_{ 2.0f };
318 float openedTimer_{ openedMaxSecs_ };
319
320 int activeTabIndex_{ 0 };
321 RibbonFontManager fontManager_;
322 RibbonButtonDrawer buttonDrawer_;
323
324 std::unordered_map<std::string, CustomContextMenuCheckbox> customCheckBox_;
325
326 std::unique_ptr<Toolbar> toolbar_;
327 RibbonNotifier notifier_;
328#ifndef __EMSCRIPTEN__
329 AsyncRequest asyncRequest_;
330#endif // !__EMSCRIPTEN__
331};
332
334MRVIEWER_API void pushNotification( const RibbonNotification& notification );
335
336}
Definition ImGuiMenu.h:55
named object in the data model
Definition MRObject.h:61
class for drawing ribbon menu buttons
Definition MRRibbonButtonDrawer.h:53
Definition MRRibbonFontManager.h:15
separate class for search in ribbon menu
Definition MRRibbonMenuSearch.h:20
class to hold and operate with notifications
Definition MRRibbonNotification.h:67
class to draw toolbar and toolbar customize windows
Definition MRToolbar.h:24
GLFW-based mesh viewer.
Definition MRViewer.h:71
Definition MRViewportId.h:16
auto width(const Box< V > &box)
returns size along x axis
Definition MRBox.h:376
auto height(const Box< V > &box)
returns size along y axis
Definition MRBox.h:383
SelectedTypesMask selectedMask
Definition MRRibbonMenu.h:36
bool hasAnyActiveItem() const
returns true if any plugin is now active
Definition MRRibbonMenu.h:95
virtual void pushNotification(const RibbonNotification &notification)
int getTopPanelOpenedHeight() const
this functions allow you to get top panel height (before scaling)
Definition MRRibbonMenu.h:71
SelectedTypesMask
Definition ImGuiMenu.h:34
virtual void postResize_(int width, int height) override
Scene events.
int numSmall
Definition MRRibbonMenu.h:170
void setTopPanelMaxOpenedTimer(float sec)
Definition MRRibbonMenu.h:76
void showActiveList()
set active plugins list showed
Definition MRRibbonMenu.h:127
virtual void drawItemDialog_(DialogItemPtr &itemPtr)
virtual void updateTopPanelSize_(bool drawTabs)
this function changes internal sizes of topPanel when it is enabled or disabled
void addRibbonItemShortcut(const std::string &itemName, const ShortcutKey &key, ShortcutCategory category)
deprecated: pass the category in (shortcut)
Definition MRRibbonMenu.h:105
void setActiveListPos(const ImVec2 &pos)
Definition MRRibbonMenu.h:124
bool drawCloneSelectionButton(const std::vector< std::shared_ptr< Object > > &selected)
bool drawGroupUngroupButton(const std::vector< std::shared_ptr< Object > > &selected)
======== selected objects options drawing
virtual void drawLanguageButton_()
header helper button to change the UI language
virtual void init(MR::Viewer *_viewer) override
This function is called when the viewer is initialized (no mesh will be loaded at this stage)
virtual void drawActiveBlockingDialog_()
bool isTopPannelPinned() const
void registerItemsShortcuts_(const HashSet< std::string > &allowedTags)
void resetQuickAccessList()
reset quick access menu items list to default
int numSmallText
Definition MRRibbonMenu.h:169
virtual void setMenuUIConfig(const RibbonMenuUIConfig &newConfig)
DialogItemPtr activeBlockingItem_
Definition MRRibbonMenu.h:196
ImVec2 size(const ViewportRectangle &rect)
Definition MRViewport.h:59
virtual void drawAdditionalWindows() override
override this instead using callback_draw_custom_window
virtual void addRibbonItemShortcut(const std::string &itemName, const Shortcut &shortcut)
binds given shortcut to the ribbon item with given name
virtual void drawItemsGroup_(const std::string &tabName, const std::string &groupName, DrawGroupConfig config)
virtual void drawActiveListButton_(float btnSize)
helper list of active tools
bool hasActiveBlockingItem() const
returns true if any blocking plugin is now active
Definition MRRibbonMenu.h:93
bool getAutoCloseBlockingPlugins() const
returns flag defining if closing plugin on opening another one is enabled
Definition MRRibbonMenu.h:143
int getTopPanelHiddenHeight() const
Definition MRRibbonMenu.h:72
std::function< void(std::shared_ptr< Object > object, ViewportId id, bool checked)> Setter
Definition MRRibbonMenu.h:30
virtual HashSet< std::string > allowedShortcutTags_() const
Vector2i getSceneSize()
get Scene List window size
Definition MRRibbonMenu.h:87
virtual void drawActiveNonBlockingDialogs_()
std::function< bool(std::shared_ptr< Object > object, ViewportId id)> Getter
Definition MRRibbonMenu.h:31
virtual void drawRibbonSceneInformation_(const std::vector< std::shared_ptr< Object > > &selected)
phmap::flat_hash_set< T, Hash, Eq, Allocator< T > > HashSet
Definition MRMeshFwd.h:622
virtual void drawSearchButton_()
header helper search bar at panel
static void cloneTree(const std::vector< std::shared_ptr< Object > > &selectedObjects)
clones given objects with sub-objects (except for ancillary and unrecognized children) and undo
virtual void drawRibbonSceneList_()
Draw scene list window with content.
virtual void drawNotifications_()
call this to draw RibbonNotifier with respect of scene size and ribbon top panel
virtual bool drawCollapsingHeader_(const char *label, ImGuiTreeNodeFlags flags=0) override
override this to have custom UI in "Selection Properties" window (under "Draw Options")
virtual void drawBigButtonItem_(const MenuItemInfo &item)
draw single item
virtual bool itemPressed_(const std::shared_ptr< RibbonMenuItem > &item, const std::string &requiremetnsHint={})
std::vector< std::shared_ptr< const Object > > prevFrameSelectedObjectsCache_
Definition MRRibbonMenu.h:230
static std::shared_ptr< RibbonMenu > instance()
returns RibonMenu from ViewerInstance()
Getter getter
Definition MRRibbonMenu.h:33
virtual std::string getRequirements_(const std::shared_ptr< RibbonMenuItem > &item) const
returns requirements line for given tool, empty line means that tool is available
virtual void drawSceneListButtons_()
draw scene list buttons
virtual bool drawTransformContextMenu_(const std::vector< std::shared_ptr< Object > > &selected) override
virtual void shutdown() override
This function is called before shutdown.
virtual std::filesystem::path getMenuFontPath() const override
void openToolbarCustomize()
open Toolbar Customize modal popup
void setAutoCloseBlockingPlugins(bool value)
sets flag defining if closing plugin on opening another one is enabled or not
Definition MRRibbonMenu.h:145
virtual void drawViewerWindow() override
override this instead using callback_draw_viewer_window
Definition MRRibbonMenu.h:56
virtual DrawTabConfig setupItemsGroupConfig_(const std::vector< std::string > &groupsInTab, const std::string &tabName, bool centerItems)
draw group of items
void drawActiveList_()
need to be called if you override windows pipeline and use ActiveListPlugin
virtual void loadFonts(int font_size=13) override
void updateItemStatus(const std::string &itemName)
updates status of item if it was changed outside of menu
RibbonFontManager & getFontManager()
get access to Ribbon font manager
Definition MRRibbonMenu.h:113
RibbonNotifier & getRibbonNotifier()
get access to Ribbon notifier
Definition MRRibbonMenu.h:122
virtual void setQuickAccessListVersion(int version)
set quick access menu item list version
static void cloneSelectedPart(const std::shared_ptr< Object > &object)
clones selected part of given object as separate object (faces, points)
ShortcutCategory
Definition MRShortcutKey.h:25
bool drawSelectSubtreeButton(const std::vector< std::shared_ptr< Object > > &selected)
bool drawCloneButton(const std::vector< std::shared_ptr< Object > > &selected)
virtual void drawTopPanel_(bool drawTabs=true, bool centerItems=false)
Draw ribbon top panel.
RibbonMenuSearch searcher_
Definition MRRibbonMenu.h:273
virtual void postRescale_(float x, float y) override
bool drawCustomCheckBox(const std::vector< std::shared_ptr< Object > > &selected, SelectedTypesMask selectedMask)
int numBig
Definition MRRibbonMenu.h:168
virtual void drawRibbonViewportsLabels_()
Draw viewport id and projection type for all viewporrts.
Setter setter
Definition MRRibbonMenu.h:32
Toolbar & getToolbar()
get access to Ribbon Toolbar
Definition MRRibbonMenu.h:119
std::vector< DialogItemPtr > activeNonBlockingItems_
Definition MRRibbonMenu.h:197
void setCustomContextCheckbox(const std::string &name, CustomContextMenuCheckbox customContextMenuCheckbox)
boost::signals2::signal< void(int prevTabId, int newTabId)> TabChangedSignal
Definition MRRibbonMenu.h:138
std::vector< DrawGroupConfig > DrawTabConfig
Definition MRRibbonMenu.h:172
virtual void readMenuItemsStructure_()
reads files with panel description
virtual void setupItemsGroup_(const std::vector< std::string > &groupsInTab, const std::string &tabName, bool centerItems)
bool drawMergeSubtreeButton(const std::vector< std::shared_ptr< Object > > &selected)
virtual void drawShortcutsWindow_() override
A virtual function for drawing of the dialog with shortcuts. It can be overriden in the inherited cla...
virtual void highlightBlocking_()
virtual void drawHeaderQuickAccess_()
draw quick access bar at header level
void pushNotification(const RibbonNotification &notification)
Checks if RibbonMenu is available, if it is - forwards notification to RibbonNotifier....
virtual void drawSmallButtonsSet_(const std::vector< std::string > &group, int setFrontIndex, int setLength, bool withText)
draw set of small text buttons
RibbonButtonDrawer & getRibbonButtonDrawer()
get access to Ribbon button drawer
Definition MRRibbonMenu.h:116
int getTopPanelCurrentHeight() const
Definition MRRibbonMenu.h:73
const RibbonMenuUIConfig & getMenuUIConfig() const
returns current menu ui configuration (find more in RibbonMenuUIConfig comments)
Definition MRRibbonMenu.h:148
virtual void fixViewportsSize_(int w, int h)
updates viewport sizes with respect to ribbon top and left panels
void setSceneSize(const Vector2i &size)
set Scene List window size
std::shared_ptr< RibbonMenuItem > item
Definition MRRibbonMenu.h:194
virtual void setupShortcuts_() override
virtual void pinTopPanel(bool on)
set top panel pinned and unpinned
virtual void drawCollapseButton_()
header helper button to pin/unpin ribbon
virtual float drawHeaderHelpers_(float requiredTabSize)
virtual bool drawCollapsingHeaderTransform_() override
override this to customize appearance of collapsing headers for transform block
virtual void drawHelpButton_(const std::string &url)
header helper button link to help page
int getActiveTabIndex() const
returns index of active tab in RibbonSchemaHolder::schema().tabsOrder
Definition MRRibbonMenu.h:109
virtual void readQuickAccessList(const Json::Value &root)
read quick access menu items list from json
virtual Vector2f drawRibbonSceneResizeLine_()
TabChangedSignal tabChangedSignal
this signal is called when active tab changes
Definition MRRibbonMenu.h:140
Only strictly necessary for the bindings (to make MR::MeshIntersectionResult a complete type).
Definition MRCameraOrientationPlugin.h:8
Definition MRRibbonSchema.h:41
Definition MRRibbonMenuUIConfig.h:18
Definition MRRibbonMenu.h:193
Configuration of ribbon group.
Definition MRRibbonMenu.h:167
Definition MRRibbonNotification.h:41
Definition MRShortcutKey.h:14
a keyboard shortcut: the keys to press and the category it is listed under
Definition MRShortcutKey.h:37