1 #pragma once
2 #include "pool/symbol.hpp"
3 #include <gtkmm.h>
4 #include <utility>
5 #include "util/changeable.hpp"
6 
7 namespace horizon {
8 class SymbolPreviewBox : public Gtk::Box, public Changeable {
9 public:
10     SymbolPreviewBox(const std::pair<int, bool> &view);
11     void update(const Symbol &sym);
12     void zoom_to_fit();
13     std::map<std::tuple<int, bool, UUID>, Placement> get_text_placements() const;
14     void set_text_placements(const std::map<std::tuple<int, bool, UUID>, Placement> &p);
15     void set_canvas_appearance(const class Appearance &a);
16     void set_can_load(bool can_load);
17 
18     typedef sigc::signal<void, int, bool> type_signal_load;
signal_load()19     type_signal_load signal_load()
20     {
21         return s_signal_load;
22     }
23 
24 private:
25     class CanvasGL *canvas = nullptr;
26     Gtk::Button *set_button = nullptr;
27     Gtk::Button *load_button = nullptr;
28     const std::pair<int, bool> view;
29     Symbol symbol;
30     std::map<UUID, Placement> text_placements;
31     void set_placements();
32     void clear_placements();
33     type_signal_load s_signal_load;
34 };
35 } // namespace horizon
36