Guitar
CommitLogTableWidget.h
Go to the documentation of this file.
1 #ifndef COMMITLOGTABLEWIDGET_H
2 #define COMMITLOGTABLEWIDGET_H
3 
4 #include "Git.h"
5 
6 
7 #include "RepositoryTreeWidget.h"
8 
9 #include <QTableWidget>
10 
11 class MainWindow;
13 
14 struct CommitRecord {
15  bool bold = false;
16  QString commit_id;
17  QString datetime;
18  QString author;
19  QString message;
20  QString tooltip;
21 };
22 Q_DECLARE_METATYPE(CommitRecord)
23 
24 class CommitLogTableModel : public QAbstractItemModel {
26  friend class CommitLogTableWidget;
27 public:
28  static QString escapeTooltipText(QString tooltip);
29 private:
30  std::vector<CommitRecord> records_;
31  std::vector<size_t> index_;
32  QString filter_text_;
34  CommitLogTableWidget *tablewidget();
35  CommitRecord const &record(int row) const;
36  CommitRecord const &record(QModelIndex const &index) const;
37  int rowcount() const;
38  void privateSetFilter(const QString &text);
39 public:
40  CommitLogTableModel(QObject *parent = nullptr)
41  : QAbstractItemModel(parent)
42  {
43  }
44  QModelIndex index(int row, int column, const QModelIndex &parent) const;
45  QModelIndex parent(const QModelIndex &child) const;
46  int rowCount(const QModelIndex &parent) const;
47  int columnCount(const QModelIndex &parent) const;
48  QVariant headerData(int section, Qt::Orientation orientation, int role) const;
49  QVariant data(const QModelIndex &index, int role) const;
50  void setRecords(std::vector<CommitRecord> &&records);
51  bool setFilter(const QString &text);
52  bool isFiltered() const
53  {
54  return !filter_text_.isEmpty();
55  }
56  int unfilteredIndex(int i) const;
57 };
58 
62 class CommitLogTableWidget : public QTableView {
63  Q_OBJECT
65 private:
66  MainWindow *mainwindow_ = nullptr;
68  MainWindow const *mainwindow() const { return mainwindow_; }
69  CommitLogTableModel *model_ = nullptr; // TODO:
70  // MigemoFilter filter_;
71  const Git::CommitItem &commitItem(int row) const;
72 public:
73  explicit CommitLogTableWidget(QWidget *parent = nullptr);
74  void setup(MainWindow *frame);
75  void setRecords(std::vector<CommitRecord> &&records);
76 protected:
77  void paintEvent(QPaintEvent *) override;
78  void resizeEvent(QResizeEvent *e) override;
79 protected slots:
80  void verticalScrollbarValueChanged(int value) override;
81  void currentChanged(const QModelIndex &current, const QModelIndex &previous);
82 public:
83  int rowCount() const;
84  int currentRow() const;
85  void setCurrentCell(int row, int col);
86  int actualLogIndex() const;
87  QRect visualItemRect(int row, int col);
88  void setFilter(const QString &filter);
89  void adjustAppearance();
90  void updateViewport();
91  int unfilteredIndex(int i) const
92  {
93  return model_->unfilteredIndex(i);
94  }
95  void setCurrentRow(int row);
96 signals:
97  void currentRowChanged(int row);
98 };
99 
100 #endif // COMMITLOGTABLEWIDGET_H
Definition: CommitLogTableWidget.h:24
QString filter_text_
Definition: CommitLogTableWidget.h:32
MigemoFilter filter_
Definition: CommitLogTableWidget.h:33
int unfilteredIndex(int i) const
Definition: CommitLogTableWidget.cpp:136
std::vector< size_t > index_
Definition: CommitLogTableWidget.h:31
CommitLogTableModel(QObject *parent=nullptr)
Definition: CommitLogTableWidget.h:40
std::vector< CommitRecord > records_
Definition: CommitLogTableWidget.h:30
bool isFiltered() const
Definition: CommitLogTableWidget.h:52
コミットログを描画するためのdelegate
Definition: CommitLogTableWidget.cpp:152
コミットログテーブルウィジェット
Definition: CommitLogTableWidget.h:62
int unfilteredIndex(int i) const
Definition: CommitLogTableWidget.h:91
void resizeEvent(QResizeEvent *e) override
Definition: CommitLogTableWidget.cpp:538
QRect visualItemRect(int row, int col)
Definition: CommitLogTableWidget.cpp:396
MainWindow const * mainwindow() const
Definition: CommitLogTableWidget.h:68
void updateViewport()
Definition: CommitLogTableWidget.cpp:581
void setup(MainWindow *frame)
Definition: CommitLogTableWidget.cpp:350
int currentRow() const
Definition: CommitLogTableWidget.cpp:561
CommitLogTableWidget(QWidget *parent=nullptr)
Definition: CommitLogTableWidget.cpp:342
CommitLogTableModel * model_
Definition: CommitLogTableWidget.h:69
void setFilter(const QString &filter)
Definition: CommitLogTableWidget.cpp:593
void paintEvent(QPaintEvent *) override
Definition: CommitLogTableWidget.cpp:402
MainWindow * mainwindow()
Definition: CommitLogTableWidget.h:67
MainWindow * mainwindow_
Definition: CommitLogTableWidget.h:66
void adjustAppearance()
Definition: CommitLogTableWidget.cpp:355
void setCurrentCell(int row, int col)
Definition: CommitLogTableWidget.cpp:575
void setRecords(std::vector< CommitRecord > &&records)
Definition: CommitLogTableWidget.cpp:370
void currentChanged(const QModelIndex &current, const QModelIndex &previous)
Definition: CommitLogTableWidget.cpp:550
int rowCount() const
Definition: CommitLogTableWidget.cpp:556
void setCurrentRow(int row)
Definition: CommitLogTableWidget.cpp:587
const Git::CommitItem & commitItem(int row) const
Definition: CommitLogTableWidget.cpp:337
void verticalScrollbarValueChanged(int value) override
Definition: CommitLogTableWidget.cpp:544
int actualLogIndex() const
Definition: CommitLogTableWidget.cpp:566
void currentRowChanged(int row)
Definition: MainWindow.h:85
Definition: CommitLogTableWidget.h:14
QString author
Definition: CommitLogTableWidget.h:18
QString commit_id
Definition: CommitLogTableWidget.h:16
QString tooltip
Definition: CommitLogTableWidget.h:20
bool bold
Definition: CommitLogTableWidget.h:15
QString message
Definition: CommitLogTableWidget.h:19
QString datetime
Definition: CommitLogTableWidget.h:17
Definition: Git.h:116
Definition: IncrementalSearch.h:34