diff --git a/gtk2_ardour/mixer_snapshot_dialog.cc b/gtk2_ardour/mixer_snapshot_dialog.cc index 5a5be2d430..f7d71bf043 100644 --- a/gtk2_ardour/mixer_snapshot_dialog.cc +++ b/gtk2_ardour/mixer_snapshot_dialog.cc @@ -262,6 +262,21 @@ bool MixerSnapshotDialog::bootstrap_display_and_model(Gtkmm2ext::DnDTreeViewset_sort_column(6, SORT_DESCENDING); + //new stuff - see TODO + display.append_column(_("EQ"), _columns.recall_eq); // col 8 + display.append_column(_("Comp"), _columns.recall_comp); + display.append_column(_("I/O"), _columns.recall_io); + display.append_column(_("Groups"), _columns.recall_groups); + display.append_column(_("VCAs"), _columns.recall_vcas); //col 12 + + // TODO make this a vector + for(int i = 8; i <= 12; i++) { + CellRendererToggle* cell = dynamic_cast(display.get_column_cell_renderer(i)); + cell->property_activatable() = true; + cell->property_radio() = true; + cell->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &MixerSnapshotDialog::recall_flag_cell_action), global, i)); + } + display.set_headers_visible(true); display.set_headers_clickable(true); display.set_reorderable(false); @@ -469,6 +484,12 @@ void MixerSnapshotDialog::refill() row[_columns.date] = gdt.format ("%F %H:%M"); row[_columns.full_path] = path; row[_columns.snapshot] = snap; + + row[_columns.recall_eq] = snap->recall_eq(); + row[_columns.recall_comp] = snap->recall_comp(); + row[_columns.recall_io] = snap->recall_io(); + row[_columns.recall_groups] = snap->recall_group(); + row[_columns.recall_vcas] = snap->recall_vca(); } local_model->clear(); @@ -506,6 +527,12 @@ void MixerSnapshotDialog::refill() row[_columns.date] = gdt.format ("%F %H:%M"); row[_columns.full_path] = path; row[_columns.snapshot] = snap; + + row[_columns.recall_eq] = snap->recall_eq(); + row[_columns.recall_comp] = snap->recall_comp(); + row[_columns.recall_io] = snap->recall_io(); + row[_columns.recall_groups] = snap->recall_group(); + row[_columns.recall_vcas] = snap->recall_vca(); } } @@ -524,4 +551,50 @@ void MixerSnapshotDialog::fav_cell_action(const string& path, bool global) (*iter)[_columns.favorite] = snap->get_favorite(); snap->write((*iter)[_columns.full_path]); } +} + +void MixerSnapshotDialog::recall_flag_cell_action(const std::string& path, bool global, int col_index) +{ + TreeModel::iterator iter; + if(global) { + iter = global_model->get_iter(path); + } else { + iter = local_model->get_iter(path); + } + + if(iter) { + MixerSnapshot* snap = (*iter)[_columns.snapshot]; + + switch (col_index) + { + case 8: + snap->set_recall_eq(!snap->recall_eq()); + (*iter)[_columns.recall_eq] = snap->recall_eq(); + break; + + case 9: + snap->set_recall_comp(!snap->recall_comp()); + (*iter)[_columns.recall_comp] = snap->recall_comp(); + break; + + case 10: + snap->set_recall_io(!snap->recall_io()); + (*iter)[_columns.recall_io] = snap->recall_io(); + break; + + case 11: + snap->set_recall_group(!snap->recall_group()); + (*iter)[_columns.recall_groups] = snap->recall_group(); + break; + + case 12: + snap->set_recall_vca(!snap->recall_vca()); + (*iter)[_columns.recall_vcas] = snap->recall_vca(); + break; + + default: + break; + } + snap->write((*iter)[_columns.full_path]); + } } \ No newline at end of file diff --git a/gtk2_ardour/mixer_snapshot_dialog.h b/gtk2_ardour/mixer_snapshot_dialog.h index 487119cfe7..74b6ba2035 100644 --- a/gtk2_ardour/mixer_snapshot_dialog.h +++ b/gtk2_ardour/mixer_snapshot_dialog.h @@ -64,6 +64,7 @@ class MixerSnapshotDialog : public ArdourWindow bool button_press(GdkEventButton*, bool); void window_opened(); void fav_cell_action(const std::string&, bool); + void recall_flag_cell_action(const std::string&, bool, int); struct MixerSnapshotColumns : public Gtk::TreeModel::ColumnRecord { @@ -79,6 +80,11 @@ class MixerSnapshotDialog : public ArdourWindow add (timestamp); add (full_path); add (snapshot); + add (recall_eq); + add (recall_comp); + add (recall_io); + add (recall_groups); + add (recall_vcas); } Gtk::TreeModelColumn favorite; Gtk::TreeModelColumn name; @@ -91,6 +97,11 @@ class MixerSnapshotDialog : public ArdourWindow Gtk::TreeModelColumn timestamp; Gtk::TreeModelColumn full_path; Gtk::TreeModelColumn snapshot; + Gtk::TreeModelColumn recall_eq; + Gtk::TreeModelColumn recall_comp; + Gtk::TreeModelColumn recall_io; + Gtk::TreeModelColumn recall_groups; + Gtk::TreeModelColumn recall_vcas; }; MixerSnapshotColumns _columns; diff --git a/libs/ardour/ardour/mixer_snapshot.h b/libs/ardour/ardour/mixer_snapshot.h index 345a384f5f..5fa89890f3 100644 --- a/libs/ardour/ardour/mixer_snapshot.h +++ b/libs/ardour/ardour/mixer_snapshot.h @@ -73,11 +73,11 @@ class LIBARDOUR_API MixerSnapshot std::vector get_groups() {return group_states;}; std::vector get_vcas() {return vca_states;}; - bool recall_eq() { return _flags & RecallEQ;}; - bool recall_comp() { return _flags & RecallComp;}; - bool recall_io() { return _flags & RecallIO;}; - bool recall_group() { return _flags & RecallGroup;}; - bool recall_vca() { return _flags & RecallVCA;}; + bool recall_eq() const { return _flags & RecallEQ;}; + bool recall_comp() const { return _flags & RecallComp;}; + bool recall_io() const { return _flags & RecallIO;}; + bool recall_group() const { return _flags & RecallGroup;}; + bool recall_vca() const { return _flags & RecallVCA;}; void set_recall_eq(bool); void set_recall_comp(bool); diff --git a/libs/ardour/mixer_snapshot.cc b/libs/ardour/mixer_snapshot.cc index 8d7c962f03..673798ca71 100644 --- a/libs/ardour/mixer_snapshot.cc +++ b/libs/ardour/mixer_snapshot.cc @@ -361,10 +361,6 @@ void MixerSnapshot::write(const string path) return; } - set_recall_eq(true); - set_recall_io(true); - set_recall_vca(true); - XMLNode* node = new XMLNode("MixerSnapshot"); node->set_property(X_("flags"), _flags); node->set_property(X_("favorite"), favorite);