Horizon
bom_export_window.hpp
1 #pragma once
2 #include <array>
3 #include <gtkmm.h>
4 #include <set>
5 #include "util/window_state_store.hpp"
6 #include "block/bom.hpp"
7 #include "util/changeable.hpp"
8 #include "util/export_file_chooser.hpp"
9 #include "pool/pool_parametric.hpp"
10 #include "widgets/column_chooser.hpp"
11 #include "util/uuid.hpp"
12 #include "util/done_revealer_controller.hpp"
13 
14 namespace horizon {
15 
16 class BOMExportWindow : public Gtk::Window, public Changeable {
17  friend class OrderableMPNSelector;
18 
19 public:
20  BOMExportWindow(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &x, class IDocumentSchematic &doc,
21  class BOMExportSettings &settings, class IPool &pool, const std::string &project_dir);
22  static BOMExportWindow *create(Gtk::Window *p, class IDocumentSchematic &doc, class BOMExportSettings &settings,
23  class IPool &pool, const std::string &project_dir);
24 
25  void set_can_export(bool v);
26  void generate();
27  void update_preview();
28  void update_orderable_MPNs();
29  void update();
30 
31 private:
32  class IDocumentSchematic &doc;
33  class BOMExportSettings &settings;
34  class IPool &pool;
35  PoolParametric pool_parametric;
36 
37  void update_concrete_parts();
38 
39  class MyExportFileChooser : public ExportFileChooser {
40  protected:
41  void prepare_chooser(Glib::RefPtr<Gtk::FileChooser> chooser) override;
42  void prepare_filename(std::string &filename) override;
43  };
44  MyExportFileChooser export_filechooser;
45 
46  Gtk::Button *export_button = nullptr;
47  Gtk::CheckButton *nopopulate_check = nullptr;
48  Gtk::ComboBoxText *sort_column_combo = nullptr;
49  Gtk::ComboBoxText *sort_order_combo = nullptr;
50  Gtk::Revealer *done_revealer = nullptr;
51  Gtk::Label *done_label = nullptr;
52  Gtk::Button *done_close_button = nullptr;
53  Gtk::Entry *filename_entry = nullptr;
54  Gtk::Button *filename_button = nullptr;
55  Gtk::ListBox *orderable_MPNs_listbox = nullptr;
56  bool can_export = true;
57  void update_export_button();
58 
59  Gtk::CheckButton *customize_check = nullptr;
60  Gtk::Revealer *customize_revealer = nullptr;
61  Gtk::Grid *customize_grid = nullptr;
62 
63  Glib::RefPtr<Gtk::SizeGroup> sg_manufacturer;
64  Glib::RefPtr<Gtk::SizeGroup> sg_MPN;
65  Glib::RefPtr<Gtk::SizeGroup> sg_orderable_MPN;
66 
67  Gtk::TreeView *meta_parts_tv = nullptr;
68  Gtk::Label *concrete_parts_label = nullptr;
69 
70  class MetaPartsListColumns : public Gtk::TreeModelColumnRecord {
71  public:
72  MetaPartsListColumns()
73  {
74  Gtk::TreeModelColumnRecord::add(MPN);
75  Gtk::TreeModelColumnRecord::add(value);
76  Gtk::TreeModelColumnRecord::add(manufacturer);
77  Gtk::TreeModelColumnRecord::add(qty);
78  Gtk::TreeModelColumnRecord::add(uuid);
79  Gtk::TreeModelColumnRecord::add(concrete_MPN);
80  Gtk::TreeModelColumnRecord::add(concrete_value);
81  Gtk::TreeModelColumnRecord::add(concrete_manufacturer);
82  }
83  Gtk::TreeModelColumn<Glib::ustring> MPN;
84  Gtk::TreeModelColumn<Glib::ustring> value;
85  Gtk::TreeModelColumn<Glib::ustring> manufacturer;
86  Gtk::TreeModelColumn<UUID> uuid;
87  Gtk::TreeModelColumn<unsigned int> qty;
88 
89  Gtk::TreeModelColumn<Glib::ustring> concrete_MPN;
90  Gtk::TreeModelColumn<Glib::ustring> concrete_value;
91  Gtk::TreeModelColumn<Glib::ustring> concrete_manufacturer;
92  };
93  MetaPartsListColumns meta_parts_list_columns;
94 
95  Glib::RefPtr<Gtk::ListStore> meta_parts_store;
96 
97  Gtk::Box *param_browser_box = nullptr;
98  Gtk::RadioButton *rb_tol_10 = nullptr;
99  Gtk::RadioButton *rb_tol_1 = nullptr;
100  Gtk::Button *button_clear_similar = nullptr;
101  Gtk::Button *button_set_similar = nullptr;
102  class PoolBrowserParametric *browser_param = nullptr;
103  UUID meta_part_current;
104  void update_meta_mapping();
105  void handle_set_similar();
106  void update_similar_button_sensitivity();
107 
108  Gtk::TreeView *preview_tv = nullptr;
109 
110  WindowStateStore state_store;
111 
112  ColumnChooser *column_chooser = nullptr;
113 
114  class MyAdapter : public ColumnChooser::Adapter<BOMColumn> {
115  public:
117  std::string get_column_name(int col) const override;
118  std::map<int, std::string> get_column_names() const override;
119  };
120 
121  MyAdapter adapter;
122 
123  DoneRevealerController done_revealer_controller;
124 
125  class ListColumnsPreview : public Gtk::TreeModelColumnRecord {
126  public:
127  ListColumnsPreview()
128  {
129  Gtk::TreeModelColumnRecord::add(row);
130  }
131  Gtk::TreeModelColumn<BOMRow> row;
132  };
133  ListColumnsPreview list_columns_preview;
134 
135  Glib::RefPtr<Gtk::ListStore> bom_store;
136 };
137 } // namespace horizon
Definition: bom_export_settings.hpp:12
Definition: bom_export_window.hpp:16
Definition: changeable.hpp:5
Definition: column_chooser.hpp:23
Definition: column_chooser.hpp:6
Definition: done_revealer_controller.hpp:5
Definition: export_file_chooser.hpp:7
Definition: idocument_schematic.hpp:6
Definition: ipool.hpp:14
Definition: bom_export_window.cpp:289
Definition: pool_browser_parametric.hpp:7
Definition: pool_parametric.hpp:10
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16
Definition: window_state_store.hpp:25