pluginclient cr=apply in option value textbox, add loop_mode for vwdw
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / mwindow.C
index c4e7a7cbf1fe22118a12034cffddcfe47ed2c114..1466b4451275c4b0529af43647787a70dae5db74 100644 (file)
@@ -349,8 +349,9 @@ MWindow::~MWindow()
        delete gui;             gui = 0;
        delete mainindexes;     mainindexes = 0;
        delete mainprogress;    mainprogress = 0;
-       delete audio_cache;     audio_cache = 0;  // delete the cache after the assets
-       delete video_cache;     video_cache = 0;  // delete the cache after the assets
+ // delete the caches after the assets
+       if( audio_cache ) { audio_cache->remove_user();  audio_cache = 0; }
+       if( video_cache ) { video_cache->remove_user();  video_cache = 0; }
        delete frame_cache;     frame_cache = 0;
        delete wave_cache;      wave_cache = 0;
        delete plugin_guis;     plugin_guis = 0;
@@ -2492,8 +2493,6 @@ int MWindow::to_proxy(Asset *asset, int new_scale, int new_use_scaler)
                for( int i=0,n=edl->nested_edls.size(); i<n; ++i ) {
                        EDL *orig_nested = edl->nested_edls[i];
                        char new_path[BCTEXTLEN];
-                       if( !ProxyRender::from_proxy_path(new_path, orig_nested, proxy_scale) )
-                               continue;
                        proxy_render.to_proxy_path(new_path, orig_nested, proxy_scale);
 // test if proxy asset was already added to proxy_assets
                        int got_it = 0;
@@ -3431,7 +3430,7 @@ int MWindow::get_hash_color(Edit *edit)
        char path[BCTEXTLEN];
        if( !edit->asset || edit->track->data_type != TRACK_VIDEO ||
            edl->session->proxy_scale == 1 ||
-           ProxyRender::from_proxy_path(path, idxbl, edl->session->proxy_scale) )
+           ProxyRender::from_proxy_path(path, (Asset*)idxbl, edl->session->proxy_scale) )
                strcpy(path, idxbl->path);
        char *cp = strrchr(path, '/');
        cp = !cp ? path : cp+1;
@@ -4004,7 +4003,7 @@ void MWindow::clip_to_media()
                char *bp = strrchr(clip->local_session->clip_title, '/');
                bp = bp ? bp+1 : clip->local_session->clip_title;
                cp += snprintf(cp, ep-cp, "%s", bp);
-               EDL *nested = edl->new_nested_edl(clip, path);
+               EDL *nested = edl->new_nested_clip(clip, path);
                edl->clips.remove(clip);
                clip->remove_user();
                mainindexes->add_indexable(nested);
@@ -4467,7 +4466,9 @@ int MWindow::create_aspect_ratio(float &w, float &h, int width, int height)
 
 void MWindow::reset_caches()
 {
-       awindow->gui->stop_vicon_drawing();
+       int locked  = gui->get_window_lock();
+       if( locked ) gui->unlock_window();
+       awindow->gui->stop_vicon_drawing(1);
        frame_cache->remove_all();
        wave_cache->remove_all();
        audio_cache->remove_all();
@@ -4487,11 +4488,12 @@ void MWindow::reset_caches()
                if( vwindow->playback_engine->video_cache )
                        vwindow->playback_engine->video_cache->remove_all();
        }
+       if( locked ) gui->lock_window("MWindow::reset_caches");
 }
 
 void MWindow::remove_from_caches(Indexable *idxbl)
 {
-       awindow->gui->stop_vicon_drawing();
+       awindow->gui->stop_vicon_drawing(1);
        frame_cache->remove_item(idxbl);
        wave_cache->remove_item(idxbl);
        if( gui->render_engine &&
@@ -4531,7 +4533,7 @@ void MWindow::remove_from_caches(Indexable *idxbl)
 void MWindow::remove_assets_from_project(int push_undo, int redraw, int delete_indexes,
                ArrayList<Indexable*> *drag_assets, ArrayList<EDL*> *drag_clips)
 {
-       awindow->gui->stop_vicon_drawing();
+       awindow->gui->stop_vicon_drawing(1);
 
 // Remove from VWindow.
        if( drag_clips ) {
@@ -5015,7 +5017,7 @@ int MWindow::select_asset(Asset *asset, int vstream, int astream, int delete_tra
                                track->track_h = edl->session->output_h;
                        }
                        else if( delete_tracks )
-                               edl->tracks->delete_track(track);
+                               edl->tracks->delete_track(track, 0);
                }
                edl->retrack();
                edl->resample(old_framerate, session->frame_rate, TRACK_VIDEO);
@@ -5051,7 +5053,7 @@ int MWindow::select_asset(Asset *asset, int vstream, int astream, int delete_tra
                                                delete edit;
                                }
                                if( !track->edits->first )
-                                       edl->tracks->delete_track(track);
+                                       edl->tracks->delete_track(track, 0);
                        }
                }
                edl->rechannel();