summaryrefslogtreecommitdiff
path: root/src/urlbar/resourcelinkdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/urlbar/resourcelinkdialog.cpp')
-rw-r--r--src/urlbar/resourcelinkdialog.cpp347
1 files changed, 347 insertions, 0 deletions
diff --git a/src/urlbar/resourcelinkdialog.cpp b/src/urlbar/resourcelinkdialog.cpp
new file mode 100644
index 00000000..9c2ab203
--- /dev/null
+++ b/src/urlbar/resourcelinkdialog.cpp
@@ -0,0 +1,347 @@
+/*
+ This is a part of the GSoC project - Fancy Bookmarking
+ Copyright 2011 Phaneendra Hegde <pnh.pes@gmail.com>
+
+ This library is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version.
+
+ This library 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 Library General Public
+ License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+*/
+
+//Local Includes
+#include "resourcelinkdialog.h"
+#include "newresourcedialog.h"
+
+//Qt Includes
+#include <QtGui/QGridLayout>
+#include <QtGui/QHBoxLayout>
+#include <QtGui/QComboBox>
+#include <QtGui/QAbstractItemView>
+#include <QLabel>
+#include <QListView>
+#include <QPushButton>
+#include <QColumnView>
+#include <QStringListModel>
+#include <QStandardItem>
+#include <QModelIndexList>
+#include <QItemSelectionModel>
+#include <QMenu>
+#include <QListWidget>
+
+//KDE Includes
+#include <KLocale>
+#include <KDebug>
+#include <KAction>
+#include <KIcon>
+
+//Nepomuk Includes
+#include <Nepomuk/Utils/SimpleResourceModel>
+#include <Nepomuk/Query/Term>
+#include <Nepomuk/Query/Result>
+#include <Nepomuk/Query/ResourceTypeTerm>
+#include <Nepomuk/Query/QueryServiceClient>
+#include <Nepomuk/Vocabulary/PIMO>
+#include <Nepomuk/Vocabulary/NCO>
+#include <Nepomuk/Query/QueryParser>
+#include <Nepomuk/Variant>
+
+
+class Nepomuk::ResourceLinkDialog::Private
+{
+public:
+ void _k_selectionChanged();
+
+ KLineEdit *m_searchBox;
+ QListView *m_resourceView;
+ QListView *m_linkedResources;
+ KAction *m_removeResourceAction;
+ QComboBox *m_resourceSelect;
+ QLabel *m_resourceLabel;
+ QLabel *m_linkedResourceLabel;
+ QColumnView *m_leftPanel;
+ QStringListModel *m_model;
+ QPushButton *m_newResourceButton;
+ Utils::SimpleResourceModel *m_resourceModel;
+ Utils::SimpleResourceModel *m_linkedResourceModel;
+ Nepomuk::ResourceLinkDialog *q;
+
+ Nepomuk::Resource m_nfoResource;
+
+};
+
+void Nepomuk::ResourceLinkDialog::Private::_k_selectionChanged()
+{
+ q->enableButton( KDialog::User1, !m_resourceView->selectionModel()->selectedRows().isEmpty() );
+}
+
+
+Nepomuk::ResourceLinkDialog::ResourceLinkDialog( Nepomuk::Resource &nfoResource, QWidget* parent ):
+ KDialog( parent ),
+ d( new Private() )
+{
+ d->m_nfoResource = nfoResource;
+ setWindowTitle( i18n( "Resource Linker" ) );
+ setButtons( Ok | User1 | User2 | Cancel );
+ enableButtonCancel( true );
+ enableButtonOk( true );
+ enableButton( User1, false );
+ setButtonText( Ok, i18n( "Done" ) );
+ setButtonText( User1, i18n( "Link" ) );
+ setButtonText( User2, "Unlink" );
+ setMinimumSize(400,350);
+// d->m_resourceView->setSelectionMode(QAbstractItemView::ExtendedSelection);
+ QGridLayout *mainLayout = new QGridLayout ( mainWidget() );
+
+ d->q = this;
+
+ d->m_linkedResources = new QListView ( mainWidget() );
+ d->m_linkedResourceModel = new Utils::SimpleResourceModel( this );
+ d->m_linkedResources->setModel( d->m_linkedResourceModel );
+ setRelatedResources();
+
+ d->m_searchBox = new KLineEdit ( mainWidget() );
+ d->m_searchBox->setPlaceholderText( i18n( "Search resources" ) );
+ connect( d->m_searchBox, SIGNAL( textChanged( QString ) ), this, SLOT( dynamicSearchingSlot() ) );
+
+ d->m_resourceView = new QListView ( mainWidget() );
+ d->m_resourceView->setToolTip( i18n( " Double click to link resource ") );
+ d->m_resourceModel = new Utils::SimpleResourceModel( this );
+ d->m_resourceView->setModel( d->m_resourceModel );
+
+ d->m_resourceSelect = new QComboBox( mainWidget() );
+ QStringList rlist;
+ rlist << i18n( "Any resource" ) << i18n( "Persons" ) << i18n( "Projects" ) << i18n( "Tasks" ) << i18n( "Places" ) << i18n( "Notes" );
+ d->m_resourceSelect->addItems( rlist );
+ d->m_resourceSelect->setItemIcon(1,KIcon("user-identity"));
+ d->m_resourceSelect->setItemIcon(2,KIcon("project-development"));
+ d->m_resourceSelect->setItemIcon(3,KIcon("view-pim-tasks"));
+ d->m_resourceSelect->setItemIcon(4,KIcon("user-location"));
+ d->m_resourceSelect->setItemIcon(5,KIcon("knotes"));
+ connect( d->m_resourceSelect, SIGNAL( currentIndexChanged( int ) ), this, SLOT( resourceSelectedSlot( int ) ) );
+
+ d->m_resourceLabel = new QLabel( i18n( "Matching resources:" ), mainWidget() );
+ d->m_linkedResourceLabel = new QLabel( i18n( "Linked Resources:" ), mainWidget() );
+
+
+ d->m_newResourceButton = new QPushButton( mainWidget() );
+ d->m_newResourceButton->setText( i18n( "Create New Resource" ) );
+ if( d->m_resourceSelect->currentIndex() == 0 ) {
+ d->m_newResourceButton->setEnabled( false );
+ }
+ connect(d->m_newResourceButton, SIGNAL( clicked() ), this, SLOT( createNewResourceSlot() ) );
+
+ QVBoxLayout *vlayoutR = new QVBoxLayout;
+ QVBoxLayout *vlayoutL = new QVBoxLayout;
+ vlayoutL->addWidget( d->m_searchBox );
+ vlayoutL->addWidget( d->m_resourceLabel );
+ vlayoutL->addWidget( d->m_resourceView );
+ vlayoutR->addWidget( d->m_resourceSelect );
+ vlayoutR->addWidget( d->m_linkedResourceLabel );
+ vlayoutR->addWidget( d->m_linkedResources );
+ vlayoutR->addWidget( d->m_newResourceButton );
+ mainLayout->addLayout( vlayoutL, 1 ,1 );
+ mainLayout->addLayout(vlayoutR, 1, 2);
+ mainLayout->setColumnMinimumWidth(1,100);
+
+// d->m_linkedResources->setContextMenuPolicy(Qt::CustomContextMenu);
+ d->m_linkedResources->setContextMenuPolicy(Qt::CustomContextMenu);
+
+ connect( d->m_resourceView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+ this, SLOT(_k_selectionChanged()) );
+ connect ( d->m_linkedResources->selectionModel(), SIGNAL( selectionChanged( QItemSelection, QItemSelection ) ),
+ this, SLOT( _k_selectionChanged() ) );
+ connect ( this, SIGNAL( user1Clicked() ), this, SLOT( linkResourceSlot() ) );
+ connect ( this, SIGNAL( user2Clicked() ), this, SLOT( unlinkResourceSlot() ) );
+ connect ( d->m_resourceView, SIGNAL( doubleClicked(QModelIndex) ), this, SLOT( linkResourceSlot() ) );
+ connect (d->m_linkedResources, SIGNAL( customContextMenuRequested(QPoint) ), this, SLOT( showContextMenu(QPoint) ) );
+ if( !d->m_linkedResources->selectionModel()->selectedRows().isEmpty() ) {
+ enableButton( User2, true );
+ }
+}
+
+Nepomuk::ResourceLinkDialog::~ResourceLinkDialog()
+{
+ delete d;
+}
+
+void Nepomuk::ResourceLinkDialog::setRelatedResources()
+{
+ QList<Nepomuk::Resource> relatedResourceList = d->m_nfoResource.isRelateds();
+ d->m_linkedResourceModel->setResources(relatedResourceList);
+
+}
+
+void Nepomuk::ResourceLinkDialog::linkResourceSlot()
+{
+ QModelIndexList selectedResourceList;
+ selectedResourceList << d->m_resourceView->selectionModel()->selectedIndexes();
+ Q_FOREACH(const QModelIndex& i, selectedResourceList) {
+ d->m_resourceView->selectionModel()->setCurrentIndex( i, QItemSelectionModel::NoUpdate );
+ d->m_nfoResource.addIsRelated( d->m_resourceModel->resourceForIndex(d->m_resourceView->selectionModel()->currentIndex() ) );
+ }
+ setRelatedResources();
+}
+
+void Nepomuk::ResourceLinkDialog::unlinkResourceSlot()
+{
+ d->m_nfoResource.removeProperty( Nepomuk::Resource::isRelatedUri(),
+ d->m_linkedResourceModel->resourceForIndex(
+ d->m_linkedResources->selectionModel()->currentIndex() ) );
+ setRelatedResources();
+}
+
+void Nepomuk::ResourceLinkDialog::showContextMenu(const QPoint &pos)
+{
+ d->m_removeResourceAction = new KAction(this);
+ d->m_removeResourceAction->setText(i18n("&Unlink "));
+ d->m_removeResourceAction->setIcon(KIcon("edit-delete"));
+ connect (d->m_removeResourceAction, SIGNAL( triggered(bool) ), this, SLOT( unlinkResourceSlot() ) );
+
+ QMenu myMenu;
+ QPoint globalPos = d->m_linkedResources->mapToGlobal(pos);
+ myMenu.addAction(d->m_removeResourceAction);
+ myMenu.exec(globalPos);
+}
+void Nepomuk::ResourceLinkDialog::createNewResourceSlot()
+{
+ Nepomuk::NewResourceDialog newResource( d->m_resourceSelect->currentIndex(), d->m_nfoResource );
+ //close();
+ newResource.exec();
+ setRelatedResources();
+}
+void Nepomuk::ResourceLinkDialog::dynamicSearchingSlot()
+{
+ Nepomuk::Query::Query query;
+ Nepomuk::Query::QueryServiceClient *test;
+ switch( d->m_resourceSelect->currentIndex() ) {
+ case 1:
+ query = Nepomuk::Query::QueryParser::parseQuery( d->m_searchBox->text() );
+ query = query && Nepomuk::Query::ResourceTypeTerm( Nepomuk::Vocabulary::PIMO::Person() );
+ test = new Nepomuk::Query::QueryServiceClient( this );
+ test->query( query );
+ d->m_resourceModel->clear();
+ connect(test,SIGNAL( newEntries( QList<Nepomuk::Query::Result> ) ),
+ d->m_resourceModel,SLOT( addResults(QList<Nepomuk::Query::Result>)) );
+ break;
+ case 2:
+ query = Nepomuk::Query::QueryParser::parseQuery( d->m_searchBox->text() );
+ query = query && Nepomuk::Query::ResourceTypeTerm( Nepomuk::Vocabulary::PIMO::Project() );
+ test = new Nepomuk::Query::QueryServiceClient( this );
+ test->query( query );
+ d->m_resourceModel->clear();
+ connect(test,SIGNAL( newEntries( QList<Nepomuk::Query::Result> ) ),
+ d->m_resourceModel,SLOT( addResults(QList<Nepomuk::Query::Result>)) );
+ break;
+ case 3:
+ query = Nepomuk::Query::QueryParser::parseQuery( d->m_searchBox->text() );
+ query = query && Nepomuk::Query::ResourceTypeTerm( Nepomuk::Vocabulary::PIMO::Task() );
+ test = new Nepomuk::Query::QueryServiceClient( this );
+ test->query( query );
+ d->m_resourceModel->clear();
+ connect(test,SIGNAL( newEntries( QList<Nepomuk::Query::Result> ) ),
+ d->m_resourceModel,SLOT( addResults(QList<Nepomuk::Query::Result>)) );
+ break;
+ case 4:
+ query = Nepomuk::Query::QueryParser::parseQuery( d->m_searchBox->text() );
+ query = query && Nepomuk::Query::ResourceTypeTerm( Nepomuk::Vocabulary::PIMO::Location() );
+ test = new Nepomuk::Query::QueryServiceClient( this );
+ test->query( query );
+ d->m_resourceModel->clear();
+ connect(test,SIGNAL( newEntries( QList<Nepomuk::Query::Result> ) ),
+ d->m_resourceModel,SLOT( addResults(QList<Nepomuk::Query::Result>)) );
+ break;
+ case 5:
+ query = Nepomuk::Query::QueryParser::parseQuery( d->m_searchBox->text() );
+ query = query && Nepomuk::Query::ResourceTypeTerm( Nepomuk::Vocabulary::PIMO::Note() );
+ test = new Nepomuk::Query::QueryServiceClient( this );
+ test->query( query );
+ d->m_resourceModel->clear();
+ connect(test,SIGNAL( newEntries( QList<Nepomuk::Query::Result> ) ),
+ d->m_resourceModel,SLOT( addResults(QList<Nepomuk::Query::Result>)) );
+ break;
+ default:
+ break;
+ }
+}
+
+
+void Nepomuk::ResourceLinkDialog::resourceSelectedSlot( int index )
+{
+ enableButton( User1, true );
+ d->m_newResourceButton->setEnabled( true );
+ if( index == 0 ) {
+ d->m_resourceModel->clear();
+ d->m_newResourceButton->setEnabled( false );
+ }
+ //List Personal Contacts
+ if( index == 1 ) {
+ Nepomuk::Query::Term term = Nepomuk::Query::ResourceTypeTerm( Nepomuk::Vocabulary::PIMO::Person() );
+ Nepomuk::Query::Query query( term );
+ query.setLimit( 20 );
+ QList<Nepomuk::Query::Result>results = Nepomuk::Query::QueryServiceClient::syncQuery( query );
+ QList <Nepomuk::Resource> resource;
+ Q_FOREACH( const Nepomuk::Query::Result& result, results ) {
+ resource.append( result.resource() );
+ }
+ d->m_resourceModel->setResources( resource );
+ }
+ //List Projects
+ else if( index == 2 ) {
+ Nepomuk::Query::Term term = Nepomuk::Query::ResourceTypeTerm( Nepomuk::Vocabulary::PIMO::Project() );
+ Nepomuk::Query::Query query( term );
+ query.setLimit(20);
+ QList<Nepomuk::Query::Result>results = Nepomuk::Query::QueryServiceClient::syncQuery( query );
+ QList <Nepomuk::Resource> resource;
+ Q_FOREACH( const Nepomuk::Query::Result& result, results ) {
+ resource.append( result.resource() );
+ }
+ d->m_resourceModel->setResources( resource );
+ }
+ //List Tasks
+ else if( index == 3 ) {
+ Nepomuk::Query::Term term = Nepomuk::Query::ResourceTypeTerm( Nepomuk::Vocabulary::PIMO::Task() );
+ Nepomuk::Query::Query query( term );
+ query.setLimit(20);
+ QList<Nepomuk::Query::Result>results = Nepomuk::Query::QueryServiceClient::syncQuery( query );
+ QList <Nepomuk::Resource> resource;
+ Q_FOREACH( const Nepomuk::Query::Result& result, results ) {
+ resource.append( result.resource() );
+ }
+ d->m_resourceModel->setResources( resource );
+ }
+ //List Places
+ else if( index == 4 ) {
+ Nepomuk::Query::Term term = Nepomuk::Query::ResourceTypeTerm( Nepomuk::Vocabulary::PIMO::Location() );
+ Nepomuk::Query::Query query( term );
+ query.setLimit(20);
+ QList<Nepomuk::Query::Result>results = Nepomuk::Query::QueryServiceClient::syncQuery( query );
+ QList <Nepomuk::Resource> resource;
+ Q_FOREACH( const Nepomuk::Query::Result& result, results ) {
+ resource.append( result.resource() );
+ }
+ d->m_resourceModel->setResources( resource );
+ }
+ //List Notes
+ else if( index == 5 ) {
+ Nepomuk::Query::Term term = Nepomuk::Query::ResourceTypeTerm( Nepomuk::Vocabulary::PIMO::Note() );
+ Nepomuk::Query::Query query( term );
+ query.setLimit(20);
+ QList<Nepomuk::Query::Result>results = Nepomuk::Query::QueryServiceClient::syncQuery( query );
+ QList <Nepomuk::Resource> resource;
+ Q_FOREACH( const Nepomuk::Query::Result& result, results ) {
+ resource.append( result.resource() );
+ }
+ d->m_resourceModel->setResources( resource );
+ }
+}
+