3 #include "util/changeable.hpp"
6 class ColumnChooser :
public Gtk::Grid,
public Changeable {
10 virtual std::string get_column_name(
int col)
const = 0;
11 virtual std::map<int, std::string> get_column_names()
const = 0;
12 virtual std::vector<int> get_columns()
const = 0;
13 virtual bool has_column(
int col)
const = 0;
14 virtual void include_column(
int col) = 0;
15 virtual void exclude_column(
int col) = 0;
16 virtual void move_column(
int col,
bool up) = 0;
19 ColumnChooser(BaseObjectType *cobject,
const Glib::RefPtr<Gtk::Builder> &x, IAdapter &adap);
20 static ColumnChooser *create(IAdapter &adap);
23 template <
typename T>
class Adapter :
public IAdapter {
25 Adapter(std::vector<T> &cols) : columns(cols)
29 bool has_column(
int col)
const override
31 return std::count(columns.begin(), columns.end(),
static_cast<T
>(col));
34 void include_column(
int col)
override
36 auto c = std::count(columns.begin(), columns.end(),
static_cast<T
>(col));
39 columns.push_back(
static_cast<T
>(col));
42 void exclude_column(
int col)
override
44 auto c = std::count(columns.begin(), columns.end(),
static_cast<T
>(col));
46 columns.erase(std::remove(columns.begin(), columns.end(),
static_cast<T
>(col)), columns.end());
49 void move_column(
int col,
bool up)
override
51 auto it = std::find(columns.begin(), columns.end(),
static_cast<T
>(col));
52 if (it == columns.end())
55 if (up && it == columns.begin())
58 if (!up && it == columns.end() - 1)
61 auto it_other = it + (up ? -1 : +1);
63 std::swap(*it_other, *it);
66 std::vector<int> get_columns()
const override
69 std::transform(columns.begin(), columns.end(), std::back_inserter(r),
70 [](
auto x) { return static_cast<int>(x); });
75 std::vector<T> &columns;
81 class ListColumns :
public Gtk::TreeModelColumnRecord {
85 Gtk::TreeModelColumnRecord::add(name);
86 Gtk::TreeModelColumnRecord::add(column);
88 Gtk::TreeModelColumn<int> column;
89 Gtk::TreeModelColumn<Glib::ustring> name;
91 ListColumns list_columns;
93 Glib::RefPtr<Gtk::ListStore> columns_store;
94 Glib::RefPtr<Gtk::TreeModelFilter> columns_available;
96 Glib::RefPtr<Gtk::ListStore> columns_store_included;
98 Gtk::TreeView *cols_available_tv =
nullptr;
99 Gtk::TreeView *cols_included_tv =
nullptr;
100 Gtk::TreeView *preview_tv =
nullptr;
102 Gtk::Button *col_inc_button =
nullptr;
103 Gtk::Button *col_excl_button =
nullptr;
104 Gtk::Button *col_up_button =
nullptr;
105 Gtk::Button *col_down_button =
nullptr;
107 void incl_excl_col(
bool incl);
108 void up_down_col(
bool up);
109 void update_incl_excl_sensitivity();
110 void update_cols_included();