-
Notifications
You must be signed in to change notification settings - Fork 175
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: [sidebar/settings] custom settings can be added.
as title. now you can add your custom setting item into setting pane, and you can customize it's order. Log: custom setting pane. Task: https://pms.uniontech.com/task-view-286565.html?onlybody=yes
- Loading branch information
Showing
22 changed files
with
754 additions
and
92 deletions.
There are no files selected for viewing
30 changes: 30 additions & 0 deletions
30
include/dfm-base/settingdialog/customsettingitemregister.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. | ||
// | ||
// SPDX-License-Identifier: GPL-3.0-or-later | ||
|
||
#ifndef CUSTOMSETTINGITEMREGISTER_H | ||
#define CUSTOMSETTINGITEMREGISTER_H | ||
|
||
#include <QMap> | ||
#include <QPair> | ||
|
||
class QWidget; | ||
class QObject; | ||
|
||
typedef QPair<QWidget *, QWidget *> (*CustomSettingItemCreator)(QObject *); | ||
|
||
namespace dfmbase { | ||
class CustomSettingItemRegister | ||
{ | ||
public: | ||
static CustomSettingItemRegister *instance(); | ||
bool registCustomSettingItemType(const QString &type, const CustomSettingItemCreator &creator); | ||
const QMap<QString, CustomSettingItemCreator> &getCreators() const; | ||
|
||
private: | ||
CustomSettingItemRegister(); | ||
QMap<QString, CustomSettingItemCreator> creators; | ||
}; | ||
} | ||
|
||
#endif // CUSTOMSETTINGITEMREGISTER_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. | ||
// | ||
// SPDX-License-Identifier: GPL-3.0-or-later | ||
|
||
#ifndef SETTINGJSONGENERATOR_H | ||
#define SETTINGJSONGENERATOR_H | ||
|
||
#include <QVariantMap> | ||
|
||
/* | ||
* the root group: | ||
* { | ||
* "groups": [(top level group)] | ||
* } | ||
* | ||
* a top level group: | ||
* { | ||
* "key": (string), | ||
* "name": (string), | ||
* "groups": [(config group)] | ||
* } | ||
* | ||
* a config group: | ||
* { | ||
* "key": (string), | ||
* "name": (string), | ||
* "options": [(config item)] | ||
* } | ||
* | ||
* config item: // option item | ||
* { | ||
* "key": (string), | ||
* "text": (string), | ||
* "type": (string), | ||
* "default": (variant), | ||
* "hide": (bool), | ||
* "custom_info": (variant) | ||
* } | ||
* */ | ||
|
||
namespace dfmbase { | ||
|
||
class SettingJsonGenerator | ||
{ | ||
public: | ||
static SettingJsonGenerator *instance(); | ||
|
||
QByteArray genSettingJson(); | ||
bool addGroup(const QString &key, const QString &name); | ||
bool addConfig(const QString &key, const QVariantMap &config); | ||
bool addCheckBoxConfig(const QString &key, const QString &text, bool defaultVal = true); | ||
bool addComboboxConfig(const QString &key, const QString &name, const QStringList &options, int defaultVal = 0); | ||
bool addComboboxConfig(const QString &key, const QString &name, const QVariantMap &options, QVariant defaultVal = QVariant()); | ||
|
||
protected: | ||
SettingJsonGenerator(); | ||
|
||
void mergeGroups(); | ||
QJsonObject constructTopGroup(const QString &key); | ||
QJsonObject constructConfigGroup(const QString &key); | ||
QJsonObject constructConfig(const QString &key); | ||
|
||
private: | ||
QMap<QString, QString> topGroups; | ||
QMap<QString, QString> tmpTopGroups; | ||
QMap<QString, QString> configGroups; | ||
QMap<QString, QString> tmpConfigGroups; | ||
QMap<QString, QVariantMap> configs; | ||
}; | ||
|
||
} | ||
#endif // SETTINGJSONGENERATOR_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. | ||
// | ||
// SPDX-License-Identifier: GPL-3.0-or-later | ||
|
||
#include "dfm-base/settingdialog/customsettingitemregister.h" | ||
|
||
#include <QDebug> | ||
|
||
using namespace dfmbase; | ||
|
||
CustomSettingItemRegister::CustomSettingItemRegister() | ||
{ | ||
} | ||
|
||
const QMap<QString, CustomSettingItemCreator> &CustomSettingItemRegister::getCreators() const | ||
{ | ||
return creators; | ||
} | ||
|
||
CustomSettingItemRegister *CustomSettingItemRegister::instance() | ||
{ | ||
static CustomSettingItemRegister ins; | ||
return &ins; | ||
} | ||
|
||
bool CustomSettingItemRegister::registCustomSettingItemType(const QString &type, const CustomSettingItemCreator &creator) | ||
{ | ||
if (creators.contains(type)) { | ||
qWarning() << type << "is already registered..."; | ||
return false; | ||
} | ||
creators.insert(type, creator); | ||
return true; | ||
} |
Oops, something went wrong.