Guitar
CommitLogTableWidget.h
Go to the documentation of this file.
1 #ifndef COMMITLOGTABLEWIDGET_H
2 #define COMMITLOGTABLEWIDGET_H
3 
4 #include "CommitRecord.h"
5 #include "Git.h"
7 #include "RepositoryTreeWidget.h"
8 #include <IncrementalSearch.h>
9 #include <QTableWidget>
10 #include <memory>
11 
12 class MainWindow;
14 
15 
16 class CommitLogTableModel : public QAbstractItemModel {
18  friend class CommitLogTableWidget;
19 public:
20  static QString escapeTooltipText(QString tooltip);
21 private:
22  std::basic_string_view<CommitRecord const *> records_;
23  std::vector<size_t> index_;
24  std::string filter_text_;
25  IncrementalSearchFilter incremental_search_filter_;
26  IncrementalSearchFilter const &getIncrementalSearchFilter() const
27  {
29  }
31  const CommitRecord *record(int row) const;
32  const CommitRecord *record(QModelIndex const &index) const;
33  int rowcount() const;
34  void private_SetFilter(const std::string &text);
35 public:
36  CommitLogTableModel(QObject *parent = nullptr)
37  : QAbstractItemModel(parent)
38  {
39  }
40  QModelIndex index(int row, int column, const QModelIndex &parent) const;
41  QModelIndex parent(const QModelIndex &child) const;
42  int rowCount(const QModelIndex &parent) const;
43  int columnCount(const QModelIndex &parent) const;
44  QVariant headerData(int section, Qt::Orientation orientation, int role) const;
45  QVariant data(const QModelIndex &index, int role) const;
46  void setRecords(std::basic_string_view<const CommitRecord *> records);
47  bool setFilter(const std::string &text);
48  bool isFiltered() const
49  {
50  return !filter_text_.empty();
51  }
52  int unfilteredIndex(int i) const;
53 };
54 
58 class CommitLogTableWidget : public QTableView {
59  Q_OBJECT
61 private:
62  MainWindow *mainwindow_ = nullptr;
64  MainWindow const *mainwindow() const { return mainwindow_; }
65  CommitLogTableModel *model_ = nullptr; // TODO:
66  const GitCommitItem &commitItem(int row) const;
67 public:
68  explicit CommitLogTableWidget(QWidget *parent = nullptr);
69  void setup(MainWindow *frame);
70  void setRecords(std::basic_string_view<const CommitRecord *> records);
71 protected:
72  void paintEvent(QPaintEvent *) override;
73  void resizeEvent(QResizeEvent *e) override;
74 protected slots:
75  void verticalScrollbarValueChanged(int value) override;
76  void currentChanged(const QModelIndex &current, const QModelIndex &previous) override;
77 public:
78  int rowCount() const;
79  int currentRow() const;
80  void setCurrentCell(int row, int col);
81  int actualLogIndex() const;
82  QRect visualItemRect(int row, int col);
83  void setFilter(const std::string &filter);
84  void adjustAppearance();
85  void updateViewport();
86  int unfilteredIndex(int i) const
87  {
88  return model_->unfilteredIndex(i);
89  }
90  void setCurrentRow(int row);
91 signals:
92  void currentRowChanged(int row);
93 };
94 
95 #endif // COMMITLOGTABLEWIDGET_H
Definition: CommitLogTableWidget.h:16
QModelIndex parent(const QModelIndex &child) const
Definition: CommitLogTableWidget.cpp:44
void setRecords(std::basic_string_view< const CommitRecord * > records)
Definition: CommitLogTableWidget.cpp:156
CommitLogTableWidget * tablewidget()
Definition: CommitLogTableWidget.cpp:24
IncrementalSearchFilter const & getIncrementalSearchFilter() const
Definition: CommitLogTableWidget.h:26
int rowcount() const
Definition: CommitLogTableWidget.cpp:49
void private_SetFilter(const std::string &text)
Definition: CommitLogTableWidget.cpp:110
int unfilteredIndex(int i) const
Definition: CommitLogTableWidget.cpp:151
QModelIndex index(int row, int column, const QModelIndex &parent) const
Definition: CommitLogTableWidget.cpp:39
IncrementalSearchFilter incremental_search_filter_
Definition: CommitLogTableWidget.h:25
std::basic_string_view< CommitRecord const * > records_
Definition: CommitLogTableWidget.h:22
QVariant headerData(int section, Qt::Orientation orientation, int role) const
Definition: CommitLogTableWidget.cpp:64
std::string filter_text_
Definition: CommitLogTableWidget.h:24
std::vector< size_t > index_
Definition: CommitLogTableWidget.h:23
QVariant data(const QModelIndex &index, int role) const
Definition: CommitLogTableWidget.cpp:78
CommitLogTableModel(QObject *parent=nullptr)
Definition: CommitLogTableWidget.h:36
static QString escapeTooltipText(QString tooltip)
Definition: CommitLogTableWidget.cpp:14
bool isFiltered() const
Definition: CommitLogTableWidget.h:48
bool setFilter(const std::string &text)
Definition: CommitLogTableWidget.cpp:142
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:167
コミットログテーブルウィジェット
Definition: CommitLogTableWidget.h:58
int unfilteredIndex(int i) const
Definition: CommitLogTableWidget.h:86
void resizeEvent(QResizeEvent *e) override
Definition: CommitLogTableWidget.cpp:568
QRect visualItemRect(int row, int col)
Definition: CommitLogTableWidget.cpp:425
void currentChanged(const QModelIndex &current, const QModelIndex &previous) override
Definition: CommitLogTableWidget.cpp:580
MainWindow const * mainwindow() const
Definition: CommitLogTableWidget.h:64
void updateViewport()
Definition: CommitLogTableWidget.cpp:611
void setup(MainWindow *frame)
Definition: CommitLogTableWidget.cpp:379
int currentRow() const
Definition: CommitLogTableWidget.cpp:591
CommitLogTableWidget(QWidget *parent=nullptr)
Definition: CommitLogTableWidget.cpp:368
CommitLogTableModel * model_
Definition: CommitLogTableWidget.h:65
void paintEvent(QPaintEvent *) override
Definition: CommitLogTableWidget.cpp:431
MainWindow * mainwindow()
Definition: CommitLogTableWidget.h:63
MainWindow * mainwindow_
Definition: CommitLogTableWidget.h:62
void setFilter(const std::string &filter)
Definition: CommitLogTableWidget.cpp:623
void adjustAppearance()
Definition: CommitLogTableWidget.cpp:384
const GitCommitItem & commitItem(int row) const
Definition: CommitLogTableWidget.cpp:363
void setCurrentCell(int row, int col)
Definition: CommitLogTableWidget.cpp:605
int rowCount() const
Definition: CommitLogTableWidget.cpp:586
void setCurrentRow(int row)
Definition: CommitLogTableWidget.cpp:617
void verticalScrollbarValueChanged(int value) override
Definition: CommitLogTableWidget.cpp:574
int actualLogIndex() const
Definition: CommitLogTableWidget.cpp:596
void currentRowChanged(int row)
void setRecords(std::basic_string_view< const CommitRecord * > records)
Definition: CommitLogTableWidget.cpp:399
Definition: MainWindow.h:96
Definition: CommitRecord.h:6
Definition: GitTypes.h:121