From ff243261742ecd70fb9e417614e757b5956c04aa Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Sat, 10 Sep 2011 18:08:03 +0200 Subject: Provide KVersionControlPlugin version 2 Based on the work of Vishesh Yadav some extensions where required for the KVersionControlPlugin interface that have found there way now into KVersionControlPlugin2. Beside some interface cleanups it is now possible that a version control plugin may also provide context actions for directories or files that are not versioned yet. REVIEW: 102541 --- .../versioncontrol/versioncontrolobserver.cpp | 55 ++++++++++++++-------- 1 file changed, 36 insertions(+), 19 deletions(-) (limited to 'src/views/versioncontrol/versioncontrolobserver.cpp') diff --git a/src/views/versioncontrol/versioncontrolobserver.cpp b/src/views/versioncontrol/versioncontrolobserver.cpp index c8d9d6874..20b059035 100644 --- a/src/views/versioncontrol/versioncontrolobserver.cpp +++ b/src/views/versioncontrol/versioncontrolobserver.cpp @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include "updateitemstatesthread.h" @@ -87,30 +87,41 @@ KFileItemModel* VersionControlObserver::model() const return m_model; } -QList VersionControlObserver::contextMenuActions(const KFileItemList& items) const +QList VersionControlObserver::actions(const KFileItemList& items) const { QList actions; - if (isVersioned()) { + if (!m_model) { + return actions; + } + + KVersionControlPlugin2* pluginV2 = qobject_cast(m_plugin); + if (pluginV2) { + // Use version 2 of the KVersionControlPlugin which allows providing actions + // also for non-versioned directories. if (m_updateItemStatesThread && m_updateItemStatesThread->lockPlugin()) { - actions = m_plugin->contextMenuActions(items); + actions = pluginV2->actions(items); m_updateItemStatesThread->unlockPlugin(); } else { - actions = m_plugin->contextMenuActions(items); + actions = pluginV2->actions(items); + } + } else if (isVersioned()) { + // Support deprecated interfaces from KVersionControlPlugin version 1. + // Context menu actions where only available for versioned directories. + QString directory; + if (items.count() == 1) { + const KFileItem rootItem = m_model->rootItem(); + if (!rootItem.isNull() && items.first().url() == rootItem.url()) { + directory = rootItem.url().path(KUrl::AddTrailingSlash); + } } - } - - return actions; -} -QList VersionControlObserver::contextMenuActions(const QString& directory) const -{ - QList actions; - if (isVersioned()) { if (m_updateItemStatesThread && m_updateItemStatesThread->lockPlugin()) { - actions = m_plugin->contextMenuActions(directory); + actions = directory.isEmpty() ? m_plugin->contextMenuActions(items) + : m_plugin->contextMenuActions(directory); m_updateItemStatesThread->unlockPlugin(); } else { - actions = m_plugin->contextMenuActions(directory); + actions = directory.isEmpty() ? m_plugin->contextMenuActions(items) + : m_plugin->contextMenuActions(directory); } } @@ -135,7 +146,7 @@ void VersionControlObserver::verifyDirectory() return; } - const KUrl versionControlUrl = m_model->rootDirectory(); + const KUrl versionControlUrl = m_model->rootItem().url(); if (!versionControlUrl.isLocalFile()) { return; } @@ -146,8 +157,14 @@ void VersionControlObserver::verifyDirectory() m_plugin = searchPlugin(versionControlUrl); if (m_plugin) { - connect(m_plugin, SIGNAL(versionStatesChanged()), - this, SLOT(silentDirectoryVerification())); + KVersionControlPlugin2* pluginV2 = qobject_cast(m_plugin); + if (pluginV2) { + connect(pluginV2, SIGNAL(itemVersionsChanged()), + this, SLOT(silentDirectoryVerification())); + } else { + connect(m_plugin, SIGNAL(versionStatesChanged()), + this, SLOT(silentDirectoryVerification())); + } connect(m_plugin, SIGNAL(infoMessage(QString)), this, SIGNAL(infoMessage(QString))); connect(m_plugin, SIGNAL(errorMessage(QString)), @@ -233,7 +250,7 @@ void VersionControlObserver::updateItemStates() ItemState itemState; itemState.index = i; itemState.item = m_model->fileItem(i); - itemState.version = KVersionControlPlugin::UnversionedVersion; + itemState.version = KVersionControlPlugin2::UnversionedVersion; itemStates.append(itemState); } -- cgit v1.3