Horizon
Loading...
Searching...
No Matches
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
14namespace horizon {
15
16class BOMExportWindow : public Gtk::Window, public Changeable {
17 friend class OrderableMPNSelector;
18
19public:
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
31private:
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:
116 using ColumnChooser::Adapter<BOMColumn>::Adapter;
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:15
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