X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fawindowgui.C;h=505f32f16cd2c191e3b8d6d19c01dbaedf76fcf1;hb=7cec2a82e63b4cbd8ce58fd98bd66eb4e7f2e826;hp=8c615bee7be58dea8a298b6d0f3cbb611c32101f;hpb=976d56536456148f6d14a2c12630c20e367abbe1;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/awindowgui.C b/cinelerra-5.1/cinelerra/awindowgui.C index 8c615bee..505f32f1 100644 --- a/cinelerra-5.1/cinelerra/awindowgui.C +++ b/cinelerra-5.1/cinelerra/awindowgui.C @@ -134,6 +134,15 @@ VFrame *AssetVIcon::frame() temp->draw_line(x,0, x,vh); return temp; } + int ww = picon->gui->vicon_thread->view_w; + int hh = picon->gui->vicon_thread->view_h; + if( !asset->video_data ) { + if( !temp ) { + temp = new VFrame(0, -1, ww, hh, BC_RGB888, -1); + temp->clear_frame(); + } + return temp; + } if( seq_no >= images.size() ) { MWindow *mwindow = picon->mwindow; File *file = mwindow->video_cache->check_out(asset, mwindow->edl, 1); @@ -143,8 +152,6 @@ VFrame *AssetVIcon::frame() } if( !temp ) temp = new VFrame(0, -1, asset->width, asset->height, BC_RGB888, -1); - int ww = picon->gui->vicon_thread->view_w; - int hh = picon->gui->vicon_thread->view_h; while( seq_no >= images.size() ) { file->set_layer(0); int64_t pos = images.size() / picon->gui->vicon_thread->refresh_rate * frame_rate; @@ -171,7 +178,7 @@ int AssetVIcon::get_vx() int AssetVIcon::get_vy() { BC_ListBox *lbox = picon->gui->asset_list; - return lbox->get_item_y(picon) + lbox->get_title_h(); + return lbox->get_item_y(picon); } void AssetVIcon::load_audio() @@ -651,7 +658,6 @@ void AssetPicon::create_objects() open_render_engine(edl, 0); render_video(0, gui->temp_picon); close_render_engine(); - gui->lock_window("AssetPicon::create_objects 0"); icon_vframe = new VFrame(0, -1, pixmap_w, pixmap_h, BC_RGB888, -1); icon_vframe->transfer_from(gui->temp_picon); @@ -661,6 +667,7 @@ void AssetPicon::create_objects() pixmap_w = icon_vframe->get_w(); pixmap_h = icon_vframe->get_h(); } + gui->lock_window("AssetPicon::create_objects 0"); icon = new BC_Pixmap(gui, pixmap_w, pixmap_h); icon->draw_vframe(icon_vframe, 0, 0, pixmap_w, pixmap_h, 0, 0); @@ -847,6 +854,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() @@ -889,6 +897,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) @@ -998,7 +1007,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)); @@ -1010,6 +1019,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); @@ -1023,6 +1033,8 @@ void AWindowGUI::create_objects() add_subwindow(asset_list = new AWindowAssets(mwindow, this, x1, y1, w1, h1)); vicon_thread = new VIconThread(asset_list); + int x0 = 0, y0 = asset_list->get_title_h(); + vicon_thread->set_drawing_area(x0,y0, get_w(),get_h()); vicon_thread->start(); vicon_audio = new AssetVIconAudio(this); @@ -1174,8 +1186,15 @@ void AWindowGUI::start_vicon_drawing() { if( !vicon_drawing ) return; if( mwindow->edl->session->awindow_folder != AW_MEDIA_FOLDER ) return; - if( mwindow->edl->session->assetlist_format != ASSETS_ICONS ) return; - vicon_thread->start_drawing(); + switch( mwindow->edl->session->assetlist_format ) { + case ASSETS_ICONS: + case ASSETS_ICONS_PACKED: + case ASSETS_ICON_LIST: + vicon_thread->start_drawing(); + break; + default: + break; + } } void AWindowGUI::stop_vicon_drawing() @@ -1206,6 +1225,7 @@ AWindowRemovePluginGUI:: void AWindowRemovePluginGUI::create_objects() { + lock_window("AWindowRemovePluginGUI::create_objects"); BC_Button *ok_button = new BC_OKButton(this); add_subwindow(ok_button); BC_Button *cancel_button = new BC_CancelButton(this); @@ -1219,6 +1239,7 @@ void AWindowRemovePluginGUI::create_objects() 0, 0, 1, 0, 0, LISTBOX_SINGLE, ICON_LEFT, 0); add_subwindow(list); show_window(); + unlock_window(); } int AWindowRemovePlugin::remove_plugin(PluginServer *plugin, ArrayList &folder) @@ -1480,8 +1501,6 @@ void AWindowGUI::update_asset_list() } } - mwindow->gui->default_message(); - // Synchronize nested EDLs for( int i=0; iedl->nested_edls.size(); ++i ) { int exists = 0; @@ -1513,6 +1532,10 @@ void AWindowGUI::update_asset_list() 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); if( !picon->in_use ) { @@ -1551,6 +1574,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); @@ -1569,16 +1593,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(); } @@ -1664,7 +1692,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]; @@ -1751,6 +1779,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(); @@ -1759,6 +1788,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); @@ -1769,6 +1799,11 @@ void AWindowGUI::update_assets() if( mwindow->edl->session->assetlist_format != asset_list->get_format() ) { asset_list->update_format(mwindow->edl->session->assetlist_format, 0); + int x0 = 0; + int x1 = asset_list->get_w(); + int y0 = asset_list->get_title_h(); + int y1 = asset_list->get_h(); + vicon_thread->set_drawing_area(x0,y0, x1,y1); } int asset_xposition = asset_list->get_xposition(); int asset_yposition = asset_list->get_yposition(); @@ -1896,7 +1931,7 @@ int AWindowDivider::button_release_event() AWindowFolders::AWindowFolders(MWindow *mwindow, AWindowGUI *gui, int x, int y, int w, int h) : BC_ListBox(x, y, w, h, - mwindow->edl->session->folderlist_format == ASSETS_ICONS ? + mwindow->edl->session->folderlist_format == FOLDERS_ICONS ? LISTBOX_ICONS : LISTBOX_TEXT, &gui->folders, // Each column has an ArrayList of BC_ListBoxItems. 0, // Titles for columns. Set to 0 for no titles @@ -1962,9 +1997,11 @@ int AWindowFolders::button_press_event() AWindowAssets::AWindowAssets(MWindow *mwindow, AWindowGUI *gui, int x, int y, int w, int h) - : BC_ListBox(x, y, w, h, - (mwindow->edl->session->assetlist_format == ASSETS_ICONS && gui->allow_iconlisting ) ? - LISTBOX_ICONS : LISTBOX_TEXT, + : BC_ListBox(x, y, w, h, !gui->allow_iconlisting ? LISTBOX_TEXT : + mwindow->edl->session->assetlist_format == ASSETS_ICONS ? LISTBOX_ICONS : + mwindow->edl->session->assetlist_format == ASSETS_ICONS_PACKED ? LISTBOX_ICONS_PACKED : + mwindow->edl->session->assetlist_format == ASSETS_ICON_LIST ? LISTBOX_ICON_LIST : + LISTBOX_TEXT, &gui->assets, // Each column has an ArrayList of BC_ListBoxItems. gui->asset_titles,// Titles for columns. Set to 0 for no titles mwindow->edl->session->asset_columns, // width of each column @@ -2586,28 +2623,55 @@ int AWindowListFormat::handle_event() gui->stop_vicon_drawing(); EDLSession *session = mwindow->edl->session; - switch( session->assetlist_format ) { - case ASSETS_TEXT: - session->assetlist_format = ASSETS_ICONS; - break; - case ASSETS_ICONS: - session->assetlist_format = ASSETS_TEXT; - break; + if( mwindow->awindow->gui->allow_iconlisting ) { + switch( session->assetlist_format ) { + case ASSETS_TEXT: + session->assetlist_format = ASSETS_ICONS; + break; + case ASSETS_ICONS: + session->assetlist_format = ASSETS_ICONS_PACKED; + break; + case ASSETS_ICONS_PACKED: + session->assetlist_format = ASSETS_ICON_LIST; + break; + case ASSETS_ICON_LIST: + session->assetlist_format = ASSETS_TEXT; + break; + } } - - gui->asset_list->update_format(session->assetlist_format, 1); - if( !mwindow->awindow->gui->allow_iconlisting ) { + else mwindow->edl->session->assetlist_format = ASSETS_TEXT; - } + gui->asset_list->update_format(session->assetlist_format, 0); + int x0 = 0; + int x1 = gui->asset_list->get_w(); + int y0 = gui->asset_list->get_title_h(); + int y1 = gui->asset_list->get_h(); + gui->vicon_thread->set_drawing_area(x0,y0, x1,y1); + gui->async_update_assets(); gui->start_vicon_drawing(); return 1; } void AWindowListFormat::update() { - set_text(mwindow->edl->session->assetlist_format == ASSETS_TEXT ? - (char*)_("Display icons") : (char*)_("Display text")); + EDLSession *session = mwindow->edl->session; + const char *text = 0; + switch( session->assetlist_format ) { + case ASSETS_TEXT: + text = _("Display icons"); + break; + case ASSETS_ICONS: + text = _("Display icons packed"); + break; + case ASSETS_ICONS_PACKED: + text = _("Display icon list"); + break; + case ASSETS_ICON_LIST: + text = _("Display text"); + break; + } + set_text(text); } AWindowListSort::AWindowListSort(MWindow *mwindow, AWindowGUI *gui)