File indexing completed on 2024-05-12 04:38:53

0001 /*
0002     This file was partly taken from KDevelop's cvs plugin
0003     SPDX-FileCopyrightText: 2007 Robert Gruber <rgruber@users.sourceforge.net>
0004 
0005     Adapted for DVCS (added templates)
0006     SPDX-FileCopyrightText: 2008 Evgeniy Ivanov <powerfox@kde.ru>
0007 
0008     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0009 */
0010 
0011 #ifndef DVCS_PLUGIN_CC
0012 #define DVCS_PLUGIN_CC
0013 
0014 #include "dvcsplugin.h"
0015 
0016 #include <QMenu>
0017 #include <QFileInfo>
0018 #include <QString>
0019 
0020 #include <KLocalizedString>
0021 #include <KParts/MainWindow>
0022 
0023 #include <interfaces/iuicontroller.h>
0024 #include <interfaces/icore.h>
0025 #include <interfaces/context.h>
0026 #include <interfaces/contextmenuextension.h>
0027 #include <interfaces/idocumentcontroller.h>
0028 #include <util/scopeddialog.h>
0029 
0030 #include "dvcsjob.h"
0031 #include "ui/dvcsimportmetadatawidget.h"
0032 #include "ui/branchmanager.h"
0033 #include <vcs/vcspluginhelper.h>
0034 
0035 namespace KDevelop
0036 {
0037 
0038 class DistributedVersionControlPluginPrivate
0039 {
0040 public:
0041     explicit DistributedVersionControlPluginPrivate(DistributedVersionControlPlugin * pThis)
0042             : m_common(new VcsPluginHelper(pThis, pThis)) {}
0043 
0044     ~DistributedVersionControlPluginPrivate() { delete m_common; }
0045     VcsPluginHelper* m_common;
0046 };
0047 
0048 //class DistributedVersionControlPlugin
0049 DistributedVersionControlPlugin::DistributedVersionControlPlugin(QObject *parent, const QString& componentName)
0050         : IPlugin(componentName, parent)
0051         , d_ptr(new DistributedVersionControlPluginPrivate(this))
0052 {}
0053 
0054 DistributedVersionControlPlugin::~DistributedVersionControlPlugin()
0055 {
0056     //TODO: Find out why this crashes on the svn tests delete d->m_factory;
0057 }
0058 
0059 // End:  KDevelop::IBasicVersionControl
0060 
0061 
0062 // Begin:  KDevelop::IDistributedVersionControl
0063 
0064 // End:  KDevelop::IDistributedVersionControl
0065 
0066 
0067 KDevelop::VcsImportMetadataWidget*
0068 DistributedVersionControlPlugin::createImportMetadataWidget(QWidget* parent)
0069 {
0070     return new DvcsImportMetadataWidget(parent);
0071 }
0072 
0073 KDevelop::ContextMenuExtension
0074 DistributedVersionControlPlugin::contextMenuExtension(Context* context, QWidget* parent)
0075 {
0076     Q_D(DistributedVersionControlPlugin);
0077 
0078     d->m_common->setupFromContext(context);
0079     QList<QUrl> const & ctxUrlList = d->m_common->contextUrlList();
0080 
0081     bool isWorkingDirectory = false;
0082     for (const QUrl& url : ctxUrlList) {
0083         if (isValidDirectory(url)) {
0084             isWorkingDirectory = true;
0085             break;
0086         }
0087     }
0088 
0089     if (!isWorkingDirectory) {  // Not part of a repository
0090         return ContextMenuExtension();
0091     }
0092 
0093     QMenu * menu = d->m_common->commonActions(parent);
0094     menu->addSeparator();
0095     menu->addAction(i18nc("@action:inmenu", "Branches..."), this, SLOT(ctxBranchManager()))->setEnabled(ctxUrlList.count()==1);
0096     additionalMenuEntries(menu, ctxUrlList);
0097 
0098     ContextMenuExtension menuExt;
0099     menuExt.addAction(ContextMenuExtension::VcsGroup, menu->menuAction());
0100 
0101     return menuExt;
0102 
0103 }
0104 
0105 void DistributedVersionControlPlugin::additionalMenuEntries(QMenu* /*menu*/, const QList<QUrl>& /*urls*/)
0106 {}
0107 
0108 static QString stripPathToDir(const QString &path)
0109 {
0110     QFileInfo info = QFileInfo(path);
0111     return info.isDir() ? info.absoluteFilePath() : info.absolutePath();
0112 }
0113 
0114 void DistributedVersionControlPlugin::ctxBranchManager()
0115 {
0116     Q_D(DistributedVersionControlPlugin);
0117 
0118     QList<QUrl> const & ctxUrlList = d->m_common->contextUrlList();
0119     Q_ASSERT(!ctxUrlList.isEmpty());    
0120     
0121     ICore::self()->documentController()->saveAllDocuments();
0122 
0123     ScopedDialog<BranchManager> branchManager(stripPathToDir(ctxUrlList.front().toLocalFile()),
0124                                                this, core()->uiController()->activeMainWindow());
0125     branchManager->exec();
0126 }
0127 
0128 }
0129 
0130 #endif
0131 
0132 #include "moc_dvcsplugin.cpp"