2 #include "core/clipboard.hpp"
3 #include "core/core.hpp"
4 #include "imp_interface.hpp"
5 #include "keyseq_dialog.hpp"
6 #include "main_window.hpp"
7 #include "pool/pool.hpp"
8 #include "preferences/preferences.hpp"
9 #include "selection_filter_dialog.hpp"
10 #include "util/window_state_store.hpp"
11 #include "widgets/spin_button_dim.hpp"
12 #include "widgets/warnings_box.hpp"
14 #include "nlohmann/json.hpp"
15 #include "search/searcher.hpp"
17 #include "util/item_set.hpp"
18 #include "canvas/canvas_gl.hpp"
19 #include "grid_controller.hpp"
20 #include "util/action_label.hpp"
22 #include "util/win32_undef.hpp"
28 PoolParams(
const std::string &bp,
const std::string &cp =
"") : base_path(bp), cache_path(cp)
31 std::string base_path;
32 std::string cache_path;
35 std::unique_ptr<Pool> make_pool(
const PoolParams ¶ms);
42 void run(
int argc,
char *argv[]);
43 virtual void handle_tool_change(ToolID
id);
44 virtual void construct() = 0;
45 void canvas_update_from_pp();
49 void set_read_only(
bool v);
51 std::set<ObjectRef> highlights;
52 virtual void update_highlights(){};
59 WORK_LAYER_ONLY_ENABLED,
67 std::vector<int> layers;
68 Flag flags = Flag::DEFAULT;
71 virtual std::map<ObjectType, SelectionFilterInfo> get_selection_filter_info()
const;
72 virtual bool is_layered()
const
83 Gtk::Menu *context_menu =
nullptr;
84 std::unique_ptr<SelectionFilterDialog> selection_filter_dialog;
85 std::optional<GridController> grid_controller;
87 std::unique_ptr<Pool> pool;
88 class Core *core =
nullptr;
89 std::unique_ptr<ClipboardManager> clipboard =
nullptr;
90 std::unique_ptr<KeySequenceDialog> key_sequence_dialog =
nullptr;
91 std::unique_ptr<ImpInterface> imp_interface =
nullptr;
92 Glib::RefPtr<Glib::Binding> grid_spacing_binding;
94 std::map<ActionToolID, ActionConnection> action_connections;
102 zmq::socket_t sock_broadcast_rx;
103 zmq::socket_t sock_project;
104 bool sockets_connected =
false;
106 bool no_update =
false;
107 bool distraction_free =
false;
109 virtual void canvas_update() = 0;
110 virtual void expand_selection_for_property_panel(std::set<SelectableRef> &sel_extra,
111 const std::set<SelectableRef> &sel);
112 void handle_selection_changed(
void);
113 bool handle_key_press(GdkEventKey *key_event);
114 void handle_cursor_move(
const Coordi &pos);
115 bool handle_click(GdkEventButton *button_event);
116 bool handle_click_release(GdkEventButton *button_event);
117 bool handle_context_menu(GdkEventButton *button_event);
119 void tool_begin(ToolID
id,
bool override_selection =
false,
const std::set<SelectableRef> &sel = {},
120 std::unique_ptr<ToolData> data =
nullptr);
121 void add_tool_button(ToolID
id,
const std::string &label,
bool left =
true);
122 void handle_warning_selected(
const Coordi &pos);
123 virtual bool handle_broadcast(
const json &j);
124 bool handle_close(GdkEventAny *ev);
127 bool trigger_action(
const ActionToolID &action);
128 bool trigger_action(ActionID aid);
129 bool trigger_action(ToolID tid);
131 void add_tool_action(ToolID tid,
const std::string &action);
132 void add_tool_action(ActionID aid,
const std::string &action);
133 void add_hamburger_menu();
135 Preferences preferences;
137 virtual CanvasPreferences *get_canvas_preferences()
139 return &preferences.canvas_non_layer;
141 virtual void apply_preferences();
143 std::unique_ptr<WindowStateStore> state_store =
nullptr;
145 virtual void handle_maybe_drag();
147 virtual ActionCatalogItem::Availability get_editor_type_for_action()
const = 0;
148 ObjectType get_editor_type()
const;
150 void layer_up_down(
bool up);
151 void goto_layer(
int layer);
153 Gtk::Button *create_action_button(ActionToolID action);
155 void set_action_sensitive(ActionToolID,
bool v);
156 bool get_action_sensitive(ActionToolID)
const;
157 virtual void update_action_sensitivity();
159 typedef sigc::signal<void> type_signal_action_sensitive;
160 type_signal_action_sensitive signal_action_sensitive()
162 return s_signal_action_sensitive;
165 virtual std::string get_hud_text(std::set<SelectableRef> &sel);
166 std::string get_hud_text_for_component(
const Component *comp);
167 std::string get_hud_text_for_net(
const Net *net);
169 void set_monitor_files(
const std::set<std::string> &files);
170 void set_monitor_items(
const ItemSet &items);
171 virtual void update_monitor()
174 void edit_pool_item(ObjectType type,
const UUID &uu);
176 void parameter_window_add_polygon_expand(
class ParameterWindow *parameter_window);
178 bool read_only =
false;
180 void tool_update_data(std::unique_ptr<ToolData> &data);
182 virtual void search_center(
const Searcher::SearchResult &res);
183 virtual ActionToolID get_doubleclick_action(ObjectType type,
const UUID &uu);
185 Glib::RefPtr<Gio::Menu> hamburger_menu;
189 static const std::string meta_suffix;
191 virtual void get_save_meta(
json &j)
195 void set_window_title(
const std::string &s);
196 void set_window_title_from_block();
198 void update_view_hints();
199 virtual std::vector<std::string> get_view_hints();
201 Glib::RefPtr<Gio::Menu> view_options_menu;
203 virtual Searcher *get_searcher_ptr()
210 return get_searcher_ptr();
213 Searcher &get_searcher()
215 auto s = get_searcher_ptr();
217 throw std::runtime_error(
"not implemented");
221 class ActionButton &add_action_button(ActionToolID action);
222 class ActionButtonMenu &add_action_button_menu(
const char *icon_name);
223 class ActionButton &add_action_button_polygon();
224 class ActionButton &add_action_button_line();
226 virtual ToolID get_tool_for_drag_move(
bool ctrl,
const std::set<SelectableRef> &sel)
const;
227 void force_end_tool();
230 void fix_cursor_pos();
231 Glib::RefPtr<Gio::FileMonitor> preferences_monitor;
232 void handle_drag(
bool ctrl);
233 void update_selection_label();
234 std::string get_tool_settings_filename(ToolID
id);
238 std::map<std::string, Glib::RefPtr<Gio::FileMonitor>> file_monitors;
240 void handle_file_changed(
const Glib::RefPtr<Gio::File> &file1,
const Glib::RefPtr<Gio::File> &file2,
241 Gio::FileMonitorEvent ev);
243 ActionConnection &connect_action(ActionID action_id, ToolID tool_id,
244 std::function<
void(
const ActionConnection &)> cb);
246 void create_context_menu(Gtk::Menu *parent,
const std::set<SelectableRef> &sel);
247 Gtk::MenuItem *create_context_menu_item(ActionToolID act);
249 KeySequence keys_current;
250 enum class MatchResult { NONE, PREFIX, COMPLETE };
251 MatchResult keys_match(
const KeySequence &keys)
const;
252 bool handle_action_key(GdkEventKey *ev);
253 void handle_tool_action(
const ActionConnection &conn);
254 void handle_select_polygon(
const ActionConnection &a);
256 void handle_search();
257 void search_go(
int dir);
258 std::list<Searcher::SearchResult> search_results;
259 unsigned int search_result_current = 0;
260 void update_search_markers();
261 void update_search_types_label();
262 void set_search_mode(
bool enabled,
bool focus =
true);
263 std::map<Searcher::Type, Gtk::CheckButton *> search_check_buttons;
265 class LogWindow *log_window =
nullptr;
266 std::set<SelectableRef> selection_for_drag_move;
267 Coordf cursor_pos_drag_begin;
268 Coordi cursor_pos_grid_drag_begin;
270 std::map<ActionToolID, bool> action_sensitivity;
271 type_signal_action_sensitive s_signal_action_sensitive;
273 bool property_panel_has_focus();
275 sigc::connection initial_view_all_conn;
277 bool sockets_broken =
false;
278 void show_sockets_broken_dialog(
const std::string &msg =
"");
279 bool needs_autosave =
false;
280 bool queue_autosave =
false;
282 void update_property_panels();
283 std::map<CanvasGL::SelectionTool, CanvasGL::SelectionQualifier> selection_qualifiers;
284 std::list<class ActionButtonBase *> action_buttons;
286 Glib::RefPtr<Gio::SimpleAction> bottom_view_action;
287 Glib::RefPtr<Gio::SimpleAction> distraction_free_action;
289 int left_panel_width = 0;
291 void tool_bar_set_actions(
const std::vector<ActionLabelInfo> &labels);
292 void tool_bar_append_action(InToolActionID action1, InToolActionID action2,
const std::string &s);
293 void tool_bar_clear_actions();
294 InToolKeySequencesPreferences in_tool_key_sequeces_preferences;
295 std::vector<ActionLabelInfo> in_tool_action_label_infos;
297 void show_preferences(std::optional<std::string> page = std::nullopt);
303 void handle_pan_action(
const ActionConnection &c);
304 void handle_zoom_action(
const ActionConnection &c);
306 std::string get_complete_display_name(
const SelectableRef &sr);
308 void set_flip_view(
bool flip);
309 void apply_arrow_keys();
310 void check_version();