Skip to content

Commit

Permalink
refactor: [option] Migrate option management from JSON to Settings
Browse files Browse the repository at this point in the history
Refactored option management system to use Settings class instead of direct JSON
file operations. This change improves code maintainability and reusability by:

- Removing OptionUtils class and its JSON parsing/writing functionality
- Using Settings class for all option storage and retrieval operations
- Simplifying option access through getValue/setValue methods
- Removing redundant updateData() calls and JSON file operations
- Adding default constructor to Settings class for flexibility
- Cleaning up option access code across multiple plugins

The changes affect multiple plugins including CodeEditor, CMake, Java, Python
and others. All JSON file operations are now handled through the Settings
class interface.

Log: Refactored option management to use Settings class instead of JSON
  • Loading branch information
Kakueeen authored and deepin-mozart committed Nov 13, 2024
1 parent 50c84ab commit 7b1ba25
Show file tree
Hide file tree
Showing 18 changed files with 150 additions and 497 deletions.
24 changes: 21 additions & 3 deletions src/common/settings/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,14 @@ bool SettingsPrivate::isRemovable(const QString &group, const QString &key) cons
return settingData.values.value(group).contains(key);
}

Settings::Settings(const QString &defaultFile, const QString &settingFile, QObject *parent)
Settings::Settings(QObject *parent)
: QObject(parent),
d(new SettingsPrivate())
d(new SettingsPrivate)
{
}

Settings::Settings(const QString &defaultFile, const QString &settingFile, QObject *parent)
: Settings(parent)
{
d->settingFile = settingFile;
d->fromJsonFile(settingFile, &d->settingData);
Expand Down Expand Up @@ -208,10 +213,13 @@ void Settings::setValue(const QString &group, const QString &key, const QVariant
changed = this->value(group, key, value) != value;
}

if (!changed)
return;

d->settingData.setValue(group, key, value);
d->enableSync(true);

if (notify && changed)
if (notify)
Q_EMIT valueChanged(group, key, value);
}

Expand Down Expand Up @@ -243,6 +251,16 @@ void Settings::remove(const QString &group, const QString &key)
Q_EMIT valueChanged(group, key, newValue);
}

void Settings::load(const QString &defaultFile, const QString &settingFile)
{
d->defaultData.values.clear();
d->settingData.values.clear();

d->settingFile = settingFile;
d->fromJsonFile(defaultFile, &d->defaultData);
d->fromJsonFile(settingFile, &d->settingData);
}

void Settings::clear()
{
if (d->settingData.values.isEmpty())
Expand Down
2 changes: 2 additions & 0 deletions src/common/settings/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class Settings : public QObject
{
Q_OBJECT
public:
Settings(QObject *parent = nullptr);
explicit Settings(const QString &defaultFile, const QString &settingFile, QObject *parent = nullptr);
~Settings();

Expand All @@ -24,6 +25,7 @@ class Settings : public QObject
void setValue(const QString &group, const QString &key, const QVariant &value, bool notify = false);
void removeGroup(const QString &group);
void remove(const QString &group, const QString &key);
void load(const QString &defaultFile, const QString &settingFile);
void clear();
void reload();
bool sync();
Expand Down
1 change: 0 additions & 1 deletion src/plugins/codeeditor/gui/private/texteditor_p.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
#include "common/common.h"
#include "gui/settings/editorsettings.h"
#include "gui/settings/settingsdefine.h"
#include "services/option/optionutils.h"
#include "services/editor/editor_define.h"
#include "services/debugger/debuggerservice.h"

Expand Down
41 changes: 18 additions & 23 deletions src/plugins/codeeditor/gui/settings/commentconfigwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
#include "commentconfigwidget.h"
#include "commentconfigdetailwidget.h"
#include "settingsdefine.h"
#include "services/option/optionutils.h"
#include "services/option/optiondatastruct.h"
#include "services/option/optionmanager.h"
#include "editorsettings.h"
Expand All @@ -24,17 +23,16 @@ DWIDGET_USE_NAMESPACE
class CommentConfigWidgetPrivate
{
DFrame *btnFrame = nullptr;

DTabWidget *tabWidget = nullptr;
DPushButton *addGroupBtn = nullptr;
DPushButton *delGroupBtn = nullptr;

friend class CommentConfigWidget;
};

CommentConfigWidget::CommentConfigWidget(QWidget *parent)
: PageWidget(parent)
, d(new CommentConfigWidgetPrivate())
: PageWidget(parent), d(new CommentConfigWidgetPrivate())
{
initUI();
initConnections();
Expand All @@ -48,16 +46,14 @@ CommentConfigWidget::~CommentConfigWidget()
void CommentConfigWidget::initUI()
{
d->tabWidget = new DTabWidget(this);
QMap<QString, QVariant> map;
OptionUtils::readJsonSection(OptionUtils::getJsonFilePath(),
EditorConfig, Node::MimeTypeConfig, map);
QMap<QString, QVariant> map = OptionManager::getInstance()->getValue(EditorConfig, Node::MimeTypeConfig).toMap();
if (map.isEmpty() || map.value("0").toMap().value(Key::MimeTypeGroupName).toString().isEmpty()) {
EditorSettings::instance()->setValue(Node::MimeTypeConfig, "0", Key::MimeType, "text/x-c++src;text/x-chdr;text/x-c++hdr;text/x-java;application/javascript");
EditorSettings::instance()->setValue(Node::MimeTypeConfig, "0", Key::SingleLineComment, "//");
EditorSettings::instance()->setValue(Node::MimeTypeConfig, "0", Key::StartMultiLineComment, "/*");
EditorSettings::instance()->setValue(Node::MimeTypeConfig, "0", Key::EndMultiLineComment, "*/");
EditorSettings::instance()->setValue(Node::MimeTypeConfig, "0", Key::MimeTypeGroupName, "C++/Java/Javascript");

EditorSettings::instance()->setValue(Node::MimeTypeConfig, "1", Key::MimeType, "text/x-python;text/x-cmake;application/x-shellscript");
EditorSettings::instance()->setValue(Node::MimeTypeConfig, "1", Key::SingleLineComment, "#");
EditorSettings::instance()->setValue(Node::MimeTypeConfig, "1", Key::StartMultiLineComment, "\'\'\'");
Expand All @@ -68,46 +64,46 @@ void CommentConfigWidget::initUI()
int currentTabWidgetCount = 0;
while (currentTabWidgetCount < EditorSettings::instance()->getMap(Node::MimeTypeConfig).count()) {
QMap<QString, QVariant> mimeTypeMap = map.value(QString::number(currentTabWidgetCount)).toMap();
d->tabWidget->addTab(new CommentConfigDetailWidget(this, currentTabWidgetCount),
mimeTypeMap.value(Key::MimeTypeGroupName).toString());
d->tabWidget->addTab(new CommentConfigDetailWidget(this, currentTabWidgetCount),
mimeTypeMap.value(Key::MimeTypeGroupName).toString());
currentTabWidgetCount++;
}

QHBoxLayout *btnLayout = new QHBoxLayout();

d->addGroupBtn = new DPushButton(tr("Add Group"), this);
d->delGroupBtn = new DPushButton(tr("Delete Group"), this);

btnLayout->addWidget(d->addGroupBtn);
btnLayout->addWidget(d->delGroupBtn);
btnLayout->setSpacing(50);
btnLayout->setContentsMargins(50, 0, 50, 0);

QVBoxLayout *mainLayout = new QVBoxLayout();

mainLayout->addWidget(d->tabWidget);
mainLayout->addLayout(btnLayout);
mainLayout->setContentsMargins(0, 0, 0, 0);

this->setLayout(mainLayout);
}

void CommentConfigWidget::initConnections()
{
connect(d->addGroupBtn, &DPushButton::clicked, this, [ = ]() {
connect(d->addGroupBtn, &DPushButton::clicked, this, [=]() {
CommentConfigDetailWidget *detailWidget = new CommentConfigDetailWidget(this, d->tabWidget->count());
d->tabWidget->addTab(detailWidget, tr("New Group"));
});
connect(d->delGroupBtn, &DPushButton::clicked, this, [ = ]() {

connect(d->delGroupBtn, &DPushButton::clicked, this, [=]() {
if (d->tabWidget->count() > 1) {
DDialog dialog;
dialog.setMessage(tr("Are you sure to delete this group?"));
dialog.setWindowTitle(tr("Delete Warining"));
dialog.setIcon(QIcon::fromTheme("dialog-warning"));
dialog.insertButton(0, tr("Ok"));
dialog.insertButton(1, tr("Cancel"));
if (dialog.exec() == 0)
if (dialog.exec() == 0)
d->tabWidget->removeTab(d->tabWidget->currentIndex());
} else {
DDialog dialog;
Expand All @@ -123,8 +119,7 @@ void CommentConfigWidget::initConnections()
void CommentConfigWidget::setUserConfig(const QMap<QString, QVariant> &map)
{
for (int index = 0; index < d->tabWidget->count(); index++) {
d->tabWidget->setTabText(index, EditorSettings::instance()->getMap(Node::MimeTypeConfig)
.value(QString::number(index)).toMap().value(Key::MimeTypeGroupName).toString());
d->tabWidget->setTabText(index, EditorSettings::instance()->getMap(Node::MimeTypeConfig).value(QString::number(index)).toMap().value(Key::MimeTypeGroupName).toString());
PageWidget *detailWidget = dynamic_cast<CommentConfigDetailWidget *>(d->tabWidget->widget(index));
if (detailWidget) {
detailWidget->setUserConfig(map);
Expand Down
13 changes: 4 additions & 9 deletions src/plugins/codeeditor/gui/settings/editorsettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include "editorsettings.h"
#include "settingsdefine.h"

#include "services/option/optionutils.h"
#include "services/option/optionmanager.h"

#include <QMap>

Expand Down Expand Up @@ -51,10 +51,7 @@ void EditorSettingsPrivate::loadConfig()
isLoad = true;

for (const auto &node : nodeList) {
QMap<QString, QVariant> map;
OptionUtils::readJsonSection(OptionUtils::getJsonFilePath(),
EditorConfig, node, map);

QMap<QString, QVariant> map = OptionManager::getInstance()->getValue(EditorConfig, node).toMap();
auto iter = map.begin();
for (; iter != map.end(); ++iter)
loadConfig(node, iter.key(), iter.value().toMap());
Expand Down Expand Up @@ -82,8 +79,7 @@ void EditorSettingsPrivate::saveConfig()
for (const auto &settings : settingList) {
map.insert(settings.group, settings.data);
}
OptionUtils::writeJsonSection(OptionUtils::getJsonFilePath(),
EditorConfig, iter.key(), map);
OptionManager::getInstance()->setValue(EditorConfig, iter.key(), map);
}
}

Expand Down Expand Up @@ -156,12 +152,11 @@ QVariant EditorSettings::value(const QString &node, const QString &group, const
return iter->data.value(key, defaultValue);
}

QMap<QString, QVariant> EditorSettings::getMap(const QString &node)
QMap<QString, QVariant> EditorSettings::getMap(const QString &node)
{
const auto &stList = d->settingDatas.value(node);
QMap<QString, QVariant> map;
for (const auto &st : stList)
map.insert(st.group, st.data);
return map;
}

4 changes: 1 addition & 3 deletions src/plugins/codeeditor/gui/settings/editorsettingswidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
#include "commentconfigwidget.h"
#include "settingsdefine.h"

#include "services/option/optionutils.h"
#include "services/option/optionmanager.h"

#include <QVBoxLayout>
Expand Down Expand Up @@ -66,7 +65,7 @@ void EditorSettingsWidgetPrivate::saveConfig(PageWidget *page, const QString &no
{
QMap<QString, QVariant> map;
page->getUserConfig(map);
OptionUtils::writeJsonSection(OptionUtils::getJsonFilePath(), EditorConfig, node, map);
OptionManager::getInstance()->setValue(EditorConfig, node, map);
}

void EditorSettingsWidgetPrivate::readConfig(PageWidget *page)
Expand All @@ -91,7 +90,6 @@ void EditorSettingsWidget::saveConfig()
d->saveConfig(d->fontColorWidget, Node::FontColor);
d->saveConfig(d->behaviorWidget, Node::Behavior);
d->saveConfig(d->commentConfigWidget, Node::MimeTypeConfig);
OptionManager::getInstance()->updateData();
}

void EditorSettingsWidget::readConfig()
Expand Down
19 changes: 6 additions & 13 deletions src/plugins/codegeex/option/codegeexoptionwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
#include "codegeexoptionwidget.h"
#include "detailwidget.h"

#include "services/option/optionutils.h"
#include "services/option/optiondatastruct.h"
#include "services/option/optionmanager.h"

Expand All @@ -19,13 +18,12 @@ static const char *kCATEGORY_CODEGEEX = "CodeGeeX";

class CodeGeeXOptionWidgetPrivate
{
DTabWidget* tabWidget = nullptr;
DTabWidget *tabWidget = nullptr;
friend class CodeGeeXOptionWidget;
};

CodeGeeXOptionWidget::CodeGeeXOptionWidget(QWidget *parent)
: PageWidget(parent)
, d(new CodeGeeXOptionWidgetPrivate())
: PageWidget(parent), d(new CodeGeeXOptionWidgetPrivate())
{
QHBoxLayout *layout = new QHBoxLayout();
d->tabWidget = new DTabWidget();
Expand All @@ -50,29 +48,24 @@ CodeGeeXOptionWidget::~CodeGeeXOptionWidget()
void CodeGeeXOptionWidget::saveConfig()
{
for (int index = 0; index < d->tabWidget->count(); index++) {
PageWidget *pageWidget = qobject_cast<PageWidget*>(d->tabWidget->widget(index));
PageWidget *pageWidget = qobject_cast<PageWidget *>(d->tabWidget->widget(index));
if (pageWidget) {
QString itemNode = d->tabWidget->tabText(d->tabWidget->currentIndex());
QMap<QString, QVariant> map;
pageWidget->getUserConfig(map);
OptionUtils::writeJsonSection(OptionUtils::getJsonFilePath(), kCATEGORY_CODEGEEX, itemNode, map);

OptionManager::getInstance()->updateData();
OptionManager::getInstance()->setValue(kCATEGORY_CODEGEEX, itemNode, map);
}
}
}

void CodeGeeXOptionWidget::readConfig()
{
for (int index = 0; index < d->tabWidget->count(); index++) {
PageWidget *pageWidget = qobject_cast<PageWidget*>(d->tabWidget->widget(index));
PageWidget *pageWidget = qobject_cast<PageWidget *>(d->tabWidget->widget(index));
if (pageWidget) {
QString itemNode = d->tabWidget->tabText(d->tabWidget->currentIndex());
QMap<QString, QVariant> map;
OptionUtils::readJsonSection(OptionUtils::getJsonFilePath(),
kCATEGORY_CODEGEEX, itemNode, map);
QMap<QString, QVariant> map = OptionManager::getInstance()->getValue(kCATEGORY_CODEGEEX, itemNode).toMap();
pageWidget->setUserConfig(map);
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "cmake/builder/parser/gnumakeparser.h"
#include "cmake/builder/parser/gccparser.h"
#include "cmake/builder/parser/cmakeparser.h"
#include "cmake/option/kitmanager.h"

#include "services/builder/builderservice.h"
#include "base/abstractoutputparser.h"
Expand Down Expand Up @@ -42,7 +43,7 @@ BuildCommandInfo CMakeBuilderGenerator::getMenuCommand(const BuildMenuType build

info.program = projectInfo.buildProgram();
if (info.program.isEmpty()) {
info.program = OptionManager::getInstance()->getCMakeToolPath();
info.program = KitManager::instance()->defaultKit().cmakeTool().path;
}

info.workingDir = projectInfo.buildFolder();
Expand Down
9 changes: 2 additions & 7 deletions src/plugins/cxx/cmake/settings/cmakesettingswidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
#include "debuggeroptionwidget.h"
#include "tooloptionwidget.h"

#include "services/option/optionutils.h"
#include "services/option/optiondatastruct.h"
#include "services/option/optionmanager.h"

Expand Down Expand Up @@ -134,9 +133,7 @@ void CMakeSettingsWidget::saveConfig()
Q_ASSERT(option);

const auto &map = option->getConfig();
OptionUtils::writeJsonSection(OptionUtils::getJsonFilePath(),
option::CATEGORY_CMAKE, option->configName(), map);
OptionManager::getInstance()->updateData();
OptionManager::getInstance()->setValue(option::CATEGORY_CMAKE, option->configName(), map);
}
}

Expand All @@ -149,9 +146,7 @@ void CMakeSettingsWidget::readConfig()
auto option = dynamic_cast<BaseOption *>(widget);
Q_ASSERT(option);

QMap<QString, QVariant> map;
OptionUtils::readJsonSection(OptionUtils::getJsonFilePath(),
option::CATEGORY_CMAKE, option->configName(), map);
QMap<QString, QVariant> map = OptionManager::getInstance()->getValue(option::CATEGORY_CMAKE, option->configName()).toMap();
option->setConfig(map);
auto optWidget = dynamic_cast<BaseOptionWidgetHelper *>(widget);
if (optWidget)
Expand Down
Loading

0 comments on commit 7b1ba25

Please sign in to comment.