fix a/v module nested command setup
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / mwindowedit.C
index f32413ac57895141346f56a6f5ee1496062c4eef..7e6c644548f55b4d741836c455f272f39994df44 100644 (file)
@@ -2445,11 +2445,11 @@ void MWindow::add_proxy(ArrayList<Indexable*> *orig_assets, ArrayList<Indexable*
 }
 
 void MWindow::start_convert(Asset *format_asset, const char *suffix,
-               float beep, int remove_originals)
+               float beep, int to_proxy, int remove_originals)
 {
        if( !convert_render )
                convert_render = new ConvertRender(this);
-       convert_render->set_format(format_asset, suffix);
+       convert_render->set_format(format_asset, suffix, to_proxy);
        int found = convert_render->find_convertable_assets(edl);
        if( convert_render->needed_idxbls.size() > 0 )
                convert_render->start_convert(beep, remove_originals);
@@ -2557,3 +2557,89 @@ int MWindow::speed_after(int done)
        return result;
 }
 
+void MWindow::collect_effects()
+{
+       FileXML file;
+       const char *file_string = "";
+       EDL *group = 0;
+       int ret = edl->collect_effects(group);
+       switch( ret ) {
+       case COLLECT_EFFECTS_RECORD:
+               eprintf(_("Selected edit track not armed."));
+               break;
+       case COLLECT_EFFECTS_MULTIPLE:
+               eprintf(_("More than one edit selected on a track."));
+               break;
+       case COLLECT_EFFECTS_MISSING:
+               eprintf(_("No effects under selected edit."));
+               break;
+       case COLLECT_EFFECTS_EMPTY:
+               eprintf(_("No edits selected."));
+               break;
+       case COLLECT_EFFECTS_MASTER:
+               eprintf(_("Shared effect added without master."));
+               break;
+       case 0:
+               group->save_xml(&file, "");
+               file_string = file.string();
+               group->remove_user();
+       }
+       long file_length = strlen(file_string);
+       gui->to_clipboard(file_string, file_length, BC_PRIMARY_SELECTION);
+       gui->to_clipboard(file_string, file_length, SECONDARY_SELECTION);
+}
+
+void MWindow::paste_effects()
+{
+       char *string = 0;
+       int64_t len = gui->clipboard_len(BC_PRIMARY_SELECTION);
+       if( len ) {
+               string = new char[len];
+               gui->from_clipboard(string, len, BC_PRIMARY_SELECTION);
+       }
+       if( !string || !string[0] ) {
+               eprintf(_("Error clipboard buffer empty."));
+               return;
+       }
+       FileXML file;
+       file.read_from_string(string);
+       EDL *group = new EDL();
+       group->create_objects();
+       if( !group->load_xml(&file, LOAD_ALL) ) {
+               undo_before();
+               int ret = edl->insert_effects(group);
+               switch( ret ) {
+               case INSERT_EFFECTS_RECORD:
+                       eprintf(_("Selected edit track not armed."));
+                       break;
+               case INSERT_EFFECTS_TYPE:
+                       eprintf(_("Track type mismatched."));
+                       break;
+               case INSERT_EFFECTS_MULTIPLE:
+                       eprintf(_("More than one edit selected on a track."));
+                       break;
+               case INSERT_EFFECTS_MISSING:
+                       eprintf(_("Too few target edits to add group effects."));
+                       break;
+               case INSERT_EFFECTS_EXTRA:
+                       eprintf(_("Too many target edits to add group effects."));
+                       break;
+               case INSERT_EFFECTS_MASTER:
+                       eprintf(_("Shared effect added without master."));
+                       break;
+               case 0:
+                       break;
+               }
+               save_backup();
+               undo_after(_("paste effects"), LOAD_ALL);
+               restart_brender();
+               cwindow->refresh_frame(CHANGE_EDL);
+               update_plugin_guis();
+               gui->update(1, NORMAL_DRAW, 1, 0, 0, 0, 0);
+       }
+       else
+               eprintf(_("Error loading clip from clipboard buffer."));
+       delete [] string;
+       group->remove_user();
+}
+