MeshLib C++ Docs
Loading...
Searching...
No Matches
MRRibbonButtonDrawer.h
Go to the documentation of this file.
1#pragma once
2#include "MRRibbonMenuItem.h"
3#include "MRRibbonIcons.h"
4#include "MRImGui.h"
5#include <functional>
6
7namespace MR
8{
11
12
13struct MenuItemInfo;
14class RibbonMenu;
15class ShortcutManager;
16class ImGuiImage;
17
19{
20 enum class SizeType
21 {
22 Big,
23 SmallText,
24 Small
25 } sizeType{ SizeType::Big };
26
27 ImVec2 itemSize;
28 float iconSize{ 0.f };
35
37 bool forceHovered = false;
39 bool forcePressed = false;
41 bool* isPressed = nullptr;
42};
43
45{
47 std::function<int( bool, bool )> pushColorsCb;
49};
50
52class MRVIEWER_CLASS RibbonButtonDrawer
53{
54public:
56 MRVIEWER_API static void InitGradientTexture();
57 enum class TextureType
58 {
59 Mono,
60 Gradient,
61 RainbowRect,
62 Count
63 };
64 MRVIEWER_API static std::unique_ptr<ImGuiImage>& GetTexture( TextureType type );
65
66
68 MRVIEWER_API bool GradientCheckboxItem( const MenuItemInfo& item, bool* value ) const;
69
70
73 MRVIEWER_API static bool CustomCollapsingHeader( const char* label, ImGuiTreeNodeFlags flags = 0, int issueCount = 0 );
74
76 {
77 float baseWidth{ 0.0f };
78 float additionalWidth{ 0.0f };
79 };
80 MRVIEWER_API ButtonItemWidth calcItemWidth( const MenuItemInfo& item, DrawButtonParams::SizeType sizeType ) const;
81
83 MRVIEWER_API void drawButtonItem( const MenuItemInfo& item, const DrawButtonParams& params ) const;
84
86 MRVIEWER_API void drawCustomButtonItem( const MenuItemInfo& item, const CustomButtonParameters& customParam,
87 const DrawButtonParams& params ) const;
88
90 MRVIEWER_API void drawButtonIcon( const MenuItemInfo& item, const DrawButtonParams& params ) const;
91
93 MRVIEWER_API bool drawTabArrowButton( const char* icon, const ImVec2& size, float iconSize );
94
96 MRVIEWER_API void setMonochrome( const std::optional<Color>& color );
97
99 void setOnPressAction( std::function<void( std::shared_ptr<RibbonMenuItem>, const std::string& )> action ) { onPressAction_ = action; };
101 void setGetterRequirements( std::function<std::string( std::shared_ptr<RibbonMenuItem> )> getterRequirements ) { getRequirements_ = getterRequirements; };
102
103 void setMenu( RibbonMenu* menu ) { menu_ = menu; };
104 void setShortcutManager( const ShortcutManager* shortcutManager ) { shortcutManager_ = shortcutManager; };
105
108 MRVIEWER_API int pushRibbonButtonColors( bool enabled, bool active, bool forceHovered, DrawButtonParams::RootType rootType ) const;
109
110private:
111 void drawButtonDropItem_( const MenuItemInfo& item, const DrawButtonParams& params ) const;
112 void drawDropList_( const std::shared_ptr<RibbonMenuItem>& baseDropItem ) const;
113 void drawTooltip_( const MenuItemInfo& item, const std::string& requirements ) const;
114
115 std::function<void( std::shared_ptr<RibbonMenuItem>, const std::string& )> onPressAction_ = []( std::shared_ptr<RibbonMenuItem>, const std::string& ) {};
116 std::function<std::string( std::shared_ptr<RibbonMenuItem> )> getRequirements_ = []( std::shared_ptr<RibbonMenuItem> ) { return std::string(); };
117 RibbonMenu* menu_ = nullptr;
118 const ShortcutManager* shortcutManager_ = nullptr;
119
120 std::optional<Color> monochrome_;
121
122 static std::vector<std::unique_ptr<MR::ImGuiImage>> textures_;
123};
124
125}
class for drawing ribbon menu buttons
Definition MRRibbonButtonDrawer.h:53
Definition MRRibbonMenu.h:27
Definition MRShortcutManager.h:47
MRVIEWER_API void setMonochrome(const std::optional< Color > &color)
if set color then instead of multicolored icons will be drawn with this color
TextureType
Definition MRRibbonButtonDrawer.h:58
IconType
Definition MRRibbonIcons.h:24
MRVIEWER_API void drawCustomButtonItem(const MenuItemInfo &item, const CustomButtonParameters &customParam, const DrawButtonParams &params) const
draw item button
RootType
icon size ( = 0 - use preset according to button type), this is scale factor of cBigIcon size (should...
Definition MRRibbonButtonDrawer.h:30
void setGetterRequirements(std::function< std::string(std::shared_ptr< RibbonMenuItem >)> getterRequirements)
set function to get requirements for activate item
Definition MRRibbonButtonDrawer.h:101
SizeType
Definition MRRibbonButtonDrawer.h:21
void setOnPressAction(std::function< void(std::shared_ptr< RibbonMenuItem >, const std::string &)> action)
set reaction on press item button
Definition MRRibbonButtonDrawer.h:99
void setShortcutManager(const ShortcutManager *shortcutManager)
Definition MRRibbonButtonDrawer.h:104
MRVIEWER_API bool drawTabArrowButton(const char *icon, const ImVec2 &size, float iconSize)
draw custom styled button
static MRVIEWER_API std::unique_ptr< ImGuiImage > & GetTexture(TextureType type)
MRVIEWER_API ButtonItemWidth calcItemWidth(const MenuItemInfo &item, DrawButtonParams::SizeType sizeType) const
MRVIEWER_API void drawButtonItem(const MenuItemInfo &item, const DrawButtonParams &params) const
draw item button
MRVIEWER_API bool GradientCheckboxItem(const MenuItemInfo &item, bool *value) const
draw gradient checkbox with icon (for menu item)
static MRVIEWER_API bool CustomCollapsingHeader(const char *label, ImGuiTreeNodeFlags flags=0, int issueCount=0)
void setMenu(RibbonMenu *menu)
Definition MRRibbonButtonDrawer.h:103
MRVIEWER_API int pushRibbonButtonColors(bool enabled, bool active, bool forceHovered, DrawButtonParams::RootType rootType) const
static MRVIEWER_API void InitGradientTexture()
Creates GL texture for gradient UI (called on theme apply)
float iconSize
size of whole item group, needed for all, this should respect system scaling
Definition MRRibbonButtonDrawer.h:28
ImVec2 itemSize
type of button to draw
Definition MRRibbonButtonDrawer.h:27
RibbonIcons::IconType iconType
Definition MRRibbonButtonDrawer.h:48
bool forcePressed
if true treat this item as pressed
Definition MRRibbonButtonDrawer.h:39
std::function< int(bool, bool)> pushColorsCb
if not set push default ribbon colors
Definition MRRibbonButtonDrawer.h:47
enum MR::DrawButtonParams::SizeType Big
MRVIEWER_API void drawButtonIcon(const MenuItemInfo &item, const DrawButtonParams &params) const
draw item button icon
bool * isPressed
set true if item pressed
Definition MRRibbonButtonDrawer.h:41
bool forceHovered
if true treat this item as hovered
Definition MRRibbonButtonDrawer.h:37
@ Header
button is on toolbar
Definition MRRibbonButtonDrawer.h:33
@ Toolbar
button is on main ribbon bar
Definition MRRibbonButtonDrawer.h:32
@ Ribbon
Definition MRRibbonButtonDrawer.h:31
@ Small
button is small, text is on same line
@ SmallText
button is big, underline text is divided to 2 lines (maximum) to fit width
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRRibbonButtonDrawer.h:45
Definition MRRibbonButtonDrawer.h:19
Definition MRRibbonSchema.h:28
Definition MRRibbonButtonDrawer.h:76