diff options
Diffstat (limited to 'src/urlbar')
-rw-r--r-- | src/urlbar/newresourcedialog.cpp | 121 | ||||
-rw-r--r-- | src/urlbar/newresourcedialog.h | 57 | ||||
-rw-r--r-- | src/urlbar/resourcelinkdialog.cpp | 385 | ||||
-rw-r--r-- | src/urlbar/resourcelinkdialog.h | 73 |
4 files changed, 636 insertions, 0 deletions
diff --git a/src/urlbar/newresourcedialog.cpp b/src/urlbar/newresourcedialog.cpp new file mode 100644 index 00000000..39cffc36 --- /dev/null +++ b/src/urlbar/newresourcedialog.cpp @@ -0,0 +1,121 @@ +/* ============================================================ +* +* This is a part of the GSoC project 2011 - Fancy Bookmarking +* +* Copyright (c) 2011-2012 by Phaneendra Hegde <pnh.pes@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) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +// Self Includes +#include "newresourcedialog.h" +#include "newresourcedialog.moc" + +// Nepomuk Includes +#include <Nepomuk/Vocabulary/NCO> +#include <Nepomuk/Vocabulary/PIMO> +#include <Nepomuk/Resource> +#include <Nepomuk/Tag> + +// Qt Includes +#include <QPlainTextEdit> +#include <QVBoxLayout> +#include <QLabel> + + +class Nepomuk::NewResourceDialog::Private +{ +public: + KLineEdit *m_resourceName; + QPlainTextEdit *m_description; + QLabel *m_titleResource; + QLabel *m_desResource; + Nepomuk::NewResourceDialog *q; + Nepomuk::Resource m_nofResource; + int m_index; +}; + + +Nepomuk::NewResourceDialog::NewResourceDialog(int index, Nepomuk::Resource& nfoResource, QWidget* parent): + KDialog(parent), + d(new Private()) +{ + d->q = this; + d->m_index = index; + d->m_nofResource = nfoResource; + setWindowTitle(i18n("Link to new Resource")); + setButtonText(Ok, i18n("Link")); + setMinimumSize(200, 150); + + QVBoxLayout *layout = new QVBoxLayout(mainWidget()); + d->m_resourceName = new KLineEdit(mainWidget()); + d->m_titleResource = new QLabel(mainWidget()); + d->m_titleResource->setText(i18n("* Resource Name:")); + layout->addWidget(d->m_titleResource); + layout->addWidget(d->m_resourceName); + d->m_description = new QPlainTextEdit(mainWidget()); + d->m_desResource = new QLabel(mainWidget()); + d->m_desResource->setText(i18n("Description (Optional)")); + layout->addWidget(d->m_desResource); + layout->addWidget(d->m_description); + + connect(this, SIGNAL(okClicked()), this, SLOT(newResourceSlot())); +} + + +Nepomuk::NewResourceDialog::~NewResourceDialog() +{ + delete d; +} + + +void Nepomuk::NewResourceDialog::newResourceSlot() +{ + if (d->m_index == 1) + { + Nepomuk::Resource newResource(d->m_resourceName->text(), Nepomuk::Vocabulary::PIMO::Person()); + newResource.addSymbol("user-identity"); + d->m_nofResource.addIsRelated(newResource); + } + else if (d->m_index == 2) + { + Nepomuk::Resource newResource(d->m_resourceName->text(), Nepomuk::Vocabulary::PIMO::Project()); + newResource.addSymbol("project-development"); + d->m_nofResource.addIsRelated(newResource); + } + else if (d->m_index == 3) + { + Nepomuk::Resource newResource(d->m_resourceName->text(), Nepomuk::Vocabulary::PIMO::Task()); + newResource.addSymbol("view-pim-tasks"); + d->m_nofResource.addIsRelated(newResource); + } + else if (d->m_index == 4) + { + Nepomuk::Resource newResource(d->m_resourceName->text(), Nepomuk::Vocabulary::PIMO::Location()); + newResource.addSymbol("user-location"); + d->m_nofResource.addIsRelated(newResource); + } + else if (d->m_index == 5) + { + Nepomuk::Resource newResource(d->m_resourceName->text(), Nepomuk::Vocabulary::PIMO::Note()); + newResource.addSymbol("knotes"); + d->m_nofResource.addIsRelated(newResource); + } +} diff --git a/src/urlbar/newresourcedialog.h b/src/urlbar/newresourcedialog.h new file mode 100644 index 00000000..651c631c --- /dev/null +++ b/src/urlbar/newresourcedialog.h @@ -0,0 +1,57 @@ +/* ============================================================ +* +* This is a part of the GSoC project 2011 - Fancy Bookmarking +* +* Copyright (c) 2011-2012 by Phaneendra Hegde <pnh.pes@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) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +#ifndef NEWRESOURCEDIALOG_H +#define NEWRESOURCEDIALOG_H + + +// KDE Includes +#include <KDialog> +#include <KLineEdit> + +#include <Nepomuk/Resource> + + +namespace Nepomuk +{ +class NewResourceDialog : public KDialog +{ + Q_OBJECT + +public: + explicit NewResourceDialog(int index, Nepomuk::Resource& nfoResource, QWidget* parent = 0); + virtual ~NewResourceDialog(); + +private Q_SLOTS: + void newResourceSlot(); + +private: + class Private; + Private* const d; +}; +} + +#endif // NEWRESOURCEDIALOG_H diff --git a/src/urlbar/resourcelinkdialog.cpp b/src/urlbar/resourcelinkdialog.cpp new file mode 100644 index 00000000..8a4b5685 --- /dev/null +++ b/src/urlbar/resourcelinkdialog.cpp @@ -0,0 +1,385 @@ +/* ============================================================ +* +* This is a part of the GSoC project 2011 - Fancy Bookmarking +* +* Copyright (c) 2011-2012 by Phaneendra Hegde <pnh.pes@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) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +// Self Includes +#include "resourcelinkdialog.h" +#include "resourcelinkdialog.moc" + +// Local Includes +#include "newresourcedialog.h" + +// Qt Includes +#include <QGridLayout> +#include <QHBoxLayout> +#include <QComboBox> +#include <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); + + 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); + } +} diff --git a/src/urlbar/resourcelinkdialog.h b/src/urlbar/resourcelinkdialog.h new file mode 100644 index 00000000..e628aa10 --- /dev/null +++ b/src/urlbar/resourcelinkdialog.h @@ -0,0 +1,73 @@ +/* ============================================================ +* +* This is a part of the GSoC project 2011 - Fancy Bookmarking +* +* Copyright (c) 2011-2012 by Phaneendra Hegde <pnh.pes@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) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +#ifndef RESOURCELINKDIALOG_H +#define RESOURCELINKDIALOG_H + +//Qt includes +#include <QListView> + +//kde includes +#include <KDialog> +#include <KLineEdit> +#include <KConfigDialog> + + +namespace Nepomuk +{ +class Resource; + +namespace Query +{ +class Query; +} + +class ResourceLinkDialog : public KDialog +{ + Q_OBJECT + +public: + explicit ResourceLinkDialog(Nepomuk::Resource& nfoResource, QWidget* parent = 0); + virtual ~ResourceLinkDialog(); + void setRelatedResources(); + +private Q_SLOTS: + void dynamicSearchingSlot(); + void resourceSelectedSlot(int); + void linkResourceSlot(); + void unlinkResourceSlot(); + void createNewResourceSlot(); + void showContextMenu(const QPoint&); + + +private: + class Private; + Private* const d; + +}; +} + +#endif // RESOURCELINKDIALOG_H |