From d1f1a182b540ae4b9c1c6fb35aa4ac0b5caebc9e Mon Sep 17 00:00:00 2001 From: liuxinhao 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 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> 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 - */ - -#include "kiran-cpanel-appearance.h" -#include -#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 - */ - -#ifndef KIRANCPANELAPPEARANCE_H -#define KIRANCPANELAPPEARANCE_H -#include - -#include - -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 @@ - - - KiranCpanelAppearance - - - - 0 - 0 - 712 - 591 - - - - KiranCpanelAppearance - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 282 - 16777215 - - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - - - - - - - - - - KiranSidebarWidget - QListWidget -
/usr/include/kiranwidgets-qt5/kiran-sidebar-widget.h
-
- - Fonts - QWidget -
pages/font/fonts.h
- 1 -
- - Themes - QWidget -
pages/theme/themes.h
- 1 -
- - Wallpaper - QWidget -
pages/wallpaper/wallpaper.h
- 1 -
-
- - -
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 #include #include + #include #include #include @@ -23,6 +25,7 @@ #include #include #include + #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