1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
/***************************************************************************
* Copyright (C) 2010 by Sebastian Trueg <[email protected]> *
* *
* 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 "facetpanel.h"
#include <nepomuk/filequery.h>
#include <nepomuk/facetwidget.h>
#include <Nepomuk/Query/FileQuery>
#include <Nepomuk/Query/Term>
#include <kfileitem.h>
#include <kio/jobclasses.h>
#include <kio/job.h>
#include <QtGui/QVBoxLayout>
#include <QtGui/QTreeView>
#include <QtGui/QPushButton>
#include <kdebug.h>
FacetPanel::FacetPanel(QWidget* parent)
: Panel(parent)
{
QVBoxLayout* layout = new QVBoxLayout(this);
m_buttonRemoveFolderRestriction = new QPushButton( i18n( "Remove folder restriction" ), this );
connect( m_buttonRemoveFolderRestriction, SIGNAL( clicked() ), SLOT( slotRemoveFolderRestrictionClicked() ) );
layout->addWidget(m_buttonRemoveFolderRestriction);
m_facetWidget = new Nepomuk::Utils::FacetWidget( this );
layout->addWidget( m_facetWidget, 1 );
connect(m_facetWidget, SIGNAL(facetsChanged()), this, SLOT(slotFacetsChanged()) );
// init to empty panel
setQuery(Nepomuk::Query::Query());
}
FacetPanel::~FacetPanel()
{
}
void FacetPanel::setUrl(const KUrl& url)
{
kDebug() << url;
Panel::setUrl(url);
// disable us
setQuery(Nepomuk::Query::Query());
// get the query from the item
m_lastSetUrlStatJob = KIO::stat(url, KIO::HideProgressInfo);
connect(m_lastSetUrlStatJob, SIGNAL(result(KJob*)),
this, SLOT(slotSetUrlStatFinished(KJob*)));
}
void FacetPanel::setQuery(const Nepomuk::Query::Query& query)
{
kDebug() << query << query.isValid() << query.toSparqlQuery();
if (query.isValid()) {
m_buttonRemoveFolderRestriction->setVisible( query.isFileQuery() && !query.toFileQuery().includeFolders().isEmpty() );
m_unfacetedRestQuery = query;
m_unfacetedRestQuery.setTerm( m_facetWidget->extractFacetsFromTerm( query.term() ) );
m_facetWidget->setClientQuery( query );
kDebug() << "Rest query after facets:" << m_unfacetedRestQuery;
setEnabled(true);
}
else {
m_unfacetedRestQuery = Nepomuk::Query::Query();
setEnabled(false);
}
}
void FacetPanel::slotSetUrlStatFinished(KJob* job)
{
m_lastSetUrlStatJob = 0;
kDebug() << url();
const KIO::UDSEntry uds = static_cast<KIO::StatJob*>(job)->statResult();
const QString nepomukQueryStr = uds.stringValue( KIO::UDSEntry::UDS_NEPOMUK_QUERY );
kDebug() << nepomukQueryStr;
Nepomuk::Query::FileQuery nepomukQuery;
if ( !nepomukQueryStr.isEmpty() ) {
nepomukQuery = Nepomuk::Query::Query::fromString( nepomukQueryStr );
}
else if ( url().isLocalFile() ) {
// fallback query for local file URLs
nepomukQuery.addIncludeFolder(url(), false);
}
kDebug() << nepomukQuery;
setQuery(nepomukQuery);
}
void FacetPanel::slotFacetsChanged()
{
Nepomuk::Query::Query query( m_unfacetedRestQuery && m_facetWidget->queryTerm() );
kDebug() << query;
emit urlActivated( query.toSearchUrl() );
}
void FacetPanel::slotRemoveFolderRestrictionClicked()
{
Nepomuk::Query::FileQuery query( m_unfacetedRestQuery && m_facetWidget->queryTerm() );
query.setIncludeFolders( KUrl::List() );
query.setExcludeFolders( KUrl::List() );
m_facetWidget->setClientQuery( query );
emit urlActivated( query.toSearchUrl() );
}
|