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"