2021-10-28 20:46:39 +08:00
|
|
|
|
#include "search.h"
|
|
|
|
|
#include <QTranslator>
|
|
|
|
|
#include <QApplication>
|
|
|
|
|
|
|
|
|
|
Search::Search()
|
|
|
|
|
{
|
|
|
|
|
QTranslator* translator = new QTranslator(this);
|
|
|
|
|
if(!translator->load("/usr/share/ukui-search/search-ukcc-plugin/translations/" + QLocale::system().name())) {
|
|
|
|
|
qWarning() << "/usr/share/ukui-search/search-ukcc-plugin/translations/" + QLocale::system().name() << "load failed";
|
|
|
|
|
}
|
|
|
|
|
QApplication::installTranslator(translator);
|
|
|
|
|
|
|
|
|
|
m_plugin_name = tr("Search");
|
|
|
|
|
m_plugin_type = SEARCH_F;
|
|
|
|
|
initUi();
|
|
|
|
|
setupConnection();
|
|
|
|
|
m_dirSettings = new QSettings(QDir::homePath() + CONFIG_FILE, QSettings::NativeFormat, this);
|
|
|
|
|
m_dirSettings->setIniCodec(QTextCodec::codecForName("UTF-8"));
|
|
|
|
|
initBlockDirsList();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString Search::plugini18nName()
|
|
|
|
|
{
|
|
|
|
|
return m_plugin_name;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int Search::pluginTypes()
|
|
|
|
|
{
|
|
|
|
|
return m_plugin_type;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QWidget *Search::pluginUi()
|
|
|
|
|
{
|
|
|
|
|
m_pluginWidget->setAttribute(Qt::WA_DeleteOnClose);
|
|
|
|
|
|
|
|
|
|
const QByteArray id(UKUI_SEARCH_SCHEMAS);
|
|
|
|
|
if (QGSettings::isSchemaInstalled(id)) {
|
|
|
|
|
m_gsettings = new QGSettings(id, QByteArray(), this);
|
|
|
|
|
//按钮状态初始化
|
|
|
|
|
if (m_gsettings->keys().contains(SEARCH_METHOD_KEY)) {
|
|
|
|
|
//当前是否使用索引搜索/暴力搜索
|
|
|
|
|
bool is_index_search_on = m_gsettings->get(SEARCH_METHOD_KEY).toBool();
|
|
|
|
|
m_searchMethodBtn->setChecked(is_index_search_on);
|
|
|
|
|
} else {
|
|
|
|
|
m_searchMethodBtn->setEnabled(false);
|
|
|
|
|
}
|
|
|
|
|
if (m_gsettings->keys().contains(WEB_ENGINE_KEY)) {
|
|
|
|
|
//当前网页搜索的搜索引擎
|
|
|
|
|
QString engine = m_gsettings->get(WEB_ENGINE_KEY).toString();
|
|
|
|
|
m_webEngineFrame->mCombox->setCurrentIndex(m_webEngineFrame->mCombox->findData(engine));
|
|
|
|
|
} else {
|
|
|
|
|
m_webEngineFrame->mCombox->setEnabled(false);
|
|
|
|
|
}
|
|
|
|
|
//监听gsettings值改变,更新控制面板UI
|
|
|
|
|
connect(m_gsettings, &QGSettings::changed, this, [ = ](const QString &key) {
|
|
|
|
|
if (key == SEARCH_METHOD_KEY) {
|
|
|
|
|
bool is_index_search_on = m_gsettings->get(SEARCH_METHOD_KEY).toBool();
|
|
|
|
|
m_searchMethodBtn->blockSignals(true);
|
|
|
|
|
m_searchMethodBtn->setChecked(is_index_search_on);
|
|
|
|
|
m_searchMethodBtn->blockSignals(false);
|
|
|
|
|
} else if (key == WEB_ENGINE_KEY) {
|
|
|
|
|
QString engine = m_gsettings->get(WEB_ENGINE_KEY).toString();
|
|
|
|
|
m_webEngineFrame->mCombox->blockSignals(true);
|
|
|
|
|
m_webEngineFrame->mCombox->setCurrentIndex(m_webEngineFrame->mCombox->findData(engine));
|
|
|
|
|
m_webEngineFrame->mCombox->blockSignals(false);
|
|
|
|
|
}
|
|
|
|
|
});
|
2022-07-06 14:22:59 +08:00
|
|
|
|
connect(m_searchMethodBtn, &kdk::KSwitchButton::stateChanged, this, [ = ](bool checked) {
|
2021-10-28 20:46:39 +08:00
|
|
|
|
if (m_gsettings && m_gsettings->keys().contains(SEARCH_METHOD_KEY)) {
|
|
|
|
|
m_gsettings->set(SEARCH_METHOD_KEY, checked);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
connect(m_webEngineFrame->mCombox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [=](int index) {
|
|
|
|
|
if (m_gsettings && m_gsettings->keys().contains(WEB_ENGINE_KEY)) {
|
|
|
|
|
m_gsettings->set(WEB_ENGINE_KEY, m_webEngineFrame->mCombox->currentData().toString());
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
qCritical() << UKUI_SEARCH_SCHEMAS << " not installed!\n";
|
|
|
|
|
m_searchMethodBtn->setEnabled(false);
|
|
|
|
|
m_webEngineFrame->mCombox->setEnabled(false);
|
|
|
|
|
}
|
|
|
|
|
return m_pluginWidget;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const QString Search::name() const
|
|
|
|
|
{
|
|
|
|
|
return QStringLiteral("Search");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString Search::translationPath() const
|
|
|
|
|
{
|
|
|
|
|
return QStringLiteral("/usr/share/ukui-search/search-ukcc-plugin/translations/%1.ts");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool Search::isShowOnHomePage() const
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QIcon Search::icon() const
|
|
|
|
|
{
|
2022-05-19 09:48:50 +08:00
|
|
|
|
return QIcon::fromTheme("search-symbolic");
|
2021-10-28 20:46:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool Search::isEnable() const
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Search::initUi 初始化此插件UI
|
|
|
|
|
*/
|
|
|
|
|
void Search::initUi()
|
|
|
|
|
{
|
|
|
|
|
m_pluginWidget = new QWidget;
|
|
|
|
|
m_mainLyt = new QVBoxLayout(m_pluginWidget);
|
|
|
|
|
m_pluginWidget->setLayout(m_mainLyt);
|
|
|
|
|
|
|
|
|
|
m_titleLabel = new TitleLabel(m_setFrame);
|
|
|
|
|
m_titleLabel->setText(tr("Search"));
|
|
|
|
|
m_mainLyt->addWidget(m_titleLabel);
|
|
|
|
|
|
|
|
|
|
//设置搜索模式部分的ui
|
|
|
|
|
m_setFrame = new QFrame(m_pluginWidget);
|
|
|
|
|
m_setFrame->setFrameShape(QFrame::Shape::Box);
|
|
|
|
|
m_setFrameLyt = new QVBoxLayout(m_setFrame);
|
|
|
|
|
m_setFrameLyt->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
m_setFrameLyt->setSpacing(0);
|
|
|
|
|
|
|
|
|
|
m_searchMethodFrame = new QFrame(m_setFrame);
|
|
|
|
|
m_searchMethodFrame->setMinimumWidth(550);
|
|
|
|
|
m_searchMethodLyt = new QHBoxLayout(m_searchMethodFrame);
|
|
|
|
|
m_searchMethodLyt->setContentsMargins(16, 18, 16, 21);
|
|
|
|
|
m_searchMethodFrame->setLayout(m_searchMethodLyt);
|
|
|
|
|
|
|
|
|
|
m_descFrame = new QFrame(m_searchMethodFrame);
|
|
|
|
|
m_descFrameLyt = new QVBoxLayout(m_descFrame);
|
|
|
|
|
m_descFrameLyt->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
m_descFrame->setLayout(m_descFrameLyt);
|
|
|
|
|
m_descLabel1 = new QLabel(m_descFrame);
|
|
|
|
|
m_descLabel2 = new QLabel(m_descFrame);
|
|
|
|
|
|
|
|
|
|
//~ contents_path /Search/Create index
|
|
|
|
|
m_descLabel1->setText(tr("Create index"));
|
|
|
|
|
m_descLabel2->setText(tr("Creating index can help you getting results quickly."));
|
|
|
|
|
m_descLabel2->setEnabled(false);
|
|
|
|
|
m_descFrameLyt->addWidget(m_descLabel1);
|
|
|
|
|
m_descFrameLyt->addWidget(m_descLabel2);
|
2022-07-06 14:22:59 +08:00
|
|
|
|
m_searchMethodBtn = new kdk::KSwitchButton(m_searchMethodFrame);
|
2021-10-28 20:46:39 +08:00
|
|
|
|
m_searchMethodLyt->addWidget(m_descFrame);
|
|
|
|
|
m_searchMethodLyt->addStretch();
|
|
|
|
|
m_searchMethodLyt->addWidget(m_searchMethodBtn);
|
|
|
|
|
m_setFrameLyt->addWidget(m_searchMethodFrame);
|
|
|
|
|
|
|
|
|
|
QFrame *line = new QFrame(m_setFrame);
|
|
|
|
|
line->setFixedHeight(1);
|
|
|
|
|
line->setLineWidth(0);
|
|
|
|
|
line->setFrameShape(QFrame::HLine);
|
|
|
|
|
line->setFrameShadow(QFrame::Sunken);
|
|
|
|
|
m_setFrameLyt->addWidget(line);
|
|
|
|
|
|
|
|
|
|
//设置网页搜索引擎部分的ui
|
|
|
|
|
//~ contents_path /Search/Default web searching engine
|
|
|
|
|
m_webEngineFrame = new ComboxFrame(tr("Default web searching engine"), m_searchMethodFrame);
|
2022-06-14 14:02:28 +08:00
|
|
|
|
m_webEngineFrame->setContentsMargins(8, 0, 8, 0);// ComboxFrame右侧自带8的边距,左右边距各是16所以分别设为8
|
2021-10-28 20:46:39 +08:00
|
|
|
|
m_webEngineFrame->setFixedHeight(56);
|
|
|
|
|
m_webEngineFrame->setMinimumWidth(550);
|
|
|
|
|
m_webEngineFrame->mCombox->insertItem(0, QIcon("/usr/share/ukui-search/search-ukcc-plugin/image/baidu.svg"), tr("baidu"), "baidu");
|
|
|
|
|
m_webEngineFrame->mCombox->insertItem(1, QIcon("/usr/share/ukui-search/search-ukcc-plugin/image/sougou.svg"), tr("sougou"), "sougou");
|
|
|
|
|
m_webEngineFrame->mCombox->insertItem(2, QIcon("/usr/share/ukui-search/search-ukcc-plugin/image/360.svg"), tr("360"), "360");
|
|
|
|
|
m_setFrameLyt->addWidget(m_webEngineFrame);
|
|
|
|
|
m_mainLyt->addWidget(m_setFrame);
|
|
|
|
|
|
|
|
|
|
//设置黑名单文件夹部分的ui
|
|
|
|
|
m_blockDirTitleLabel = new TitleLabel(m_pluginWidget);
|
|
|
|
|
|
|
|
|
|
//~ contents_path /Search/Block Folders
|
|
|
|
|
m_blockDirTitleLabel->setText(tr("Block Folders"));
|
|
|
|
|
m_blockDirDescLabel = new QLabel(m_pluginWidget);
|
2021-11-11 15:44:39 +08:00
|
|
|
|
m_blockDirDescLabel->setContentsMargins(16, 0, 0, 0); //TitleLabel自带16边距,QLabel需要自己设
|
|
|
|
|
m_blockDirDescLabel->setEnabled(false);
|
2021-10-28 20:46:39 +08:00
|
|
|
|
m_blockDirDescLabel->setWordWrap(true);
|
|
|
|
|
m_blockDirDescLabel->setText(tr("Following folders will not be searched. You can set it by adding and removing folders."));
|
|
|
|
|
|
|
|
|
|
m_blockDirsFrame = new QFrame(m_pluginWidget);
|
|
|
|
|
m_blockDirsFrame->setFrameShape(QFrame::Shape::Box);
|
|
|
|
|
m_blockDirsLyt = new QVBoxLayout(m_blockDirsFrame);
|
|
|
|
|
m_blockDirsLyt->setDirection(QBoxLayout::BottomToTop);
|
|
|
|
|
m_blockDirsFrame->setLayout(m_blockDirsLyt);
|
|
|
|
|
m_blockDirsLyt->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
m_blockDirsLyt->setSpacing(2);
|
|
|
|
|
|
|
|
|
|
QFrame * m_addBlockDirFrame = new QFrame(m_blockDirsFrame);
|
|
|
|
|
m_addBlockDirFrame->setFrameShape(QFrame::Shape::NoFrame);
|
|
|
|
|
m_addBlockDirFrame->setFixedHeight(60);
|
|
|
|
|
|
2021-11-29 15:02:45 +08:00
|
|
|
|
m_addBlockDirWidget = new QPushButton(m_addBlockDirFrame);
|
2021-10-28 20:46:39 +08:00
|
|
|
|
m_addBlockDirWidget->setFixedHeight(60);
|
|
|
|
|
|
|
|
|
|
// m_addBlockDirWidget->setObjectName("addBlockDirWidget");
|
|
|
|
|
// QPalette pal;
|
|
|
|
|
// QBrush brush = pal.highlight(); //获取window的色值
|
|
|
|
|
// QColor highLightColor = brush.color();
|
|
|
|
|
// QString stringColor = QString("rgba(%1,%2,%3)") //叠加20%白色
|
|
|
|
|
// .arg(highLightColor.red()*0.8 + 255*0.2)
|
|
|
|
|
// .arg(highLightColor.green()*0.8 + 255*0.2)
|
|
|
|
|
// .arg(highLightColor.blue()*0.8 + 255*0.2);
|
|
|
|
|
|
|
|
|
|
// m_addBlockDirWidget->setStyleSheet(QString("HoverWidget#addBlockDirWidget{background: palette(button);\
|
|
|
|
|
// border-radius: 4px;}\
|
|
|
|
|
// HoverWidget:hover:!pressed#addBlockDirWidget{background: %1; \
|
|
|
|
|
// border-radius: 4px;}").arg(stringColor));
|
|
|
|
|
|
2021-11-29 15:02:45 +08:00
|
|
|
|
m_addBlockDirWidget->setProperty("useButtonPalette", true);
|
2022-06-06 11:26:55 +08:00
|
|
|
|
// m_addBlockDirWidget->setStyleSheet("QPushButton:!checked{background: palette(base);}");
|
|
|
|
|
m_addBlockDirWidget->setFlat(true);
|
2021-10-28 20:46:39 +08:00
|
|
|
|
|
|
|
|
|
m_addBlockDirIcon = new QLabel(m_addBlockDirWidget);
|
|
|
|
|
m_addBlockDirIcon->setPixmap(QIcon("/usr/share/ukui-search/search-ukcc-plugin/image/add.svg").pixmap(12, 12));
|
|
|
|
|
m_addBlockDirIcon->setProperty("useIconHighlightEffect", true);
|
|
|
|
|
m_addBlockDirIcon->setProperty("iconHighlightEffectMode", 1);
|
|
|
|
|
|
|
|
|
|
m_addBlockDirLabel = new QLabel(m_addBlockDirWidget);
|
|
|
|
|
m_addBlockDirLabel->setText(tr("Choose folder"));
|
|
|
|
|
|
|
|
|
|
m_addBlockDirLyt = new QHBoxLayout(m_addBlockDirWidget);
|
|
|
|
|
m_addBlockDirWidget->setLayout(m_addBlockDirLyt);
|
|
|
|
|
|
|
|
|
|
m_blockDirsLyt->addWidget(m_addBlockDirWidget);
|
|
|
|
|
|
|
|
|
|
m_addBlockDirLyt->addStretch();
|
|
|
|
|
m_addBlockDirLyt->addWidget(m_addBlockDirIcon);
|
|
|
|
|
m_addBlockDirLyt->addWidget(m_addBlockDirLabel);
|
|
|
|
|
m_addBlockDirLyt->addStretch();
|
|
|
|
|
m_mainLyt->addSpacing(32);
|
|
|
|
|
m_mainLyt->addWidget(m_blockDirTitleLabel);
|
|
|
|
|
m_mainLyt->addWidget(m_blockDirDescLabel);
|
|
|
|
|
m_mainLyt->addWidget(m_blockDirsFrame);
|
|
|
|
|
m_mainLyt->addStretch();
|
2021-11-29 15:02:45 +08:00
|
|
|
|
m_mainLyt->setContentsMargins(0, 0, 0, 0);
|
2021-10-28 20:46:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Search::getBlockDirs 从配置文件获取黑名单并将黑名单列表传入
|
|
|
|
|
*/
|
|
|
|
|
void Search::getBlockDirs()
|
|
|
|
|
{
|
|
|
|
|
m_blockDirs.clear();
|
|
|
|
|
if (m_dirSettings)
|
|
|
|
|
m_blockDirs = m_dirSettings->allKeys();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Search::setBlockDir 尝试写入新的黑名单文件夹
|
|
|
|
|
* @param dirPath 待添加到黑名单的文件夹路径
|
|
|
|
|
* @param is_add 是否是在添加黑名单
|
|
|
|
|
* @return 0成功 !0添加失败的错误代码
|
|
|
|
|
*/
|
|
|
|
|
int Search::setBlockDir(const QString &dirPath, const bool &is_add)
|
|
|
|
|
{
|
|
|
|
|
if (!is_add) {
|
|
|
|
|
if (dirPath.isEmpty()) {
|
|
|
|
|
return ReturnCode::PathEmpty;
|
|
|
|
|
}
|
|
|
|
|
//删除黑名单目录
|
|
|
|
|
m_dirSettings->remove(dirPath);
|
|
|
|
|
removeBlockDirFromList(dirPath);
|
|
|
|
|
return ReturnCode::Succeed;
|
|
|
|
|
}
|
|
|
|
|
if (!dirPath.startsWith(QDir::homePath())) {
|
|
|
|
|
return ReturnCode::NotInHomeDir;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString pathKey = dirPath.right(dirPath.length() - 1);
|
|
|
|
|
|
|
|
|
|
for (QString dir : m_blockDirs) {
|
|
|
|
|
if (pathKey == dir) {
|
|
|
|
|
return ReturnCode::HasBeenBlocked;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pathKey.startsWith(dir)) {
|
|
|
|
|
return ReturnCode::ParentExist;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//有它的子文件夹已被添加,删除这些子文件夹
|
|
|
|
|
if (dir.startsWith(pathKey)) {
|
|
|
|
|
m_dirSettings->remove(dir);
|
|
|
|
|
removeBlockDirFromList("/" + dir);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
m_dirSettings->setValue(pathKey, "0");
|
|
|
|
|
appendBlockDirToList(dirPath);
|
|
|
|
|
return ReturnCode::Succeed;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Search::initBlockDirsList 初始化黑名单列表
|
|
|
|
|
*/
|
|
|
|
|
void Search::initBlockDirsList()
|
|
|
|
|
{
|
|
|
|
|
getBlockDirs();
|
|
|
|
|
for (QString path: m_blockDirs) {
|
|
|
|
|
QString wholePath = QString("/%1").arg(path);
|
|
|
|
|
if (QFileInfo(wholePath).isDir() && path.startsWith("home")) {
|
|
|
|
|
appendBlockDirToList(wholePath);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Search::appendBlockDirToList(const QString &path)
|
|
|
|
|
{
|
|
|
|
|
HoverWidget * dirWidget = new HoverWidget(path, m_blockDirsFrame);
|
|
|
|
|
dirWidget->setObjectName(path);
|
|
|
|
|
dirWidget->setMinimumWidth(550);
|
|
|
|
|
dirWidget->setAttribute(Qt::WA_DeleteOnClose);
|
|
|
|
|
QHBoxLayout * dirWidgetLyt = new QHBoxLayout(dirWidget);
|
|
|
|
|
dirWidgetLyt->setSpacing(8);
|
|
|
|
|
dirWidgetLyt->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
dirWidget->setLayout(dirWidgetLyt);
|
|
|
|
|
QFrame * dirFrame = new QFrame(dirWidget);
|
|
|
|
|
dirFrame->setFrameShape(QFrame::Shape::Box);
|
|
|
|
|
dirFrame->setFixedHeight(50);
|
|
|
|
|
QHBoxLayout * dirFrameLayout = new QHBoxLayout(dirFrame);
|
|
|
|
|
dirFrameLayout->setSpacing(16);
|
|
|
|
|
dirFrameLayout->setContentsMargins(16, 0, 16, 0);
|
|
|
|
|
QLabel * iconLabel = new QLabel(dirFrame);
|
|
|
|
|
QLabel * pathLabel = new QLabel(dirFrame);
|
|
|
|
|
|
|
|
|
|
dirFrameLayout->addWidget(iconLabel);
|
|
|
|
|
iconLabel->setPixmap(QIcon::fromTheme("inode-directory").pixmap(QSize(24, 24)));
|
|
|
|
|
pathLabel->setText(path);
|
|
|
|
|
dirFrameLayout->addWidget(pathLabel);
|
|
|
|
|
dirFrameLayout->addStretch();
|
|
|
|
|
QPushButton * delBtn = new QPushButton(dirFrame);
|
|
|
|
|
delBtn->setIcon(QIcon::fromTheme("window-close-symbolic"));
|
|
|
|
|
delBtn->setFixedSize(30, 30);
|
|
|
|
|
delBtn->setToolTip(tr("delete"));
|
|
|
|
|
delBtn->setProperty("isWindowButton", 0x2);
|
|
|
|
|
delBtn->setProperty("useIconHighlightEffect", 0x8);
|
|
|
|
|
delBtn->setFlat(true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
delBtn->hide();
|
|
|
|
|
dirFrameLayout->addWidget(delBtn);
|
|
|
|
|
dirWidgetLyt->addWidget(dirFrame);
|
|
|
|
|
// dirWidgetLyt->addWidget(delBtn);
|
|
|
|
|
|
|
|
|
|
QFrame *line = new QFrame(m_blockDirsFrame);
|
|
|
|
|
line->setFixedHeight(1);
|
|
|
|
|
line->setLineWidth(0);
|
|
|
|
|
line->setFrameShape(QFrame::HLine);
|
|
|
|
|
line->setFrameShadow(QFrame::Sunken);
|
|
|
|
|
// m_setFrameLyt->addWidget(line);
|
|
|
|
|
|
|
|
|
|
m_blockDirsLyt->addWidget(line);
|
|
|
|
|
m_blockDirsLyt->addWidget(dirWidget);
|
|
|
|
|
connect(delBtn, &QPushButton::clicked, this, [ = ]() {
|
|
|
|
|
setBlockDir(path, false);
|
|
|
|
|
getBlockDirs();
|
|
|
|
|
m_blockDirsLyt->removeWidget(line);
|
|
|
|
|
line->deleteLater();
|
|
|
|
|
});
|
|
|
|
|
connect(dirWidget, &HoverWidget::enterWidget, this, [ = ]() {
|
|
|
|
|
delBtn->show();
|
|
|
|
|
});
|
|
|
|
|
connect(dirWidget, &HoverWidget::leaveWidget, this, [ = ]() {
|
|
|
|
|
delBtn->hide();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Search::removeBlockDirFromList(const QString &path)
|
|
|
|
|
{
|
|
|
|
|
HoverWidget * delDirWidget = m_blockDirsFrame->findChild<HoverWidget *>(path);
|
|
|
|
|
if (delDirWidget) {
|
|
|
|
|
qDebug() << "Delete folder succeed! path = " << path;
|
|
|
|
|
delDirWidget->close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Search::setupConnection()
|
|
|
|
|
{
|
2021-11-29 15:02:45 +08:00
|
|
|
|
connect(m_addBlockDirWidget, &QPushButton::clicked, this, &Search::onBtnAddFolderClicked);
|
2021-10-28 20:46:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Search::onBtnAddFolderClicked()
|
|
|
|
|
{
|
|
|
|
|
QFileDialog * fileDialog = new QFileDialog(m_pluginWidget);
|
|
|
|
|
// fileDialog->setFileMode(QFileDialog::Directory); //允许查看文件和文件夹,但只允许选择文件夹
|
|
|
|
|
fileDialog->setFileMode(QFileDialog::DirectoryOnly); //只允许查看文件夹
|
|
|
|
|
// fileDialog->setViewMode(QFileDialog::Detail);
|
|
|
|
|
fileDialog->setDirectory(QDir::homePath());
|
|
|
|
|
fileDialog->setNameFilter(tr("Directories"));
|
|
|
|
|
fileDialog->setWindowTitle(tr("select blocked folder"));
|
|
|
|
|
fileDialog->setLabelText(QFileDialog::Accept, tr("Select"));
|
|
|
|
|
fileDialog->setLabelText(QFileDialog::LookIn, tr("Position: "));
|
|
|
|
|
fileDialog->setLabelText(QFileDialog::FileName, tr("FileName: "));
|
|
|
|
|
fileDialog->setLabelText(QFileDialog::FileType, tr("FileType: "));
|
|
|
|
|
fileDialog->setLabelText(QFileDialog::Reject, tr("Cancel"));
|
|
|
|
|
if(fileDialog->exec() != QDialog::Accepted) {
|
|
|
|
|
fileDialog->deleteLater();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
QString selectedDir = 0;
|
|
|
|
|
selectedDir = fileDialog->selectedFiles().first();
|
|
|
|
|
qDebug() << "Selected a folder in onBtnAddClicked(): " << selectedDir;
|
|
|
|
|
int returnCode = setBlockDir(selectedDir, true);
|
|
|
|
|
switch (returnCode) {
|
|
|
|
|
case ReturnCode::Succeed :
|
|
|
|
|
qDebug() << "Add blocked folder succeed! path = " << selectedDir;
|
|
|
|
|
getBlockDirs();
|
|
|
|
|
break;
|
|
|
|
|
case ReturnCode::PathEmpty :
|
|
|
|
|
qWarning() << "Add blocked folder failed, choosen path is empty! path = " << selectedDir;
|
|
|
|
|
QMessageBox::warning(m_pluginWidget, tr("Warning"), tr("Add blocked folder failed, choosen path is empty!"));
|
|
|
|
|
break;
|
|
|
|
|
case ReturnCode::NotInHomeDir :
|
|
|
|
|
qWarning() << "Add blocked folder failed, it is not in home path! path = " << selectedDir;
|
|
|
|
|
QMessageBox::warning(m_pluginWidget, tr("Warning"), tr("Add blocked folder failed, it is not in home path!"));
|
|
|
|
|
break;
|
|
|
|
|
case ReturnCode::ParentExist :
|
|
|
|
|
qWarning() << "Add blocked folder failed, its parent dir is exist! path = " << selectedDir;
|
|
|
|
|
QMessageBox::warning(m_pluginWidget, tr("Warning"), tr("Add blocked folder failed, its parent dir is exist!"));
|
|
|
|
|
break;
|
|
|
|
|
case ReturnCode::HasBeenBlocked :
|
|
|
|
|
qWarning() << "Add blocked folder failed, it has been already blocked! path = " << selectedDir;
|
|
|
|
|
QMessageBox::warning(m_pluginWidget, tr("Warning"), tr("Add blocked folder failed, it has been already blocked!"));
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|