set midi-metric ticks depending on meter-type
[ardour.git] / gtk2_ardour / audio_time_axis.cc
index 6772f7b9fab008ef678e8e08127f6d939e8188e7..bf980690aaecf6e1b40f6900a295a5fa6e67bcf6 100644 (file)
 #include <gtkmm2ext/bindable_button.h>
 #include <gtkmm2ext/utils.h>
 
-#include "ardour/amp.h"
-#include "ardour/audioplaylist.h"
 #include "ardour/event_type_map.h"
-#include "ardour/location.h"
 #include "ardour/pannable.h"
 #include "ardour/panner.h"
 #include "ardour/panner_shell.h"
-#include "ardour/playlist.h"
-#include "ardour/processor.h"
-#include "ardour/profile.h"
-#include "ardour/session.h"
-#include "ardour/session_playlist.h"
-#include "ardour/utils.h"
 
+#include "ardour_button.h"
 #include "ardour_ui.h"
 #include "audio_time_axis.h"
 #include "automation_line.h"
 #include "canvas_impl.h"
-#include "crossfade_view.h"
 #include "enums.h"
 #include "gui_thread.h"
 #include "automation_time_axis.h"
@@ -67,8 +58,6 @@
 #include "audio_streamview.h"
 #include "utils.h"
 
-#include "ardour/audio_track.h"
-
 #include "i18n.h"
 
 using namespace std;
@@ -86,20 +75,25 @@ AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session* sess, Canvas& c
 void
 AudioTimeAxisView::set_route (boost::shared_ptr<Route> rt)
 {
+       _route = rt;
+
+       /* RouteTimeAxisView::set_route() sets up some things in the View,
+          so it must be created before RouteTimeAxis::set_route() is
+          called.
+       */
+       _view = new AudioStreamView (*this);
+
        RouteTimeAxisView::set_route (rt);
 
+       _view->apply_color (color (), StreamView::RegionColor);
+
        // Make sure things are sane...
        assert(!is_track() || is_audio_track());
 
        subplugin_menu.set_name ("ArdourContextMenu");
 
-       _view = new AudioStreamView (*this);
-
        ignore_toggle = false;
 
-       mute_button->set_active (false);
-       solo_button->set_active (false);
-
        if (is_audio_track()) {
                controls_ebox.set_name ("AudioTrackControlsBaseUnselected");
        } else { // bus
@@ -111,7 +105,7 @@ AudioTimeAxisView::set_route (boost::shared_ptr<Route> rt)
                create_automation_child (GainAutomation, false);
        }
 
-       if (_route->panner()) {
+       if (_route->panner_shell()) {
                _route->panner_shell()->Changed.connect (*this, invalidator (*this),
                                                          boost::bind (&AudioTimeAxisView::ensure_pan_views, this, false), gui_context());
        }
@@ -159,38 +153,21 @@ AudioTimeAxisView::audio_view()
 guint32
 AudioTimeAxisView::show_at (double y, int& nth, Gtk::VBox *parent)
 {
-       set_gui_property ("visible", "yes");
+       set_gui_property ("visible", true);
        return TimeAxisView::show_at (y, nth, parent);
 }
 
 void
 AudioTimeAxisView::hide ()
 {
-       set_gui_property ("visible", "no");
+       set_gui_property ("visible", false);
        TimeAxisView::hide ();
 }
 
-
-void
-AudioTimeAxisView::append_extra_display_menu_items ()
-{
-       using namespace Menu_Helpers;
-
-       MenuList& items = display_menu->items();
-
-       // crossfade stuff
-       if (!Profile->get_sae() && is_track ()) {
-               items.push_back (MenuElem (_("Hide All Crossfades"), sigc::bind (sigc::mem_fun(*this, &AudioTimeAxisView::hide_all_xfades), true)));
-               items.push_back (MenuElem (_("Show All Crossfades"), sigc::bind (sigc::mem_fun(*this, &AudioTimeAxisView::show_all_xfades), true)));
-               items.push_back (SeparatorElem ());
-       }
-}
-
 void
 AudioTimeAxisView::create_automation_child (const Evoral::Parameter& param, bool show)
 {
        if (param.type() == NullAutomation) {
-               cerr << "WARNING: Attempt to create NullAutomation child, ignoring" << endl;
                return;
        }
 
@@ -359,54 +336,6 @@ AudioTimeAxisView::hide_all_automation (bool apply_to_selection)
        }
 }
 
-void
-AudioTimeAxisView::show_all_xfades (bool apply_to_selection)
-{
-       if (apply_to_selection) {
-               _editor.get_selection().tracks.foreach_audio_time_axis (boost::bind (&AudioTimeAxisView::show_all_xfades, _1, false));
-       } else {
-               AudioStreamView* asv = audio_view ();
-               if (asv) {
-                       asv->show_all_xfades ();
-               }
-       }
-}
-
-void
-AudioTimeAxisView::hide_all_xfades (bool apply_to_selection)
-{
-       if (apply_to_selection) {
-               _editor.get_selection().tracks.foreach_audio_time_axis (boost::bind (&AudioTimeAxisView::hide_all_xfades, _1, false));
-       } else {
-               AudioStreamView* asv = audio_view ();
-               if (asv) {
-                       asv->hide_all_xfades ();
-               }
-       }
-}
-
-void
-AudioTimeAxisView::hide_dependent_views (TimeAxisViewItem& tavi)
-{
-       AudioStreamView* asv = audio_view();
-       AudioRegionView* rv;
-
-       if (asv && (rv = dynamic_cast<AudioRegionView*>(&tavi)) != 0) {
-               asv->hide_xfades_involving (*rv);
-       }
-}
-
-void
-AudioTimeAxisView::reveal_dependent_views (TimeAxisViewItem& tavi)
-{
-       AudioStreamView* asv = audio_view();
-       AudioRegionView* rv;
-
-       if (asv && (rv = dynamic_cast<AudioRegionView*>(&tavi)) != 0) {
-               asv->reveal_xfades_involving (*rv);
-       }
-}
-
 void
 AudioTimeAxisView::route_active_changed ()
 {
@@ -460,14 +389,14 @@ AudioTimeAxisView::build_automation_action_menu (bool for_selection)
        automation_items.push_back (CheckMenuElem (_("Fader"), sigc::mem_fun (*this, &AudioTimeAxisView::update_gain_track_visibility)));
        gain_automation_item = dynamic_cast<CheckMenuItem*> (&automation_items.back ());
        gain_automation_item->set_active ((!for_selection || _editor.get_selection().tracks.size() == 1) && 
-                                         string_is_affirmative (gain_track->gui_property ("visible")));
+                                         (gain_track && string_is_affirmative (gain_track->gui_property ("visible"))));
 
        _main_automation_menu_map[Evoral::Parameter(GainAutomation)] = gain_automation_item;
 
        automation_items.push_back (CheckMenuElem (_("Pan"), sigc::mem_fun (*this, &AudioTimeAxisView::update_pan_track_visibility)));
        pan_automation_item = dynamic_cast<CheckMenuItem*> (&automation_items.back ());
        pan_automation_item->set_active ((!for_selection || _editor.get_selection().tracks.size() == 1) &&
-                                        string_is_affirmative (pan_tracks.front()->gui_property ("visible")));
+                                        (!pan_tracks.empty() && string_is_affirmative (pan_tracks.front()->gui_property ("visible"))));
 
        set<Evoral::Parameter> const & params = _route->pannable()->what_can_be_automated ();
        for (set<Evoral::Parameter>::iterator p = params.begin(); p != params.end(); ++p) {