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/MRId.h"
5#include "MRMesh/MRMeshFwd.h"
6#include "MRMesh/MRphmap.h"
7#include <json/forwards.h>
8#include <filesystem>
9#include <vector>
10#include <string>
11#include <memory>
12
13namespace MR
14{
17
18
20using SplitCaptionInfo = std::vector<std::pair<size_t, float>>;
21
27
29{
30 std::shared_ptr<RibbonMenuItem> item;
31 std::string caption;
32 std::string tooltip;
33 std::string icon;
35 std::string helpLink;
36 LocaleDomainId localeDomainId;
37
38 const std::string& getCaption() const { return !caption.empty() ? caption : item->name(); }
39};
40
43class MRVIEWER_CLASS RibbonSchemaLoadListener
44{
45public:
46 virtual ~RibbonSchemaLoadListener() = default;
47
48protected:
49 friend class RibbonSchemaLoader;
50 virtual void onRibbonSchemaLoad_() = 0;
51};
52
56using MenuItemsList = std::vector<std::string>;
58{
59 std::string name;
60 int priority{ 0 };
61 bool experimental{ false };
62 LocaleDomainId localeDomainId;
63};
64
85
88class MRVIEWER_CLASS RibbonSchemaHolder
89{
90public:
91 MRVIEWER_API static RibbonSchema& schema();
92
95 MRVIEWER_API static bool addItem( const std::shared_ptr<RibbonMenuItem>& item );
96
99 MRVIEWER_API static bool delItem( const std::shared_ptr<RibbonMenuItem>& item );
100
103 {
104 int tabIndex{ -1 };
105 const MenuItemInfo* item{ nullptr };
106 };
107
110 {
111 float captionWeight{ 1.f };
112 float captionOrderWeight{ 1.f };
113 float tooltipWeight{ 1.f };
114 float tooltipOrderWeight{ 1.f };
115 };
116
119 {
121 int* captionCount = nullptr;
123 std::vector<SearchResultWeight>* weights = nullptr;
126 };
127
128 MRVIEWER_API static std::vector<SearchResult> search( const std::string& searchStr, const SearchParams& params );
129
131 MRVIEWER_API static int findItemTab( const std::shared_ptr<RibbonMenuItem>& item );
132
133private:
134 RibbonSchemaHolder() = default;
135};
136
138class MRVIEWER_CLASS RibbonSchemaLoader
139{
140public:
142 virtual ~RibbonSchemaLoader() = default;
143
145 MRVIEWER_API virtual void loadSchema() const;
146
148 MRVIEWER_API static void readMenuItemsList( const Json::Value& root, MenuItemsList& list );
149
151 MRVIEWER_API static void recalcItemSizes();
152protected:
154 MRVIEWER_API virtual std::vector<std::filesystem::path> getStructureFiles_( const std::string& fileExtension ) const;
156 MRVIEWER_API void sortFilesByOrder_( std::vector<std::filesystem::path>& files ) const;
158 MRVIEWER_API void readItemsJson_( const std::filesystem::path& path ) const;
159 MRVIEWER_API void readItemsJson_( const Json::Value& root, const std::string& schemaName = {} ) const;
161 MRVIEWER_API void readUIJson_( const std::filesystem::path& path ) const;
162 MRVIEWER_API void readUIJson_( const Json::Value& root, LocaleDomainId domainId = {} ) const;
163};
164
165
166template<typename T>
168{
169 static_assert( std::is_base_of_v<RibbonMenuItem, T> );
170public:
171 template<typename F>
172 RibbonMenuItemCall( F f, std::function<void(std::shared_ptr<T>)> g ) : g_( std::move( g ) )
173 {
174 const auto& items = RibbonSchemaHolder::schema().items;
175 for ( const auto& item : items )
176 {
177 auto plugin = std::dynamic_pointer_cast< T >( item.second.item );
178 if ( !plugin )
179 continue;
180 f( plugin_ = std::move( plugin ) );
181 break;
182 }
183 }
185 {
186 if ( g_ && plugin_ )
187 g_( plugin_ );
188 }
189private:
190 std::shared_ptr<T> plugin_;
191 std::function<void(std::shared_ptr<T>)> g_;
192};
193
195#define MR_RIBBON_ITEM_CALL(pluginType,f,g) \
196 static MR::RibbonMenuItemCall<pluginType> ribbonMenuItemCall##func##pluginType##_( f, g );
197
198}
Definition MRRibbonSchema.h:44
void readUIJson_(const Json::Value &root, LocaleDomainId domainId={}) const
virtual ~RibbonSchemaLoader()=default
std::vector< std::pair< size_t, float > > SplitCaptionInfo
needed for big buttons text aligning
Definition MRRibbonSchema.h:20
MenuItemsList sceneButtonsList
Definition MRRibbonSchema.h:74
float tooltipOrderWeight
Definition MRRibbonSchema.h:114
std::string caption
Definition MRRibbonSchema.h:31
MenuItemsList defaultQuickAccessList
Definition MRRibbonSchema.h:72
TabsGroupsMap tabsMap
Definition MRRibbonSchema.h:69
friend class RibbonSchemaLoader
Definition MRRibbonSchema.h:49
void readItemsJson_(const Json::Value &root, const std::string &schemaName={}) const
bool experimental
Definition MRRibbonSchema.h:61
std::string helpLink
already scaled
Definition MRRibbonSchema.h:35
int priority
Definition MRRibbonSchema.h:60
void eliminateEmptyGroups()
deletes empty groups (and references on them from tabs)
std::function< std::string(const std::shared_ptr< RibbonMenuItem > &)> RequirementsFunction
Definition MRViewerFwd.h:88
GroupsItemsMap groupsMap
Definition MRRibbonSchema.h:70
HashMap< std::string, MenuItemInfo > ItemMap
Definition MRRibbonSchema.h:53
std::vector< RibbonTab > tabsOrder
Definition MRRibbonSchema.h:68
float captionOrderWeight
Definition MRRibbonSchema.h:112
int tabIndex
Definition MRRibbonSchema.h:104
std::string name
Definition MRRibbonSchema.h:59
RequirementsFunction requirementsFunc
sort the results according to the launch capability (empty requirements)
Definition MRRibbonSchema.h:125
SplitCaptionInfo splitInfo
Definition MRRibbonSchema.h:25
static std::vector< SearchResult > search(const std::string &searchStr, const SearchParams &params)
searches for tools with the most appropriate names (captions) or tooltips
virtual void onRibbonSchemaLoad_()=0
void sortTabsByPriority()
re-order items in tabsOrder according to their priority, the order of items having same priority is p...
std::string icon
Definition MRRibbonSchema.h:33
const MenuItemInfo * item
-1 is default value if item has no tab
Definition MRRibbonSchema.h:105
LocaleDomainId localeDomainId
link to help page
Definition MRRibbonSchema.h:36
const std::string & getCaption() const
needed for translation
Definition MRRibbonSchema.h:38
std::vector< std::string > MenuItemsList
Definition MRRibbonMenuItem.h:12
static bool addItem(const std::shared_ptr< RibbonMenuItem > &item)
static void recalcItemSizes()
Recalc items sizes.
void readItemsJson_(const std::filesystem::path &path) const
appends one menu items json info
void readUIJson_(const std::filesystem::path &path) const
appends one ui json info
void updateCaptions()
updates inner caption for all StateBasePlugins in schema
RibbonMenuItemCall(F f, std::function< void(std::shared_ptr< T >)> g)
Definition MRRibbonSchema.h:172
HashMap< std::string, std::vector< std::string > > TabsGroupsMap
Definition MRRibbonSchema.h:54
std::shared_ptr< RibbonMenuItem > item
Definition MRRibbonSchema.h:30
LocaleDomainId localeDomainId
Definition MRRibbonSchema.h:62
std::string tooltip
Definition MRRibbonSchema.h:32
float baseSize
Definition MRRibbonSchema.h:24
std::vector< SearchResultWeight > * weights
returns the coefficients of matching the search string for each tool found
Definition MRRibbonSchema.h:123
~RibbonMenuItemCall()
Definition MRRibbonSchema.h:184
ItemMap items
Definition MRRibbonSchema.h:71
static RibbonSchema & schema()
float tooltipWeight
Definition MRRibbonSchema.h:113
void sortFilesByOrder_(std::vector< std::filesystem::path > &files) const
sort structure json files by order
static void readMenuItemsList(const Json::Value &root, MenuItemsList &list)
Reads schema items list from root to list
TabsGroupsMap GroupsItemsMap
Definition MRRibbonSchema.h:55
virtual ~RibbonSchemaLoadListener()=default
int * captionCount
gets the number of matches in the captions
Definition MRRibbonSchema.h:121
virtual std::vector< std::filesystem::path > getStructureFiles_(const std::string &fileExtension) const
finds structure json files in exe directory
MenuItemCaptionSize captionSize
Definition MRRibbonSchema.h:34
RibbonSchemaLoader()=default
static bool delItem(const std::shared_ptr< RibbonMenuItem > &item)
virtual void loadSchema() const
Loads schema from files.
float captionWeight
Definition MRRibbonSchema.h:111
phmap::flat_hash_map< K, V, Hash, Eq > HashMap
Definition MRMeshFwd.h:610
static 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...
MenuItemsList headerQuickAccessList
Definition MRRibbonSchema.h:73
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRRibbonSchema.h:23
Definition MRRibbonSchema.h:29
tool search options
Definition MRRibbonSchema.h:119
ancillary struct to hold information for search result order
Definition MRRibbonSchema.h:110
struct to hold information for search result presentation
Definition MRRibbonSchema.h:103
This structure describes UI schema of ribbon menu.
Definition MRRibbonSchema.h:67
Definition MRRibbonSchema.h:58