add bins/folders, fix listbox bad wdw ref, hide vicons fix, remove sort by time
[goodguy/history.git] / cinelerra-5.1 / cinelerra / folderlistmenu.C
index 823c9f3105df2c85e5a53e40f161c6ac887642de..8f788272b99a7bfecd688228727f810d91c423de 100644 (file)
@@ -25,6 +25,7 @@
 #include "edl.h"
 #include "edlsession.h"
 #include "language.h"
+#include "mainsession.h"
 #include "mwindow.h"
 
 
@@ -41,8 +42,15 @@ FolderListMenu::~FolderListMenu()
 
 void FolderListMenu::create_objects()
 {
+       BC_MenuItem *menu_item;
+       BC_SubMenu *submenu;
        add_item(format = new FolderListFormat(mwindow, this));
        add_item(new FolderListSort(mwindow, this));
+       add_item(menu_item = new BC_MenuItem(_("Folder...")));
+       menu_item->add_submenu(submenu = new BC_SubMenu());
+       submenu->add_submenuitem(new FolderListNew(mwindow, this));
+       submenu->add_submenuitem(new FolderListModify(mwindow, this));
+       submenu->add_submenuitem(new FolderListDelete(mwindow, this));
        update_titles();
 }
 
@@ -92,3 +100,64 @@ int FolderListSort::handle_event()
        return 1;
 }
 
+FolderListNew::FolderListNew(MWindow *mwindow, FolderListMenu *menu)
+ : BC_MenuItem(_("New folder"))
+{
+       this->mwindow = mwindow;
+       this->menu = menu;
+}
+
+int FolderListNew::handle_event()
+{
+       int cx, cy, cw = 320, ch = 120;
+       menu->gui->get_abs_cursor(cx, cy);
+       if( (cx-=cw/2) < 50 ) cx = 50;
+       if( (cy-=ch/2) < 50 ) cy = 50;
+       menu->gui->new_folder_thread->start(cx, cy, cw, ch);
+       return 1;
+}
+
+FolderListModify::FolderListModify(MWindow *mwindow, FolderListMenu *menu)
+ : BC_MenuItem(_("Modify folder"))
+{
+       this->mwindow = mwindow;
+       this->menu = menu;
+}
+
+int FolderListModify::handle_event()
+{
+       int awindow_folder = mwindow->edl->session->awindow_folder;
+       BinFolder *folder = mwindow->edl->get_folder(awindow_folder);
+       if( folder ) {
+               int bw = mwindow->session->bwindow_w;
+               int bh = mwindow->session->bwindow_h;
+               int cx, cy;
+               menu->gui->get_abs_cursor(cx, cy);
+               if( (cx-=bw/2) < 50 ) cx = 50;
+               if( (cy-=bh/2) < 50 ) cy = 50;
+               menu->gui->modify_folder_thread->start(folder, cx, cy, bw, bh);
+       }
+       return 1;
+}
+
+FolderListDelete::FolderListDelete(MWindow *mwindow, FolderListMenu *menu)
+ : BC_MenuItem(_("Delete folder"))
+{
+       this->mwindow = mwindow;
+       this->menu = menu;
+}
+
+int FolderListDelete::handle_event()
+{
+       AssetPicon *picon = (AssetPicon *)menu->gui->folder_list->get_selection(0, 0);
+       if( picon && picon->foldernum >= AWINDOW_USER_FOLDERS ) {
+               int foldernum = picon->foldernum;
+               BinFolder *folder = mwindow->edl->get_folder(foldernum);
+               mwindow->delete_folder(folder->title);
+               if( mwindow->edl->session->awindow_folder == foldernum )
+                       mwindow->edl->session->awindow_folder = AW_MEDIA_FOLDER;
+               mwindow->awindow->gui->async_update_assets();
+       }
+       return 1;
+}
+