kiran-control-panel/0005-refactor-Reconstruct-the-code-structure.patch

631 lines
22 KiB
Diff
Raw Normal View History

From d1f1a182b540ae4b9c1c6fb35aa4ac0b5caebc9e Mon Sep 17 00:00:00 2001
From: liuxinhao <liuxinhao@kylinsec.com.cn>
Date: Mon, 14 Nov 2022 17:55:08 +0800
Subject: [PATCH 5/5] refactor(*): Reconstruct the code structure
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 重构代码结构,简化解析IconTheme json字符串的代码
---
include/panel-interface.h | 2 +
include/plugin-interface-v2.h | 4 +-
include/plugin-subitem-interface.h | 2 +-
launcher/src/main.cpp | 1 -
lib/common-widgets/hover-tips/hover-tips.cpp | 7 +-
.../kiran-module-widget.cpp | 23 ++--
.../src/kiran-cpanel-appearance.cpp | 67 ---------
.../appearance/src/kiran-cpanel-appearance.h | 60 --------
.../appearance/src/kiran-cpanel-appearance.ui | 130 ------------------
.../pages/theme/icon-themes/icon-themes.cpp | 79 ++++++-----
.../src/pages/theme/icon-themes/icon-themes.h | 2 +-
11 files changed, 69 insertions(+), 308 deletions(-)
delete mode 100644 plugins/appearance/src/kiran-cpanel-appearance.cpp
delete mode 100644 plugins/appearance/src/kiran-cpanel-appearance.h
delete mode 100644 plugins/appearance/src/kiran-cpanel-appearance.ui
diff --git a/include/panel-interface.h b/include/panel-interface.h
index 6276649..d352ed4 100644
--- a/include/panel-interface.h
+++ b/include/panel-interface.h
@@ -22,7 +22,9 @@ namespace KiranControlPanel
class PanelInterface
{
public:
+ //通知控制中心主面板功能项信息变化
virtual void handlePluginSubItemInfoChanged(const QString& subItemID) = 0;
+ //通知控制中心主面板 功能项 发生改变,调用该接口,控制中心将重新加载该插件下的功能项信息
virtual void handlePluginSubItemChanged() = 0;
};
} // namespace KiranControlPanel
diff --git a/include/plugin-interface-v2.h b/include/plugin-interface-v2.h
index 19b0824..2643ffc 100644
--- a/include/plugin-interface-v2.h
+++ b/include/plugin-interface-v2.h
@@ -38,8 +38,8 @@ public:
//主面板调用该接口取消掉该插件初始化做的操作并卸载该插件
virtual void uninit() = 0;
- // 功能项数组,生存周期由插件维护
- // 功能项发生变更时应调用init时传入KcpInterface接口通知主面板相关信息变更,及时加载新的功能项信息
+ // 功能项数组
+ // 功能项发生变更时应调用init时传入KcpInterface接口通知主面板功能项发生变更,及时同步功能项
virtual QVector<KiranControlPanel::SubItemPtr> getSubItems() = 0;
};
} // namespace KiranControlPanel
diff --git a/include/plugin-subitem-interface.h b/include/plugin-subitem-interface.h
index b28be7e..01fc608 100644
--- a/include/plugin-subitem-interface.h
+++ b/include/plugin-subitem-interface.h
@@ -46,7 +46,7 @@ public:
// QVector< 显示文本(已翻译)搜索跳转标识ID >
virtual QVector<QPair<QString, QString>> getSearchKeys() = 0;
- //创建显示控件
+ //创建该功能项显示控件,释放由控制中心主面板决定
virtual QWidget* createWidget() = 0;
//跳转至自定义搜索项
diff --git a/launcher/src/main.cpp b/launcher/src/main.cpp
index 7bb78f2..eaeee99 100644
--- a/launcher/src/main.cpp
+++ b/launcher/src/main.cpp
@@ -119,7 +119,6 @@ int main(int argc, char *argv[])
w.setIcon(titleIcon);
w.setSubItems(plugin.getSubItems());
w.resize(w.sizeHint());
- KLOG_DEBUG() << "sizeHint:" << w.sizeHint();
QScreen* screen = QApplication::screenAt(QCursor::pos());
QRect screenGeometry = screen->geometry();
diff --git a/lib/common-widgets/hover-tips/hover-tips.cpp b/lib/common-widgets/hover-tips/hover-tips.cpp
index 61821dc..569290a 100644
--- a/lib/common-widgets/hover-tips/hover-tips.cpp
+++ b/lib/common-widgets/hover-tips/hover-tips.cpp
@@ -39,7 +39,7 @@ void HoverTips::show(HoverTipsTypeEnum typeEnum, const QString &msg)
auto iter = m_tipsTypeIconMap.find(typeEnum);
if (iter == m_tipsTypeIconMap.end())
{
- KLOG_WARNING() << "invalid type enum";
+ KLOG_WARNING() << "HoverTips: invalid type enum" << typeEnum;
return;
}
@@ -66,9 +66,10 @@ void HoverTips::updatePostion()
{
if (parentWidget() == nullptr)
{
- KLOG_WARNING() << "hover tips parnetwidget is null";
+ KLOG_WARNING() << "HoverTips: parnetwidget is null,don't update position";
return;
}
+
this->move((parentWidget()->width() - width()) / 2,
(parentWidget()->height() - height()) / 2);
}
@@ -97,7 +98,7 @@ void HoverTips::setIcon(HoverTips::HoverTipsTypeEnum typeEnum, const QString &ic
QPixmap pixmap;
if (!pixmap.load(icon) || pixmap.isNull())
{
- KLOG_WARNING() << "load icon failed.";
+ KLOG_WARNING() << "HoverTips: load icon" << icon << "failed.";
return;
}
m_tipsTypeIconMap[typeEnum] = icon;
diff --git a/lib/common-widgets/kiran-module-widget/kiran-module-widget.cpp b/lib/common-widgets/kiran-module-widget/kiran-module-widget.cpp
index 629bf83..6ddb2bd 100644
--- a/lib/common-widgets/kiran-module-widget/kiran-module-widget.cpp
+++ b/lib/common-widgets/kiran-module-widget/kiran-module-widget.cpp
@@ -42,9 +42,12 @@ KiranModuleWidget::~KiranModuleWidget()
void KiranModuleWidget::clear()
{
- disconnect(m_category, &Category::subItemAdded, this, &KiranModuleWidget::handleCategorySubItemAdded);
- disconnect(m_category, &Category::subItemDeleted, this, &KiranModuleWidget::handleCategorySubItemDeleted);
- disconnect(m_category, &Category::subItemInfoChanged, this, &KiranModuleWidget::handleCategorySubItemInfoChanged);
+ if (m_category != nullptr)
+ {
+ disconnect(m_category, &Category::subItemAdded, this, &KiranModuleWidget::handleCategorySubItemAdded);
+ disconnect(m_category, &Category::subItemDeleted, this, &KiranModuleWidget::handleCategorySubItemDeleted);
+ disconnect(m_category, &Category::subItemInfoChanged, this, &KiranModuleWidget::handleCategorySubItemInfoChanged);
+ }
ui->list_subItems->clear();
ui->widget_siderbar->hide();
@@ -96,7 +99,7 @@ void KiranModuleWidget::appendListWidgetItem(KiranControlPanel::SubItemPtr subit
item->setWeight(subitem->getWeight());
if (icon.isNull())
{
- KLOG_WARNING() << "can't find subitem icon:" << name << icon;
+ KLOG_WARNING() << "KiranModuleWidget: can't find subitem icon:" << name << icon;
}
else
{
@@ -154,7 +157,7 @@ void KiranModuleWidget::handleCurrentItemChanged()
auto selectedItems = ui->list_subItems->selectedItems();
if (selectedItems.size() != 1)
{
- KLOG_ERROR() << "sider bar size != 1";
+ KLOG_ERROR() << "KiranModuleWidget: sider bar size != 1";
return;
}
@@ -162,21 +165,21 @@ void KiranModuleWidget::handleCurrentItemChanged()
if (m_currentSubItem.first == selectedItem)
{
- KLOG_DEBUG() << "subitem not changed,ignore 'itemSelectionChanged' signal!";
+ KLOG_DEBUG() << "KiranModuleWidget: subitem not changed,ignore 'itemSelectionChanged' signal!";
return;
}
auto mapIter = m_subItemsMap.find(selectedItem);
if (mapIter == m_subItemsMap.end())
{
- KLOG_WARNING() << "can't find KiranControlPanel::SubItemPtr by QListWidgetItem," << selectedItem->text();
+ KLOG_WARNING() << "KiranModuleWidget: can't find KiranControlPanel::SubItemPtr by QListWidgetItem," << selectedItem->text();
return;
}
KiranControlPanel::SubItemPtr pluginSubitem = *mapIter;
if (checkHasUnSaved())
{
- KLOG_DEBUG() << "switch subitem to:" << pluginSubitem->getName() << "reject";
+ KLOG_DEBUG() << "KiranModuleWidget: switch subitem to:" << pluginSubitem->getName() << "reject";
m_currentSubItem.first->setSelected(true);
return;
}
@@ -194,12 +197,12 @@ void KiranModuleWidget::handleCurrentItemChanged()
QWidget *widget = pluginSubitem->createWidget();
if (widget)
{
- KLOG_DEBUG() << "sub item widget sizeHint:" << widget->sizeHint();
+ KLOG_DEBUG() << "KiranModuleWidget: sub item widget sizeHint:" << widget->sizeHint();
ui->centerLayout->addWidget(widget);
}
else
{
- KLOG_ERROR() << "can't get subitem widget:" << pluginSubitem->getName() << pluginSubitem->getID();
+ KLOG_ERROR() << "KiranModuleWidget: can't get subitem widget:" << pluginSubitem->getName() << pluginSubitem->getID();
}
m_subItemWidget = widget;
diff --git a/plugins/appearance/src/kiran-cpanel-appearance.cpp b/plugins/appearance/src/kiran-cpanel-appearance.cpp
deleted file mode 100644
index 3dee3c6..0000000
--- a/plugins/appearance/src/kiran-cpanel-appearance.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Copyright (c) 2020 ~ 2021 KylinSec Co., Ltd.
- * kiran-control-panel is licensed under Mulan PSL v2.
- * You can use this software according to the terms and conditions of the Mulan PSL v2.
- * You may obtain a copy of Mulan PSL v2 at:
- * http://license.coscl.org.cn/MulanPSL2
- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
- * See the Mulan PSL v2 for more details.
- *
- * Author: yuanxing <yuanxing@kylinsec.com.cn>
- */
-
-#include "kiran-cpanel-appearance.h"
-#include <QListWidgetItem>
-#include "ui_kiran-cpanel-appearance.h"
-
-KiranCpanelAppearance::KiranCpanelAppearance(QWidget *parent) : KiranTitlebarWindow(parent),
- ui(new Ui::KiranCpanelAppearance)
-{
- ui->setupUi(getWindowContentWidget());
- initUI();
-
- connect(ui->listWidget, &KiranSidebarWidget::itemClicked,
- [=](QListWidgetItem *item) {
- int row = ui->listWidget->row(item);
- ui->stackedWidget->setCurrentIndex(row);
- //TODO:后续根据需求确定是否切换列表项时需要指定第一页
- if (row == ITEM_BACKGROUND)
- ;
- else if (row == ITEM_THEME)
- {
- ui->page_theme->setPage(0);
- }
- else
- {
- };
- });
-}
-
-KiranCpanelAppearance::~KiranCpanelAppearance()
-{
- delete ui;
-}
-
-bool KiranCpanelAppearance::initUI()
-{
- //TODO:connect dbus if faile return false;
- setIcon(QIcon::fromTheme("kcp-appearance"));
-
- ui->listWidget->setIconSize(QSize(16, 16));
- addSidebarItem(tr("Wallpaper Setting"), ":/images/wallpaper.svg");
- addSidebarItem(tr("Theme Setting"), ":/images/themes.svg");
- addSidebarItem(tr("Font Setting"), ":/images/themes.svg");
-
- ui->listWidget->setCurrentRow(0);
- return true;
-}
-
-void KiranCpanelAppearance::addSidebarItem(QString text, QString icon)
-{
- QListWidgetItem *item = new QListWidgetItem(ui->listWidget);
- item->setIcon(QIcon(icon));
- item->setText(text);
- ui->listWidget->addItem(item);
-}
diff --git a/plugins/appearance/src/kiran-cpanel-appearance.h b/plugins/appearance/src/kiran-cpanel-appearance.h
deleted file mode 100644
index a5edb7c..0000000
--- a/plugins/appearance/src/kiran-cpanel-appearance.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright (c) 2020 ~ 2021 KylinSec Co., Ltd.
- * kiran-control-panel is licensed under Mulan PSL v2.
- * You can use this software according to the terms and conditions of the Mulan PSL v2.
- * You may obtain a copy of Mulan PSL v2 at:
- * http://license.coscl.org.cn/MulanPSL2
- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
- * See the Mulan PSL v2 for more details.
- *
- * Author: yuanxing <yuanxing@kylinsec.com.cn>
- */
-
-#ifndef KIRANCPANELAPPEARANCE_H
-#define KIRANCPANELAPPEARANCE_H
-#include <kiran-titlebar-window.h>
-
-#include <QWidget>
-
-namespace Ui
-{
-class KiranCpanelAppearance;
-}
-
-enum pages
-{
- PAGE_BACKGROUND = 0,
- PAGE_THEME,
- PAGE_FONT,
- PAGE_BACKGROND_SELECT,
- PAGE_ICON_THEME,
- PAGE_CURSOR_THEME
-};
-
-enum items
-{
- ITEM_BACKGROUND = 0,
- ITEM_THEME,
- ITEM_FONT
-};
-
-class QListWidgetItem;
-class KiranCpanelAppearance : public KiranTitlebarWindow
-{
- Q_OBJECT
-
-public:
- explicit KiranCpanelAppearance(QWidget *parent = 0);
- ~KiranCpanelAppearance();
-
-private:
- bool initUI();
- void addSidebarItem(QString, QString);
-
-private:
- Ui::KiranCpanelAppearance *ui;
-};
-
-#endif // KIRANCPANELAPPEARANCE_H
diff --git a/plugins/appearance/src/kiran-cpanel-appearance.ui b/plugins/appearance/src/kiran-cpanel-appearance.ui
deleted file mode 100644
index d2cdea5..0000000
--- a/plugins/appearance/src/kiran-cpanel-appearance.ui
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>KiranCpanelAppearance</class>
- <widget class="QWidget" name="KiranCpanelAppearance">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>712</width>
- <height>591</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>KiranCpanelAppearance</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QWidget" name="widget_sidebar" native="true">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="KiranSidebarWidget" name="listWidget">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximumSize">
- <size>
- <width>282</width>
- <height>16777215</height>
- </size>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QWidget" name="widget_page" native="true">
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QStackedWidget" name="stackedWidget">
- <widget class="Wallpaper" name="page_wallpaper"/>
- <widget class="Themes" name="page_theme"/>
- <widget class="Fonts" name="page_font"/>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- </layout>
- </widget>
- <layoutdefault spacing="6" margin="11"/>
- <customwidgets>
- <customwidget>
- <class>KiranSidebarWidget</class>
- <extends>QListWidget</extends>
- <header location="global">/usr/include/kiranwidgets-qt5/kiran-sidebar-widget.h</header>
- </customwidget>
- <customwidget>
- <class>Fonts</class>
- <extends>QWidget</extends>
- <header>pages/font/fonts.h</header>
- <container>1</container>
- </customwidget>
- <customwidget>
- <class>Themes</class>
- <extends>QWidget</extends>
- <header>pages/theme/themes.h</header>
- <container>1</container>
- </customwidget>
- <customwidget>
- <class>Wallpaper</class>
- <extends>QWidget</extends>
- <header>pages/wallpaper/wallpaper.h</header>
- <container>1</container>
- </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
diff --git a/plugins/appearance/src/pages/theme/icon-themes/icon-themes.cpp b/plugins/appearance/src/pages/theme/icon-themes/icon-themes.cpp
index 184ae66..6e6f614 100644
--- a/plugins/appearance/src/pages/theme/icon-themes/icon-themes.cpp
+++ b/plugins/appearance/src/pages/theme/icon-themes/icon-themes.cpp
@@ -13,9 +13,11 @@
*/
#include "icon-themes.h"
+
#include <kiran-log/qt5-log-i.h>
#include <kiran-session-daemon/appearance-i.h>
#include <kiranwidgets-qt5/kiran-message-box.h>
+
#include <QDir>
#include <QIcon>
#include <QJsonArray>
@@ -23,6 +25,7 @@
#include <QJsonObject>
#include <QJsonParseError>
#include <QVBoxLayout>
+
#include "../theme-widget-group.h"
#include "../theme-widget.h"
#include "dbus-interface/appearance-global-info.h"
@@ -49,7 +52,7 @@ IconThemes::~IconThemes()
bool IconThemes::initUI()
{
- if (!getIconThemes(APPEARANCE_THEME_TYPE_ICON))
+ if (!getIconThemes())
{
return false;
}
@@ -84,10 +87,10 @@ void IconThemes::updateIconTheme(QString newIconTheme)
* @return true 成功
* false 失败
*/
-bool IconThemes::getIconThemes(int themeType)
+bool IconThemes::getIconThemes()
{
QString iconThemesJson = nullptr;
- if (!AppearanceGlobalInfo::instance()->getAllThemes(themeType, iconThemesJson))
+ if (!AppearanceGlobalInfo::instance()->getAllThemes(APPEARANCE_THEME_TYPE_ICON, iconThemesJson))
{
return false;
}
@@ -103,44 +106,51 @@ int IconThemes::getJsonValueFromString(QString jsonString)
{
QJsonParseError jsonError;
QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonString.toLocal8Bit().data(), &jsonError);
+
if (jsonDocument.isNull() || jsonError.error != QJsonParseError::NoError)
{
- KLOG_ERROR() << " please check the string " << jsonString.toLocal8Bit().data();
+ KLOG_ERROR() << "parse icon theme json failed," << jsonString << jsonError.errorString() << jsonError.error;
+ return -1;
+ }
+
+ if( !jsonDocument.isArray() )
+ {
+ return 0;
+ }
+
+ QJsonArray array = jsonDocument.array();
+ if( array.size() < 1 )
+ {
return -1;
}
- if (jsonDocument.isArray())
+
+ for (int i = 0; i < array.size();i++)
{
- QJsonArray array = jsonDocument.array();
- int iconThemesNum = array.size();
- if (iconThemesNum < 1)
- return -1;
- for (int i = 0; i < iconThemesNum; i++)
+ QJsonValue value = array.at(i);
+ if( value.type() != QJsonValue::Object )
{
- QJsonValue value = array.at(i);
- if (value.type() == QJsonValue::Object)
- {
- QJsonObject themeInfoObj = value.toObject();
- if (themeInfoObj.contains("name"))
- {
- QJsonValue themeValue = themeInfoObj.value("name");
- if (themeValue.isString())
- {
- QString name = themeValue.toVariant().toString();
- m_iconThemes.insert(i, name);
- }
- }
- if (themeInfoObj.contains("path"))
- {
- QJsonValue themeValue = themeInfoObj.value("path");
- if (themeValue.isString())
- {
- QString path = themeValue.toVariant().toString();
- m_iconThemesPath.insert(i, path);
- }
- }
- }
+ continue;
}
+
+ QJsonObject themeInfoObj = value.toObject();
+ if( !themeInfoObj.contains("name") || !themeInfoObj.contains("path") )
+ {
+ KLOG_WARNING() << "parse getAllThemes json failed,Missing specific key(name/path)";
+ continue;
+ }
+ if( !themeInfoObj["name"].isString() || !themeInfoObj["path"].isString() )
+ {
+ KLOG_WARNING() << "parse getAllThemes json failed,Wrong key format(name/path)";
+ continue;
+ }
+
+ QString name = themeInfoObj["name"].toString();
+ m_iconThemes.append(name);
+
+ QString path = themeInfoObj["path"].toString();
+ m_iconThemesPath.append(path);
}
+
return m_iconThemes.size();
}
@@ -153,8 +163,10 @@ void IconThemes::createIconWidgets()
QVBoxLayout *vLayout = new QVBoxLayout(ui->widget_icon);
vLayout->setMargin(0);
vLayout->setSpacing(4);
+
for (int i = 0; i < m_iconThemes.size(); i++)
{
+
if (m_iconThemes.at(i).startsWith("Kiran", Qt::CaseInsensitive))
{
QString path = m_iconThemesPath.at(i) + "/apps/scalable/";
@@ -238,6 +250,7 @@ void IconThemes::createIconWidgets()
continue;
}
}
+
connect(m_iconThemeWidgetGroup, &ThemeWidgetGroup::themeWidgetChange,
[=](ThemeWidget *preWidget, ThemeWidget *currWidget) {
if (currWidget->getTheme() == m_currentIconTheme)
diff --git a/plugins/appearance/src/pages/theme/icon-themes/icon-themes.h b/plugins/appearance/src/pages/theme/icon-themes/icon-themes.h
index 1e57ee0..3a86516 100644
--- a/plugins/appearance/src/pages/theme/icon-themes/icon-themes.h
+++ b/plugins/appearance/src/pages/theme/icon-themes/icon-themes.h
@@ -34,7 +34,7 @@ public:
void updateIconTheme(QString newIconTheme);
private:
- bool getIconThemes(int themeType);
+ bool getIconThemes();
int getJsonValueFromString(QString jsonString);
void createIconWidgets();
--
2.33.0