ukui-search/src/content-widget.cpp

829 lines
31 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
*
* 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 "content-widget.h"
#include <QDebug>
#include <QLabel>
#include <QTimer>
#include "config-file.h"
using namespace Zeeker;
ContentWidget::ContentWidget(QWidget * parent): QStackedWidget(parent) {
initUI();
initListView();
//快速入口应用列表
// m_quicklyOpenList<<"/usr/share/applications/peony.desktop"<<"/usr/share/applications/ukui-control-center.desktop"<<"/usr/share/applications/ksc-defender.desktop";
m_quicklyOpenList << "/usr/share/applications/ksc-defender.desktop"
<< "/usr/share/applications/ukui-notebook.desktop"
<< "/usr/share/applications/kylin-photo-viewer.desktop"
<< "/usr/share/applications/pluma.desktop"
<< "/usr/share/applications/claws-mail.desktop" ;
if (QString::compare(FileUtils::getAppName(m_quicklyOpenList.at(2)), "Unknown App") == 0) {
m_quicklyOpenList.replace(2, "/usr/share/applications/eom.desktop");
}
if (QString::compare(FileUtils::getAppName(m_quicklyOpenList.at(4)), "Unknown App") == 0) {
m_quicklyOpenList.replace(4, "/usr/share/applications/evolution.desktop");
}
}
ContentWidget::~ContentWidget() {
if(m_homePage) {
delete m_homePage;
m_homePage = nullptr;
}
if(m_resultPage) {
delete m_resultPage;
m_resultPage = nullptr;
}
}
/**
* @brief initUI 初始化homepage和resultpage
*/
void ContentWidget::initUI() {
this->setFixedHeight(486);
QPalette pal = palette();
QPalette scroll_bar_pal = palette();
// pal.setColor(QPalette::Base, QColor(0, 0, 0, 0));
pal.setColor(QPalette::Window, QColor(0, 0, 0, 0)); //使用此palette的窗口背景将为透明
scroll_bar_pal.setColor(QPalette::Base, QColor(0, 0, 0, 0));
m_homePage = new QWidget(this);
m_homePageLyt = new QVBoxLayout(m_homePage);
m_homePageLyt->setSpacing(0);
m_homePageLyt->setContentsMargins(0, 0, 0, 0);
m_homePage->setLayout(m_homePageLyt);
m_resultPage = new QWidget(this);
m_resultPageLyt = new QHBoxLayout(m_resultPage);
m_resultPageLyt->setSpacing(0);
m_resultPageLyt->setContentsMargins(0, 0, 0, 0);
m_resultListArea = new QScrollArea(m_resultPage);
m_resultListArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_resultListArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
m_resultDetailArea = new QScrollArea(m_resultPage);
m_resultDetailArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_resultDetailArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
m_resultListArea->setFixedWidth(280);
m_resultPageLyt->addWidget(m_resultListArea);
m_resultPageLyt->addWidget(m_resultDetailArea);
m_resultPage->setLayout(m_resultPageLyt);
m_resultList = new QWidget(m_resultListArea);
m_resultDetail = new QWidget(m_resultDetailArea);
m_listLyt = new QVBoxLayout(m_resultList);
m_detailLyt = new QVBoxLayout(m_resultDetail);
//需要给滚动条留出16个像素点的宽度
m_resultList->setFixedWidth(280 - 16);
m_resultList->setFixedHeight(0);
m_listLyt->setContentsMargins(0, 0, 0, 0);
m_listLyt->setSpacing(0);
m_resultListArea->setWidget(m_resultList);
m_resultListArea->setWidgetResizable(true);
m_detailView = new SearchDetailView(m_resultDetailArea);
connect(m_detailView, &SearchDetailView::configFileChanged, this, [ = ]() {
clearLayout(m_homePageLyt);
initHomePage();
});
connect(m_detailView, &SearchDetailView::actionTriggerd, this, &ContentWidget::effectiveSearch);
m_resultDetailArea->setWidget(m_detailView);
m_resultDetailArea->setWidgetResizable(true);
m_resultListArea->setFrameShape(QFrame::NoFrame);
m_resultDetailArea->setFrameShape(QFrame::NoFrame);
m_resultListArea->setPalette(pal);
m_resultDetailArea->setPalette(pal);
m_resultListArea->verticalScrollBar()->setPalette(scroll_bar_pal);
m_resultDetailArea->verticalScrollBar()->setPalette(scroll_bar_pal);
this->addWidget(m_homePage);
this->addWidget(m_resultPage);
setPage(SearchItem::SearchType::Best);//初始化按“最佳”加载
}
/**
* @brief ContentWidget::initListView 初始化所有搜索结果列表
*/
void ContentWidget::initListView() {
m_fileListView = new SearchListView(m_resultList, QStringList(), SearchItem::SearchType::Files);
m_dirListView = new SearchListView(m_resultList, QStringList(), SearchItem::SearchType::Dirs);
m_contentListView = new SearchListView(m_resultList, QStringList(), SearchItem::SearchType::Contents);
m_settingListView = new SearchListView(m_resultList, QStringList(), SearchItem::SearchType::Settings);
m_appListView = new SearchListView(m_resultList, QStringList(), SearchItem::SearchType::Apps);
m_bestListView = new SearchListView(m_resultList, QStringList(), SearchItem::SearchType::Best);
m_webListView = new SearchListView(m_resultList, QStringList(), SearchItem::SearchType::Web);
setupConnect(m_fileListView);
setupConnect(m_dirListView);
setupConnect(m_contentListView);
setupConnect(m_settingListView);
setupConnect(m_appListView);
setupConnect(m_bestListView);
setupConnect(m_webListView);
m_fileTitleLabel = new TitleLabel(m_resultList);
m_fileTitleLabel->setText(getTitleName(SearchItem::SearchType::Files));
m_dirTitleLabel = new TitleLabel(m_resultList);
m_dirTitleLabel->setText(getTitleName(SearchItem::SearchType::Dirs));
m_contentTitleLabel = new TitleLabel(m_resultList);
m_contentTitleLabel->setText(getTitleName(SearchItem::SearchType::Contents));
m_appTitleLabel = new TitleLabel(m_resultList);
m_appTitleLabel->setText(getTitleName(SearchItem::SearchType::Apps));
m_settingTitleLabel = new TitleLabel(m_resultList);
m_settingTitleLabel->setText(getTitleName(SearchItem::SearchType::Settings));
m_bestTitleLabel = new TitleLabel(m_resultList);
m_bestTitleLabel->setText(getTitleName(SearchItem::SearchType::Best));
m_webTitleLabel = new TitleLabel(m_resultList);
m_webTitleLabel->setText(getTitleName(SearchItem::SearchType::Web));
m_appShowMoreLabel = new ShowMoreLabel(m_resultList);
m_settingShowMoreLabel = new ShowMoreLabel(m_resultList);
m_dirShowMoreLabel = new ShowMoreLabel(m_resultList);
m_fileShowMoreLabel = new ShowMoreLabel(m_resultList);
m_contentShowMoreLabel = new ShowMoreLabel(m_resultList);
m_listLyt->addWidget(m_bestTitleLabel);
m_listLyt->addWidget(m_bestListView);
m_listLyt->addWidget(m_appTitleLabel);
m_listLyt->addWidget(m_appListView);
m_listLyt->addWidget(m_appShowMoreLabel);
m_listLyt->addWidget(m_settingTitleLabel);
m_listLyt->addWidget(m_settingListView);
m_listLyt->addWidget(m_settingShowMoreLabel);
m_listLyt->addWidget(m_dirTitleLabel);
m_listLyt->addWidget(m_dirListView);
m_listLyt->addWidget(m_dirShowMoreLabel);
m_listLyt->addWidget(m_fileTitleLabel);
m_listLyt->addWidget(m_fileListView);
m_listLyt->addWidget(m_fileShowMoreLabel);
m_listLyt->addWidget(m_contentTitleLabel);
m_listLyt->addWidget(m_contentListView);
m_listLyt->addWidget(m_contentShowMoreLabel);
m_listLyt->addWidget(m_webTitleLabel);
m_listLyt->addWidget(m_webListView);
this->hideListView();
m_resultList->setFixedHeight(0);
m_resultListArea->setFocusProxy(m_bestListView);
m_bestListView->setFocus();
connect(m_appShowMoreLabel, &ShowMoreLabel::showMoreClicked, this, [ = ]() {
m_appListView->setList(m_appList);
m_appShowMoreLabel->stopLoading();
this->resetListHeight();
m_resultListArea->setFocusProxy(m_appListView);
m_appListView->setFocus();
});
connect(m_appShowMoreLabel, &ShowMoreLabel::retractClicked, this, [ = ]() {
m_appListView->setList(m_appList.mid(0, 5));
m_appShowMoreLabel->stopLoading();
this->resetListHeight();
});
connect(m_settingShowMoreLabel, &ShowMoreLabel::showMoreClicked, this, [ = ]() {
m_settingListView->setList(m_settingList);
m_settingShowMoreLabel->stopLoading();
this->resetListHeight();
m_resultListArea->setFocusProxy(m_settingListView);
m_settingListView->setFocus();
});
connect(m_settingShowMoreLabel, &ShowMoreLabel::retractClicked, this, [ = ]() {
m_settingListView->setList(m_settingList.mid(0, 5));
m_settingShowMoreLabel->stopLoading();
this->resetListHeight();
});
connect(m_dirShowMoreLabel, &ShowMoreLabel::showMoreClicked, this, [ = ]() {
m_dirListView->setList(m_dirList);
m_dirShowMoreLabel->stopLoading();
this->resetListHeight();
m_resultListArea->setFocusProxy(m_dirListView);
m_dirListView->setFocus();
});
connect(m_dirShowMoreLabel, &ShowMoreLabel::retractClicked, this, [ = ]() {
m_dirListView->setList(m_dirList.mid(0, 5));
m_dirShowMoreLabel->stopLoading();
this->resetListHeight();
});
connect(m_fileShowMoreLabel, &ShowMoreLabel::showMoreClicked, this, [ = ]() {
m_fileListView->setList(m_fileList);
m_fileShowMoreLabel->stopLoading();
this->resetListHeight();
m_resultListArea->setFocusProxy(m_fileListView);
m_fileListView->setFocus();
});
connect(m_fileShowMoreLabel, &ShowMoreLabel::retractClicked, this, [ = ]() {
m_fileListView->setList(m_fileList.mid(0, 5));
m_fileShowMoreLabel->stopLoading();
this->resetListHeight();
});
connect(m_contentShowMoreLabel, &ShowMoreLabel::showMoreClicked, this, [ = ]() {
m_contentListView->setList(m_contentList);
m_contentShowMoreLabel->stopLoading();
this->resetListHeight();
m_resultListArea->setFocusProxy(m_contentListView);
m_contentListView->setFocus();
});
connect(m_contentShowMoreLabel, &ShowMoreLabel::retractClicked, this, [ = ]() {
m_contentListView->setList(m_contentList.mid(0, 5));
m_contentShowMoreLabel->stopLoading();
this->resetListHeight();
});
connect(qApp, &QApplication::paletteChanged, this, [ = ]() {
m_fileListView->refresh();
m_dirListView->refresh();
m_contentListView->refresh();
m_settingListView->refresh();
m_appListView->refresh();
m_bestListView->refresh();
m_webListView->refresh();
this->resetListHeight();
});
}
/**
* @brief ContentWidget::hideListView 隐藏所有列表
*/
void ContentWidget::hideListView() {
m_bestTitleLabel->hide();
m_bestListView->hide();
m_appTitleLabel->hide();
m_appListView->hide();
m_appShowMoreLabel->hide();
m_settingTitleLabel->hide();
m_settingListView->hide();
m_settingShowMoreLabel->hide();
m_dirTitleLabel->hide();
m_dirListView->hide();
m_dirShowMoreLabel->hide();
m_fileTitleLabel->hide();
m_fileListView->hide();
m_fileShowMoreLabel->hide();
m_contentTitleLabel->hide();
m_contentListView->hide();
m_contentShowMoreLabel->hide();
m_webTitleLabel->hide();
m_webListView->hide();
}
/**
* @brief ContentWidget::setupConnect 初始化各个treeview的信号与槽
* @param listview
*/
void ContentWidget::setupConnect(SearchListView * listview) {
connect(this, &ContentWidget::currentItemChanged, listview, [ = ]() {
if(! listview->is_current_list) {
listview->blockSignals(true);
listview->clearSelection();
listview->blockSignals(false);
}
});
connect(listview, &SearchListView::currentSelectPos, [ = ](QPoint pos) {
m_resultListArea->ensureVisible(pos.x(), pos.y());
});
connect(listview, &SearchListView::mousePressed, this, &ContentWidget::effectiveSearch);
connect(listview, &SearchListView::currentRowChanged, this, &ContentWidget::onListViewRowChanged);
connect(listview, &SearchListView::onRowDoubleClicked, this, &ContentWidget::onListViewRowDoubleClicked);
}
/**
* @brief ContentWidget::resetHeight 重新计算列表高度
*/
void ContentWidget::resetListHeight() {
int height = 0;
if(! m_bestListView->isHidden) {
height += m_bestTitleLabel->height();
height += m_bestListView->height();
}
if(! m_appListView->isHidden) {
height += m_appTitleLabel->height();
height += m_appListView->height();
if(m_appShowMoreLabel->isVisible()) {
height += m_appShowMoreLabel->height();
}
}
if(! m_settingListView->isHidden) {
height += m_settingTitleLabel->height();
height += m_settingListView->height();
if(m_settingShowMoreLabel->isVisible()) {
height += m_settingShowMoreLabel->height();
}
}
if(! m_fileListView->isHidden) {
height += m_fileTitleLabel->height();
height += m_fileListView->height();
if(m_fileShowMoreLabel->isVisible()) {
height += m_fileShowMoreLabel->height();
}
}
if(! m_dirListView->isHidden) {
height += m_dirTitleLabel->height();
height += m_dirListView->height();
if(m_dirShowMoreLabel->isVisible()) {
height += m_dirShowMoreLabel->height();
}
}
if(! m_contentListView->isHidden) {
height += m_contentTitleLabel->height();
height += m_contentListView->height();
if(m_contentShowMoreLabel->isVisible()) {
height += m_contentShowMoreLabel->height();
}
}
if(! m_webListView->isHidden) {
height += m_webTitleLabel->height();
height += m_webListView->height();
}
m_resultList->setFixedHeight(height);
}
void ContentWidget::appendBestItem(const int &type, const QString &path) {
m_bestList.append(QPair<int, QString>(type, path));
m_bestListView->appendBestItem(QPair<int, QString>(type, path));
appendSearchItem(SearchItem::SearchType::Best, path);
}
/**
* @brief ContentWidget::initHomePage 向homepage填充内容
* @param lists 三个列表:常用,最近,快捷
*/
void ContentWidget::initHomePage() {
QVector<QStringList> lists;
QMap<QString, QStringList> map = ConfigFile::readConfig();
QStringList commonlyList;
commonlyList = map.value("Commonly");
QStringList recentlyList;
recentlyList = map.value("Recently");
lists.append(m_quicklyOpenList);
lists.append(recentlyList);
lists.append(commonlyList);
for(int i = 0; i < lists.count(); i++) {
if(lists.at(i).isEmpty())
continue;
QWidget * listWidget = new QWidget(m_homePage);
QVBoxLayout * itemWidgetLyt = new QVBoxLayout(listWidget);
QLabel * titleLabel = new QLabel(listWidget);
QWidget * itemWidget = new QWidget(listWidget);
if(i == 1) {
if(lists.at(i).length() <= 2) itemWidget->setFixedHeight(48);
else itemWidget->setFixedHeight(104);
titleLabel->setText(tr("Recently Opened"));
QGridLayout * layout = new QGridLayout(itemWidget);
layout->setSpacing(8);
layout->setContentsMargins(0, 0, 0, 0);
itemWidget->setLayout(layout);
for(int j = 0; j < lists.at(i).count(); j++) {
HomePageItem * item = new HomePageItem(itemWidget, i, lists.at(i).at(j));
item->setFixedSize(312, 48);
layout->addWidget(item, j / 2, j % 2);
}
if(lists.at(i).length() == 1) {
QWidget * emptyItem = new QWidget(itemWidget);
emptyItem->setFixedSize(300, 48); //占位用widget,只有一项时在右方补全
layout->addWidget(emptyItem, 1, 2);
}
} else {
itemWidget->setFixedHeight(116);
QHBoxLayout * layout = new QHBoxLayout(itemWidget);
layout->setSpacing(8);
layout->setContentsMargins(0, 0, 0, 0);
itemWidget->setLayout(layout);
int shownItem = lists.at(i).length();
Q_FOREACH(QString path, lists.at(i)) {
if(i == 0 && QString::compare(FileUtils::getAppName(path), "Unknown App") == 0) {
shownItem --;
continue;
}
HomePageItem * item = new HomePageItem(itemWidget, i, path);
item->setFixedSize(116, 116);
layout->addWidget(item);
}
for(int j = 0; j < 5 - shownItem; j++) {
QWidget * emptyItem = new QWidget(itemWidget);
emptyItem->setFixedSize(116, 116); //占位用widget,少于5项会补全后方占位
layout->addWidget(emptyItem);
}
if(i == 0 && shownItem) titleLabel->setText(tr("Open Quickly"));
else titleLabel->setText(tr("Commonly Used"));
}
itemWidgetLyt->setSpacing(6);
titleLabel->setFixedHeight(24);
titleLabel->setContentsMargins(6,0,0,0);
itemWidgetLyt->addWidget(titleLabel);
itemWidgetLyt->addWidget(itemWidget);
m_homePageLyt->addWidget(listWidget);
}
m_homePageLyt->addStretch();
}
/**
* @brief setPageType 预留的接口,为指定类别搜索调整界面内容
* @param type
*/
void ContentWidget::setPage(const int& type) {
m_currentType = type;
}
/**
* @brief ContentWidget::currentType 返回当前内容页home或searchresult
* @return
*/
int ContentWidget::currentPage() {
return m_currentType;
}
/**
* @brief ContentWidget::resetSearchList 在构建新的搜索结果列表前,先重置所有控件
*/
void ContentWidget::resetSearchList() {
// this->hideListView();
if(m_fileListView) {
m_fileListView->hide();
m_fileTitleLabel->hide();
m_fileShowMoreLabel->hide();
m_fileListView->isHidden = true;
m_fileListView->clear();
}
if(m_dirListView) {
m_dirListView->hide();
m_dirTitleLabel->hide();
m_dirShowMoreLabel->hide();
m_dirListView->isHidden = true;
m_dirListView->clear();
}
if(m_contentListView) {
m_contentListView->hide();
m_contentTitleLabel->hide();
m_contentShowMoreLabel->hide();
m_contentListView->isHidden = true;
m_contentListView->clear();
}
if(m_appListView) {
m_appListView->hide();
m_appTitleLabel->hide();
m_appShowMoreLabel->hide();
m_appListView->isHidden = true;
m_appListView->clear();
}
if(m_settingListView) {
m_settingListView->hide();
m_settingTitleLabel->hide();
m_settingShowMoreLabel->hide();
m_settingListView->isHidden = true;
m_settingListView->clear();
}
if(m_bestListView) {
m_bestListView->hide();
m_bestTitleLabel->hide();
m_bestListView->isHidden = true;
m_bestListView->clear();
}
if(m_webListView) {
m_webListView->clear();
m_webListView->appendItem(m_keyword);
m_webTitleLabel->show();
m_webListView->show();
m_webListView->isHidden = false;
}
resetListHeight();
m_detailView->clearLayout();
m_contentDetailList.clear();
m_bestContent.clear();
m_appShowMoreLabel->resetLabel();
m_settingShowMoreLabel->resetLabel();
m_dirShowMoreLabel->resetLabel();
m_fileShowMoreLabel->resetLabel();
m_contentShowMoreLabel->resetLabel();
m_bestList.clear();
if(! m_appList.isEmpty())
m_appList.clear();
if(! m_settingList.isEmpty())
m_settingList.clear();
if(! m_dirList.isEmpty())
m_dirList.clear();
if(! m_fileList.isEmpty())
m_fileList.clear();
if(! m_contentList.isEmpty())
m_contentList.clear();
if(! m_appPathList.isEmpty())
m_appPathList.clear();
if(! m_appIconList.isEmpty())
m_appIconList.clear();
if(!m_appDescList.isEmpty())
m_appDescList.clear();
}
/**
* @brief ContentWidget::setSettingList 插入设置项搜索结果列表
* @param settingList
*/
void ContentWidget::setSettingList(const QStringList & settingList) {
if(settingList.isEmpty())
return;
m_settingList = settingList;
qDebug() << "Append a best item into list: " << settingList.at(0);
this->appendBestItem(SearchItem::SearchType::Settings, settingList.at(0));
m_settingListView->show();
m_settingTitleLabel->show();
m_settingListView->isHidden = false;
if(m_settingList.length() <= 5) {
m_settingListView->setList(m_settingList);
} else {
m_settingShowMoreLabel->show();
m_settingListView->setList(m_settingList.mid(0, 5));
}
this->resetListHeight();
}
/**
* @brief ContentWidget::setAppList 插入应用搜索结果
* @param appList QVector<namelist,pathlist,iconlist>
*/
void ContentWidget::setAppList(const QVector<QStringList>& appList) {
if(appList.at(0).isEmpty())
return;
m_appList = appList.at(0);
m_appPathList = appList.at(1);
m_appIconList = appList.at(2);
m_appDescList = appList.at(3);
m_appListView->setAppList(m_appPathList, m_appIconList);
qDebug() << "Append a best item into list: " << appList.at(0).at(0);
SearchItemModel * model = qobject_cast<SearchItemModel *>(m_bestListView->model());
if(appList.at(1).at(0).isEmpty() || appList.at(1).at(0) == "") {
model->setBestAppIcon(appList.at(2).at(0), false);
} else {
model->setBestAppIcon(appList.at(2).at(0), true);
}
this->appendBestItem(SearchItem::SearchType::Apps, appList.at(0).at(0));
m_appListView->show();
m_appTitleLabel->show();
m_appListView->isHidden = false;
if(m_appList.length() <= 5) {
m_appListView->setList(m_appList);
} else {
m_appShowMoreLabel->show();
m_appListView->setList(m_appList.mid(0, 5));
}
this->resetListHeight();
}
/**
* @brief ContentWidget::appendSearchItem 向列表添加一项搜索结果
* @param type 类型
* @param path 路径
* @param contents 文件内容
*/
void ContentWidget::appendSearchItem(const int& type, const QString& path, QStringList contents) {
switch(type) {
case SearchItem::SearchType::Best: {
if(m_bestListView->isHidden) {
m_bestListView->show();
m_bestTitleLabel->show();
m_bestListView->isHidden = false;
}
m_bestListView->appendItem(path);
if(m_detailView->isEmpty()) {
m_bestListView->setCurrentIndex(m_bestListView->model()->index(0, 0, QModelIndex()));
}
break;
}
case SearchItem::SearchType::Files: {
if(m_fileListView->isHidden) {
m_fileListView->show();
m_fileTitleLabel->show();
m_fileListView->isHidden = false;
this->appendBestItem(SearchItem::SearchType::Files, path);
}
if(m_fileListView->getLength() < 5) { //当已搜索结果列表少于5项直接将搜索结果添加到列表中
m_fileListView->appendItem(path);
} else if(m_fileListView->getLength() == 5) { //当已搜索结果等于5项新增的被折叠显示“展开”按钮
m_fileShowMoreLabel->show();
} else { //当搜索列表显示的大于5项说明列表被展开可以继续把新增项添加到列表中
m_fileListView->appendItem(path);
}
m_fileList.append(path);
break;;
}
case SearchItem::SearchType::Dirs: {
if(m_dirListView->isHidden) {
m_dirListView->show();
m_dirTitleLabel->show();
m_dirListView->isHidden = false;
this->appendBestItem(SearchItem::SearchType::Dirs, path);
}
if(m_dirListView->getLength() < 5) {
m_dirListView->appendItem(path);
} else if(m_dirListView->getLength() == 5) {
m_dirShowMoreLabel->show();
} else {
m_dirListView->appendItem(path);
}
m_dirList.append(path);
break;
}
case SearchItem::SearchType::Contents: {
if(m_contentListView->isHidden) {
m_contentListView->show();
m_contentTitleLabel->show();
m_contentListView->isHidden = false;
for(int i = 0; i < contents.length(); i ++) {
m_bestContent.append(contents.at(i));
if(i != contents.length() - 1) {
m_bestContent.append("\n");
}
}
this->appendBestItem(SearchItem::SearchType::Contents, path);
}
if(m_contentListView->getLength() < 5) {
m_contentListView->appendItem(path);
} else if(m_contentListView->getLength() == 5) {
m_contentShowMoreLabel->show();
} else {
m_contentListView->appendItem(path);
}
m_contentList.append(path);
QString temp;
for(int i = 0; i < contents.length(); i ++) {
temp.append(contents.at(i));
if(i != contents.length() - 1) {
temp.append("\n");
}
}
m_contentDetailList.append(temp);
break;
}
default:
break;
}
this->resetListHeight();
return;
}
/**
* @brief ContentWidget::getTitleName 获取表头
* @param type 搜索类型
* @return
*/
QString ContentWidget::getTitleName(const int& type) {
switch(type) {
case SearchItem::SearchType::Apps :
return tr("Apps");
case SearchItem::SearchType::Settings :
return tr("Settings");
case SearchItem::SearchType::Files :
return tr("Files");
case SearchItem::SearchType::Dirs :
return tr("Dirs");
case SearchItem::SearchType::Contents :
return tr("File Contents");
case SearchItem::SearchType::Best :
return tr("Best Matches");
case SearchItem::SearchType::Web :
return tr("Web Pages");
default :
return tr("Unknown");
}
}
/**
* @brief ContentWidget::clearLayout 清空某个布局
* @param layout 需要清空的布局
*/
void ContentWidget::clearLayout(QLayout * layout) {
if(! layout) return;
QLayoutItem * child;
while((child = layout->takeAt(0)) != 0) {
if(child->widget()) {
child->widget()->setParent(NULL); //防止删除后窗口看上去没有消失
}
delete child;
}
child = NULL;
}
/**
* @brief ContentWidget::onListViewRowChanged 点击某列表某一行的槽函数
* @param type
* @param path
*/
void ContentWidget::onListViewRowChanged(SearchListView * listview, const int &type, const QString &path) {
if(type == SearchItem::SearchType::Contents && !m_contentDetailList.isEmpty()) {
m_detailView->isContent = true;
m_detailView->setContent(m_contentDetailList.at(listview->currentIndex().row()), m_keyword);
} else if(type == SearchItem::SearchType::Best && !m_bestContent.isEmpty() && SearchItem::SearchType::Contents == m_bestList.at(listview->currentIndex().row()).first) {
m_detailView->setContent(m_bestContent, m_keyword);
m_detailView->isContent = true;
m_detailView->setupWidget(SearchItem::SearchType::Contents, path);
listview->is_current_list = true;
Q_EMIT this->currentItemChanged();
listview->is_current_list = false;
return;
} else {
m_detailView->isContent = false;
}
if(type == SearchItem::SearchType::Web) {
m_detailView->setWebWidget(this->m_keyword);
} else if(type == SearchItem::SearchType::Apps) {
int index = listview->currentIndex().row();
m_detailView->setAppWidget(m_appList.at(index), m_appPathList.at(index), m_appIconList.at(index), m_appDescList.at(index));
} else if(type == SearchItem::SearchType::Best) {
if(m_bestList.at(listview->currentIndex().row()).first == SearchItem::SearchType::Apps) {
m_detailView->setAppWidget(m_appList.at(0), m_appPathList.at(0), m_appIconList.at(0), m_appDescList.at(0));
} else {
m_detailView->setupWidget(m_bestList.at(listview->currentIndex().row()).first, m_bestList.at(listview->currentIndex().row()).second);
}
} else {
m_detailView->setupWidget(type, path);
}
listview->is_current_list = true;
Q_EMIT this->currentItemChanged();
listview->is_current_list = false;
}
/**
* @brief ContentWidget::onListViewRowDoubleClicked 双击某列表某一行的槽函数
* @param type
* @param path
*/
void ContentWidget::onListViewRowDoubleClicked(SearchListView * listview, const int &type, const QString &path) {
qDebug() << "A row has been double clicked.Type = " << type << "; Name = " << path;
if(type == SearchItem::SearchType::Best && m_bestList.at(listview->currentIndex().row()).first != SearchItem::SearchType::Apps) {
m_detailView->doubleClickAction(m_bestList.at(listview->currentIndex().row()).first, path);
} else if(type == SearchItem::SearchType::Best && m_bestList.at(listview->currentIndex().row()).first == SearchItem::SearchType::Apps) {
if(m_appPathList.at(0) == "" || m_appPathList.at(0).isEmpty()) {
m_detailView->doubleClickAction(SearchListView::ResType::App, m_appList.at(0));
} else {
m_detailView->doubleClickAction(SearchListView::ResType::App, m_appPathList.at(0));
}
} else if(type == SearchItem::SearchType::Apps) {
int index = listview->currentIndex().row();
if(m_appPathList.at(index) == "" || m_appPathList.at(index).isEmpty()) {
m_detailView->doubleClickAction(SearchListView::ResType::App, m_appList.at(index));
} else {
m_detailView->doubleClickAction(SearchListView::ResType::App, m_appPathList.at(index));
}
} else {
m_detailView->doubleClickAction(type, path);
}
}
/**
* @brief ContentWidget::setContentList 文本内容搜索结果列表(包含所有文本段)
* @param list
*/
void ContentWidget::setContentList(const QStringList& list) {
m_contentDetailList.clear();
m_contentDetailList = list;
}
/**
* @brief ContentWidget::setKeyword 设置关键字
* @param keyword
*/
void ContentWidget::setKeyword(QString keyword) {
m_keyword = keyword;
m_fileListView->setKeyword(keyword);
m_dirListView->setKeyword(keyword);
m_contentListView->setKeyword(keyword);
m_settingListView->setKeyword(keyword);
m_appListView->setKeyword(keyword);
m_bestListView->setKeyword(keyword);
m_webListView->setKeyword(keyword);
}
/**
* @brief ContentWidget::setQuicklyOpenList 设置快速打开列表
* @param list
*/
void ContentWidget::setQuicklyOpenList(const QStringList & list) {
m_quicklyOpenList = list;
}
/**
* @brief ContentWidget::closeWebView 在主界面失焦消失的时候调用若webview未关闭关闭网页搜索界面
*/
void ContentWidget::closeWebView() {
m_detailView->closeWebWidget();
}