X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fawindowgui.C;h=bffaa2d1268d9a1ebdc933ef5822a31fe2cf1b5c;hb=5621db270ccbeabc106e0f438941dba6f930652b;hp=f49c67fb5da709cb365c436d876b68ce54f6b27a;hpb=bd0694fcee6080ec61e243ac6f278be5a48d564b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/awindowgui.C b/cinelerra-5.1/cinelerra/awindowgui.C index f49c67fb..bffaa2d1 100644 --- a/cinelerra-5.1/cinelerra/awindowgui.C +++ b/cinelerra-5.1/cinelerra/awindowgui.C @@ -552,6 +552,7 @@ void AssetPicon::create_objects() pixmap_w = pixmap_h * 16/9; icon_vframe = new VFrame(0, -1, pixmap_w, pixmap_h, BC_RGB888, -1); + icon_vframe->clear_frame(); { char string[BCTEXTLEN]; sprintf(string, _("Reading %s"), name); mwindow->gui->lock_window("AssetPicon::create_objects 3"); @@ -684,6 +685,7 @@ void AssetPicon::create_objects() pixmap_w = pixmap_h * 16/9; icon_vframe = new VFrame(0, -1, pixmap_w, pixmap_h, BC_RGB888, -1); + icon_vframe->clear_frame(); char string[BCTEXTLEN]; sprintf(string, _("Rendering %s"), name); mwindow->gui->lock_window("AssetPicon::create_objects 3"); @@ -845,6 +847,7 @@ AWindowGUI::AWindowGUI(MWindow *mwindow, AWindow *awindow) vicon_audio = 0; vicon_drawing = 1; displayed_folder = AW_NO_FOLDER; + folder_lock = new Mutex("AWindowGUI::folder_lock"); } AWindowGUI::~AWindowGUI() @@ -887,6 +890,7 @@ AWindowGUI::~AWindowGUI() delete vtransition_vframe; delete vtransition_icon; delete aeffect_vframe; delete aeffect_icon; delete veffect_vframe; delete veffect_icon; + delete folder_lock; } bool AWindowGUI::protected_pixmap(BC_Pixmap *icon) @@ -996,7 +1000,7 @@ void AWindowGUI::create_objects() plugin_icon(ladspa_vframe, ladspa_icon, "lad_picon", lad_picon_png); plugin_icon(ff_aud_vframe, ff_aud_icon, "ff_audio", ff_audio_png); plugin_icon(ff_vid_vframe, ff_vid_icon, "ff_video", ff_video_png); - + folder_lock->lock("AWindowGUI::create_objects"); // Mandatory folders folders.append(new AssetPicon(mwindow, this, AW_AEFFECT_FOLDER, 1)); folders.append(new AssetPicon(mwindow, this, AW_VEFFECT_FOLDER, 1)); @@ -1008,6 +1012,7 @@ void AWindowGUI::create_objects() folders.append(new AssetPicon(mwindow, this, AW_MEDIA_FOLDER, 1)); create_label_folder(); + folder_lock->unlock(); mwindow->theme->get_awindow_sizes(this); load_defaults(mwindow->defaults); @@ -1424,11 +1429,13 @@ void AWindowGUI::create_label_folder() void AWindowGUI::update_asset_list() { + ArrayList new_assets; for( int i = 0; i < assets.total; i++ ) { AssetPicon *picon = (AssetPicon*)assets.values[i]; picon->in_use = 0; } + mwindow->gui->lock_window("AWindowGUI::update_asset_list"); // Synchronize EDL clips for( int i=0; iedl->clips.size(); ++i ) { int exists = 0; @@ -1449,8 +1456,7 @@ void AWindowGUI::update_asset_list() if( !exists ) { AssetPicon *picon = new AssetPicon(mwindow, this, mwindow->edl->clips[i]); - picon->create_objects(); - assets.append(picon); + new_assets.append(picon); } } @@ -1473,15 +1479,10 @@ void AWindowGUI::update_asset_list() if( !exists ) { AssetPicon *picon = new AssetPicon(mwindow, this, current); - picon->create_objects(); - assets.append(picon); + new_assets.append(picon); } } - mwindow->gui->lock_window("AWindowGUI::update_asset_list"); - mwindow->gui->default_message(); - mwindow->gui->unlock_window(); - // Synchronize nested EDLs for( int i=0; iedl->nested_edls.size(); ++i ) { int exists = 0; @@ -1502,10 +1503,20 @@ void AWindowGUI::update_asset_list() if( !exists ) { AssetPicon *picon = new AssetPicon(mwindow, this, (Indexable*)nested_edl); - picon->create_objects(); - assets.append(picon); + new_assets.append(picon); } } + mwindow->gui->unlock_window(); + + for( int i=0; icreate_objects(); + assets.append(picon); + } + + mwindow->gui->lock_window(); + mwindow->gui->default_message(); + mwindow->gui->unlock_window(); for( int i = assets.size() - 1; i >= 0; i-- ) { AssetPicon *picon = (AssetPicon*)assets.get(i); @@ -1545,6 +1556,7 @@ void AWindowGUI::update_picon(Indexable *indexable) void AWindowGUI::sort_assets(int use_mtime) { + folder_lock->lock("AWindowGUI::sort_assets"); switch( mwindow->edl->session->awindow_folder ) { case AW_AEFFECT_FOLDER: sort_picons(&aeffects); @@ -1563,16 +1575,20 @@ void AWindowGUI::sort_assets(int use_mtime) break; default: sort_picons(&assets, use_mtime); + break; } // reset xyposition asset_list->update_format(asset_list->get_format(), 0); + folder_lock->unlock(); update_assets(); } void AWindowGUI::sort_folders() { + folder_lock->lock("AWindowGUI::update_assets"); sort_picons(&folders); folder_list->update_format(folder_list->get_format(), 0); + folder_lock->unlock(); update_assets(); } @@ -1658,7 +1674,7 @@ void AWindowGUI::copy_picons(ArrayList *dst, if( picon->edl ) dst[1].append(item2 = new BC_ListBoxItem(picon->edl->local_session->clip_notes)); else - if( picon->label && picon->label->textstr ) + if( picon->label ) dst[1].append(item2 = new BC_ListBoxItem(picon->label->textstr)); else if( picon->mtime ) { char date_time[BCSTRLEN]; @@ -1745,6 +1761,7 @@ void AWindowGUI::filter_displayed_assets() void AWindowGUI::update_assets() { stop_vicon_drawing(); + folder_lock->lock("AWindowGUI::update_assets"); update_folder_list(); update_asset_list(); labellist.remove_all_objects(); @@ -1753,6 +1770,7 @@ void AWindowGUI::update_assets() if( displayed_folder != mwindow->edl->session->awindow_folder ) search_text->clear(); filter_displayed_assets(); + folder_lock->unlock(); if( mwindow->edl->session->folderlist_format != folder_list->get_format() ) { folder_list->update_format(mwindow->edl->session->folderlist_format, 0); @@ -2024,20 +2042,30 @@ int AWindowAssets::handle_event() { AssetPicon *asset_picon = (AssetPicon *)get_selection(0, 0); if( !asset_picon ) return 0; + Indexable *picon_idxbl = asset_picon->indexable; + EDL *picon_edl = asset_picon->edl; + int proxy = 0; + VWindow *vwindow = 0; switch( mwindow->edl->session->awindow_folder ) { case AW_AEFFECT_FOLDER: case AW_VEFFECT_FOLDER: case AW_ATRANSITION_FOLDER: case AW_VTRANSITION_FOLDER: return 1; + case AW_PROXY_FOLDER: + proxy = 1; // fall thru + default: + if( mwindow->vwindows.size() > DEFAULT_VWINDOW ) + vwindow = mwindow->vwindows.get(DEFAULT_VWINDOW); + break; } - VWindow *vwindow = mwindow->vwindows.size() > DEFAULT_VWINDOW ? - mwindow->vwindows.get(DEFAULT_VWINDOW) : 0; if( !vwindow || !vwindow->is_running() ) return 1; + if( proxy && picon_idxbl ) { + picon_edl = gui->collect_proxy(picon_idxbl); + picon_idxbl = 0; + } - if( asset_picon->indexable ) - vwindow->change_source(asset_picon->indexable); - else if( asset_picon->edl ) - vwindow->change_source(asset_picon->edl); + if( picon_idxbl ) vwindow->change_source(picon_idxbl); + else if( picon_edl ) vwindow->change_source(picon_edl); return 1; } @@ -2465,10 +2493,14 @@ AddTools::AddTools(MWindow *mwindow, AWindowGUI *gui, int x, int y, const char * void AddTools::create_objects() { uint64_t vis = 0; - add_item(new AddPluginItem(this, "ladspa", PLUGIN_LADSPA_ID)); - vis |= 1 << PLUGIN_LADSPA_ID; add_item(new AddPluginItem(this, "ffmpeg", PLUGIN_FFMPEG_ID)); vis |= 1 << PLUGIN_FFMPEG_ID; + add_item(new AddPluginItem(this, "ladspa", PLUGIN_LADSPA_ID)); + vis |= 1 << PLUGIN_LADSPA_ID; +#ifdef HAVE_LV2 + add_item(new AddPluginItem(this, "lv2", PLUGIN_LV2_ID)); + vis |= 1 << PLUGIN_LV2_ID; +#endif for( int i=0; isize(); ++i ) { PluginServer *plugin = MWindow::plugindb->get(i); if( !plugin->audio && !plugin->video ) continue; @@ -2487,8 +2519,9 @@ void AddTools::create_objects() #if 0 // plugin_dirs list from toplevel makefile include plugin_defs -N_("ladspa") N_("ffmpeg") +N_("ladspa") +N_("lv2") N_("audio_tools") N_("audio_transitions") N_("blending")