MeshLib C++ Docs
Loading...
Searching...
No Matches
MRRibbonSchema.h
Go to the documentation of this file.
1#pragma once
2#include "MRViewerFwd.h"
4#include "MRMesh/MRMeshFwd.h"
5#include "MRMesh/MRphmap.h"
6#include <json/forwards.h>
7#include <filesystem>
8#include <vector>
9#include <string>
10#include <memory>
11
12namespace MR
13{
16
17
19using SplitCaptionInfo = std::vector<std::pair<std::string_view, float>>;
20
26
28{
29 std::shared_ptr<RibbonMenuItem> item;
30 std::string caption;
31 std::string tooltip;
32 std::string icon;
34 std::string helpLink;
35};
36
39class MRVIEWER_CLASS RibbonSchemaLoadListener
40{
41public:
42 virtual ~RibbonSchemaLoadListener() = default;
43
44protected:
45 friend class RibbonSchemaLoader;
46 virtual void onRibbonSchemaLoad_() = 0;
47};
48
49using ItemMap = HashMap<std::string, MenuItemInfo>;
50using TabsGroupsMap = HashMap<std::string, std::vector<std::string>>;
52using MenuItemsList = std::vector<std::string>;
54{
55 std::string name;
56 int priority{ 0 };
57 bool experimental{ false };
58};
59
80
83class MRVIEWER_CLASS RibbonSchemaHolder
84{
85public:
86 MRVIEWER_API static RibbonSchema& schema();
87
90 MRVIEWER_API static bool addItem( const std::shared_ptr<RibbonMenuItem>& item );
91
94 MRVIEWER_API static bool delItem( const std::shared_ptr<RibbonMenuItem>& item );
95
98 {
99 int tabIndex{ -1 };
100 const MenuItemInfo* item{ nullptr };
101 };
102
105 {
106 float captionWeight{ 1.f };
107 float captionOrderWeight{ 1.f };
108 float tooltipWeight{ 1.f };
109 float tooltipOrderWeight{ 1.f };
110 };
111
114 {
116 int* captionCount = nullptr;
118 std::vector<SearchResultWeight>* weights = nullptr;
120 RequirementsFunction requirementsFunc = {};
121 };
123 MRVIEWER_API static std::vector<SearchResult> search( const std::string& searchStr, const SearchParams& params );
124
126 MRVIEWER_API static int findItemTab( const std::shared_ptr<RibbonMenuItem>& item );
127
128private:
129 RibbonSchemaHolder() = default;
130};
131
133class MRVIEWER_CLASS RibbonSchemaLoader
134{
135public:
137 virtual ~RibbonSchemaLoader() = default;
138
140 MRVIEWER_API virtual void loadSchema() const;
141
143 MRVIEWER_API static void readMenuItemsList( const Json::Value& root, MenuItemsList& list );
144
146 MRVIEWER_API static void recalcItemSizes();
147protected:
149 MRVIEWER_API virtual std::vector<std::filesystem::path> getStructureFiles_( const std::string& fileExtension ) const;
151 MRVIEWER_API void sortFilesByOrder_( std::vector<std::filesystem::path>& files ) const;
153 MRVIEWER_API void readItemsJson_( const std::filesystem::path& path ) const;
154 MRVIEWER_API void readItemsJson_( const Json::Value& root ) const;
156 MRVIEWER_API void readUIJson_( const std::filesystem::path& path ) const;
157 MRVIEWER_API void readUIJson_( const Json::Value& root ) const;
158};
159
160
161template<typename T>
163{
164 static_assert( std::is_base_of_v<RibbonMenuItem, T> );
165public:
166 template<typename F>
167 RibbonMenuItemCall( F f, std::function<void(std::shared_ptr<T>)> g ) : g_( std::move( g ) )
168 {
169 const auto& items = RibbonSchemaHolder::schema().items;
170 for ( const auto& item : items )
171 {
172 auto plugin = std::dynamic_pointer_cast< T >( item.second.item );
173 if ( !plugin )
174 continue;
175 f( plugin_ = std::move( plugin ) );
176 break;
177 }
178 }
180 {
181 if ( g_ && plugin_ )
182 g_( plugin_ );
183 }
184private:
185 std::shared_ptr<T> plugin_;
186 std::function<void(std::shared_ptr<T>)> g_;
187};
188
190#define MR_RIBBON_ITEM_CALL(pluginType,f,g) \
191 static MR::RibbonMenuItemCall<pluginType> ribbonMenuItemCall##func##pluginType##_( f, g );
192
193}
Definition MRRibbonSchema.h:163
Definition MRRibbonSchema.h:84
Definition MRRibbonSchema.h:40
Class for loading ribbon schema from structure files (basically called from RibbonMenu,...
Definition MRRibbonSchema.h:134
static MRVIEWER_API RibbonSchema & schema()
static MRVIEWER_API bool delItem(const std::shared_ptr< RibbonMenuItem > &item)
virtual ~RibbonSchemaLoader()=default
MRVIEWER_API void updateCaptions()
updates inner caption for all StateBasePlugins in schema
MRVIEWER_API void eliminateEmptyGroups()
deletes empty groups (and references on them from tabs)
std::vector< std::pair< std::string_view, float > > SplitCaptionInfo
needed for big buttons text aligning
Definition MRRibbonSchema.h:19
MenuItemsList sceneButtonsList
Definition MRRibbonSchema.h:69
std::string caption
Definition MRRibbonSchema.h:30
MenuItemsList defaultQuickAccessList
Definition MRRibbonSchema.h:67
MRVIEWER_API void sortFilesByOrder_(std::vector< std::filesystem::path > &files) const
sort structure json files by order
TabsGroupsMap tabsMap
Definition MRRibbonSchema.h:64
static MRVIEWER_API bool addItem(const std::shared_ptr< RibbonMenuItem > &item)
static MRVIEWER_API void recalcItemSizes()
Recalc items sizes.
bool experimental
Definition MRRibbonSchema.h:57
std::string helpLink
already scaled
Definition MRRibbonSchema.h:34
int priority
Definition MRRibbonSchema.h:56
GroupsItemsMap groupsMap
Definition MRRibbonSchema.h:65
HashMap< std::string, MenuItemInfo > ItemMap
Definition MRRibbonSchema.h:49
std::vector< RibbonTab > tabsOrder
Definition MRRibbonSchema.h:63
std::string name
Definition MRRibbonSchema.h:55
virtual MRVIEWER_API std::vector< std::filesystem::path > getStructureFiles_(const std::string &fileExtension) const
finds structure json files in exe directory
MRVIEWER_API void readUIJson_(const std::filesystem::path &path) const
appends one ui json info
SplitCaptionInfo splitInfo
Definition MRRibbonSchema.h:24
virtual void onRibbonSchemaLoad_()=0
std::string icon
Definition MRRibbonSchema.h:32
std::vector< std::string > MenuItemsList
Definition MRRibbonMenuItem.h:12
MRVIEWER_API void readItemsJson_(const Json::Value &root) const
RibbonMenuItemCall(F f, std::function< void(std::shared_ptr< T >)> g)
Definition MRRibbonSchema.h:167
HashMap< std::string, std::vector< std::string > > TabsGroupsMap
Definition MRRibbonSchema.h:50
std::shared_ptr< RibbonMenuItem > item
Definition MRRibbonSchema.h:29
std::string tooltip
Definition MRRibbonSchema.h:31
float baseSize
Definition MRRibbonSchema.h:23
MRVIEWER_API void sortTabsByPriority()
re-order items in tabsOrder according to their priority, the order of items having same priority is p...
~RibbonMenuItemCall()
Definition MRRibbonSchema.h:179
static MRVIEWER_API int findItemTab(const std::shared_ptr< RibbonMenuItem > &item)
returns item tab index in schema.tabsOrder or -1 if no tab found (e.g. scene fast access panel or hea...
ItemMap items
Definition MRRibbonSchema.h:66
MRVIEWER_API void readItemsJson_(const std::filesystem::path &path) const
appends one menu items json info
TabsGroupsMap GroupsItemsMap
Definition MRRibbonSchema.h:51
virtual ~RibbonSchemaLoadListener()=default
virtual MRVIEWER_API void loadSchema() const
Loads schema from files.
MRVIEWER_API void readUIJson_(const Json::Value &root) const
static MRVIEWER_API void readMenuItemsList(const Json::Value &root, MenuItemsList &list)
Reads schema items list from root to list
MenuItemCaptionSize captionSize
Definition MRRibbonSchema.h:33
RibbonSchemaLoader()=default
static MRVIEWER_API std::vector< SearchResult > search(const std::string &searchStr, const SearchParams &params)
searches for tools with the most appropriate names (captions) or tooltips
MenuItemsList headerQuickAccessList
Definition MRRibbonSchema.h:68
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRRibbonSchema.h:22
Definition MRRibbonSchema.h:28
tool search options
Definition MRRibbonSchema.h:114
ancillary struct to hold information for search result order
Definition MRRibbonSchema.h:105
struct to hold information for search result presentation
Definition MRRibbonSchema.h:98
This structure describes UI schema of ribbon menu.
Definition MRRibbonSchema.h:62
Definition MRRibbonSchema.h:54