Return shared_ptr in IPlugin::requirements().

This commit is contained in:
Mikaël Capelle
2020-11-19 21:21:58 +01:00
parent 5b84588732
commit 234586823d
4 changed files with 20 additions and 22 deletions
+1 -1
View File
@@ -46,6 +46,6 @@ add_filter(NAME src/utils GROUPS
add_filter(NAME src/wrappers GROUPS
gamefeatureswrappers
proxypluginwrappers
pythonwrappersutilities
pythonwrapperutilities
uibasewrappers
)
+4 -4
View File
@@ -72,11 +72,11 @@ QList<MOBase::PluginSetting> class_name::settings() const \
QString class_name::localizedName_Default() const { return IPlugin::localizedName(); } \
QString class_name::master_Default() const { return IPlugin::master(); } \
BOOST_PP_EXPR_IF(include_requirements, \
QList<IPluginRequirement*> class_name::requirements() const { \
return basicWrapperFunctionImplementationWithDefault<QList<IPluginRequirement*>>( \
this, &class_name::requirements_Default, m_Requirements, "requirements"); \
std::vector<std::shared_ptr<const MOBase::IPluginRequirement>> class_name::requirements() const { \
return basicWrapperFunctionImplementationWithDefault<std::vector<std::shared_ptr<const MOBase::IPluginRequirement>>>( \
this, &class_name::requirements_Default, "requirements"); \
} \
QList<IPluginRequirement*> class_name::requirements_Default() const { return IPlugin::requirements(); })
std::vector<std::shared_ptr<const MOBase::IPluginRequirement>> class_name::requirements_Default() const { return IPlugin::requirements(); })
#define COMMON_I_PLUGIN_WRAPPER_DEFINITIONS(class_name) COMMON_I_PLUGIN_WRAPPER_DEFINITIONS_IMPL(class_name, 1)
+2 -4
View File
@@ -19,8 +19,6 @@
// The wrapper for IPluginGame cannot override requirements() since it's final,
// so we need to be able to exclude the declarations.
#define COMMON_I_PLUGIN_WRAPPER_DECLARATIONS_IMPL(include_requirements) \
BOOST_PP_EXPR_IF(include_requirements, \
private: mutable boost::python::object m_Requirements; ) \
public: \
virtual bool init(MOBase::IOrganizer *moInfo) override; \
virtual QString name() const override; \
@@ -33,8 +31,8 @@ virtual QList<MOBase::PluginSetting> settings() const override; \
QString localizedName_Default() const; \
QString master_Default() const; \
BOOST_PP_EXPR_IF(include_requirements, \
virtual QList<MOBase::IPluginRequirement*> requirements() const override; \
QList<MOBase::IPluginRequirement*> requirements_Default() const;)
virtual std::vector<std::shared_ptr<const MOBase::IPluginRequirement>> requirements() const override; \
std::vector<std::shared_ptr<const MOBase::IPluginRequirement>> requirements_Default() const;)
#define COMMON_I_PLUGIN_WRAPPER_DECLARATIONS COMMON_I_PLUGIN_WRAPPER_DECLARATIONS_IMPL(1)
+13 -13
View File
@@ -87,16 +87,18 @@ BOOST_PYTHON_MODULE(mobase)
utils::register_qflags_converter<IModList::ModStates>();
// Pointers:
utils::shared_ptr_from_python<std::shared_ptr<const ISaveGame>>();
bpy::register_ptr_to_python<std::shared_ptr<FileTreeEntry>>();
bpy::register_ptr_to_python<std::shared_ptr<const FileTreeEntry>>();
bpy::implicitly_convertible<std::shared_ptr<FileTreeEntry>, std::shared_ptr<const FileTreeEntry>>();
bpy::register_ptr_to_python<std::shared_ptr<IFileTree>>();
bpy::register_ptr_to_python<std::shared_ptr<const IFileTree>>();
bpy::implicitly_convertible<std::shared_ptr<IFileTree>, std::shared_ptr<const IFileTree>>();
bpy::register_ptr_to_python<std::shared_ptr<ISaveGame>>();
utils::shared_ptr_from_python<std::shared_ptr<const ISaveGame>>();
bpy::register_ptr_to_python<std::shared_ptr<const ISaveGame>>();
bpy::implicitly_convertible<std::shared_ptr<ISaveGame>, std::shared_ptr<const ISaveGame>>();
utils::shared_ptr_from_python<std::shared_ptr<const IPluginRequirement>>();
bpy::register_ptr_to_python<std::shared_ptr<const IPluginRequirement>>();
// Containers:
utils::register_sequence_container<std::vector<int>>();
@@ -105,13 +107,13 @@ BOOST_PYTHON_MODULE(mobase)
utils::register_sequence_container<QList<ExecutableForcedLoadSetting>>();
utils::register_sequence_container<QList<PluginSetting>>();
utils::register_sequence_container<QList<ModRepositoryFileInfo>>();
utils::register_sequence_container<QList<IPluginRequirement*>>();
utils::register_sequence_container<QStringList>();
utils::register_sequence_container<QList<QString>>();
utils::register_sequence_container<QList<QFileInfo>>();
utils::register_sequence_container<QList<QVariant>>(); // Required for QVariant since this is QVariantList.
utils::register_sequence_container<std::vector<std::shared_ptr<const FileTreeEntry>>>();
utils::register_sequence_container<std::vector<std::shared_ptr<const ISaveGame>>>();
utils::register_sequence_container<std::vector<std::shared_ptr<const IPluginRequirement>>>();
utils::register_sequence_container<std::vector<ModDataContent::Content>>();
utils::register_sequence_container<std::vector<Mapping>>();
@@ -274,7 +276,7 @@ BOOST_PYTHON_MODULE(mobase)
// Plugin requirements:
auto iPluginRequirementClass = bpy::class_<
IPluginRequirementWrapper, bpy::bases<>, IPluginRequirementWrapper*, boost::noncopyable>("IPluginRequirement");
IPluginRequirementWrapper, bpy::bases<>, boost::noncopyable>("IPluginRequirement");
{
bpy::scope scope = iPluginRequirementClass;
@@ -292,26 +294,24 @@ BOOST_PYTHON_MODULE(mobase)
// pluginDependency
.def("pluginDependency", +[](QStringList const& pluginNames) {
return PluginRequirementFactory::pluginDependency(pluginNames);
}, bpy::return_value_policy<bpy::reference_existing_object>(), bpy::arg("plugins"))
}, bpy::arg("plugins"))
.def("pluginDependency", +[](QString const& pluginName) {
return PluginRequirementFactory::pluginDependency(pluginName);
}, bpy::return_value_policy<bpy::reference_existing_object>(), bpy::arg("plugin"))
}, bpy::arg("plugin"))
.staticmethod("pluginDependency")
// gameDependency
.def("gameDependency", +[](QStringList const& gameNames) {
return PluginRequirementFactory::gameDependency(gameNames);
}, bpy::return_value_policy<bpy::reference_existing_object>(), bpy::arg("games"))
}, bpy::arg("games"))
.def("gameDependency", +[](QString const& gameNames) {
return PluginRequirementFactory::gameDependency(gameNames);
}, bpy::return_value_policy<bpy::reference_existing_object>(), bpy::arg("game"))
}, bpy::arg("game"))
.staticmethod("gameDependency")
// diagnose
.def("diagnose", &PluginRequirementFactory::diagnose,
bpy::return_value_policy<bpy::reference_existing_object>(), bpy::arg("diagnose"))
.def("diagnose", &PluginRequirementFactory::diagnose, bpy::arg("diagnose"))
.staticmethod("diagnose")
// basic
.def("basic", &PluginRequirementFactory::basic,
bpy::return_value_policy<bpy::reference_existing_object>(), (bpy::arg("checker"), "description"))
.def("basic", &PluginRequirementFactory::basic, (bpy::arg("checker"), "description"))
.staticmethod("basic");
bpy::class_<IOrganizer::FileInfo>("FileInfo", bpy::init<>())