15template<
typename ObjectT>
21 return std::string(
"one " ) + ObjectT::ClassName();
23 return std::string(
"two " ) + ObjectT::ClassNameInPlural();
25 return std::string(
"three " ) + ObjectT::ClassNameInPlural();
27 return std::string(
"four " ) + ObjectT::ClassNameInPlural();
29 return std::to_string( n ) +
" " + ObjectT::ClassNameInPlural();
35template<
typename ObjectT,
bool visualRepresentationCheck,
bool modelCheck>
38 if ( objs.size() != n )
40 for (
const auto& obj : objs )
42 auto tObj =
dynamic_cast<const ObjectT*
>( obj.get() );
44 return std::string(
"Selected object(s) must be " ) + ObjectT::ClassName();
46 if constexpr ( modelCheck )
47 if ( !tObj->hasModel() )
48 return "Selected object(s) must have valid model";
50 if constexpr ( visualRepresentationCheck )
51 if ( !tObj->hasVisualRepresentation() )
52 return "Selected object(s) must have valid visual representation";
59template<
typename ObjectT,
bool visualRepresentationCheck,
bool modelCheck>
62 if ( objs.size() < n )
65 for (
const auto& obj : objs )
67 auto tObj =
dynamic_cast<const ObjectT*
>( obj.get() );
71 if constexpr ( modelCheck )
72 if ( !tObj->hasModel() )
75 if constexpr ( visualRepresentationCheck )
76 if ( !tObj->hasVisualRepresentation() )
86template<
unsigned N,
typename ObjectT,
typename =
void>
91 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
97template<
unsigned N,
typename ObjectT>
102 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
108template<
unsigned N,
typename ObjectT>
113 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
120template<
unsigned N,
typename ObjectT,
typename =
void>
125 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
131template<
unsigned N,
typename ObjectT>
136 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
142template<
unsigned N,
typename ObjectT>
147 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
154template<
typename ...Checks>
159 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>&objs )
const override
161 std::vector<std::string> checkRes;
162 checkRes.reserve(
sizeof...( Checks ) );
163 ( checkRes.push_back( Checks::isAvailable( objs ) ), ... );
164 std::string combinedRes;
165 for (
int i = 0; i < checkRes.size(); ++i )
167 if ( checkRes[i].empty() )
171 checkRes[i].front() = ( char )tolower( checkRes[i].front() );
173 combinedRes += checkRes[i];
174 if ( i + 1 < checkRes.size() )
175 combinedRes +=
" or ";
182template<
typename ...Checks>
187 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
189 std::vector<std::string> checkRes;
190 checkRes.reserve(
sizeof...( Checks ) );
191 ( checkRes.push_back( Checks::isAvailable( objs ) ), ... );
192 std::string combinedRes;
193 for (
int i = 0; i < checkRes.size(); ++i )
195 if ( checkRes[i].empty() )
198 if ( !combinedRes.empty() )
200 combinedRes +=
" and ";
201 checkRes[i].front() = ( char )tolower( checkRes[i].front() );
203 combinedRes += checkRes[i];
Definition MRISceneStateCheck.h:14
Definition MRSceneStateCheck.h:184
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
Definition MRSceneStateCheck.h:187
virtual ~SceneStateAndCheck()=default
virtual ~SceneStateAtLeastCheck()=default
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
Definition MRSceneStateCheck.h:147
virtual ~SceneStateAtLeastCheck()=default
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
Definition MRSceneStateCheck.h:136
Definition MRSceneStateCheck.h:122
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
Definition MRSceneStateCheck.h:125
virtual ~SceneStateAtLeastCheck()=default
virtual ~SceneStateExactCheck()=default
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
Definition MRSceneStateCheck.h:113
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
Definition MRSceneStateCheck.h:102
virtual ~SceneStateExactCheck()=default
Definition MRSceneStateCheck.h:88
virtual ~SceneStateExactCheck()=default
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
Definition MRSceneStateCheck.h:91
Definition MRSceneStateCheck.h:156
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
Definition MRSceneStateCheck.h:159
virtual ~SceneStateOrCheck()=default
Definition MRCameraOrientationPlugin.h:8
std::string getNObjectsLine(unsigned n)
Definition MRSceneStateCheck.h:16
std::string sceneSelectedExactly(const std::vector< std::shared_ptr< const Object > > &objs, unsigned n)
Definition MRSceneStateCheck.h:36
std::string sceneSelectedAtLeast(const std::vector< std::shared_ptr< const Object > > &objs, unsigned n)
Definition MRSceneStateCheck.h:60
Definition MRSceneStateCheck.h:13
Definition MRSceneStateCheck.h:10