Migration of QtMvvm from github
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 lines
4.1 KiB

#ifndef QTMVVM_SETTINGSSETUP_H
#define QTMVVM_SETTINGSSETUP_H
#include <QtCore/qstringlist.h>
#include <QtCore/qvariant.h>
#include <QtCore/qurl.h>
#include <QtCore/qobject.h>
#include <QtCore/qfileselector.h>
#include <QtCore/qexception.h>
#include "QtMvvmCore/qtmvvmcore_global.h"
namespace QtMvvm {
//! A sub namespace for the different elements in a settings setup
namespace SettingsElements {
//! An entry in the settings to display and edit a value
struct Entry
{
//! The QSettings key this entry should handle
QString key;
//! The input view type (typically the actual data type) to show
QByteArray type;
//! A short title/label of the entry to give it a name
QString title;
//! A tooltip with more detailed information about the entry
QString tooltip;
//! A default value to display in case no value is in the settings yet
QVariant defaultValue;
//! A list of keys to find this entry by when searching
QStringList searchKeys;
//! Additional properties to be passed on to the edit view
QVariantMap properties;
//! *[Internal]* A logical string describing the allowed frontends
QString frontends; //MAJOR remove all
//! *[Internal]* A logical string describing the allowed selectors
QString selectors;
};
//! A logical group of settings entries
struct Group
{
//! The groups title
QString title;
//! A tooltip to describe what the group is about
QString tooltip;
//! A list of entries the group contains
QList<Entry> entries;
//! *[Internal]* A logical string describing the allowed frontends
QString frontends;
//! *[Internal]* A logical string describing the allowed selectors
QString selectors;
};
//! A bigger section for different entries and groups
struct Section
{
//! The sections title
QString title;
//! An icon for the section
QUrl icon;
//! A tooltip to describe what the section is about
QString tooltip;
//! A list of groups the section contains
QList<Group> groups;
//! *[Internal]* A logical string describing the allowed frontends
QString frontends;
//! *[Internal]* A logical string describing the allowed selectors
QString selectors;
};
//! A top level category to organize sections in
struct Category
{
//! The categories title
QString title;
//! An icon for the category
QUrl icon;
//! A tooltip to describe what the category is about
QString tooltip;
//! A list of sections the category contains
QList<Section> sections;
//! *[Internal]* A logical string describing the allowed frontends
QString frontends;
//! *[Internal]* A logical string describing the allowed selectors
QString selectors;
};
//! The whole settings setup
struct Setup
{
//! Specifies if the user is allowed to search in the settings
bool allowSearch = true;
//! Specifies if the user is allowed to restore the factory defaults
bool allowRestore = true;
//! A list of categories the setup is build of
QList<Category> categories;
};
}
//! An exception throw in case loading a settings setup went wrong
class SettingsLoaderException : public QException {};
//! An interface for a generic settings setup loader
class ISettingsSetupLoader
{
Q_DISABLE_COPY(ISettingsSetupLoader)
public:
inline ISettingsSetupLoader() = default;
virtual inline ~ISettingsSetupLoader() = default;
//! Can be used to overwrite the default icon for categories
virtual void changeDefaultIcon(const QUrl &defaultIcon) = 0;
//! Loads the settings setup from the given file
7 years ago
virtual SettingsElements::Setup loadSetup(const QString &filePath, const QString &frontend, const QFileSelector *selector) const = 0; //MAJOR remove const
};
}
Q_DECLARE_METATYPE(QtMvvm::SettingsElements::Entry)
Q_DECLARE_METATYPE(QtMvvm::SettingsElements::Group)
Q_DECLARE_METATYPE(QtMvvm::SettingsElements::Section)
Q_DECLARE_METATYPE(QtMvvm::SettingsElements::Category)
Q_DECLARE_METATYPE(QtMvvm::SettingsElements::Setup)
//! The Iid of the QtMvvm::ISettingsSetupLoader class
#define QtMvvm_ISettingsSetupLoaderIid "de.skycoder42.qtmvvm.settings.core.ISettingsSetupLoader"
Q_DECLARE_INTERFACE(QtMvvm::ISettingsSetupLoader, QtMvvm_ISettingsSetupLoaderIid)
Q_DECLARE_METATYPE(QtMvvm::ISettingsSetupLoader*)
//! @file settingssetup.h The settings setup header
#endif // QTMVVM_SETTINGSSETUP_H