diff options
author | Andrew <forkk@forkk.net> | 2013-02-20 19:10:09 -0600 |
---|---|---|
committer | Andrew <forkk@forkk.net> | 2013-02-20 19:10:09 -0600 |
commit | dd2e836b4cf4cfa043f9ea2911f58f1d22d4e282 (patch) | |
tree | 07e99dd9c2858e2e46075a649751049c3195b437 /libinstance/include/instanceloader.h | |
parent | f71479ec33562c9a0ebbdb335bef5e2824a12710 (diff) | |
download | MultiMC-dd2e836b4cf4cfa043f9ea2911f58f1d22d4e282.tar MultiMC-dd2e836b4cf4cfa043f9ea2911f58f1d22d4e282.tar.gz MultiMC-dd2e836b4cf4cfa043f9ea2911f58f1d22d4e282.tar.lz MultiMC-dd2e836b4cf4cfa043f9ea2911f58f1d22d4e282.tar.xz MultiMC-dd2e836b4cf4cfa043f9ea2911f58f1d22d4e282.zip |
Split MultiMC up into a few separate libraries.
Fixed plugin system.
Tons of other stuff...
Diffstat (limited to 'libinstance/include/instanceloader.h')
-rw-r--r-- | libinstance/include/instanceloader.h | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/libinstance/include/instanceloader.h b/libinstance/include/instanceloader.h new file mode 100644 index 00000000..39696639 --- /dev/null +++ b/libinstance/include/instanceloader.h @@ -0,0 +1,137 @@ +/* Copyright 2013 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef INSTANCELOADER_H +#define INSTANCELOADER_H + +#include <QObject> +#include <QMap> +#include <QList> + +#include "libinstance_config.h" + +class InstanceTypeInterface; +class Instance; + +typedef QList<const InstanceTypeInterface *> InstTypeList; + +/*! + * \brief The InstanceLoader is a singleton that manages all of the instance types and handles loading and creating instances. + * Instance types are registered with the instance loader through its registerInstType() function. + * Creating instances is done through the InstanceLoader's createInstance() function. This function takes + */ +class LIBMMCINST_EXPORT InstanceLoader : public QObject +{ + Q_OBJECT +public: + /*! + * \brief Gets a reference to the instance loader. + */ + static InstanceLoader &get() { return loader; } + + /*! + * \brief Error codes returned by functions in the InstanceLoader and InstanceType classes. + * + * - NoError indicates that no error occurred. + * - OtherError indicates that an unspecified error occurred. + * - TypeIDExists is returned by registerInstanceType() if the ID of the type being registered already exists. + * - TypeNotRegistered is returned by createInstance() and loadInstance() when the given type is not registered. + * - InstExists is returned by createInstance() if the given instance directory is already an instance. + * - NotAnInstance is returned by loadInstance() if the given instance directory is not a valid instance. + * - WrongInstType is returned by loadInstance() if the given instance directory's type doesn't match the given type. + */ + enum InstTypeError + { + NoError = 0, + OtherError, + + TypeIDExists, + + TypeNotRegistered, + InstExists, + NotAnInstance, + WrongInstType + }; + + /*! + * \brief Registers the given InstanceType with the instance loader. + * + * \param type The InstanceType to register. + * \return An InstTypeError error code. + * - TypeIDExists if the given type's is already registered to another instance type. + */ + InstTypeError registerInstanceType(InstanceTypeInterface *type); + + /*! + * \brief Creates an instance with the given type and stores it in inst. + * + * \param inst Pointer to store the created instance in. + * \param type The type of instance to create. + * \param instDir The instance's directory. + * \return An InstTypeError error code. + * - TypeNotRegistered if the given type is not registered with the InstanceLoader. + * - InstExists if the given instance directory is already an instance. + */ + InstTypeError createInstance(Instance *inst, const InstanceTypeInterface *type, const QString &instDir); + + /*! + * \brief Loads an instance from the given directory. + * + * \param inst Pointer to store the loaded instance in. + * \param type The type of instance to load. + * \param instDir The instance's directory. + * \return An InstTypeError error code. + * - TypeNotRegistered if the given type is not registered with the InstanceLoader. + * - NotAnInstance if the given instance directory isn't a valid instance. + * - WrongInstType if the given instance directory's type isn't the same as the given type. + */ + InstTypeError loadInstance(Instance *inst, const InstanceTypeInterface *type, const QString &instDir); + + /*! + * \brief Loads an instance from the given directory. + * Checks the instance's INI file to figure out what the instance's type is first. + * \param inst Pointer to store the loaded instance in. + * \param instDir The instance's directory. + * \return An InstTypeError error code. + * - TypeNotRegistered if the instance's type is not registered with the InstanceLoader. + * - NotAnInstance if the given instance directory isn't a valid instance. + */ + InstTypeError loadInstance(Instance *inst, const QString &instDir); + + /*! + * \brief Finds an instance type with the given ID. + * If one cannot be found, returns NULL. + * + * \param id The ID of the type to find. + * \return The type with the given ID. NULL if none were found. + */ + const InstanceTypeInterface *findType(const QString &id); + + /*! + * \brief Gets a list of the registered instance types. + * + * \return A list of instance types. + */ + InstTypeList typeList(); + +private: + InstanceLoader(); + + QMap<QString, InstanceTypeInterface *> m_typeMap; + + static InstanceLoader loader; +}; + +#endif // INSTANCELOADER_H |