Guitar
CommitLogTableWidget.h
Go to the documentation of this file.
1 #ifndef COMMITLOGTABLEWIDGET_H
2 #define COMMITLOGTABLEWIDGET_H
3 
4 #include "../subprojects/IncrementalSearchPlugin/src/IncrementalSearchPlugin.h"
5 #include "CommitRecord.h"
7 #include "RepositoryTreeWidget.h"
8 #include <QTableWidget>
9 #include <memory>
10 
11 struct GitCommitItem;
12 class MainWindow;
14 
15 class CommitLogTableModel : public QAbstractItemModel {
17  friend class CommitLogTableWidget;
18 public:
19  static QString escapeTooltipText(QString tooltip);
20 private:
21  std::span<CommitRecord const *const> records_;
22  std::vector<size_t> index_;
23  std::string filter_text_;
24  IncrementalSearchFilter incremental_search_filter_;
25  IncrementalSearchFilter const &getIncrementalSearchFilter() const
26  {
28  }
30  const CommitRecord *record(int row) const;
31  const CommitRecord *record(QModelIndex const &index) const;
32  int rowcount() const;
33  void private_SetFilter(const std::string &text);
34 public:
35  CommitLogTableModel(QObject *parent = nullptr)
36  : QAbstractItemModel(parent)
37  {
38  }
39  QModelIndex index(int row, int column, const QModelIndex &parent) const;
40  QModelIndex parent(const QModelIndex &child) const;
41  int rowCount(const QModelIndex &parent) const;
42  int columnCount(const QModelIndex &parent) const;
43  QVariant headerData(int section, Qt::Orientation orientation, int role) const;
44  QVariant data(const QModelIndex &index, int role) const;
45  void setRecords(std::span<CommitRecord const *const> records);
46  bool setFilter(const std::string &text);
47  bool isFiltered() const
48  {
49  return !filter_text_.empty();
50  }
51  int unfilteredIndex(int i) const;
52 };
53 
57 class CommitLogTableWidget : public QTableView {
58  Q_OBJECT
60 private:
61  MainWindow *mainwindow_ = nullptr;
63  MainWindow const *mainwindow() const { return mainwindow_; }
64  CommitLogTableModel *model_ = nullptr; // TODO:
65  const GitCommitItem &commitItem(int row) const;
66 public:
67  explicit CommitLogTableWidget(QWidget *parent = nullptr);
68  void setup(MainWindow *frame);
69  void setRecords(std::span<CommitRecord const *const> records);
70 protected:
71  void paintEvent(QPaintEvent *) override;
72  void resizeEvent(QResizeEvent *e) override;
73 protected slots:
74  void verticalScrollbarValueChanged(int value) override;
75  void currentChanged(const QModelIndex &current, const QModelIndex &previous) override;
76 public:
77  int rowCount() const;
78  int currentRow() const;
79  void setCurrentCell(int row, int col);
80  int actualLogIndex() const;
81  QRect visualItemRect(int row, int col);
82  void setFilter(const std::string &filter);
83  void adjustAppearance();
84  void updateViewport();
85  int unfilteredIndex(int i) const
86  {
87  return model_->unfilteredIndex(i);
88  }
89  void setCurrentRow(int row);
90 signals:
91  void currentRowChanged(int row);
92 };
93 
94 #endif // COMMITLOGTABLEWIDGET_H
Definition: CommitLogTableWidget.h:15
QModelIndex parent(const QModelIndex &child) const
Definition: CommitLogTableWidget.cpp:44
CommitLogTableWidget * tablewidget()
Definition: CommitLogTableWidget.cpp:24
void setRecords(std::span< CommitRecord const *const > records)
Definition: CommitLogTableWidget.cpp:179
IncrementalSearchFilter const & getIncrementalSearchFilter() const
Definition: CommitLogTableWidget.h:25
int rowcount() const
Definition: CommitLogTableWidget.cpp:49
void private_SetFilter(const std::string &text)
Definition: CommitLogTableWidget.cpp:133
int unfilteredIndex(int i) const
Definition: CommitLogTableWidget.cpp:174
QModelIndex index(int row, int column, const QModelIndex &parent) const
Definition: CommitLogTableWidget.cpp:39
IncrementalSearchFilter incremental_search_filter_
Definition: CommitLogTableWidget.h:24
QVariant headerData(int section, Qt::Orientation orientation, int role) const
Definition: CommitLogTableWidget.cpp:64
std::string filter_text_
Definition: CommitLogTableWidget.h:23
std::vector< size_t > index_
Definition: CommitLogTableWidget.h:22
QVariant data(const QModelIndex &index, int role) const
Definition: CommitLogTableWidget.cpp:101
CommitLogTableModel(QObject *parent=nullptr)
Definition: CommitLogTableWidget.h:35
static QString escapeTooltipText(QString tooltip)
Definition: CommitLogTableWidget.cpp:14
bool isFiltered() const
Definition: CommitLogTableWidget.h:47
bool setFilter(const std::string &text)
Definition: CommitLogTableWidget.cpp:165
std::span< CommitRecord const *const > records_
Definition: CommitLogTableWidget.h:21
int columnCount(const QModelIndex &parent) const
Definition: CommitLogTableWidget.cpp:59
int rowCount(const QModelIndex &parent) const
Definition: CommitLogTableWidget.cpp:54
const CommitRecord * record(int row) const
Definition: CommitLogTableWidget.cpp:29
コミットログを描画するためのdelegate
Definition: CommitLogTableWidget.cpp:190
コミットログテーブルウィジェット
Definition: CommitLogTableWidget.h:57
void setRecords(std::span< CommitRecord const *const > records)
Definition: CommitLogTableWidget.cpp:422
int unfilteredIndex(int i) const
Definition: CommitLogTableWidget.h:85
void resizeEvent(QResizeEvent *e) override
Definition: CommitLogTableWidget.cpp:595
QRect visualItemRect(int row, int col)
Definition: CommitLogTableWidget.cpp:448
void currentChanged(const QModelIndex &current, const QModelIndex &previous) override
Definition: CommitLogTableWidget.cpp:607
MainWindow const * mainwindow() const
Definition: CommitLogTableWidget.h:63
void updateViewport()
Definition: CommitLogTableWidget.cpp:638
void setup(MainWindow *frame)
Definition: CommitLogTableWidget.cpp:402
int currentRow() const
Definition: CommitLogTableWidget.cpp:618
CommitLogTableWidget(QWidget *parent=nullptr)
Definition: CommitLogTableWidget.cpp:391
CommitLogTableModel * model_
Definition: CommitLogTableWidget.h:64
void paintEvent(QPaintEvent *) override
Definition: CommitLogTableWidget.cpp:454
MainWindow * mainwindow()
Definition: CommitLogTableWidget.h:62
MainWindow * mainwindow_
Definition: CommitLogTableWidget.h:61
void setFilter(const std::string &filter)
Definition: CommitLogTableWidget.cpp:650
void adjustAppearance()
Definition: CommitLogTableWidget.cpp:407
const GitCommitItem & commitItem(int row) const
Definition: CommitLogTableWidget.cpp:386
void setCurrentCell(int row, int col)
Definition: CommitLogTableWidget.cpp:632
int rowCount() const
Definition: CommitLogTableWidget.cpp:613
void setCurrentRow(int row)
Definition: CommitLogTableWidget.cpp:644
void verticalScrollbarValueChanged(int value) override
Definition: CommitLogTableWidget.cpp:601
int actualLogIndex() const
Definition: CommitLogTableWidget.cpp:623
void currentRowChanged(int row)
Definition: MainWindow.h:49
Definition: CommitRecord.h:11
Definition: GitCommitItem.h:21