X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/1cb5a202e4c861025d4eda5813848cdb7d5f350d..87f30d3fc8172649b3c905b04e20655ca18ac68f:/src/views/versioncontrol/versioncontrolobserver.h diff --git a/src/views/versioncontrol/versioncontrolobserver.h b/src/views/versioncontrol/versioncontrolobserver.h index 08bb234b3..08279dc86 100644 --- a/src/views/versioncontrol/versioncontrolobserver.h +++ b/src/views/versioncontrol/versioncontrolobserver.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009 by Peter Penz * + * Copyright (C) 2009 by Peter Penz * * * * 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 * @@ -17,46 +17,51 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ -#ifndef REVISIONCONTROLOBSERVER_H -#define REVISIONCONTROLOBSERVER_H +#ifndef VERSIONCONTROLOBSERVER_H +#define VERSIONCONTROLOBSERVER_H -#include +#include "dolphin_export.h" + +#include "kversioncontrolplugin.h" + +#include -#include -#include #include -#include #include -#include #include +#include -class DolphinModel; -class KDirLister; class KFileItemList; -class QAbstractItemView; +class KFileItemModel; class QAction; class QTimer; class UpdateItemStatesThread; +class DolphinView; + /** * @brief Observes all version control plugins. * - * The item view gets updated automatically if the currently shown - * directory is under version control. + * The items of the directory-model get updated automatically if the currently + * shown directory is under version control. * * @see VersionControlPlugin */ -class LIBDOLPHINPRIVATE_EXPORT VersionControlObserver : public QObject +class DOLPHIN_EXPORT VersionControlObserver : public QObject { Q_OBJECT public: - VersionControlObserver(QAbstractItemView* view); - virtual ~VersionControlObserver(); + explicit VersionControlObserver(QObject* parent = nullptr); + ~VersionControlObserver() override; + + void setModel(KFileItemModel* model); + KFileItemModel* model() const; + void setView(DolphinView* view); + DolphinView* view() const; + + QList actions(const KFileItemList& items) const; - QList contextMenuActions(const KFileItemList& items) const; - QList contextMenuActions(const QString& directory) const; - signals: /** * Is emitted if an information message with the content \a msg @@ -75,7 +80,7 @@ signals: * should be shown. */ void operationCompletedMessage(const QString& msg); - + private slots: /** * Invokes verifyDirectory() with a small delay. If delayedDirectoryVerification() @@ -90,7 +95,7 @@ private slots: * delayedDirectoryVerification() it and assures that the verification of * the directory is done silently without information messages. */ - void silentDirectoryVerification(); + void silentDirectoryVerification(); void verifyDirectory(); @@ -99,28 +104,33 @@ private slots: * and applys the item states. */ void slotThreadFinished(); - + private: - struct ItemState - { - QPersistentModelIndex index; - KFileItem item; - KVersionControlPlugin::VersionState version; - }; + typedef QPair ItemState; void updateItemStates(); /** - * Adds recursively all items from the directory \p parentIndex into - * the list \p itemStates. + * It creates a item state list for every expanded directory and stores + * this list together with the directory url in the \a itemStates map. + * + * @itemStates A map of item state lists for every expanded directory + * and its items, where the "key" is the directory url and + * the "value" is a list of ItemStates for every item + * within this directory. + * @firstIndex The index to start the processing from, this is needed + * because this function is recursively called. + * + * @return The number of (recursive) processed items. */ - void addDirectory(const QModelIndex& parentIndex, QList& itemStates); + int createItemStatesList(QMap >& itemStates, + const int firstIndex = 0); /** * Returns a matching plugin for the given directory. * 0 is returned, if no matching plugin has been found. */ - KVersionControlPlugin* searchPlugin(const KUrl& directory) const; + KVersionControlPlugin* searchPlugin(const QUrl& directory); /** * Returns true, if the directory contains a version control information. @@ -132,14 +142,15 @@ private: bool m_versionedDirectory; bool m_silentUpdate; // if true, no messages will be send during the update // of version states - - QAbstractItemView* m_view; - KDirLister* m_dirLister; - DolphinModel* m_dolphinModel; - + + DolphinView* m_view; + KFileItemModel* m_model; + QTimer* m_dirVerificationTimer; + bool m_pluginsInitialized; KVersionControlPlugin* m_plugin; + QList m_plugins; UpdateItemStatesThread* m_updateItemStatesThread; friend class UpdateItemStatesThread;