return m_items.value(item.url(), -1);
}
-KUrl KFileItemModel::rootDirectory() const
+KFileItem KFileItemModel::rootItem() const
{
const KDirLister* dirLister = m_dirLister.data();
if (dirLister) {
- return dirLister->url();
+ return dirLister->rootItem();
}
- return KUrl();
+ return KFileItem();
}
void KFileItemModel::clear()
int index(const KFileItem& item) const;
/**
- * @return Root directory of all items.
+ * @return Root item of all items.
*/
- KUrl rootDirectory() const;
+ KFileItem rootItem() const;
/**
* Clears all items of the model.
#include <KIcon>
#include <KIconLoader>
+#include <kversioncontrolplugin2.h>
#include <QColor>
#include <KDebug>
if (values.contains("version")) {
// The item is under version control. Apply the text color corresponding
// to its version state.
- const KVersionControlPlugin::VersionState version = static_cast<KVersionControlPlugin::VersionState>(values.value("version").toInt());
+ const KVersionControlPlugin2::ItemVersion version = static_cast<KVersionControlPlugin2::ItemVersion>(values.value("version").toInt());
const QColor textColor = styleOption().palette.text().color();
QColor tintColor = textColor;
// as tint colors and are mixed with the current set text color. The tint colors
// have been optimized for the base colors of the corresponding Oxygen emblems.
switch (version) {
- case KVersionControlPlugin::UpdateRequiredVersion: tintColor = Qt::yellow; break;
- case KVersionControlPlugin::LocallyModifiedUnstagedVersion: tintColor = Qt::green; break;
- case KVersionControlPlugin::LocallyModifiedVersion: tintColor = Qt::green; break;
- case KVersionControlPlugin::AddedVersion: tintColor = Qt::green; break;
- case KVersionControlPlugin::RemovedVersion: tintColor = Qt::darkRed; break;
- case KVersionControlPlugin::ConflictingVersion: tintColor = Qt::red; break;
- case KVersionControlPlugin::UnversionedVersion: tintColor = Qt::white; break;
- case KVersionControlPlugin::NormalVersion:
+ case KVersionControlPlugin2::UpdateRequiredVersion: tintColor = Qt::yellow; break;
+ case KVersionControlPlugin2::LocallyModifiedUnstagedVersion: tintColor = Qt::green; break;
+ case KVersionControlPlugin2::LocallyModifiedVersion: tintColor = Qt::green; break;
+ case KVersionControlPlugin2::AddedVersion: tintColor = Qt::green; break;
+ case KVersionControlPlugin2::RemovedVersion: tintColor = Qt::darkRed; break;
+ case KVersionControlPlugin2::ConflictingVersion: tintColor = Qt::red; break;
+ case KVersionControlPlugin2::UnversionedVersion: tintColor = Qt::white; break;
+ case KVersionControlPlugin2::IgnoredVersion: tintColor = Qt::white; break;
+ case KVersionControlPlugin2::MissingVersion: tintColor = Qt::red; break;
+ case KVersionControlPlugin2::NormalVersion:
default:
break;
}
setTextColor(color);
}
-QPixmap DolphinFileItemListWidget::overlayForState(KVersionControlPlugin::VersionState version, int size)
+QPixmap DolphinFileItemListWidget::overlayForState(KVersionControlPlugin2::ItemVersion version, int size)
{
int overlayHeight = KIconLoader::SizeSmall;
if (size >= KIconLoader::SizeEnormous) {
#include <libdolphin_export.h>
#include <kitemviews/kfileitemlistwidget.h>
-#include <kversioncontrolplugin.h>
+#include <kversioncontrolplugin2.h>
/**
* @brief Extends KFileItemListWidget to handle the "version" role.
virtual void refreshCache();
private:
- static QPixmap overlayForState(KVersionControlPlugin::VersionState state, int size);
+ static QPixmap overlayForState(KVersionControlPlugin2::ItemVersion version, int size);
};
QList<QAction*> actions;
if (items.isEmpty()) {
- const KUrl url = fileItemModel()->rootDirectory();
- actions = m_versionControlObserver->contextMenuActions(url.path(KUrl::AddTrailingSlash));
+ const KFileItem item = fileItemModel()->rootItem();
+ actions = m_versionControlObserver->actions(KFileItemList() << item);
} else {
- actions = m_versionControlObserver->contextMenuActions(items);
+ actions = m_versionControlObserver->actions(items);
}
return actions;
#include "updateitemstatesthread.h"
+#include <kversioncontrolplugin2.h>
+
#include <QMutexLocker>
UpdateItemStatesThread::UpdateItemStatesThread() :
if (m_plugin->beginRetrieval(directory)) {
itemLocker.relock();
const int count = m_itemStates.count();
- for (int i = 0; i < count; ++i) {
- m_itemStates[i].version = m_plugin->versionState(m_itemStates[i].item);
+
+ KVersionControlPlugin2* pluginV2 = qobject_cast<KVersionControlPlugin2*>(m_plugin);
+ if (pluginV2) {
+ for (int i = 0; i < count; ++i) {
+ m_itemStates[i].version = pluginV2->itemVersion(m_itemStates[i].item);
+ }
+ } else {
+ for (int i = 0; i < count; ++i) {
+ const KVersionControlPlugin::VersionState state = m_plugin->versionState(m_itemStates[i].item);
+ m_itemStates[i].version = static_cast<KVersionControlPlugin2::ItemVersion>(state);
+ }
}
+
m_plugin->endRetrieval();
m_retrievedItems = true;
}
#include <KService>
#include <KServiceTypeTrader>
#include <kitemviews/kfileitemmodel.h>
-#include <kversioncontrolplugin.h>
+#include <kversioncontrolplugin2.h>
#include "updateitemstatesthread.h"
return m_model;
}
-QList<QAction*> VersionControlObserver::contextMenuActions(const KFileItemList& items) const
+QList<QAction*> VersionControlObserver::actions(const KFileItemList& items) const
{
QList<QAction*> actions;
- if (isVersioned()) {
+ if (!m_model) {
+ return actions;
+ }
+
+ KVersionControlPlugin2* pluginV2 = qobject_cast<KVersionControlPlugin2*>(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<QAction*> VersionControlObserver::contextMenuActions(const QString& directory) const
-{
- QList<QAction*> 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);
}
}
return;
}
- const KUrl versionControlUrl = m_model->rootDirectory();
+ const KUrl versionControlUrl = m_model->rootItem().url();
if (!versionControlUrl.isLocalFile()) {
return;
}
m_plugin = searchPlugin(versionControlUrl);
if (m_plugin) {
- connect(m_plugin, SIGNAL(versionStatesChanged()),
- this, SLOT(silentDirectoryVerification()));
+ KVersionControlPlugin2* pluginV2 = qobject_cast<KVersionControlPlugin2*>(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)),
ItemState itemState;
itemState.index = i;
itemState.item = m_model->fileItem(i);
- itemState.version = KVersionControlPlugin::UnversionedVersion;
+ itemState.version = KVersionControlPlugin2::UnversionedVersion;
itemStates.append(itemState);
}
#include <libdolphin_export.h>
#include <KFileItem>
-#include <kversioncontrolplugin.h>
+#include <kversioncontrolplugin2.h>
#include <QList>
#include <QMutex>
#include <QObject>
void setModel(KFileItemModel* model);
KFileItemModel* model() const;
- QList<QAction*> contextMenuActions(const KFileItemList& items) const;
- QList<QAction*> contextMenuActions(const QString& directory) const;
+ QList<QAction*> actions(const KFileItemList& items) const;
signals:
/**
{
int index;
KFileItem item;
- KVersionControlPlugin::VersionState version;
+ KVersionControlPlugin2::ItemVersion version;
};
void updateItemStates();