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 {
8 public:
9  class FilterAppliedLabel;
10  friend FilterAppliedLabel;
11  PoolBrowserParametric(class IPool &p, class PoolParametric &pp, const std::string &table_name,
12  const std::string &instance = "");
13  void search() override;
14  ObjectType get_type() const override
15  {
16  return ObjectType::PART;
17  }
18  void add_copy_name_context_menu_item() override;
19  void set_similar_part_uuid(const UUID &uu);
20  void set_entity_uuid(const UUID &uu);
21  void filter_similar(const UUID &uu, float tol = .1);
22 
23 protected:
24  Glib::RefPtr<Gtk::ListStore> create_list_store() override;
25  void create_columns() override;
26  void add_sort_controller_columns() override;
27  UUID uuid_from_row(const Gtk::TreeModel::Row &row) override;
28  PoolItemSource pool_item_source_from_row(const Gtk::TreeModel::Row &row) override;
29  Gtk::TreeModelColumn<std::shared_ptr<StockInfoRecord>> &get_stock_info_column() override;
30 
31 private:
32  class PoolParametric &pool_parametric;
33  const PoolParametric::Table &table;
34  std::map<std::string, std::reference_wrapper<const PoolParametric::Column>> columns;
35  UUID similar_part_uuid;
36  UUID entity_uuid;
37 
38  class ListColumns : public Gtk::TreeModelColumnRecord {
39  public:
40  ListColumns(const PoolParametric::Table &table)
41  {
42  Gtk::TreeModelColumnRecord::add(MPN);
43  Gtk::TreeModelColumnRecord::add(manufacturer);
44  Gtk::TreeModelColumnRecord::add(package);
45  Gtk::TreeModelColumnRecord::add(uuid);
46  Gtk::TreeModelColumnRecord::add(path);
47  Gtk::TreeModelColumnRecord::add(source);
48  for (const auto &col : table.columns) {
49  Gtk::TreeModelColumnRecord::add(params[col.name]);
50  }
51  Gtk::TreeModelColumnRecord::add(stock_info);
52  }
53  Gtk::TreeModelColumn<Glib::ustring> MPN;
54  Gtk::TreeModelColumn<Glib::ustring> manufacturer;
55  Gtk::TreeModelColumn<Glib::ustring> package;
56  Gtk::TreeModelColumn<Glib::ustring> path;
57  Gtk::TreeModelColumn<UUID> uuid;
58  Gtk::TreeModelColumn<PoolItemSource> source;
59  std::map<std::string, Gtk::TreeModelColumn<std::string>> params;
60  Gtk::TreeModelColumn<std::shared_ptr<StockInfoRecord>> stock_info;
61  };
62  ListColumns list_columns;
63 
64  Gtk::Box *search_box = nullptr;
65  Gtk::Box *filters_applied_box = nullptr;
66  std::map<std::string, std::set<std::string>> values_remaining;
67  std::map<std::string, std::set<std::string>> filters_applied;
68  std::map<std::string, class ParametricFilterBox *> filter_boxes;
69  void apply_filters();
70  void update_filters();
71  void update_filters_applied();
72  void remove_filter(const std::string &col);
73 };
74 } // namespace horizon
Definition: ipool.hpp:14
Definition: pool_browser_parametric.cpp:482
Definition: pool_browser_parametric.hpp:7
Definition: pool_browser_stockinfo.hpp:7
Definition: pool_parametric.hpp:33
Definition: pool_parametric.hpp:10
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16