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)
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 {
- term.addSubTerm(Baloo::Term("filename", text));
+ } else if (!text.isEmpty()) {
+ term.addSubTerm(Baloo::Term(QLatin1String("filename"), text));
}
if (m_fromHereButton->isChecked()) {
query.addCustomOption("includeFolder", m_searchPath.toLocalFile());
}
+ query.setTerm(term);
+
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));
#else
#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 QVariantHash 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()