#include <KLineEdit>
#include <KLocale>
#include <KSeparator>
+#include <KGlobalSettings>
#include <QButtonGroup>
#include <QDir>
#include <config-baloo.h>
#ifdef HAVE_BALOO
- #include <baloo/query.h>
- #include <baloo/term.h>
- #include <baloo/indexerconfig.h>
+ #include <Baloo/Query>
+ #include <Baloo/Term>
+ #include <Baloo/IndexerConfig>
#endif
DolphinSearchBox::DolphinSearchBox(QWidget* parent) :
QWidget(parent),
m_startedSearching(false),
- m_readOnly(false),
m_active(true),
m_topLayout(0),
m_searchLabel(0),
m_facetsToggleButton(0),
m_facetsWidget(0),
m_searchPath(),
- m_readOnlyQuery(),
m_startSearchTimer(0)
{
}
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_readOnly;
+ const bool showSearchFromButtons = url.isLocalFile();
m_separator->setVisible(showSearchFromButtons);
m_fromHereButton->setVisible(showSearchFromButtons);
m_everywhereButton->setVisible(showSearchFromButtons);
return url;
}
-void DolphinSearchBox::selectAll()
-{
- m_searchInput->selectAll();
-}
-
-void DolphinSearchBox::setReadOnly(bool readOnly, const KUrl& query)
+void DolphinSearchBox::fromSearchUrl(const KUrl& url)
{
- if (m_readOnly != readOnly || m_readOnlyQuery != query) {
- m_readOnly = readOnly;
- m_readOnlyQuery = query;
- applyReadOnlyState();
+ if (url.protocol() == "baloosearch") {
+ fromBalooSearchUrl(url);
+ } else if (url.protocol() == "filenamesearch") {
+ const QMap<QString, QString>& queryItems = url.queryItems();
+ setText(queryItems.value("search"));
+ setSearchPath(queryItems.value("url"));
+ m_contentButton->setChecked(queryItems.value("checkContent") == "yes");
+ } else {
+ setText(QString());
+ setSearchPath(url);
}
}
-bool DolphinSearchBox::isReadOnly() const
+void DolphinSearchBox::selectAll()
{
- return m_readOnly;
+ m_searchInput->selectAll();
}
void DolphinSearchBox::setActive(bool active)
button->setAutoExclusive(true);
button->setAutoRaise(true);
button->setCheckable(true);
- connect(button, SIGNAL(clicked(bool)), this, SLOT(slotConfigurationChanged()));
+ connect(button, &QToolButton::clicked, this, &DolphinSearchBox::slotConfigurationChanged);
}
void DolphinSearchBox::loadSettings()
closeButton->setAutoRaise(true);
closeButton->setIcon(KIcon("dialog-close"));
closeButton->setToolTip(i18nc("@info:tooltip", "Quit searching"));
- connect(closeButton, SIGNAL(clicked()), this, SLOT(emitCloseRequest()));
+ connect(closeButton, &QToolButton::clicked, this, &DolphinSearchBox::emitCloseRequest);
// Create search label
m_searchLabel = new QLabel(this);
m_searchInput->setClearButtonShown(true);
m_searchInput->setFont(KGlobalSettings::generalFont());
setFocusProxy(m_searchInput);
- connect(m_searchInput, SIGNAL(returnPressed(QString)),
- this, SLOT(slotReturnPressed(QString)));
- connect(m_searchInput, SIGNAL(textChanged(QString)),
- this, SLOT(slotSearchTextChanged(QString)));
+ connect(m_searchInput, static_cast<void(KLineEdit::*)(const QString&)>(&KLineEdit::returnPressed),
+ this, &DolphinSearchBox::slotReturnPressed);
+ connect(m_searchInput, &KLineEdit::textChanged,
+ this, &DolphinSearchBox::slotSearchTextChanged);
// Apply layout for the search input
QHBoxLayout* searchInputLayout = new QHBoxLayout();
m_facetsToggleButton = new QToolButton(this);
m_facetsToggleButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
initButton(m_facetsToggleButton);
- connect(m_facetsToggleButton, SIGNAL(clicked()), this, SLOT(slotFacetsButtonToggled()));
+ connect(m_facetsToggleButton, &QToolButton::clicked, this, &DolphinSearchBox::slotFacetsButtonToggled);
m_facetsWidget = new DolphinFacetsWidget(this);
m_facetsWidget->installEventFilter(this);
m_facetsWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
- connect(m_facetsWidget, SIGNAL(facetChanged()), this, SLOT(slotFacetChanged()));
+ connect(m_facetsWidget, &DolphinFacetsWidget::facetChanged, this, &DolphinSearchBox::slotFacetChanged);
// Apply layout for the options
QHBoxLayout* optionsLayout = new QHBoxLayout();
m_startSearchTimer = new QTimer(this);
m_startSearchTimer->setSingleShot(true);
m_startSearchTimer->setInterval(1000);
- connect(m_startSearchTimer, SIGNAL(timeout()), this, SLOT(emitSearchRequest()));
+ connect(m_startSearchTimer, &QTimer::timeout, this, &DolphinSearchBox::emitSearchRequest);
updateFacetsToggleButton();
- applyReadOnlyState();
}
KUrl DolphinSearchBox::balooUrlForSearching() const
Baloo::Query query;
query.addType("File");
- query.addTypes(m_facetsWidget->facetTypes());
+ query.addType(m_facetsWidget->facetType());
Baloo::Term term(Baloo::Term::And);
if (m_contentButton->isChecked()) {
query.setSearchString(text);
- } else {
+ } else if (!text.isEmpty()) {
term.addSubTerm(Baloo::Term(QLatin1String("filename"), text));
}
#endif
}
-void DolphinSearchBox::applyReadOnlyState()
+void DolphinSearchBox::fromBalooSearchUrl(const KUrl& url)
{
#ifdef HAVE_BALOO
- if (m_readOnly) {
- m_searchLabel->setText(Baloo::Query::titleFromQueryUrl(m_readOnlyQuery));
+ const Baloo::Query query = Baloo::Query::fromSearchUrl(url);
+ const Baloo::Term term = query.term();
+
+ // Block all signals to avoid unnecessary "searchRequest" signals
+ // while we adjust the search text and the facet widget.
+ blockSignals(true);
+
+ const QVariantMap customOptions = query.customOptions();
+ if (customOptions.contains("includeFolder")) {
+ setSearchPath(customOptions.value("includeFolder").toString());
} else {
-#else
- {
-#endif
- m_searchLabel->setText(i18nc("@label:textbox", "Find:"));
+ setSearchPath(QDir::homePath());
}
- m_searchInput->setVisible(!m_readOnly);
- m_optionsScrollArea->setVisible(!m_readOnly);
+ if (!query.searchString().isEmpty()) {
+ setText(query.searchString());
+ }
- if (m_readOnly) {
- m_facetsWidget->hide();
- } else {
- m_facetsWidget->setVisible(SearchSettings::showFacetsWidget());
+ QStringList types = query.types();
+ types.removeOne("File"); // We are only interested in facet widget types
+ if (!types.isEmpty()) {
+ m_facetsWidget->setFacetType(types.first());
}
+
+ foreach (const Baloo::Term& subTerm, term.subTerms()) {
+ const QString property = subTerm.property();
+
+ if (property == QLatin1String("filename")) {
+ setText(subTerm.value().toString());
+ } else if (m_facetsWidget->isRatingTerm(subTerm)) {
+ m_facetsWidget->setRatingTerm(subTerm);
+ }
+ }
+
+ m_startSearchTimer->stop();
+ blockSignals(false);
+#endif
}
void DolphinSearchBox::updateFacetsToggleButton()
m_facetsToggleButton->setText(facetsIsVisible ? i18nc("action:button", "Fewer Options") : i18nc("action:button", "More Options"));
}
-#include "dolphinsearchbox.moc"