Cvs: Move plugin pimpl to .cpp

Change-Id: Idacee6b43f34c74eadc551496d4c596536eddde4
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
hjk
2020-01-29 09:10:37 +01:00
parent 0f3f85278d
commit 0f67026794
6 changed files with 302 additions and 416 deletions

View File

@@ -1,166 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "cvscontrol.h"
#include "cvsclient.h"
#include "cvsplugin.h"
#include "cvssettings.h"
#include <vcsbase/vcsbaseconstants.h>
#include <vcsbase/vcscommand.h>
#include <utils/fileutils.h>
#include <utils/hostosinfo.h>
#include <utils/qtcassert.h>
#include <QFileInfo>
using namespace Cvs;
using namespace Cvs::Internal;
CvsControl::CvsControl(CvsPluginPrivate *plugin) :
m_plugin(plugin)
{ }
QString CvsControl::displayName() const
{
return QLatin1String("cvs");
}
Core::Id CvsControl::id() const
{
return Core::Id(VcsBase::Constants::VCS_ID_CVS);
}
bool CvsControl::isVcsFileOrDirectory(const Utils::FilePath &fileName) const
{
return fileName.isDir()
&& !fileName.fileName().compare("CVS", Utils::HostOsInfo::fileNameCaseSensitivity());
}
bool CvsControl::isConfigured() const
{
const Utils::FilePath binary = m_plugin->client()->vcsBinary();
if (binary.isEmpty())
return false;
QFileInfo fi = binary.toFileInfo();
return fi.exists() && fi.isFile() && fi.isExecutable();
}
bool CvsControl::supportsOperation(Operation operation) const
{
bool rc = isConfigured();
switch (operation) {
case AddOperation:
case DeleteOperation:
case AnnotateOperation:
case InitialCheckoutOperation:
break;
case MoveOperation:
case CreateRepositoryOperation:
case SnapshotOperations:
rc = false;
break;
}
return rc;
}
Core::IVersionControl::OpenSupportMode CvsControl::openSupportMode(const QString &fileName) const
{
Q_UNUSED(fileName)
return OpenOptional;
}
bool CvsControl::vcsOpen(const QString &fileName)
{
const QFileInfo fi(fileName);
return m_plugin->edit(fi.absolutePath(), QStringList(fi.fileName()));
}
bool CvsControl::vcsAdd(const QString &fileName)
{
const QFileInfo fi(fileName);
return m_plugin->vcsAdd(fi.absolutePath(), fi.fileName());
}
bool CvsControl::vcsDelete(const QString &fileName)
{
const QFileInfo fi(fileName);
return m_plugin->vcsDelete(fi.absolutePath(), fi.fileName());
}
bool CvsControl::vcsMove(const QString &from, const QString &to)
{
Q_UNUSED(from)
Q_UNUSED(to)
return false;
}
bool CvsControl::vcsCreateRepository(const QString &)
{
return false;
}
bool CvsControl::vcsAnnotate(const QString &file, int line)
{
const QFileInfo fi(file);
m_plugin->vcsAnnotate(fi.absolutePath(), fi.fileName(), QString(), line);
return true;
}
QString CvsControl::vcsOpenText() const
{
return tr("&Edit");
}
Core::ShellCommand *CvsControl::createInitialCheckoutCommand(const QString &url,
const Utils::FilePath &baseDirectory,
const QString &localName,
const QStringList &extraArgs)
{
QTC_ASSERT(localName == url, return nullptr);
const CvsSettings settings = m_plugin->client()->settings();
QStringList args;
args << QLatin1String("checkout") << url << extraArgs;
auto command = new VcsBase::VcsCommand(baseDirectory.toString(),
QProcessEnvironment::systemEnvironment());
command->setDisplayName(tr("CVS Checkout"));
command->addJob({m_plugin->client()->vcsBinary(), settings.addOptions(args)}, -1);
return command;
}
bool CvsControl::managesDirectory(const QString &directory, QString *topLevel) const
{
return m_plugin->managesDirectory(directory, topLevel);
}
bool CvsControl::managesFile(const QString &workingDirectory, const QString &fileName) const
{
return m_plugin->managesFile(workingDirectory, fileName);
}

View File

@@ -1,72 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include <coreplugin/iversioncontrol.h>
namespace Cvs {
namespace Internal {
class CvsPluginPrivate;
// Just a proxy for CVSPlugin
class CvsControl : public Core::IVersionControl
{
Q_OBJECT
public:
explicit CvsControl(CvsPluginPrivate *plugin);
QString displayName() const final;
Core::Id id() const final;
bool isVcsFileOrDirectory(const Utils::FilePath &fileName) const final;
bool managesDirectory(const QString &directory, QString *topLevel = nullptr) const final;
bool managesFile(const QString &workingDirectory, const QString &fileName) const final;
bool isConfigured() const final;
bool supportsOperation(Operation operation) const final;
OpenSupportMode openSupportMode(const QString &fileName) const final;
bool vcsOpen(const QString &fileName) final;
bool vcsAdd(const QString &fileName) final;
bool vcsDelete(const QString &filename) final;
bool vcsMove(const QString &from, const QString &to) final;
bool vcsCreateRepository(const QString &directory) final;
bool vcsAnnotate(const QString &file, int line) final;
QString vcsOpenText() const final;
Core::ShellCommand *createInitialCheckoutCommand(const QString &url,
const Utils::FilePath &baseDirectory,
const QString &localName,
const QStringList &extraArgs) final;
private:
CvsPluginPrivate *const m_plugin;
};
} // namespace Internal
} // namespace Cvs

View File

@@ -29,11 +29,13 @@
#include "cvssubmiteditor.h"
#include "cvsclient.h"
#include "cvscontrol.h"
#include "cvsutils.h"
#include <vcsbase/basevcseditorfactory.h>
#include <vcsbase/basevcssubmiteditorfactory.h>
#include <vcsbase/vcsbaseconstants.h>
#include <vcsbase/vcsbaseeditor.h>
#include <vcsbase/vcsbaseplugin.h>
#include <vcsbase/vcscommand.h>
#include <vcsbase/vcsoutputwindow.h>
@@ -80,17 +82,6 @@ using namespace Utils;
namespace Cvs {
namespace Internal {
static inline QString msgCannotFindTopLevel(const QString &f)
{
return CvsPluginPrivate::tr("Cannot find repository for \"%1\".").
arg(QDir::toNativeSeparators(f));
}
static inline QString msgLogParsingFailed()
{
return CvsPluginPrivate::tr("Parsing of the log output failed.");
}
const char CVS_CONTEXT[] = "CVS Context";
const char CMD_ID_CVS_MENU[] = "CVS.Menu";
const char CMD_ID_ADD[] = "CVS.Add";
@@ -121,6 +112,17 @@ const char CVS_SUBMIT_MIMETYPE[] = "text/vnd.qtcreator.cvs.submit";
const char CVSCOMMITEDITOR_ID[] = "CVS Commit Editor";
const char CVSCOMMITEDITOR_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("VCS", "CVS Commit Editor");
class CvsResponse
{
public:
enum Result { Ok, NonNullExitCode, OtherError };
Result result = Ok;
QString stdOut;
QString stdErr;
QString message;
};
const VcsBaseEditorParameters editorParameters[] = {
{
OtherContent,
@@ -154,6 +156,282 @@ static inline bool messageBoxQuestion(const QString &title, const QString &quest
return QMessageBox::question(ICore::dialogParent(), title, question, QMessageBox::Yes|QMessageBox::No) == QMessageBox::Yes;
}
class CvsPluginPrivate final : public VcsBasePluginPrivate
{
Q_DECLARE_TR_FUNCTIONS(Cvs::Internal::CvsPlugin)
public:
CvsPluginPrivate();
~CvsPluginPrivate() final;
CvsClient *client() const;
CvsSubmitEditor *openCVSSubmitEditor(const QString &fileName);
// IVersionControl
bool vcsAdd(const QString &workingDir, const QString &fileName);
bool vcsDelete(const QString &workingDir, const QString &fileName);
bool managesDirectory(const QString &directory, QString *topLevel = nullptr) const;
bool managesFile(const QString &workingDirectory, const QString &fileName) const;
// cvs 'edit' is used to implement 'open' (cvsnt).
bool edit(const QString &topLevel, const QStringList &files);
void vcsAnnotate(const QString &workingDirectory, const QString &file,
const QString &revision, int lineNumber);
protected:
void updateActions(ActionState) final;
bool submitEditorAboutToClose() final;
private:
void addCurrentFile();
void revertCurrentFile();
void diffProject();
void diffCurrentFile();
void revertAll();
void startCommitAll();
void startCommitDirectory();
void startCommitCurrentFile();
void filelogCurrentFile();
void annotateCurrentFile();
void projectStatus();
void updateDirectory();
void updateProject();
void commitFromEditor() final;
void diffCommitFiles(const QStringList &);
void logProject();
void logRepository();
void commitProject();
void diffRepository();
void statusRepository();
void updateRepository();
void editCurrentFile();
void uneditCurrentFile();
void uneditCurrentRepository();
bool isCommitEditorOpen() const;
Core::IEditor *showOutputInEditor(const QString& title, const QString &output,
int editorType, const QString &source,
QTextCodec *codec);
CvsResponse runCvs(const QString &workingDirectory,
const QStringList &arguments,
int timeOutS,
unsigned flags,
QTextCodec *outputCodec = nullptr) const;
void annotate(const QString &workingDir, const QString &file,
const QString &revision = QString(), int lineNumber= -1);
bool describe(const QString &source, const QString &changeNr, QString *errorMessage);
bool describe(const QString &toplevel, const QString &source, const QString &changeNr, QString *errorMessage);
bool describe(const QString &repository, QList<CvsLogEntry> entries, QString *errorMessage);
void filelog(const QString &workingDir,
const QString &file = QString(),
bool enableAnnotationContextMenu = false);
bool unedit(const QString &topLevel, const QStringList &files);
bool status(const QString &topLevel, const QString &file, const QString &title);
bool update(const QString &topLevel, const QString &file);
bool checkCVSDirectory(const QDir &directory) const;
// Quick check if files are modified
bool diffCheckModified(const QString &topLevel, const QStringList &files, bool *modified);
QString findTopLevelForDirectoryI(const QString &directory) const;
void startCommit(const QString &workingDir, const QString &file = QString());
bool commit(const QString &messageFile, const QStringList &subVersionFileList);
void cleanCommitMessageFile();
CvsSettings m_settings;
CvsClient *m_client = nullptr;
QString m_commitMessageFileName;
QString m_commitRepository;
Core::CommandLocator *m_commandLocator = nullptr;
Utils::ParameterAction *m_addAction = nullptr;
Utils::ParameterAction *m_deleteAction = nullptr;
Utils::ParameterAction *m_revertAction = nullptr;
Utils::ParameterAction *m_editCurrentAction = nullptr;
Utils::ParameterAction *m_uneditCurrentAction = nullptr;
QAction *m_uneditRepositoryAction = nullptr;
Utils::ParameterAction *m_diffProjectAction = nullptr;
Utils::ParameterAction *m_diffCurrentAction = nullptr;
Utils::ParameterAction *m_logProjectAction = nullptr;
QAction *m_logRepositoryAction = nullptr;
QAction *m_commitAllAction = nullptr;
QAction *m_revertRepositoryAction = nullptr;
Utils::ParameterAction *m_commitCurrentAction = nullptr;
Utils::ParameterAction *m_filelogCurrentAction = nullptr;
Utils::ParameterAction *m_annotateCurrentAction = nullptr;
Utils::ParameterAction *m_statusProjectAction = nullptr;
Utils::ParameterAction *m_updateProjectAction = nullptr;
Utils::ParameterAction *m_commitProjectAction = nullptr;
Utils::ParameterAction *m_updateDirectoryAction = nullptr;
Utils::ParameterAction *m_commitDirectoryAction = nullptr;
QAction *m_diffRepositoryAction = nullptr;
QAction *m_updateRepositoryAction = nullptr;
QAction *m_statusRepositoryAction = nullptr;
QAction *m_menuAction = nullptr;
bool m_submitActionTriggered = false;
};
// Just a proxy for CVSPlugin
class CvsControl : public Core::IVersionControl
{
Q_DECLARE_TR_FUNCTIONS(Cvs::Internal::CvsControl)
public:
explicit CvsControl(CvsPluginPrivate *plugin) : m_plugin(plugin) {}
QString displayName() const final;
Core::Id id() const final;
bool isVcsFileOrDirectory(const Utils::FilePath &fileName) const final;
bool managesDirectory(const QString &directory, QString *topLevel = nullptr) const final;
bool managesFile(const QString &workingDirectory, const QString &fileName) const final;
bool isConfigured() const final;
bool supportsOperation(Operation operation) const final;
OpenSupportMode openSupportMode(const QString &fileName) const final;
bool vcsOpen(const QString &fileName) final;
bool vcsAdd(const QString &fileName) final;
bool vcsDelete(const QString &filename) final;
bool vcsMove(const QString &from, const QString &to) final;
bool vcsCreateRepository(const QString &directory) final;
bool vcsAnnotate(const QString &file, int line) final;
QString vcsOpenText() const final;
Core::ShellCommand *createInitialCheckoutCommand(const QString &url,
const Utils::FilePath &baseDirectory,
const QString &localName,
const QStringList &extraArgs) final;
private:
CvsPluginPrivate *const m_plugin;
};
QString CvsControl::displayName() const
{
return QLatin1String("cvs");
}
Core::Id CvsControl::id() const
{
return Core::Id(VcsBase::Constants::VCS_ID_CVS);
}
bool CvsControl::isVcsFileOrDirectory(const Utils::FilePath &fileName) const
{
return fileName.isDir()
&& !fileName.fileName().compare("CVS", Utils::HostOsInfo::fileNameCaseSensitivity());
}
bool CvsControl::isConfigured() const
{
const Utils::FilePath binary = m_plugin->client()->vcsBinary();
if (binary.isEmpty())
return false;
QFileInfo fi = binary.toFileInfo();
return fi.exists() && fi.isFile() && fi.isExecutable();
}
bool CvsControl::supportsOperation(Operation operation) const
{
bool rc = isConfigured();
switch (operation) {
case AddOperation:
case DeleteOperation:
case AnnotateOperation:
case InitialCheckoutOperation:
break;
case MoveOperation:
case CreateRepositoryOperation:
case SnapshotOperations:
rc = false;
break;
}
return rc;
}
Core::IVersionControl::OpenSupportMode CvsControl::openSupportMode(const QString &fileName) const
{
Q_UNUSED(fileName)
return OpenOptional;
}
bool CvsControl::vcsOpen(const QString &fileName)
{
const QFileInfo fi(fileName);
return m_plugin->edit(fi.absolutePath(), QStringList(fi.fileName()));
}
bool CvsControl::vcsAdd(const QString &fileName)
{
const QFileInfo fi(fileName);
return m_plugin->vcsAdd(fi.absolutePath(), fi.fileName());
}
bool CvsControl::vcsDelete(const QString &fileName)
{
const QFileInfo fi(fileName);
return m_plugin->vcsDelete(fi.absolutePath(), fi.fileName());
}
bool CvsControl::vcsMove(const QString &from, const QString &to)
{
Q_UNUSED(from)
Q_UNUSED(to)
return false;
}
bool CvsControl::vcsCreateRepository(const QString &)
{
return false;
}
bool CvsControl::vcsAnnotate(const QString &file, int line)
{
const QFileInfo fi(file);
m_plugin->vcsAnnotate(fi.absolutePath(), fi.fileName(), QString(), line);
return true;
}
QString CvsControl::vcsOpenText() const
{
return tr("&Edit");
}
Core::ShellCommand *CvsControl::createInitialCheckoutCommand(const QString &url,
const Utils::FilePath &baseDirectory,
const QString &localName,
const QStringList &extraArgs)
{
QTC_ASSERT(localName == url, return nullptr);
const CvsSettings settings = m_plugin->client()->settings();
QStringList args;
args << QLatin1String("checkout") << url << extraArgs;
auto command = new VcsBase::VcsCommand(baseDirectory.toString(),
QProcessEnvironment::systemEnvironment());
command->setDisplayName(tr("CVS Checkout"));
command->addJob({m_plugin->client()->vcsBinary(), settings.addOptions(args)}, -1);
return command;
}
bool CvsControl::managesDirectory(const QString &directory, QString *topLevel) const
{
return m_plugin->managesDirectory(directory, topLevel);
}
bool CvsControl::managesFile(const QString &workingDirectory, const QString &fileName) const
{
return m_plugin->managesFile(workingDirectory, fileName);
}
// ------------- CVSPlugin
static CvsPluginPrivate *dd = nullptr;
@@ -221,7 +499,7 @@ CvsPluginPrivate::CvsPluginPrivate()
m_client = new CvsClient(&m_settings);
new CvsSettingsPage(vcsCtrl, &m_settings, this);
new CvsSettingsPage([vcsCtrl] { vcsCtrl->configurationChanged(); }, &m_settings, this);
new VcsSubmitEditorFactory(&submitParameters,
[]() { return new CvsSubmitEditor(&submitParameters); }, this);
@@ -968,7 +1246,8 @@ bool CvsPluginPrivate::describe(const QString &file, const QString &changeNr, QS
QString toplevel;
const bool manages = managesDirectory(QFileInfo(file).absolutePath(), &toplevel);
if (!manages || toplevel.isEmpty()) {
*errorMessage = msgCannotFindTopLevel(file);
*errorMessage = tr("Cannot find repository for \"%1\".")
.arg(QDir::toNativeSeparators(file));
return false;
}
return describe(toplevel, QDir(toplevel).relativeFilePath(file), changeNr, errorMessage);
@@ -1000,7 +1279,7 @@ bool CvsPluginPrivate::describe(const QString &toplevel, const QString &file, co
}
const QList<CvsLogEntry> fileLog = parseLogEntries(logResponse.stdOut);
if (fileLog.empty() || fileLog.front().revisions.empty()) {
*errorMessage = msgLogParsingFailed();
*errorMessage = tr("Parsing of the log output failed.");
return false;
}
if (m_settings.boolValue(CvsSettings::describeByCommitIdKey)) {

View File

@@ -25,161 +25,11 @@
#pragma once
#include "cvssettings.h"
#include "cvsutils.h"
#include <vcsbase/vcsbaseplugin.h>
QT_BEGIN_NAMESPACE
class QDir;
class QAction;
class QTextCodec;
QT_END_NAMESPACE
namespace Core {
class CommandLocator;
class IVersionControl;
} // namespace Core
namespace Utils { class ParameterAction; }
namespace VcsBase { class VcsBaseSubmitEditor; }
#include <extensionsystem/iplugin.h>
namespace Cvs {
namespace Internal {
class CvsSubmitEditor;
class CvsControl;
class CvsClient;
class CvsResponse
{
public:
enum Result { Ok, NonNullExitCode, OtherError };
Result result = Ok;
QString stdOut;
QString stdErr;
QString message;
};
class CvsPluginPrivate final : public VcsBase::VcsBasePluginPrivate
{
Q_OBJECT
public:
CvsPluginPrivate();
~CvsPluginPrivate() final;
CvsClient *client() const;
CvsSubmitEditor *openCVSSubmitEditor(const QString &fileName);
// IVersionControl
bool vcsAdd(const QString &workingDir, const QString &fileName);
bool vcsDelete(const QString &workingDir, const QString &fileName);
bool managesDirectory(const QString &directory, QString *topLevel = nullptr) const;
bool managesFile(const QString &workingDirectory, const QString &fileName) const;
// cvs 'edit' is used to implement 'open' (cvsnt).
bool edit(const QString &topLevel, const QStringList &files);
void vcsAnnotate(const QString &workingDirectory, const QString &file,
const QString &revision, int lineNumber);
protected:
void updateActions(VcsBase::VcsBasePluginPrivate::ActionState) override;
bool submitEditorAboutToClose() override;
private:
void addCurrentFile();
void revertCurrentFile();
void diffProject();
void diffCurrentFile();
void revertAll();
void startCommitAll();
void startCommitDirectory();
void startCommitCurrentFile();
void filelogCurrentFile();
void annotateCurrentFile();
void projectStatus();
void updateDirectory();
void updateProject();
void commitFromEditor() override;
void diffCommitFiles(const QStringList &);
void logProject();
void logRepository();
void commitProject();
void diffRepository();
void statusRepository();
void updateRepository();
void editCurrentFile();
void uneditCurrentFile();
void uneditCurrentRepository();
bool isCommitEditorOpen() const;
Core::IEditor *showOutputInEditor(const QString& title, const QString &output,
int editorType, const QString &source,
QTextCodec *codec);
CvsResponse runCvs(const QString &workingDirectory,
const QStringList &arguments,
int timeOutS,
unsigned flags,
QTextCodec *outputCodec = nullptr) const;
void annotate(const QString &workingDir, const QString &file,
const QString &revision = QString(), int lineNumber= -1);
bool describe(const QString &source, const QString &changeNr, QString *errorMessage);
bool describe(const QString &toplevel, const QString &source, const QString &changeNr, QString *errorMessage);
bool describe(const QString &repository, QList<CvsLogEntry> entries, QString *errorMessage);
void filelog(const QString &workingDir,
const QString &file = QString(),
bool enableAnnotationContextMenu = false);
bool unedit(const QString &topLevel, const QStringList &files);
bool status(const QString &topLevel, const QString &file, const QString &title);
bool update(const QString &topLevel, const QString &file);
bool checkCVSDirectory(const QDir &directory) const;
// Quick check if files are modified
bool diffCheckModified(const QString &topLevel, const QStringList &files, bool *modified);
QString findTopLevelForDirectoryI(const QString &directory) const;
void startCommit(const QString &workingDir, const QString &file = QString());
bool commit(const QString &messageFile, const QStringList &subVersionFileList);
void cleanCommitMessageFile();
CvsSettings m_settings;
CvsClient *m_client = nullptr;
QString m_commitMessageFileName;
QString m_commitRepository;
Core::CommandLocator *m_commandLocator = nullptr;
Utils::ParameterAction *m_addAction = nullptr;
Utils::ParameterAction *m_deleteAction = nullptr;
Utils::ParameterAction *m_revertAction = nullptr;
Utils::ParameterAction *m_editCurrentAction = nullptr;
Utils::ParameterAction *m_uneditCurrentAction = nullptr;
QAction *m_uneditRepositoryAction = nullptr;
Utils::ParameterAction *m_diffProjectAction = nullptr;
Utils::ParameterAction *m_diffCurrentAction = nullptr;
Utils::ParameterAction *m_logProjectAction = nullptr;
QAction *m_logRepositoryAction = nullptr;
QAction *m_commitAllAction = nullptr;
QAction *m_revertRepositoryAction = nullptr;
Utils::ParameterAction *m_commitCurrentAction = nullptr;
Utils::ParameterAction *m_filelogCurrentAction = nullptr;
Utils::ParameterAction *m_annotateCurrentAction = nullptr;
Utils::ParameterAction *m_statusProjectAction = nullptr;
Utils::ParameterAction *m_updateProjectAction = nullptr;
Utils::ParameterAction *m_commitProjectAction = nullptr;
Utils::ParameterAction *m_updateDirectoryAction = nullptr;
Utils::ParameterAction *m_commitDirectoryAction = nullptr;
QAction *m_diffRepositoryAction = nullptr;
QAction *m_updateRepositoryAction = nullptr;
QAction *m_statusRepositoryAction = nullptr;
QAction *m_menuAction = nullptr;
bool m_submitActionTriggered = false;
};
class CvsPlugin final : public ExtensionSystem::IPlugin
{
Q_OBJECT

View File

@@ -25,13 +25,10 @@
#include "settingspage.h"
#include "cvsclient.h"
#include "cvssettings.h"
#include "cvsplugin.h"
#include "ui_settingspage.h"
#include <coreplugin/icore.h>
#include <extensionsystem/pluginmanager.h>
#include <vcsbase/vcsbaseconstants.h>
#include <utils/pathchooser.h>
@@ -48,18 +45,18 @@ class CvsSettingsPageWidget final : public Core::IOptionsPageWidget
Q_DECLARE_TR_FUNCTIONS(Cvs::Internal::SettingsPageWidget)
public:
CvsSettingsPageWidget(Core::IVersionControl *control, CvsSettings *settings);
CvsSettingsPageWidget(const std::function<void()> & onApply, CvsSettings *settings);
void apply() final;
private:
Ui::SettingsPage m_ui;
Core::IVersionControl *m_control;
std::function<void()> m_onApply;
CvsSettings *m_settings;
};
CvsSettingsPageWidget::CvsSettingsPageWidget(Core::IVersionControl *control, CvsSettings *settings)
: m_control(control), m_settings(settings)
CvsSettingsPageWidget::CvsSettingsPageWidget(const std::function<void()> &onApply, CvsSettings *settings)
: m_onApply(onApply), m_settings(settings)
{
m_ui.setupUi(this);
m_ui.commandPathChooser->setExpectedKind(PathChooser::ExistingCommand);
@@ -89,16 +86,16 @@ void CvsSettingsPageWidget::apply()
return;
*m_settings = rc;
m_control->configurationChanged();
m_onApply();
}
CvsSettingsPage::CvsSettingsPage(Core::IVersionControl *control, CvsSettings *settings, QObject *parent) :
CvsSettingsPage::CvsSettingsPage(const std::function<void()> &onApply, CvsSettings *settings, QObject *parent) :
Core::IOptionsPage( parent)
{
setId(VcsBase::Constants::VCS_ID_CVS);
setDisplayName(CvsSettingsPageWidget::tr("CVS"));
setCategory(VcsBase::Constants::VCS_SETTINGS_CATEGORY);
setWidgetCreator([control, settings] { return new CvsSettingsPageWidget(control, settings); });
setWidgetCreator([onApply, settings] { return new CvsSettingsPageWidget(onApply, settings); });
}
} // Internal

View File

@@ -27,8 +27,6 @@
#include <coreplugin/dialogs/ioptionspage.h>
namespace Core { class IVersionControl; }
namespace Cvs {
namespace Internal {
@@ -37,7 +35,7 @@ class CvsSettings;
class CvsSettingsPage final : public Core::IOptionsPage
{
public:
CvsSettingsPage(Core::IVersionControl *control, CvsSettings *settings, QObject *parent);
CvsSettingsPage(const std::function<void()> &onApply, CvsSettings *settings, QObject *parent);
};
} // namespace Cvs