ctrl_toggle preference, dblclk select single group/edit, update shortcuts
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / edl.C
index c1c7e3258854cf0a8444b913dcdf8d678fe06e86..1c0c77b1da1a6d060e80041d7f83d02d4749b943 100644 (file)
@@ -1631,12 +1631,36 @@ Asset *EDL::get_proxy_asset()
                tracks->first->edits->first->asset : 0;
 }
 
+Track *EDL::add_new_track(int data_type)
+{
+       Track *new_track = 0;
+       switch( data_type ) {
+       case TRACK_VIDEO:
+               ++session->video_tracks;
+               new_track = tracks->add_video_track(0, 0);
+               break;
+       case TRACK_AUDIO:
+               ++session->audio_tracks;
+               new_track = tracks->add_audio_track(0, 0);
+               break;
+       case TRACK_SUBTITLE:
+               new_track = tracks->add_subttl_track(0, 0);
+               break;
+       }
+       return new_track;
+}
+
 double EDL::get_cursor_position(int cursor_x, int pane_no)
 {
        return (double)cursor_x * local_session->zoom_sample / session->sample_rate +
                (double)local_session->view_start[pane_no] *
                        local_session->zoom_sample / session->sample_rate;
 }
+int64_t EDL::get_position_cursorx(double position, int pane_no)
+{
+       return (int64_t)(position * session->sample_rate / local_session->zoom_sample)
+                       - local_session->view_start[pane_no];
+}
 
 int EDL::in_use(Indexable *indexable)
 {
@@ -1657,3 +1681,27 @@ int EDL::in_use(Indexable *indexable)
        return 0;
 }
 
+int EDL::regroup(int next_id)
+{
+       ArrayList<int> new_groups;
+       for( Track *track=tracks->first; track; track=track->next ) {
+               for( Edit *edit=track->edits->first; edit; edit=edit->next ) {
+                       if( !edit->group_id ) continue;
+                       int k = new_groups.size();
+                       while( --k >= 0 && new_groups[k] != edit->group_id );
+                       if( k >= 0 ) continue;
+                       new_groups.append(edit->group_id);
+               }
+       }
+       for( Track *track=tracks->first; track; track=track->next ) {
+               for( Edit *edit=track->edits->first; edit; edit=edit->next ) {
+                       if( !edit->group_id ) continue;
+                       int k = new_groups.size();
+                       while( --k >= 0 && new_groups[k] != edit->group_id );
+                       if( k < 0 ) continue;
+                       edit->group_id = k + next_id;
+               }
+       }
+       return new_groups.size();
+}
+