Index: krevisioncontrolplugin.h
===================================================================
--- krevisioncontrolplugin.h	(Revision 0)
+++ krevisioncontrolplugin.h	(Revision 0)
@@ -0,0 +1,138 @@
+/***************************************************************************
+ * Copyright (C) 2009 by Peter Penz <peter.penz@gmx.at>                    *
+ *                                                                         *
+ * 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.                                      *
+ ***************************************************************************/
+
+#ifndef KREVISIONCONTROLPLUGIN_H
+#define KREVISIONCONTROLPLUGIN_H
+
+#include <libkonq_export.h>
+
+#include <QList>
+#include <QObject>
+
+class KFileItem;
+class KFileItemList;
+class QAction;
+
+/**
+ * @brief Base class for revision control plugins.
+ *
+ * Enables the file manager to show the revision state
+ * of a revisioned file. Actions can be
+ * provided that are added to the context menu.
+ */
+class LIBKONQ_EXPORT KRevisionControlPlugin : public QObject
+{
+    Q_OBJECT
+
+public:
+    enum RevisionState
+    {
+        /** The file is not under revision control. */
+        UnversionedRevision,
+        /**
+         * The file is under revision control and represents
+         * the latest version.
+         */
+        NormalRevision,
+        /**
+         * The file is under revision control and a newer
+         * version exists on the main branch.
+         */
+        UpdateRequiredRevision,
+        /**
+         * The file is under revision control and has been
+         * modified locally.
+         */
+        LocallyModifiedRevision,
+        /**
+         * The file has not been under revision control but
+         * has been marked to get added with the next commit.
+         */
+        AddedRevision,
+        /**
+         * The file is under revision control and has been locally
+         * modified. A modification has also been done on the main
+         * branch.
+         */
+        ConflictingRevision
+    };
+
+    KRevisionControlPlugin();
+    virtual ~KRevisionControlPlugin();
+
+    /**
+     * Returns the name of the file which stores
+     * the revision control informations.
+     * (e. g. .svn, .cvs, .git).
+     */
+    virtual QString fileName() const = 0;
+
+    /**
+     * Is invoked whenever the revision 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 revision control information has been
+     * received. It is assured that
+     * RevisionControlPlugin::beginInfoRetrieval() has been
+     * invoked before.
+     */
+    virtual void endRetrieval() = 0;
+
+    /**
+     * Returns the revision state for the file \p item.
+     * It is assured that RevisionControlPlugin::beginInfoRetrieval() has been
+     * invoked before and that the file is part of the directory specified
+     * in beginInfoRetrieval().
+     */
+    virtual RevisionState revisionState(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 revisions, the signal
+     * RevisionControlPlugin::revisionStatesChanged() 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 revisions,
+     * the signal RevisionControlPlugin::revisionStatesChanged() must be emitted.
+     */
+    virtual QList<QAction*> contextMenuActions(const QString& directory) = 0;
+
+signals:
+    /**
+     * Should be emitted when the revision state of files has been changed
+     * after the last retrieval. The file manager will be triggered to
+     * update the revision states of the directory \p directory by invoking
+     * RevisionControlPlugin::beginRetrieval(),
+     * RevisionControlPlugin::revisionState() and
+     * RevisionControlPlugin::endRetrieval().
+     */
+    void revisionStatesChanged(const QString& directory);
+};
+
+#endif // KREVISIONCONTROLPLUGIN_H
+
Index: krevisioncontrolplugin.cpp
===================================================================
--- krevisioncontrolplugin.cpp	(Revision 0)
+++ krevisioncontrolplugin.cpp	(Revision 0)
@@ -0,0 +1,30 @@
+/***************************************************************************
+ * Copyright (C) 2009 by Peter Penz <peter.penz@gmx.at>                    *
+ *                                                                         *
+ * 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 "krevisioncontrolplugin.h"
+
+KRevisionControlPlugin::KRevisionControlPlugin()
+{
+}
+
+KRevisionControlPlugin::~KRevisionControlPlugin()
+{
+}
+
+#include "krevisioncontrolplugin.moc"
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt	(Revision 999489)
+++ CMakeLists.txt	(Arbeitskopie)
@@ -13,6 +13,7 @@
    konq_popupmenuplugin.cpp # for KonqPopupMenu and its plugins
    konq_dndpopupmenuplugin.cpp # for KonqDndPopupMenu and its plugins
    knewmenu.cpp             # used by dolphin, KonqPopupMenu, and konqueror (File menu; to be moved to dolphinpart)
+   krevisioncontrolplugin.cpp # used by dolphin and its revision control plugins
    konq_copytomenu.cpp      # used by dolphin, KonqPopupMenu
    konq_operations.cpp      # used by dolphin and konqueror
    konq_events.cpp
@@ -54,6 +55,7 @@
  konq_popupmenuplugin.h
  konq_dndpopupmenuplugin.h
  knewmenu.h
+ krevisioncontrolplugin.h
  konq_menuactions.h
  # konq_copytomenu.h - anyone needs it?
  konq_operations.h
