18template<
typename ObjectT>
24 return std::string(
"one " ) + ObjectT::StaticClassName();
26 return std::string(
"two " ) + ObjectT::StaticClassNameInPlural();
28 return std::string(
"three " ) + ObjectT::StaticClassNameInPlural();
30 return std::string(
"four " ) + ObjectT::StaticClassNameInPlural();
32 return std::to_string( n ) +
" " + ObjectT::StaticClassNameInPlural();
38template<
typename ObjectT,
bool visualRepresentationCheck,
bool modelCheck>
41 if ( objs.size() != n )
43 for (
const auto& obj : objs )
45 auto tObj =
dynamic_cast<const ObjectT*
>( obj.get() );
47 return std::string(
"Selected object(s) must be " ) + ObjectT::StaticClassName();
49 if constexpr ( modelCheck )
50 if ( !tObj->hasModel() )
51 return "Selected object(s) must have valid model";
53 if constexpr ( visualRepresentationCheck )
54 if ( !tObj->hasVisualRepresentation() )
55 return "Selected object(s) must have valid visual representation";
62template<
typename ObjectT,
bool visualRepresentationCheck,
bool modelCheck>
65 if ( objs.size() < n )
68 for (
const auto& obj : objs )
70 auto tObj =
dynamic_cast<const ObjectT*
>( obj.get() );
74 if constexpr ( modelCheck )
75 if ( !tObj->hasModel() )
78 if constexpr ( visualRepresentationCheck )
79 if ( !tObj->hasVisualRepresentation() )
89template<
unsigned N,
typename ObjectT,
typename =
void>
94 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
100template<
unsigned N,
typename ObjectT>
105 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
111template<
unsigned N,
typename ObjectT>
116 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
123template<
unsigned N,
typename ObjectT,
typename =
void>
128 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
134template<
unsigned N,
typename ObjectT>
139 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
145template<
unsigned N,
typename ObjectT>
150 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
157template<
typename ...Checks>
162 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>&objs )
const override
164 std::vector<std::string> checkRes;
165 checkRes.reserve(
sizeof...( Checks ) );
166 ( checkRes.push_back( Checks::isAvailable( objs ) ), ... );
167 std::string combinedRes;
168 for (
int i = 0; i < checkRes.size(); ++i )
170 if ( checkRes[i].empty() )
174 checkRes[i].front() = ( char )tolower( checkRes[i].front() );
176 combinedRes += checkRes[i];
177 if ( i + 1 < checkRes.size() )
178 combinedRes +=
" or ";
185template<
typename ...Checks>
190 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
192 std::vector<std::string> checkRes;
193 checkRes.reserve(
sizeof...( Checks ) );
194 ( checkRes.push_back( Checks::isAvailable( objs ) ), ... );
195 std::string combinedRes;
196 for (
int i = 0; i < checkRes.size(); ++i )
198 if ( checkRes[i].empty() )
201 if ( !combinedRes.empty() )
203 combinedRes +=
" and ";
204 checkRes[i].front() = ( char )tolower( checkRes[i].front() );
206 combinedRes += checkRes[i];
Interface for checking scene state, to determine availability, also can return string with requiremen...
Definition MRISceneStateCheck.h:17
checks that all of argument checks are true
Definition MRSceneStateCheck.h:187
checks that given vector has at least N objects if type ObjectT
Definition MRSceneStateCheck.h:125
check that given vector has exactly N objects if type ObjectT
Definition MRSceneStateCheck.h:91
checks that at least one of argument checks is true
Definition MRSceneStateCheck.h:159
virtual ~SceneStateExactCheck()=default
std::string getNObjectsLine(unsigned n)
Definition MRSceneStateCheck.h:19
virtual ~SceneStateExactCheck()=default
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
Definition MRSceneStateCheck.h:190
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
Definition MRSceneStateCheck.h:162
virtual ~SceneStateAtLeastCheck()=default
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
return empty string if all requirements are satisfied, otherwise return first unsatisfied requirement
Definition MRSceneStateCheck.h:105
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
return empty string if all requirements are satisfied, otherwise return first unsatisfied requirement
Definition MRSceneStateCheck.h:128
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
return empty string if all requirements are satisfied, otherwise return first unsatisfied requirement
Definition MRSceneStateCheck.h:116
virtual ~SceneStateAtLeastCheck()=default
virtual ~SceneStateAtLeastCheck()=default
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
return empty string if all requirements are satisfied, otherwise return first unsatisfied requirement
Definition MRSceneStateCheck.h:94
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
return empty string if all requirements are satisfied, otherwise return first unsatisfied requirement
Definition MRSceneStateCheck.h:139
std::string sceneSelectedExactly(const std::vector< std::shared_ptr< const Object > > &objs, unsigned n)
Definition MRSceneStateCheck.h:39
std::string sceneSelectedAtLeast(const std::vector< std::shared_ptr< const Object > > &objs, unsigned n)
Definition MRSceneStateCheck.h:63
virtual ~SceneStateExactCheck()=default
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
return empty string if all requirements are satisfied, otherwise return first unsatisfied requirement
Definition MRSceneStateCheck.h:150
virtual ~SceneStateOrCheck()=default
virtual ~SceneStateAndCheck()=default
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
special struct for disabling model check
Definition MRSceneStateCheck.h:16
special struct for disabling visual representation check
Definition MRSceneStateCheck.h:13