Add web search detail page; Change selection rules; Fix translation bug; Add web search plugin; Add some resouces;
This commit is contained in:
parent
779e7bcd96
commit
7ecc6419a3
|
@ -42,6 +42,7 @@ void TitleLabel::initUi() {
|
||||||
this->setLayout(m_titleLyt);
|
this->setLayout(m_titleLyt);
|
||||||
m_showMoreLabel = new ShowMoreLabel(this);
|
m_showMoreLabel = new ShowMoreLabel(this);
|
||||||
m_showMoreLabel->setFixedHeight(UNFOLD_LABEL_HEIGHT);
|
m_showMoreLabel->setFixedHeight(UNFOLD_LABEL_HEIGHT);
|
||||||
|
m_showMoreLabel->adjustSize();
|
||||||
m_showMoreLabel->hide();
|
m_showMoreLabel->hide();
|
||||||
m_titleLyt->addStretch();
|
m_titleLyt->addStretch();
|
||||||
m_titleLyt->addWidget(m_showMoreLabel);
|
m_titleLyt->addWidget(m_showMoreLabel);
|
||||||
|
|
|
@ -51,15 +51,12 @@ ResultArea::ResultArea(QWidget *parent) : QScrollArea(parent)
|
||||||
|
|
||||||
void ResultArea::appendWidet(ResultWidget *widget)
|
void ResultArea::appendWidet(ResultWidget *widget)
|
||||||
{
|
{
|
||||||
//NEW_TODO
|
|
||||||
m_mainLyt->removeWidget(m_webSearchWidget);
|
|
||||||
m_mainLyt->addWidget(widget);
|
m_mainLyt->addWidget(widget);
|
||||||
setupConnectionsForWidget(widget);
|
setupConnectionsForWidget(widget);
|
||||||
widget->clearResult();
|
widget->clearResult();
|
||||||
m_widget_list.append(widget);
|
m_widget_list.append(widget);
|
||||||
int spacing_height = m_widget_list.length() > 1 ? m_mainLyt->spacing() : 0;
|
int spacing_height = m_widget_list.length() > 1 ? m_mainLyt->spacing() : 0;
|
||||||
m_widget->setFixedHeight(m_widget->height() + widget->height() + spacing_height);
|
m_widget->setFixedHeight(m_widget->height() + widget->height() + spacing_height);
|
||||||
m_mainLyt->addWidget(m_webSearchWidget);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -82,8 +79,15 @@ void ResultArea::pressEnter()
|
||||||
if (false == m_is_selected) {//未选中时默认选取bestlist第一项
|
if (false == m_is_selected) {//未选中时默认选取bestlist第一项
|
||||||
int resultNum = m_bestListWidget->getResultNum();
|
int resultNum = m_bestListWidget->getResultNum();
|
||||||
if (0 == resultNum) {//无搜索结果时默认选中websearch
|
if (0 == resultNum) {//无搜索结果时默认选中websearch
|
||||||
m_webSearchWidget->LaunchBrowser();//默认已选中websearch
|
for (ResultWidget * i : m_widget_list) {
|
||||||
m_is_selected = true;
|
if (m_selectedPluginID == m_widget_list.back()->pluginId()) {
|
||||||
|
QModelIndex index = i->getModlIndex(0, 0);
|
||||||
|
i->setResultSelection(index);
|
||||||
|
m_selectedPluginID = i->pluginId();
|
||||||
|
m_is_selected = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {//选取bestlist第一项
|
} else {//选取bestlist第一项
|
||||||
QModelIndex index = m_bestListWidget->getModlIndex(0, 0);
|
QModelIndex index = m_bestListWidget->getModlIndex(0, 0);
|
||||||
m_bestListWidget->setResultSelection(index);
|
m_bestListWidget->setResultSelection(index);
|
||||||
|
@ -91,32 +95,28 @@ void ResultArea::pressEnter()
|
||||||
m_is_selected = true;
|
m_is_selected = true;
|
||||||
}
|
}
|
||||||
} else {//选中状态时默认启动action首项
|
} else {//选中状态时默认启动action首项
|
||||||
if (m_selectedPluginID == m_webSearchWidget->getWidgetName()) {//选中网页搜索则启动搜索
|
//先判断详情页是否打开
|
||||||
m_webSearchWidget->LaunchBrowser();
|
if (m_detail_open_state) {
|
||||||
} else {
|
if (m_selectedPluginID == m_bestListWidget->getWidgetName()) {//最佳匹配
|
||||||
//先判断详情页是否打开
|
m_bestListWidget->activateIndex();
|
||||||
if (m_detail_open_state) {
|
} else {
|
||||||
if (m_selectedPluginID == m_bestListWidget->getWidgetName()) {//最佳匹配
|
for (ResultWidget * i : m_widget_list) {
|
||||||
m_bestListWidget->activateIndex();
|
if (m_selectedPluginID == i->pluginId()) {
|
||||||
} else {
|
i->activateIndex();
|
||||||
for (ResultWidget * i : m_widget_list) {
|
break;
|
||||||
if (m_selectedPluginID == i->pluginId()) {
|
|
||||||
i->activateIndex();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {//打开详情页
|
|
||||||
m_detail_open_state = true;
|
|
||||||
sendKeyPressSignal(m_selectedPluginID);
|
|
||||||
}
|
}
|
||||||
|
} else {//打开详情页
|
||||||
|
m_detail_open_state = true;
|
||||||
|
sendKeyPressSignal(m_selectedPluginID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResultArea::pressDown()
|
void ResultArea::pressDown()
|
||||||
{
|
{
|
||||||
if (m_selectedPluginID == m_webSearchWidget->getWidgetName()) {//当前为web search,暂不处理
|
if (m_selectedPluginID == m_widget_list.back()->pluginId()) {//当前为web search,暂不处理
|
||||||
return;
|
return;
|
||||||
} else if (m_selectedPluginID == m_bestListWidget->getWidgetName()) {
|
} else if (m_selectedPluginID == m_bestListWidget->getWidgetName()) {
|
||||||
QModelIndex index = m_bestListWidget->getCurrentSelection();
|
QModelIndex index = m_bestListWidget->getCurrentSelection();
|
||||||
|
@ -169,13 +169,6 @@ void ResultArea::pressDown()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (indexNum >= m_widget_list.size()) {//下一项是web search
|
|
||||||
QModelIndex index = m_webSearchWidget->getModlIndex(0, 0);
|
|
||||||
m_webSearchWidget->setResultSelection(index);
|
|
||||||
m_selectedPluginID = m_webSearchWidget->getWidgetName();
|
|
||||||
m_is_selected = true;
|
|
||||||
this->ensureWidgetVisible(m_webSearchWidget);
|
|
||||||
}
|
|
||||||
if (findNextWidget){
|
if (findNextWidget){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -192,29 +185,7 @@ void ResultArea::pressUp()
|
||||||
if (!m_is_selected) {
|
if (!m_is_selected) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (m_selectedPluginID == m_webSearchWidget->getWidgetName()) {//当前为web search
|
if (m_selectedPluginID == m_bestListWidget->getWidgetName()) {
|
||||||
if (m_bestListWidget->getResultNum() == 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
m_webSearchWidget->clearResultSelection();
|
|
||||||
for (int i = 0; i < m_widget_list.size(); i++) {
|
|
||||||
ResultWidget * plugin = m_widget_list[m_widget_list.size() - (i + 1)];
|
|
||||||
bool findNextWidget = false;
|
|
||||||
if (0 != plugin->getResultNum()) {
|
|
||||||
int maxNum = plugin->getExpandState() ?
|
|
||||||
plugin->getResultNum() : (plugin->getResultNum() < NUM_LIMIT_SHOWN_DEFAULT ?
|
|
||||||
plugin->getResultNum() : NUM_LIMIT_SHOWN_DEFAULT);
|
|
||||||
QModelIndex resultIndex = plugin->getModlIndex(maxNum - 1, 0);
|
|
||||||
plugin->setResultSelection(resultIndex);
|
|
||||||
m_selectedPluginID = plugin->pluginId();
|
|
||||||
findNextWidget = true;
|
|
||||||
sendKeyPressSignal(m_selectedPluginID);
|
|
||||||
}
|
|
||||||
if (findNextWidget) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (m_selectedPluginID == m_bestListWidget->getWidgetName()) {
|
|
||||||
QModelIndex index = m_bestListWidget->getCurrentSelection();
|
QModelIndex index = m_bestListWidget->getCurrentSelection();
|
||||||
int maxNum = m_bestListWidget->getExpandState() ?
|
int maxNum = m_bestListWidget->getExpandState() ?
|
||||||
m_bestListWidget->getResultNum() : (m_bestListWidget->getResultNum() < NUM_LIMIT_SHOWN_DEFAULT ?
|
m_bestListWidget->getResultNum() : (m_bestListWidget->getResultNum() < NUM_LIMIT_SHOWN_DEFAULT ?
|
||||||
|
@ -329,8 +300,6 @@ void ResultArea::onWidgetSizeChanged()
|
||||||
whole_height += widget->height();
|
whole_height += widget->height();
|
||||||
}
|
}
|
||||||
whole_height += m_bestListWidget->height();
|
whole_height += m_bestListWidget->height();
|
||||||
//TODO 网页高度
|
|
||||||
whole_height += m_webSearchWidget->height();
|
|
||||||
|
|
||||||
int spacing_height = m_widget_list.length() > 1 ? m_mainLyt->spacing() : 0;
|
int spacing_height = m_widget_list.length() > 1 ? m_mainLyt->spacing() : 0;
|
||||||
m_widget->setFixedHeight(whole_height + spacing_height * (m_widget_list.length() - 1));
|
m_widget->setFixedHeight(whole_height + spacing_height * (m_widget_list.length() - 1));
|
||||||
|
@ -345,9 +314,6 @@ void ResultArea::setSelectionInfo(QString &pluginID)
|
||||||
if (m_selectedPluginID != m_bestListWidget->getWidgetName()) {
|
if (m_selectedPluginID != m_bestListWidget->getWidgetName()) {
|
||||||
m_bestListWidget->clearResultSelection();
|
m_bestListWidget->clearResultSelection();
|
||||||
}
|
}
|
||||||
if (m_selectedPluginID != m_webSearchWidget->getWidgetName()) {
|
|
||||||
m_webSearchWidget->clearResultSelection();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResultArea::mousePressEvent(QMouseEvent *event)
|
void ResultArea::mousePressEvent(QMouseEvent *event)
|
||||||
|
@ -422,8 +388,6 @@ void ResultArea::initUi()
|
||||||
m_bestListWidget->clearResult();
|
m_bestListWidget->clearResult();
|
||||||
m_mainLyt->addWidget(m_bestListWidget);
|
m_mainLyt->addWidget(m_bestListWidget);
|
||||||
|
|
||||||
m_webSearchWidget = new WebSearchWidget(this);
|
|
||||||
m_mainLyt->addWidget(m_webSearchWidget);
|
|
||||||
m_mainLyt->setContentsMargins(RESULT_LAYOUT_MARGINS);
|
m_mainLyt->setContentsMargins(RESULT_LAYOUT_MARGINS);
|
||||||
this->widget()->setContentsMargins(0,0,0,0);
|
this->widget()->setContentsMargins(0,0,0,0);
|
||||||
m_mainLyt->setSpacing(0);
|
m_mainLyt->setSpacing(0);
|
||||||
|
@ -435,21 +399,25 @@ void ResultArea::initUi()
|
||||||
void ResultArea::initConnections()
|
void ResultArea::initConnections()
|
||||||
{
|
{
|
||||||
connect(this, &ResultArea::startSearch, m_bestListWidget, &BestListWidget::startSearch);
|
connect(this, &ResultArea::startSearch, m_bestListWidget, &BestListWidget::startSearch);
|
||||||
connect(this, &ResultArea::startSearch, m_webSearchWidget, &WebSearchWidget::startSearch);
|
|
||||||
connect(this, &ResultArea::startSearch, this, [=] () {
|
connect(this, &ResultArea::startSearch, this, [=] () {
|
||||||
m_detail_open_state = false;
|
m_detail_open_state = false;
|
||||||
m_is_selected = false;
|
m_is_selected = false;
|
||||||
QModelIndex index = m_webSearchWidget->getModlIndex(0, 0);//每次启动搜索则选中web搜索,待bestlist收到结果后清空选中
|
m_selectedPluginID = "";
|
||||||
m_webSearchWidget->setResultSelection(index);
|
|
||||||
});
|
});
|
||||||
connect(m_bestListWidget, &BestListWidget::sizeChanged, this, &ResultArea::onWidgetSizeChanged);
|
connect(m_bestListWidget, &BestListWidget::sizeChanged, this, &ResultArea::onWidgetSizeChanged);
|
||||||
connect(m_bestListWidget, &BestListWidget::sizeChanged, this, [=] () {
|
connect(m_bestListWidget, &BestListWidget::sizeChanged, this, [=] () {
|
||||||
if (!m_is_selected) {
|
QModelIndex index = m_bestListWidget->getModlIndex(0, 0);
|
||||||
m_webSearchWidget->clearResultSelection();//每次启动搜索则选中web搜索,待bestlist收到结果后清空选中
|
if (index.isValid()) {
|
||||||
QModelIndex index = m_bestListWidget->getModlIndex(0, 0);
|
|
||||||
m_bestListWidget->setResultSelection(index);
|
m_bestListWidget->setResultSelection(index);
|
||||||
m_selectedPluginID = m_bestListWidget->getWidgetName();
|
m_selectedPluginID = m_bestListWidget->getWidgetName();
|
||||||
m_is_selected = true;
|
m_is_selected = true;
|
||||||
|
|
||||||
|
for (ResultWidget * i : m_widget_list) {
|
||||||
|
if (i->pluginId() == m_widget_list.back()->pluginId()) {
|
||||||
|
i->clearResultSelection();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -458,12 +426,10 @@ void ResultArea::initConnections()
|
||||||
m_detail_open_state = true;
|
m_detail_open_state = true;
|
||||||
m_is_selected = true;
|
m_is_selected = true;
|
||||||
m_selectedPluginID = m_bestListWidget->getWidgetName();
|
m_selectedPluginID = m_bestListWidget->getWidgetName();
|
||||||
m_webSearchWidget->clearResultSelection();
|
|
||||||
});
|
});
|
||||||
connect(this, &ResultArea::clearSelectedRow, m_bestListWidget, &BestListWidget::clearSelectedRow);
|
connect(this, &ResultArea::clearSelectedRow, m_bestListWidget, &BestListWidget::clearSelectedRow);
|
||||||
connect(this, &ResultArea::resizeWidth, this, [=] (const int &size) {
|
connect(this, &ResultArea::resizeWidth, this, [=] (const int &size) {
|
||||||
m_bestListWidget->setFixedWidth(size);
|
m_bestListWidget->setFixedWidth(size);
|
||||||
m_webSearchWidget->setFixedWidth(size);
|
|
||||||
});
|
});
|
||||||
connect(m_bestListWidget, &BestListWidget::rowClicked, this, &ResultArea::rowClicked);
|
connect(m_bestListWidget, &BestListWidget::rowClicked, this, &ResultArea::rowClicked);
|
||||||
connect(this->verticalScrollBar(), &QScrollBar::valueChanged, this, [=] (int value) {//判断显示和隐藏逻辑
|
connect(this->verticalScrollBar(), &QScrollBar::valueChanged, this, [=] (int value) {//判断显示和隐藏逻辑
|
||||||
|
@ -516,6 +482,16 @@ void ResultArea::setupConnectionsForWidget(ResultWidget *widget)
|
||||||
});
|
});
|
||||||
connect(this, &ResultArea::stopSearch, widget, &ResultWidget::stopSearch);
|
connect(this, &ResultArea::stopSearch, widget, &ResultWidget::stopSearch);
|
||||||
connect(widget, &ResultWidget::sizeChanged, this, &ResultArea::onWidgetSizeChanged);
|
connect(widget, &ResultWidget::sizeChanged, this, &ResultArea::onWidgetSizeChanged);
|
||||||
|
connect(widget, &ResultWidget::sizeChanged, this, [=] () {
|
||||||
|
if (widget->pluginId() == m_widget_list.back()->pluginId() and m_selectedPluginID != m_bestListWidget->getWidgetName()) {//每次搜索默认选中websearch,由bestlist取消
|
||||||
|
QModelIndex index = widget->getModlIndex(0, 0);
|
||||||
|
if (index.isValid()) {
|
||||||
|
widget->setResultSelection(index);
|
||||||
|
m_is_selected = true;
|
||||||
|
m_selectedPluginID = widget->pluginId();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
connect(widget, &ResultWidget::showMoreClicked, this, [=] () {//点击展开搜索结果后 显示悬浮窗
|
connect(widget, &ResultWidget::showMoreClicked, this, [=] () {//点击展开搜索结果后 显示悬浮窗
|
||||||
this->verticalScrollBar()->setValue(widget->pos().ry() + TITLE_HEIGHT); //置顶当前类型搜索结果
|
this->verticalScrollBar()->setValue(widget->pos().ry() + TITLE_HEIGHT); //置顶当前类型搜索结果
|
||||||
if (widget->height() > FRAME_HEIGHT) {//当前widget高度大于搜索结果界面高度则显示悬浮窗
|
if (widget->height() > FRAME_HEIGHT) {//当前widget高度大于搜索结果界面高度则显示悬浮窗
|
||||||
|
@ -649,6 +625,7 @@ void DetailWidget::updateDetailPage(const QString &plugin_name, const SearchPlug
|
||||||
m_mainLyt->addWidget(m_detailPage);
|
m_mainLyt->addWidget(m_detailPage);
|
||||||
// m_mainLyt->insertWidget(0, m_detailPage, 0);
|
// m_mainLyt->insertWidget(0, m_detailPage, 0);
|
||||||
}
|
}
|
||||||
|
m_currentPluginId = plugin_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DetailWidget::clear()
|
void DetailWidget::clear()
|
||||||
|
|
|
@ -66,7 +66,6 @@ private:
|
||||||
QVBoxLayout * m_mainLyt = nullptr;
|
QVBoxLayout * m_mainLyt = nullptr;
|
||||||
BestListWidget * m_bestListWidget = nullptr;
|
BestListWidget * m_bestListWidget = nullptr;
|
||||||
QList<ResultWidget *> m_widget_list;
|
QList<ResultWidget *> m_widget_list;
|
||||||
WebSearchWidget * m_webSearchWidget = nullptr;
|
|
||||||
TitleLabel * m_titleLable = nullptr;
|
TitleLabel * m_titleLable = nullptr;
|
||||||
|
|
||||||
bool m_detail_open_state = false;
|
bool m_detail_open_state = false;
|
||||||
|
|
|
@ -105,11 +105,11 @@ QString BestListModel::getKey(const QModelIndex &index)
|
||||||
|
|
||||||
void BestListModel::appendInfo(const QString &pluginId, const SearchPluginIface::ResultInfo &info)
|
void BestListModel::appendInfo(const QString &pluginId, const SearchPluginIface::ResultInfo &info)
|
||||||
{
|
{
|
||||||
if (pluginId == "File Search" && m_fileActionKey_tmp != info.actionKey) {//临时保存文件搜索结果的actionKey
|
if (m_plugin_action_key_list.contains(info.actionKey)) {
|
||||||
m_fileActionKey_tmp = info.actionKey;
|
qDebug() << "plugin ID:" << pluginId << "name:" << info.name << "action key:" << info.actionKey << "is same with pre-result!";
|
||||||
}
|
|
||||||
if (pluginId == "File Content Search" && info.actionKey == m_fileActionKey_tmp) {//文本搜索判断是否和保存的actionKey相同
|
|
||||||
return;
|
return;
|
||||||
|
} else {
|
||||||
|
m_plugin_action_key_list.append(info.actionKey);
|
||||||
}
|
}
|
||||||
if (m_plugin_id_list.contains(pluginId)) {
|
if (m_plugin_id_list.contains(pluginId)) {
|
||||||
if (info.name == m_item->m_result_info_list.at(m_plugin_id_list.lastIndexOf(pluginId)).name) {
|
if (info.name == m_item->m_result_info_list.at(m_plugin_id_list.lastIndexOf(pluginId)).name) {
|
||||||
|
@ -148,6 +148,7 @@ void BestListModel::startSearch(const QString &keyword)
|
||||||
if (!m_item->m_result_info_list.isEmpty()) {
|
if (!m_item->m_result_info_list.isEmpty()) {
|
||||||
this->beginResetModel();
|
this->beginResetModel();
|
||||||
m_plugin_id_list.clear();
|
m_plugin_id_list.clear();
|
||||||
|
m_plugin_action_key_list.clear();
|
||||||
m_item->m_result_info_list.clear();
|
m_item->m_result_info_list.clear();
|
||||||
this->endResetModel();
|
this->endResetModel();
|
||||||
Q_EMIT this->itemListChanged(m_item->m_result_info_list.length());
|
Q_EMIT this->itemListChanged(m_item->m_result_info_list.length());
|
||||||
|
|
|
@ -43,8 +43,8 @@ private:
|
||||||
void initConnections();
|
void initConnections();
|
||||||
SearchResultItem * m_item = nullptr;
|
SearchResultItem * m_item = nullptr;
|
||||||
QVector<QString> m_plugin_id_list;
|
QVector<QString> m_plugin_id_list;
|
||||||
|
QVector<QString> m_plugin_action_key_list;
|
||||||
bool m_isExpanded = false;
|
bool m_isExpanded = false;
|
||||||
QString m_fileActionKey_tmp;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif // BESTLISTMODEL_H
|
#endif // BESTLISTMODEL_H
|
||||||
|
|
|
@ -81,7 +81,9 @@ void SearchResultModel::appendInfo(const SearchPluginIface::ResultInfo &info)
|
||||||
m_item->m_result_info_list.append(info);
|
m_item->m_result_info_list.append(info);
|
||||||
this->endResetModel();
|
this->endResetModel();
|
||||||
Q_EMIT this->itemListChanged(m_item->m_result_info_list.length());
|
Q_EMIT this->itemListChanged(m_item->m_result_info_list.length());
|
||||||
Q_EMIT this->sendBestListData(m_plugin_id, m_item->m_result_info_list.at(0));
|
if (m_plugin_id != "Web Page") {
|
||||||
|
Q_EMIT this->sendBestListData(m_plugin_id, m_item->m_result_info_list.at(0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SearchResultModel::startSearch(const QString &keyword)
|
void SearchResultModel::startSearch(const QString &keyword)
|
||||||
|
|
|
@ -119,7 +119,7 @@ void ResultWidget::initUi()
|
||||||
m_mainLyt->setSpacing(MAIN_SPACING);
|
m_mainLyt->setSpacing(MAIN_SPACING);
|
||||||
|
|
||||||
m_titleLabel = new TitleLabel(this);
|
m_titleLabel = new TitleLabel(this);
|
||||||
m_titleLabel->setText(m_plugin_id);
|
m_titleLabel->setText(SearchPluginManager::getInstance()->getPlugin(m_plugin_id)->getPluginName());
|
||||||
m_titleLabel->setFixedHeight(TITLE_HEIGHT);
|
m_titleLabel->setFixedHeight(TITLE_HEIGHT);
|
||||||
|
|
||||||
m_resultView = new ResultView(m_plugin_id, this);
|
m_resultView = new ResultView(m_plugin_id, this);
|
||||||
|
|
|
@ -22,7 +22,7 @@ AppSearchPlugin::AppSearchPlugin(QObject *parent) : QObject(parent)
|
||||||
|
|
||||||
const QString AppSearchPlugin::name()
|
const QString AppSearchPlugin::name()
|
||||||
{
|
{
|
||||||
return tr("Applications Search");
|
return "Applications Search";
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString AppSearchPlugin::description()
|
const QString AppSearchPlugin::description()
|
||||||
|
|
|
@ -19,7 +19,7 @@ FileSearchPlugin::FileSearchPlugin(QObject *parent) : QObject(parent)
|
||||||
|
|
||||||
const QString FileSearchPlugin::name()
|
const QString FileSearchPlugin::name()
|
||||||
{
|
{
|
||||||
return tr("File Search");
|
return "File Search";
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString FileSearchPlugin::description()
|
const QString FileSearchPlugin::description()
|
||||||
|
@ -226,7 +226,7 @@ DirSearchPlugin::DirSearchPlugin(QObject *parent) : QObject(parent)
|
||||||
|
|
||||||
const QString DirSearchPlugin::name()
|
const QString DirSearchPlugin::name()
|
||||||
{
|
{
|
||||||
return tr("Dir Search");
|
return "Dir Search";
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString DirSearchPlugin::description()
|
const QString DirSearchPlugin::description()
|
||||||
|
@ -406,7 +406,7 @@ FileContengSearchPlugin::FileContengSearchPlugin(QObject *parent) : QObject(pare
|
||||||
|
|
||||||
const QString FileContengSearchPlugin::name()
|
const QString FileContengSearchPlugin::name()
|
||||||
{
|
{
|
||||||
return tr("File Content Search");
|
return "File Content Search";
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString FileContengSearchPlugin::description()
|
const QString FileContengSearchPlugin::description()
|
||||||
|
|
|
@ -31,6 +31,7 @@ include(parser/parser.pri)
|
||||||
include(appsearch/appsearch.pri)
|
include(appsearch/appsearch.pri)
|
||||||
include(notesearch/notesearch.pri)
|
include(notesearch/notesearch.pri)
|
||||||
include(settingsearch/settingsearch.pri)
|
include(settingsearch/settingsearch.pri)
|
||||||
|
include(websearch/websearch.pri)
|
||||||
|
|
||||||
LIBS += -L$$OUT_PWD/../libchinese-segmentation/ -lchinese-segmentation
|
LIBS += -L$$OUT_PWD/../libchinese-segmentation/ -lchinese-segmentation
|
||||||
LIBS += -lxapian -lquazip5 -luchardet -lQt5Xdg#-L/usr/local/lib/libjemalloc -ljemalloc
|
LIBS += -lxapian -lquazip5 -luchardet -lQt5Xdg#-L/usr/local/lib/libjemalloc -ljemalloc
|
||||||
|
@ -67,7 +68,7 @@ unix {
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
header.path = /usr/include/ukui-search
|
header.path = /usr/include/ukui-search
|
||||||
header.files += *.h index/*.h appsearch/*.h settingsearch/*.h plugininterface/*.h
|
header.files += *.h index/*.h appsearch/*.h settingsearch/*.h plugininterface/*.h websearch/*.h
|
||||||
INSTALLS += header
|
INSTALLS += header
|
||||||
}
|
}
|
||||||
INCLUDEPATH += $$PWD/../libchinese-segmentation
|
INCLUDEPATH += $$PWD/../libchinese-segmentation
|
||||||
|
|
|
@ -18,7 +18,7 @@ NoteSearchPlugin::NoteSearchPlugin(QObject *parent)
|
||||||
|
|
||||||
const QString NoteSearchPlugin::name()
|
const QString NoteSearchPlugin::name()
|
||||||
{
|
{
|
||||||
return tr("Note Search");
|
return "Note Search";
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString NoteSearchPlugin::description()
|
const QString NoteSearchPlugin::description()
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "app-search-plugin.h"
|
#include "app-search-plugin.h"
|
||||||
#include "settings-search-plugin.h"
|
#include "settings-search-plugin.h"
|
||||||
#include "note-search-plugin.h"
|
#include "note-search-plugin.h"
|
||||||
|
#include "web-search-plugin.h"
|
||||||
|
|
||||||
using namespace Zeeker;
|
using namespace Zeeker;
|
||||||
|
|
||||||
|
@ -16,7 +17,7 @@ SearchPluginManager::SearchPluginManager(QObject *parent)
|
||||||
registerPlugin(new DirSearchPlugin(this));
|
registerPlugin(new DirSearchPlugin(this));
|
||||||
registerPlugin(new FileSearchPlugin(this));
|
registerPlugin(new FileSearchPlugin(this));
|
||||||
registerPlugin(new FileContengSearchPlugin(this));
|
registerPlugin(new FileContengSearchPlugin(this));
|
||||||
|
registerPlugin(new WebSearchPlugin(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SearchPluginManager::registerPlugin(Zeeker::SearchPluginIface *plugin)
|
bool SearchPluginManager::registerPlugin(Zeeker::SearchPluginIface *plugin)
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="100px" height="96px" viewBox="0 0 100 96" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title> Search-web-深色模式</title>
|
||||||
|
<g id="综合搜索SP2" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.100000001">
|
||||||
|
<g id="搜索-网页-预览" transform="translate(-1404.000000, -393.000000)">
|
||||||
|
<g id="-Search-web-深色模式" transform="translate(1404.000000, 393.000000)">
|
||||||
|
<rect id="矩形" fill="#FFFFFF" transform="translate(85.000000, 85.000000) rotate(45.000000) translate(-85.000000, -85.000000) " x="74" y="81" width="22" height="8" rx="4"></rect>
|
||||||
|
<circle id="椭圆形" stroke="#FFFFFF" stroke-width="8" cx="62.5" cy="62.5" r="23.5"></circle>
|
||||||
|
<path d="M92,0 C96.418278,-8.11624501e-16 100,3.581722 100,8 L100,19 L0,19 L0,8 C-5.41083001e-16,3.581722 3.581722,8.11624501e-16 8,0 L92,0 Z M90.5,6 C88.5670034,6 87,7.56700338 87,9.5 C87,11.4329966 88.5670034,13 90.5,13 C92.4329966,13 94,11.4329966 94,9.5 C94,7.56700338 92.4329966,6 90.5,6 Z M78.5,6 C76.5670034,6 75,7.56700338 75,9.5 C75,11.4329966 76.5670034,13 78.5,13 C80.4329966,13 82,11.4329966 82,9.5 C82,7.56700338 80.4329966,6 78.5,6 Z M66.5,6 C64.5670034,6 63,7.56700338 63,9.5 C63,11.4329966 64.5670034,13 66.5,13 C68.4329966,13 70,11.4329966 70,9.5 C70,7.56700338 68.4329966,6 66.5,6 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||||
|
<path d="M92,19 L100,19 L100,39 C100,41.209139 98.209139,43 96,43 C93.790861,43 92,41.209139 92,39 L92,19 L92,19 Z" id="矩形备份" fill="#FFFFFF"></path>
|
||||||
|
<path d="M4,19 L4,79 C4,83.418278 7.581722,87 12,87 L31,87 L31,87" id="路径-2" stroke="#FFFFFF" stroke-width="8" stroke-linecap="round"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="100px" height="96px" viewBox="0 0 100 96" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title> Search-web-浅色模式</title>
|
||||||
|
<g id="综合搜索SP2" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.100000001">
|
||||||
|
<g id="搜索-网页-预览" transform="translate(-1058.000000, -393.000000)">
|
||||||
|
<g id="编组" transform="translate(620.000000, 161.000000)">
|
||||||
|
<g id="编组-12备份-2" transform="translate(8.000000, 66.000000)">
|
||||||
|
<g id="-Search-web-浅色模式" transform="translate(430.000000, 166.000000)">
|
||||||
|
<rect id="矩形" fill="#262626" transform="translate(85.000000, 85.000000) rotate(45.000000) translate(-85.000000, -85.000000) " x="74" y="81" width="22" height="8" rx="4"></rect>
|
||||||
|
<circle id="椭圆形" stroke="#262626" stroke-width="8" cx="62.5" cy="62.5" r="23.5"></circle>
|
||||||
|
<path d="M92,0 C96.418278,-8.11624501e-16 100,3.581722 100,8 L100,19 L0,19 L0,8 C-5.41083001e-16,3.581722 3.581722,8.11624501e-16 8,0 L92,0 Z M90.5,6 C88.5670034,6 87,7.56700338 87,9.5 C87,11.4329966 88.5670034,13 90.5,13 C92.4329966,13 94,11.4329966 94,9.5 C94,7.56700338 92.4329966,6 90.5,6 Z M78.5,6 C76.5670034,6 75,7.56700338 75,9.5 C75,11.4329966 76.5670034,13 78.5,13 C80.4329966,13 82,11.4329966 82,9.5 C82,7.56700338 80.4329966,6 78.5,6 Z M66.5,6 C64.5670034,6 63,7.56700338 63,9.5 C63,11.4329966 64.5670034,13 66.5,13 C68.4329966,13 70,11.4329966 70,9.5 C70,7.56700338 68.4329966,6 66.5,6 Z" id="形状结合" fill="#262626"></path>
|
||||||
|
<path d="M92,19 L100,19 L100,39 C100,41.209139 98.209139,43 96,43 C93.790861,43 92,41.209139 92,39 L92,19 L92,19 Z" id="矩形备份" fill="#262626"></path>
|
||||||
|
<path d="M4,19 L4,79 C4,83.418278 7.581722,87 12,87 L31,87 L31,87" id="路径-2" stroke="#262626" stroke-width="8" stroke-linecap="round"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
|
@ -0,0 +1,46 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="28px" height="28px" viewBox="0 0 28 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<title>搜索</title>
|
||||||
|
<defs>
|
||||||
|
<filter x="-10.4%" y="-10.4%" width="120.8%" height="120.8%" filterUnits="objectBoundingBox" id="filter-1">
|
||||||
|
<feOffset dx="0" dy="0" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||||
|
<feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||||
|
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.304021662 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||||
|
<feMergeNode in="SourceGraphic"></feMergeNode>
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<linearGradient x1="50%" y1="0%" x2="50%" y2="99.4562097%" id="linearGradient-2">
|
||||||
|
<stop stop-color="#F4F5F8" offset="0%"></stop>
|
||||||
|
<stop stop-color="#D7DAE3" offset="100%"></stop>
|
||||||
|
</linearGradient>
|
||||||
|
<path d="M2.81753333,1.07293333 C1.71513333,1.70993333 0.926466667,2.73693333 0.597133333,3.96673333 L0.597133333,3.96673333 C0.266933333,5.19566667 0.435933333,6.48093333 1.07206667,7.58246667 L1.07206667,7.58246667 C1.9214,9.0532 3.5048,9.96666667 5.20433333,9.96666667 L5.20433333,9.96666667 C6.03633333,9.96666667 6.85793333,9.74566667 7.58246667,9.32706667 L7.58246667,9.32706667 C8.68573333,8.69006667 9.4744,7.66306667 9.80373333,6.43326667 L9.80373333,6.43326667 C10.1322,5.20433333 9.96406667,3.91906667 9.32793333,2.81753333 L9.32793333,2.81753333 C8.4786,1.3468 6.8952,0.433333333 5.19566667,0.433333333 L5.19566667,0.433333333 C4.36366667,0.433333333 3.54206667,0.654333333 2.81753333,1.07293333" id="path-3"></path>
|
||||||
|
<linearGradient x1="67.6564459%" y1="76.5684866%" x2="29.1508454%" y2="18.6250777%" id="linearGradient-5">
|
||||||
|
<stop stop-color="#3D8AFD" offset="0%"></stop>
|
||||||
|
<stop stop-color="#75A8FF" offset="100%"></stop>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g id="组件" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="搜索" transform="translate(2.000000, 2.000000)" filter="url(#filter-1)">
|
||||||
|
<rect id="矩形" x="0" y="0" width="24" height="24"></rect>
|
||||||
|
<rect id="矩形" fill="url(#linearGradient-2)" x="2" y="2" width="20" height="20" rx="7"></rect>
|
||||||
|
<rect id="矩形" fill="#7299FF" opacity="0.5" x="5" y="5" width="14" height="2" rx="1"></rect>
|
||||||
|
<rect id="矩形备份" fill="#7299FF" opacity="0.5" x="5" y="9" width="12" height="2" rx="1"></rect>
|
||||||
|
<rect id="矩形备份-2" fill="#7299FF" opacity="0.5" x="5" y="13" width="9" height="2" rx="1"></rect>
|
||||||
|
<rect id="矩形备份-3" fill="#7299FF" opacity="0.5" x="5" y="17" width="9" height="2" rx="1"></rect>
|
||||||
|
<g id="编组-9" transform="translate(14.200000, 13.500000) scale(-1, 1) translate(-14.200000, -13.500000) translate(9.000000, 7.000000)">
|
||||||
|
<polygon id="Fill-13" fill="#E5E5E5" points="2.18694667 11.0043267 1.65134667 10.6949267 2.88981333 8.54992667 3.42541333 8.86019333"></polygon>
|
||||||
|
<path d="M1.04442,12.48884 L0.936953333,12.4273067 C0.52182,12.18724 0.379686667,11.6577067 0.619753333,11.24344 L1.30095333,10.0639067 C1.53928667,9.64964 2.07055333,9.50750667 2.48482,9.74670667 L2.59142,9.80824 C3.00655333,10.04744 3.14868667,10.57784 2.90862,10.9921067 L2.22742,12.17164 C1.98908667,12.5859067 1.45868667,12.72804 1.04442,12.48884" id="Fill-14" fill="#FF6438"></path>
|
||||||
|
<g id="编组">
|
||||||
|
<mask id="mask-4" fill="white">
|
||||||
|
<use xlink:href="#path-3"></use>
|
||||||
|
</mask>
|
||||||
|
<g id="Clip-16"></g>
|
||||||
|
<path d="M2.81753333,1.07293333 C1.71513333,1.70993333 0.926466667,2.73693333 0.597133333,3.96673333 L0.597133333,3.96673333 C0.266933333,5.19566667 0.435933333,6.48093333 1.07206667,7.58246667 L1.07206667,7.58246667 C1.9214,9.0532 3.5048,9.96666667 5.20433333,9.96666667 L5.20433333,9.96666667 C6.03633333,9.96666667 6.85793333,9.74566667 7.58246667,9.32706667 L7.58246667,9.32706667 C8.68573333,8.69006667 9.4744,7.66306667 9.80373333,6.43326667 L9.80373333,6.43326667 C10.1322,5.20433333 9.96406667,3.91906667 9.32793333,2.81753333 L9.32793333,2.81753333 C8.4786,1.3468 6.8952,0.433333333 5.19566667,0.433333333 L5.19566667,0.433333333 C4.36366667,0.433333333 3.54206667,0.654333333 2.81753333,1.07293333" id="Fill-15" fill="url(#linearGradient-5)" mask="url(#mask-4)"></path>
|
||||||
|
</g>
|
||||||
|
<path d="M5.19488667,0 C4.31262,0 3.41908667,0.224466667 2.60095333,0.697666667 C0.11362,2.13286667 -0.738313333,5.31266667 0.697753333,7.8 C1.66062,9.46746667 3.40782,10.4 5.20528667,10.4 C6.08668667,10.4 6.98108667,10.1755333 7.79922,9.70233333 C10.2865533,8.26713333 11.13762,5.08733333 9.70242,2.6 C8.73955333,0.932533333 6.99148667,0 5.19488667,0 M5.19575333,0.866666667 L5.19575333,0.866666667 C6.74102,0.866666667 8.17968667,1.69693333 8.95188667,3.03333333 C10.1461533,5.10293333 9.43548667,7.75753333 7.36588667,8.9518 C6.70722,9.33226667 5.96015333,9.53333333 5.20528667,9.53333333 C3.66002,9.53333333 2.21962,8.70306667 1.44828667,7.36666667 C0.25402,5.29706667 0.964686667,2.64246667 3.03428667,1.4482 C3.69295333,1.06773333 4.44002,0.866666667 5.19575333,0.866666667" id="Fill-17" fill="#EDFFFE"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
|
@ -7,5 +7,8 @@
|
||||||
<file>res/icons/edit-find-symbolic.svg</file>
|
<file>res/icons/edit-find-symbolic.svg</file>
|
||||||
<file>res/icons/net-disconnected.svg</file>
|
<file>res/icons/net-disconnected.svg</file>
|
||||||
<file>res/icons/system-search.symbolic.png</file>
|
<file>res/icons/system-search.symbolic.png</file>
|
||||||
|
<file>res/icons/search-web-icon.svg</file>
|
||||||
|
<file>res/icons/search-web-dark.svg</file>
|
||||||
|
<file>res/icons/search-web-default.svg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
@ -18,7 +18,7 @@ SettingsSearchPlugin::SettingsSearchPlugin(QObject *parent) : QObject(parent)
|
||||||
|
|
||||||
const QString SettingsSearchPlugin::name()
|
const QString SettingsSearchPlugin::name()
|
||||||
{
|
{
|
||||||
return tr("Settings Search");
|
return "Settings Search";
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString SettingsSearchPlugin::description()
|
const QString SettingsSearchPlugin::description()
|
||||||
|
|
|
@ -0,0 +1,110 @@
|
||||||
|
#include "web-search-plugin.h"
|
||||||
|
#include "global-settings.h"
|
||||||
|
|
||||||
|
using namespace Zeeker;
|
||||||
|
WebSearchPlugin::WebSearchPlugin(QObject *parent) : QObject(parent)
|
||||||
|
{
|
||||||
|
SearchPluginIface::Actioninfo open { 0, tr("Start browser search")};
|
||||||
|
m_actionInfo << open;
|
||||||
|
initDetailPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString Zeeker::WebSearchPlugin::name()
|
||||||
|
{
|
||||||
|
return "Web Page";
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString Zeeker::WebSearchPlugin::description()
|
||||||
|
{
|
||||||
|
return tr("Web Page");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Zeeker::WebSearchPlugin::getPluginName()
|
||||||
|
{
|
||||||
|
return tr("Web Page");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Zeeker::WebSearchPlugin::KeywordSearch(QString keyword, DataQueue<Zeeker::SearchPluginIface::ResultInfo> *searchResult)
|
||||||
|
{
|
||||||
|
m_keyWord = keyword;
|
||||||
|
ResultInfo resultInfo;
|
||||||
|
resultInfo.name = m_keyWord;
|
||||||
|
resultInfo.type = 0;
|
||||||
|
resultInfo.icon = QIcon(":/res/icons/search-web-icon.svg");
|
||||||
|
resultInfo.actionKey = m_keyWord;
|
||||||
|
searchResult->enqueue(resultInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<Zeeker::SearchPluginIface::Actioninfo> Zeeker::WebSearchPlugin::getActioninfo(int type)
|
||||||
|
{
|
||||||
|
return m_actionInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Zeeker::WebSearchPlugin::openAction(int actionkey, QString key, int type)
|
||||||
|
{
|
||||||
|
QString address;
|
||||||
|
QString engine = GlobalSettings::getInstance()->getValue("web_engine").toString();
|
||||||
|
if(!engine.isEmpty()) {
|
||||||
|
if(engine == "360") {
|
||||||
|
address = "https://so.com/s?q=" + m_keyWord; //360
|
||||||
|
} else if(engine == "sougou") {
|
||||||
|
address = "https://www.sogou.com/web?query=" + m_keyWord; //搜狗
|
||||||
|
} else {
|
||||||
|
address = "http://baidu.com/s?word=" + m_keyWord; //百度
|
||||||
|
}
|
||||||
|
} else { //默认值
|
||||||
|
address = "http://baidu.com/s?word=" + m_keyWord ; //百度
|
||||||
|
}
|
||||||
|
QDesktopServices::openUrl(address);
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget *Zeeker::WebSearchPlugin::detailPage(const Zeeker::SearchPluginIface::ResultInfo &ri)
|
||||||
|
{
|
||||||
|
return m_detailPage;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Zeeker::WebSearchPlugin::initDetailPage()
|
||||||
|
{
|
||||||
|
m_detailPage = new QWidget();
|
||||||
|
m_detailPage->setFixedWidth(360);
|
||||||
|
m_detailPage->setAttribute(Qt::WA_TranslucentBackground);
|
||||||
|
m_detailLyt = new QVBoxLayout(m_detailPage);
|
||||||
|
m_detailLyt->setContentsMargins(8, 0, 16, 0);
|
||||||
|
m_iconLabel = new QLabel(m_detailPage);
|
||||||
|
m_iconLabel->setAlignment(Qt::AlignCenter);
|
||||||
|
QString type = GlobalSettings::getInstance()->getValue(STYLE_NAME_KEY).toString();
|
||||||
|
if (type == "ukui-dark") {
|
||||||
|
m_iconLabel->setPixmap(QIcon(":/res/icons/search-web-dark.svg").pixmap(100, 96));
|
||||||
|
} else {
|
||||||
|
m_iconLabel->setPixmap(QIcon(":/res/icons/search-web-default.svg").pixmap(100, 96));
|
||||||
|
}
|
||||||
|
connect(qApp, &QApplication::paletteChanged, this, [=] () {
|
||||||
|
QString type = GlobalSettings::getInstance()->getValue(STYLE_NAME_KEY).toString();
|
||||||
|
if (type == "ukui-dark") {
|
||||||
|
m_iconLabel->setPixmap(QIcon(":/res/icons/search-web-dark.svg").pixmap(100, 96));
|
||||||
|
} else {
|
||||||
|
m_iconLabel->setPixmap(QIcon(":/res/icons/search-web-default.svg").pixmap(100, 96));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
m_actionFrame = new QFrame(m_detailPage);
|
||||||
|
m_actionFrameLyt = new QVBoxLayout(m_actionFrame);
|
||||||
|
m_actionFrameLyt->setContentsMargins(0, 0, 0, 0);
|
||||||
|
m_actionFrameLyt->setAlignment(Qt::AlignCenter);
|
||||||
|
m_actionLabel1 = new ActionLabel(tr("Start browser search"), m_currentActionKey, m_actionFrame);
|
||||||
|
m_actionLabel1->adjustSize();
|
||||||
|
|
||||||
|
m_actionFrameLyt->addWidget(m_actionLabel1);;
|
||||||
|
m_actionFrame->setLayout(m_actionFrameLyt);
|
||||||
|
|
||||||
|
m_detailLyt->addSpacing(166);
|
||||||
|
m_detailLyt->addWidget(m_iconLabel);
|
||||||
|
m_detailLyt->addSpacing(6);
|
||||||
|
m_detailLyt->addWidget(m_actionFrame);
|
||||||
|
m_detailPage->setLayout(m_detailLyt);
|
||||||
|
m_detailLyt->addStretch();
|
||||||
|
|
||||||
|
connect(m_actionLabel1, &ActionLabel::actionTriggered, [ & ](){
|
||||||
|
openAction(0, m_currentActionKey, 0);
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
#ifndef WEBSEARCHPLUGIN_H
|
||||||
|
#define WEBSEARCHPLUGIN_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QObject>
|
||||||
|
#include <QThreadPool>
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QHBoxLayout>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
#include <QFrame>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QAction>
|
||||||
|
#include "action-label.h"
|
||||||
|
#include "search-plugin-iface.h"
|
||||||
|
|
||||||
|
namespace Zeeker {
|
||||||
|
class LIBSEARCH_EXPORT WebSearchPlugin : public QObject, public SearchPluginIface
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit WebSearchPlugin(QObject *parent = nullptr);
|
||||||
|
PluginType pluginType() {return PluginType::SearchPlugin;}
|
||||||
|
const QString name();
|
||||||
|
const QString description();
|
||||||
|
const QIcon icon() {return QIcon::fromTheme("folder");}
|
||||||
|
void setEnable(bool enable) {m_enable = enable;}
|
||||||
|
bool isEnable() {return m_enable;}
|
||||||
|
QString getPluginName();
|
||||||
|
void KeywordSearch(QString keyword,DataQueue<ResultInfo> *searchResult);
|
||||||
|
QList<SearchPluginIface::Actioninfo> getActioninfo(int type);
|
||||||
|
void openAction(int actionkey, QString key, int type);
|
||||||
|
QWidget *detailPage(const ResultInfo &ri);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void initDetailPage();
|
||||||
|
QString m_keyWord;
|
||||||
|
QString m_currentActionKey;
|
||||||
|
QWidget *m_detailPage = nullptr;
|
||||||
|
QVBoxLayout *m_detailLyt = nullptr;
|
||||||
|
QLabel *m_iconLabel = nullptr;
|
||||||
|
QFrame *m_actionFrame = nullptr;
|
||||||
|
QVBoxLayout *m_actionFrameLyt = nullptr;
|
||||||
|
ActionLabel *m_actionLabel1 = nullptr;
|
||||||
|
|
||||||
|
QVBoxLayout * m_actionLyt = nullptr;
|
||||||
|
|
||||||
|
bool m_enable = true;
|
||||||
|
QList<WebSearchPlugin::Actioninfo> m_actionInfo;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#endif // WEBSEARCHPLUGIN_H
|
|
@ -0,0 +1,7 @@
|
||||||
|
INCLUDEPATH += $$PWD
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
$$PWD/web-search-plugin.h
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
$$PWD/web-search-plugin.cpp
|
|
@ -4,7 +4,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>Zeeker::AppMatch</name>
|
<name>Zeeker::AppMatch</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/appsearch/app-match.cpp" line="258"/>
|
<location filename="../../libsearch/appsearch/app-match.cpp" line="262"/>
|
||||||
<source>Application Description:</source>
|
<source>Application Description:</source>
|
||||||
<translation>应用描述:</translation>
|
<translation>应用描述:</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -43,7 +43,6 @@
|
||||||
<translation>安装</translation>
|
<translation>安装</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/appsearch/app-search-plugin.cpp" line="25"/>
|
|
||||||
<location filename="../../libsearch/appsearch/app-search-plugin.cpp" line="30"/>
|
<location filename="../../libsearch/appsearch/app-search-plugin.cpp" line="30"/>
|
||||||
<location filename="../../libsearch/appsearch/app-search-plugin.cpp" line="35"/>
|
<location filename="../../libsearch/appsearch/app-search-plugin.cpp" line="35"/>
|
||||||
<source>Applications Search</source>
|
<source>Applications Search</source>
|
||||||
|
@ -79,7 +78,6 @@
|
||||||
<translation>复制文件路径</translation>
|
<translation>复制文件路径</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="229"/>
|
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="239"/>
|
<location filename="../../libsearch/index/file-search-plugin.cpp" line="239"/>
|
||||||
<source>Dir Search</source>
|
<source>Dir Search</source>
|
||||||
<translation>目录搜索</translation>
|
<translation>目录搜索</translation>
|
||||||
|
@ -114,13 +112,13 @@
|
||||||
<name>Zeeker::FileContengSearchPlugin</name>
|
<name>Zeeker::FileContengSearchPlugin</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="398"/>
|
<location filename="../../libsearch/index/file-search-plugin.cpp" line="398"/>
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="597"/>
|
<location filename="../../libsearch/index/file-search-plugin.cpp" line="596"/>
|
||||||
<source>Open</source>
|
<source>Open</source>
|
||||||
<translation>打开</translation>
|
<translation>打开</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="399"/>
|
<location filename="../../libsearch/index/file-search-plugin.cpp" line="399"/>
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="598"/>
|
<location filename="../../libsearch/index/file-search-plugin.cpp" line="597"/>
|
||||||
<source>Open path</source>
|
<source>Open path</source>
|
||||||
<translation>打开文件所在路径</translation>
|
<translation>打开文件所在路径</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -130,9 +128,8 @@
|
||||||
<translation>复制文件路径</translation>
|
<translation>复制文件路径</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="409"/>
|
|
||||||
<source>File Content Search</source>
|
<source>File Content Search</source>
|
||||||
<translation>文本内容搜索</translation>
|
<translation type="vanished">文本内容搜索</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="414"/>
|
<location filename="../../libsearch/index/file-search-plugin.cpp" line="414"/>
|
||||||
|
@ -150,17 +147,17 @@
|
||||||
<translation>文件</translation>
|
<translation>文件</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="572"/>
|
<location filename="../../libsearch/index/file-search-plugin.cpp" line="571"/>
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>路径</translation>
|
<translation>路径</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="584"/>
|
<location filename="../../libsearch/index/file-search-plugin.cpp" line="583"/>
|
||||||
<source>Last time modified</source>
|
<source>Last time modified</source>
|
||||||
<translation>上次修改时间</translation>
|
<translation>上次修改时间</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="599"/>
|
<location filename="../../libsearch/index/file-search-plugin.cpp" line="598"/>
|
||||||
<source>Copy path</source>
|
<source>Copy path</source>
|
||||||
<translation>复制路径</translation>
|
<translation>复制路径</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -185,7 +182,6 @@
|
||||||
<translation>复制文件路径</translation>
|
<translation>复制文件路径</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="22"/>
|
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="32"/>
|
<location filename="../../libsearch/index/file-search-plugin.cpp" line="32"/>
|
||||||
<source>File Search</source>
|
<source>File Search</source>
|
||||||
<translation>文件搜索</translation>
|
<translation>文件搜索</translation>
|
||||||
|
@ -205,7 +201,7 @@
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="69"/>
|
<location filename="../../libsearch/index/file-search-plugin.cpp" line="69"/>
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="185"/>
|
<location filename="../../libsearch/index/file-search-plugin.cpp" line="185"/>
|
||||||
<source>Can not get a default application for opening %1.</source>
|
<source>Can not get a default application for opening %1.</source>
|
||||||
<translation type="unfinished">没有找到默认打开%1的应用。</translation>
|
<translation>没有找到默认打开%1的应用。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/index/file-search-plugin.cpp" line="93"/>
|
<location filename="../../libsearch/index/file-search-plugin.cpp" line="93"/>
|
||||||
|
@ -247,7 +243,6 @@
|
||||||
<translation>打开</translation>
|
<translation>打开</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/notesearch/note-search-plugin.cpp" line="21"/>
|
|
||||||
<location filename="../../libsearch/notesearch/note-search-plugin.cpp" line="31"/>
|
<location filename="../../libsearch/notesearch/note-search-plugin.cpp" line="31"/>
|
||||||
<location filename="../../libsearch/notesearch/note-search-plugin.cpp" line="97"/>
|
<location filename="../../libsearch/notesearch/note-search-plugin.cpp" line="97"/>
|
||||||
<source>Note Search</source>
|
<source>Note Search</source>
|
||||||
|
@ -284,12 +279,11 @@
|
||||||
<name>Zeeker::SettingsSearchPlugin</name>
|
<name>Zeeker::SettingsSearchPlugin</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/settingsearch/settings-search-plugin.cpp" line="11"/>
|
<location filename="../../libsearch/settingsearch/settings-search-plugin.cpp" line="11"/>
|
||||||
<location filename="../../libsearch/settingsearch/settings-search-plugin.cpp" line="364"/>
|
<location filename="../../libsearch/settingsearch/settings-search-plugin.cpp" line="405"/>
|
||||||
<source>Open</source>
|
<source>Open</source>
|
||||||
<translation>打开</translation>
|
<translation>打开</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/settingsearch/settings-search-plugin.cpp" line="21"/>
|
|
||||||
<location filename="../../libsearch/settingsearch/settings-search-plugin.cpp" line="31"/>
|
<location filename="../../libsearch/settingsearch/settings-search-plugin.cpp" line="31"/>
|
||||||
<source>Settings Search</source>
|
<source>Settings Search</source>
|
||||||
<translation>设置</translation>
|
<translation>设置</translation>
|
||||||
|
@ -300,9 +294,24 @@
|
||||||
<translation>设置。</translation>
|
<translation>设置。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../libsearch/settingsearch/settings-search-plugin.cpp" line="350"/>
|
<location filename="../../libsearch/settingsearch/settings-search-plugin.cpp" line="391"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>设置项</translation>
|
<translation>设置项</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>Zeeker::WebSearchPlugin</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../../libsearch/websearch/web-search-plugin.cpp" line="7"/>
|
||||||
|
<location filename="../../libsearch/websearch/web-search-plugin.cpp" line="94"/>
|
||||||
|
<source>Start browser search</source>
|
||||||
|
<translation>启动浏览器搜索</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../libsearch/websearch/web-search-plugin.cpp" line="19"/>
|
||||||
|
<location filename="../../libsearch/websearch/web-search-plugin.cpp" line="24"/>
|
||||||
|
<source>Web Page</source>
|
||||||
|
<translation>网页</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
</TS>
|
</TS>
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>Zeeker::BestListWidget</name>
|
<name>Zeeker::BestListWidget</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../frontend/view/best-list-view.cpp" line="305"/>
|
<location filename="../../frontend/view/best-list-view.cpp" line="309"/>
|
||||||
<source>Best Matches</source>
|
<source>Best Matches</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -243,7 +243,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>Zeeker::WebSearchWidget</name>
|
<name>Zeeker::WebSearchWidget</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../frontend/view/web-search-view.cpp" line="149"/>
|
<location filename="../../frontend/view/web-search-view.cpp" line="150"/>
|
||||||
<source>Web Page</source>
|
<source>Web Page</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
|
@ -247,7 +247,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>Zeeker::BestListWidget</name>
|
<name>Zeeker::BestListWidget</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../frontend/view/best-list-view.cpp" line="305"/>
|
<location filename="../../frontend/view/best-list-view.cpp" line="309"/>
|
||||||
<source>Best Matches</source>
|
<source>Best Matches</source>
|
||||||
<translation type="unfinished">En İyi Eşleşen</translation>
|
<translation type="unfinished">En İyi Eşleşen</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -616,7 +616,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>Zeeker::WebSearchWidget</name>
|
<name>Zeeker::WebSearchWidget</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../frontend/view/web-search-view.cpp" line="149"/>
|
<location filename="../../frontend/view/web-search-view.cpp" line="150"/>
|
||||||
<source>Web Page</source>
|
<source>Web Page</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>Zeeker::BestListWidget</name>
|
<name>Zeeker::BestListWidget</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../frontend/view/best-list-view.cpp" line="305"/>
|
<location filename="../../frontend/view/best-list-view.cpp" line="309"/>
|
||||||
<source>Best Matches</source>
|
<source>Best Matches</source>
|
||||||
<translation>最佳匹配</translation>
|
<translation>最佳匹配</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -397,7 +397,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>Zeeker::WebSearchWidget</name>
|
<name>Zeeker::WebSearchWidget</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../frontend/view/web-search-view.cpp" line="149"/>
|
<location filename="../../frontend/view/web-search-view.cpp" line="150"/>
|
||||||
<source>Web Page</source>
|
<source>Web Page</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
Loading…
Reference in New Issue