Horizon
pool_git_box.hpp
1 #pragma once
2 #include <gtkmm.h>
3 #include <set>
4 #include <mutex>
5 #include "util/uuid.hpp"
6 #include "common/common.hpp"
7 #include "nlohmann/json.hpp"
8 #include "util/sqlite.hpp"
9 #include <git2.h>
10 #include "util/sort_controller.hpp"
11 
12 class git_repository;
13 
14 
15 namespace horizon {
16 using json = nlohmann::json;
17 
18 class PoolGitBox : public Gtk::Box {
19 public:
20  PoolGitBox(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &x, class PoolNotebook *nb);
21  static PoolGitBox *create(class PoolNotebook *nb);
22 
23  void refresh();
24  bool refreshed_once = false;
25 
26 private:
27  class PoolNotebook *notebook = nullptr;
28 
29  Gtk::Button *refresh_button = nullptr;
30  Gtk::Label *info_label = nullptr;
31  Gtk::TreeView *diff_treeview = nullptr;
32  Gtk::TreeView *status_treeview = nullptr;
33  Gtk::CheckButton *diff_show_deleted_checkbutton = nullptr;
34  Gtk::CheckButton *diff_show_modified_checkbutton = nullptr;
35  Gtk::Box *diff_box = nullptr;
36  Gtk::Button *add_with_deps_button = nullptr;
37 
38  Gtk::Button *pr_button = nullptr;
39  Gtk::Button *back_to_master_button = nullptr;
40  Gtk::Button *back_to_master_delete_button = nullptr;
41 
42  void make_treeview(Gtk::TreeView *treeview);
43 
44  class TreeColumns : public Gtk::TreeModelColumnRecord {
45  public:
46  TreeColumns()
47  {
48  Gtk::TreeModelColumnRecord::add(name);
49  Gtk::TreeModelColumnRecord::add(type);
50  Gtk::TreeModelColumnRecord::add(uuid);
51 
52  Gtk::TreeModelColumnRecord::add(status);
53  Gtk::TreeModelColumnRecord::add(path);
54  }
55  Gtk::TreeModelColumn<Glib::ustring> name;
56  Gtk::TreeModelColumn<ObjectType> type;
57  Gtk::TreeModelColumn<UUID> uuid;
58 
59  Gtk::TreeModelColumn<unsigned int> status;
60  Gtk::TreeModelColumn<std::string> path;
61  };
62  TreeColumns list_columns;
63 
64  Glib::RefPtr<Gtk::ListStore> diff_store;
65  Glib::RefPtr<Gtk::ListStore> status_store;
66 
67  std::optional<SQLite::Query> q_diff;
68  std::optional<SQLite::Query> q_status;
69 
70  std::optional<SortController> sort_controller_diff;
71  std::optional<SortController> sort_controller_status;
72 
73  void update_diff();
74  void update_status();
75 
76  enum class View { DIFF, STATUS };
77 
78  void store_from_db(View view, const std::string &extra_q = "");
79 
80  static int diff_file_cb_c(const git_diff_delta *delta, float progress, void *pl);
81  static int status_cb_c(const char *path, unsigned int status_flags, void *payload);
82  void status_cb(const char *path, unsigned int status_flags);
83  void diff_file_cb(const git_diff_delta *delta);
84 
85  void handle_add_with_deps();
86  void handle_pr();
87  void handle_back_to_master(bool delete_pr);
88 };
89 } // namespace horizon
Definition: pool_git_box.hpp:18
Definition: pool_notebook.hpp:20
a class to store JSON values
Definition: json.hpp:166
basic_json<> json
default JSON class
Definition: json_fwd.hpp:61