Merge CV, ver=5.1; ops/methods from HV, and interface from CV where possible
[goodguy/history.git] / cinelerra-5.0 / cinelerra / mwindowedit.C
diff --git a/cinelerra-5.0/cinelerra/mwindowedit.C b/cinelerra-5.0/cinelerra/mwindowedit.C
deleted file mode 100644 (file)
index 17fa1c7..0000000
+++ /dev/null
@@ -1,2686 +0,0 @@
-/*
- * CINELERRA
- * Copyright (C) 1997-2012 Adam Williams <broadcast at earthling dot net>
- * 
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- * 
- */
-
-#include "asset.h"
-#include "assets.h"
-#include "awindowgui.h"
-#include "awindow.h"
-#include "bcsignals.h"
-#include "cache.h"
-#include "clip.h"
-#include "clipedit.h"
-#include "commercials.h"
-#include "cplayback.h"
-#include "ctimebar.h"
-#include "cwindow.h"
-#include "cwindowgui.h"
-#include "bchash.h"
-#include "edl.h"
-#include "edlsession.h"
-#include "filexml.h"
-#include "floatauto.h"
-#include "floatautos.h"
-#include "gwindow.h"
-#include "gwindowgui.h"
-#include "keyframe.h"
-#include "language.h"
-#include "labels.h"
-#include "levelwindow.h"
-#include "localsession.h"
-#include "mainclock.h"
-#include "maincursor.h"
-#include "mainerror.h"
-#include "mainindexes.h"
-#include "mainmenu.h"
-#include "mainsession.h"
-#include "mainundo.h"
-#include "maskautos.h"
-#include "mtimebar.h"
-#include "mwindowgui.h"
-#include "mwindow.h"
-#include "panauto.h"
-#include "patchbay.h"
-#include "playbackengine.h"
-#include "pluginset.h"
-#include "recordlabel.h"
-#include "samplescroll.h"
-#include "trackcanvas.h"
-#include "track.h"
-#include "trackscroll.h"
-#include "tracks.h"
-#include "transition.h"
-#include "transportque.h"
-#include "units.h"
-#include "vplayback.h"
-#include "vwindow.h"
-#include "vwindowgui.h"
-#include "zoombar.h"
-
-
-
-#include <string.h>
-
-
-
-
-
-
-void MWindow::add_audio_track_entry(int above, Track *dst)
-{
-       undo->update_undo_before();
-       add_audio_track(above, dst);
-       save_backup();
-       undo->update_undo_after(_("add track"), LOAD_ALL);
-
-       restart_brender();
-       gui->update(1, 
-               1,
-               0,
-               0,
-               1,
-               0,
-               0);
-       gui->activate_timeline();
-       
-//     gui->get_scrollbars(0);
-//     gui->canvas->draw();
-//     gui->patchbay->update();
-//     gui->cursor->draw(1);
-//     gui->canvas->flash();
-//     gui->canvas->activate();
-       cwindow->playback_engine->que->send_command(CURRENT_FRAME, 
-               CHANGE_EDL,
-               edl,
-               1);
-}
-
-void MWindow::add_video_track_entry(Track *dst)
-{
-       undo->update_undo_before();
-       add_video_track(1, dst);
-       undo->update_undo_after(_("add track"), LOAD_ALL);
-
-       restart_brender();
-
-       gui->update(1, 
-               1,
-               0,
-               0,
-               1,
-               0,
-               0);
-       gui->activate_timeline();
-//     gui->get_scrollbars(0);
-//     gui->canvas->draw();
-//     gui->patchbay->update();
-//     gui->cursor->draw(1);
-//     gui->canvas->flash();
-//     gui->canvas->activate();
-       cwindow->playback_engine->que->send_command(CURRENT_FRAME, 
-                                                       CHANGE_EDL,
-                                                       edl,
-                                                       1);
-       save_backup();
-}
-
-void MWindow::add_subttl_track_entry(Track *dst)
-{
-       undo->update_undo_before();
-       add_subttl_track(1, dst);
-       undo->update_undo_after(_("add track"), LOAD_ALL);
-
-       restart_brender();
-//     gui->get_scrollbars(0);
-//     gui->canvas->draw();
-//     gui->patchbay->update();
-//     gui->cursor->draw(1);
-//     gui->canvas->flash();
-//     gui->canvas->activate();
-       cwindow->playback_engine->que->send_command(CURRENT_FRAME, 
-                                                       CHANGE_EDL,
-                                                       edl,
-                                                       1);
-       save_backup();
-}
-
-
-int MWindow::add_audio_track(int above, Track *dst)
-{
-       edl->tracks->add_audio_track(above, dst);
-       edl->tracks->update_y_pixels(theme);
-       save_backup();
-       return 0;
-}
-
-int MWindow::add_video_track(int above, Track *dst)
-{
-       edl->tracks->add_video_track(above, dst);
-       edl->tracks->update_y_pixels(theme);
-       save_backup();
-       return 0;
-}
-
-int MWindow::add_subttl_track(int above, Track *dst)
-{
-       edl->tracks->add_subttl_track(above, dst);
-       edl->tracks->update_y_pixels(theme);
-       save_backup();
-       return 0;
-}
-
-
-
-
-void MWindow::asset_to_all()
-{
-       if(!session->drag_assets->size()) return;
-       Indexable *indexable = session->drag_assets->get(0);
-
-//     if(indexable->have_video())
-       {
-               int w, h;
-
-               undo->update_undo_before();
-
-// Get w and h
-               w = indexable->get_w();
-               h = indexable->get_h();
-               double new_framerate = session->drag_assets->get(0)->get_frame_rate();
-               double old_framerate = edl->session->frame_rate;
-               int old_samplerate = edl->session->sample_rate;
-               int new_samplerate = session->drag_assets->get(0)->get_sample_rate();
-
-
-               if(indexable->have_video())
-               {
-                       edl->session->output_w = w;
-                       edl->session->output_h = h;
-                       edl->session->frame_rate = new_framerate;
-                       create_aspect_ratio(edl->session->aspect_w, 
-                               edl->session->aspect_h, 
-                               w, 
-                               h);
-
-                       for(Track *current = edl->tracks->first;
-                               current;
-                               current = NEXT)
-                       {
-                               if(current->data_type == TRACK_VIDEO /* &&
-                                       current->record */ )
-                               {
-                                       current->track_w = w;
-                                       current->track_h = h;
-                               }
-                       }
-
-
-                       if(((edl->session->output_w % 4) || 
-                               (edl->session->output_h % 4)) && 
-                               edl->session->playback_config->vconfig->driver == PLAYBACK_X11_GL)
-                       {
-                               MainError::show_error(
-                                       _("This project's dimensions are not multiples of 4 so\n"
-                                       "it can't be rendered by OpenGL."));
-                       }
-
-
-// Get aspect ratio
-                       if(defaults->get("AUTOASPECT", 0))
-                       {
-                               create_aspect_ratio(edl->session->aspect_w, 
-                                       edl->session->aspect_h, 
-                                       w, 
-                                       h);
-                       }
-               }
-               
-               if(indexable->have_audio())
-               {
-                       edl->session->sample_rate = new_samplerate;
-                       edl->resample(old_framerate, new_framerate, TRACK_VIDEO);
-                       edl->resample(old_samplerate, new_samplerate, TRACK_AUDIO);
-               }
-
-
-               save_backup();
-
-               undo->update_undo_after(_("asset to all"), LOAD_ALL);
-               restart_brender();
-               gui->update(1,
-                       2,
-                       1,
-                       1,
-                       1, 
-                       1,
-                       0);
-               sync_parameters(CHANGE_ALL);
-       }
-}
-
-
-
-
-
-
-void MWindow::asset_to_size()
-{
-       if(!session->drag_assets->size()) return;
-       Indexable *indexable = session->drag_assets->get(0);
-
-       if(indexable->have_video())
-       {
-               int w, h;
-               undo->update_undo_before();
-
-// Get w and h
-               w = indexable->get_w();
-               h = indexable->get_h();
-
-
-               edl->session->output_w = w;
-               edl->session->output_h = h;
-
-               if(((edl->session->output_w % 4) || 
-                       (edl->session->output_h % 4)) && 
-                       edl->session->playback_config->vconfig->driver == PLAYBACK_X11_GL)
-               {
-                       MainError::show_error(
-                               _("This project's dimensions are not multiples of 4 so\n"
-                               "it can't be rendered by OpenGL."));
-               }
-
-
-// Get aspect ratio
-               if(defaults->get("AUTOASPECT", 0))
-               {
-                       create_aspect_ratio(edl->session->aspect_w, 
-                               edl->session->aspect_h, 
-                               w, 
-                               h);
-               }
-
-               save_backup();
-
-               undo->update_undo_after(_("asset to size"), LOAD_ALL);
-               restart_brender();
-               sync_parameters(CHANGE_ALL);
-       }
-}
-
-
-void MWindow::asset_to_rate()
-{
-       if(session->drag_assets->size() &&
-               session->drag_assets->get(0)->have_video())
-       {
-               double new_framerate = session->drag_assets->get(0)->get_frame_rate();
-               double old_framerate = edl->session->frame_rate;
-               undo->update_undo_before();
-
-               edl->session->frame_rate = new_framerate;
-               edl->resample(old_framerate, new_framerate, TRACK_VIDEO);
-
-               save_backup();
-
-               undo->update_undo_after(_("asset to rate"), LOAD_ALL);
-               restart_brender();
-               gui->update(1,
-                       2,
-                       1,
-                       1,
-                       1, 
-                       1,
-                       0);
-               sync_parameters(CHANGE_ALL);
-       }
-}
-
-
-
-void MWindow::clear_entry()
-{
-       undo->update_undo_before();
-       clear(1);
-
-       edl->optimize();
-       save_backup();
-       undo->update_undo_after(_("clear"), LOAD_EDITS | LOAD_TIMEBAR);
-
-       restart_brender();
-       update_plugin_guis();
-       gui->update(1, 2, 1, 1, 1, 1, 0);
-       cwindow->update(1, 0, 0, 0, 1);
-       cwindow->playback_engine->que->send_command(CURRENT_FRAME, 
-                          CHANGE_EDL,
-                          edl,
-                          1);
-}
-
-void MWindow::clear(int clear_handle)
-{
-       double start = edl->local_session->get_selectionstart();
-       double end = edl->local_session->get_selectionend();
-       if(clear_handle || !EQUIV(start, end))
-       {
-               edl->clear(start, 
-                       end, 
-                       edl->session->labels_follow_edits, 
-                       edl->session->plugins_follow_edits,
-                       edl->session->autos_follow_edits);
-       }
-}
-
-void MWindow::set_automation_mode(int mode)
-{
-       undo->update_undo_before();
-       edl->tracks->set_automation_mode(
-               edl->local_session->get_selectionstart(), 
-               edl->local_session->get_selectionend(),
-               mode); 
-       save_backup();
-
-       if(mode == Auto::LINEAR)
-               undo->update_undo_after(_("set linear"), LOAD_AUTOMATION); 
-       else
-               undo->update_undo_after(_("set bezier"), LOAD_AUTOMATION); 
-
-       restart_brender();
-       update_plugin_guis();
-       gui->draw_overlays(1);
-       sync_parameters(CHANGE_PARAMS);
-       gui->update_patchbay();
-       cwindow->update(1, 0, 0);
-}
-
-void MWindow::clear_automation()
-{
-       undo->update_undo_before();
-       edl->tracks->clear_automation(edl->local_session->get_selectionstart(), 
-               edl->local_session->get_selectionend()); 
-       save_backup();
-       undo->update_undo_after(_("clear keyframes"), LOAD_AUTOMATION); 
-
-       restart_brender();
-       update_plugin_guis();
-       gui->draw_overlays(1);
-       sync_parameters(CHANGE_PARAMS);
-       gui->update_patchbay();
-       cwindow->update(1, 0, 0);
-}
-
-int MWindow::clear_default_keyframe()
-{
-       undo->update_undo_before();
-       edl->tracks->clear_default_keyframe();
-       save_backup();
-       undo->update_undo_after(_("clear default keyframe"), LOAD_AUTOMATION);
-       
-       restart_brender();
-       gui->draw_overlays(1);
-       sync_parameters(CHANGE_PARAMS);
-       gui->update_patchbay();
-       cwindow->update(1, 0, 0);
-       
-       return 0;
-}
-
-void MWindow::clear_labels()
-{
-       undo->update_undo_before();
-       clear_labels(edl->local_session->get_selectionstart(), 
-               edl->local_session->get_selectionend()); 
-       undo->update_undo_after(_("clear labels"), LOAD_TIMEBAR);
-       
-       gui->update_timebar(1);
-       cwindow->update(0, 0, 0, 0, 1);
-       save_backup();
-}
-
-int MWindow::clear_labels(double start, double end)
-{
-       edl->labels->clear(start, end, 0);
-       return 0;
-}
-
-void MWindow::concatenate_tracks()
-{
-       undo->update_undo_before();
-       edl->tracks->concatenate_tracks(edl->session->plugins_follow_edits,
-               edl->session->autos_follow_edits);
-       save_backup();
-       undo->update_undo_after(_("concatenate tracks"), LOAD_EDITS);
-
-       restart_brender();
-       gui->update(1, 1, 0, 0, 1, 0, 0);
-       cwindow->playback_engine->que->send_command(CURRENT_FRAME, 
-               CHANGE_EDL,
-               edl,
-               1);
-}
-
-
-void MWindow::copy()
-{
-       copy(edl->local_session->get_selectionstart(), 
-               edl->local_session->get_selectionend());
-}
-
-int MWindow::copy(double start, double end)
-{
-       if(start == end) return 1;
-
-//printf("MWindow::copy 1\n");
-       FileXML file;
-//printf("MWindow::copy 1\n");
-       edl->copy(start, 
-               end, 
-               0,
-               0,
-               0,
-               &file, 
-               "",
-               1);
-//printf("MWindow::copy 1\n");
-
-// File is now terminated and rewound
-
-//printf("MWindow::copy 1\n");
-       const char *file_string = file.string();
-       long file_length = strlen(file_string);
-       gui->get_clipboard()->to_clipboard(file_string, file_length,
-               SECONDARY_SELECTION);
-       gui->get_clipboard()->to_clipboard(file_string, file_length,
-               BC_PRIMARY_SELECTION);
-//printf("MWindow::copy\n%s\n", file.string);
-//printf("MWindow::copy 2\n");
-       save_backup();
-       return 0;
-}
-
-int MWindow::copy_automation()
-{
-       FileXML file;
-       edl->tracks->copy_automation(edl->local_session->get_selectionstart(), 
-               edl->local_session->get_selectionend(),
-               &file,
-               0,
-               1);
-       const char *file_string = file.string();
-       long file_length = strlen(file_string);
-       gui->get_clipboard()->to_clipboard(file_string, file_length,
-               BC_PRIMARY_SELECTION);
-       gui->get_clipboard()->to_clipboard(file_string, file_length,
-               SECONDARY_SELECTION);
-       return 0;
-}
-
-int MWindow::copy_default_keyframe()
-{
-       FileXML file;
-       edl->tracks->copy_automation(edl->local_session->get_selectionstart(), 
-               edl->local_session->get_selectionend(),
-               &file,
-               1,
-               0);
-       const char *file_string = file.string();
-       long file_length = strlen(file_string);
-       gui->get_clipboard()->to_clipboard(file_string, file_length,
-               BC_PRIMARY_SELECTION);
-       gui->get_clipboard()->to_clipboard(file_string, file_length,
-               SECONDARY_SELECTION);
-       return 0;
-}
-
-
-// Uses cropping coordinates in edl session to crop and translate video.
-// We modify the projector since camera automation depends on the track size.
-void MWindow::crop_video()
-{
-
-       undo->update_undo_before();
-// Clamp EDL crop region
-       if(edl->session->crop_x1 > edl->session->crop_x2)
-       {
-               edl->session->crop_x1 ^= edl->session->crop_x2;
-               edl->session->crop_x2 ^= edl->session->crop_x1;
-               edl->session->crop_x1 ^= edl->session->crop_x2;
-       }
-       if(edl->session->crop_y1 > edl->session->crop_y2)
-       {
-               edl->session->crop_y1 ^= edl->session->crop_y2;
-               edl->session->crop_y2 ^= edl->session->crop_y1;
-               edl->session->crop_y1 ^= edl->session->crop_y2;
-       }
-
-       float old_projector_x = (float)edl->session->output_w / 2;
-       float old_projector_y = (float)edl->session->output_h / 2;
-       float new_projector_x = (float)(edl->session->crop_x1 + edl->session->crop_x2) / 2;
-       float new_projector_y = (float)(edl->session->crop_y1 + edl->session->crop_y2) / 2;
-       float projector_offset_x = -(new_projector_x - old_projector_x);
-       float projector_offset_y = -(new_projector_y - old_projector_y);
-
-       edl->tracks->translate_projector(projector_offset_x, projector_offset_y);
-
-       edl->session->output_w = edl->session->crop_x2 - edl->session->crop_x1;
-       edl->session->output_h = edl->session->crop_y2 - edl->session->crop_y1;
-       edl->session->crop_x1 = 0;
-       edl->session->crop_y1 = 0;
-       edl->session->crop_x2 = edl->session->output_w;
-       edl->session->crop_y2 = edl->session->output_h;
-
-// Recalculate aspect ratio
-       if(defaults->get("AUTOASPECT", 0))
-       {
-               create_aspect_ratio(edl->session->aspect_w, 
-                       edl->session->aspect_h, 
-                       edl->session->output_w, 
-                       edl->session->output_h);
-       }
-
-       undo->update_undo_after(_("crop"), LOAD_ALL);
-
-       restart_brender();
-       cwindow->playback_engine->que->send_command(CURRENT_FRAME,
-               CHANGE_ALL,
-               edl,
-               1);
-       save_backup();
-}
-
-void MWindow::cut()
-{
-       undo->update_undo_before();
-
-       double start = edl->local_session->get_selectionstart();
-       double end = edl->local_session->get_selectionend();
-
-       copy(start, end);
-       edl->clear(start, 
-               end,
-               edl->session->labels_follow_edits, 
-               edl->session->plugins_follow_edits,
-               edl->session->autos_follow_edits);
-
-
-       edl->optimize();
-       save_backup();
-       undo->update_undo_after(_("cut"), LOAD_EDITS | LOAD_TIMEBAR);
-
-       restart_brender();
-       update_plugin_guis();
-       gui->update(1, 2, 1, 1, 1, 1, 0);
-       cwindow->update(1, 0, 0, 0, 1);
-       cwindow->playback_engine->que->send_command(CURRENT_FRAME, 
-                                                       CHANGE_EDL,
-                                                       edl,
-                                                       1);
-}
-
-int MWindow::cut_automation()
-{
-       undo->update_undo_before();
-       
-       copy_automation();
-
-       edl->tracks->clear_automation(edl->local_session->get_selectionstart(), 
-               edl->local_session->get_selectionend()); 
-       save_backup();
-       undo->update_undo_after(_("cut keyframes"), LOAD_AUTOMATION); 
-
-
-       restart_brender();
-       update_plugin_guis();
-       gui->draw_overlays(1);
-       sync_parameters(CHANGE_PARAMS);
-       gui->update_patchbay();
-       cwindow->update(1, 0, 0);
-       return 0;
-}
-
-int MWindow::cut_default_keyframe()
-{
-
-       undo->update_undo_before();
-       copy_default_keyframe();
-       edl->tracks->clear_default_keyframe();
-       undo->update_undo_after(_("cut default keyframe"), LOAD_AUTOMATION);
-
-       restart_brender();
-       gui->draw_overlays(1);
-       sync_parameters(CHANGE_PARAMS);
-       gui->update_patchbay();
-       cwindow->update(1, 0, 0);
-       save_backup();
-
-
-       return 0;
-}
-
-void MWindow::delete_inpoint()
-{
-       edl->local_session->unset_inpoint();
-       save_backup();
-}
-
-void MWindow::delete_outpoint()
-{
-       edl->local_session->unset_outpoint();
-       save_backup();
-}
-
-void MWindow::delete_track()
-{
-       if (edl->tracks->last)
-               delete_track(edl->tracks->last);
-}
-
-void MWindow::delete_tracks()
-{
-       undo->update_undo_before();
-       edl->tracks->delete_tracks();
-       undo->update_undo_after(_("delete tracks"), LOAD_ALL);
-       save_backup();
-
-       restart_brender();
-       update_plugin_states();
-       gui->update(1, 1, 1, 0, 1, 0, 0);
-       cwindow->playback_engine->que->send_command(CURRENT_FRAME, 
-                          CHANGE_EDL,
-                          edl,
-                          1);
-}
-
-void MWindow::delete_track(Track *track)
-{
-       undo->update_undo_before();
-       edl->tracks->delete_track(track);
-       undo->update_undo_after(_("delete track"), LOAD_ALL);
-
-       restart_brender();
-       update_plugin_states();
-       gui->update(1, 1, 1, 0, 1, 0, 0);
-       cwindow->playback_engine->que->send_command(CURRENT_FRAME, 
-                          CHANGE_EDL,
-                          edl,
-                          1);
-       save_backup();
-}
-
-
-
-
-
-// Insert data from clipboard
-void MWindow::insert(double position, 
-       FileXML *file,
-       int edit_labels,
-       int edit_plugins,
-       int edit_autos,
-       EDL *parent_edl)
-{
-// For clipboard pasting make the new edl use a separate session 
-// from the master EDL.  Then it can be resampled to the master rates.
-// For splice, overwrite, and dragging need same session to get the assets.
-       EDL *edl = new EDL(parent_edl);
-       ArrayList<EDL*> new_edls;
-       uint32_t load_flags = LOAD_ALL;
-
-
-       new_edls.append(edl);
-       edl->create_objects();
-
-
-
-
-       if(parent_edl) load_flags &= ~LOAD_SESSION;
-       if(!edl->session->autos_follow_edits) load_flags &= ~LOAD_AUTOMATION;
-       if(!edl->session->labels_follow_edits) load_flags &= ~LOAD_TIMEBAR;
-
-       edl->load_xml(file, load_flags);
-
-
-//printf("MWindow::insert %f\n", edl->local_session->clipboard_length);
-
-
-
-       paste_edls(&new_edls, 
-               LOADMODE_PASTE, 
-               0, 
-               position,
-               edit_labels,
-               edit_plugins,
-               edit_autos);
-// if(vwindow->edl)
-// printf("MWindow::insert 5 %f %f\n", 
-// vwindow->edl->local_session->in_point,
-// vwindow->edl->local_session->out_point);
-       new_edls.remove_all();
-       edl->Garbage::remove_user();
-//printf("MWindow::insert 6 %p\n", vwindow->get_edl());
-}
-
-void MWindow::insert_effects_canvas(double start,
-       double length)
-{
-       Track *dest_track = session->track_highlighted;
-       if(!dest_track) return;
-
-       undo->update_undo_before();
-
-       for(int i = 0; i < session->drag_pluginservers->total; i++)
-       {
-               PluginServer *plugin = session->drag_pluginservers->values[i];
-
-               insert_effect(plugin->title,
-                       0,
-                       dest_track,
-                       i == 0 ? session->pluginset_highlighted : 0,
-                       start,
-                       length,
-                       PLUGIN_STANDALONE);
-       }
-
-       save_backup();
-       undo->update_undo_after(_("insert effect"), LOAD_EDITS | LOAD_PATCHES);
-       restart_brender();
-       sync_parameters(CHANGE_EDL);
-// GUI updated in TrackCanvas, after current_operations are reset
-}
-
-void MWindow::insert_effects_cwindow(Track *dest_track)
-{
-       if(!dest_track) return;
-
-       undo->update_undo_before();
-
-       double start = 0;
-       double length = dest_track->get_length();
-
-       if(edl->local_session->get_selectionend() > 
-               edl->local_session->get_selectionstart())
-       {
-               start = edl->local_session->get_selectionstart();
-               length = edl->local_session->get_selectionend() - 
-                       edl->local_session->get_selectionstart();
-       }
-
-       for(int i = 0; i < session->drag_pluginservers->total; i++)
-       {
-               PluginServer *plugin = session->drag_pluginservers->values[i];
-
-
-               insert_effect(plugin->title,
-                       0,
-                       dest_track,
-                       0,
-                       start,
-                       length,
-                       PLUGIN_STANDALONE);
-       }
-
-       save_backup();
-       undo->update_undo_after(_("insert effect"), LOAD_EDITS | LOAD_PATCHES);
-       restart_brender();
-       sync_parameters(CHANGE_EDL);
-       gui->update(1,
-               1,
-               0,
-               0,
-               1,
-               0,
-               0);
-}
-
-void MWindow::insert_effect(char *title, 
-       SharedLocation *shared_location, 
-       int data_type,
-       int plugin_type,
-       int single_standalone)
-{
-       Track *current = edl->tracks->first;
-       SharedLocation shared_location_local;
-       shared_location_local.copy_from(shared_location);
-       int first_track = 1;
-       for( ; current; current = NEXT)
-       {
-               if(current->data_type == data_type &&
-                       current->record)
-               {
-                       insert_effect(title, 
-                               &shared_location_local,
-                               current,
-                               0,
-                               0,
-                               0,
-                               plugin_type);
-
-                       if(first_track)
-                       {
-                               if(plugin_type == PLUGIN_STANDALONE && single_standalone)
-                               {
-                                       plugin_type = PLUGIN_SHAREDPLUGIN;
-                                       shared_location_local.module = edl->tracks->number_of(current);
-                                       shared_location_local.plugin = current->plugin_set.total - 1;
-                               }
-                               first_track = 0;
-                       }
-               }
-       }
-}
-
-
-void MWindow::insert_effect(char *title, 
-       SharedLocation *shared_location, 
-       Track *track,
-       PluginSet *plugin_set,
-       double start,
-       double length,
-       int plugin_type)
-{
-       KeyFrame *default_keyframe = 0;
-       PluginServer *server = 0;
-
-
-
-
-
-
-// Get default keyframe
-       if(plugin_type == PLUGIN_STANDALONE)
-       {
-               default_keyframe = new KeyFrame;
-               server = new PluginServer(*scan_plugindb(title, track->data_type));
-
-               server->open_plugin(0, preferences, edl, 0);
-               server->save_data(default_keyframe);
-       }
-
-
-
-// Insert plugin object
-       track->insert_effect(title, 
-               shared_location, 
-               default_keyframe, 
-               plugin_set,
-               start,
-               length,
-               plugin_type);
-
-       track->optimize();
-
-
-       if(plugin_type == PLUGIN_STANDALONE)
-       {
-               server->close_plugin();
-               delete server;
-               delete default_keyframe;
-       }
-}
-
-int MWindow::modify_edithandles()
-{
-       undo->update_undo_before();
-       edl->modify_edithandles(session->drag_start, 
-               session->drag_position, 
-               session->drag_handle, 
-               edl->session->edit_handle_mode[session->drag_button],
-               edl->session->labels_follow_edits, 
-               edl->session->plugins_follow_edits,
-               edl->session->autos_follow_edits);
-
-       finish_modify_handles();
-
-
-//printf("MWindow::modify_handles 1\n");
-       return 0;
-}
-
-int MWindow::modify_pluginhandles()
-{
-       undo->update_undo_before();
-
-       edl->modify_pluginhandles(session->drag_start, 
-               session->drag_position, 
-               session->drag_handle, 
-               edl->session->edit_handle_mode[session->drag_button],
-               edl->session->labels_follow_edits,
-               edl->session->autos_follow_edits,
-               session->trim_edits);
-
-       finish_modify_handles();
-
-       return 0;
-}
-
-
-// Common to edithandles and plugin handles
-void MWindow::finish_modify_handles()
-{
-       int edit_mode = edl->session->edit_handle_mode[session->drag_button];
-
-       if((session->drag_handle == 1 && edit_mode != MOVE_NO_EDITS) ||
-               (session->drag_handle == 0 && edit_mode == MOVE_ONE_EDIT))
-       {
-               edl->local_session->set_selectionstart(session->drag_position);
-               edl->local_session->set_selectionend(session->drag_position);
-       }
-       else
-       if(edit_mode != MOVE_NO_EDITS)
-       {
-               edl->local_session->set_selectionstart(session->drag_start);
-               edl->local_session->set_selectionend(session->drag_start);
-       }
-
-       if(edl->local_session->get_selectionstart(1) < 0)
-       {
-               edl->local_session->set_selectionstart(0);
-               edl->local_session->set_selectionend(0);
-       }
-       undo->update_undo_after(_("drag handle"), LOAD_EDITS | LOAD_TIMEBAR);
-
-       save_backup();
-       restart_brender();
-       sync_parameters(CHANGE_EDL);
-       update_plugin_guis();
-       gui->update(1, 2, 1, 1, 1, 1, 0);
-       cwindow->update(1, 0, 0, 0, 1);
-}
-
-void MWindow::match_output_size(Track *track)
-{
-       undo->update_undo_before();
-       track->track_w = edl->session->output_w;
-       track->track_h = edl->session->output_h;
-       save_backup();
-       undo->update_undo_after(_("match output size"), LOAD_ALL);
-
-       restart_brender();
-       sync_parameters(CHANGE_EDL);
-}
-
-
-void MWindow::move_edits(ArrayList<Edit*> *edits, 
-               Track *track,
-               double position)
-{
-       undo->update_undo_before();
-
-       edl->tracks->move_edits(edits, 
-               track, 
-               position,
-               edl->session->labels_follow_edits, 
-               edl->session->plugins_follow_edits,
-               edl->session->autos_follow_edits);
-
-       save_backup();
-       undo->update_undo_after(_("move edit"), LOAD_ALL);
-
-       restart_brender();
-       cwindow->playback_engine->que->send_command(CURRENT_FRAME, 
-               CHANGE_EDL,
-               edl,
-               1);
-
-       update_plugin_guis();
-       gui->update(1,
-               1,      // 1 for incremental drawing.  2 for full refresh
-               1,
-               0,
-               0, 
-               0,
-               0);
-}
-
-void MWindow::move_effect(Plugin *plugin,
-       PluginSet *dest_plugin_set,
-       Track *dest_track,
-       int64_t dest_position)
-{
-       undo->update_undo_before();
-
-       edl->tracks->move_effect(plugin, 
-               dest_plugin_set, 
-               dest_track, 
-               dest_position);
-
-       save_backup();
-       undo->update_undo_after(_("move effect"), LOAD_ALL);
-
-       restart_brender();
-       cwindow->playback_engine->que->send_command(CURRENT_FRAME, 
-               CHANGE_EDL,
-               edl,
-               1);
-
-       update_plugin_guis();
-       gui->update(1,
-               1,      // 1 for incremental drawing.  2 for full refresh
-               0,
-               0,
-               0, 
-               0,
-               0);
-}
-
-void MWindow::move_plugins_up(PluginSet *plugin_set)
-{
-
-       undo->update_undo_before();
-       plugin_set->track->move_plugins_up(plugin_set);
-
-       save_backup();
-       undo->update_undo_after(_("move effect up"), LOAD_ALL);
-       restart_brender();
-       gui->update(1,
-               1,      // 1 for incremental drawing.  2 for full refresh
-               0,
-               0,
-               0, 
-               0,
-               0);
-       sync_parameters(CHANGE_EDL);
-}
-
-void MWindow::move_plugins_down(PluginSet *plugin_set)
-{
-       undo->update_undo_before();
-
-       plugin_set->track->move_plugins_down(plugin_set);
-
-       save_backup();
-       undo->update_undo_after(_("move effect down"), LOAD_ALL);
-       restart_brender();
-       gui->update(1,
-               1,      // 1 for incremental drawing.  2 for full refresh
-               0,
-               0,
-               0, 
-               0,
-               0);
-       sync_parameters(CHANGE_EDL);
-}
-
-void MWindow::move_track_down(Track *track)
-{
-       undo->update_undo_before();
-       edl->tracks->move_track_down(track);
-       save_backup();
-       undo->update_undo_after(_("move track down"), LOAD_ALL);
-
-       restart_brender();
-       gui->update(1, 1, 0, 0, 1, 0, 0);
-       sync_parameters(CHANGE_EDL);
-       save_backup();
-}
-
-void MWindow::move_tracks_down()
-{
-       undo->update_undo_before();
-       edl->tracks->move_tracks_down();
-       save_backup();
-       undo->update_undo_after(_("move tracks down"), LOAD_ALL);
-
-       restart_brender();
-       gui->update(1, 1, 0, 0, 1, 0, 0);
-       sync_parameters(CHANGE_EDL);
-       save_backup();
-}
-
-void MWindow::move_track_up(Track *track)
-{
-       undo->update_undo_before();
-       edl->tracks->move_track_up(track);
-       save_backup();
-       undo->update_undo_after(_("move track up"), LOAD_ALL);
-       restart_brender();
-       gui->update(1, 1, 0, 0, 1, 0, 0);
-       sync_parameters(CHANGE_EDL);
-       save_backup();
-}
-
-void MWindow::move_tracks_up()
-{
-       undo->update_undo_before();
-       edl->tracks->move_tracks_up();
-       save_backup();
-       undo->update_undo_after(_("move tracks up"), LOAD_ALL);
-       restart_brender();
-       gui->update(1, 1, 0, 0, 1, 0, 0);
-       sync_parameters(CHANGE_EDL);
-}
-
-
-void MWindow::mute_selection()
-{
-       double start = edl->local_session->get_selectionstart();
-       double end = edl->local_session->get_selectionend();
-       if(start != end)
-       {
-               undo->update_undo_before();
-               edl->clear(start, 
-                       end, 
-                       0, 
-                       edl->session->plugins_follow_edits,
-                       edl->session->autos_follow_edits);
-               edl->local_session->set_selectionend(end);
-               edl->local_session->set_selectionstart(start);
-               edl->paste_silence(start, 
-                       end, 
-                       0, 
-                       edl->session->plugins_follow_edits,
-                       edl->session->autos_follow_edits);
-               save_backup();
-               undo->update_undo_after(_("mute"), LOAD_EDITS);
-
-               restart_brender();
-               update_plugin_guis();
-               gui->update(1, 2, 1, 1, 1, 1, 0);
-               cwindow->playback_engine->que->send_command(CURRENT_FRAME, 
-                                                               CHANGE_EDL,
-                                                               edl,
-                                                               1);
-       }
-}
-
-
-
-void MWindow::overwrite(EDL *source)
-{
-       FileXML file;
-
-       double src_start = source->local_session->get_selectionstart();
-       double overwrite_len = source->local_session->get_selectionend() - src_start;
-       double dst_start = edl->local_session->get_selectionstart();
-       double dst_len = edl->local_session->get_selectionend() - dst_start;
-
-       undo->update_undo_before();
-       if (!EQUIV(dst_len, 0) && (dst_len < overwrite_len))
-       {
-// in/out points or selection present and shorter than overwrite range
-// shorten the copy range
-               overwrite_len = dst_len;
-       }
-
-       source->copy(src_start, 
-               src_start + overwrite_len, 
-               1,
-               0,
-               0,
-               &file,
-               "",
-               1);
-
-// HACK around paste_edl get_start/endselection on its own
-// so we need to clear only when not using both io points
-// FIXME: need to write simple overwrite_edl to be used for overwrite function
-       if (edl->local_session->get_inpoint() < 0 || 
-               edl->local_session->get_outpoint() < 0)
-               edl->clear(dst_start, 
-                       dst_start + overwrite_len, 
-                       0, 
-                       0,
-                       0);
-
-       paste(dst_start, 
-               dst_start + overwrite_len, 
-               &file,
-               0,
-               0,
-               0);
-
-       edl->local_session->set_selectionstart(dst_start + overwrite_len);
-       edl->local_session->set_selectionend(dst_start + overwrite_len);
-
-       save_backup();
-       undo->update_undo_after(_("overwrite"), LOAD_EDITS);
-
-       restart_brender();
-       update_plugin_guis();
-       gui->update(1, 1, 1, 1, 0, 1, 0);
-       sync_parameters(CHANGE_EDL);
-}
-
-// For splice and overwrite
-int MWindow::paste(double start, 
-       double end, 
-       FileXML *file,
-       int edit_labels,
-       int edit_plugins,
-       int edit_autos)
-{
-       clear(0);
-
-// Want to insert with assets shared with the master EDL.
-       insert(start, 
-                       file,
-                       edit_labels,
-                       edit_plugins,
-                       edit_autos,
-                       edl);
-
-       return 0;
-}
-
-// For editing using insertion point
-void MWindow::paste()
-{
-       double start = edl->local_session->get_selectionstart();
-       //double end = edl->local_session->get_selectionend();
-       int64_t len = gui->get_clipboard()->clipboard_len(SECONDARY_SELECTION);
-
-       if(len)
-       {
-               char *string = new char[len + 1];
-
-               undo->update_undo_before();
-
-
-               gui->get_clipboard()->from_clipboard(string, 
-                       len, 
-                       BC_PRIMARY_SELECTION);
-               FileXML file;
-               file.read_from_string(string);
-
-
-
-
-               clear(0);
-
-               insert(start, 
-                       &file, 
-                       edl->session->labels_follow_edits, 
-                       edl->session->plugins_follow_edits,
-                       edl->session->autos_follow_edits,
-                       0);
-
-               edl->optimize();
-
-
-               delete [] string;
-
-
-
-               save_backup();
-
-
-               undo->update_undo_after(_("paste"), LOAD_EDITS | LOAD_TIMEBAR);
-               restart_brender();
-               update_plugin_guis();
-               gui->update(1, 2, 1, 1, 0, 1, 0);
-               gui->unlock_window();
-               
-               awindow->gui->lock_window("MWindow::paste");
-               awindow->gui->update_assets();
-               awindow->gui->unlock_window();
-               
-               gui->lock_window("MWindow::paste");
-               sync_parameters(CHANGE_EDL);
-       }
-
-}
-
-int MWindow::paste_assets(double position, Track *dest_track)
-{
-       int result = 0;
-
-       undo->update_undo_before();
-
-
-
-       if(session->drag_assets->total)
-       {
-               load_assets(session->drag_assets, 
-                       position, 
-                       LOADMODE_PASTE,
-                       dest_track, 
-                       0,
-                       edl->session->labels_follow_edits, 
-                       edl->session->plugins_follow_edits,
-                       edl->session->autos_follow_edits);
-               result = 1;
-       }
-
-
-       if(session->drag_clips->total)
-       {
-               paste_edls(session->drag_clips, 
-                       LOADMODE_PASTE, 
-                       dest_track,
-                       position, 
-                       edl->session->labels_follow_edits, 
-                       edl->session->plugins_follow_edits,
-                       edl->session->autos_follow_edits);
-               result = 1;
-       }
-
-
-       save_backup();
-
-       undo->update_undo_after(_("paste assets"), LOAD_EDITS);
-       restart_brender();
-       gui->update(1, 
-               2,
-               1,
-               0,
-               0,
-               1,
-               0);
-       sync_parameters(CHANGE_EDL);
-       return result;
-}
-
-void MWindow::load_assets(ArrayList<Indexable*> *new_assets, 
-       double position, 
-       int load_mode,
-       Track *first_track,
-       RecordLabels *labels,
-       int edit_labels,
-       int edit_plugins,
-       int edit_autos)
-{
-const int debug = 0;
-if(debug) printf("MWindow::load_assets %d\n", __LINE__);
-       if(position < 0) position = edl->local_session->get_selectionstart();
-
-       ArrayList<EDL*> new_edls;
-       for(int i = 0; i < new_assets->total; i++)
-       {
-               Indexable *indexable = new_assets->get(i);
-               if(indexable->is_asset)
-               {
-                       remove_asset_from_caches((Asset*)indexable);
-               }
-               EDL *new_edl = new EDL;
-               new_edl->create_objects();
-               new_edl->copy_session(edl);
-               new_edls.append(new_edl);
-
-
-               if(indexable->is_asset)
-               {
-if(debug) printf("MWindow::load_assets %d\n", __LINE__);
-if(debug) ((Asset*)indexable)->dump();
-                       asset_to_edl(new_edl, (Asset*)indexable);
-               }
-               else
-                       edl_to_nested(new_edl, (EDL*)indexable);
-if(debug) printf("MWindow::load_assets %d\n", __LINE__);
-
-
-               if(labels)
-               {
-                       for(RecordLabel *label = labels->first; label; label = label->next)
-                       {
-                               new_edl->labels->toggle_label(label->position, label->position);
-                       }
-               }
-       }
-if(debug) printf("MWindow::load_assets %d\n", __LINE__);
-
-       paste_edls(&new_edls, 
-               load_mode, 
-               first_track,
-               position,
-               edit_labels,
-               edit_plugins,
-               edit_autos);
-if(debug) printf("MWindow::load_assets %d\n", __LINE__);
-
-
-       save_backup();
-       for(int i = 0; i < new_edls.size(); i++)
-               new_edls.get(i)->Garbage::remove_user();
-
-if(debug) printf("MWindow::load_assets %d\n", __LINE__);
-}
-
-int MWindow::paste_automation()
-{
-       int64_t len = gui->get_clipboard()->clipboard_len(SECONDARY_SELECTION);
-
-       if(len)
-       {
-               undo->update_undo_before();
-               char *string = new char[len + 1];
-               gui->get_clipboard()->from_clipboard(string, 
-                       len, 
-                       BC_PRIMARY_SELECTION);
-               FileXML file;
-               file.read_from_string(string);
-
-               edl->tracks->clear_automation(edl->local_session->get_selectionstart(), 
-                       edl->local_session->get_selectionend()); 
-               edl->tracks->paste_automation(edl->local_session->get_selectionstart(), 
-                       &file,
-                       0,
-                       1,
-                       edl->session->typeless_keyframes); 
-               save_backup();
-               undo->update_undo_after(_("paste keyframes"), LOAD_AUTOMATION);
-               delete [] string;
-
-
-               restart_brender();
-               update_plugin_guis();
-               gui->draw_overlays(1);
-               sync_parameters(CHANGE_PARAMS);
-               gui->update_patchbay();
-               cwindow->update(1, 0, 0);
-       }
-
-       return 0;
-}
-
-int MWindow::paste_default_keyframe()
-{
-       int64_t len = gui->get_clipboard()->clipboard_len(SECONDARY_SELECTION);
-
-       if(len)
-       {
-               undo->update_undo_before();
-               char *string = new char[len + 1];
-               gui->get_clipboard()->from_clipboard(string, 
-                       len, 
-                       BC_PRIMARY_SELECTION);
-               FileXML file;
-               file.read_from_string(string);
-               edl->tracks->paste_automation(edl->local_session->get_selectionstart(), 
-                       &file, 
-                       1, 
-                       0,
-                       edl->session->typeless_keyframes); 
-//             edl->tracks->paste_default_keyframe(&file); 
-               undo->update_undo_after(_("paste default keyframe"), LOAD_AUTOMATION);
-
-
-               restart_brender();
-               update_plugin_guis();
-               gui->draw_overlays(1);
-               sync_parameters(CHANGE_PARAMS);
-               gui->update_patchbay();
-               cwindow->update(1, 0, 0);
-               delete [] string;
-               save_backup();
-       }
-
-       return 0;
-}
-
-
-// Insert edls with project deletion and index file generation.
-int MWindow::paste_edls(ArrayList<EDL*> *new_edls, 
-       int load_mode, 
-       Track *first_track,
-       double current_position,
-       int edit_labels,
-       int edit_plugins,
-       int edit_autos)
-{
-
-       ArrayList<Track*> destination_tracks;
-       int need_new_tracks = 0;
-
-//PRINT_TRACE
-       if(!new_edls->total) return 0;
-
-//PRINT_TRACE
-//     double original_length = edl->tracks->total_playable_length();
-//     double original_preview_end = edl->local_session->preview_end;
-//PRINT_TRACE
-
-// Delete current project
-       if(load_mode == LOADMODE_REPLACE ||
-               load_mode == LOADMODE_REPLACE_CONCATENATE)
-       {
-               reset_caches();
-
-               edl->save_defaults(defaults);
-
-               hide_plugins();
-
-               edl->Garbage::remove_user();
-
-               edl = new EDL;
-
-               edl->create_objects();
-
-               edl->copy_session(new_edls->values[0]);
-
-               gui->mainmenu->update_toggles(0);
-
-
-               gui->unlock_window();
-
-               gwindow->gui->update_toggles(1);
-
-               gui->lock_window("MWindow::paste_edls");
-
-
-// Insert labels for certain modes constitutively
-               edit_labels = 1;
-               edit_plugins = 1;
-               edit_autos = 1;
-// Force reset of preview
-//             original_length = 0;
-//             original_preview_end = -1;
-       }
-
-
-//PRINT_TRACE
-
-// Create new tracks in master EDL
-       if(load_mode == LOADMODE_REPLACE || 
-               load_mode == LOADMODE_REPLACE_CONCATENATE ||
-               load_mode == LOADMODE_NEW_TRACKS)
-       {
-
-               need_new_tracks = 1;
-               for(int i = 0; i < new_edls->total; i++)
-               {
-                       EDL *new_edl = new_edls->values[i];
-                       for(Track *current = new_edl->tracks->first;
-                               current;
-                               current = NEXT)
-                       {
-                               if(current->data_type == TRACK_VIDEO)
-                               {
-                                       edl->tracks->add_video_track(0, 0);
-                                       if(current->draw) edl->tracks->last->draw = 1;
-                                       destination_tracks.append(edl->tracks->last);
-                               }
-                               else
-                               if(current->data_type == TRACK_AUDIO)
-                               {
-                                       edl->tracks->add_audio_track(0, 0);
-                                       destination_tracks.append(edl->tracks->last);
-                               }
-                               else
-                               if(current->data_type == TRACK_SUBTITLE)
-                               {
-                                       edl->tracks->add_subttl_track(0, 0);
-                                       destination_tracks.append(edl->tracks->last);
-                               }
-                               edl->session->highlighted_track = edl->tracks->total() - 1;
-                       }
-
-// Base track count on first EDL only for concatenation
-                       if(load_mode == LOADMODE_REPLACE_CONCATENATE) break;
-               }
-
-       }
-       else
-// Recycle existing tracks of master EDL
-       if(load_mode == LOADMODE_CONCATENATE || 
-               load_mode == LOADMODE_PASTE ||
-               load_mode == LOADMODE_NESTED)
-       {
-//PRINT_TRACE
-
-// The point of this is to shift forward labels after the selection so they can
-// then be shifted back to their original locations without recursively
-// shifting back every paste.
-               if((load_mode == LOADMODE_PASTE ||
-                       load_mode == LOADMODE_NESTED) && 
-                       edl->session->labels_follow_edits)
-                       edl->labels->clear(edl->local_session->get_selectionstart(),
-                                               edl->local_session->get_selectionend(),
-                                               1);
-       
-               Track *current = first_track ? first_track : edl->tracks->first;
-               for( ; current; current = NEXT)
-               {
-                       if(current->record)
-                       {
-                               destination_tracks.append(current);
-                       }
-               }
-//PRINT_TRACE
-
-       }
-//PRINT_TRACE
-
-
-
-
-       int destination_track = 0;
-       double *paste_position = new double[destination_tracks.total];
-
-
-
-
-
-// Iterate through the edls
-       for(int i = 0; i < new_edls->total; i++)
-       {
-
-               EDL *new_edl = new_edls->values[i];
-               double edl_length = new_edl->local_session->clipboard_length ?
-                       new_edl->local_session->clipboard_length :
-                       new_edl->tracks->total_length();
-// printf("MWindow::paste_edls 2 %f %f\n", 
-// new_edl->local_session->clipboard_length, 
-// new_edl->tracks->total_length());
-// new_edl->dump();
-
-
-
-//PRINT_TRACE
-
-// Convert EDL to master rates
-               new_edl->resample(new_edl->session->sample_rate, 
-                       edl->session->sample_rate, 
-                       TRACK_AUDIO);
-               new_edl->resample(new_edl->session->frame_rate, 
-                       edl->session->frame_rate, 
-                       TRACK_VIDEO);
-//PRINT_TRACE
-
-
-
-
-// Add assets and prepare index files
-               for(Asset *new_asset = new_edl->assets->first;
-                       new_asset;
-                       new_asset = new_asset->next)
-               {
-                       mainindexes->add_next_asset(0, new_asset);
-               }
-// Capture index file status from mainindex test
-               edl->update_assets(new_edl);
-//PRINT_TRACE
-
-
-
-// Get starting point of insertion.  Need this to paste labels.
-               switch(load_mode)
-               {
-                       case LOADMODE_REPLACE:
-                       case LOADMODE_NEW_TRACKS:
-                               current_position = 0;
-                               break;
-
-                       case LOADMODE_CONCATENATE:
-                       case LOADMODE_REPLACE_CONCATENATE:
-                               destination_track = 0;
-                               if(destination_tracks.total)
-                                       current_position = destination_tracks.values[0]->get_length();
-                               else
-                                       current_position = 0;
-                               break;
-
-                       case LOADMODE_PASTE:
-                       case LOADMODE_NESTED:
-                               destination_track = 0;
-                               if(i == 0)
-                               {
-                                       for(int j = 0; j < destination_tracks.total; j++)
-                                       {
-                                               paste_position[j] = (current_position >= 0) ? 
-                                                       current_position :
-                                                       edl->local_session->get_selectionstart();
-                                       }
-                               }
-                               break;
-
-                       case LOADMODE_RESOURCESONLY:
-                               edl->add_clip(new_edl);
-                               break;
-               }
-
-
-
-//PRINT_TRACE
-
-
-// Insert edl
-               if(load_mode != LOADMODE_RESOURCESONLY)
-               {
-// Insert labels
-//printf("MWindow::paste_edls %f %f\n", current_position, edl_length);
-                       if(load_mode == LOADMODE_PASTE ||
-                               load_mode == LOADMODE_NESTED)
-                               edl->labels->insert_labels(new_edl->labels, 
-                                       destination_tracks.total ? paste_position[0] : 0.0,
-                                       edl_length,
-                                       edit_labels);
-                       else
-                               edl->labels->insert_labels(new_edl->labels, 
-                                       current_position,
-                                       edl_length,
-                                       edit_labels);
-//PRINT_TRACE
-
-                       for(Track *new_track = new_edl->tracks->first; 
-                               new_track; 
-                               new_track = new_track->next)
-                       {
-// Get destination track of same type as new_track
-                               for(int k = 0; 
-                                       k < destination_tracks.total &&
-                                       destination_tracks.values[destination_track]->data_type != new_track->data_type;
-                                       k++, destination_track++)
-                               {
-                                       if(destination_track >= destination_tracks.total - 1)
-                                               destination_track = 0;
-                               }
-
-// Insert data into destination track
-                               if(destination_track < destination_tracks.total &&
-                                       destination_tracks.values[destination_track]->data_type == new_track->data_type)
-                               {
-                                       Track *track = destination_tracks.values[destination_track];
-
-// Replace default keyframes if first EDL and new tracks were created.
-// This means data copied from one track and pasted to another won't retain
-// the camera position unless it's a keyframe.  If it did, previous data in the
-// track might get unknowingly corrupted.  Ideally we would detect when differing
-// default keyframes existed and create discrete keyframes for both.
-                                       int replace_default = (i == 0) && need_new_tracks;
-
-//printf("MWindow::paste_edls 1 %d\n", replace_default);
-// Insert new track at current position
-                                       switch(load_mode)
-                                       {
-                                               case LOADMODE_REPLACE_CONCATENATE:
-                                               case LOADMODE_CONCATENATE:
-                                                       current_position = track->get_length();
-                                                       break;
-
-                                               case LOADMODE_PASTE:
-                                               case LOADMODE_NESTED:
-                                                       current_position = paste_position[destination_track];
-                                                       paste_position[destination_track] += new_track->get_length();
-                                                       break;
-                                       }
-
-//PRINT_TRACE
-                                       track->insert_track(new_track, 
-                                               current_position, 
-                                               replace_default,
-                                               edit_plugins,
-                                               edit_autos,
-                                               edl_length);
-//PRINT_TRACE
-                               }
-
-// Get next destination track
-                               destination_track++;
-                               if(destination_track >= destination_tracks.total)
-                                       destination_track = 0;
-                       }
-               }
-
-               if(load_mode == LOADMODE_PASTE ||
-                       load_mode == LOADMODE_NESTED)
-                       current_position += edl_length;
-       }
-
-
-// Move loading of clips and vwindow to the end - this fixes some
-// strange issue, for index not being shown
-// Assume any paste operation from the same EDL won't contain any clips.
-// If it did it would duplicate every clip here.
-       for(int i = 0; i < new_edls->total; i++)
-       {
-               EDL *new_edl = new_edls->values[i];
-
-               for(int j = 0; j < new_edl->clips.total; j++)
-               {
-                       edl->add_clip(new_edl->clips.values[j]);
-               }
-
-               if(new_edl->total_vwindow_edls())
-               {
-//                     if(edl->vwindow_edl) 
-//                             edl->vwindow_edl->Garbage::remove_user();
-//                     edl->vwindow_edl = new EDL(edl);
-//                     edl->vwindow_edl->create_objects();
-//                     edl->vwindow_edl->copy_all(new_edl->vwindow_edl);
-
-                       for(int j = 0; j < new_edl->total_vwindow_edls(); j++)
-                       {
-                               EDL *vwindow_edl = new EDL(edl);
-                               vwindow_edl->create_objects();
-                               vwindow_edl->copy_all(new_edl->get_vwindow_edl(j));
-                               edl->append_vwindow_edl(vwindow_edl, 0);
-                       }
-               }
-       }
-
-
-       if(paste_position) delete [] paste_position;
-
-
-// This is already done in load_filenames and everything else that uses paste_edls
-//     update_project(load_mode);
-
-// Fix preview range
-//     if(EQUIV(original_length, original_preview_end))
-//     {
-//             edl->local_session->preview_end = edl->tracks->total_playable_length();
-//     }
-
-
-// Start examining next batch of index files
-       mainindexes->start_build();
-
-
-// Don't save a backup after loading since the loaded file is on disk already.
-
-
-//PRINT_TRACE
-       return 0;
-}
-
-void MWindow::paste_silence()
-{
-       double start = edl->local_session->get_selectionstart();
-       double end = edl->local_session->get_selectionend();
-       undo->update_undo_before();
-       edl->paste_silence(start, 
-               end, 
-               edl->session->labels_follow_edits, 
-               edl->session->plugins_follow_edits,
-               edl->session->autos_follow_edits);
-       edl->optimize();
-       save_backup();
-       undo->update_undo_after(_("silence"), LOAD_EDITS | LOAD_TIMEBAR);
-
-       update_plugin_guis();
-       restart_brender();
-       gui->update(1, 2, 1, 1, 1, 1, 0);
-       cwindow->update(1, 0, 0, 0, 1);
-       cwindow->playback_engine->que->send_command(CURRENT_FRAME, 
-                                                       CHANGE_EDL,
-                                                       edl,
-                                                       1);
-}
-
-void MWindow::detach_transition(Transition *transition)
-{
-       undo->update_undo_before();
-       hide_plugin(transition, 1);
-       int is_video = (transition->edit->track->data_type == TRACK_VIDEO);
-       transition->edit->detach_transition();
-       save_backup();
-       undo->update_undo_after(_("detach transition"), LOAD_ALL);
-
-       if(is_video) restart_brender();
-       gui->update(0,
-               1,
-               0,
-               0,
-               0, 
-               0,
-               0);
-       sync_parameters(CHANGE_EDL);
-}
-
-void MWindow::detach_transitions()
-{
-       gui->lock_window("MWindow::detach_transitions 1");
-
-       undo->update_undo_before();
-       double start = edl->local_session->get_selectionstart();
-       double end = edl->local_session->get_selectionend();
-       edl->tracks->clear_transitions(start, end);
-
-       save_backup();
-       undo->update_undo_after(_("detach transitions"), LOAD_EDITS);
-
-       sync_parameters(CHANGE_EDL);
-       gui->update(0, 1, 0, 0, 0, 0, 0);
-       gui->unlock_window();
-}
-
-void MWindow::paste_transition()
-{
-// Only the first transition gets dropped.
-       PluginServer *server = session->drag_pluginservers->values[0];
-
-       undo->update_undo_before();
-       if(server->audio)
-               strcpy(edl->session->default_atransition, server->title);
-       else
-               strcpy(edl->session->default_vtransition, server->title);
-
-       edl->tracks->paste_transition(server, session->edit_highlighted);
-       save_backup();
-       undo->update_undo_after(_("transition"), LOAD_EDITS);
-
-       if(server->video) restart_brender();
-       sync_parameters(CHANGE_ALL);
-}
-
-void MWindow::paste_transitions(int track_type, char *title)
-{
-       gui->lock_window("MWindow::detach_transitions 1");
-
-       undo->update_undo_before();
-       double start = edl->local_session->get_selectionstart();
-       double end = edl->local_session->get_selectionend();
-       edl->tracks->paste_transitions(start, end, track_type, title);
-
-       save_backup();
-       undo->update_undo_after(_("attach transitions"), LOAD_EDITS);
-
-       sync_parameters(CHANGE_EDL);
-       gui->update(0, 1, 0, 0, 0, 0, 0);
-       gui->unlock_window();
-}
-
-void MWindow::paste_transition_cwindow(Track *dest_track)
-{
-       PluginServer *server = session->drag_pluginservers->values[0];
-       undo->update_undo_before();
-       edl->tracks->paste_video_transition(server, 1);
-       save_backup();
-       undo->update_undo_after(_("transition"), LOAD_EDITS);
-       restart_brender();
-       gui->update(0, 1, 0, 0, 0, 0, 0);
-       sync_parameters(CHANGE_ALL);
-}
-
-void MWindow::paste_audio_transition()
-{
-       PluginServer *server = scan_plugindb(edl->session->default_atransition,
-               TRACK_AUDIO);
-       if(!server)
-       {
-               char string[BCTEXTLEN];
-               sprintf(string, _("No default transition %s found."), edl->session->default_atransition);
-               gui->show_message(string);
-               return;
-       }
-
-       undo->update_undo_before();
-       edl->tracks->paste_audio_transition(server);
-       save_backup();
-       undo->update_undo_after(_("transition"), LOAD_EDITS);
-
-       sync_parameters(CHANGE_EDL);
-       gui->update(0, 1, 0, 0, 0, 0, 0);
-}
-
-void MWindow::paste_video_transition()
-{
-       PluginServer *server = scan_plugindb(edl->session->default_vtransition,
-               TRACK_VIDEO);
-       if(!server)
-       {
-               char string[BCTEXTLEN];
-               sprintf(string, _("No default transition %s found."), edl->session->default_vtransition);
-               gui->show_message(string);
-               return;
-       }
-
-       undo->update_undo_before();
-
-       edl->tracks->paste_video_transition(server);
-       save_backup();
-       undo->update_undo_after(_("transition"), LOAD_EDITS);
-
-       sync_parameters(CHANGE_EDL);
-       restart_brender();
-       gui->update(0, 1, 0, 0, 0, 0, 0);
-}
-
-void MWindow::shuffle_edits()
-{
-       gui->lock_window("MWindow::shuffle_edits 1");
-
-       undo->update_undo_before();
-       double start = edl->local_session->get_selectionstart();
-       double end = edl->local_session->get_selectionend();
-
-       edl->tracks->shuffle_edits(start, end);
-
-       save_backup();
-       undo->update_undo_after(_("shuffle edits"), LOAD_EDITS | LOAD_TIMEBAR);
-
-       sync_parameters(CHANGE_EDL);
-       restart_brender();
-       gui->update(0, 1, 1, 0, 0, 0, 0);
-       gui->unlock_window();
-}
-
-void MWindow::reverse_edits()
-{
-       gui->lock_window("MWindow::reverse_edits 1");
-
-       undo->update_undo_before();
-       double start = edl->local_session->get_selectionstart();
-       double end = edl->local_session->get_selectionend();
-
-       edl->tracks->reverse_edits(start, end);
-
-       save_backup();
-       undo->update_undo_after(_("reverse edits"), LOAD_EDITS | LOAD_TIMEBAR);
-
-       sync_parameters(CHANGE_EDL);
-       restart_brender();
-       gui->update(0, 1, 1, 0, 0, 0, 0);
-       gui->unlock_window();
-}
-
-void MWindow::align_edits()
-{
-       gui->lock_window("MWindow::align_edits 1");
-
-       undo->update_undo_before();
-       double start = edl->local_session->get_selectionstart();
-       double end = edl->local_session->get_selectionend();
-
-       edl->tracks->align_edits(start, end);
-
-       save_backup();
-       undo->update_undo_after(_("align edits"), LOAD_EDITS | LOAD_TIMEBAR);
-
-       sync_parameters(CHANGE_EDL);
-       restart_brender();
-       gui->update(0, 1, 1, 0, 0, 0, 0);
-       gui->unlock_window();
-}
-
-void MWindow::set_edit_length(double length)
-{
-       gui->lock_window("MWindow::detach_transitions 1");
-
-       undo->update_undo_before();
-       double start = edl->local_session->get_selectionstart();
-       double end = edl->local_session->get_selectionend();
-
-       edl->tracks->set_edit_length(start, end, length);
-
-       save_backup();
-       undo->update_undo_after(_("edit length"), LOAD_EDITS | LOAD_TIMEBAR);
-
-       sync_parameters(CHANGE_EDL);
-       restart_brender();
-       gui->update(0, 1, 1, 0, 0, 0, 0);
-       gui->unlock_window();
-}
-
-
-void MWindow::set_transition_length(Transition *transition, double length)
-{
-       gui->lock_window("MWindow::detach_transitions 1");
-
-       undo->update_undo_before();
-       //double start = edl->local_session->get_selectionstart();
-       //double end = edl->local_session->get_selectionend();
-
-       edl->tracks->set_transition_length(transition, length);
-
-       save_backup();
-       undo->update_undo_after(_("transition length"), LOAD_EDITS);
-
-       edl->session->default_transition_length = length;
-       sync_parameters(CHANGE_PARAMS);
-       gui->update(0, 1, 0, 0, 0, 0, 0);
-       gui->unlock_window();
-}
-
-void MWindow::set_transition_length(double length)
-{
-       gui->lock_window("MWindow::detach_transitions 1");
-
-       undo->update_undo_before();
-       double start = edl->local_session->get_selectionstart();
-       double end = edl->local_session->get_selectionend();
-
-       edl->tracks->set_transition_length(start, end, length);
-
-       save_backup();
-       undo->update_undo_after(_("transition length"), LOAD_EDITS);
-
-       edl->session->default_transition_length = length;
-       sync_parameters(CHANGE_PARAMS);
-       restart_brender();
-       gui->update(0, 1, 0, 0, 0, 0, 0);
-       gui->unlock_window();
-}
-
-
-void MWindow::redo_entry(BC_WindowBase *calling_window_gui)
-{
-
-       calling_window_gui->unlock_window();
-
-       cwindow->playback_engine->que->send_command(STOP,
-               CHANGE_NONE, 
-               0,
-               0);
-       cwindow->playback_engine->interrupt_playback(0);
-
-       for(int i = 0; i < vwindows.size(); i++)
-       {
-               if(vwindows.get(i)->is_running())
-               {
-                       vwindows.get(i)->playback_engine->que->send_command(STOP,
-                               CHANGE_NONE, 
-                               0,
-                               0);
-                       vwindows.get(i)->playback_engine->interrupt_playback(0);
-               }
-       }
-
-       cwindow->gui->lock_window("MWindow::redo_entry");
-       for(int i = 0; i < vwindows.size(); i++)
-       {
-               if(vwindows.get(i)->is_running())
-               {
-                       if (calling_window_gui != vwindows.get(i)->gui)
-                       {
-                               vwindows.get(i)->gui->lock_window("MWindow::redo_entry 2");
-                       }
-               }
-       }
-       gui->lock_window();
-
-       undo->redo(); 
-
-       save_backup();
-       update_plugin_states();
-       update_plugin_guis();
-       restart_brender();
-       gui->update(1, 2, 1, 1, 1, 1, 1);
-       cwindow->update(1, 1, 1, 1, 1);
-
-       if (calling_window_gui != cwindow->gui) 
-               cwindow->gui->unlock_window();
-       if (calling_window_gui != gui)
-               gui->unlock_window();
-
-
-       for(int i = 0; i < vwindows.size(); i++)
-       {
-               if(vwindows.get(i)->is_running())
-               {
-                       if (calling_window_gui != vwindows.get(i)->gui)
-                       {
-                               vwindows.get(i)->gui->unlock_window();
-                       }
-               }
-       }
-
-       cwindow->playback_engine->que->send_command(CURRENT_FRAME, 
-                          CHANGE_ALL,
-                          edl,
-                          1);
-       
-}
-
-
-void MWindow::resize_track(Track *track, int w, int h)
-{
-       undo->update_undo_before();
-// We have to move all maskpoints so they do not move in relation to image areas
-       ((MaskAutos*)track->automation->autos[AUTOMATION_MASK])->translate_masks(
-               (w - track->track_w) / 2, 
-               (h - track->track_h) / 2);
-       track->track_w = w;
-       track->track_h = h;
-       undo->update_undo_after(_("resize track"), LOAD_ALL);
-       save_backup();
-
-       restart_brender();
-       sync_parameters(CHANGE_EDL);
-}
-
-
-void MWindow::set_inpoint(int is_mwindow)
-{
-       undo->update_undo_before();
-       edl->set_inpoint(edl->local_session->get_selectionstart(1));
-       save_backup();
-       undo->update_undo_after(_("in point"), LOAD_TIMEBAR);
-
-
-       if(!is_mwindow)
-       {
-               gui->lock_window("MWindow::set_inpoint 1");
-       }
-       gui->update_timebar(1);
-       if(!is_mwindow)
-       {
-               gui->unlock_window();
-       }
-
-       if(is_mwindow)
-       {
-               cwindow->gui->lock_window("MWindow::set_inpoint 2");
-       }
-       cwindow->gui->timebar->update(1);
-       if(is_mwindow)
-       {
-               cwindow->gui->unlock_window();
-       }
-}
-
-void MWindow::set_outpoint(int is_mwindow)
-{
-       undo->update_undo_before();
-       edl->set_outpoint(edl->local_session->get_selectionend(1));
-       save_backup();
-       undo->update_undo_after(_("out point"), LOAD_TIMEBAR);
-
-
-       if(!is_mwindow)
-       {
-               gui->lock_window("MWindow::set_outpoint 1");
-       }
-       gui->update_timebar(1);
-       if(!is_mwindow)
-       {
-               gui->unlock_window();
-       }
-
-       if(is_mwindow)
-       {
-               cwindow->gui->lock_window("MWindow::set_outpoint 2");
-       }
-       cwindow->gui->timebar->update(1);
-       if(is_mwindow)
-       {
-               cwindow->gui->unlock_window();
-       }
-}
-
-void MWindow::splice(EDL *source)
-{
-       FileXML file;
-
-       undo->update_undo_before();
-       source->copy(source->local_session->get_selectionstart(), 
-               source->local_session->get_selectionend(), 
-               1,
-               0,
-               0,
-               &file,
-               "",
-               1);
-
-
-
-//file.dump();
-       double start = edl->local_session->get_selectionstart();
-       //double end = edl->local_session->get_selectionend();
-       double source_start = source->local_session->get_selectionstart();
-       double source_end = source->local_session->get_selectionend();
-
-       paste(start, 
-               start, 
-               &file,
-               edl->session->labels_follow_edits,
-               edl->session->plugins_follow_edits,
-               edl->session->autos_follow_edits);
-
-// Position at end of clip
-       edl->local_session->set_selectionstart(start + 
-               source_end - 
-               source_start);
-       edl->local_session->set_selectionend(start + 
-               source_end - 
-               source_start);
-
-       save_backup();
-       undo->update_undo_after(_("splice"), LOAD_EDITS | LOAD_TIMEBAR);
-       update_plugin_guis();
-       restart_brender();
-       gui->update(1, 1, 1, 1, 0, 1, 0);
-       sync_parameters(CHANGE_EDL);
-}
-
-void MWindow::to_clip()
-{
-       FileXML file;
-       double start, end;
-       
-       gui->lock_window("MWindow::to_clip 1");
-       start = edl->local_session->get_selectionstart();
-       end = edl->local_session->get_selectionend();
-
-       if(EQUIV(end, start)) 
-       {
-               start = 0;
-               end = edl->tracks->total_length();
-       }
-
-// Don't copy all since we don't want the clips twice.
-       edl->copy(start, 
-               end, 
-               0,
-               0,
-               0,
-               &file,
-               "",
-               1);
-
-
-       EDL *new_edl = new EDL(edl);
-       new_edl->create_objects();
-       new_edl->load_xml(&file, LOAD_ALL);
-       sprintf(new_edl->local_session->clip_title, _("Clip %d"), session->clip_number++);
-       new_edl->local_session->set_selectionstart(0);
-       new_edl->local_session->set_selectionend(0);
-
-       gui->unlock_window();
-
-       awindow->clip_edit->create_clip(new_edl);
-
-       gui->lock_window("MWindow::to_clip 2");
-       save_backup();
-       gui->unlock_window();
-}
-
-
-
-
-int MWindow::toggle_label(int is_mwindow)
-{
-       double position1, position2;
-       undo->update_undo_before();
-
-       if(cwindow->playback_engine->is_playing_back)
-       {
-               position1 = position2 = 
-                       cwindow->playback_engine->get_tracking_position();
-       }
-       else
-       {
-               position1 = edl->local_session->get_selectionstart(1);
-               position2 = edl->local_session->get_selectionend(1);
-       }
-
-       position1 = edl->align_to_frame(position1, 0);
-       position2 = edl->align_to_frame(position2, 0);
-
-       edl->labels->toggle_label(position1, position2);
-       save_backup();
-
-       if(!is_mwindow)
-       {
-               gui->lock_window("MWindow::toggle_label 1");
-       }
-       gui->update_timebar(0);
-       gui->activate_timeline();
-       gui->flush();
-       if(!is_mwindow)
-       {
-               gui->unlock_window();
-       }
-
-       if(is_mwindow)
-       {
-               cwindow->gui->lock_window("MWindow::toggle_label 2");
-       }
-       cwindow->gui->timebar->update(1);
-       if(is_mwindow)
-       {
-               cwindow->gui->unlock_window();
-       }
-
-       undo->update_undo_after(_("label"), LOAD_TIMEBAR);
-       return 0;
-}
-
-void MWindow::trim_selection()
-{
-       undo->update_undo_before();
-
-
-       edl->trim_selection(edl->local_session->get_selectionstart(), 
-               edl->local_session->get_selectionend(), 
-               edl->session->labels_follow_edits, 
-               edl->session->plugins_follow_edits,
-               edl->session->autos_follow_edits);
-
-       save_backup();
-       undo->update_undo_after(_("trim selection"), LOAD_EDITS | LOAD_TIMEBAR);
-       update_plugin_guis();
-       gui->update(1, 2, 1, 1, 1, 1, 0);
-       cwindow->update(1, 0, 0, 0, 1);
-       restart_brender();
-       cwindow->playback_engine->que->send_command(CURRENT_FRAME, 
-                                                       CHANGE_EDL,
-                                                       edl,
-                                                       1);
-}
-
-
-
-void MWindow::undo_entry(BC_WindowBase *calling_window_gui)
-{
-       calling_window_gui->unlock_window();
-
-       cwindow->playback_engine->que->send_command(STOP,
-               CHANGE_NONE, 
-               0,
-               0);
-       cwindow->playback_engine->interrupt_playback(0);
-
-printf("MWindow::undo_entry %d %d\n", __LINE__, vwindows.size());
-       for(int i = 0; i < vwindows.size(); i++)
-       {
-               if(vwindows.get(i)->is_running())
-               {
-                       vwindows.get(i)->playback_engine->que->send_command(STOP,
-                               CHANGE_NONE, 
-                               0,
-                               0);
-                       vwindows.get(i)->playback_engine->interrupt_playback(0);
-               }
-       }
-
-       cwindow->gui->lock_window("MWindow::undo_entry 1");
-       for(int i = 0; i < vwindows.size(); i++)
-       {
-               if(vwindows.get(i)->is_running())
-               {
-                       if (calling_window_gui != vwindows.get(i)->gui)
-                       {
-                               vwindows.get(i)->gui->lock_window("MWindow::undo_entry 4");
-                       }
-               }
-       }
-       gui->lock_window("MWindow::undo_entry 2");
-
-       undo->undo(); 
-
-       save_backup();
-       restart_brender();
-       update_plugin_states();
-       update_plugin_guis();
-
-
-
-       gui->update(1, 2, 1, 1, 1, 1, 1);
-       
-       gui->unlock_window();
-       
-       cwindow->update(1, 1, 1, 1, 1);
-
-       cwindow->gui->unlock_window();
-
-       for(int i = 0; i < vwindows.size(); i++)
-       {
-               if(vwindows.get(i)->is_running())
-               {
-                       if (calling_window_gui != vwindows.get(i)->gui)
-                       {
-                               vwindows.get(i)->gui->unlock_window();
-                       }
-               }
-       }
-       
-       if (calling_window_gui != gui)
-               gui->unlock_window();
-       
-
-       awindow->gui->lock_window("MWindow::undo_entry 3");
-       awindow->gui->update_assets();
-       awindow->gui->flush();
-       awindow->gui->unlock_window();
-
-       cwindow->playback_engine->que->send_command(CURRENT_FRAME, 
-                          CHANGE_ALL,
-                          edl,
-                          1);
-       calling_window_gui->lock_window("MWindow::undo_entry 4");
-}
-
-
-
-void MWindow::new_folder(const char *new_folder)
-{
-       undo->update_undo_before();
-       edl->new_folder(new_folder);
-       undo->update_undo_after(_("new folder"), LOAD_ALL);
-       awindow->gui->lock_window("MWindow::new_folder");
-       awindow->gui->update_assets();
-       awindow->gui->unlock_window();
-}
-
-void MWindow::delete_folder(char *folder)
-{
-//     undo->update_undo_after(_("delete folder"), LOAD_ALL);
-}
-
-void MWindow::select_point(double position)
-{
-       edl->local_session->set_selectionstart(position);
-       edl->local_session->set_selectionend(position);
-
-// Que the CWindow
-       cwindow->update(1, 0, 0, 0, 1);
-
-
-       update_plugin_guis();
-       gui->update_patchbay();
-       gui->hide_cursor(0);
-       gui->draw_cursor(0);
-       gui->mainclock->update(edl->local_session->get_selectionstart(1));
-       gui->zoombar->update();
-       gui->update_timebar(0);
-       gui->flash_canvas(0);
-       gui->flush();
-}
-
-
-
-
-void MWindow::map_audio(int pattern)
-{
-       undo->update_undo_before();
-       remap_audio(pattern);
-       undo->update_undo_after(_("map 1:1"), LOAD_AUTOMATION);
-       sync_parameters(CHANGE_PARAMS);
-       gui->update(0,
-               1,
-               0,
-               0,
-               1,
-               0,
-               0);
-}
-
-void MWindow::remap_audio(int pattern)
-{
-       int current_channel = 0;
-       int current_track = 0;
-       for(Track *current = edl->tracks->first; current; current = NEXT)
-       {
-               if(current->data_type == TRACK_AUDIO && 
-                       current->record)
-               {
-                       Autos *pan_autos = current->automation->autos[AUTOMATION_PAN];
-                       PanAuto *pan_auto = (PanAuto*)pan_autos->get_auto_for_editing(-1);
-
-                       for(int i = 0; i < MAXCHANNELS; i++)
-                       {
-                               pan_auto->values[i] = 0.0;
-                       }
-
-                       if(pattern == MWindow::AUDIO_1_TO_1)
-                       {
-                               pan_auto->values[current_channel] = 1.0;
-                       }
-                       else
-                       if(pattern == MWindow::AUDIO_5_1_TO_2)
-                       {
-                               switch(current_track)
-                               {
-                                       case 0:
-                                               pan_auto->values[0] = 0.5;
-                                               pan_auto->values[1] = 0.5;
-                                               break;
-                                       case 1:
-                                               pan_auto->values[0] = 1;
-                                               break;
-                                       case 2:
-                                               pan_auto->values[1] = 1;
-                                               break;
-                                       case 3:
-                                               pan_auto->values[0] = 1;
-                                               break;
-                                       case 4:
-                                               pan_auto->values[1] = 1;
-                                               break;
-                                       case 5:
-                                               pan_auto->values[0] = 0.5;
-                                               pan_auto->values[1] = 0.5;
-                                               break;
-                               }
-                       }
-                       
-                       BC_Pan::calculate_stick_position(edl->session->audio_channels, 
-                               edl->session->achannel_positions, 
-                               pan_auto->values, 
-                               MAX_PAN, 
-                               PAN_RADIUS,
-                               pan_auto->handle_x,
-                               pan_auto->handle_y);
-               
-                       current_channel++;
-                       current_track++;
-                       if(current_channel >= edl->session->audio_channels)
-                               current_channel = 0;
-               }
-       }
-}
-
-void MWindow::cut_commercials()
-{
-       undo->update_undo_before();
-       commercials->scan_media();
-       edl->optimize();
-       save_backup();
-       undo->update_undo_after(_("cut ads"), LOAD_EDITS | LOAD_TIMEBAR);
-
-       restart_brender();
-       update_plugin_guis();
-       gui->update(1, 2, 1, 1, 1, 1, 0);
-       cwindow->update(1, 0, 0, 0, 1);
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
-}
-
-