Horizon
pool-prj-mgr-app.hpp
1 #pragma once
2 #include <gtkmm.h>
3 #include "util/uuid.hpp"
4 #include "nlohmann/json_fwd.hpp"
5 #include <map>
6 #include <set>
7 #include <zmq.hpp>
8 #include <glibmm/datetime.h>
9 #include "util/win32_undef.hpp"
10 #include "preferences/preferences.hpp"
11 #include "logger/log_dispatcher.hpp"
12 
13 namespace horizon {
14 using json = nlohmann::json;
15 
16 class PoolProjectManagerApplication : public Gtk::Application {
17 protected:
19 
20 public:
21  static Glib::RefPtr<PoolProjectManagerApplication> create();
22  const std::string &get_ep_broadcast() const;
23  void send_json(int pid, const json &j);
24  zmq::context_t zctx;
25 
26  class UserConfig {
27  private:
29  UserConfig() = default;
30  void load(const std::string &filename);
31  void save(const std::string &filename);
32 
33  public:
34  void add_recent_item(const std::string &path);
35 
36  std::map<std::string, Glib::DateTime> recent_items;
37  std::deque<UUID> part_favorites;
38  bool pool_doc_info_bar_dismissed = false;
39  std::string project_author;
40  std::string project_base_path;
41  UUID project_pool;
42  };
43 
44  UserConfig user_config;
45 
46  void close_appwindows(std::set<Gtk::Window *> wins);
47  Preferences &get_preferences();
48 
49  class PoolProjectManagerAppWindow &open_pool_or_project(const std::string &pool_json, guint32 timestamp = 0);
50 
51  class PreferencesWindow *show_preferences_window(guint32 timestamp = 0);
52  class PoolsWindow *show_pools_window(guint32 timestamp = 0);
53  class LogWindow *show_log_window(guint32 timestamp = 0);
54 
55  typedef sigc::signal<void, std::vector<std::string>> type_signal_pool_items_edited;
56  type_signal_pool_items_edited signal_pool_items_edited()
57  {
58  return s_signal_pool_items_edited;
59  }
60 
61  typedef sigc::signal<void, std::string> type_signal_pool_updated;
62  type_signal_pool_updated signal_pool_updated()
63  {
64  return s_signal_pool_updated;
65  }
66 
68  class PoolProjectManagerAppWindow &win;
69  bool close = true;
70  };
71  bool close_windows(std::vector<CloseOrHomeWindow> windows);
72 
73  bool present_existing_window(const std::string &path);
74 
75 protected:
76  // Override default signal handlers:
77  void on_activate() override;
78  void on_startup() override;
79  void on_shutdown();
80  void on_open(const Gio::Application::type_vec_files &files, const Glib::ustring &hint) override;
81 
82  std::string sock_broadcast_ep;
83 
84 
85 private:
86  class PoolProjectManagerAppWindow *create_appwindow();
87  void on_hide_window(Gtk::Window *window);
88  void on_action_quit();
89  void on_action_new_window();
90  void on_action_about();
91  Preferences preferences;
92  class PreferencesWindow *preferences_window = nullptr;
93  class PoolsWindow *pools_window = nullptr;
94 
95  LogDispatcher log_dispatcher;
96  class LogWindow *log_window = nullptr;
97 
98  type_signal_pool_items_edited s_signal_pool_items_edited;
99  type_signal_pool_updated s_signal_pool_updated;
100 
101  std::string get_config_filename();
102 
103 public:
104  const UUID ipc_cookie;
105  zmq::socket_t sock_broadcast;
106 };
107 } // namespace horizon
Definition: log_dispatcher.hpp:9
Definition: log_window.hpp:6
Definition: pool-prj-mgr-app_win.hpp:22
Definition: pool-prj-mgr-app.hpp:26
Definition: pool-prj-mgr-app.hpp:16
Definition: pools_window.hpp:10
Definition: preferences_window.hpp:7
Definition: preferences.hpp:164
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16
a class to store JSON values
Definition: json.hpp:177
basic_json<> json
default JSON class
Definition: json_fwd.hpp:62