From 325c0beda530b2f7f04ba34f22fb2f8ccabb52e7 Mon Sep 17 00:00:00 2001
From: Orgad Shaneh <orgad.shaneh@audiocodes.com>
Date: Sun, 5 May 2013 22:28:07 +0300
Subject: [PATCH] Git: Show commit on double-click in fixup editor

Change-Id: I8cb08b0fcba3ddac7223b39b3762ff71e8d61f8c
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
---
 src/plugins/git/gitplugin.cpp             |  1 +
 src/plugins/git/gitsubmiteditor.cpp       |  7 +++++++
 src/plugins/git/gitsubmiteditor.h         |  2 ++
 src/plugins/git/gitsubmiteditorwidget.cpp |  1 +
 src/plugins/git/gitsubmiteditorwidget.h   |  3 +++
 src/plugins/git/logchangedialog.cpp       | 10 ++++++++++
 src/plugins/git/logchangedialog.h         |  6 ++++++
 7 files changed, 30 insertions(+)

diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 0422da7f1c3..c41715b5013 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -965,6 +965,7 @@ Core::IEditor *GitPlugin::openSubmitEditor(const QString &fileName, const Commit
     submitEditor->setDisplayName(title);
     connect(submitEditor, SIGNAL(diff(QStringList,QStringList)), this, SLOT(submitEditorDiff(QStringList,QStringList)));
     connect(submitEditor, SIGNAL(merge(QStringList)), this, SLOT(submitEditorMerge(QStringList)));
+    connect(submitEditor, SIGNAL(show(QString,QString)), m_gitClient, SLOT(show(QString,QString)));
     return editor;
 }
 
diff --git a/src/plugins/git/gitsubmiteditor.cpp b/src/plugins/git/gitsubmiteditor.cpp
index d2f6ef32016..c22de6c11da 100644
--- a/src/plugins/git/gitsubmiteditor.cpp
+++ b/src/plugins/git/gitsubmiteditor.cpp
@@ -89,6 +89,7 @@ GitSubmitEditor::GitSubmitEditor(const VcsBase::VcsBaseSubmitEditorParameters *p
     m_forceClose(false)
 {
     connect(this, SIGNAL(diffSelectedFiles(QList<int>)), this, SLOT(slotDiffSelected(QList<int>)));
+    connect(submitEditorWidget(), SIGNAL(show(QString)), this, SLOT(showCommit(QString)));
 }
 
 GitSubmitEditorWidget *GitSubmitEditor::submitEditorWidget()
@@ -160,6 +161,12 @@ void GitSubmitEditor::slotDiffSelected(const QList<int> &rows)
         emit merge(unmergedFiles);
 }
 
+void GitSubmitEditor::showCommit(const QString &commit)
+{
+    if (!m_workingDirectory.isEmpty())
+        emit show(m_workingDirectory, commit);
+}
+
 void GitSubmitEditor::updateFileModel()
 {
     if (m_workingDirectory.isEmpty())
diff --git a/src/plugins/git/gitsubmiteditor.h b/src/plugins/git/gitsubmiteditor.h
index 9791be259e6..da099f2d23e 100644
--- a/src/plugins/git/gitsubmiteditor.h
+++ b/src/plugins/git/gitsubmiteditor.h
@@ -62,6 +62,7 @@ public:
 signals:
     void diff(const QStringList &unstagedFiles, const QStringList &stagedFiles);
     void merge(const QStringList &unmergedFiles);
+    void show(const QString &workingDirectory, const QString &commit);
 
 protected:
     QByteArray fileContents() const;
@@ -69,6 +70,7 @@ protected:
 
 private slots:
     void slotDiffSelected(const QList<int> &rows);
+    void showCommit(const QString &commit);
 
 private:
     inline GitSubmitEditorWidget *submitEditorWidget();
diff --git a/src/plugins/git/gitsubmiteditorwidget.cpp b/src/plugins/git/gitsubmiteditorwidget.cpp
index a8fc55d02dc..ab7240fa3d6 100644
--- a/src/plugins/git/gitsubmiteditorwidget.cpp
+++ b/src/plugins/git/gitsubmiteditorwidget.cpp
@@ -169,6 +169,7 @@ void GitSubmitEditorWidget::initialize(CommitType commitType, const QString &rep
         logChangeGroupBox->setLayout(logChangeLayout);
         m_logChangeWidget = new LogChangeWidget;
         m_logChangeWidget->init(repository, QString(), false);
+        connect(m_logChangeWidget, SIGNAL(doubleClicked(QString)), this, SIGNAL(show(QString)));
         logChangeLayout->addWidget(m_logChangeWidget);
         insertTopWidget(logChangeGroupBox);
         m_gitSubmitPanelUi.editGroup->hide();
diff --git a/src/plugins/git/gitsubmiteditorwidget.h b/src/plugins/git/gitsubmiteditorwidget.h
index 41161f0b8a9..62bc8eda734 100644
--- a/src/plugins/git/gitsubmiteditorwidget.h
+++ b/src/plugins/git/gitsubmiteditorwidget.h
@@ -72,6 +72,9 @@ protected:
     bool canSubmit() const;
     QString cleanupDescription(const QString &) const;
 
+signals:
+    void show(const QString &commit);
+
 private slots:
     void authorInformationChanged();
 
diff --git a/src/plugins/git/logchangedialog.cpp b/src/plugins/git/logchangedialog.cpp
index 8621bc24d92..2bf627be360 100644
--- a/src/plugins/git/logchangedialog.cpp
+++ b/src/plugins/git/logchangedialog.cpp
@@ -62,6 +62,7 @@ LogChangeWidget::LogChangeWidget(QWidget *parent)
     setUniformRowHeights(true);
     setRootIsDecorated(false);
     setSelectionBehavior(QAbstractItemView::SelectRows);
+    connect(this, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(emitDoubleClicked(QModelIndex)));
 }
 
 bool LogChangeWidget::init(const QString &repository, const QString &commit, bool includeRemote)
@@ -89,6 +90,15 @@ int LogChangeWidget::commitIndex() const
     return -1;
 }
 
+void LogChangeWidget::emitDoubleClicked(const QModelIndex &index)
+{
+    if (index.isValid()) {
+        QString commit = index.sibling(index.row(), Sha1Column).data().toString();
+        if (!commit.isEmpty())
+            emit doubleClicked(commit);
+    }
+}
+
 bool LogChangeWidget::populateLog(const QString &repository, const QString &commit, bool includeRemote)
 {
     if (const int rowCount = m_model->rowCount())
diff --git a/src/plugins/git/logchangedialog.h b/src/plugins/git/logchangedialog.h
index 83f31adcd43..4e298519ac4 100644
--- a/src/plugins/git/logchangedialog.h
+++ b/src/plugins/git/logchangedialog.h
@@ -57,6 +57,12 @@ public:
     QString commit() const;
     int commitIndex() const;
 
+signals:
+    void doubleClicked(const QString &commit);
+
+private slots:
+    void emitDoubleClicked(const QModelIndex &index);
+
 private:
     bool populateLog(const QString &repository, const QString &commit, bool includeRemote);
     const QStandardItem *currentItem(int column = 0) const;
-- 
GitLab