retain selection on track-height change
[ardour.git] / gtk2_ardour / time_axis_view.cc
index e3337d888cccd4192ca42a3d27e934f6f58d757d..d6a152d63330b4199e0a1eb30cd726b33a6d069c 100644 (file)
@@ -75,12 +75,12 @@ int const TimeAxisView::_max_order = 512;
 unsigned int TimeAxisView::name_width_px = 100; // TODO adjust with font-scaling on style-change
 PBD::Signal1<void,TimeAxisView*> TimeAxisView::CatchDeletion;
 Glib::RefPtr<Gtk::SizeGroup> TimeAxisView::controls_meters_size_group = Glib::RefPtr<Gtk::SizeGroup>();
-Glib::RefPtr<Gtk::SizeGroup> TimeAxisView::controls_button_size_group = Glib::RefPtr<Gtk::SizeGroup>();
-Glib::RefPtr<Gtk::SizeGroup> TimeAxisView::track_number_v_size_group = Glib::RefPtr<Gtk::SizeGroup>();
+Glib::RefPtr<Gtk::SizeGroup> TimeAxisView::midi_scroomer_size_group = Glib::RefPtr<Gtk::SizeGroup>();
 
 TimeAxisView::TimeAxisView (ARDOUR::Session* sess, PublicEditor& ed, TimeAxisView* rent, Canvas& /*canvas*/)
        : AxisView (sess)
        , controls_table (3, 3)
+       , controls_button_size_group (Gtk::SizeGroup::create (Gtk::SIZE_GROUP_BOTH))
        , _name_editing (false)
        , height (0)
        , display_menu (0)
@@ -98,6 +98,7 @@ TimeAxisView::TimeAxisView (ARDOUR::Session* sess, PublicEditor& ed, TimeAxisVie
        , _order (0)
        , _effective_height (0)
        , _resize_drag_start (-1)
+       , _did_resize (false)
        , _preresize_cursor (0)
        , _have_preresize_cursor (false)
        , _ebox_release_can_act (true)
@@ -105,11 +106,8 @@ TimeAxisView::TimeAxisView (ARDOUR::Session* sess, PublicEditor& ed, TimeAxisVie
        if (!controls_meters_size_group) {
                controls_meters_size_group = SizeGroup::create (SIZE_GROUP_HORIZONTAL);
        }
-       if (!track_number_v_size_group) {
-               track_number_v_size_group = SizeGroup::create (SIZE_GROUP_VERTICAL);
-       }
-       if (!controls_button_size_group) {
-               controls_button_size_group = SizeGroup::create (Gtk::SIZE_GROUP_BOTH);
+       if (!midi_scroomer_size_group) {
+               midi_scroomer_size_group = SizeGroup::create (SIZE_GROUP_HORIZONTAL);
        }
        if (extra_height == 0) {
                compute_heights ();
@@ -140,7 +138,8 @@ TimeAxisView::TimeAxisView (ARDOUR::Session* sess, PublicEditor& ed, TimeAxisVie
        name_label.set_width_chars (12);
        ARDOUR_UI::instance()->set_tip (name_label, _("Track/Bus name (double click to edit)"));
 
-       Gtk::Entry* an_entry = new Gtk::Entry;
+       Gtk::Entry* an_entry = new Gtkmm2ext::FocusEntry;
+       an_entry->set_name ("EditorTrackNameDisplay");
        Gtk::Requisition req;
        an_entry->size_request (req);
        name_label.set_size_request (-1, req.height);
@@ -199,11 +198,16 @@ TimeAxisView::TimeAxisView (ARDOUR::Session* sess, PublicEditor& ed, TimeAxisVie
        separator->set_size_request(-1, 1);
        separator->show();
 
+       scroomer_placeholder.set_size_request (-1, -1);
+       scroomer_placeholder.show();
+       midi_scroomer_size_group->add_widget (scroomer_placeholder);
+
        time_axis_vbox.pack_start (*separator, false, false);
        time_axis_vbox.pack_start (time_axis_frame, true, true);
        time_axis_vbox.show();
        time_axis_hbox.pack_start (time_axis_vbox, true, true);
        time_axis_hbox.show();
+       top_hbox.pack_start (scroomer_placeholder, false, false); // OR pack_end to move after meters ?
 
        ColorsChanged.connect (sigc::mem_fun (*this, &TimeAxisView::color_handler));
 
@@ -415,15 +419,16 @@ TimeAxisView::controls_ebox_motion (GdkEventMotion* ev)
                 * are pretending that the drag is taking place over the canvas
                 * (which perhaps in the glorious future, when track headers
                 * and the canvas are unified, will actually be true.)
-               */
+                */
 
                _editor.maybe_autoscroll (false, true, true);
 
                /* now schedule the actual TAV resize */
-                int32_t const delta = (int32_t) floor (ev->y_root - _resize_drag_start);
-                _editor.add_to_idle_resize (this, delta);
-                _resize_drag_start = ev->y_root;
-        } else {
+               int32_t const delta = (int32_t) floor (ev->y_root - _resize_drag_start);
+               _editor.add_to_idle_resize (this, delta);
+               _resize_drag_start = ev->y_root;
+               _did_resize = true;
+       } else {
                /* not dragging but ... */
                maybe_set_cursor (ev->y);
        }
@@ -481,6 +486,11 @@ TimeAxisView::controls_ebox_button_release (GdkEventButton* ev)
                }
                _editor.stop_canvas_autoscroll ();
                _resize_drag_start = -1;
+               if (_did_resize) {
+                       _did_resize = false;
+                       // don't change selection
+                       return true;
+               }
        }
 
        if (!_ebox_release_can_act) {
@@ -1011,7 +1021,7 @@ TimeAxisView::get_selection_rect (uint32_t id)
                rect->rect = new ArdourCanvas::Rectangle (selection_group);
                CANVAS_DEBUG_NAME (rect->rect, "selection rect");
                rect->rect->set_outline (false);
-               rect->rect->set_fill_color (ARDOUR_UI::config()->get_canvasvar_SelectionRect());
+               rect->rect->set_fill_color (ARDOUR_UI::config()->get_SelectionRect());
 
                rect->start_trim = new ArdourCanvas::Rectangle (selection_group);
                CANVAS_DEBUG_NAME (rect->start_trim, "selection rect start trim");
@@ -1154,6 +1164,7 @@ TimeAxisView::compute_heights ()
        window.add (one_row_table);
        test_button->set_name ("mute button");
        test_button->set_text (_("M"));
+       test_button->set_tweaks (ArdourButton::TrackHeader);
 
        one_row_table.set_border_width (border_width);
        one_row_table.set_row_spacings (2);
@@ -1175,26 +1186,26 @@ TimeAxisView::color_handler ()
 
        for (list<SelectionRect*>::iterator i = used_selection_rects.begin(); i != used_selection_rects.end(); ++i) {
 
-               (*i)->rect->set_fill_color (ARDOUR_UI::config()->get_canvasvar_SelectionRect());
-               (*i)->rect->set_outline_color (ARDOUR_UI::config()->get_canvasvar_Selection());
+               (*i)->rect->set_fill_color (ARDOUR_UI::config()->get_SelectionRect());
+               (*i)->rect->set_outline_color (ARDOUR_UI::config()->get_Selection());
 
-               (*i)->start_trim->set_fill_color (ARDOUR_UI::config()->get_canvasvar_Selection());
-               (*i)->start_trim->set_outline_color (ARDOUR_UI::config()->get_canvasvar_Selection());
+               (*i)->start_trim->set_fill_color (ARDOUR_UI::config()->get_Selection());
+               (*i)->start_trim->set_outline_color (ARDOUR_UI::config()->get_Selection());
                
-               (*i)->end_trim->set_fill_color (ARDOUR_UI::config()->get_canvasvar_Selection());
-               (*i)->end_trim->set_outline_color (ARDOUR_UI::config()->get_canvasvar_Selection());
+               (*i)->end_trim->set_fill_color (ARDOUR_UI::config()->get_Selection());
+               (*i)->end_trim->set_outline_color (ARDOUR_UI::config()->get_Selection());
        }
        
        for (list<SelectionRect*>::iterator i = free_selection_rects.begin(); i != free_selection_rects.end(); ++i) {
                
-               (*i)->rect->set_fill_color (ARDOUR_UI::config()->get_canvasvar_SelectionRect());
-               (*i)->rect->set_outline_color (ARDOUR_UI::config()->get_canvasvar_Selection());
+               (*i)->rect->set_fill_color (ARDOUR_UI::config()->get_SelectionRect());
+               (*i)->rect->set_outline_color (ARDOUR_UI::config()->get_Selection());
                
-               (*i)->start_trim->set_fill_color (ARDOUR_UI::config()->get_canvasvar_Selection());
-               (*i)->start_trim->set_outline_color (ARDOUR_UI::config()->get_canvasvar_Selection());
+               (*i)->start_trim->set_fill_color (ARDOUR_UI::config()->get_Selection());
+               (*i)->start_trim->set_outline_color (ARDOUR_UI::config()->get_Selection());
                
-               (*i)->end_trim->set_fill_color (ARDOUR_UI::config()->get_canvasvar_Selection());
-               (*i)->end_trim->set_outline_color (ARDOUR_UI::config()->get_canvasvar_Selection());
+               (*i)->end_trim->set_fill_color (ARDOUR_UI::config()->get_Selection());
+               (*i)->end_trim->set_outline_color (ARDOUR_UI::config()->get_Selection());
        }
 }