+void MWindow::save_clip(EDL *new_edl, const char *txt)
+{
+ new_edl->local_session->set_selectionstart(0);
+ new_edl->local_session->set_selectionend(0);
+ sprintf(new_edl->local_session->clip_title, _("Clip %d"),
+ session->clip_number++);
+ char duration[BCTEXTLEN];
+ Units::totext(duration, new_edl->tracks->total_length(),
+ new_edl->session->time_format,
+ new_edl->session->sample_rate,
+ new_edl->session->frame_rate,
+ new_edl->session->frames_per_foot);
+
+ Track *track = new_edl->tracks->first;
+ const char *path = edl->path;
+ for( ; (!path || !*path) && track; track=track->next ) {
+ if( !track->record ) continue;
+ Edit *edit = track->edits->first;
+ if( !edit ) continue;
+ Indexable *indexable = edit->get_source();
+ if( !indexable ) continue;
+ path = indexable->path;
+ }
+
+ time_t now; time(&now);
+ struct tm dtm; localtime_r(&now, &dtm);
+ char *cp = new_edl->local_session->clip_notes;
+ int n, sz = sizeof(new_edl->local_session->clip_notes)-1;
+ if( txt && *txt ) {
+ n = snprintf(cp, sz, "%s", txt);
+ cp += n; sz -= n;
+ }
+ n = snprintf(cp, sz,
+ "%02d/%02d/%02d %02d:%02d:%02d, +%s\n",
+ dtm.tm_year+1900, dtm.tm_mon+1, dtm.tm_mday,
+ dtm.tm_hour, dtm.tm_min, dtm.tm_sec, duration);
+ cp += n; sz -= n;
+ if( path && *path ) {
+ FileSystem fs;
+ char title[BCTEXTLEN];
+ fs.extract_name(title, path);
+ n = snprintf(cp, sz, "%s", title);
+ cp += n; sz -= n;
+ }
+ cp[n] = 0;
+ sprintf(new_edl->local_session->clip_icon,
+ "clip_%02d%02d%02d-%02d%02d%02d.png",
+ dtm.tm_year+1900, dtm.tm_mon+1, dtm.tm_mday,
+ dtm.tm_hour, dtm.tm_min, dtm.tm_sec);
+ new_edl->awindow_folder = AW_CLIP_FOLDER;
+ edl->update_assets(new_edl);
+ int cur_x, cur_y;
+ gui->get_abs_cursor(cur_x, cur_y, 0);
+ gui->unlock_window();
+
+ awindow->clip_edit->create_clip(new_edl, cur_x, cur_y);
+ new_edl->remove_user();
+
+ gui->lock_window("MWindow::save_clip");
+ save_backup();
+}
+
+void MWindow::to_clip(EDL *edl, const char *txt, int all)