Move all the things (YES. Move them.)

Also, implemented some basic modlist logic, to be wired up.
This commit is contained in:
Petr Mrázek
2013-08-17 13:40:51 +02:00
parent 77e8066542
commit 253067c782
184 changed files with 414 additions and 345 deletions

View File

@ -0,0 +1,44 @@
/* 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 BASICSETTINGSOBJECT_H
#define BASICSETTINGSOBJECT_H
#include <QObject>
#include <QSettings>
#include "settingsobject.h"
#include "libsettings_config.h"
/*!
* \brief A settings object that stores its settings in a QSettings object.
*/
class LIBSETTINGS_EXPORT BasicSettingsObject : public SettingsObject
{
Q_OBJECT
public:
explicit BasicSettingsObject(QObject *parent = 0);
protected slots:
virtual void changeSetting(const Setting &setting, QVariant value);
protected:
virtual QVariant retrieveValue(const Setting &setting);
QSettings config;
};
#endif // BASICSETTINGSOBJECT_H

View File

@ -0,0 +1,38 @@
/* 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 INIFILE_H
#define INIFILE_H
#include <QMap>
#include <QString>
#include <QVariant>
#include "libsettings_config.h"
// Sectionless INI parser (for instance config files)
class LIBSETTINGS_EXPORT INIFile : public QMap<QString, QVariant>
{
public:
explicit INIFile();
bool loadFile(QString fileName);
bool saveFile(QString fileName);
QVariant get(QString key, QVariant def) const;
void set(QString key, QVariant val);
};
#endif // INIFILE_H

View File

@ -0,0 +1,60 @@
/* 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 INISETTINGSOBJECT_H
#define INISETTINGSOBJECT_H
#include <QObject>
#include "inifile.h"
#include "settingsobject.h"
#include "libutil_config.h"
/*!
* \brief A settings object that stores its settings in an INIFile.
*/
class LIBSETTINGS_EXPORT INISettingsObject : public SettingsObject
{
Q_OBJECT
public:
explicit INISettingsObject(const QString &path, QObject *parent = 0);
/*!
* \brief Gets the path to the INI file.
* \return The path to the INI file.
*/
virtual QString filePath() const { return m_filePath; }
/*!
* \brief Sets the path to the INI file and reloads it.
* \param filePath The INI file's new path.
*/
virtual void setFilePath(const QString &filePath);
protected slots:
virtual void changeSetting(const Setting &setting, QVariant value);
virtual void resetSetting ( const Setting& setting );
protected:
virtual QVariant retrieveValue(const Setting &setting);
INIFile m_ini;
QString m_filePath;
};
#endif // INISETTINGSOBJECT_H

View File

@ -0,0 +1,92 @@
/* Copyright 2013 MultiMC Contributors
*
* Authors: Orochimarufan <orochimarufan.x3@gmail.com>
*
* 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 KEYRING_H
#define KEYRING_H
#include <QString>
#include "libsettings_config.h"
/**
* @file libsettings/include/keyring.h
* Access to System Keyrings
*/
/**
* @brief The Keyring class
* the System Keyring/Keychain/Wallet/Vault/etc
*/
class LIBSETTINGS_EXPORT Keyring
{
public:
/**
* @brief the System Keyring instance
* @return the Keyring instance
*/
static Keyring *instance();
/**
* @brief store a password in the Keyring
* @param service the service name
* @param username the account name
* @param password the password to store
* @return success
*/
virtual bool storePassword(QString service, QString username, QString password) = 0;
/**
* @brief get a password from the Keyring
* @param service the service name
* @param username the account name
* @return the password (success=!isNull())
*/
virtual QString getPassword(QString service, QString username) = 0;
/**
* @brief lookup a password
* @param service the service name
* @param username the account name
* @return wether the password is available
*/
virtual bool hasPassword(QString service, QString username) = 0;
/**
* @brief get a list of all stored accounts.
* @param service the service name
* @return
*/
virtual QStringList getStoredAccounts(QString service) = 0;
/**
* @brief Remove the specified account from storage
* @param service the service name
* @param username the account name
* @return
*/
virtual void removeStoredAccount(QString service, QString username) = 0;
protected:
/// fall back to StubKeyring if false
virtual bool isValid() { return false; }
private:
static Keyring *m_instance;
static void destroy();
};
#endif // KEYRING_H

View File

@ -0,0 +1,27 @@
/* 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 LIBINSTANCE_CONFIG_H
#define LIBINSTANCE_CONFIG_H
#include <QtCore/QtGlobal>
#ifdef LIBSETTINGS_LIBRARY
# define LIBSETTINGS_EXPORT Q_DECL_EXPORT
#else
# define LIBSETTINGS_EXPORT Q_DECL_IMPORT
#endif
#endif // LIBINSTANCE_CONFIG_H

View File

@ -0,0 +1,43 @@
/* 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 OVERRIDESETTING_H
#define OVERRIDESETTING_H
#include <QObject>
#include "setting.h"
#include "libsettings_config.h"
/*!
* \brief A setting that 'overrides another.'
* This means that the setting's default value will be the value of another setting.
* The other setting can be (and usually is) a part of a different SettingsObject
* than this one.
*/
class LIBSETTINGS_EXPORT OverrideSetting : public Setting
{
Q_OBJECT
public:
explicit OverrideSetting(const QString &name, Setting *other, QObject *parent = 0);
virtual QVariant defValue() const;
protected:
Setting *m_other;
};
#endif // OVERRIDESETTING_H

View File

@ -0,0 +1,114 @@
/* 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 SETTING_H
#define SETTING_H
#include <QObject>
#include <QVariant>
#include "libsettings_config.h"
class SettingsObject;
/*!
*
*/
class LIBSETTINGS_EXPORT Setting : public QObject
{
Q_OBJECT
public:
/*!
* \brief Constructs a new Setting object with the given parent.
* \param parent The Setting's parent object.
*/
explicit Setting(QString id, QVariant defVal = QVariant(), QObject *parent = 0);
/*!
* \brief Gets this setting's ID.
* This is used to refer to the setting within the application.
* \warning Changing the ID while the setting is registered with a SettingsObject results in undefined behavior.
* \return The ID of the setting.
*/
virtual QString id() const { return m_id; }
/*!
* \brief Gets this setting's config file key.
* This is used to store the setting's value in the config file. It is usually
* the same as the setting's ID, but it can be different.
* \return The setting's config file key.
*/
virtual QString configKey() const { return id(); }
/*!
* \brief Gets this setting's value as a QVariant.
* This is done by calling the SettingsObject's retrieveValue() function.
* If this Setting doesn't have a SettingsObject, this returns an invalid QVariant.
* \return QVariant containing this setting's value.
* \sa value()
*/
virtual QVariant get() const;
/*!
* \brief Gets this setting's actual value (I.E. not as a QVariant).
* This function is just shorthand for get().value<T>()
* \return The setting's actual value.
*/
template<typename T>
inline T value() const { return get().value<T>(); }
/*!
* \brief Gets this setting's default value.
* \return The default value of this setting.
*/
virtual QVariant defValue() const;
signals:
/*!
* \brief Signal emitted when this Setting object's value changes.
* \param setting A reference to the Setting that changed.
* \param value This Setting object's new value.
*/
void settingChanged(const Setting &setting, QVariant value);
/*!
* \brief Signal emitted when this Setting object's value resets to default.
* \param setting A reference to the Setting that changed.
*/
void settingReset(const Setting &setting);
public slots:
/*!
* \brief Changes the setting's value.
* This is done by emitting the settingChanged() signal which will then be
* handled by the SettingsObject object and cause the setting to change.
* \param value The new value.
*/
virtual void set(QVariant value);
/*!
* \brief Reset the setting to default
* This is done by emitting the settingReset() signal which will then be
* handled by the SettingsObject object and cause the setting to change.
* \param value The new value.
*/
virtual void reset();
protected:
QString m_id;
QVariant m_defVal;
};
#endif // SETTING_H

View File

@ -0,0 +1,192 @@
/* 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 SETTINGSOBJECT_H
#define SETTINGSOBJECT_H
#include <QObject>
#include <QMap>
#include "libsettings_config.h"
class Setting;
/*!
* \brief The SettingsObject handles communicating settings between the application and a settings file.
* The class keeps a list of Setting objects. Each Setting object represents one
* of the application's settings. These Setting objects are registered with
* a SettingsObject and can be managed similarly to the way a list works.
*
* \author Andrew Okin
* \date 2/22/2013
*
* \sa Setting
*/
class LIBSETTINGS_EXPORT SettingsObject : public QObject
{
Q_OBJECT
public:
explicit SettingsObject(QObject *parent = 0);
/*!
* \brief Registers the given setting with this SettingsObject and connects the necessary signals.
* This will fail if there is already a setting with the same ID as
* the one that is being registered.
* \note Registering a setting object causes the SettingsObject to take ownership
* of the object. This means that setting's parent will be set to the object
* it was registered with. Because the object it was registered with has taken
* ownership, it becomes responsible for managing that setting object's memory.
* \warning Do \b not delete the setting after registering it.
* \param setting A pointer to the setting that will be registered.
* \return True if successful. False if registry failed.
*/
virtual bool registerSetting(Setting *setting);
/*!
* \brief Unregisters the given setting from this SettingsObject and disconnects its signals.
* \note This does not delete the setting. Furthermore, when the setting is
* unregistered, the SettingsObject drops ownership of the setting. This means
* that if you unregister a setting, its parent is set to null and you become
* responsible for freeing its memory.
* \param setting The setting to unregister.
*/
virtual void unregisterSetting(Setting *setting);
/*!
* \brief Gets the setting with the given ID.
* \param id The ID of the setting to get.
* \return A pointer to the setting with the given ID.
* Returns null if there is no setting with the given ID.
* \sa operator []()
*/
virtual Setting *getSetting(const QString &id) const;
/*!
* \brief Same as getSetting()
* \param id The ID of the setting to get.
* \return A pointer to the setting with the given ID.
* \sa getSetting()
*/
inline Setting *operator [](const QString &id) { return getSetting(id); }
/*!
* \brief Gets the value of the setting with the given ID.
* \param id The ID of the setting to get.
* \return The setting's value as a QVariant.
* If no setting with the given ID exists, returns an invalid QVariant.
*/
virtual QVariant get(const QString &id) const;
/*!
* \brief Sets the value of the setting with the given ID.
* If no setting with the given ID exists, returns false and logs to qDebug
* \param id The ID of the setting to change.
* \param value The new value of the setting.
* \return True if successful, false if it failed.
*/
virtual bool set(const QString &id, QVariant value);
/*!
* \brief Reverts the setting with the given ID to default.
* \param id The ID of the setting to reset.
*/
virtual void reset(const QString &id) const;
/*!
* \brief Gets a QList with pointers to all of the registered settings.
* The order of the entries in the list is undefined.
* \return A QList with pointers to all registered settings.
*/
virtual QList<Setting *> getSettings();
/*!
* \brief Checks if this SettingsObject contains a setting with the given ID.
* \param id The ID to check for.
* \return True if the SettingsObject has a setting with the given ID.
*/
virtual bool contains(const QString &id);
signals:
/*!
* \brief Signal emitted when one of this SettingsObject object's settings changes.
* This is usually just connected directly to each Setting object's
* settingChanged() signals.
* \param setting A reference to the Setting object that changed.
* \param value The Setting object's new value.
*/
void settingChanged(const Setting &setting, QVariant value);
/*!
* \brief Signal emitted when one of this SettingsObject object's settings resets.
* This is usually just connected directly to each Setting object's
* settingReset() signals.
* \param setting A reference to the Setting object that changed.
*/
void settingReset(const Setting &setting);
protected slots:
/*!
* \brief Changes a setting.
* This slot is usually connected to each Setting object's
* settingChanged() signal. The signal is emitted, causing this slot
* to update the setting's value in the config file.
* \param setting A reference to the Setting object that changed.
* \param value The setting's new value.
*/
virtual void changeSetting(const Setting &setting, QVariant value) = 0;
/*!
* \brief Resets a setting.
* This slot is usually connected to each Setting object's
* settingReset() signal. The signal is emitted, causing this slot
* to update the setting's value in the config file.
* \param setting A reference to the Setting object that changed.
*/
virtual void resetSetting(const Setting &setting) = 0;
protected:
/*!
* \brief Connects the necessary signals to the given Setting.
* \param setting The setting to connect.
*/
virtual void connectSignals(const Setting &setting);
/*!
* \brief Disconnects signals from the given Setting.
* \param setting The setting to disconnect.
*/
virtual void disconnectSignals(const Setting &setting);
/*!
* \brief Function used by Setting objects to get their values from the SettingsObject.
* \param setting The
* \return
*/
virtual QVariant retrieveValue(const Setting &setting) = 0;
friend class Setting;
private:
QMap<QString, Setting *> m_settings;
};
/*!
* \brief A global settings object.
*/
LIBSETTINGS_EXPORT extern SettingsObject *globalSettings;
#endif // SETTINGSOBJECT_H