Skip to content

Commit

Permalink
francescmm/GitQlientPlugin#6 Add edit file option
Browse files Browse the repository at this point in the history
This option will work in QtCreator for now. The plan would be to extend the functionality in GitQlient in the future.
  • Loading branch information
francescmm committed May 3, 2020
1 parent 03052dd commit a9887bf
Show file tree
Hide file tree
Showing 25 changed files with 137 additions and 17 deletions.
37 changes: 21 additions & 16 deletions src/aux_widgets/ConflictButton.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,31 +75,36 @@ void ConflictButton::openFileEditor()
{
const auto fullPath = QString(mGit->getWorkingDir() + "/" + mFileName);

// get external diff viewer command
GitQlientSettings settings;
const auto editor
= settings.value(GitQlientSettings::ExternalEditorKey, GitQlientSettings::ExternalEditorValue).toString();

auto processCmd = editor;
if (!settings.value("isGitQlient", false).toBool())
emit signalEditFile(fullPath, 0, 0);
else
{
const auto editor
= settings.value(GitQlientSettings::ExternalEditorKey, GitQlientSettings::ExternalEditorValue).toString();

if (!editor.contains("%1"))
processCmd.append(" %1");
auto processCmd = editor;

processCmd = processCmd.arg(fullPath);
if (!editor.contains("%1"))
processCmd.append(" %1");

const auto externalEditor = new QProcess();
connect(externalEditor, SIGNAL(finished(int, QProcess::ExitStatus)), externalEditor, SLOT(deleteLater()));
processCmd = processCmd.arg(fullPath);

externalEditor->setWorkingDirectory(mGit->getWorkingDir());
const auto externalEditor = new QProcess();
connect(externalEditor, SIGNAL(finished(int, QProcess::ExitStatus)), externalEditor, SLOT(deleteLater()));

externalEditor->start(processCmd);
externalEditor->setWorkingDirectory(mGit->getWorkingDir());

if (!externalEditor->waitForStarted(10000))
{
QString text = QString("Cannot start external editor: %1.").arg(editor);
externalEditor->start(processCmd);

if (!externalEditor->waitForStarted(10000))
{
QString text = QString("Cannot start external editor: %1.").arg(editor);

QLog_Error("UI", text);
QLog_Error("UI", text);

delete externalEditor;
delete externalEditor;
}
}
}
8 changes: 8 additions & 0 deletions src/aux_widgets/ConflictButton.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,14 @@ class ConflictButton : public QFrame
*/
void updateRequested();

/**
* @brief signalEditFile Signal triggered when the user wants to edit a file and is running GitQlient from QtCreator.
* @param fileName The file name
* @param line The line
* @param column The column
*/
void signalEditFile(const QString &fileName, int line, int column);

public:
/**
* @brief Default constructor.
Expand Down
1 change: 1 addition & 0 deletions src/big_widgets/DiffWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ DiffWidget::DiffWidget(const QSharedPointer<GitBase> git, QSharedPointer<Revisio

connect(mCommitDiffWidget, &CommitDiffWidget::signalOpenFileCommit, this, &DiffWidget::loadFileDiff);
connect(mCommitDiffWidget, &CommitDiffWidget::signalShowFileHistory, this, &DiffWidget::signalShowFileHistory);
connect(mCommitDiffWidget, &CommitDiffWidget::signalEditFile, this, &DiffWidget::signalEditFile);
}

DiffWidget::~DiffWidget()
Expand Down
8 changes: 8 additions & 0 deletions src/big_widgets/DiffWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,14 @@ class DiffWidget : public QFrame
*/
void signalDiffEmpty();

/**
* @brief signalEditFile Signal triggered when the user wants to edit a file and is running GitQlient from QtCreator.
* @param fileName The file name
* @param line The line
* @param column The column
*/
void signalEditFile(const QString &fileName, int line, int column);

public:
/*!
\brief Default constructor.
Expand Down
1 change: 1 addition & 0 deletions src/big_widgets/GitQlient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ void GitQlient::addRepoTab(const QString &repoPath)
if (!mCurrentRepos.contains(repoPath))
{
const auto newRepo = new GitQlientRepo(repoPath);
connect(newRepo, &GitQlientRepo::signalEditFile, this, &GitQlient::signalEditDocument);
connect(newRepo, &GitQlientRepo::signalOpenSubmodule, this, [this](const QString &repoName) {
const auto currentDir = dynamic_cast<GitQlientRepo *>(sender())->currentDir();

Expand Down
3 changes: 3 additions & 0 deletions src/big_widgets/GitQlient.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ class ConfigWidget;
class GitQlient : public QWidget
{
Q_OBJECT
signals:
void signalEditDocument(const QString &fileName, int line, int column);

public:
/*!
\brief Default constructor. Creates an empty GitQlient instance.
Expand Down
3 changes: 3 additions & 0 deletions src/big_widgets/GitQlientRepo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ GitQlientRepo::GitQlientRepo(const QString &repoPath, QWidget *parent)
connect(mControls, &Controls::signalPullConflict, mControls, &Controls::activateMergeWarning);
connect(mControls, &Controls::signalPullConflict, this, &GitQlientRepo::showPullConflict);

connect(mHistoryWidget, &HistoryWidget::signalEditFile, this, &GitQlientRepo::signalEditFile);
connect(mHistoryWidget, &HistoryWidget::signalAllBranchesActive, mGitLoader.data(), &GitRepoLoader::setShowAll);
connect(mHistoryWidget, &HistoryWidget::signalAllBranchesActive, this, &GitQlientRepo::updateCache);
connect(mHistoryWidget, &HistoryWidget::signalUpdateCache, this, &GitQlientRepo::updateCache);
Expand All @@ -101,13 +102,15 @@ GitQlientRepo::GitQlientRepo(const QString &repoPath, QWidget *parent)
connect(mDiffWidget, &DiffWidget::signalShowFileHistory, this, &GitQlientRepo::showFileHistory);
connect(mDiffWidget, &DiffWidget::signalDiffEmpty, mControls, &Controls::disableDiff);
connect(mDiffWidget, &DiffWidget::signalDiffEmpty, this, &GitQlientRepo::showPreviousView);
connect(mDiffWidget, &DiffWidget::signalEditFile, this, &GitQlientRepo::signalEditFile);

connect(mBlameWidget, &BlameWidget::showFileDiff, this, &GitQlientRepo::loadFileDiff);
connect(mBlameWidget, &BlameWidget::signalOpenDiff, this, &GitQlientRepo::openCommitCompareDiff);

connect(mMergeWidget, &MergeWidget::signalMergeFinished, this, &GitQlientRepo::showHistoryView);
connect(mMergeWidget, &MergeWidget::signalMergeFinished, this, &GitQlientRepo::updateCache);
connect(mMergeWidget, &MergeWidget::signalMergeFinished, mControls, &Controls::disableMergeWarning);
connect(mMergeWidget, &MergeWidget::signalEditFile, this, &GitQlientRepo::signalEditFile);

connect(mGitLoader.data(), &GitRepoLoader::signalLoadingStarted, this, &GitQlientRepo::updateProgressDialog,
Qt::DirectConnection);
Expand Down
7 changes: 7 additions & 0 deletions src/big_widgets/GitQlientRepo.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,13 @@ class GitQlientRepo : public QFrame
\param submoduleName The submodule name.
*/
void signalOpenSubmodule(const QString &submoduleName);
/**
* @brief signalEditFile Signal triggered when the user wants to edit a file and is running GitQlient from QtCreator.
* @param fileName The file name
* @param line The line
* @param column The column
*/
void signalEditFile(const QString &fileName, int line, int column);

public:
/*!
Expand Down
2 changes: 2 additions & 0 deletions src/big_widgets/HistoryWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ HistoryWidget::HistoryWidget(const QSharedPointer<RevisionsCache> &cache, const
mCommitStackedWidget->addWidget(mCommitWidget);
mCommitStackedWidget->setFixedWidth(310);

connect(mCommitWidget, &WorkInProgressWidget::signalEditFile, this, &HistoryWidget::signalEditFile);
connect(mCommitWidget, &WorkInProgressWidget::signalShowDiff, this, &HistoryWidget::signalShowDiff);
connect(mCommitWidget, &WorkInProgressWidget::signalChangesCommitted, this, &HistoryWidget::signalChangesCommitted);
connect(mCommitWidget, &WorkInProgressWidget::signalCheckoutPerformed, this, &HistoryWidget::signalUpdateUi);
Expand All @@ -55,6 +56,7 @@ HistoryWidget::HistoryWidget(const QSharedPointer<RevisionsCache> &cache, const

connect(mRevisionWidget, &CommitInfoWidget::signalOpenFileCommit, this, &HistoryWidget::signalShowDiff);
connect(mRevisionWidget, &CommitInfoWidget::signalShowFileHistory, this, &HistoryWidget::signalShowFileHistory);
connect(mRevisionWidget, &CommitInfoWidget::signalEditFile, this, &HistoryWidget::signalEditFile);

mSearchInput->setPlaceholderText(tr("Press Enter to search by SHA or log message..."));
connect(mSearchInput, &QLineEdit::returnPressed, this, &HistoryWidget::search);
Expand Down
9 changes: 9 additions & 0 deletions src/big_widgets/HistoryWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,15 @@ class HistoryWidget : public QFrame
\param fileName The file name for the diff.
*/
void signalShowDiff(const QString &sha, const QString &parentSha, const QString &fileName);

/**
* @brief signalEditFile Signal triggered when the user wants to edit a file and is running GitQlient from QtCreator.
* @param fileName The file name
* @param line The line
* @param column The column
*/
void signalEditFile(const QString &fileName, int line, int column);

/*!
\brief Signal triggered when changes are commited.
Expand Down
1 change: 1 addition & 0 deletions src/big_widgets/MergeWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ void MergeWidget::fillButtonFileList(const RevisionFiles &files)
connect(fileBtn, &ConflictButton::toggled, this, &MergeWidget::changeDiffView);
connect(fileBtn, &ConflictButton::updateRequested, this, &MergeWidget::onUpdateRequested);
connect(fileBtn, &ConflictButton::resolved, this, &MergeWidget::onConflictResolved);
connect(fileBtn, &ConflictButton::signalEditFile, this, &MergeWidget::signalEditFile);

const auto wip = mGitQlientCache->getCommitInfo(CommitInfo::ZERO_SHA);
const auto fileDiffWidget = new FileDiffWidget(mGit);
Expand Down
8 changes: 8 additions & 0 deletions src/big_widgets/MergeWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,14 @@ class MergeWidget : public QFrame
*/
void signalMergeFinished();

/**
* @brief signalEditFile Signal triggered when the user wants to edit a file and is running GitQlient from QtCreator.
* @param fileName The file name
* @param line The line
* @param column The column
*/
void signalEditFile(const QString &fileName, int line, int column);

public:
enum class ConflictReason
{
Expand Down
1 change: 1 addition & 0 deletions src/commits/CommitInfoWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ CommitInfoWidget::CommitInfoWidget(const QSharedPointer<RevisionsCache> &cache,
connect(fileListWidget, &FileListWidget::itemDoubleClicked, this,
[this](QListWidgetItem *item) { emit signalOpenFileCommit(mCurrentSha, mParentSha, item->text()); });
connect(fileListWidget, &FileListWidget::signalShowFileHistory, this, &CommitInfoWidget::signalShowFileHistory);
connect(fileListWidget, &FileListWidget::signalEditFile, this, &CommitInfoWidget::signalEditFile);
}

void CommitInfoWidget::configure(const QString &sha)
Expand Down
8 changes: 8 additions & 0 deletions src/commits/CommitInfoWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,14 @@ class CommitInfoWidget : public QWidget
void signalOpenFileContextMenu(const QString &, int);
void signalShowFileHistory(const QString &fileName);

/**
* @brief signalEditFile Signal triggered when the user wants to edit a file and is running GitQlient from QtCreator.
* @param fileName The file name
* @param line The line
* @param column The column
*/
void signalEditFile(const QString &fileName, int line, int column);

public:
explicit CommitInfoWidget(const QSharedPointer<RevisionsCache> &cache, const QSharedPointer<GitBase> &git,
QWidget *parent = nullptr);
Expand Down
10 changes: 9 additions & 1 deletion src/commits/FileContextMenu.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
#include "FileContextMenu.h"

#include <GitQlientSettings.h>

#include <QApplication>
#include <QClipboard>
#include <QSettings>

FileContextMenu::FileContextMenu(const QString &file, QWidget *parent)
: QMenu(parent)
Expand All @@ -19,6 +20,13 @@ FileContextMenu::FileContextMenu(const QString &file, QWidget *parent)

addSeparator();

GitQlientSettings settings;

if (!settings.value("isGitQlient", false).toBool())
connect(addAction("Edit file"), &QAction::triggered, this, [this]() { emit signalEditFile(); });

addSeparator();

const auto copyPathAction = addAction(tr("Copy path"));
connect(copyPathAction, &QAction::triggered, this, [file]() {
QSettings settings;
Expand Down
5 changes: 5 additions & 0 deletions src/commits/FileContextMenu.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ class FileContextMenu : public QMenu
void signalOpenFileDiff();
void signalShowFileHistory();

/**
* @brief signalEditFile Signal triggered when the user wants to edit a file and is running GitQlient from QtCreator.
*/
void signalEditFile();

public:
explicit FileContextMenu(const QString &file, QWidget *parent = nullptr);
};
3 changes: 3 additions & 0 deletions src/commits/FileListWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <GitHistory.h>
#include <GitQlientStyles.h>
#include <RevisionsCache.h>
#include <GitBase.h>

#include <QApplication>
#include <QDrag>
Expand Down Expand Up @@ -52,6 +53,8 @@ void FileListWidget::showContextMenu(const QPoint &pos)
[this, fileName]() { emit signalShowFileHistory(fileName); });
connect(menu, &FileContextMenu::signalOpenFileDiff, this,
[this, item] { emit QListWidget::itemDoubleClicked(item); });
connect(menu, &FileContextMenu::signalEditFile, this,
[this, fileName]() { emit signalEditFile(mGit->getWorkingDir() + "/" + fileName, 0, 0); });
menu->exec(viewport()->mapToGlobal(pos));
}
}
Expand Down
8 changes: 8 additions & 0 deletions src/commits/FileListWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,14 @@ class FileListWidget : public QListWidget
signals:
void signalShowFileHistory(const QString &fileName);

/**
* @brief signalEditFile Signal triggered when the user wants to edit a file and is running GitQlient from QtCreator.
* @param fileName The file name
* @param line The line
* @param column The column
*/
void signalEditFile(const QString &fileName, int line, int column);

public:
explicit FileListWidget(const QSharedPointer<GitBase> &git, QSharedPointer<RevisionsCache> cache,
QWidget *parent = nullptr);
Expand Down
6 changes: 6 additions & 0 deletions src/commits/UnstagedMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include <GitBase.h>
#include <GitSyncProcess.h>
#include <GitLocal.h>
#include <GitQlientSettings.h>

#include <QFile>
#include <QDir>
Expand All @@ -19,6 +20,11 @@ UnstagedMenu::UnstagedMenu(const QSharedPointer<GitBase> &git, const QString &fi
connect(addAction("See changes"), &QAction::triggered, this, [this]() { emit signalShowDiff(mFileName); });
connect(addAction("Blame"), &QAction::triggered, this, [this]() { emit signalShowFileHistory(mFileName); });

GitQlientSettings settings;

if (!settings.value("isGitQlient", false).toBool())
connect(addAction("Edit file"), &QAction::triggered, this, [this]() { emit signalEditFile(); });

addSeparator();

if (hasConflicts)
Expand Down
1 change: 1 addition & 0 deletions src/commits/UnstagedMenu.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class UnstagedMenu : public QMenu
void signalRevertAll();
void signalCheckedOut(bool success);
void signalShowFileHistory(const QString &fileName);
void signalEditFile();
void signalConflictsResolved();
void signalStageFile();

Expand Down
2 changes: 2 additions & 0 deletions src/commits/WorkInProgressWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,8 @@ void WorkInProgressWidget::showUnstagedMenu(const QPoint &pos)
const auto fileName = item->toolTip();
const auto unsolvedConflicts = item->data(GitQlientRole::U_IsConflict).toBool();
const auto contextMenu = new UnstagedMenu(mGit, fileName, unsolvedConflicts, this);
connect(contextMenu, &UnstagedMenu::signalEditFile, this,
[this, fileName]() { emit signalEditFile(mGit->getWorkingDir() + "/" + fileName, 0, 0); });
connect(contextMenu, &UnstagedMenu::signalShowDiff, this, &WorkInProgressWidget::requestDiff);
connect(contextMenu, &UnstagedMenu::signalCommitAll, this, &WorkInProgressWidget::addAllFilesToCommitList);
connect(contextMenu, &UnstagedMenu::signalRevertAll, this, &WorkInProgressWidget::revertAllChanges);
Expand Down
8 changes: 8 additions & 0 deletions src/commits/WorkInProgressWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,14 @@ class WorkInProgressWidget : public QWidget
void signalUpdateWip();
void signalCancelAmend(const QString &commitSha);

/**
* @brief signalEditFile Signal triggered when the user wants to edit a file and is running GitQlient from QtCreator.
* @param fileName The file name
* @param line The line
* @param column The column
*/
void signalEditFile(const QString &fileName, int line, int column);

public:
explicit WorkInProgressWidget(const QSharedPointer<RevisionsCache> &cache, const QSharedPointer<GitBase> &git,
QWidget *parent = nullptr);
Expand Down
1 change: 1 addition & 0 deletions src/diff/CommitDiffWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ CommitDiffWidget::CommitDiffWidget(QSharedPointer<GitBase> git, QSharedPointer<R
connect(fileListWidget, &FileListWidget::itemDoubleClicked, this,
[this](QListWidgetItem *item) { emit signalOpenFileCommit(mFirstShaStr, mSecondShaStr, item->text()); });
connect(fileListWidget, &FileListWidget::signalShowFileHistory, this, &CommitDiffWidget::signalShowFileHistory);
connect(fileListWidget, &FileListWidget::signalEditFile, this, &CommitDiffWidget::signalEditFile);
}

void CommitDiffWidget::configure(const QString &firstSha, const QString &secondSha)
Expand Down
9 changes: 9 additions & 0 deletions src/diff/CommitDiffWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,22 @@ class CommitDiffWidget : public QFrame
\param file The file to show the diff.
*/
void signalOpenFileCommit(const QString &currentSha, const QString &previousSha, const QString &file);

/*!
\brief Signal triggered when the user whats to see the blame history for a given file.
\param fileName The file name to blame.
*/
void signalShowFileHistory(const QString &fileName);

/**
* @brief signalEditFile Signal triggered when the user wants to edit a file and is running GitQlient from QtCreator.
* @param fileName The file name
* @param line The line
* @param column The column
*/
void signalEditFile(const QString &fileName, int line, int column);

public:
/*!
\brief Default constructor.
Expand Down
4 changes: 4 additions & 0 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#include <GitQlient.h>
#include <QLogger.h>
#include <GitQlientSettings.h>

using namespace QLogger;

Expand All @@ -27,6 +28,9 @@ int main(int argc, char *argv[])
QFontDatabase::addApplicationFont(":/Ubuntu");
QFontDatabase::addApplicationFont(":/UbuntuMono");

GitQlientSettings settings;
settings.setValue("isGitQlient", true);

GitQlient mainWin(arguments);

mainWin.showMaximized();
Expand Down

0 comments on commit a9887bf

Please sign in to comment.