Editor::get_onscreen_tracks (TrackViewList& tvl)
{
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
- if ((*i)->y_position() < _canvas_height) {
+ if ((*i)->y_position() < _visible_canvas_height) {
tvl.push_back (*i);
}
}
RouteTimeAxisView* closest = 0;
int distance = INT_MAX;
- int key = rtv->route()->order_key ("editor");
+ int key = rtv->route()->order_key (EditorSort);
for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) {
if (result.second) {
/* newly added to already_in_selection */
- int d = artv->route()->order_key ("editor");
+ int d = artv->route()->order_key (EditorSort);
d -= key;
/* now add all tracks between that one and this one */
- int okey = closest->route()->order_key ("editor");
+ int okey = closest->route()->order_key (EditorSort);
if (okey > key) {
swap (okey, key);
RouteTimeAxisView* artv = dynamic_cast<RouteTimeAxisView*>(*x);
if (artv && artv != rtv) {
- int k = artv->route()->order_key ("editor");
+ int k = artv->route()->order_key (EditorSort);
if (k >= okey && k <= key) {
{
vector<RegionView*> all_equivalent_regions;
- get_regions_corresponding_to (region, all_equivalent_regions);
+ get_regions_corresponding_to (region, all_equivalent_regions, region->whole_file());
if (all_equivalent_regions.empty()) {
return;
(*j)->set_selected (find (selection->tracks.begin(), selection->tracks.end(), j->get()) != selection->tracks.end());
}
- if (yn &&
- ((mouse_mode == MouseRange) ||
- ((mouse_mode == MouseObject) && (_join_object_range_state == JOIN_OBJECT_RANGE_OBJECT)))) {
+ if (yn) {
(*i)->reshow_selection (selection->time);
} else {
(*i)->hide_selection ();
bool have_midi = false;
bool have_locked = false;
bool have_unlocked = false;
+ bool have_video_locked = false;
+ bool have_video_unlocked = false;
bool have_position_lock_style_audio = false;
bool have_position_lock_style_music = false;
bool have_muted = false;
have_unlocked = true;
}
+ if (r->video_locked()) {
+ have_video_locked = true;
+ } else {
+ have_video_unlocked = true;
+ }
+
if (r->position_lock_style() == MusicTime) {
have_position_lock_style_music = true;
} else {
_region_actions->get_action("show-region-properties")->set_sensitive (false);
_region_actions->get_action("rename-region")->set_sensitive (false);
if (have_audio) {
+ /* XXX need to check whether there is than 1 per
+ playlist, because otherwise this makes no sense.
+ */
_region_actions->get_action("combine-regions")->set_sensitive (true);
} else {
_region_actions->get_action("combine-regions")->set_sensitive (false);
// a->set_inconsistent ();
}
+ a = Glib::RefPtr<ToggleAction>::cast_dynamic (_region_actions->get_action("toggle-region-video-lock"));
+ a->set_active (have_video_locked && !have_video_unlocked);
+ if (have_video_locked && have_video_unlocked) {
+ // a->set_inconsistent ();
+ }
+
a = Glib::RefPtr<ToggleAction>::cast_dynamic (_region_actions->get_action("toggle-region-lock-style"));
a->set_active (have_position_lock_style_music && !have_position_lock_style_audio);
sensitize_all_region_actions (true);
}
- if (_session && Config->get_always_play_range() && !_session->transport_rolling() && !selection->regions.empty()) {
- _session->request_locate (selection->regions.start());
+ if (_session && !_session->transport_rolling() && !selection->regions.empty()) {
+ maybe_locate_with_edit_preroll (selection->regions.start());
}
}
{
list<Selectable *> touched;
+ TrackViewList ts;
+
+ if (selection->tracks.empty()) {
+ if (entered_track) {
+ ts.push_back (entered_track);
+ } else {
+ ts = track_views;
+ }
+ } else {
+ ts = selection->tracks;
+ }
+
if (_internal_editing) {
- select_all_internal_edit (op);
- return;
+
+ bool midi_selected = false;
+
+ for (TrackViewList::iterator iter = ts.begin(); iter != ts.end(); ++iter) {
+ if ((*iter)->hidden()) {
+ continue;
+ }
+
+ RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (*iter);
+
+ if (rtav && rtav->is_midi_track()) {
+ midi_selected = true;
+ break;
+ }
+ }
+
+ if (midi_selected) {
+ select_all_internal_edit (op);
+ return;
+ }
}
- for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+ for (TrackViewList::iterator iter = ts.begin(); iter != ts.end(); ++iter) {
if ((*iter)->hidden()) {
continue;
}
(*iter)->get_selectables (0, max_framepos, 0, DBL_MAX, touched);
}
+
begin_reversible_command (_("select all"));
switch (op) {
case Selection::Add:
list<Selectable *> touched;
if (after) {
- start = cursor->current_frame;
+ start = cursor->current_frame();
end = _session->current_end_frame();
} else {
- if (cursor->current_frame > 0) {
+ if (cursor->current_frame() > 0) {
start = 0;
- end = cursor->current_frame - 1;
+ end = cursor->current_frame() - 1;
} else {
return;
}
framepos_t start;
framepos_t end;
- if (mouse_mode == MouseRange && !selection->time.empty()) {
+ if ( !selection->time.empty() ) {
selection->clear_time ();
}
framepos_t m;
bool ignored;
- /* in range mode, use any existing selection */
+ /* if an explicit range exists, use it */
- if (mouse_mode == MouseRange && !selection->time.empty()) {
+ if (!selection->time.empty()) {
/* we know that these are ordered */
start = selection->time.start();
end = selection->time.end_frame();