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 13 namespace horizon { 14 15 class BOMExportWindow : public Gtk::Window, public Changeable { 16 friend class OrderableMPNSelector; 17 18 public: 19 BOMExportWindow(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &x, class Block &block, 20 class BOMExportSettings &settings, class IPool &pool, const std::string &project_dir); 21 static BOMExportWindow *create(Gtk::Window *p, class Block &block, class BOMExportSettings &settings, 22 class IPool &pool, const std::string &project_dir); 23 24 void set_can_export(bool v); 25 void generate(); 26 void update_preview(); 27 void update_orderable_MPNs(); 28 void update(); 29 30 private: 31 class Block █ 32 class BOMExportSettings &settings; 33 class IPool &pool; 34 PoolParametric pool_parametric; 35 36 void update_concrete_parts(); 37 38 class MyExportFileChooser : public ExportFileChooser { 39 protected: 40 void prepare_chooser(Glib::RefPtr<Gtk::FileChooser> chooser) override; 41 void prepare_filename(std::string &filename) override; 42 }; 43 MyExportFileChooser export_filechooser; 44 45 Gtk::Button *export_button = nullptr; 46 Gtk::CheckButton *nopopulate_check = nullptr; 47 Gtk::ComboBoxText *sort_column_combo = nullptr; 48 Gtk::ComboBoxText *sort_order_combo = nullptr; 49 Gtk::Revealer *done_revealer = nullptr; 50 Gtk::Label *done_label = nullptr; 51 Gtk::Entry *filename_entry = nullptr; 52 Gtk::Button *filename_button = nullptr; 53 Gtk::ListBox *orderable_MPNs_listbox = nullptr; 54 bool can_export = true; 55 void update_export_button(); 56 57 Glib::RefPtr<Gtk::SizeGroup> sg_manufacturer; 58 Glib::RefPtr<Gtk::SizeGroup> sg_MPN; 59 Glib::RefPtr<Gtk::SizeGroup> sg_orderable_MPN; 60 61 Gtk::TreeView *meta_parts_tv = nullptr; 62 Gtk::Label *concrete_parts_label = nullptr; 63 64 class MetaPartsListColumns : public Gtk::TreeModelColumnRecord { 65 public: MetaPartsListColumns()66 MetaPartsListColumns() 67 { 68 Gtk::TreeModelColumnRecord::add(MPN); 69 Gtk::TreeModelColumnRecord::add(value); 70 Gtk::TreeModelColumnRecord::add(manufacturer); 71 Gtk::TreeModelColumnRecord::add(qty); 72 Gtk::TreeModelColumnRecord::add(uuid); 73 Gtk::TreeModelColumnRecord::add(concrete_MPN); 74 Gtk::TreeModelColumnRecord::add(concrete_value); 75 Gtk::TreeModelColumnRecord::add(concrete_manufacturer); 76 } 77 Gtk::TreeModelColumn<Glib::ustring> MPN; 78 Gtk::TreeModelColumn<Glib::ustring> value; 79 Gtk::TreeModelColumn<Glib::ustring> manufacturer; 80 Gtk::TreeModelColumn<UUID> uuid; 81 Gtk::TreeModelColumn<unsigned int> qty; 82 83 Gtk::TreeModelColumn<Glib::ustring> concrete_MPN; 84 Gtk::TreeModelColumn<Glib::ustring> concrete_value; 85 Gtk::TreeModelColumn<Glib::ustring> concrete_manufacturer; 86 }; 87 MetaPartsListColumns meta_parts_list_columns; 88 89 Glib::RefPtr<Gtk::ListStore> meta_parts_store; 90 91 Gtk::Box *param_browser_box = nullptr; 92 Gtk::RadioButton *rb_tol_10 = nullptr; 93 Gtk::RadioButton *rb_tol_1 = nullptr; 94 Gtk::Button *button_clear_similar = nullptr; 95 Gtk::Button *button_set_similar = nullptr; 96 class PoolBrowserParametric *browser_param = nullptr; 97 UUID meta_part_current; 98 void update_meta_mapping(); 99 void handle_set_similar(); 100 void update_similar_button_sensitivity(); 101 102 Gtk::TreeView *preview_tv = nullptr; 103 104 WindowStateStore state_store; 105 106 ColumnChooser *column_chooser = nullptr; 107 108 class MyAdapter : public ColumnChooser::Adapter<BOMColumn> { 109 public: 110 using ColumnChooser::Adapter<BOMColumn>::Adapter; 111 std::string get_column_name(int col) const override; 112 std::map<int, std::string> get_column_names() const override; 113 }; 114 115 MyAdapter adapter; 116 117 void flash(const std::string &s); 118 sigc::connection flash_connection; 119 120 class ListColumnsPreview : public Gtk::TreeModelColumnRecord { 121 public: ListColumnsPreview()122 ListColumnsPreview() 123 { 124 Gtk::TreeModelColumnRecord::add(row); 125 } 126 Gtk::TreeModelColumn<BOMRow> row; 127 }; 128 ListColumnsPreview list_columns_preview; 129 130 Glib::RefPtr<Gtk::ListStore> bom_store; 131 }; 132 } // namespace horizon 133