diff options
author | Orochimarufan <orochimarufan.x3@gmail.com> | 2013-02-21 20:40:32 +0100 |
---|---|---|
committer | Orochimarufan <orochimarufan.x3@gmail.com> | 2013-02-21 20:40:32 +0100 |
commit | ca1fd44637ad5ce9ec287ff71addd38e98f66f4f (patch) | |
tree | 3642ff488dd144b014131de48bf926c6e3d1043c /libinstance/include/instancetypeinterface.h | |
parent | 576e979df4a54df9bf5ffeae3559f488b3045268 (diff) | |
parent | 50d1f62bf4a8d70466100463238228bc8305a5c7 (diff) | |
download | MultiMC-ca1fd44637ad5ce9ec287ff71addd38e98f66f4f.tar MultiMC-ca1fd44637ad5ce9ec287ff71addd38e98f66f4f.tar.gz MultiMC-ca1fd44637ad5ce9ec287ff71addd38e98f66f4f.tar.lz MultiMC-ca1fd44637ad5ce9ec287ff71addd38e98f66f4f.tar.xz MultiMC-ca1fd44637ad5ce9ec287ff71addd38e98f66f4f.zip |
Merge branch 'master' of http://github.com/peterix/MultiMC5
Conflicts:
CMakeLists.txt
gui/mainwindow.cpp
main.cpp
Diffstat (limited to 'libinstance/include/instancetypeinterface.h')
-rw-r--r-- | libinstance/include/instancetypeinterface.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/libinstance/include/instancetypeinterface.h b/libinstance/include/instancetypeinterface.h new file mode 100644 index 00000000..30a12d99 --- /dev/null +++ b/libinstance/include/instancetypeinterface.h @@ -0,0 +1,86 @@ +/* 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 INSTANCETYPE_H +#define INSTANCETYPE_H + +#include <QObject> + +#include "instanceloader.h" + +//! The InstanceTypeInterface's interface ID. +#define InstanceTypeInterface_IID "net.forkk.MultiMC.InstanceTypeInterface/0.1" + +/*! + * \brief The InstanceType class is an interface for all instance types. + * InstanceTypes are usually provided by plugins. + * It handles loading and creating instances of a certain type. There should be + * one of these for each type of instance and they should be registered with the + * InstanceLoader. + * To create an instance, the InstanceLoader calls the type's createInstance() + * function. Loading is done through the loadInstance() function. + */ +class InstanceTypeInterface +{ +public: + friend class InstanceLoader; + + /*! + * \brief Gets the ID for this instance type. + * The type ID should be unique as it is used to identify the type + * of instances when they are loaded. + * Changing this value at runtime results in undefined behavior. + * \return This instance type's ID string. + */ + virtual QString typeID() const = 0; + + /*! + * \brief Gets the name of this instance type as it is displayed to the user. + * \return The instance type's display name. + */ + virtual QString displayName() const = 0; + + /*! + * \brief Gets a longer, more detailed description of this instance type. + * \return The instance type's description. + */ + virtual QString description() const = 0; + +protected: + /*! + * \brief Creates an instance and stores it in inst. + * \param inst Pointer to store the created instance in. + * \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. + */ + virtual InstanceLoader::InstTypeError createInstance(Instance *&inst, const QString &instDir) const = 0; + + /*! + * \brief Loads an instance from the given directory. + * \param inst Pointer to store the loaded instance in. + * \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 an instance of this type. + */ + virtual InstanceLoader::InstTypeError loadInstance(Instance *&inst, const QString &instDir) const = 0; +}; + +Q_DECLARE_INTERFACE(InstanceTypeInterface, InstanceTypeInterface_IID) + +#endif // INSTANCETYPE_H |