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 #include <memory>
7 #include "RepositoryTreeWidget.h"
8 #include "IncrementalSearch.h"
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_;
33  std::shared_ptr<MeCaFilter> meca_filter_;
34  std::shared_ptr<MigemoFilter> migemo_filter_;
36  {
37  return meca_filter_.get();
38  }
39  CommitLogTableWidget *tablewidget();
40  CommitRecord const &record(int row) const;
41  CommitRecord const &record(QModelIndex const &index) const;
42  int rowcount() const;
43  void privateSetFilter(const QString &text);
44 public:
45  CommitLogTableModel(QObject *parent = nullptr)
46  : QAbstractItemModel(parent)
47  {
48  meca_filter_ = std::make_shared<MeCaFilter>();
49  migemo_filter_ = std::make_shared<MigemoFilter>();
50  }
51  QModelIndex index(int row, int column, const QModelIndex &parent) const;
52  QModelIndex parent(const QModelIndex &child) const;
53  int rowCount(const QModelIndex &parent) const;
54  int columnCount(const QModelIndex &parent) const;
55  QVariant headerData(int section, Qt::Orientation orientation, int role) const;
56  QVariant data(const QModelIndex &index, int role) const;
57  void setRecords(std::vector<CommitRecord> &&records);
58  bool setFilter(const QString &text);
59  bool isFiltered() const
60  {
61  return !filter_text_.isEmpty();
62  }
63  int unfilteredIndex(int i) const;
64 };
65 
69 class CommitLogTableWidget : public QTableView {
70  Q_OBJECT
72 private:
73  MainWindow *mainwindow_ = nullptr;
75  MainWindow const *mainwindow() const { return mainwindow_; }
76  CommitLogTableModel *model_ = nullptr; // TODO:
77  // MigemoFilter filter_;
78  const GitCommitItem &commitItem(int row) const;
79 public:
80  explicit CommitLogTableWidget(QWidget *parent = nullptr);
81  void setup(MainWindow *frame);
82  void setRecords(std::vector<CommitRecord> &&records);
83 protected:
84  void paintEvent(QPaintEvent *) override;
85  void resizeEvent(QResizeEvent *e) override;
86 protected slots:
87  void verticalScrollbarValueChanged(int value) override;
88  void currentChanged(const QModelIndex &current, const QModelIndex &previous);
89 public:
90  int rowCount() const;
91  int currentRow() const;
92  void setCurrentCell(int row, int col);
93  int actualLogIndex() const;
94  QRect visualItemRect(int row, int col);
95  void setFilter(const QString &filter);
96  void adjustAppearance();
97  void updateViewport();
98  int unfilteredIndex(int i) const
99  {
100  return model_->unfilteredIndex(i);
101  }
102  void setCurrentRow(int row);
103 signals:
104  void currentRowChanged(int row);
105 };
106 
107 #endif // COMMITLOGTABLEWIDGET_H
Definition: IncrementalSearch.h:41
Definition: CommitLogTableWidget.h:24
QString filter_text_
Definition: CommitLogTableWidget.h:32
std::shared_ptr< MigemoFilter > migemo_filter_
Definition: CommitLogTableWidget.h:34
int unfilteredIndex(int i) const
Definition: CommitLogTableWidget.cpp:138
std::vector< size_t > index_
Definition: CommitLogTableWidget.h:31
CommitLogTableModel(QObject *parent=nullptr)
Definition: CommitLogTableWidget.h:45
AbstractIncrementalFilter * filter()
Definition: CommitLogTableWidget.h:35
std::vector< CommitRecord > records_
Definition: CommitLogTableWidget.h:30
bool isFiltered() const
Definition: CommitLogTableWidget.h:59
std::shared_ptr< MeCaFilter > meca_filter_
Definition: CommitLogTableWidget.h:33
コミットログを描画するためのdelegate
Definition: CommitLogTableWidget.cpp:154
コミットログテーブルウィジェット
Definition: CommitLogTableWidget.h:69
int unfilteredIndex(int i) const
Definition: CommitLogTableWidget.h:98
void resizeEvent(QResizeEvent *e) override
Definition: CommitLogTableWidget.cpp:542
QRect visualItemRect(int row, int col)
Definition: CommitLogTableWidget.cpp:400
MainWindow const * mainwindow() const
Definition: CommitLogTableWidget.h:75
void updateViewport()
Definition: CommitLogTableWidget.cpp:585
void setup(MainWindow *frame)
Definition: CommitLogTableWidget.cpp:354
int currentRow() const
Definition: CommitLogTableWidget.cpp:565
CommitLogTableWidget(QWidget *parent=nullptr)
Definition: CommitLogTableWidget.cpp:346
CommitLogTableModel * model_
Definition: CommitLogTableWidget.h:76
void setFilter(const QString &filter)
Definition: CommitLogTableWidget.cpp:597
void paintEvent(QPaintEvent *) override
Definition: CommitLogTableWidget.cpp:406
MainWindow * mainwindow()
Definition: CommitLogTableWidget.h:74
MainWindow * mainwindow_
Definition: CommitLogTableWidget.h:73
void adjustAppearance()
Definition: CommitLogTableWidget.cpp:359
const GitCommitItem & commitItem(int row) const
Definition: CommitLogTableWidget.cpp:341
void setCurrentCell(int row, int col)
Definition: CommitLogTableWidget.cpp:579
void setRecords(std::vector< CommitRecord > &&records)
Definition: CommitLogTableWidget.cpp:374
void currentChanged(const QModelIndex &current, const QModelIndex &previous)
Definition: CommitLogTableWidget.cpp:554
int rowCount() const
Definition: CommitLogTableWidget.cpp:560
void setCurrentRow(int row)
Definition: CommitLogTableWidget.cpp:591
void verticalScrollbarValueChanged(int value) override
Definition: CommitLogTableWidget.cpp:548
int actualLogIndex() const
Definition: CommitLogTableWidget.cpp:570
void currentRowChanged(int row)
Definition: MainWindow.h:90
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: GitTypes.h:114