Merge branch '0902-newfrontend' into 'new-frontend'

Update changelog ukui-search3.1-1.1.1+0917.

See merge request kylin-desktop/ukui-search!141
This commit is contained in:
纪笑旭 2021-09-22 01:27:05 +00:00
commit 7b9e51f863
9 changed files with 8 additions and 718 deletions

8
debian/changelog vendored
View File

@ -1,3 +1,11 @@
ukui-search (3.1-1.1.1+0917) v101; urgency=medium
* Bug 81068,78036,73611,73609,73602
* 任务号:无
* 其他改动:无
-- zhangpengfei <zhangpengfei@kylinos.cn> Fri, 17 Sep 2021 11:30:30 +0800
ukui-search (3.1-1.1.0+0909) v101; urgency=medium ukui-search (3.1-1.1.0+0909) v101; urgency=medium
* Bug 77633,77578,77341,77922,77865,77655,77422,77382,77963,73760,73626 * Bug 77633,77578,77341,77922,77865,77655,77422,77382,77963,73760,73626

View File

@ -1,5 +1,4 @@
include(stack-pages/stack-pages.pri) include(stack-pages/stack-pages.pri)
include(flow-layout/flow-layout.pri)
include(list-labels/list-labels.pri) include(list-labels/list-labels.pri)
INCLUDEPATH += $$PWD INCLUDEPATH += $$PWD
@ -8,10 +7,8 @@ HEADERS += \
$$PWD/search-line-edit.h \ $$PWD/search-line-edit.h \
$$PWD/settings-widget.h \ $$PWD/settings-widget.h \
$$PWD/create-index-ask-dialog.h \ $$PWD/create-index-ask-dialog.h \
$$PWD/stacked-widget.h \
SOURCES += \ SOURCES += \
$$PWD/search-line-edit.cpp \ $$PWD/search-line-edit.cpp \
$$PWD/settings-widget.cpp \ $$PWD/settings-widget.cpp \
$$PWD/create-index-ask-dialog.cpp \ $$PWD/create-index-ask-dialog.cpp \
$$PWD/stacked-widget.cpp \

View File

@ -1,277 +0,0 @@
#include "home-page-section.h"
#define SQUARE_WIDTH 116
#define SQUARE_HEIGHT 116
#define SQUARE_ICON_SIZE 48
#define SQUARE_NAME_SIZE 108
#define BAR_WIDTH 300
#define BAR_HEIGHT 48
#define BAR_ICON_SIZE 24
#define BAR_NAME_SIZE 250
#define TITLE_HEIGHT 24
#define MAIN_LAYOUT_SPACING 6
#define ITEM_LAYOUT_SPACING 8
#define ITEM_RADIUS 4
#define ITEM_TRANS_NORMAL 0.06
#define ITEM_TRANS_HOVER 0.15
#define ITEM_TRANS_PRESS 0.06
#define ITEM_MARGINS 0,0,0,0
#define FLOW_LAYOUT_MARGIN 0
using namespace Zeeker;
HomePageSection::HomePageSection(QString title, HomePageItemShape shape, QWidget *parent) : QWidget(parent)
{
m_title = title;
m_shape = shape;
initUi();
}
HomePageSection::~HomePageSection()
{
if (m_itemsLyt) {
delete m_itemsLyt;
m_itemsLyt = NULL;
}
}
/**
* @brief HomePageSection::setItems
* @param itemList Item列表
*/
void HomePageSection::setItems(QVector<HomePageItem> itemList)
{
clear();
if (m_shape == HomePageItemShape::Square) {
Q_FOREACH (HomePageItem item, itemList) {
m_itemsLyt->addWidget(createSquareItem(item));
}
int line_num = ceil(double(itemList.length())/5);
this->setFixedHeight(TITLE_HEIGHT + MAIN_LAYOUT_SPACING + ITEM_LAYOUT_SPACING*(line_num-1) + SQUARE_HEIGHT*line_num);
} else {
Q_FOREACH (HomePageItem item, itemList) {
m_itemsLyt->addWidget(createBarItem(item));
}
int line_num = ceil(double(itemList.length())/2);
this->setFixedHeight(TITLE_HEIGHT + MAIN_LAYOUT_SPACING + ITEM_LAYOUT_SPACING*(line_num-1) + BAR_HEIGHT*line_num);
}
m_length = itemList.length();
}
int HomePageSection::length()
{
return m_length;
}
///**
// * @brief HomePageSection::appendItem 添加一项
// * @param item 要添加的item
// */
//void HomePageSection::appendItem(HomePageItem item)
//{
// if (m_shape == HomePageItemShape::Square) {
// m_itemsLyt->addWidget(createSquareItem(item));
// } else {
// m_itemsLyt->addWidget(createBarItem(item));
// }
// m_length++;
//}
//NEW_TODO
///**
// * @brief HomePageSection::insertItem 插入一项
// * @param index 插入位置
// * @param item 要插入的item
// */
//void HomePageSection::insertItem(const int &index, const HomePageSection::HomePageItem &item)
//{
//}
///**
// * @brief HomePageSection::removeOne 删除一项
// * @param key HomePageSection的key用来寻找item
// */
//void HomePageSection::removeOne(const QString &key)
//{
// Q_FOREACH (ItemWidget * item, m_itemsLyt->findChildren<ItemWidget *>()) {
// if (item->objectName() == key) {
// delete item;
// item = NULL;
// break;
// }
// }
//}
/**
* @brief HomePageSection::clear
*/
void HomePageSection::clear()
{
if(! m_itemsLyt) return;
QLayoutItem * item;
while((item = m_itemsLyt->takeAt(0)) != 0) {
if(item->widget()) {
item->widget()->setParent(NULL); //防止删除后窗口看上去没有消失
}
delete item;
}
item = NULL;
this->setFixedHeight(0);
m_length = 0;
}
/**
* @brief HomePageSection::initUi
*/
void HomePageSection::initUi()
{
m_mainLyt = new QVBoxLayout(this);
m_mainLyt->setContentsMargins(ITEM_MARGINS);
this->setLayout(m_mainLyt);
m_titleLabel = new QLabel(this);
m_titleLabel->setFixedHeight(TITLE_HEIGHT);
m_titleLabel->setText(m_title);
m_itemWidget = new QWidget(this);
m_mainLyt->setSpacing(MAIN_LAYOUT_SPACING);
m_itemsLyt = new FlowLayout(m_itemWidget, FLOW_LAYOUT_MARGIN, ITEM_LAYOUT_SPACING, ITEM_LAYOUT_SPACING);
m_itemWidget->setLayout(m_itemsLyt);
m_mainLyt->addWidget(m_titleLabel);
m_mainLyt->addWidget(m_itemWidget);
}
///**
// * @brief HomePageSection::resize 重新计算此窗口size
// */
//void HomePageSection::resize()
//{
//}
/**
* @brief HomePageSection::createSquareItem
* @param item
* @return
*/
ItemWidget *HomePageSection::createSquareItem(const HomePageItem &item)
{
ItemWidget * square_item = new ItemWidget(m_itemWidget, HomePageItemShape::Square, item);
square_item->setObjectName(item.key);
connect(square_item, &ItemWidget::clicked, this, &HomePageSection::requestAction);
return square_item;
}
/**
* @brief HomePageSection::createBarItem
* @param item
* @return
*/
ItemWidget *HomePageSection::createBarItem(const HomePageItem &item)
{
ItemWidget * bar_item = new ItemWidget(m_itemWidget, HomePageItemShape::Bar, item);
bar_item->setObjectName(item.key);
connect(bar_item, &ItemWidget::clicked, this, &HomePageSection::requestAction);
return bar_item;
}
/**
* @brief ItemWidget::ItemWidget flowlayout中的每个小窗格
* @param parent
* @param shape
* @param item
*/
ItemWidget::ItemWidget(QWidget *parent, const HomePageItemShape &shape, const HomePageItem &item) : QWidget(parent) {
this->initUi(shape, item.name, item.icon);
m_item = item;
this->installEventFilter(this);
this->setToolTip(item.name);
m_transparency = ITEM_TRANS_NORMAL;
connect(qApp, &QApplication::paletteChanged, this, [ = ]() {
if(m_namelabel) {
QString name = this->toolTip();
if(shape == HomePageItemShape::Square) {
m_namelabel->setText(m_namelabel->fontMetrics().elidedText(name, Qt::ElideRight, SQUARE_NAME_SIZE));
} else {
m_namelabel->setText(m_namelabel->fontMetrics().elidedText(name, Qt::ElideRight, BAR_NAME_SIZE));
}
}
});
}
/**
* @brief HomePageItem::setupUi item
* @param shape
* @param name
* @param icon
*/
void ItemWidget::initUi(HomePageItemShape shape, const QString& name, const QIcon& icon) {
m_iconlabel = new QLabel(this);
m_namelabel = new QLabel(this);
m_iconlabel->setAlignment(Qt::AlignCenter);
m_namelabel->setAlignment(Qt::AlignCenter);
if (shape == HomePageItemShape::Square) {
m_vlayout = new QVBoxLayout(this);
this->setLayout(m_vlayout);
m_iconlabel->setPixmap(icon.pixmap(icon.actualSize(QSize(SQUARE_ICON_SIZE, SQUARE_ICON_SIZE))));
m_namelabel->setText(m_namelabel->fontMetrics().elidedText(name, Qt::ElideRight, SQUARE_NAME_SIZE));
m_vlayout->addWidget(m_iconlabel);
m_vlayout->addWidget(m_namelabel);
this->setFixedSize(SQUARE_WIDTH, SQUARE_HEIGHT);
} else {
m_hlayout = new QHBoxLayout(this);
this->setLayout(m_hlayout);
m_iconlabel->setPixmap(icon.pixmap(icon.actualSize(QSize(BAR_ICON_SIZE, BAR_ICON_SIZE))));
m_namelabel->setText(m_namelabel->fontMetrics().elidedText(name, Qt::ElideRight, BAR_NAME_SIZE));
m_hlayout->addWidget(m_iconlabel);
m_hlayout->addWidget(m_namelabel);
m_hlayout->addStretch();
this->setFixedSize(BAR_WIDTH, BAR_HEIGHT);
}
}
/**
* @brief ItemWidget::eventFilter
* @param watched
* @param event
* @return
*/
bool ItemWidget::eventFilter(QObject *watched, QEvent *event) {
if(watched == this) {
if(event->type() == QEvent::MouseButtonPress) {
m_transparency = ITEM_TRANS_PRESS;
this->update();
return true;
} else if(event->type() == QEvent::MouseButtonRelease) {
Q_EMIT this->clicked(m_item.key, m_item.action, m_item.pluginId);
m_transparency = ITEM_TRANS_NORMAL;
this->update();
return true;
} else if(event->type() == QEvent::Enter) {
m_transparency = ITEM_TRANS_HOVER;
this->update();
return true;
} else if(event->type() == QEvent::Leave) {
m_transparency = ITEM_TRANS_NORMAL;
this->update();
return true;
}
}
return QObject::eventFilter(watched, event);
}
void ItemWidget::paintEvent(QPaintEvent *event) {
Q_UNUSED(event)
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
QRect rect = this->rect();
p.setRenderHint(QPainter::Antialiasing); // 反锯齿;
p.setBrush(opt.palette.color(QPalette::Text));
p.setOpacity(m_transparency);
p.setPen(Qt::NoPen);
p.drawRoundedRect(rect, ITEM_RADIUS, ITEM_RADIUS);
return QWidget::paintEvent(event);
}

View File

@ -1,90 +0,0 @@
#ifndef HOMEPAGESECTION_H
#define HOMEPAGESECTION_H
#include <QWidget>
#include <QLabel>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QEvent>
#include <QDebug>
#include <QPainter>
#include <QApplication>
#include <QStyleOption>
#include <math.h>
#include "flow-layout/flow-layout.h"
namespace Zeeker {
enum class HomePageItemShape {
Square = 0,
Bar
};
struct HomePageItem
{
QIcon icon;
QString name;
QString key;
QString action;
QString pluginId;
};
class ItemWidget : public QWidget {
Q_OBJECT
public:
explicit ItemWidget(QWidget *, const HomePageItemShape &, const HomePageItem &);
~ItemWidget() = default;
protected:
bool eventFilter(QObject *, QEvent *);
void paintEvent(QPaintEvent *);
private:
void initUi(HomePageItemShape, const QString&, const QIcon&);
QHBoxLayout * m_hlayout = nullptr;
QVBoxLayout * m_vlayout = nullptr;
QLabel * m_iconlabel = nullptr;
QLabel * m_namelabel = nullptr;
double m_transparency = 0;
HomePageItem m_item;
Q_SIGNALS:
void clicked(const QString &key, const QString &action, const QString &pluginId);
};
class HomePageSection : public QWidget
{
Q_OBJECT
public:
explicit HomePageSection(QString title, HomePageItemShape shape = HomePageItemShape::Square, QWidget *parent = nullptr);
~HomePageSection();
void setItems(QVector<HomePageItem> itemList);
int length();
// void appendItem(HomePageItem item);
// void insertItem(const int &index, const HomePageItem &item);
// void removeOne(const QString &key);
void clear();
Q_SIGNALS:
//emit on HomePageItem clicked
void requestAction(const QString &key, const QString &action, const QString &pluginId);
private:
QString m_title;
QVector<HomePageItem> m_items;
void initUi();
// void resize();
QVBoxLayout * m_mainLyt = nullptr;
QLabel * m_titleLabel = nullptr;
QWidget *m_itemWidget = nullptr;
FlowLayout * m_itemsLyt = nullptr;
HomePageItemShape m_shape;
int m_length;
ItemWidget* createSquareItem(const HomePageItem &item);
ItemWidget* createBarItem(const HomePageItem &item);
};
}
#endif // HOMEPAGESECTION_H

View File

@ -1,139 +0,0 @@
/*
*
* Copyright (C) 2020, KylinSoft Co., Ltd.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* Authors: zhangjiaping <zhangjiaping@kylinos.cn>
*
*/
#include "home-page.h"
using namespace Zeeker;
#define BACKGROUND_COLOR QColor(0, 0, 0, 0)
#define MAIN_SPACING 16
#define MAIN_MARGINS 0,0,0,0
HomePage::HomePage(QWidget *parent) : QScrollArea(parent)
{
initUi();
registerSections();
}
void HomePage::initUi()
{
QPalette pal = palette();
pal.setColor(QPalette::Base, BACKGROUND_COLOR);
pal.setColor(QPalette::Window, BACKGROUND_COLOR); //使用此palette的窗口背景将为透明
m_widget = new QWidget(this);
this->setWidget(m_widget);
m_mainLyt = new QVBoxLayout(m_widget);
m_mainLyt->setSpacing(MAIN_SPACING);
m_mainLyt->setContentsMargins(MAIN_MARGINS);
m_widget->setLayout(m_mainLyt);
m_widget->setFixedWidth(this->width());
this->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
this->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
this->setPalette(pal);
this->setFrameShape(QFrame::Shape::NoFrame);
}
/**
* @brief HomePage::appendSection homepgae添加一个版块
* @param section
*/
void HomePage::appendSection(HomePageSection *section)
{
section->setFixedWidth(this->width());
m_mainLyt->addWidget(section);
if (m_widget->height()) {
m_widget->setFixedHeight(m_widget->height() + section->height() + MAIN_SPACING);
} else {
m_widget->setFixedHeight(m_widget->height() + section->height());
}
}
//以下为homepage各版块的信息获取的回调
//NEW_TODO
//获取快速打开应用的列表
QVector<HomePageItem> get_quickly_cb()
{
QVector<HomePageItem> quickly_list;
QStringList quicklyOpenList;
quicklyOpenList << "/usr/share/applications/ksc-defender.desktop"
<< "/usr/share/applications/ukui-notebook.desktop"
<< "/usr/share/applications/eom.desktop"
<< "/usr/share/applications/pluma.desktop"
<< "/usr/share/applications/claws-mail.desktop" ;
Q_FOREACH (QString path, quicklyOpenList) {
if (QString::compare(FileUtils::getAppName(path), "Unknown App") == 0)
continue;
HomePageItem item;
item.icon = FileUtils::getAppIcon(path);
item.name = FileUtils::getAppName(path);
item.key = path;
item.action = "open";
item.pluginId = "applications";
quickly_list.append(item);
}
return quickly_list;
}
//NEW_TODO 需要读写配置文件
//获取最近打开的列表
QVector<HomePageItem> get_recently_cb()
{
// QVector<HomePageItem> recently_list;
// return recently_list;
return get_quickly_cb();
}
//NEW_TODO 需要读写配置文件
//获取常用应用的列表
QVector<HomePageItem> get_commonly_cb()
{
// QVector<HomePageItem> commonly_list;
// return commonly_list;
return get_quickly_cb();
}
/**
* @brief HomePage::registerSections
*/
void HomePage::registerSections()
{
//快速打开
createSection(tr("Open Quickly"), HomePageItemShape::Square, get_quickly_cb());
//最近打开
createSection(tr("Recently Opened"), HomePageItemShape::Bar, get_recently_cb());
//常用应用
createSection(tr("Commonly Used"), HomePageItemShape::Square, get_commonly_cb());
}
void HomePage::createSection(const QString &section_name, const HomePageItemShape &shape, QVector<HomePageItem> items)
{
HomePageSection *section = new HomePageSection(section_name, shape, m_widget);
section->setItems(items);
if (section->length())
this->appendSection(section);
connect(section, &HomePageSection::requestAction, this, [ = ](const QString &key, const QString &action, const QString &pluginId) {
SearchPluginIface *plugin = SearchPluginManager::getInstance()->getPlugin(pluginId);
// if (plugin) {
// plugin->openAction(action, key);
// } else {
// qWarning()<<"Get plugin failed!";
// }
});
}

View File

@ -1,50 +0,0 @@
/*
*
* Copyright (C) 2020, KylinSoft Co., Ltd.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* Authors: zhangjiaping <zhangjiaping@kylinos.cn>
*
*/
#ifndef HOMEPAGE_H
#define HOMEPAGE_H
#include <QScrollArea>
#include "home-page-section.h"
#include "file-utils.h"
#include "pluginmanage/search-plugin-manager.h"
namespace Zeeker {
class HomePage : public QScrollArea
{
Q_OBJECT
public:
explicit HomePage(QWidget *parent = nullptr);
~HomePage() = default;
private:
void initUi();
void appendSection(HomePageSection *);
QWidget * m_widget = nullptr;
QVBoxLayout * m_mainLyt = nullptr;
void registerSections();
void createSection(const QString &, const HomePageItemShape &, QVector<HomePageItem>);
Q_SIGNALS:
};
}
#endif // HOMEPAGE_H

View File

@ -1,13 +1,9 @@
INCLUDEPATH += $$PWD INCLUDEPATH += $$PWD
HEADERS += \ HEADERS += \
$$PWD/home-page-section.h \
$$PWD/home-page.h \
$$PWD/search-page-section.h \ $$PWD/search-page-section.h \
$$PWD/search-result-page.h $$PWD/search-result-page.h
SOURCES += \ SOURCES += \
$$PWD/home-page-section.cpp \
$$PWD/home-page.cpp \
$$PWD/search-page-section.cpp \ $$PWD/search-page-section.cpp \
$$PWD/search-result-page.cpp $$PWD/search-result-page.cpp

View File

@ -1,92 +0,0 @@
/*
*
* Copyright (C) 2020, KylinSoft Co., Ltd.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* Authors: zhangjiaping <zhangjiaping@kylinos.cn>
*
*/
#include "stacked-widget.h"
using namespace Zeeker;
Zeeker::StackedWidget::StackedWidget(QWidget *)
{
this->initWidgets();
this->initConnections();
}
Zeeker::StackedWidget::~StackedWidget()
{
if (m_homePage) {
delete m_homePage;
m_homePage = NULL;
}
// if (m_searchPage) {
// delete m_searchPage;
// m_searchPage = NULL;
// }
}
/**
* @brief StackedWidget::setPage StackedWidget所显示页面
* @param type
*/
void StackedWidget::setPage(const int & type)
{
this->setCurrentIndex(type);
}
int StackedWidget::currentPage()
{
return this->currentIndex();
}
/**
* @brief StackedWidget::setPlugins
*/
void StackedWidget::setPlugins(const QStringList &plugins)
{
// m_searchPage->setPlugins(plugins);
}
/**
* @brief StackedWidget::addPlugin
*/
void StackedWidget::appendPlugin(const QString &plugin)
{
// m_searchPage->appendPlugin(plugin);
}
/**
* @brief StackedWidget::initWidgets stackedwidget添加窗口
*/
void StackedWidget::initWidgets()
{
//NEW_TODO
// m_homePage = new HomePage;
// this->insertWidget(int(StackedPage::HomePage), m_homePage);
// this->setPage(int(StackedPage::HomePage));
// m_searchPage = new SearchPage;
// m_searchPage->setSize(this->width(), this->height());
// this->insertWidget(int(StackedPage::SearchPage), m_searchPage);
}
void StackedWidget::initConnections()
{
// connect(this, &StackedWidget::startSearch, m_searchPage, &SearchPage::startSearch);
// connect(this, &StackedWidget::stopSearch, m_searchPage, &SearchPage::stopSearch);
// connect(m_searchPage, &SearchPage::effectiveSearch, this, &StackedWidget::effectiveSearch);
}

View File

@ -1,63 +0,0 @@
/*
*
* Copyright (C) 2020, KylinSoft Co., Ltd.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* Authors: zhangjiaping <zhangjiaping@kylinos.cn>
*
*/
#ifndef STACKEDWIDGET_H
#define STACKEDWIDGET_H
#include <QObject>
#include <QStackedWidget>
#include "search-line-edit.h"
#include "home-page.h"
#include "search-result-page.h"
namespace Zeeker {
enum class StackedPage {
HomePage = 0,
SearchPage
};
class StackedWidget : public QStackedWidget {
Q_OBJECT
public:
StackedWidget(QWidget *);
~StackedWidget();
void setPage(const int &);
int currentPage();
void setPlugins(const QStringList&);
void appendPlugin(const QString&);
Q_SIGNALS:
void startSearch(const QString &);
void stopSearch();
void effectiveSearch();
private: void initWidgets();
void initConnections();
QString m_keyword;
HomePage * m_homePage = nullptr;
// SearchPage * m_searchPage = nullptr;
// StackedPage m_current_page;
};
}
#endif // STACKEDWIDGET_H