1#include <CommitInfo.h>
2#include <CommitInfoPanel.h>
3#include <CommitInfoWidget.h>
4#include <FileListWidget.h>
5#include <GitCache.h>
6
7#include <QDateTime>
8#include <QLabel>
9#include <QVBoxLayout>
10
11#include <QLogger.h>
12
13using namespace QLogger;
14
15CommitInfoWidget::CommitInfoWidget(const QSharedPointer<GitCache> &cache, const QSharedPointer<GitBase> &git,
16 QWidget *parent)
17 : QFrame(parent)
18 , mCache(cache)
19 , mGit(git)
20 , mInfoPanel(new CommitInfoPanel())
21 , mFileListWidget(new FileListWidget(mGit, mCache))
22{
23 setAttribute(Qt::WA_DeleteOnClose);
24
25 mFileListWidget->setObjectName("fileListWidget");
26
27 const auto wipSeparator = new QFrame();
28 wipSeparator->setObjectName("separator");
29
30 const auto mainLayout = new QGridLayout(this);
31 mainLayout->setSpacing(0);
32 mainLayout->setContentsMargins(0, 0, 0, 0);
33 mainLayout->addWidget(mInfoPanel, 0, 0);
34 mainLayout->addWidget(wipSeparator, 1, 0);
35 mainLayout->addWidget(mFileListWidget, 2, 0);
36 mainLayout->setRowStretch(1, 0);
37 mainLayout->setRowStretch(2, 0);
38 mainLayout->setRowStretch(2, 1);
39
40 connect(mFileListWidget, &FileListWidget::itemDoubleClicked, this,
41 [this](QListWidgetItem *item) { emit signalOpenFileCommit(mCurrentSha, mParentSha, item->text(), false); });
42 connect(mFileListWidget, &FileListWidget::signalShowFileHistory, this, &CommitInfoWidget::signalShowFileHistory);
43 connect(mFileListWidget, &FileListWidget::signalEditFile, this, &CommitInfoWidget::signalEditFile);
44}
45
46void CommitInfoWidget::configure(const QString &sha)
47{
48 if (sha == mCurrentSha)
49 return;
50
51 clear();
52
53 mCurrentSha = sha;
54 mParentSha = sha;
55
56 if (sha != CommitInfo::ZERO_SHA && !sha.isEmpty())
57 {
58 const auto commit = mCache->commitInfo(sha);
59
60 if (!commit.sha.isEmpty())
61 {
62 QLog_Info("UI", QString("Loading information of the commit {%1}").arg(sha));
63 mCurrentSha = commit.sha;
64 mParentSha = commit.firstParent();
65
66 mInfoPanel->configure(commit);
67
68 mFileListWidget->insertFiles(mCurrentSha, mParentSha);
69 }
70 }
71}
72
73QString CommitInfoWidget::getCurrentCommitSha() const
74{
75 return mCurrentSha;
76}
77
78void CommitInfoWidget::clear()
79{
80 mCurrentSha = QString();
81 mParentSha = QString();
82
83 mFileListWidget->clear();
84}
85