mirror of
https://invent.kde.org/system/dolphin
synced 2024-11-05 18:47:12 +00:00
Fix visibility- and enabled-issues for the filter-panel
The filter-panel should be disabled if the current folder is not indexed at all. Also when triggering a "Find" the filter-panel should stay invisible per default when the current folder is not indexed. CCBUG: 264969
This commit is contained in:
parent
28f00f36d7
commit
7045a25e3a
8 changed files with 189 additions and 52 deletions
|
@ -114,6 +114,7 @@ set(dolphin_SRCS
|
|||
panels/folders/folderspanel.cpp
|
||||
panels/folders/paneltreeview.cpp
|
||||
search/dolphinsearchbox.cpp
|
||||
search/dolphinsearchinformation.cpp
|
||||
settings/general/behaviorsettingspage.cpp
|
||||
settings/general/contextmenusettingspage.cpp
|
||||
settings/general/generalsettingspage.cpp
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "panels/folders/folderspanel.h"
|
||||
#include "panels/places/placespanel.h"
|
||||
#include "panels/information/informationpanel.h"
|
||||
#include "search/dolphinsearchinformation.h"
|
||||
#include "settings/dolphinsettings.h"
|
||||
#include "settings/dolphinsettingsdialog.h"
|
||||
#include "statusbar/dolphinstatusbar.h"
|
||||
|
@ -1220,13 +1221,14 @@ void DolphinMainWindow::slotWriteStateChanged(bool isFolderWritable)
|
|||
void DolphinMainWindow::slotSearchModeChanged(bool enabled)
|
||||
{
|
||||
#ifdef HAVE_NEPOMUK
|
||||
if (Nepomuk::ResourceManager::instance()->init() != 0) {
|
||||
// Currently the Filter Panel only works with Nepomuk enabled
|
||||
const KUrl url = m_activeViewContainer->url();
|
||||
const DolphinSearchInformation& searchInfo = DolphinSearchInformation::instance();
|
||||
if (!searchInfo.isIndexingEnabled() || !searchInfo.isPathIndexed(url)) {
|
||||
return;
|
||||
}
|
||||
|
||||
QDockWidget* filterDock = findChild<QDockWidget*>("filterDock");
|
||||
if ((filterDock == 0) || !filterDock->isEnabled()) {
|
||||
if (filterDock == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -36,6 +36,8 @@
|
|||
#include <Nepomuk/Vocabulary/NMM>
|
||||
#include <Nepomuk/Vocabulary/NIE>
|
||||
|
||||
#include <search/dolphinsearchinformation.h>
|
||||
|
||||
#include <kfileitem.h>
|
||||
#include <kio/jobclasses.h>
|
||||
#include <kio/job.h>
|
||||
|
@ -49,12 +51,12 @@
|
|||
FilterPanel::FilterPanel(QWidget* parent) :
|
||||
Panel(parent),
|
||||
m_initialized(false),
|
||||
m_nepomukEnabled(false),
|
||||
m_lastSetUrlStatJob(0),
|
||||
m_startedFromDir(),
|
||||
m_facetWidget(0),
|
||||
m_unfacetedRestQuery()
|
||||
{
|
||||
setEnabled(false);
|
||||
}
|
||||
|
||||
FilterPanel::~FilterPanel()
|
||||
|
@ -70,7 +72,7 @@ bool FilterPanel::urlChanged()
|
|||
m_startedFromDir = url();
|
||||
}
|
||||
|
||||
if (isVisible() && m_nepomukEnabled) {
|
||||
if (isVisible() && DolphinSearchInformation::instance().isIndexingEnabled()) {
|
||||
setQuery(Nepomuk::Query::Query());
|
||||
|
||||
delete m_lastSetUrlStatJob;
|
||||
|
@ -140,15 +142,25 @@ void FilterPanel::showEvent(QShowEvent* event)
|
|||
connect(m_facetWidget, SIGNAL(queryTermChanged(Nepomuk::Query::Term)),
|
||||
this, SLOT(slotQueryTermChanged(Nepomuk::Query::Term)));
|
||||
|
||||
m_nepomukEnabled = (Nepomuk::ResourceManager::instance()->init() == 0);
|
||||
m_facetWidget->setEnabled(m_nepomukEnabled);
|
||||
|
||||
m_initialized = true;
|
||||
}
|
||||
|
||||
const DolphinSearchInformation& searchInfo = DolphinSearchInformation::instance();
|
||||
setEnabled(searchInfo.isIndexingEnabled() &&
|
||||
searchInfo.isPathIndexed(m_startedFromDir));
|
||||
|
||||
Panel::showEvent(event);
|
||||
}
|
||||
|
||||
void FilterPanel::hideEvent(QHideEvent* event)
|
||||
{
|
||||
if (!event->spontaneous()) {
|
||||
setEnabled(false);
|
||||
}
|
||||
|
||||
Panel::hideEvent(event);
|
||||
}
|
||||
|
||||
void FilterPanel::contextMenuEvent(QContextMenuEvent* event)
|
||||
{
|
||||
Panel::contextMenuEvent(event);
|
||||
|
@ -218,7 +230,10 @@ void FilterPanel::setQuery(const Nepomuk::Query::Query& query)
|
|||
|
||||
m_unfacetedRestQuery = m_facetWidget->extractFacetsFromQuery(query);
|
||||
m_facetWidget->setClientQuery(query);
|
||||
setEnabled(true);
|
||||
|
||||
const DolphinSearchInformation& searchInfo = DolphinSearchInformation::instance();
|
||||
setEnabled(searchInfo.isIndexingEnabled() &&
|
||||
searchInfo.isPathIndexed(m_startedFromDir));
|
||||
|
||||
m_facetWidget->blockSignals(block);
|
||||
} else {
|
||||
|
|
|
@ -52,6 +52,9 @@ protected:
|
|||
/** @see QWidget::showEvent() */
|
||||
virtual void showEvent(QShowEvent* event);
|
||||
|
||||
/** @see QWidget::hideEvent() */
|
||||
virtual void hideEvent(QHideEvent* event);
|
||||
|
||||
/** @see QWidget::contextMenuEvent() */
|
||||
virtual void contextMenuEvent(QContextMenuEvent* event);
|
||||
|
||||
|
@ -64,7 +67,6 @@ private:
|
|||
|
||||
private:
|
||||
bool m_initialized;
|
||||
bool m_nepomukEnabled;
|
||||
KJob* m_lastSetUrlStatJob;
|
||||
|
||||
KUrl m_startedFromDir;
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "dolphinsearchbox.h"
|
||||
|
||||
#include "dolphin_searchsettings.h"
|
||||
#include "dolphinsearchinformation.h"
|
||||
|
||||
#include <kicon.h>
|
||||
#include <klineedit.h>
|
||||
|
@ -111,7 +112,8 @@ KUrl DolphinSearchBox::searchPath() const
|
|||
KUrl DolphinSearchBox::urlForSearching() const
|
||||
{
|
||||
KUrl url;
|
||||
if (m_nepomukActivated && isSearchPathIndexed()) {
|
||||
const DolphinSearchInformation& searchInfo = DolphinSearchInformation::instance();
|
||||
if (searchInfo.isIndexingEnabled() && searchInfo.isPathIndexed(url)) {
|
||||
url = nepomukUrlForSearching();
|
||||
} else {
|
||||
url.setProtocol("filenamesearch");
|
||||
|
@ -328,41 +330,6 @@ void DolphinSearchBox::init()
|
|||
connect(m_startSearchTimer, SIGNAL(timeout()), this, SLOT(emitSearchSignal()));
|
||||
}
|
||||
|
||||
bool DolphinSearchBox::isSearchPathIndexed() const
|
||||
{
|
||||
#ifdef HAVE_NEPOMUK
|
||||
const QString path = m_searchPath.path();
|
||||
|
||||
const KConfig strigiConfig("nepomukstrigirc");
|
||||
const QStringList indexedFolders = strigiConfig.group("General").readPathEntry("folders", QStringList());
|
||||
|
||||
// Check whether the current search path is part of an indexed folder
|
||||
bool isIndexed = false;
|
||||
foreach (const QString& indexedFolder, indexedFolders) {
|
||||
if (path.startsWith(indexedFolder)) {
|
||||
isIndexed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (isIndexed) {
|
||||
// The current search path is part of an indexed folder. Check whether no
|
||||
// excluded folder is part of the search path.
|
||||
const QStringList excludedFolders = strigiConfig.group("General").readPathEntry("exclude folders", QStringList());
|
||||
foreach (const QString& excludedFolder, excludedFolders) {
|
||||
if (path.startsWith(excludedFolder)) {
|
||||
isIndexed = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return isIndexed;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
KUrl DolphinSearchBox::nepomukUrlForSearching() const
|
||||
{
|
||||
#ifdef HAVE_NEPOMUK
|
||||
|
|
|
@ -107,12 +107,6 @@ private:
|
|||
void saveSettings();
|
||||
void init();
|
||||
|
||||
/**
|
||||
* @return True, if the complete directory tree specified by m_searchPath
|
||||
* is indexed by Strigi.
|
||||
*/
|
||||
bool isSearchPathIndexed() const;
|
||||
|
||||
/**
|
||||
* @return URL that represents the Nepomuk query for starting the search.
|
||||
*/
|
||||
|
|
99
src/search/dolphinsearchinformation.cpp
Normal file
99
src/search/dolphinsearchinformation.cpp
Normal file
|
@ -0,0 +1,99 @@
|
|||
/***************************************************************************
|
||||
* Copyright (C) 2011 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 *
|
||||
***************************************************************************/
|
||||
|
||||
#include "dolphinsearchinformation.h"
|
||||
|
||||
#include <config-nepomuk.h>
|
||||
#ifdef HAVE_NEPOMUK
|
||||
#include <KConfig>
|
||||
#include <KConfigGroup>
|
||||
#include <Nepomuk/ResourceManager>
|
||||
#endif
|
||||
|
||||
#include <KGlobal>
|
||||
#include <KUrl>
|
||||
|
||||
struct DolphinSearchInformationSingleton
|
||||
{
|
||||
DolphinSearchInformation instance;
|
||||
};
|
||||
K_GLOBAL_STATIC(DolphinSearchInformationSingleton, s_dolphinSearchInformation)
|
||||
|
||||
|
||||
DolphinSearchInformation& DolphinSearchInformation::instance()
|
||||
{
|
||||
return s_dolphinSearchInformation->instance;
|
||||
}
|
||||
|
||||
DolphinSearchInformation::~DolphinSearchInformation()
|
||||
{
|
||||
}
|
||||
|
||||
bool DolphinSearchInformation::isIndexingEnabled() const
|
||||
{
|
||||
return m_indexingEnabled;
|
||||
}
|
||||
|
||||
bool DolphinSearchInformation::isPathIndexed(const KUrl& url) const
|
||||
{
|
||||
#ifdef HAVE_NEPOMUK
|
||||
const QString path = url.path();
|
||||
|
||||
const KConfig strigiConfig("nepomukstrigirc");
|
||||
const QStringList indexedFolders = strigiConfig.group("General").readPathEntry("folders", QStringList());
|
||||
|
||||
// Check whether the path is part of an indexed folder
|
||||
bool isIndexed = false;
|
||||
foreach (const QString& indexedFolder, indexedFolders) {
|
||||
if (path.startsWith(indexedFolder)) {
|
||||
isIndexed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (isIndexed) {
|
||||
// The path is part of an indexed folder. Check whether no
|
||||
// excluded folder is part of the path.
|
||||
const QStringList excludedFolders = strigiConfig.group("General").readPathEntry("exclude folders", QStringList());
|
||||
foreach (const QString& excludedFolder, excludedFolders) {
|
||||
if (path.startsWith(excludedFolder)) {
|
||||
isIndexed = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return isIndexed;
|
||||
#else
|
||||
Q_UNUSED(path);
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
DolphinSearchInformation::DolphinSearchInformation() :
|
||||
m_indexingEnabled(false)
|
||||
{
|
||||
#ifdef HAVE_NEPOMUK
|
||||
if (Nepomuk::ResourceManager::instance()->init() == 0) {
|
||||
KConfig config("nepomukserverrc");
|
||||
m_indexingEnabled = config.group("Service-nepomukstrigiservice").readEntry("autostart", false);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
57
src/search/dolphinsearchinformation.h
Normal file
57
src/search/dolphinsearchinformation.h
Normal file
|
@ -0,0 +1,57 @@
|
|||
/***************************************************************************
|
||||
* Copyright (C) 2011 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 *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef DOLPHINSEARCHINFORMATION_H
|
||||
#define DOLPHINSEARCHINFORMATION_H
|
||||
|
||||
class KUrl;
|
||||
|
||||
/**
|
||||
* @brief Allows to access search-engine related information.
|
||||
*/
|
||||
class DolphinSearchInformation
|
||||
{
|
||||
public:
|
||||
static DolphinSearchInformation& instance();
|
||||
virtual ~DolphinSearchInformation();
|
||||
|
||||
/**
|
||||
* @return True if the Nepomuk indexer is enabled. If Nepomuk is
|
||||
* disabled, always false is returned.
|
||||
*/
|
||||
bool isIndexingEnabled() const;
|
||||
|
||||
/**
|
||||
* @return True if the complete directory tree specified by path
|
||||
* is indexed by the Nepomuk indexer. If Nepomuk is disabled,
|
||||
* always false is returned.
|
||||
*/
|
||||
bool isPathIndexed(const KUrl& url) const;
|
||||
|
||||
protected:
|
||||
DolphinSearchInformation();
|
||||
|
||||
private:
|
||||
bool m_indexingEnabled;
|
||||
|
||||
friend class DolphinSearchInformationSingleton;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in a new issue