-/***************************************************************************
-* Copyright (C) 2010 by Peter Penz <peter.penz19@gmail.com> *
-* *
-* 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 2 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, write to the *
-* Free Software Foundation, Inc., *
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
-* **************************************************************************/
+/*
+ * SPDX-FileCopyrightText: 2010 Peter Penz <peter.penz19@gmail.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
#include "dolphinsearchbox.h"
+#include "global.h"
#include "dolphin_searchsettings.h"
#include "dolphinfacetswidget.h"
+#include "dolphinplacesmodelsingleton.h"
+#include "dolphinquery.h"
-#include <panels/places/placesitemmodel.h>
-
-#include <QIcon>
-#include <QLineEdit>
+#include "config-dolphin.h"
+#include <KIO/ApplicationLauncherJob>
#include <KLocalizedString>
#include <KSeparator>
-#include <KNS3/KMoreToolsMenuFactory>
+#include <KService>
+#if HAVE_BALOO
+#include <Baloo/IndexerConfig>
+#include <Baloo/Query>
+#endif
#include <QButtonGroup>
#include <QDir>
-#include <QEvent>
+#include <QFontDatabase>
#include <QHBoxLayout>
+#include <QIcon>
#include <QKeyEvent>
-#include <QLabel>
+#include <QLineEdit>
#include <QScrollArea>
+#include <QShowEvent>
#include <QTimer>
#include <QToolButton>
-#include <QVBoxLayout>
#include <QUrlQuery>
-#include <config-baloo.h>
-#ifdef HAVE_BALOO
- #include <Baloo/Query>
- #include <Baloo/IndexerConfig>
-#endif
-#include <QFontDatabase>
-
-DolphinSearchBox::DolphinSearchBox(QWidget* parent) :
- QWidget(parent),
- m_startedSearching(false),
- m_active(true),
- m_topLayout(nullptr),
- m_searchLabel(nullptr),
- m_searchInput(nullptr),
- m_saveSearchAction(nullptr),
- m_optionsScrollArea(nullptr),
- m_fileNameButton(nullptr),
- m_contentButton(nullptr),
- m_separator(nullptr),
- m_fromHereButton(nullptr),
- m_everywhereButton(nullptr),
- m_facetsToggleButton(nullptr),
- m_facetsWidget(nullptr),
- m_searchPath(),
- m_startSearchTimer(nullptr)
+DolphinSearchBox::DolphinSearchBox(QWidget *parent)
+ : QWidget(parent)
+ , m_startedSearching(false)
+ , m_active(true)
+ , m_topLayout(nullptr)
+ , m_searchInput(nullptr)
+ , m_saveSearchAction(nullptr)
+ , m_optionsScrollArea(nullptr)
+ , m_fileNameButton(nullptr)
+ , m_contentButton(nullptr)
+ , m_separator(nullptr)
+ , m_fromHereButton(nullptr)
+ , m_everywhereButton(nullptr)
+ , m_facetsWidget(nullptr)
+ , m_searchPath()
+ , m_startSearchTimer(nullptr)
{
}
saveSettings();
}
-void DolphinSearchBox::setText(const QString& text)
+void DolphinSearchBox::setText(const QString &text)
{
- m_searchInput->setText(text);
+ if (m_searchInput->text() != text) {
+ m_searchInput->setText(text);
+ }
}
QString DolphinSearchBox::text() const
return m_searchInput->text();
}
-void DolphinSearchBox::setSearchPath(const QUrl& url)
+void DolphinSearchBox::setSearchPath(const QUrl &url)
{
+ if (url == m_searchPath) {
+ return;
+ }
+
+ const QUrl cleanedUrl = url.adjusted(QUrl::RemoveUserInfo | QUrl::StripTrailingSlash);
+
+ if (cleanedUrl.path() == QDir::homePath()) {
+ m_fromHereButton->setChecked(false);
+ m_everywhereButton->setChecked(true);
+ if (!m_searchPath.isEmpty()) {
+ return;
+ }
+ } else {
+ m_everywhereButton->setChecked(false);
+ m_fromHereButton->setChecked(true);
+ }
+
m_searchPath = url;
QFontMetrics metrics(m_fromHereButton->font());
const int maxWidth = metrics.height() * 8;
- QString location = url.fileName();
+ QString location = cleanedUrl.fileName();
if (location.isEmpty()) {
- if (url.isLocalFile()) {
- location = QStringLiteral("/");
- } else {
- location = url.scheme() + QLatin1String(" - ") + url.host();
- }
+ location = cleanedUrl.toString(QUrl::PreferLocalFile);
}
-
const QString elidedLocation = metrics.elidedText(location, Qt::ElideMiddle, maxWidth);
m_fromHereButton->setText(i18nc("action:button", "From Here (%1)", elidedLocation));
-
- const bool showSearchFromButtons = url.isLocalFile();
- m_separator->setVisible(showSearchFromButtons);
- m_fromHereButton->setVisible(showSearchFromButtons);
- m_everywhereButton->setVisible(showSearchFromButtons);
-
- bool hasFacetsSupport = false;
-#ifdef HAVE_BALOO
- const Baloo::IndexerConfig searchInfo;
- hasFacetsSupport = searchInfo.fileIndexingEnabled() && searchInfo.shouldBeIndexed(m_searchPath.toLocalFile());
-#endif
- m_facetsWidget->setEnabled(hasFacetsSupport);
+ m_fromHereButton->setToolTip(i18nc("action:button", "Limit search to '%1' and its subfolders", cleanedUrl.toString(QUrl::PreferLocalFile)));
}
QUrl DolphinSearchBox::searchPath() const
{
- return m_searchPath;
+ return m_everywhereButton->isChecked() ? QUrl::fromLocalFile(QDir::homePath()) : m_searchPath;
}
QUrl DolphinSearchBox::urlForSearching() const
{
QUrl url;
- bool useBalooSearch = false;
-#ifdef HAVE_BALOO
- const Baloo::IndexerConfig searchInfo;
- useBalooSearch = searchInfo.fileIndexingEnabled() && searchInfo.shouldBeIndexed(m_searchPath.toLocalFile());
-#endif
- if (useBalooSearch) {
+
+ if (isIndexingEnabled()) {
url = balooUrlForSearching();
} else {
url.setScheme(QStringLiteral("filenamesearch"));
query.addQueryItem(QStringLiteral("checkContent"), QStringLiteral("yes"));
}
- QString encodedUrl;
- if (m_everywhereButton->isChecked()) {
- // It is very unlikely, that the majority of Dolphins target users
- // mean "the whole harddisk" instead of "my home folder" when
- // selecting the "Everywhere" button.
- encodedUrl = QDir::homePath();
- } else {
- encodedUrl = m_searchPath.url();
- }
- query.addQueryItem(QStringLiteral("url"), encodedUrl);
+ query.addQueryItem(QStringLiteral("url"), searchPath().url());
+ query.addQueryItem(QStringLiteral("title"), queryTitle(m_searchInput->text()));
url.setQuery(query);
}
return url;
}
-void DolphinSearchBox::fromSearchUrl(const QUrl& url)
+void DolphinSearchBox::fromSearchUrl(const QUrl &url)
{
- if (url.scheme() == QLatin1String("baloosearch")) {
- fromBalooSearchUrl(url);
+ if (DolphinQuery::supportsScheme(url.scheme())) {
+ const DolphinQuery query = DolphinQuery::fromSearchUrl(url);
+ updateFromQuery(query);
} else if (url.scheme() == QLatin1String("filenamesearch")) {
const QUrlQuery query(url);
setText(query.queryItemValue(QStringLiteral("search")));
+ if (m_searchPath.scheme() != url.scheme()) {
+ m_searchPath = QUrl();
+ }
setSearchPath(QUrl::fromUserInput(query.queryItemValue(QStringLiteral("url")), QString(), QUrl::AssumeLocalFile));
m_contentButton->setChecked(query.queryItemValue(QStringLiteral("checkContent")) == QLatin1String("yes"));
} else {
setText(QString());
+ m_searchPath = QUrl();
setSearchPath(url);
}
+
+ updateFacetsVisible();
}
void DolphinSearchBox::selectAll()
m_active = active;
if (active) {
- emit activated();
+ Q_EMIT activated();
}
}
}
return m_active;
}
-bool DolphinSearchBox::event(QEvent* event)
+bool DolphinSearchBox::event(QEvent *event)
{
if (event->type() == QEvent::Polish) {
init();
return QWidget::event(event);
}
-void DolphinSearchBox::showEvent(QShowEvent* event)
+void DolphinSearchBox::showEvent(QShowEvent *event)
{
if (!event->spontaneous()) {
m_searchInput->setFocus();
}
}
-void DolphinSearchBox::hideEvent(QHideEvent* event)
+void DolphinSearchBox::hideEvent(QHideEvent *event)
{
- Q_UNUSED(event);
+ Q_UNUSED(event)
m_startedSearching = false;
m_startSearchTimer->stop();
}
-void DolphinSearchBox::keyReleaseEvent(QKeyEvent* event)
+void DolphinSearchBox::keyReleaseEvent(QKeyEvent *event)
{
QWidget::keyReleaseEvent(event);
if (event->key() == Qt::Key_Escape) {
if (m_searchInput->text().isEmpty()) {
- emit closeRequest();
+ emitCloseRequest();
} else {
m_searchInput->clear();
}
+ } else if (event->key() == Qt::Key_Down) {
+ Q_EMIT focusViewRequest();
}
}
-bool DolphinSearchBox::eventFilter(QObject* obj, QEvent* event)
+bool DolphinSearchBox::eventFilter(QObject *obj, QEvent *event)
{
switch (event->type()) {
case QEvent::FocusIn:
// #379135: we get the FocusIn event when we close a tab but we don't want to emit
// the activated() signal before the removeTab() call in DolphinTabWidget::closeTab() returns.
// To avoid this issue, we delay the activation of the search box.
- QTimer::singleShot(0, this, [this] {
- setActive(true);
- setFocus();
- });
+ // We also don't want to schedule the activation process if we are already active,
+ // otherwise we can enter in a loop of FocusIn/FocusOut events with the searchbox of another tab.
+ if (!isActive()) {
+ QTimer::singleShot(0, this, [this] {
+ setActive(true);
+ setFocus();
+ });
+ }
break;
default:
m_startSearchTimer->stop();
m_startedSearching = true;
m_saveSearchAction->setEnabled(true);
- emit searchRequest();
+ Q_EMIT searchRequest();
}
void DolphinSearchBox::emitCloseRequest()
m_startSearchTimer->stop();
m_startedSearching = false;
m_saveSearchAction->setEnabled(false);
- emit closeRequest();
+ Q_EMIT closeRequest();
}
void DolphinSearchBox::slotConfigurationChanged()
}
}
-void DolphinSearchBox::slotSearchTextChanged(const QString& text)
+void DolphinSearchBox::slotSearchTextChanged(const QString &text)
{
-
if (text.isEmpty()) {
- m_startSearchTimer->stop();
+ // Restore URL when search box is cleared by closing and reopening the box.
+ emitCloseRequest();
+ Q_EMIT openRequest();
} else {
m_startSearchTimer->start();
}
- emit searchTextChanged(text);
+ Q_EMIT searchTextChanged(text);
}
void DolphinSearchBox::slotReturnPressed()
{
- emitSearchRequest();
- emit returnPressed();
-}
+ if (m_searchInput->text().isEmpty()) {
+ return;
+ }
-void DolphinSearchBox::slotFacetsButtonToggled()
-{
- const bool facetsIsVisible = !m_facetsWidget->isVisible();
- m_facetsWidget->setVisible(facetsIsVisible);
- updateFacetsToggleButton();
+ emitSearchRequest();
+ Q_EMIT focusViewRequest();
}
void DolphinSearchBox::slotFacetChanged()
{
m_startedSearching = true;
m_startSearchTimer->stop();
- emit searchRequest();
+ Q_EMIT searchRequest();
}
void DolphinSearchBox::slotSearchSaved()
{
const QUrl searchURL = urlForSearching();
if (searchURL.isValid()) {
- PlacesItemModel model;
const QString label = i18n("Search for %1 in %2", text(), searchPath().fileName());
- model.createPlacesItem(label,
- searchURL,
- QStringLiteral("folder-saved-search-symbolic"));
+ DolphinPlacesModelSingleton::instance().placesModel()->addPlace(label, searchURL, QStringLiteral("folder-saved-search-symbolic"));
}
}
-void DolphinSearchBox::initButton(QToolButton* button)
+void DolphinSearchBox::initButton(QToolButton *button)
{
button->installEventFilter(this);
button->setAutoExclusive(true);
m_fileNameButton->setChecked(true);
}
- m_facetsWidget->setVisible(SearchSettings::showFacetsWidget());
+ updateFacetsVisible();
}
void DolphinSearchBox::saveSettings()
{
SearchSettings::setLocation(m_fromHereButton->isChecked() ? QStringLiteral("FromHere") : QStringLiteral("Everywhere"));
SearchSettings::setWhat(m_fileNameButton->isChecked() ? QStringLiteral("FileName") : QStringLiteral("Content"));
- SearchSettings::setShowFacetsWidget(m_facetsToggleButton->isChecked());
SearchSettings::self()->save();
}
void DolphinSearchBox::init()
{
- // Create close button
- QToolButton* closeButton = new QToolButton(this);
- closeButton->setAutoRaise(true);
- closeButton->setIcon(QIcon::fromTheme(QStringLiteral("dialog-close")));
- closeButton->setToolTip(i18nc("@info:tooltip", "Quit searching"));
- connect(closeButton, &QToolButton::clicked, this, &DolphinSearchBox::emitCloseRequest);
-
- // Create search label
- m_searchLabel = new QLabel(this);
-
// Create search box
m_searchInput = new QLineEdit(this);
+ m_searchInput->setPlaceholderText(i18n("Search…"));
m_searchInput->installEventFilter(this);
m_searchInput->setClearButtonEnabled(true);
m_searchInput->setFont(QFontDatabase::systemFont(QFontDatabase::GeneralFont));
- connect(m_searchInput, &QLineEdit::returnPressed,
- this, &DolphinSearchBox::slotReturnPressed);
- connect(m_searchInput, &QLineEdit::textChanged,
- this, &DolphinSearchBox::slotSearchTextChanged);
+ connect(m_searchInput, &QLineEdit::returnPressed, this, &DolphinSearchBox::slotReturnPressed);
+ connect(m_searchInput, &QLineEdit::textChanged, this, &DolphinSearchBox::slotSearchTextChanged);
setFocusProxy(m_searchInput);
// Add "Save search" button inside search box
m_saveSearchAction = new QAction(this);
- m_saveSearchAction->setIcon (QIcon::fromTheme(QStringLiteral("document-save-symbolic")));
+ m_saveSearchAction->setIcon(QIcon::fromTheme(QStringLiteral("document-save-symbolic")));
m_saveSearchAction->setText(i18nc("action:button", "Save this search to quickly access it again in the future"));
m_saveSearchAction->setEnabled(false);
m_searchInput->addAction(m_saveSearchAction, QLineEdit::TrailingPosition);
connect(m_saveSearchAction, &QAction::triggered, this, &DolphinSearchBox::slotSearchSaved);
+ // Create close button
+ QToolButton *closeButton = new QToolButton(this);
+ closeButton->setAutoRaise(true);
+ closeButton->setIcon(QIcon::fromTheme(QStringLiteral("dialog-close")));
+ closeButton->setToolTip(i18nc("@info:tooltip", "Quit searching"));
+ connect(closeButton, &QToolButton::clicked, this, &DolphinSearchBox::emitCloseRequest);
+
// Apply layout for the search input
- QHBoxLayout* searchInputLayout = new QHBoxLayout();
- searchInputLayout->setMargin(0);
- searchInputLayout->addWidget(closeButton);
- searchInputLayout->addWidget(m_searchLabel);
+ QHBoxLayout *searchInputLayout = new QHBoxLayout();
+ searchInputLayout->setContentsMargins(0, 0, 0, 0);
searchInputLayout->addWidget(m_searchInput);
+ searchInputLayout->addWidget(closeButton);
// Create "Filename" and "Content" button
m_fileNameButton = new QToolButton(this);
m_contentButton->setText(i18nc("action:button", "Content"));
initButton(m_contentButton);
- QButtonGroup* searchWhatGroup = new QButtonGroup(this);
+ QButtonGroup *searchWhatGroup = new QButtonGroup(this);
searchWhatGroup->addButton(m_fileNameButton);
searchWhatGroup->addButton(m_contentButton);
m_separator = new KSeparator(Qt::Vertical, this);
- // Create "From Here" and "Everywhere"button
+ // Create "From Here" and "Your files" buttons
m_fromHereButton = new QToolButton(this);
m_fromHereButton->setText(i18nc("action:button", "From Here"));
initButton(m_fromHereButton);
m_everywhereButton = new QToolButton(this);
- m_everywhereButton->setText(i18nc("action:button", "Everywhere"));
+ m_everywhereButton->setText(i18nc("action:button", "Your files"));
+ m_everywhereButton->setToolTip(i18nc("action:button", "Search in your home directory"));
+ m_everywhereButton->setIcon(QIcon::fromTheme(QStringLiteral("user-home")));
+ m_everywhereButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
initButton(m_everywhereButton);
- QButtonGroup* searchLocationGroup = new QButtonGroup(this);
+ QButtonGroup *searchLocationGroup = new QButtonGroup(this);
searchLocationGroup->addButton(m_fromHereButton);
searchLocationGroup->addButton(m_everywhereButton);
- auto moreSearchToolsButton = new QToolButton(this);
- moreSearchToolsButton->setAutoRaise(true);
- moreSearchToolsButton->setPopupMode(QToolButton::InstantPopup);
- moreSearchToolsButton->setIcon(QIcon::fromTheme("arrow-down-double"));
- moreSearchToolsButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
- moreSearchToolsButton->setText(i18n("More Search Tools"));
- moreSearchToolsButton->setMenu(new QMenu(this));
- connect(moreSearchToolsButton->menu(), &QMenu::aboutToShow, moreSearchToolsButton->menu(), [this, moreSearchToolsButton]()
- {
- m_menuFactory.reset(new KMoreToolsMenuFactory("dolphin/search-tools"));
- moreSearchToolsButton->menu()->clear();
- m_menuFactory->fillMenuFromGroupingNames(moreSearchToolsButton->menu(), { "files-find" }, this->m_searchPath);
- } );
-
- // Create "Facets" widgets
- m_facetsToggleButton = new QToolButton(this);
- m_facetsToggleButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
- initButton(m_facetsToggleButton);
- connect(m_facetsToggleButton, &QToolButton::clicked, this, &DolphinSearchBox::slotFacetsButtonToggled);
+ KService::Ptr kfind = KService::serviceByDesktopName(QStringLiteral("org.kde.kfind"));
+
+ QToolButton *kfindToolsButton = nullptr;
+ if (kfind) {
+ kfindToolsButton = new QToolButton(this);
+ kfindToolsButton->setAutoRaise(true);
+ kfindToolsButton->setPopupMode(QToolButton::InstantPopup);
+ kfindToolsButton->setIcon(QIcon::fromTheme("arrow-down-double"));
+ kfindToolsButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+ kfindToolsButton->setText(i18n("Open %1", kfind->name()));
+ kfindToolsButton->setIcon(QIcon::fromTheme(kfind->icon()));
+
+ connect(kfindToolsButton, &QToolButton::clicked, this, [this, kfind] {
+ auto *job = new KIO::ApplicationLauncherJob(kfind);
+ job->setUrls({m_searchPath});
+ job->start();
+ });
+ }
+ // Create "Facets" widget
m_facetsWidget = new DolphinFacetsWidget(this);
m_facetsWidget->installEventFilter(this);
m_facetsWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
+ m_facetsWidget->layout()->setSpacing(Dolphin::LAYOUT_SPACING_SMALL);
connect(m_facetsWidget, &DolphinFacetsWidget::facetChanged, this, &DolphinSearchBox::slotFacetChanged);
+ // Put the options into a QScrollArea. This prevents increasing the view width
+ // in case that not enough width for the options is available.
+ QWidget *optionsContainer = new QWidget(this);
+
// Apply layout for the options
- QHBoxLayout* optionsLayout = new QHBoxLayout();
- optionsLayout->setMargin(0);
+ QHBoxLayout *optionsLayout = new QHBoxLayout(optionsContainer);
+ optionsLayout->setContentsMargins(0, 0, 0, 0);
+ optionsLayout->setSpacing(Dolphin::LAYOUT_SPACING_SMALL);
optionsLayout->addWidget(m_fileNameButton);
optionsLayout->addWidget(m_contentButton);
optionsLayout->addWidget(m_separator);
optionsLayout->addWidget(m_fromHereButton);
optionsLayout->addWidget(m_everywhereButton);
optionsLayout->addWidget(new KSeparator(Qt::Vertical, this));
- optionsLayout->addWidget(m_facetsToggleButton);
- optionsLayout->addWidget(moreSearchToolsButton);
+ if (kfindToolsButton) {
+ optionsLayout->addWidget(kfindToolsButton);
+ }
optionsLayout->addStretch(1);
- // Put the options into a QScrollArea. This prevents increasing the view width
- // in case that not enough width for the options is available.
- QWidget* optionsContainer = new QWidget(this);
- optionsContainer->setLayout(optionsLayout);
-
m_optionsScrollArea = new QScrollArea(this);
m_optionsScrollArea->setFrameShape(QFrame::NoFrame);
m_optionsScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_optionsScrollArea->setWidgetResizable(true);
m_topLayout = new QVBoxLayout(this);
- m_topLayout->setMargin(0);
+ m_topLayout->setContentsMargins(0, Dolphin::LAYOUT_SPACING_SMALL, 0, 0);
+ m_topLayout->setSpacing(Dolphin::LAYOUT_SPACING_SMALL);
m_topLayout->addLayout(searchInputLayout);
m_topLayout->addWidget(m_optionsScrollArea);
m_topLayout->addWidget(m_facetsWidget);
loadSettings();
// The searching should be started automatically after the user did not change
- // the text within one second
+ // the text for a while
m_startSearchTimer = new QTimer(this);
m_startSearchTimer->setSingleShot(true);
- m_startSearchTimer->setInterval(1000);
+ m_startSearchTimer->setInterval(500);
connect(m_startSearchTimer, &QTimer::timeout, this, &DolphinSearchBox::emitSearchRequest);
+}
- updateFacetsToggleButton();
+QString DolphinSearchBox::queryTitle(const QString &text) const
+{
+ return i18nc("@title UDS_DISPLAY_NAME for a KIO directory listing. %1 is the query the user entered.", "Query Results from '%1'", text);
}
QUrl DolphinSearchBox::balooUrlForSearching() const
{
-#ifdef HAVE_BALOO
+#if HAVE_BALOO
const QString text = m_searchInput->text();
Baloo::Query query;
query.addType(m_facetsWidget->facetType());
- QStringList queryStrings;
- QString ratingQuery = m_facetsWidget->ratingTerm();
- if (!ratingQuery.isEmpty()) {
- queryStrings << ratingQuery;
- }
+ QStringList queryStrings = m_facetsWidget->searchTerms();
if (m_contentButton->isChecked()) {
queryStrings << text;
query.setIncludeFolder(m_searchPath.toLocalFile());
}
- query.setSearchString(queryStrings.join(QStringLiteral(" ")));
+ query.setSearchString(queryStrings.join(QLatin1Char(' ')));
- return query.toSearchUrl(i18nc("@title UDS_DISPLAY_NAME for a KIO directory listing. %1 is the query the user entered.",
- "Query Results from '%1'", text));
+ return query.toSearchUrl(queryTitle(text));
#else
return QUrl();
#endif
}
-void DolphinSearchBox::fromBalooSearchUrl(const QUrl& url)
+void DolphinSearchBox::updateFromQuery(const DolphinQuery &query)
{
-#ifdef HAVE_BALOO
- const Baloo::Query query = Baloo::Query::fromSearchUrl(url);
-
// Block all signals to avoid unnecessary "searchRequest" signals
// while we adjust the search text and the facet widget.
blockSignals(true);
setSearchPath(QUrl::fromLocalFile(QDir::homePath()));
}
- setText(query.searchString());
+ setText(query.text());
- QStringList types = query.types();
- if (!types.isEmpty()) {
- m_facetsWidget->setFacetType(types.first());
+ if (query.hasContentSearch()) {
+ m_contentButton->setChecked(true);
+ } else if (query.hasFileName()) {
+ m_fileNameButton->setChecked(true);
}
- const QStringList subTerms = query.searchString().split(' ', QString::SkipEmptyParts);
- foreach (const QString& subTerm, subTerms) {
- if (subTerm.startsWith(QLatin1String("filename:"))) {
- const QString value = subTerm.mid(9);
- setText(value);
- } else if (m_facetsWidget->isRatingTerm(subTerm)) {
- m_facetsWidget->setRatingTerm(subTerm);
- }
+ m_facetsWidget->resetSearchTerms();
+ m_facetsWidget->setFacetType(query.type());
+ const QStringList searchTerms = query.searchTerms();
+ for (const QString &searchTerm : searchTerms) {
+ m_facetsWidget->setSearchTerm(searchTerm);
}
m_startSearchTimer->stop();
blockSignals(false);
-#else
- Q_UNUSED(url);
-#endif
}
-void DolphinSearchBox::updateFacetsToggleButton()
+void DolphinSearchBox::updateFacetsVisible()
+{
+ const bool indexingEnabled = isIndexingEnabled();
+ m_facetsWidget->setEnabled(indexingEnabled);
+ m_facetsWidget->setVisible(indexingEnabled);
+}
+
+bool DolphinSearchBox::isIndexingEnabled() const
{
- const bool facetsIsVisible = SearchSettings::showFacetsWidget();
- m_facetsToggleButton->setChecked(facetsIsVisible ? true : false);
- m_facetsToggleButton->setIcon(QIcon::fromTheme(facetsIsVisible ? QStringLiteral("arrow-up-double") : QStringLiteral("arrow-down-double")));
- m_facetsToggleButton->setText(facetsIsVisible ? i18nc("action:button", "Fewer Options") : i18nc("action:button", "More Options"));
+#if HAVE_BALOO
+ const Baloo::IndexerConfig searchInfo;
+ return searchInfo.fileIndexingEnabled() && !searchPath().isEmpty() && searchInfo.shouldBeIndexed(searchPath().toLocalFile());
+#else
+ return false;
+#endif
}
+#include "moc_dolphinsearchbox.cpp"