diff options
-rw-r--r-- | gtk2_ardour/mixer_ui.cc | 38 | ||||
-rw-r--r-- | gtk2_ardour/vca_master_strip.cc | 16 | ||||
-rw-r--r-- | gtk2_ardour/vca_master_strip.h | 2 |
3 files changed, 35 insertions, 21 deletions
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index dbe08e34ff..55eaee74b3 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -249,7 +249,7 @@ Mixer_UI::Mixer_UI () Gtk::HBox* vca_top_padding = manage (new Gtk::HBox); vca_top_padding->set_size_request (-1, 2); vca_vpacker.pack_start (*vca_top_padding, false, false); - + vca_label.set_text (vca_text); vca_label_bar.set_size_request (-1, 16); /* must match height in GroupTabs::set_size_request() */ @@ -537,7 +537,7 @@ Mixer_UI::add_stripables (StripableList& slist) TreeModel::Row row = *(track_model->append()); row[stripable_columns.text] = vca->name(); - row[stripable_columns.visible] = !vca->presentation_info().hidden(); + row[stripable_columns.visible] = vms->marked_for_display (); row[stripable_columns.strip] = vms; row[stripable_columns.stripable] = vca; @@ -981,14 +981,12 @@ Mixer_UI::track_visibility_changed (std::string const & path) TreeIter iter; if ((iter = track_model->get_iter (path))) { + AxisView* av = (*iter)[stripable_columns.strip]; - MixerStrip* strip = dynamic_cast<MixerStrip*> (av); - if (strip) { - bool visible = (*iter)[stripable_columns.visible]; + bool visible = (*iter)[stripable_columns.visible]; - if (strip->set_marked_for_display (!visible)) { - update_track_visibility (); - } + if (av->set_marked_for_display (!visible)) { + update_track_visibility (); } } } @@ -1004,10 +1002,7 @@ Mixer_UI::update_track_visibility () for (i = rows.begin(); i != rows.end(); ++i) { AxisView* av = (*i)[stripable_columns.strip]; - MixerStrip* strip = dynamic_cast<MixerStrip*> (av); - if (strip) { - (*i)[stripable_columns.visible] = strip->marked_for_display (); - } + (*i)[stripable_columns.visible] = av->marked_for_display (); } /* force presentation catch up with visibility changes @@ -1208,7 +1203,6 @@ Mixer_UI::hide_all_miditracks () set_all_audio_midi_visibility (3, false); } - void Mixer_UI::track_list_reorder (const TreeModel::Path&, const TreeModel::iterator&, int* /*new_order*/) { @@ -1301,6 +1295,8 @@ Mixer_UI::redisplay_track_list () for (i = rows.begin(); i != rows.end(); ++i) { AxisView* s = (*i)[stripable_columns.strip]; + bool const visible = (*i)[stripable_columns.visible]; + boost::shared_ptr<Stripable> stripable = (*i)[stripable_columns.stripable]; if (!s) { /* we're in the middle of changing a row, don't worry */ @@ -1310,9 +1306,11 @@ Mixer_UI::redisplay_track_list () VCAMasterStrip* vms; if ((vms = dynamic_cast<VCAMasterStrip*> (s))) { - vca_hpacker.pack_start (*vms, false, false); - vms->show (); - n_masters++; + if (visible) { + vca_hpacker.pack_start (*vms, false, false); + vms->show (); + n_masters++; + } continue; } @@ -1322,13 +1320,11 @@ Mixer_UI::redisplay_track_list () continue; } - bool const visible = (*i)[stripable_columns.visible]; - if (visible) { if (strip->packed()) { - if (strip->route()->is_master() || strip->route()->is_monitor()) { + if (stripable->is_master() || stripable->is_monitor()) { out_packer.reorder_child (*strip, -1); } else { @@ -1337,7 +1333,7 @@ Mixer_UI::redisplay_track_list () } else { - if (strip->route()->is_master() || strip->route()->is_monitor()) { + if (stripable->is_master() || stripable->is_monitor()) { out_packer.pack_start (*strip, false, false); } else { strip_packer.pack_start (*strip, false, false); @@ -1347,7 +1343,7 @@ Mixer_UI::redisplay_track_list () } else { - if (strip->route()->is_master() || strip->route()->is_monitor()) { + if (stripable->is_master() || stripable->is_monitor()) { /* do nothing, these cannot be hidden */ } else { if (strip->packed()) { diff --git a/gtk2_ardour/vca_master_strip.cc b/gtk2_ardour/vca_master_strip.cc index 4ef1e4adaf..7dce146694 100644 --- a/gtk2_ardour/vca_master_strip.cc +++ b/gtk2_ardour/vca_master_strip.cc @@ -500,3 +500,19 @@ VCAMasterStrip::finish_color_edit (int response, Gtk::ColorSelectionDialog* dial delete_when_idle (dialog); } + +bool +VCAMasterStrip::marked_for_display () const +{ + return !_vca->presentation_info().hidden(); +} + +bool +VCAMasterStrip::set_marked_for_display (bool yn) +{ + if (yn == _vca->presentation_info().hidden()) { + _vca->presentation_info().set_hidden (!yn); + return true; // things changed + } + return false; +} diff --git a/gtk2_ardour/vca_master_strip.h b/gtk2_ardour/vca_master_strip.h index 7d1edf1acd..bca74fded0 100644 --- a/gtk2_ardour/vca_master_strip.h +++ b/gtk2_ardour/vca_master_strip.h @@ -49,6 +49,8 @@ class VCAMasterStrip : public AxisView, public Gtk::EventBox static PBD::Signal1<void,VCAMasterStrip*> CatchDeletion; + bool marked_for_display () const; + bool set_marked_for_display (bool); private: boost::shared_ptr<ARDOUR::VCA> _vca; |