Page MenuHomePhabricator (Chris)

FileHistoryWindow.cpp
No OneTemporary

Authored By
Unknown
Size
3 KB
Referenced Files
None
Subscribers
None

FileHistoryWindow.cpp

#include "FileHistoryWindow.h"
#include "MainWindow.h"
#include "ui_FileHistoryWindow.h"
#include "misc.h"
#include "GitDiff.h"
#include "joinpath.h"
#include "FileDiffWidget.h"
struct FileHistoryWindow::Private {
MainWindow *mainwindow;
GitPtr g;
QString path;
Git::CommitItemList commit_item_list;
FileDiffWidget::DiffData diff_data;
FileDiffWidget::DrawData draw_data;
};
FileDiffWidget::DiffData *FileHistoryWindow::diffdata()
{
return &pv->diff_data;
}
const FileDiffWidget::DiffData *FileHistoryWindow::diffdata() const
{
return &pv->diff_data;
}
FileDiffWidget::DrawData *FileHistoryWindow::drawdata()
{
return &pv->draw_data;
}
const FileDiffWidget::DrawData *FileHistoryWindow::drawdata() const
{
return &pv->draw_data;
}
int FileHistoryWindow::totalTextLines() const
{
return diffdata()->left_lines.size();
}
int FileHistoryWindow::fileviewScrollPos() const
{
return drawdata()->v_scroll_pos;
}
FileHistoryWindow::FileHistoryWindow(QWidget *parent, GitPtr g, const QString &path)
: QDialog(parent)
, ui(new Ui::FileHistoryWindow)
{
ui->setupUi(this);
Qt::WindowFlags flags = windowFlags();
flags &= ~Qt::WindowContextHelpButtonHint;
setWindowFlags(flags);
pv = new Private();
pv->mainwindow = qobject_cast<MainWindow *>(parent);
Q_ASSERT(pv->mainwindow);
ui->splitter->setSizes({100, 100});
ui->widget_diff_view->bind(pv->mainwindow);
Q_ASSERT(g);
Q_ASSERT(g->isValidWorkingCopy());
this->pv->g = g;
this->pv->path = path;
collectFileHistory();
updateDiffView();
}
FileHistoryWindow::~FileHistoryWindow()
{
delete pv;
delete ui;
}
void FileHistoryWindow::collectFileHistory()
{
pv->commit_item_list = pv->g->log_all(pv->path, pv->mainwindow->limitLogCount(), pv->mainwindow->limitLogTime());
QStringList cols = {
tr("Commit"),
tr("Date"),
tr("Author"),
tr("Description"),
};
int n = cols.size();
ui->tableWidget_log->setColumnCount(n);
ui->tableWidget_log->setRowCount(0);
for (int i = 0; i < n; i++) {
QString const &text = cols[i];
QTableWidgetItem *item = new QTableWidgetItem(text);
ui->tableWidget_log->setHorizontalHeaderItem(i, item);
}
int count = pv->commit_item_list.size();
ui->tableWidget_log->setRowCount(count);
for (int row = 0; row < count; row++) {
Git::CommitItem const &commit = pv->commit_item_list[row];
int col = 0;
auto AddColumn = [&](QString const &text){
QTableWidgetItem *item = new QTableWidgetItem(text);
ui->tableWidget_log->setItem(row, col, item);
col++;
};
QString commit_id = pv->mainwindow->abbrevCommitID(commit);
QString datetime = misc::makeDateTimeString(commit.commit_date);
AddColumn(commit_id);
AddColumn(datetime);
AddColumn(commit.author);
AddColumn(commit.message);
ui->tableWidget_log->setRowHeight(row, 24);
}
ui->tableWidget_log->resizeColumnsToContents();
ui->tableWidget_log->horizontalHeader()->setStretchLastSection(false);
ui->tableWidget_log->horizontalHeader()->setStretchLastSection(true);
ui->tableWidget_log->setFocus();
ui->tableWidget_log->setCurrentCell(0, 0);
}
void FileHistoryWindow::updateDiffView()
{
ui->widget_diff_view->clearDiffView();
int row = ui->tableWidget_log->currentRow();
if (row >= 0 && row + 1 < (int)pv->commit_item_list.size()) {
Git::CommitItem const &commit_left = pv->commit_item_list[row + 1]; // older
Git::CommitItem const &commit_right = pv->commit_item_list[row]; // newer
QString id_left = GitDiff().findFileID(pv->g, commit_left.commit_id, pv->path);
QString id_right = GitDiff().findFileID(pv->g, commit_right.commit_id, pv->path);
ui->widget_diff_view->updateDiffView(id_left, id_right);
}
}
void FileHistoryWindow::on_tableWidget_log_currentItemChanged(QTableWidgetItem * /*current*/, QTableWidgetItem * /*previous*/)
{
updateDiffView();
}

File Metadata

Mime Type
text/x-c
Expires
Sun, Nov 15, 4:37 AM (1 d, 21 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
152067
Default Alt Text
FileHistoryWindow.cpp (3 KB)

Event Timeline