Horizon
pool_notebook.hpp
1 #pragma once
2 #include <gtkmm.h>
3 #include <memory>
4 #include "util/uuid.hpp"
5 #include "pool/part.hpp"
6 #include "pool/unit.hpp"
7 #include "pool/entity.hpp"
8 #include "pool/symbol.hpp"
9 #include "pool/package.hpp"
10 #include "pool/padstack.hpp"
11 
12 #include "pool/pool.hpp"
13 #include "util/editor_process.hpp"
14 #include "pool-update/pool-update.hpp"
15 #include <zmq.hpp>
16 
17 namespace horizon {
18 class PoolNotebook : public Gtk::Notebook {
19  friend class PoolRemoteBox;
20 
21 public:
22  PoolNotebook(const std::string &bp, class PoolProjectManagerAppWindow *aw);
23  void populate();
24  bool get_close_prohibited() const;
25  void prepare_close();
26  void pool_update(std::function<void()> cb = nullptr);
27  bool get_needs_save() const;
28  void save();
29  void go_to(ObjectType type, const UUID &uu);
30  ~PoolNotebook();
31 
32 private:
33  const std::string base_path;
34  Pool pool;
35  class PoolProjectManagerAppWindow *appwin;
36  std::map<ObjectType, class PoolBrowser *> browsers;
37  class PartWizard *part_wizard = nullptr;
38  class DuplicateWindow *duplicate_window = nullptr;
39  bool closing = false;
40 
41  Glib::Dispatcher pool_update_dispatcher;
42  bool in_pool_update_handler = false;
43  std::mutex pool_update_status_queue_mutex;
44  std::deque<std::tuple<PoolUpdateStatus, std::string, std::string>> pool_update_status_queue;
45  std::deque<std::tuple<PoolUpdateStatus, std::string, std::string>> pool_update_error_queue;
46  bool pool_updating = false;
47  void pool_updated(bool success);
48  std::string pool_update_last_file;
49  unsigned int pool_update_n_files = 0;
50  unsigned int pool_update_n_files_last = 0;
51  std::function<void()> pool_update_done_cb = nullptr;
52 
53  void pool_update_thread();
54 
55  void show_duplicate_window(ObjectType ty, const UUID &uu);
56 
57  void handle_create_unit();
58  void handle_edit_unit(const UUID &uu);
59  void handle_create_symbol_for_unit(const UUID &uu);
60  void handle_create_entity_for_unit(const UUID &uu);
61  void handle_duplicate_unit(const UUID &uu);
62 
63  void handle_edit_symbol(const UUID &uu);
64  void handle_create_symbol();
65  void handle_duplicate_symbol(const UUID &uu);
66 
67  void handle_edit_entity(const UUID &uu);
68  void handle_create_entity();
69  void handle_duplicate_entity(const UUID &uu);
70 
71  void handle_edit_padstack(const UUID &uu);
72  void handle_create_padstack();
73  void handle_duplicate_padstack(const UUID &uu);
74 
75  void handle_edit_package(const UUID &uu);
76  void handle_create_package();
77  void handle_create_padstack_for_package(const UUID &uu);
78  void handle_duplicate_package(const UUID &uu);
79  void handle_part_wizard(const UUID &uu);
80 
81  void handle_edit_part(const UUID &uu);
82  void handle_create_part();
83  void handle_create_part_from_part(const UUID &uu);
84  void handle_duplicate_part(const UUID &uu);
85 
86  void handle_edit_frame(const UUID &uu);
87  void handle_create_frame();
88  void handle_duplicate_frame(const UUID &uu);
89 
90  Gtk::Button *add_action_button(const std::string &label, Gtk::Box *bbox, sigc::slot0<void>);
91  Gtk::Button *add_action_button(const std::string &label, Gtk::Box *bbox, class PoolBrowser *br,
92  sigc::slot1<void, UUID>);
93 
94  void handle_delete(ObjectType ty, const UUID &uu);
95  void handle_copy_path(ObjectType ty, const UUID &uu);
96  void add_context_menu(class PoolBrowser *br);
97 
98  std::string remote_repo;
99  class PoolRemoteBox *remote_box = nullptr;
100  class PoolSettingsBox *settings_box = nullptr;
101 
102  UUID pool_uuid;
103 };
104 } // namespace horizon
Definition: pool_notebook.hpp:18
Definition: duplicate_window.hpp:7
Definition: pool_remote_box.hpp:14
Definition: part_wizard.hpp:16
Definition: pool_settings_box.hpp:14
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16
Definition: pool_browser.hpp:11
Stores objects (Unit, Entity, Symbol, Part, etc.) from the pool.
Definition: pool.hpp:19
Definition: block.cpp:9
Definition: pool-prj-mgr-app_win.hpp:17