Skip to content

Commit

Permalink
feat: [sidebar/settings] custom settings can be added.
Browse files Browse the repository at this point in the history
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
itsXuSt committed Aug 21, 2023
1 parent dae9729 commit a21a65d
Show file tree
Hide file tree
Showing 22 changed files with 754 additions and 92 deletions.
30 changes: 30 additions & 0 deletions include/dfm-base/settingdialog/customsettingitemregister.h
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
72 changes: 72 additions & 0 deletions include/dfm-base/settingdialog/settingjsongenerator.h
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
8 changes: 4 additions & 4 deletions src/apps/dde-file-manager/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,14 +88,14 @@ static bool isLoadVaultPlugin()
DSysInfo::UosEdition uosEdition = DSysInfo::uosEditionType();
if (DSysInfo::UosServer == uosType) {
if (DSysInfo::UosEnterprise == uosEdition
|| DSysInfo::UosEnterpriseC == uosEdition
|| DSysInfo::UosEuler == uosEdition) {
|| DSysInfo::UosEnterpriseC == uosEdition
|| DSysInfo::UosEuler == uosEdition) {
return true;
}
} else if (DSysInfo::UosDesktop == uosType) {
if (DSysInfo::UosProfessional == uosEdition
|| static_cast<int>(DSysInfo::UosEnterprise) == static_cast<int>(uosEdition + 1)
|| DSysInfo::UosEducation == uosEdition) {
|| static_cast<int>(DSysInfo::UosEnterprise) == static_cast<int>(uosEdition + 1)
|| DSysInfo::UosEducation == uosEdition) {
return true;
}
}
Expand Down
34 changes: 34 additions & 0 deletions src/dfm-base/base/configs/customsettingitemregister.cpp
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;
}
Loading

0 comments on commit a21a65d

Please sign in to comment.