fix a few things related to fit-to-tracks and toggle-visual-state
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 14 Oct 2008 14:14:49 +0000 (14:14 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 14 Oct 2008 14:14:49 +0000 (14:14 +0000)
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3966 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor.cc
gtk2_ardour/editor_ops.cc
gtk2_ardour/editor_route_list.cc
gtk2_ardour/editor_selection.cc
gtk2_ardour/time_axis_view.cc

index 28156cdca4a74a1d54c2d22a4094d00637a0d93f..aaf478713f4d38e6f8b88bd69c7ad5398e7c0ca1 100644 (file)
@@ -4256,12 +4256,13 @@ void
 Editor::use_visual_state (VisualState& vs)
 {
        no_save_visual = true;
+       no_route_list_redisplay = true;
 
        vertical_adjustment.set_value (vs.y_position);
 
        set_zoom_focus (vs.zoom_focus);
        reposition_and_zoom (vs.leftmost_frame, vs.frames_per_unit);
-
+       
        for (list<TAVState>::iterator i = vs.track_states.begin(); i != vs.track_states.end(); ++i) {
                TrackViewList::iterator t;
 
@@ -4272,10 +4273,14 @@ Editor::use_visual_state (VisualState& vs)
                }
        }
 
+
        if (!vs.track_states.empty()) {
                update_route_visibility ();
        } 
-       
+
+       no_route_list_redisplay = false;
+       redisplay_route_list ();
+
        no_save_visual = false;
 }
 
index c04bb792cfc9bb52191eb95178d6420f348de4fa..c47f33e17b4f550557be4de0f2bc68d12ca7df5f 100644 (file)
@@ -6023,16 +6023,53 @@ Editor::fit_tracks ()
        uint32_t h = (uint32_t) floor ((canvas_height - child_heights - canvas_timebars_vsize)/selection->tracks.size());
        double first_y_pos = DBL_MAX;
 
+       if (h < TimeAxisView::hSmall) {
+               MessageDialog msg (*this, _("There are too many selected tracks to fit in the current window"));
+               /* too small to be displayed */
+               return;
+       }
+
        undo_visual_stack.push_back (current_visual_state());
        
-       for (TrackSelection::iterator t = selection->tracks.begin(); t != selection->tracks.end(); ++t) {
-               (*t)->set_height (h);
-               first_y_pos = std::min ((*t)->y_position, first_y_pos);
+       /* operate on all tracks, hide unselected ones that are in the middle of selected ones */
+       
+       bool prev_was_selected = false;
+       bool is_selected = selection->selected (track_views.front());
+       bool next_is_selected;
+
+       for (TrackViewList::iterator t = track_views.begin(); t != track_views.end(); ++t) {
+
+               bool pws;
+
+               TrackViewList::iterator next;
+               
+               next = t;
+               ++next;
+               
+               if (next != track_views.end()) {
+                       next_is_selected = selection->selected (*next);
+               } else {
+                       next_is_selected = false;
+               }
+
+               if (is_selected) {
+                       (*t)->set_height (h);
+                       first_y_pos = std::min ((*t)->y_position, first_y_pos);
+               } else {
+                       if (prev_was_selected && next_is_selected) {
+                               hide_track_in_display (**t);
+                       }
+               }
+
+               prev_was_selected = is_selected;
+               is_selected = next_is_selected;
        }
+
        /* 
           set the controls_layout height now, because waiting for its size 
           request signal handler will cause the vertical adjustment setting to fail 
        */ 
+
        controls_layout.property_height () = full_canvas_height - canvas_timebars_vsize;
        vertical_adjustment.set_value (first_y_pos);
 
index 2055091953bc78fbc5b99451c2e9a8fbb7b9cc4c..3a1140b004f11d4ac1fd3b92451378b6750dd234 100644 (file)
@@ -195,9 +195,6 @@ Editor::hide_track_in_display (TimeAxisView& tv, bool temponly)
        for (i = rows.begin(); i != rows.end(); ++i) {
                if ((*i)[route_display_columns.tv] == &tv) { 
                        (*i)[route_display_columns.visible] = false;
-                       // if (temponly) {
-                       tv.set_marked_for_display (false);
-                       // }
                        break;
                }
        }
@@ -219,7 +216,6 @@ Editor::show_track_in_display (TimeAxisView& tv)
        for (i = rows.begin(); i != rows.end(); ++i) {
                if ((*i)[route_display_columns.tv] == &tv) { 
                        (*i)[route_display_columns.visible] = true;
-                       tv.set_marked_for_display (true);
                        break;
                }
        }
index 8a1220cdcdd10bd38578cde25ee6703c92adde7e..5771edd72b646901c63ecc959502af7dab2433f5 100644 (file)
@@ -160,7 +160,13 @@ Editor::extend_selection_to_track (TimeAxisView& view)
 void
 Editor::select_all_tracks ()
 {
-       selection->set (track_views);
+       TrackViewList visible_views;
+       for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
+               if ((*i)->marked_for_display()) {
+                       visible_views.push_back (*i);
+               }
+       }
+       selection->set (visible_views);
 }
 
 void
index 88d585ddc29000cfdf0f273a8945f04bf4b3a918..6c5bb2aef5b82313bc17c4d318d0531f9ac93150 100644 (file)
@@ -343,6 +343,10 @@ TimeAxisView::hide ()
        for (vector<TimeAxisView*>::iterator i = children.begin(); i != children.end(); ++i) {
                (*i)->hide ();
        }
+
+       /* if its hidden, it cannot be selected */
+
+       editor.get_selection().remove (this);
        
        Hiding ();
 }