fix awdw solo vicon crash, fix nested clip for binfolders, open edit edl
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / clippopup.C
index c38efd99d71584d035c451b8ef6453c197463638..65eebb61e889f642a58eb3990c709ab4e476b8b0 100644 (file)
@@ -67,6 +67,7 @@ void ClipPopup::create_objects()
        add_item(format = new AWindowListFormat(mwindow, gui));
        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));
@@ -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;
 }
 
@@ -406,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();
@@ -414,6 +422,8 @@ void ClipListMenu::create_objects()
 void ClipListMenu::update()
 {
        format->update();
+       int enable_close = mwindow->stack.size() > 0 ? 1 : 0;
+       close_edl->set_enabled(enable_close);
 }
 
 
@@ -454,9 +464,29 @@ int ClipPopupOpenEDL::handle_event()
        if( clips_total ) {
                popup->unlock_window();
                EDL *clip = mwindow->session->drag_clips->values[0];
-               mwindow->stack_push(clip);
+               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;
+}
+