X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fclippopup.C;h=65eebb61e889f642a58eb3990c709ab4e476b8b0;hp=595155c0d8440c9fd5fc06c2bf28f8a618ae7477;hb=1529091cdf16df199a901aabe6e8fa1813a933af;hpb=6050493632cb3681227b7ec8c12decd449dcf66f diff --git a/cinelerra-5.1/cinelerra/clippopup.C b/cinelerra-5.1/cinelerra/clippopup.C index 595155c0..65eebb61 100644 --- a/cinelerra-5.1/cinelerra/clippopup.C +++ b/cinelerra-5.1/cinelerra/clippopup.C @@ -65,13 +65,14 @@ void ClipPopup::create_objects() BC_SubMenu *submenu; add_item(info = new ClipPopupInfo(mwindow, this)); add_item(format = new AWindowListFormat(mwindow, gui)); - add_item(new ClipPopupSort(mwindow, this)); + add_item(sort = new ClipPopupSort(mwindow, this)); + add_item(open_edl = new ClipPopupOpenEDL(mwindow, this)); + add_item(close_edl = new ClipPopupCloseEDL(mwindow, gui)); + add_item(to_media = new ClipPopupToMedia(mwindow, this)); add_item(view = new ClipPopupView(mwindow, this)); add_item(view_window = new ClipPopupViewWindow(mwindow, this)); - add_item(new ClipPopupCopy(mwindow, this)); - add_item(new ClipPopupNest(mwindow, this)); - add_item(new ClipPopupUnNest(mwindow, this)); - add_item(new ClipPopupPaste(mwindow, this)); + add_item(copy = new ClipPopupCopy(mwindow, this)); + add_item(paste = new ClipPopupPaste(mwindow, this)); add_item(menu_item = new BC_MenuItem(_("Match..."))); menu_item->add_submenu(submenu = new BC_SubMenu()); submenu->add_submenuitem(new ClipMatchSize(mwindow, this)); @@ -128,6 +129,12 @@ int ClipPopup::update() { format->update(); gui->collect_assets(); + EDL *clip = !mwindow->session->drag_clips->size() ? 0 : + mwindow->session->drag_clips->get(0); + int enable_open = clip ? 1 : 0; + open_edl->set_enabled(enable_open); + int enable_close = mwindow->stack.size() > 0 ? 1 : 0; + close_edl->set_enabled(enable_close); return 0; } @@ -344,8 +351,7 @@ ClipPopupDelete::~ClipPopupDelete() int ClipPopupDelete::handle_event() { popup->gui->unlock_window(); - mwindow->remove_assets_from_project(1, 1, - mwindow->session->drag_assets, + mwindow->remove_assets_from_project(1, 1, 0, 0, mwindow->session->drag_clips); popup->gui->lock_window("ClipPopupDelete::handle_event"); return 1; @@ -379,7 +385,7 @@ int ClipPasteToFolder::handle_event() } else { char *cp = strchr(string, '\n'); - if( cp-string < 32 ) *cp = 0; + if( cp && cp-string < 32 ) *cp = 0; else if( len > 32 ) string[32] = 0; eprintf("paste buffer is not EDL:\n%s", string); } @@ -407,6 +413,7 @@ ClipListMenu::~ClipListMenu() void ClipListMenu::create_objects() { add_item(format = new AWindowListFormat(mwindow, gui)); + add_item(close_edl = new ClipPopupCloseEDL(mwindow, gui)); add_item(new AWindowListSort(mwindow, gui)); add_item(new ClipPasteToFolder(mwindow)); update(); @@ -415,107 +422,71 @@ void ClipListMenu::create_objects() void ClipListMenu::update() { format->update(); + int enable_close = mwindow->stack.size() > 0 ? 1 : 0; + close_edl->set_enabled(enable_close); } -ClipPopupNest::ClipPopupNest(MWindow *mwindow, ClipPopup *popup) - : BC_MenuItem(_("Nest")) +ClipPopupToMedia::ClipPopupToMedia(MWindow *mwindow, ClipPopup *popup) + : BC_MenuItem(_("Nest to Media")) { this->mwindow = mwindow; this->popup = popup; } -ClipPopupNest::~ClipPopupNest() +ClipPopupToMedia::~ClipPopupToMedia() { } -int ClipPopupNest::handle_event() +int ClipPopupToMedia::handle_event() { - MWindowGUI *gui = mwindow->gui; - gui->lock_window("ClipPopupNest::handle_event 1"); - if( mwindow->edl->session->proxy_scale != 1 ) { + if( mwindow->edl->session->proxy_scale == 1 ) + mwindow->clip_to_media(); + else eprintf("Nesting not allowed when proxy scale != 1"); - } - else if( mwindow->session->drag_clips->total > 0 ) { - EDL *edl = mwindow->edl; - time_t dt; time(&dt); - struct tm dtm; localtime_r(&dt, &dtm); - char path[BCSTRLEN]; - sprintf(path, _("Nested_%02d%02d%02d-%02d%02d%02d"), - dtm.tm_year+1900, dtm.tm_mon+1, dtm.tm_mday, - dtm.tm_hour, dtm.tm_min, dtm.tm_sec); - EDL *clip = mwindow->session->drag_clips->values[0]; - EDL *nested = edl->new_nested(clip, path); - EDL *new_clip = edl->create_nested_clip(nested); - new_clip->folder_no = AW_CLIP_FOLDER; - sprintf(new_clip->local_session->clip_icon, - "clip_%02d%02d%02d-%02d%02d%02d.png", - dtm.tm_year+1900, dtm.tm_mon+1, dtm.tm_mday, - dtm.tm_hour, dtm.tm_min, dtm.tm_sec); - snprintf(new_clip->local_session->clip_title, - sizeof(new_clip->local_session->clip_title), - _("Nested: %s"), clip->local_session->clip_title); - strcpy(new_clip->local_session->clip_notes, - clip->local_session->clip_notes); - int idx = edl->clips.number_of(clip); - if( idx >= 0 ) { - edl->clips[idx] = new_clip; - clip->remove_user(); - } - else - edl->clips.append(new_clip); - mwindow->mainindexes->add_next_asset(0, nested); - mwindow->mainindexes->start_build(); - popup->gui->async_update_assets(); - } - gui->unlock_window(); return 1; } -ClipPopupUnNest::ClipPopupUnNest(MWindow *mwindow, ClipPopup *popup) - : BC_MenuItem(_("UnNest")) +ClipPopupOpenEDL::ClipPopupOpenEDL(MWindow *mwindow, ClipPopup *popup) + : BC_MenuItem(_("Open EDL")) { this->mwindow = mwindow; this->popup = popup; } -ClipPopupUnNest::~ClipPopupUnNest() + +ClipPopupOpenEDL::~ClipPopupOpenEDL() { } -int ClipPopupUnNest::handle_event() +int ClipPopupOpenEDL::handle_event() { - EDL *nested_edl = 0; - MWindowGUI *gui = mwindow->gui; - gui->lock_window("ClipPopupUnNest::handle_event 1"); - if( mwindow->session->drag_clips->total > 0 ) { + int clips_total = mwindow->session->drag_clips->total; + if( clips_total ) { + popup->unlock_window(); EDL *clip = mwindow->session->drag_clips->values[0]; - Track *track = clip->tracks->first; - Edit *edit = track ? track->edits->first : 0; - nested_edl = edit && !edit->next && !edit->asset ? edit->nested_edl : 0; - while( nested_edl && (track=track->next)!=0 ) { - Edit *edit = track->edits->first; - if( !edit || edit->next || - ( edit->nested_edl != nested_edl && - strcmp(edit->nested_edl->path, nested_edl->path) ) ) - nested_edl = 0; - } - if( nested_edl ) { - EDL *edl = mwindow->edl; - EDL *new_clip = new EDL(edl); - new_clip->create_objects(); - new_clip->copy_all(nested_edl); - new_clip->folder_no = AW_CLIP_FOLDER; - int idx = edl->clips.number_of(clip); - if( idx >= 0 ) { - edl->clips[idx] = new_clip; - clip->remove_user(); - } - else - edl->clips.append(new_clip); - popup->gui->async_update_assets(); - } + mwindow->stack_push(clip, 0); + popup->lock_window("ClipPopupOpenEDL::handle_event"); } + return 1; +} + +ClipPopupCloseEDL::ClipPopupCloseEDL(MWindow *mwindow, AWindowGUI *gui) + : BC_MenuItem(_("Close EDL")) +{ + this->mwindow = mwindow; + this->gui = gui; +} +ClipPopupCloseEDL::~ClipPopupCloseEDL() +{ +} + +int ClipPopupCloseEDL::handle_event() +{ gui->unlock_window(); + mwindow->gui->lock_window("ClipPopupCloseEDL::handle_event"); + mwindow->stack_pop(); + mwindow->gui->unlock_window(); + gui->lock_window("ClipPopupCloseEDL::handle_event"); return 1; }