FileBrowser: Editable Bookmarks.
[blender-staging.git] / source / blender / editors / space_file / file_panels.c
index c224da721fa8bd71e0a33b65f61da5386ae99630..3da83aa602819a68a09642a4b572ed97967398b0 100644 (file)
@@ -44,6 +44,8 @@
 
 #include "RNA_access.h"
 
+#include "ED_fileselect.h"
+
 #include "UI_interface.h"
 #include "UI_resources.h"
 
 
 #include <string.h>
 
-static void file_panel_cb(bContext *C, void *arg_entry, void *UNUSED(arg_v))
-{
-       wmOperatorType *ot = WM_operatortype_find("FILE_OT_select_bookmark", false);
-       PointerRNA ptr;
-       const char *entry = (char *)arg_entry;
-
-       WM_operator_properties_create_ptr(&ptr, ot);
-       RNA_string_set(&ptr, "dir", entry);
-       WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_REGION_WIN, &ptr);
-       WM_operator_properties_free(&ptr);
-}
-
-static void file_panel_category(const bContext *C, Panel *pa, FSMenuCategory category, short *nr, int icon, int allow_delete)
-{
-       SpaceFile *sfile = CTX_wm_space_file(C);
-       uiBlock *block;
-       uiBut *but;
-       uiLayout *box, *col;
-       struct FSMenu *fsmenu = fsmenu_get();
-       int i, nentries = fsmenu_get_nentries(fsmenu, category);
-
-       /* reset each time */
-       *nr = -1;
-
-       /* hide if no entries */
-       if (nentries == 0)
-               return;
-
-       /* layout */
-       uiLayoutSetAlignment(pa->layout, UI_LAYOUT_ALIGN_LEFT);
-       block = uiLayoutGetBlock(pa->layout);
-       box = uiLayoutBox(pa->layout);
-       col = uiLayoutColumn(box, true);
-
-       for (i = 0; i < nentries; ++i) {
-               char dir[FILE_MAX];
-               char temp[FILE_MAX];
-               uiLayout *layout = uiLayoutRow(col, false);
-               char *entry;
-               
-               entry = fsmenu_get_entry(fsmenu, category, i);
-               
-               /* set this list item as active if we have a match */
-               if (sfile->params) {
-                       if (BLI_path_cmp(sfile->params->dir, entry) == 0) {
-                               *nr = i;
-                       }
-               }
-
-               /* create nice bookmark name, shows last directory in the full path currently */
-               BLI_strncpy(temp, entry, FILE_MAX);
-               BLI_add_slash(temp);
-               BLI_getlastdir(temp, dir, FILE_MAX);
-               BLI_del_slash(dir);
-
-               if (dir[0] == 0)
-                       BLI_strncpy(dir, entry, FILE_MAX);
-
-               /* create list item */
-               but = uiDefIconTextButS(block, UI_BTYPE_LISTROW, 0, icon, dir, 0, 0, UI_UNIT_X * 10, UI_UNIT_Y, nr, 0, i, 0, 0, entry);
-               UI_but_func_set(but, file_panel_cb, entry, NULL);
-               UI_but_flag_disable(but, UI_BUT_UNDO); /* skip undo on screen buttons */
-               UI_but_drawflag_enable(but, UI_BUT_ICON_LEFT | UI_BUT_TEXT_LEFT);
-
-               /* create delete button */
-               if (allow_delete && fsmenu_can_save(fsmenu, category, i)) {
-                       UI_block_emboss_set(block, UI_EMBOSS_NONE);
-                       uiItemIntO(layout, "", ICON_X, "FILE_OT_bookmark_delete", "index", i);
-                       UI_block_emboss_set(block, UI_EMBOSS);
-               }
-       }
-}
-
-static void file_panel_system(const bContext *C, Panel *pa)
-{
-       SpaceFile *sfile = CTX_wm_space_file(C);
-
-       if (sfile)
-               file_panel_category(C, pa, FS_CATEGORY_SYSTEM, &sfile->systemnr, ICON_DISK_DRIVE, 0);
-}
-
-static int file_panel_system_bookmarks_poll(const bContext *C, PanelType *UNUSED(pt))
-{
-       SpaceFile *sfile = CTX_wm_space_file(C);
-       return (sfile && !(U.uiflag & USER_HIDE_SYSTEM_BOOKMARKS));
-}
-
-static void file_panel_system_bookmarks(const bContext *C, Panel *pa)
-{
-       SpaceFile *sfile = CTX_wm_space_file(C);
-
-       if (sfile && !(U.uiflag & USER_HIDE_SYSTEM_BOOKMARKS)) {
-               file_panel_category(C, pa, FS_CATEGORY_SYSTEM_BOOKMARKS, &sfile->systemnr, ICON_BOOKMARKS, 0);
-       }
-
-}
-
-static void file_panel_bookmarks(const bContext *C, Panel *pa)
-{
-       SpaceFile *sfile = CTX_wm_space_file(C);
-       uiLayout *row;
-
-       if (sfile) {
-               row = uiLayoutRow(pa->layout, false);
-               uiItemO(row, IFACE_("Add"), ICON_ZOOMIN, "file.bookmark_add");
-               uiItemL(row, NULL, ICON_NONE);
-
-               file_panel_category(C, pa, FS_CATEGORY_BOOKMARKS, &sfile->bookmarknr, ICON_BOOKMARKS, 1);
-       }
-}
-
-static int file_panel_recent_poll(const bContext *C, PanelType *UNUSED(pt))
-{
-       SpaceFile *sfile = CTX_wm_space_file(C);
-       return (sfile && !(U.uiflag & USER_HIDE_RECENT));
-}
-
-static void file_panel_recent(const bContext *C, Panel *pa)
-{
-       SpaceFile *sfile = CTX_wm_space_file(C);
-       uiLayout *row;
-
-       if (sfile) {
-               if (!(U.uiflag & USER_HIDE_RECENT)) {
-                       row = uiLayoutRow(pa->layout, false);
-                       uiItemO(row, IFACE_("Reset"), ICON_X, "file.reset_recent");
-                       uiItemL(row, NULL, ICON_NONE);
-
-                       file_panel_category(C, pa, FS_CATEGORY_RECENT, &sfile->recentnr, ICON_FILE_FOLDER, 0);
-               }
-       }
-}
-
-
 static int file_panel_operator_poll(const bContext *C, PanelType *UNUSED(pt))
 {
        SpaceFile *sfile = CTX_wm_space_file(C);
@@ -217,7 +85,7 @@ static void file_panel_operator(const bContext *C, Panel *pa)
        SpaceFile *sfile = CTX_wm_space_file(C);
        wmOperator *op = sfile->op;
        // int empty = 1, flag;
-       
+
        UI_block_func_set(uiLayoutGetBlock(pa->layout), file_draw_check_cb, NULL, NULL);
 
        uiLayoutOperatorButs(C, pa->layout, op, file_panel_check_prop, '\0', UI_LAYOUT_OP_SHOW_EMPTY);
@@ -229,36 +97,6 @@ void file_panels_register(ARegionType *art)
 {
        PanelType *pt;
 
-       pt = MEM_callocN(sizeof(PanelType), "spacetype file system directories");
-       strcpy(pt->idname, "FILE_PT_system");
-       strcpy(pt->label, N_("System"));
-       strcpy(pt->translation_context, BLF_I18NCONTEXT_DEFAULT_BPYRNA);
-       pt->draw = file_panel_system;
-       BLI_addtail(&art->paneltypes, pt);
-
-       pt = MEM_callocN(sizeof(PanelType), "spacetype file system bookmarks");
-       strcpy(pt->idname, "FILE_PT_system_bookmarks");
-       strcpy(pt->label, N_("System Bookmarks"));
-       strcpy(pt->translation_context, BLF_I18NCONTEXT_DEFAULT_BPYRNA);
-       pt->draw = file_panel_system_bookmarks;
-       pt->poll = file_panel_system_bookmarks_poll;
-       BLI_addtail(&art->paneltypes, pt);
-
-       pt = MEM_callocN(sizeof(PanelType), "spacetype file bookmarks");
-       strcpy(pt->idname, "FILE_PT_bookmarks");
-       strcpy(pt->label, N_("Bookmarks"));
-       strcpy(pt->translation_context, BLF_I18NCONTEXT_DEFAULT_BPYRNA);
-       pt->draw = file_panel_bookmarks;
-       BLI_addtail(&art->paneltypes, pt);
-
-       pt = MEM_callocN(sizeof(PanelType), "spacetype file recent directories");
-       strcpy(pt->idname, "FILE_PT_recent");
-       strcpy(pt->label, N_("Recent"));
-       strcpy(pt->translation_context, BLF_I18NCONTEXT_DEFAULT_BPYRNA);
-       pt->draw = file_panel_recent;
-       pt->poll = file_panel_recent_poll;
-       BLI_addtail(&art->paneltypes, pt);
-
        pt = MEM_callocN(sizeof(PanelType), "spacetype file operator properties");
        strcpy(pt->idname, "FILE_PT_operator");
        strcpy(pt->label, N_("Operator"));