mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-24 10:52:52 +00:00
688 lines
34 KiB
C++
688 lines
34 KiB
C++
/*
|
|
* Copyright (C) 2010 Casey Link <unnamedrambler@gmail.com>
|
|
* Copyright (C) 2010 Klaralvdalens Datakonsult AB, a KDAB Group company <info@kdab.net>
|
|
* Copyright (C) 2009 - 2010 Tobias Koenig <tokoe@kde.org>
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#include "standardcalendaractionmanager.h"
|
|
|
|
#include <akonadi/entitytreemodel.h>
|
|
|
|
#include <kaction.h>
|
|
#include <kactioncollection.h>
|
|
#include <kcalcore/event.h>
|
|
#include <kcalcore/journal.h>
|
|
#include <kcalcore/todo.h>
|
|
#include <klocale.h>
|
|
#include <klocalizedstring.h>
|
|
#include <kglobal.h>
|
|
#include <kicon.h>
|
|
|
|
#include <QItemSelectionModel>
|
|
|
|
using namespace Akonadi;
|
|
|
|
class StandardCalendarActionManager::Private
|
|
{
|
|
public:
|
|
Private(KActionCollection *actionCollection, QWidget *parentWidget, StandardCalendarActionManager *parent)
|
|
: mActionCollection(actionCollection),
|
|
mParentWidget(parentWidget),
|
|
mCollectionSelectionModel(0),
|
|
mItemSelectionModel(0),
|
|
mParent(parent)
|
|
{
|
|
KGlobal::locale()->insertCatalog(QLatin1String("libakonadi-calendar"));
|
|
mGenericManager = new StandardActionManager(actionCollection, parentWidget);
|
|
mParent->connect(mGenericManager, SIGNAL(actionStateUpdated()),
|
|
mParent, SIGNAL(actionStateUpdated()));
|
|
mGenericManager->setMimeTypeFilter(QStringList() << QLatin1String("text/calendar"));
|
|
mGenericManager->setCapabilityFilter(QStringList() << QLatin1String("Resource"));
|
|
}
|
|
|
|
~Private()
|
|
{
|
|
delete mGenericManager;
|
|
}
|
|
|
|
void updateGenericAction(StandardActionManager::Type type)
|
|
{
|
|
switch (type) {
|
|
case Akonadi::StandardActionManager::CreateCollection:
|
|
mGenericManager->action(Akonadi::StandardActionManager::CreateCollection)->setText(
|
|
i18n("Add Calendar Folder..."));
|
|
mGenericManager->action(Akonadi::StandardActionManager::CreateCollection)->setWhatsThis(
|
|
i18n("Add a new calendar folder to the currently selected calendar folder."));
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::CreateCollection, StandardActionManager::DialogTitle,
|
|
i18nc("@title:window", "New Calendar Folder"));
|
|
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::CreateCollection, StandardActionManager::ErrorMessageText,
|
|
ki18n("Could not create calendar folder: %1"));
|
|
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::CreateCollection, StandardActionManager::ErrorMessageTitle,
|
|
i18n("Calendar folder creation failed"));
|
|
|
|
break;
|
|
case Akonadi::StandardActionManager::CopyCollections:
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::CopyCollections,
|
|
ki18np("Copy Calendar Folder", "Copy %1 Calendar Folders"));
|
|
mGenericManager->action(Akonadi::StandardActionManager::CopyCollections)->setWhatsThis(
|
|
i18n("Copy the selected calendar folders to the clipboard."));
|
|
break;
|
|
case Akonadi::StandardActionManager::DeleteCollections:
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteCollections,
|
|
ki18np("Delete Calendar Folder", "Delete %1 Calendar Folders"));
|
|
mGenericManager->action(Akonadi::StandardActionManager::DeleteCollections)->setWhatsThis(
|
|
i18n("Delete the selected calendar folders from the calendar."));
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::DeleteCollections, StandardActionManager::MessageBoxText,
|
|
ki18np("Do you really want to delete this calendar folder and all its sub-folders?",
|
|
"Do you really want to delete %1 calendar folders and all their sub-folders?"));
|
|
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::DeleteCollections, StandardActionManager::MessageBoxTitle,
|
|
ki18ncp("@title:window", "Delete calendar folder?", "Delete calendar folders?"));
|
|
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::DeleteCollections, StandardActionManager::ErrorMessageText,
|
|
ki18n("Could not delete calendar folder: %1"));
|
|
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::DeleteCollections, StandardActionManager::ErrorMessageTitle,
|
|
i18n("Calendar folder deletion failed"));
|
|
|
|
break;
|
|
case Akonadi::StandardActionManager::SynchronizeCollections:
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::SynchronizeCollections,
|
|
ki18np("Update Calendar Folder", "Update %1 Calendar Folders"));
|
|
mGenericManager->action(Akonadi::StandardActionManager::SynchronizeCollections)->setWhatsThis(
|
|
i18n("Update the content of the selected calendar folders."));
|
|
|
|
break;
|
|
case Akonadi::StandardActionManager::CutCollections:
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::CutCollections,
|
|
ki18np("Cut Calendar Folder", "Cut %1 Calendar Folders"));
|
|
mGenericManager->action(Akonadi::StandardActionManager::CutCollections)->setWhatsThis(
|
|
i18n("Cut the selected calendar folders from the calendar."));
|
|
break;
|
|
case Akonadi::StandardActionManager::CollectionProperties:
|
|
mGenericManager->action(Akonadi::StandardActionManager::CollectionProperties)->setText(
|
|
i18n("Folder Properties..."));
|
|
mGenericManager->action(Akonadi::StandardActionManager::CollectionProperties)->setWhatsThis(
|
|
i18n("Open a dialog to edit the properties of the selected calendar folder."));
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::CollectionProperties, StandardActionManager::DialogTitle,
|
|
ki18nc("@title:window", "Properties of Calendar Folder %1"));
|
|
break;
|
|
case Akonadi::StandardActionManager::CopyItems:
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::CopyItems,
|
|
ki18np("Copy Event", "Copy %1 Events"));
|
|
mGenericManager->action(Akonadi::StandardActionManager::CopyItems)->setWhatsThis(
|
|
i18n("Copy the selected events to the clipboard."));
|
|
|
|
break;
|
|
case Akonadi::StandardActionManager::DeleteItems:
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteItems,
|
|
ki18np("Delete Event", "Delete %1 Events"));
|
|
mGenericManager->action(Akonadi::StandardActionManager::DeleteItems)->setWhatsThis(
|
|
i18n("Delete the selected events from the calendar."));
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::DeleteItems, StandardActionManager::MessageBoxText,
|
|
ki18np("Do you really want to delete the selected event?",
|
|
"Do you really want to delete %1 events?"));
|
|
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::DeleteItems, StandardActionManager::MessageBoxTitle,
|
|
ki18ncp("@title:window", "Delete Event?", "Delete Events?"));
|
|
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageText,
|
|
ki18n("Could not delete event: %1"));
|
|
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageTitle,
|
|
i18n("Event deletion failed"));
|
|
break;
|
|
|
|
case Akonadi::StandardActionManager::CutItems:
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::CutItems,
|
|
ki18np("Cut Event", "Cut %1 Events"));
|
|
mGenericManager->action(Akonadi::StandardActionManager::CutItems)->setWhatsThis(
|
|
i18n("Cut the selected events from the calendar."));
|
|
break;
|
|
case Akonadi::StandardActionManager::CreateResource:
|
|
mGenericManager->action(Akonadi::StandardActionManager::CreateResource)->setText(
|
|
i18n("Add &Calendar..."));
|
|
mGenericManager->action(Akonadi::StandardActionManager::CreateResource)->setWhatsThis(
|
|
i18n("Add a new calendar<p>"
|
|
"You will be presented with a dialog where you can select "
|
|
"the type of the calendar that shall be added.</p>"));
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::CreateResource, StandardActionManager::DialogTitle,
|
|
i18nc("@title:window", "Add Calendar"));
|
|
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::CreateResource, StandardActionManager::ErrorMessageText,
|
|
ki18n("Could not create calendar: %1"));
|
|
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::CreateResource, StandardActionManager::ErrorMessageTitle,
|
|
i18n("Calendar creation failed"));
|
|
|
|
break;
|
|
case Akonadi::StandardActionManager::DeleteResources:
|
|
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteResources,
|
|
ki18np("&Delete Calendar", "&Delete %1 Calendars"));
|
|
mGenericManager->action(Akonadi::StandardActionManager::DeleteResources)->setWhatsThis(
|
|
i18n("Delete the selected calendars<p>"
|
|
"The currently selected calendars will be deleted, "
|
|
"along with all the events, todos and journals they contain.</p>"));
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::DeleteResources, StandardActionManager::MessageBoxText,
|
|
ki18np("Do you really want to delete this calendar?",
|
|
"Do you really want to delete %1 calendars?"));
|
|
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::DeleteResources, StandardActionManager::MessageBoxTitle,
|
|
ki18ncp("@title:window", "Delete Calendar?", "Delete Calendars?"));
|
|
|
|
break;
|
|
case Akonadi::StandardActionManager::ResourceProperties:
|
|
mGenericManager->action(Akonadi::StandardActionManager::ResourceProperties)->setText(
|
|
i18n("Calendar Properties..."));
|
|
mGenericManager->action(Akonadi::StandardActionManager::ResourceProperties)->setWhatsThis(
|
|
i18n("Open a dialog to edit properties of the selected calendar."));
|
|
break;
|
|
case Akonadi::StandardActionManager::SynchronizeResources:
|
|
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::SynchronizeResources,
|
|
ki18np("Update Calendar", "Update %1 Calendars"));
|
|
mGenericManager->action(Akonadi::StandardActionManager::SynchronizeResources)->setWhatsThis(
|
|
i18n("Updates the content of all folders of the selected calendars."));
|
|
break;
|
|
case Akonadi::StandardActionManager::CopyItemToMenu:
|
|
mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setText(
|
|
i18n("&Copy to Calendar"));
|
|
mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setWhatsThis(
|
|
i18n("Copy the selected event to a different calendar."));
|
|
break;
|
|
case Akonadi::StandardActionManager::MoveItemToMenu:
|
|
mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setText(
|
|
i18n("&Move to Calendar"));
|
|
mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setWhatsThis(
|
|
i18n("Move the selected event to a different calendar."));
|
|
break;
|
|
case StandardActionManager::Paste:
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::Paste, StandardActionManager::ErrorMessageText,
|
|
ki18n("Could not paste event: %1"));
|
|
|
|
mGenericManager->setContextText(
|
|
StandardActionManager::Paste, StandardActionManager::ErrorMessageTitle,
|
|
i18n("Paste failed"));
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
void updateGenericAllActions()
|
|
{
|
|
updateGenericAction(StandardActionManager::CreateCollection);
|
|
updateGenericAction(StandardActionManager::CopyCollections);
|
|
updateGenericAction(StandardActionManager::DeleteCollections);
|
|
updateGenericAction(StandardActionManager::SynchronizeCollections);
|
|
updateGenericAction(StandardActionManager::CollectionProperties);
|
|
updateGenericAction(StandardActionManager::CopyItems);
|
|
updateGenericAction(StandardActionManager::Paste);
|
|
updateGenericAction(StandardActionManager::DeleteItems);
|
|
updateGenericAction(StandardActionManager::ManageLocalSubscriptions);
|
|
updateGenericAction(StandardActionManager::AddToFavoriteCollections);
|
|
updateGenericAction(StandardActionManager::RemoveFromFavoriteCollections);
|
|
updateGenericAction(StandardActionManager::RenameFavoriteCollection);
|
|
updateGenericAction(StandardActionManager::CopyCollectionToMenu);
|
|
updateGenericAction(StandardActionManager::CopyItemToMenu);
|
|
updateGenericAction(StandardActionManager::MoveItemToMenu);
|
|
updateGenericAction(StandardActionManager::MoveCollectionToMenu);
|
|
updateGenericAction(StandardActionManager::CutItems);
|
|
updateGenericAction(StandardActionManager::CutCollections);
|
|
updateGenericAction(StandardActionManager::CreateResource);
|
|
updateGenericAction(StandardActionManager::DeleteResources);
|
|
updateGenericAction(StandardActionManager::ResourceProperties);
|
|
updateGenericAction(StandardActionManager::SynchronizeResources);
|
|
updateGenericAction(StandardActionManager::ToggleWorkOffline);
|
|
updateGenericAction(StandardActionManager::CopyCollectionToDialog);
|
|
updateGenericAction(StandardActionManager::MoveCollectionToDialog);
|
|
updateGenericAction(StandardActionManager::CopyItemToDialog);
|
|
updateGenericAction(StandardActionManager::MoveItemToDialog);
|
|
updateGenericAction(StandardActionManager::SynchronizeCollectionsRecursive);
|
|
updateGenericAction(StandardActionManager::MoveCollectionsToTrash);
|
|
updateGenericAction(StandardActionManager::MoveItemsToTrash);
|
|
updateGenericAction(StandardActionManager::RestoreCollectionsFromTrash);
|
|
updateGenericAction(StandardActionManager::RestoreItemsFromTrash);
|
|
updateGenericAction(StandardActionManager::MoveToTrashRestoreCollection);
|
|
updateGenericAction(StandardActionManager::MoveToTrashRestoreCollectionAlternative);
|
|
updateGenericAction(StandardActionManager::MoveToTrashRestoreItem);
|
|
updateGenericAction(StandardActionManager::MoveToTrashRestoreItemAlternative);
|
|
updateGenericAction(StandardActionManager::SynchronizeFavoriteCollections);
|
|
|
|
}
|
|
|
|
static bool hasWritableCollection(const QModelIndex &index, const QString &mimeType)
|
|
{
|
|
const Akonadi::Collection collection =
|
|
index.data(Akonadi::EntityTreeModel::CollectionRole).value<Akonadi::Collection>();
|
|
if (collection.isValid()) {
|
|
if (collection.contentMimeTypes().contains(mimeType) &&
|
|
(collection.rights() & Akonadi::Collection::CanCreateItem)) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
const QAbstractItemModel *model = index.model();
|
|
if (!model) {
|
|
return false;
|
|
}
|
|
|
|
for (int row = 0; row < model->rowCount(index); ++row) {
|
|
if (hasWritableCollection(model->index(row, 0, index), mimeType)) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
bool hasWritableCollection(const QString &mimeType) const
|
|
{
|
|
if (!mCollectionSelectionModel) {
|
|
return false;
|
|
}
|
|
|
|
const QAbstractItemModel *collectionModel = mCollectionSelectionModel->model();
|
|
for (int row = 0; row < collectionModel->rowCount(); ++row) {
|
|
if (hasWritableCollection(collectionModel->index(row, 0, QModelIndex()), mimeType)) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void updateActions()
|
|
{
|
|
if (!mItemSelectionModel) {
|
|
return;
|
|
}
|
|
|
|
// update action labels
|
|
const int itemCount = mItemSelectionModel->selectedRows().count();
|
|
if (itemCount == 1) {
|
|
const QModelIndex index = mItemSelectionModel->selectedRows().first();
|
|
if (index.isValid()) {
|
|
const QString mimeType = index.data(EntityTreeModel::MimeTypeRole).toString();
|
|
if (mimeType == KCalCore::Event::eventMimeType()) {
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::CopyItems)) {
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::CopyItems,
|
|
ki18np("Copy Event", "Copy %1 Events"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)) {
|
|
mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setText(i18n("Copy Event To"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)) {
|
|
mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)->setText(i18n("Copy Event To"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::DeleteItems)) {
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteItems,
|
|
ki18np("Delete Event", "Delete %1 Events"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::CutItems)) {
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::CutItems,
|
|
ki18np("Cut Event", "Cut %1 Events"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)) {
|
|
mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setText(i18n("Move Event To"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)) {
|
|
mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)->setText(i18n("Move Event To"));
|
|
}
|
|
if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
|
|
mActions.value(StandardCalendarActionManager::EditIncidence)->setText(i18n("Edit Event..."));
|
|
}
|
|
} else if (mimeType == KCalCore::Todo::todoMimeType()) {
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::CopyItems)) {
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::CopyItems,
|
|
ki18np("Copy To-do", "Copy %1 To-dos"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)) {
|
|
mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setText(i18n("Copy To-do To"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)) {
|
|
mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)->setText(i18n("Copy To-do To"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::DeleteItems)) {
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteItems,
|
|
ki18np("Delete To-do", "Delete %1 To-dos"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::CutItems)) {
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::CutItems,
|
|
ki18np("Cut To-do", "Cut %1 To-dos"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)) {
|
|
mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setText(i18n("Move To-do To"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)) {
|
|
mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)->setText(i18n("Move To-do To"));
|
|
}
|
|
if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
|
|
mActions.value(StandardCalendarActionManager::EditIncidence)->setText(i18n("Edit To-do..."));
|
|
}
|
|
} else if (mimeType == KCalCore::Journal::journalMimeType()) {
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::CopyItems)) {
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::CopyItems,
|
|
ki18np("Copy Journal", "Copy %1 Journals"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)) {
|
|
mGenericManager->action(Akonadi::StandardActionManager::CopyItemToMenu)->setText(i18n("Copy Journal To"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)) {
|
|
mGenericManager->action(Akonadi::StandardActionManager::CopyItemToDialog)->setText(i18n("Copy Journal To"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::DeleteItems)) {
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::DeleteItems,
|
|
ki18np("Delete Journal", "Delete %1 Journals"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::CutItems)) {
|
|
mGenericManager->setActionText(Akonadi::StandardActionManager::CutItems,
|
|
ki18np("Cut Journal", "Cut %1 Journals"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)) {
|
|
mGenericManager->action(Akonadi::StandardActionManager::MoveItemToMenu)->setText(i18n("Move Journal To"));
|
|
}
|
|
if (mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)) {
|
|
mGenericManager->action(Akonadi::StandardActionManager::MoveItemToDialog)->setText(i18n("Move Journal To"));
|
|
}
|
|
if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
|
|
mActions.value(StandardCalendarActionManager::EditIncidence)->setText(i18n("Edit Journal..."));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// update action states
|
|
if (mActions.contains(StandardCalendarActionManager::CreateEvent)) {
|
|
mActions[ StandardCalendarActionManager::CreateEvent ]->setEnabled(hasWritableCollection(KCalCore::Event::eventMimeType()));
|
|
}
|
|
if (mActions.contains(StandardCalendarActionManager::CreateTodo)) {
|
|
mActions[ StandardCalendarActionManager::CreateTodo ]->setEnabled(hasWritableCollection(KCalCore::Todo::todoMimeType()));
|
|
}
|
|
if (mActions.contains(StandardCalendarActionManager::CreateJournal)) {
|
|
mActions[ StandardCalendarActionManager::CreateJournal ]->setEnabled(hasWritableCollection(KCalCore::Journal::journalMimeType()));
|
|
}
|
|
|
|
if (mActions.contains(StandardCalendarActionManager::EditIncidence)) {
|
|
bool canEditItem = true;
|
|
|
|
// only one selected item can be edited
|
|
canEditItem = canEditItem && (itemCount == 1);
|
|
|
|
// check whether parent collection allows changing the item
|
|
const QModelIndexList rows = mItemSelectionModel->selectedRows();
|
|
if (rows.count() == 1) {
|
|
const QModelIndex index = rows.first();
|
|
const Collection parentCollection = index.data(EntityTreeModel::ParentCollectionRole).value<Collection>();
|
|
if (parentCollection.isValid()) {
|
|
canEditItem = canEditItem && (parentCollection.rights() & Collection::CanChangeItem);
|
|
}
|
|
}
|
|
|
|
mActions.value(StandardCalendarActionManager::EditIncidence)->setEnabled(canEditItem);
|
|
}
|
|
|
|
if (mActions.contains(StandardCalendarActionManager::CreateSubTodo)) {
|
|
mActions[ StandardCalendarActionManager::CreateSubTodo ]->setEnabled(false);
|
|
}
|
|
|
|
if (itemCount == 1) {
|
|
const Akonadi::Item item = mGenericManager->selectedItems().first();
|
|
|
|
if (item.isValid() && item.hasPayload<KCalCore::Todo::Ptr>()) {
|
|
if (mActions.contains(StandardCalendarActionManager::CreateSubTodo)) {
|
|
mActions[ StandardCalendarActionManager::CreateSubTodo ]->setEnabled(hasWritableCollection(KCalCore::Todo::todoMimeType()));
|
|
}
|
|
}
|
|
}
|
|
|
|
emit mParent->actionStateUpdated();
|
|
}
|
|
|
|
void slotCreateEvent()
|
|
{
|
|
// dummy as long as there are no editors available in kdepimlibs/
|
|
}
|
|
|
|
void slotCreateTodo()
|
|
{
|
|
// dummy as long as there are no editors available in kdepimlibs/
|
|
}
|
|
|
|
void slotCreateSubTodo()
|
|
{
|
|
// dummy as long as there are no editors available in kdepimlibs/
|
|
}
|
|
|
|
void slotCreateJournal()
|
|
{
|
|
// dummy as long as there are no editors available in kdepimlibs/
|
|
}
|
|
|
|
void slotEditIncidence()
|
|
{
|
|
// dummy as long as there are no editors available in kdepimlibs/
|
|
}
|
|
|
|
KActionCollection *mActionCollection;
|
|
QWidget *mParentWidget;
|
|
StandardActionManager *mGenericManager;
|
|
QItemSelectionModel *mCollectionSelectionModel;
|
|
QItemSelectionModel *mItemSelectionModel;
|
|
QHash<StandardCalendarActionManager::Type, KAction*> mActions;
|
|
QSet<StandardCalendarActionManager::Type> mInterceptedActions;
|
|
StandardCalendarActionManager *mParent;
|
|
};
|
|
|
|
Akonadi::StandardCalendarActionManager::StandardCalendarActionManager(KActionCollection *actionCollection, QWidget *parent)
|
|
: QObject(parent),
|
|
d(new Private(actionCollection, parent, this))
|
|
{
|
|
}
|
|
|
|
StandardCalendarActionManager::~StandardCalendarActionManager()
|
|
{
|
|
delete d;
|
|
}
|
|
|
|
void StandardCalendarActionManager::setCollectionSelectionModel(QItemSelectionModel *selectionModel)
|
|
{
|
|
d->mCollectionSelectionModel = selectionModel;
|
|
d->mGenericManager->setCollectionSelectionModel(selectionModel);
|
|
|
|
connect(selectionModel->model(), SIGNAL(rowsInserted(QModelIndex,int,int)),
|
|
SLOT(updateActions()));
|
|
connect(selectionModel->model(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
|
|
SLOT(updateActions()));
|
|
connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
|
|
SLOT(updateActions()));
|
|
d->updateActions();
|
|
}
|
|
|
|
void StandardCalendarActionManager::setItemSelectionModel(QItemSelectionModel *selectionModel)
|
|
{
|
|
d->mItemSelectionModel = selectionModel;
|
|
d->mGenericManager->setItemSelectionModel(selectionModel);
|
|
|
|
connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
|
|
SLOT(updateActions()));
|
|
|
|
d->updateActions();
|
|
}
|
|
|
|
KAction* StandardCalendarActionManager::createAction(StandardCalendarActionManager::Type type)
|
|
{
|
|
if (d->mActions.contains(type)) {
|
|
return d->mActions.value(type);
|
|
}
|
|
|
|
KAction *action = 0;
|
|
switch (type) {
|
|
case CreateEvent:
|
|
action = new KAction(d->mParentWidget);
|
|
action->setIcon(KIcon(QLatin1String("appointment-new")));
|
|
action->setText(i18n("New E&vent..."));
|
|
action->setWhatsThis(i18n("Create a new event"));
|
|
d->mActions.insert(CreateEvent, action);
|
|
d->mActionCollection->addAction(QString::fromLatin1("akonadi_event_create"), action);
|
|
connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateEvent()));
|
|
break;
|
|
case CreateTodo:
|
|
action = new KAction(d->mParentWidget);
|
|
action->setIcon(KIcon(QLatin1String("task-new")));
|
|
action->setText(i18n("New &To-do..."));
|
|
action->setWhatsThis(i18n("Create a new To-do"));
|
|
d->mActions.insert(CreateTodo, action);
|
|
d->mActionCollection->addAction(QString::fromLatin1("akonadi_todo_create"), action);
|
|
connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateTodo()));
|
|
break;
|
|
case CreateSubTodo:
|
|
action = new KAction(d->mParentWidget);
|
|
action->setIcon(KIcon(QLatin1String("new_subtodo")));
|
|
action->setText(i18n("New Su&b-to-do..."));
|
|
action->setWhatsThis(i18n("Create a new Sub-to-do"));
|
|
d->mActions.insert(CreateSubTodo, action);
|
|
d->mActionCollection->addAction(QString::fromLatin1("akonadi_subtodo_create"), action);
|
|
connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateSubTodo()));
|
|
break;
|
|
case CreateJournal:
|
|
action = new KAction(d->mParentWidget);
|
|
action->setIcon(KIcon(QLatin1String("journal-new")));
|
|
action->setText(i18n("New &Journal..."));
|
|
action->setWhatsThis(i18n("Create a new Journal"));
|
|
d->mActions.insert(CreateJournal, action);
|
|
d->mActionCollection->addAction(QString::fromLatin1("akonadi_journal_create"), action);
|
|
connect(action, SIGNAL(triggered(bool)), this, SLOT(slotCreateJournal()));
|
|
break;
|
|
case EditIncidence:
|
|
action = new KAction(d->mParentWidget);
|
|
action->setText(i18n("&Edit..."));
|
|
action->setWhatsThis(i18n("Edit the selected incidence."));
|
|
d->mActions.insert(EditIncidence, action);
|
|
d->mActionCollection->addAction(QString::fromLatin1("akonadi_incidence_edit"), action);
|
|
connect(action, SIGNAL(triggered(bool)), this, SLOT(slotEditIncidence()));
|
|
break;
|
|
default:
|
|
Q_ASSERT(false); // should never happen
|
|
break;
|
|
}
|
|
|
|
return action;
|
|
}
|
|
|
|
KAction* StandardCalendarActionManager::createAction(StandardActionManager::Type type)
|
|
{
|
|
KAction *act = d->mGenericManager->action(type);
|
|
if (!act)
|
|
act = d->mGenericManager->createAction(type);
|
|
d->updateGenericAction(type);
|
|
return act;
|
|
}
|
|
|
|
void StandardCalendarActionManager::createAllActions()
|
|
{
|
|
createAction(CreateEvent);
|
|
createAction(CreateTodo);
|
|
createAction(CreateSubTodo);
|
|
createAction(CreateJournal);
|
|
createAction(EditIncidence);
|
|
|
|
d->mGenericManager->createAllActions();
|
|
d->updateGenericAllActions();
|
|
d->updateActions();
|
|
}
|
|
|
|
KAction* StandardCalendarActionManager::action(StandardCalendarActionManager::Type type) const
|
|
{
|
|
if (d->mActions.contains(type)) {
|
|
return d->mActions.value(type);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
KAction* StandardCalendarActionManager::action(StandardActionManager::Type type) const
|
|
{
|
|
return d->mGenericManager->action(type);
|
|
}
|
|
|
|
void StandardCalendarActionManager::setActionText(StandardActionManager::Type type, const KLocalizedString &text)
|
|
{
|
|
d->mGenericManager->setActionText(type, text);
|
|
}
|
|
|
|
void StandardCalendarActionManager::interceptAction(StandardCalendarActionManager::Type type, bool intercept)
|
|
{
|
|
if (intercept) {
|
|
d->mInterceptedActions.insert(type);
|
|
} else {
|
|
d->mInterceptedActions.remove(type);
|
|
}
|
|
}
|
|
|
|
void StandardCalendarActionManager::interceptAction(StandardActionManager::Type type, bool intercept)
|
|
{
|
|
d->mGenericManager->interceptAction(type, intercept);
|
|
}
|
|
|
|
Akonadi::Collection::List StandardCalendarActionManager::selectedCollections() const
|
|
{
|
|
return d->mGenericManager->selectedCollections();
|
|
}
|
|
|
|
Akonadi::Item::List StandardCalendarActionManager::selectedItems() const
|
|
{
|
|
return d->mGenericManager->selectedItems();
|
|
}
|
|
|
|
void StandardCalendarActionManager::setContextText(StandardActionManager::Type type, StandardActionManager::TextContext context, const QString &text)
|
|
{
|
|
d->mGenericManager->setContextText(type, context, text);
|
|
}
|
|
|
|
void StandardCalendarActionManager::setContextText(StandardActionManager::Type type, StandardActionManager::TextContext context, const KLocalizedString &text)
|
|
{
|
|
d->mGenericManager->setContextText(type, context, text);
|
|
}
|
|
|
|
void StandardCalendarActionManager::setCollectionPropertiesPageNames(const QStringList &names)
|
|
{
|
|
d->mGenericManager->setCollectionPropertiesPageNames(names);
|
|
}
|
|
|
|
#include "moc_standardcalendaractionmanager.cpp"
|