Horizon
pool_browser_parametric.hpp
1 #pragma once
2 #include "pool_browser_stockinfo.hpp"
3 #include "pool/pool_parametric.hpp"
4 #include "util/stock_info_provider.hpp"
5 
6 namespace horizon {
7 class PoolBrowserParametric : public PoolBrowserStockinfo {
8 public:
9  class FilterAppliedLabel;
10  friend FilterAppliedLabel;
11  PoolBrowserParametric(class IPool &p, class PoolParametric &pp, const std::string &table_name);
12  void search() override;
13  ObjectType get_type() const override
14  {
15  return ObjectType::PART;
16  }
17  void add_copy_name_context_menu_item() override;
18  void set_similar_part_uuid(const UUID &uu);
19  void filter_similar(const UUID &uu, float tol = .1);
20 
21 protected:
22  Glib::RefPtr<Gtk::ListStore> create_list_store() override;
23  void create_columns() override;
24  void add_sort_controller_columns() override;
25  UUID uuid_from_row(const Gtk::TreeModel::Row &row) override;
26  PoolItemSource pool_item_source_from_row(const Gtk::TreeModel::Row &row) override;
27  Gtk::TreeModelColumn<std::shared_ptr<StockInfoRecord>> &get_stock_info_column() override;
28 
29 private:
30  class PoolParametric &pool_parametric;
31  const PoolParametric::Table &table;
32  std::map<std::string, std::reference_wrapper<const PoolParametric::Column>> columns;
33  UUID similar_part_uuid;
34 
35  class ListColumns : public Gtk::TreeModelColumnRecord {
36  public:
37  ListColumns(const PoolParametric::Table &table)
38  {
39  Gtk::TreeModelColumnRecord::add(MPN);
40  Gtk::TreeModelColumnRecord::add(manufacturer);
41  Gtk::TreeModelColumnRecord::add(package);
42  Gtk::TreeModelColumnRecord::add(uuid);
43  Gtk::TreeModelColumnRecord::add(path);
44  Gtk::TreeModelColumnRecord::add(source);
45  for (const auto &col : table.columns) {
46  Gtk::TreeModelColumnRecord::add(params[col.name]);
47  }
48  Gtk::TreeModelColumnRecord::add(stock_info);
49  }
50  Gtk::TreeModelColumn<Glib::ustring> MPN;
51  Gtk::TreeModelColumn<Glib::ustring> manufacturer;
52  Gtk::TreeModelColumn<Glib::ustring> package;
53  Gtk::TreeModelColumn<Glib::ustring> path;
54  Gtk::TreeModelColumn<UUID> uuid;
55  Gtk::TreeModelColumn<PoolItemSource> source;
56  std::map<std::string, Gtk::TreeModelColumn<std::string>> params;
57  Gtk::TreeModelColumn<std::shared_ptr<StockInfoRecord>> stock_info;
58  };
59  ListColumns list_columns;
60 
61  Gtk::Box *search_box = nullptr;
62  Gtk::Box *filters_applied_box = nullptr;
63  std::map<std::string, std::set<std::string>> values_remaining;
64  std::map<std::string, std::set<std::string>> filters_applied;
65  std::map<std::string, class ParametricFilterBox *> filter_boxes;
66  void apply_filters();
67  void update_filters();
68  void update_filters_applied();
69  void remove_filter(const std::string &col);
70 };
71 } // namespace horizon
libzip::source
std::function< struct zip_source *(struct zip *)> source
Source creation for adding files.
Definition: zip.hpp:122