Added InstanceLoader and InstanceType headers.
This commit is contained in:
parent
56480c6fe4
commit
15c7efffa1
@ -104,6 +104,8 @@ data/version.cpp
|
||||
data/userinfo.cpp
|
||||
data/loginresponse.cpp
|
||||
|
||||
data/inst/instanceloader.cpp
|
||||
data/inst/instancetype.cpp
|
||||
data/inst/instance.cpp
|
||||
data/inst/instancelist.cpp
|
||||
|
||||
@ -144,6 +146,8 @@ data/loginresponse.h
|
||||
data/siglist.h
|
||||
data/siglist_impl.h
|
||||
|
||||
data/inst/instanceloader.h
|
||||
data/inst/instancetype.h
|
||||
data/inst/instance.h
|
||||
data/inst/instancelist.h
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
#include "instance.h"
|
||||
|
||||
Instance::Instance(QObject *parent) :
|
||||
Instance::Instance(const QString &rootDir, QObject *parent) :
|
||||
SettingsBase(parent)
|
||||
{
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ class Instance : public SettingsBase
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit Instance(QObject *parent = 0);
|
||||
explicit Instance(const QString &rootDir, QObject *parent = 0);
|
||||
|
||||
// Please, for the sake of my (and everyone else's) sanity, at least keep this shit
|
||||
// *somewhat* organized. Also, documentation is semi-important here. Please don't
|
||||
@ -315,6 +315,8 @@ protected:
|
||||
|
||||
private:
|
||||
QString m_group;
|
||||
|
||||
QString m_rootDir;
|
||||
};
|
||||
|
||||
#endif // INSTANCE_H
|
||||
|
21
data/inst/instanceloader.cpp
Normal file
21
data/inst/instanceloader.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
/* 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.
|
||||
*/
|
||||
|
||||
#include "instanceloader.h"
|
||||
|
||||
InstanceLoader::InstanceLoader(QObject *parent) :
|
||||
QObject(parent)
|
||||
{
|
||||
}
|
94
data/inst/instanceloader.h
Normal file
94
data/inst/instanceloader.h
Normal file
@ -0,0 +1,94 @@
|
||||
/* 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>
|
||||
|
||||
class InstanceType;
|
||||
class Instance;
|
||||
|
||||
/*!
|
||||
* \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 InstanceLoader : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
static InstanceLoader instLoader;
|
||||
|
||||
/*!
|
||||
* \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.
|
||||
*/
|
||||
enum InstTypeError
|
||||
{
|
||||
NoError = 0,
|
||||
OtherError,
|
||||
|
||||
TypeIDExists,
|
||||
|
||||
TypeNotRegistered,
|
||||
InstExists,
|
||||
NotAnInstance
|
||||
};
|
||||
|
||||
/*!
|
||||
* \brief Registers the given InstanceType with the instance loader.
|
||||
* This causes the instance loader to take ownership of the given
|
||||
* instance type (meaning the instance type's parent will be set to
|
||||
* 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(InstanceType *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 InstanceType *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.
|
||||
*/
|
||||
InstTypeError loadInstance(Instance *inst, const InstanceType *type, const QString &instDir);
|
||||
|
||||
private:
|
||||
explicit InstanceLoader(QObject *parent = 0);
|
||||
};
|
||||
|
||||
#endif // INSTANCELOADER_H
|
21
data/inst/instancetype.cpp
Normal file
21
data/inst/instancetype.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
/* 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.
|
||||
*/
|
||||
|
||||
#include "instancetype.h"
|
||||
|
||||
InstanceType::InstanceType(QObject *parent) :
|
||||
QObject(parent)
|
||||
{
|
||||
}
|
81
data/inst/instancetype.h
Normal file
81
data/inst/instancetype.h
Normal file
@ -0,0 +1,81 @@
|
||||
/* 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"
|
||||
|
||||
/*!
|
||||
* \brief The InstanceType class is a base class for all instance types.
|
||||
* 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 InstanceType : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit InstanceType(QObject *parent = 0);
|
||||
|
||||
/*!
|
||||
* \brief Gets the ID for this instance type.
|
||||
* By default this is the name of the Instance class that this type
|
||||
* creates, but this can be changed by overriding this function.
|
||||
* 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;
|
||||
|
||||
/*!
|
||||
* \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) = 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.
|
||||
*/
|
||||
virtual InstanceLoader::InstTypeError loadInstance(Instance *inst, const QString &instDir) = 0;
|
||||
};
|
||||
|
||||
#endif // INSTANCETYPE_H
|
Loading…
Reference in New Issue
Block a user