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 "pool/pool_parametric.hpp"
14 #include "util/editor_process.hpp"
15 #include "pool-update/pool-update.hpp"
16 #include <zmq.hpp>
17 #include "util/win32_undef.hpp"
18 
19 namespace horizon {
20 class PoolNotebook : public Gtk::Notebook {
21  friend class PoolRemoteBox;
22  friend class PoolGitBox;
23 
24 public:
25  PoolNotebook(const std::string &bp, class PoolProjectManagerAppWindow *aw);
26  void populate();
27  bool get_close_prohibited() const;
28  void prepare_close();
29  void pool_update(std::function<void()> cb = nullptr, const std::vector<std::string> &filenames = {});
30  bool get_needs_save() const;
31  void save();
32  void go_to(ObjectType type, const UUID &uu);
33  const UUID &get_pool_uuid() const;
34  ~PoolNotebook();
35 
36 private:
37  const std::string base_path;
38  Pool pool;
39  PoolParametric pool_parametric;
40  class PoolProjectManagerAppWindow *appwin;
41  std::map<ObjectType, class PoolBrowser *> browsers;
42  std::map<std::string, class PoolBrowserParametric *> browsers_parametric;
43  class PartWizard *part_wizard = nullptr;
44  class KiCadSymbolImportWizard *kicad_symbol_import_wizard = nullptr;
45  class DuplicateWindow *duplicate_window = nullptr;
46  bool closing = false;
47 
48  Glib::Dispatcher pool_update_dispatcher;
49  bool in_pool_update_handler = false;
50  std::mutex pool_update_status_queue_mutex;
51  std::deque<std::tuple<PoolUpdateStatus, std::string, std::string>> pool_update_status_queue;
52  std::deque<std::tuple<PoolUpdateStatus, std::string, std::string>> pool_update_error_queue;
53  bool pool_updating = false;
54  void pool_updated(bool success);
55  void reload();
56  std::string pool_update_last_file;
57  unsigned int pool_update_n_files = 0;
58  unsigned int pool_update_n_files_last = 0;
59  std::function<void()> pool_update_done_cb = nullptr;
60  std::vector<std::string> pool_update_filenames;
61 
62  void pool_update_thread();
63 
64  void show_duplicate_window(ObjectType ty, const UUID &uu);
65 
66  void construct_units();
67  void handle_create_unit();
68  void handle_edit_unit(const UUID &uu);
69  void handle_create_symbol_for_unit(const UUID &uu);
70  void handle_create_entity_for_unit(const UUID &uu);
71  void handle_duplicate_unit(const UUID &uu);
72 
73  void construct_symbols();
74  void handle_edit_symbol(const UUID &uu);
75  void handle_create_symbol();
76  void handle_duplicate_symbol(const UUID &uu);
77 
78  void construct_entities();
79  void handle_edit_entity(const UUID &uu);
80  void handle_create_entity();
81  void handle_duplicate_entity(const UUID &uu);
82 
83  void construct_padstacks();
84  void handle_edit_padstack(const UUID &uu);
85  void handle_create_padstack();
86  void handle_duplicate_padstack(const UUID &uu);
87 
88  void construct_packages();
89  void handle_edit_package(const UUID &uu);
90  void handle_create_package();
91  void handle_create_padstack_for_package(const UUID &uu);
92  void handle_duplicate_package(const UUID &uu);
93  void handle_part_wizard();
94  void handle_kicad_symbol_import_wizard();
95 
96  void construct_parts();
97  void handle_edit_part(const UUID &uu);
98  void handle_create_part();
99  void handle_create_part_from_part(const UUID &uu);
100  void handle_duplicate_part(const UUID &uu);
101 
102  void construct_frames();
103  void handle_edit_frame(const UUID &uu);
104  void handle_create_frame();
105  void handle_duplicate_frame(const UUID &uu);
106 
107  void construct_decals();
108  void handle_edit_decal(const UUID &uu);
109  void handle_create_decal();
110  void handle_duplicate_decal(const UUID &uu);
111 
112  Gtk::Button *add_action_button(const std::string &label, Gtk::Box *bbox, sigc::slot0<void>);
113  Gtk::Button *add_action_button(const std::string &label, Gtk::Box *bbox, class PoolBrowser *br,
114  sigc::slot1<void, UUID>);
115  void add_preview_stack_switcher(Gtk::Box *bbox, Gtk::Stack *stack);
116 
117  void handle_delete(ObjectType ty, const UUID &uu);
118  void handle_move_rename(ObjectType ty, const UUID &uu);
119  void handle_copy_path(ObjectType ty, const UUID &uu);
120  void add_context_menu(class PoolBrowser *br);
121 
122  void install_search_once(Gtk::Widget *page, PoolBrowser *browser);
123  bool widget_is_visible(Gtk::Widget *widget);
124 
125  std::string remote_repo;
126  class PoolRemoteBox *remote_box = nullptr;
127  class PoolSettingsBox *settings_box = nullptr;
128  class PoolGitBox *git_box = nullptr;
129 
130  UUID pool_uuid;
131 };
132 } // namespace horizon