Horizon
multi_item_selector.hpp
1 #pragma once
2 #include <gtkmm.h>
3 #include "util/uuid.hpp"
4 #include "util/changeable.hpp"
5 #include <set>
6 
7 namespace horizon {
8 class MultiItemSelector : public Gtk::Grid, public Changeable {
9 public:
11  void select_items(const std::set<UUID> &nets);
12  std::set<UUID> get_selected_items() const;
13 
14  virtual void update() = 0;
15 
16 protected:
17  class ListColumns : public Gtk::TreeModelColumnRecord {
18  public:
19  ListColumns()
20  {
21  Gtk::TreeModelColumnRecord::add(name);
22  Gtk::TreeModelColumnRecord::add(uuid);
23  }
24  Gtk::TreeModelColumn<Glib::ustring> name;
25  Gtk::TreeModelColumn<UUID> uuid;
26  };
27  ListColumns list_columns;
28 
29  Glib::RefPtr<Gtk::ListStore> store;
30 
31  virtual std::string get_column_heading() const = 0;
32  void construct();
33 
34 private:
35  std::set<UUID> items_selected;
36 
37 
38  Gtk::TreeView *view_available = nullptr;
39  Gtk::TreeView *view_selected = nullptr;
40 
41  Gtk::Widget *make_listview(Gtk::TreeView *&view, Glib::RefPtr<Gtk::TreeModelSort> &store);
42 
43  Gtk::Button *button_include = nullptr;
44  Gtk::Button *button_exclude = nullptr;
45 
46  Glib::RefPtr<Gtk::TreeModelFilter> filter_available;
47  Glib::RefPtr<Gtk::TreeModelSort> sort_available;
48 
49  Glib::RefPtr<Gtk::TreeModelFilter> filter_selected;
50  Glib::RefPtr<Gtk::TreeModelSort> sort_selected;
51 
52  Glib::RefPtr<Gtk::SizeGroup> sg_views;
53 };
54 } // namespace horizon
Definition: changeable.hpp:5
Definition: multi_item_selector.hpp:17
Definition: multi_item_selector.hpp:8