1 #pragma once 2 #include "util/window_state_store.hpp" 3 #include "common/common.hpp" 4 #include "util/changeable.hpp" 5 #include "util/uuid.hpp" 6 #include "imp/action.hpp" 7 #include <gtkmm.h> 8 #include <set> 9 10 namespace horizon { 11 class View3DWindow : public Gtk::Window, public Changeable { 12 public: 13 enum class Mode { BOARD, PACKAGE }; 14 View3DWindow(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &x, const class Board &b, class IPool &p, 15 Mode mode, class Canvas3D *ca_custom); 16 static View3DWindow *create(const class Board &b, class IPool &p, Mode mode, class Canvas3D *ca_custom = nullptr); 17 void update(bool clear = false); 18 void set_highlights(const std::set<UUID> &pkgs); 19 void add_widget(Gtk::Widget *w); 20 21 void set_solder_mask_color(const Gdk::RGBA &c); 22 Gdk::RGBA get_solder_mask_color(); 23 24 void set_silkscreen_color(const Gdk::RGBA &c); 25 Gdk::RGBA get_silkscreen_color(); 26 27 void set_substrate_color(const Gdk::RGBA &c); 28 Gdk::RGBA get_substrate_color(); 29 get_canvas()30 class Canvas3D &get_canvas() 31 { 32 return *canvas; 33 } 34 35 void apply_preferences(const class Preferences &prefs); 36 37 typedef sigc::signal<void> type_signal_request_update; signal_request_update()38 type_signal_request_update signal_request_update() 39 { 40 return s_signal_request_update; 41 } signal_present_imp()42 type_signal_request_update signal_present_imp() 43 { 44 return s_signal_present_imp; 45 } 46 47 typedef sigc::signal<void, UUID> type_signal_package_select; 48 type_signal_package_select signal_package_select(); 49 50 private: 51 class Canvas3D *canvas = nullptr; 52 const class Board &board; 53 class IPool &pool; 54 const Mode mode; 55 Gtk::Box *main_box = nullptr; 56 Gtk::Revealer *model_loading_revealer = nullptr; 57 Gtk::Spinner *model_loading_spinner = nullptr; 58 Gtk::ProgressBar *model_loading_progress = nullptr; 59 60 Gtk::ColorButton *background_top_color_button = nullptr; 61 Gtk::ColorButton *background_bottom_color_button = nullptr; 62 Gtk::ColorButton *solder_mask_color_button = nullptr; 63 Gtk::ColorButton *silkscreen_color_button = nullptr; 64 Gtk::ColorButton *substrate_color_button = nullptr; 65 Gtk::ComboBoxText *background_color_preset_combo = nullptr; 66 bool setting_background_color_from_preset = false; 67 68 Gtk::RadioButton *proj_persp_rb = nullptr; 69 Gtk::RadioButton *proj_ortho_rb = nullptr; 70 71 Gtk::Revealer *hud_revealer = nullptr; 72 Gtk::Label *hud_label = nullptr; 73 void hud_set_package(const UUID &uu); 74 75 using FnSetColor = void (Canvas3D::*)(const Color &color); 76 void bind_color_button(Gtk::ColorButton *color_button, FnSetColor fn_set, std::function<void(void)> extra_fn); 77 78 WindowStateStore state_store; 79 80 std::map<ActionID, ActionConnection> action_connections; 81 ActionConnection &connect_action(ActionID action_id, std::function<void(const ActionConnection &)> cb); 82 bool handle_action_key(const GdkEventKey *ev); 83 KeySequence keys_current; 84 void trigger_action(ActionID action); 85 86 void handle_pan_action(const ActionConnection &c); 87 void handle_zoom_action(const ActionConnection &c); 88 void handle_rotate_action(const ActionConnection &c); 89 void handle_view_action(const ActionConnection &c); 90 void handle_proj_action(const ActionConnection &c); 91 92 type_signal_request_update s_signal_request_update; 93 type_signal_request_update s_signal_present_imp; 94 }; 95 } // namespace horizon 96