From 99d251de7d36d074f36ba5e8b549b0bf6a39016b Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sat, 27 Feb 2016 22:16:37 -0500 Subject: first pass at making the GUI for a VCA visible --- gtk2_ardour/ardour_ui.cc | 13 +++++++- gtk2_ardour/ardour_ui.h | 2 ++ gtk2_ardour/mixer_group_tabs.cc | 14 +++++++-- gtk2_ardour/mixer_ui.cc | 68 ++++++++++++++++++++++++++++++++++++++--- gtk2_ardour/mixer_ui.h | 28 +++++++++++------ 5 files changed, 107 insertions(+), 18 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 6bfd9d6be0..2b37ad8c3d 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -92,6 +92,7 @@ #include "ardour/source_factory.h" #include "ardour/slave.h" #include "ardour/system_exec.h" +#include "ardour/vca_manager.h" #include "LuaBridge/LuaBridge.h" @@ -1796,6 +1797,16 @@ ARDOUR_UI::open_session () } } +void +ARDOUR_UI::session_add_vca (const string& name_template) +{ + if (!_session) { + return; + } + + _session->vca_manager().create_vca (name_template); +} + void ARDOUR_UI::session_add_mixed_track ( const ChanCount& input, @@ -4035,7 +4046,7 @@ ARDOUR_UI::add_route () session_add_midi_bus (route_group, count, name_template, strict_io, instrument, 0); break; case AddRouteDialog::VCAMaster: - /* do something */ + session_add_vca (name_template); break; } } diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 2d20500171..cf6b400738 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -271,6 +271,8 @@ public: void flush_videotimeline_cache (bool localcacheonly=false); void export_video (bool range = false); + void session_add_vca (std::string const &); + void session_add_audio_track ( int input_channels, int32_t output_channels, diff --git a/gtk2_ardour/mixer_group_tabs.cc b/gtk2_ardour/mixer_group_tabs.cc index f84c53b8e1..bccf649b42 100644 --- a/gtk2_ardour/mixer_group_tabs.cc +++ b/gtk2_ardour/mixer_group_tabs.cc @@ -63,6 +63,10 @@ MixerGroupTabs::compute_tabs () const MixerStrip* s = (*i)[_mixer->track_columns.strip]; + if (!s) { + continue; + } + if (s->route()->is_master() || s->route()->is_monitor() || !s->marked_for_display()) { continue; } @@ -151,9 +155,13 @@ MixerGroupTabs::routes_for_tab (Tab const * t) const MixerStrip* s = (*i)[_mixer->track_columns.strip]; - if (s->route()->is_master() || s->route()->is_monitor() || !s->marked_for_display()) { - continue; - } + if (!s) { + continue; + } + + if (s->route()->is_master() || s->route()->is_monitor() || !s->marked_for_display()) { + continue; + } if (x >= t->to) { /* tab finishes before this track starts */ diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index e5c1d5a08a..5e45b9338c 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -47,6 +47,8 @@ #include "ardour/route_group.h" #include "ardour/route_sorters.h" #include "ardour/session.h" +#include "ardour/vca.h" +#include "ardour/vca_manager.h" #include "keyboard.h" #include "mixer_ui.h" @@ -63,6 +65,7 @@ #include "mixer_group_tabs.h" #include "timers.h" #include "ui_config.h" +#include "vca_master_strip.h" #include "i18n.h" @@ -350,6 +353,9 @@ Mixer_UI::show_window () for (ri = rows.begin(); ri != rows.end(); ++ri) { ms = (*ri)[track_columns.strip]; + if (!ms) { + continue; + } ms->set_width_enum (ms->get_width_enum (), ms->width_owner()); /* Fix visibility of mixer strip stuff */ ms->parameter_changed (X_("mixer-element-visibility")); @@ -359,6 +365,29 @@ Mixer_UI::show_window () scroller_base.grab_focus (); } +void +Mixer_UI::add_masters (VCAList& vcas) +{ + cerr << "VCA added\n"; + + for (VCAList::iterator v = vcas.begin(); v != vcas.end(); ++v) { + + VCAMasterStrip* vms = new VCAMasterStrip (_session, *v); + + TreeModel::Row row = *(track_model->append()); + row[track_columns.text] = (*v)->name(); + row[track_columns.visible] = true; + row[track_columns.vca] = vms; + } + + redisplay_track_list (); +} + +void +Mixer_UI::remove_master (VCAMasterStrip* vms) +{ +} + void Mixer_UI::add_strips (RouteList& routes) { @@ -368,6 +397,10 @@ Mixer_UI::add_strips (RouteList& routes) for (Gtk::TreeModel::Children::iterator it = track_model->children().begin(); it != track_model->children().end(); ++it) { boost::shared_ptr r = (*it)[track_columns.route]; + if (!r) { + continue; + } + if (r->order_key() == (routes.front()->order_key() + routes.size())) { insert_iter = it; break; @@ -434,6 +467,7 @@ Mixer_UI::add_strips (RouteList& routes) row[track_columns.visible] = strip->route()->is_master() ? true : strip->marked_for_display(); row[track_columns.route] = route; row[track_columns.strip] = strip; + row[track_columns.vca] = 0; if (!from_scratch) { _selection.add (strip); @@ -540,6 +574,10 @@ Mixer_UI::reset_remote_control_ids () boost::shared_ptr route = (*ri)[track_columns.route]; bool visible = (*ri)[track_columns.visible]; + if (!route) { + continue; + } + if (!route->is_master() && !route->is_monitor()) { uint32_t new_rid = (visible ? rid : invisible_key--); @@ -587,6 +625,10 @@ Mixer_UI::sync_order_keys_from_treeview () boost::shared_ptr route = (*ri)[track_columns.route]; bool visible = (*ri)[track_columns.visible]; + if (!route) { + continue; + } + uint32_t old_key = route->order_key (); if (order != old_key) { @@ -650,6 +692,9 @@ Mixer_UI::sync_treeview_from_order_keys () for (TreeModel::Children::iterator ri = rows.begin(); ri != rows.end(); ++ri, ++old_order) { boost::shared_ptr route = (*ri)[track_columns.route]; + if (!route) { + continue; + } sorted_routes.push_back (RoutePlusOrderKey (route, old_order, route->order_key ())); } @@ -826,6 +871,8 @@ Mixer_UI::set_session (Session* sess) _session->DirtyChanged.connect (_session_connections, invalidator (*this), boost::bind (&Mixer_UI::update_title, this), gui_context()); _session->StateSaved.connect (_session_connections, invalidator (*this), boost::bind (&Mixer_UI::update_title, this), gui_context()); + _session->vca_manager().VCAAdded.connect (_session_connections, invalidator (*this), boost::bind (&Mixer_UI::add_masters, this, _1), gui_context()); + Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::parameter_changed, this, _1), gui_context ()); route_groups_changed (); @@ -900,7 +947,9 @@ Mixer_UI::update_track_visibility () for (i = rows.begin(); i != rows.end(); ++i) { MixerStrip *strip = (*i)[track_columns.strip]; - (*i)[track_columns.visible] = strip->marked_for_display (); + if (strip) { + (*i)[track_columns.visible] = strip->marked_for_display (); + } } /* force route order keys catch up with visibility changes @@ -984,7 +1033,7 @@ Mixer_UI::set_all_strips_visibility (bool yn) TreeModel::Row row = (*i); MixerStrip* strip = row[track_columns.strip]; - if (strip == 0) { + if (!strip) { continue; } @@ -1013,7 +1062,7 @@ Mixer_UI::set_all_audio_midi_visibility (int tracks, bool yn) TreeModel::Row row = (*i); MixerStrip* strip = row[track_columns.strip]; - if (strip == 0) { + if (!strip) { continue; } @@ -1134,11 +1183,22 @@ Mixer_UI::redisplay_track_list () return; } + container_clear (vca_packer); + for (i = rows.begin(); i != rows.end(); ++i) { + VCAMasterStrip* vms = (*i)[track_columns.vca]; + + if (vms) { + vca_packer.pack_start (*vms, false, false); + vms->show (); + cerr << "Packed vca into vca_packer\n"; + continue; + } + MixerStrip* strip = (*i)[track_columns.strip]; - if (strip == 0) { + if (!strip) { /* we're in the middle of changing a row, don't worry */ continue; } diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h index a397852c5d..198d510a14 100644 --- a/gtk2_ardour/mixer_ui.h +++ b/gtk2_ardour/mixer_ui.h @@ -60,6 +60,7 @@ class MixerStrip; class PluginSelector; class MixerGroupTabs; class MonitorSection; +class VCAMasterStrip; class PluginTreeStore : public Gtk::TreeStore { @@ -162,6 +163,9 @@ class Mixer_UI : public Gtkmm2ext::Tabbable, public PBD::ScopedConnectionList, p void add_strips (ARDOUR::RouteList&); void remove_strip (MixerStrip *); + void add_masters (ARDOUR::VCAList&); + void remove_master (VCAMasterStrip*); + MixerStrip* strip_by_route (boost::shared_ptr); void hide_all_strips (bool with_select); @@ -256,16 +260,20 @@ class Mixer_UI : public Gtkmm2ext::Tabbable, public PBD::ScopedConnectionList, p /* various treeviews */ struct TrackDisplayModelColumns : public Gtk::TreeModel::ColumnRecord { - TrackDisplayModelColumns () { - add (text); - add (visible); - add (route); - add (strip); - } - Gtk::TreeModelColumn visible; - Gtk::TreeModelColumn text; - Gtk::TreeModelColumn > route; - Gtk::TreeModelColumn strip; + TrackDisplayModelColumns () { + add (text); + add (visible); + add (route); + add (strip); + add (vca); + } + Gtk::TreeModelColumn visible; + Gtk::TreeModelColumn text; + Gtk::TreeModelColumn > route; + /* if route is non-null, this must be non-null */ + Gtk::TreeModelColumn strip; + /* if route is null, this may be non-null */ + Gtk::TreeModelColumn vca; }; struct GroupDisplayModelColumns : public Gtk::TreeModel::ColumnRecord { -- cgit v1.2.3