diff options
| author | Peter Penz <[email protected]> | 2012-04-26 23:39:48 +0200 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2012-04-26 23:41:01 +0200 |
| commit | d1c5dc52a3ac4f83262d00d37a61f6bfb52d5bf4 (patch) | |
| tree | 54a6f8150b290bed57bb5329ca861be7a858ef85 /src/panels/places/placespanel.cpp | |
| parent | 2854a69fcad54d394ebec504af4995dcb5e18ac4 (diff) | |
Places Panel: Provide dialog for editing places
Diffstat (limited to 'src/panels/places/placespanel.cpp')
| -rw-r--r-- | src/panels/places/placespanel.cpp | 145 |
1 files changed, 128 insertions, 17 deletions
diff --git a/src/panels/places/placespanel.cpp b/src/panels/places/placespanel.cpp index 016a736de..d42b75f5a 100644 --- a/src/panels/places/placespanel.cpp +++ b/src/panels/places/placespanel.cpp @@ -24,12 +24,18 @@ #include "placespanel.h" #include <KConfigGroup> +#include <KDirNotify> #include <KIcon> +#include <KIO/Job> +#include <KIO/JobUiDelegate> #include <KLocale> #include <kitemviews/kitemlistcontainer.h> #include <kitemviews/kitemlistcontroller.h> #include <kitemviews/kstandarditemlistview.h> #include <KMenu> +#include <KMessageBox> +#include <KNotification> +#include "placesitemeditdialog.h" #include "placesitemlistgroupheader.h" #include "placesitemmodel.h" #include <views/draganddrophelper.h> @@ -111,28 +117,63 @@ void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos) KMenu menu(this); - QAction* emptyTrash = 0; - QAction* addEntry = 0; + QAction* emptyTrashAction = 0; + QAction* addAction = 0; QAction* mainSeparator = 0; - QAction* editEntry = 0; - QAction* hideEntry = 0; + QAction* editAction = 0; + QAction* tearDownAction = 0; + QAction* ejectAction = 0; const bool isDevice = !data.value("udi").toString().isEmpty(); if (isDevice) { + ejectAction = m_model->ejectAction(index); + if (ejectAction) { + ejectAction->setParent(&menu); + menu.addAction(ejectAction); + } + + tearDownAction = m_model->tearDownAction(index); + if (tearDownAction) { + tearDownAction->setParent(&menu); + menu.addAction(tearDownAction); + } + + if (tearDownAction || ejectAction) { + mainSeparator = menu.addSeparator(); + } } else { if (data.value("url").value<KUrl>() == KUrl("trash:/")) { - emptyTrash = menu.addAction(KIcon("trash-empty"), i18nc("@action:inmenu", "Empty Trash")); + emptyTrashAction = menu.addAction(KIcon("trash-empty"), i18nc("@action:inmenu", "Empty Trash")); KConfig trashConfig("trashrc", KConfig::SimpleConfig); - emptyTrash->setEnabled(!trashConfig.group("Status").readEntry("Empty", true)); + emptyTrashAction->setEnabled(!trashConfig.group("Status").readEntry("Empty", true)); menu.addSeparator(); } - addEntry = menu.addAction(KIcon("document-new"), i18nc("@item:inmenu", "Add Entry...")); + addAction = menu.addAction(KIcon("document-new"), i18nc("@item:inmenu", "Add Entry...")); mainSeparator = menu.addSeparator(); - editEntry = menu.addAction(KIcon("document-properties"), i18n("&Edit Entry '%1'...", label)); + editAction = menu.addAction(KIcon("document-properties"), i18nc("@item:inmenu", "Edit Entry '%1'...", label)); } - if (!addEntry) { - addEntry = menu.addAction(KIcon("document-new"), i18nc("@item:inmenu", "Add Entry...")); + if (!addAction) { + addAction = menu.addAction(KIcon("document-new"), i18nc("@item:inmenu", "Add Entry...")); + } + + QAction* hideAction = menu.addAction(i18nc("@item:inmenu", "Hide Entry '%1'", label)); + hideAction->setCheckable(true); + //hideEntry->setChecked(data.value("hidden").toBool()); + + QAction* showAllAction = 0; + if (m_model->hiddenCount() > 0) { + if (!mainSeparator) { + mainSeparator = menu.addSeparator(); + } + showAllAction = menu.addAction(i18nc("@item:inmenu", "Show All Entries")); + showAllAction->setCheckable(true); + //showAllEntries->setChecked(showAll) + } + + QAction* removeAction = 0; + if (!isDevice) { + removeAction = menu.addAction(KIcon("edit-delete"), i18nc("@item:inmenu", "Remove Entry '%1'", label)); } menu.addSeparator(); @@ -141,25 +182,38 @@ void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos) } QAction* action = menu.exec(pos.toPoint()); - hideEntry = menu.addAction(i18n("&Hide Entry '%1'", label)); - hideEntry->setCheckable(true); - //hideEntry->setChecked(data.value("hidden").toBool()); - Q_UNUSED(action); + if (!action) { + return; + } + + if (action == emptyTrashAction) { + emptyTrash(); + } else if (action == addAction) { + addEntry(); + } else if (action == editAction) { + editEntry(index); + } else if (action == removeAction) { + } else if (action == hideAction) { + } else if (action == showAllAction) { + } else if (action == tearDownAction) { + } else if (action == ejectAction) { + } } void PlacesPanel::slotViewContextMenuRequested(const QPointF& pos) { KMenu menu(this); - QAction* addEntry = menu.addAction(KIcon("document-new"), i18nc("@item:inmenu", "Add Entry...")); + QAction* addAction = menu.addAction(KIcon("document-new"), i18nc("@item:inmenu", "Add Entry...")); menu.addSeparator(); foreach (QAction* action, customContextMenuActions()) { menu.addAction(action); } QAction* action = menu.exec(pos.toPoint()); - Q_UNUSED(action); - Q_UNUSED(addEntry); + if (action == addAction) { + addEntry(); + } } void PlacesPanel::slotUrlsDropped(const KUrl& dest, QDropEvent* event, QWidget* parent) @@ -168,4 +222,61 @@ void PlacesPanel::slotUrlsDropped(const KUrl& dest, QDropEvent* event, QWidget* DragAndDropHelper::dropUrls(KFileItem(), dest, event); } +void PlacesPanel::slotTrashUpdated(KJob* job) +{ + if (job->error()) { + // TODO: Show error-string inside Dolphin, don't use job->ui->showErrorMessage(). + } + org::kde::KDirNotify::emitFilesAdded("trash:/"); +} + +void PlacesPanel::emptyTrash() +{ + const QString text = i18nc("@info", "Do you really want to empty the Trash? All items will be deleted."); + const bool del = KMessageBox::warningContinueCancel(window(), + text, + QString(), + KGuiItem(i18nc("@action:button", "Empty Trash"), + KIcon("user-trash")) + ) == KMessageBox::Continue; + if (del) { + QByteArray packedArgs; + QDataStream stream(&packedArgs, QIODevice::WriteOnly); + stream << int(1); + KIO::Job *job = KIO::special(KUrl("trash:/"), packedArgs); + KNotification::event("Trash: emptied", QString() , QPixmap() , 0, KNotification::DefaultEvent); + job->ui()->setWindow(parentWidget()); + connect(job, SIGNAL(result(KJob*)), SLOT(slotTrashUpdated(KJob*))); + } +} + +void PlacesPanel::addEntry() +{ + QPointer<PlacesItemEditDialog> dialog = new PlacesItemEditDialog(this); + dialog->setCaption(i18nc("@title:window", "Add Places Entry")); + dialog->setAllowGlobal(true); + if (dialog->exec() == QDialog::Accepted) { + // TODO + } + + delete dialog; +} + +void PlacesPanel::editEntry(int index) +{ + const QHash<QByteArray, QVariant> data = m_model->data(index); + + QPointer<PlacesItemEditDialog> dialog = new PlacesItemEditDialog(this); + dialog->setCaption(i18nc("@title:window", "Edit Places Entry")); + dialog->setIcon(data.value("iconName").toString()); + dialog->setText(data.value("text").toString()); + dialog->setUrl(data.value("url").value<KUrl>()); + dialog->setAllowGlobal(true); + if (dialog->exec() == QDialog::Accepted) { + // TODO + } + + delete dialog; +} + #include "placespanel.moc" |
