[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kfm-devel
Subject:    Re: Revision control support in Dolphin/Konqueror
From:       Peter Penz <peter.penz () gmx ! at>
Date:       2009-08-25 18:31:58
Message-ID: 200908252031.58953.peter.penz () gmx ! at
[Download RAW message or body]

Hi,

I've attached an updated patch for version control support in 
Dolphin/Konqueror. There is a related discussion ongoing on kdevelop-devel 
(see https://barney.cs.uni-potsdam.de/mailman/private/kdevelop-devel/2009-
August/034635.html), but no matter where the version control plugins will get 
located and how much code is shared [1], the plugin interface must be moved 
outside of Dolphin first.

If there are no objections, I'd commit the classes
    KVersionControlPlugin.h
    KVersionControlPlugin.cpp
into kdebase/apps/lib/konq on Monday the 31th of September (more details are 
given in the old e-mail below).

Best regards,
Peter

[1] currently it looks like KDE/kdevplatform/plugins might be a proper 
location

On Saturday, 25. July 2009 22:47:49 Peter Penz wrote:
> Hello,
>
> I have added a revision control support into Dolphin/Konqueror that works
> with each view mode (the working version has not been committed yet, will
> be done on Monday). "Revision control support" in the scope of Dolphin
> means that the revision state of a file is indicated by an emblem above the
> icon and that context dependent revision control actions are provided in
> the context menu.
>
> For testing purposes I temporary implemented a Subversion plugin inside
> Dolphin (part of dolphin/src/revisioncontrolplugin.*), but for sure this
> plugin should be moved outside of Dolphin ASAP.
>
> I'd like to move this plugin into the kdesdk module, but before this I'd
> need to move the revision control base class from Dolphin into
> kdebase/apps/lib/konq as
> krevisioncontrolplugin.h/krevisioncontrolplugin.cpp (see attached patch).
>
> Are there any general concerns/suggestions regarding the interface or the
> method- and enum-names? Would it be OK if I commit this class this Monday?
>
> Whom must I ask to get the OK to create a directory "revisioncontrol"
> (suggestion) inside KDE/kdesdk? This directory would contain the files:
> subversionplugin.cpp
> subversionplugin.h
> subversionplugin.desktop
>
> and might get extended by other revision control plugins.
>
> Thanks!
> Peter

["kversioncontrol.diff" (text/x-patch)]

Index: kversioncontrolplugin.cpp
===================================================================
--- kversioncontrolplugin.cpp	(Revision 0)
+++ kversioncontrolplugin.cpp	(Revision 0)
@@ -0,0 +1,30 @@
+/***************************************************************************
+ *   Copyright (C) 2009 by Peter Penz <peter.penz@gmx.at>                  *
+ *                                                                         *
+ *   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  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program 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 General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
+ ***************************************************************************/
+
+#include "kversioncontrolplugin.h"
+
+KVersionControlPlugin::KVersionControlPlugin()
+{
+}
+
+KVersionControlPlugin::~KVersionControlPlugin()
+{
+}
+
+#include "kversioncontrolplugin.moc"
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt	(Revision 1015504)
+++ CMakeLists.txt	(Arbeitskopie)
@@ -20,6 +20,7 @@
    konq_historyentry.cpp
    konq_historyloader.cpp
    konq_historyprovider.cpp
+   kversioncontrolplugin.cpp # used by dolphin and its version control plugins
    
    konq_popupmenuinformation.cpp # deprecated (functionality has moved to kdelibs)
    konq_menuactions.cpp     # deprecated (functionality has moved to kdelibs)
@@ -61,6 +62,7 @@
  konq_events.h
  konqmimedata.h
  konq_fileitemcapabilities.h
+ kversioncontrolplugin.h
 DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel
 )
 install( FILES konqpopupmenuplugin.desktop konqdndpopupmenuplugin.desktop  \
                DESTINATION  ${SERVICETYPES_INSTALL_DIR} )
Index: kversioncontrolplugin.h
===================================================================
--- kversioncontrolplugin.h	(Revision 0)
+++ kversioncontrolplugin.h	(Revision 0)
@@ -0,0 +1,162 @@
+/***************************************************************************
+ *   Copyright (C) 2009 by Peter Penz <peter.penz@gmx.at>                  *
+ *                                                                         *
+ *   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  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program 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 General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
+ ***************************************************************************/
+
+#ifndef KVERSIONCONTROLPLUGIN_H
+#define KVERSIONCONTROLPLUGIN_H
+
+#include <libkonq_export.h>
+
+#include <QDateTime>
+#include <QString>
+#include <QObject>
+
+class KFileItem;
+class KFileItemList;
+class QAction;
+
+/**
+ * @brief Base class for version control plugins.
+ *
+ * Enables the file manager to show the version state
+ * of a versioned file.
+ */
+class LIBKONQ_EXPORT KVersionControlPlugin : public QObject
+{
+    Q_OBJECT
+
+public:
+    enum VersionState
+    {
+        /** The file is not under version control. */
+        UnversionedVersion,
+        /**
+         * The file is under version control and represents
+         * the latest version.
+         */
+        NormalVersion,
+        /**
+         * The file is under version control and a newer
+         * version exists on the main branch.
+         */
+        UpdateRequiredVersion,
+        /**
+         * The file is under version control and has been
+         * modified locally.
+         */
+        LocallyModifiedVersion,
+        /**
+         * The file has not been under version control but
+         * has been marked to get added with the next commit.
+         */
+        AddedVersion,
+        /**
+         * The file is under version control but has been marked
+         * for getting removed with the next commit.
+         */
+        RemovedVersion,
+        /**
+         * The file is under version control and has been locally
+         * modified. A modification has also been done on the main
+         * branch.
+         */
+        ConflictingVersion
+    };
+
+    KVersionControlPlugin();
+    virtual ~KVersionControlPlugin();
+
+    /**
+     * Returns the name of the file which stores
+     * the version control informations.
+     * (e. g. .svn, .cvs, .git).
+     */
+    virtual QString fileName() const = 0;
+
+    /**
+     * Is invoked whenever the version control
+     * information will get retrieved for the directory
+     * \p directory. It is assured that the directory
+     * contains a trailing slash.
+     */
+    virtual bool beginRetrieval(const QString& directory) = 0;
+
+    /**
+     * Is invoked after the version control information has been
+     * received. It is assured that
+     * KVersionControlPlugin::beginInfoRetrieval() has been
+     * invoked before.
+     */
+    virtual void endRetrieval() = 0;
+
+    /**
+     * Returns the version state for the file \p item.
+     * It is assured that KVersionControlPlugin::beginInfoRetrieval() has been
+     * invoked before and that the file is part of the directory specified
+     * in beginInfoRetrieval().
+     */
+    virtual VersionState versionState(const KFileItem& item) = 0;
+    
+    /**
+     * Returns the list of actions that should be shown in the context menu
+     * for the files \p items. It is assured that the passed list is not empty.
+     * If an action triggers a change of the versions, the signal
+     * KVersionControlPlugin::versionStatesChanged() must be emitted.
+     */
+    virtual QList<QAction*> contextMenuActions(const KFileItemList& items) = 0;
+
+    /**
+     * Returns the list of actions that should be shown in the context menu
+     * for the directory \p directory. If an action triggers a change of the \
versions, +     * the signal KVersionControlPlugin::versionStatesChanged() must be \
emitted. +     */
+    virtual QList<QAction*> contextMenuActions(const QString& directory) = 0;
+
+signals:
+    /**
+     * Should be emitted when the version state of files might have been changed
+     * after the last retrieval (e. g. by executing a context menu action
+     * of the version control plugin). The file manager will be triggered to
+     * update the version states of the directory \p directory by invoking
+     * KVersionControlPlugin::beginRetrieval(),
+     * KVersionControlPlugin::versionState() and
+     * KVersionControlPlugin::endRetrieval().
+     */
+    void versionStatesChanged();
+
+    /**
+     * Is emitted if an information message with the content \a msg
+     * should be shown.
+     */
+    void infoMessage(const QString& msg);
+
+    /**
+     * Is emitted if an error message with the content \a msg
+     * should be shown.
+     */
+    void errorMessage(const QString& msg);
+
+    /**
+     * Is emitted if an "operation completed" message with the content \a msg
+     * should be shown.
+     */
+    void operationCompletedMessage(const QString& msg);
+};
+
+#endif // KVERSIONCONTROLPLUGIN_H
+



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic