2.5 file browser

* bookmark operators: add and delete bookmark
* first start at menus in file browser: Directory and Bookmarks
* Adding a bookmark via menu or via CTRL+B
* Remove a bookmark with the X button next to it.
This commit is contained in:
Andrea Weikert 2009-06-29 22:16:48 +00:00
parent 84cd5a6cfb
commit 17d5bfd970
5 changed files with 105 additions and 8 deletions

@ -13,6 +13,11 @@ class FILEBROWSER_HT_header(bpy.types.Header):
params = st.params
layout.template_header(context)
if context.area.show_menus:
row = layout.row()
row.itemM("FILEBROWSER_MT_directory")
row.itemM("FILEBROWSER_MT_bookmarks")
row = layout.row(align=True)
row.itemO("FILE_OT_parent", text="", icon='ICON_FILE_PARENT')
row.itemO("FILE_OT_refresh", text="", icon='ICON_FILE_REFRESH')
@ -38,6 +43,26 @@ class FILEBROWSER_HT_header(bpy.types.Header):
else:
row.active = False
class FILEBROWSER_MT_directory(bpy.types.Menu):
__space_type__ = "FILE_BROWSER"
__label__ = "Directory"
def draw(self, context):
layout = self.layout
layout.itemO("FILE_OT_refresh", text="Refresh", icon='ICON_FILE_REFRESH')
layout.itemO("FILE_OT_parent", text="Parent", icon='ICON_FILE_PARENT')
class FILEBROWSER_MT_bookmarks(bpy.types.Menu):
__space_type__ = "FILE_BROWSER"
__label__ = "Bookmarks"
def draw(self, context):
layout = self.layout
layout.itemO("FILE_OT_add_bookmark", text="Add current directory", icon='ICON_BOOKMARKS')
bpy.types.register(FILEBROWSER_HT_header)
bpy.types.register(FILEBROWSER_MT_directory)
bpy.types.register(FILEBROWSER_MT_bookmarks)

@ -58,6 +58,8 @@ void FILE_OT_select(struct wmOperatorType *ot);
void FILE_OT_select_all_toggle(struct wmOperatorType *ot);
void FILE_OT_select_border(struct wmOperatorType *ot);
void FILE_OT_select_bookmark(struct wmOperatorType *ot);
void FILE_OT_add_bookmark(struct wmOperatorType *ot);
void FILE_OT_delete_bookmark(struct wmOperatorType *ot);
void FILE_OT_loadimages(struct wmOperatorType *ot);
void FILE_OT_exec(struct wmOperatorType *ot);
void FILE_OT_cancel(struct wmOperatorType *ot);

@ -336,6 +336,71 @@ void FILE_OT_select_bookmark(wmOperatorType *ot)
RNA_def_string(ot->srna, "dir", "", 256, "Dir", "");
}
static int bookmark_add_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
ScrArea *sa= CTX_wm_area(C);
SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
struct FSMenu* fsmenu = fsmenu_get();
struct FileSelectParams* params= ED_fileselect_get_params(sfile);
if (params->dir[0] != '\0') {
char name[FILE_MAX];
fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, params->dir, 0, 1);
BLI_make_file_string("/", name, BLI_gethome(), ".Bfs");
fsmenu_write_file(fsmenu, name);
}
ED_area_tag_redraw(sa);
return OPERATOR_FINISHED;
}
void FILE_OT_add_bookmark(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Bookmark";
ot->idname= "FILE_OT_add_bookmark";
/* api callbacks */
ot->invoke= bookmark_add_invoke;
ot->poll= ED_operator_file_active;
}
static int bookmark_delete_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
ScrArea *sa= CTX_wm_area(C);
SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
struct FSMenu* fsmenu = fsmenu_get();
int nentries = fsmenu_get_nentries(fsmenu, FS_CATEGORY_BOOKMARKS);
if(RNA_struct_find_property(op->ptr, "index")) {
int index = RNA_int_get(op->ptr, "index");
if ( (index >-1) && (index < nentries)) {
char name[FILE_MAX];
fsmenu_remove_entry(fsmenu, FS_CATEGORY_BOOKMARKS, index);
BLI_make_file_string("/", name, BLI_gethome(), ".Bfs");
fsmenu_write_file(fsmenu, name);
ED_area_tag_redraw(sa);
}
}
return OPERATOR_FINISHED;
}
void FILE_OT_delete_bookmark(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Delete Bookmark";
ot->idname= "FILE_OT_delete_bookmark";
/* api callbacks */
ot->invoke= bookmark_delete_invoke;
ot->poll= ED_operator_file_active;
RNA_def_int(ot->srna, "index", -1, -1, 20000, "Index", "", -1, 20000);
}
static int loadimages_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
ScrArea *sa= CTX_wm_area(C);

@ -26,7 +26,7 @@ static void do_file_panel_events(bContext *C, void *arg, int event)
}
static void file_panel_category(const bContext *C, Panel *pa, FSMenuCategory category, int icon)
static void file_panel_category(const bContext *C, Panel *pa, FSMenuCategory category, int icon, int allow_delete)
{
uiBlock *block;
uiStyle *style= U.uistyles.first;
@ -41,26 +41,29 @@ static void file_panel_category(const bContext *C, Panel *pa, FSMenuCategory cat
uiBlockSetEmboss(block, UI_EMBOSSP);
uiBlockBeginAlign(block);
for (i=0; i< nentries;++i) {
uiLayout* layout = uiLayoutRow(pa->layout, UI_LAYOUT_ALIGN_LEFT);
char *fname = fsmenu_get_entry(fsmenu, category, i);
uiItemStringO(pa->layout, fname, icon, "FILE_OT_select_bookmark", "dir", fname);
uiItemStringO(layout, fname, icon, "FILE_OT_select_bookmark", "dir", fname);
if (allow_delete)
uiItemIntO(layout, "", ICON_X, "FILE_OT_delete_bookmark", "index", i);
}
uiBlockEndAlign(block);
}
static void file_panel_system(const bContext *C, Panel *pa)
{
file_panel_category(C, pa, FS_CATEGORY_SYSTEM, ICON_DISK_DRIVE);
file_panel_category(C, pa, FS_CATEGORY_SYSTEM, ICON_DISK_DRIVE, 0);
}
static void file_panel_bookmarks(const bContext *C, Panel *pa)
{
file_panel_category(C, pa, FS_CATEGORY_BOOKMARKS, ICON_BOOKMARKS);
file_panel_category(C, pa, FS_CATEGORY_BOOKMARKS, ICON_BOOKMARKS, 1);
}
static void file_panel_recent(const bContext *C, Panel *pa)
{
file_panel_category(C, pa, FS_CATEGORY_RECENT, ICON_FILE_FOLDER);
file_panel_category(C, pa, FS_CATEGORY_RECENT, ICON_FILE_FOLDER, 0);
}

@ -292,6 +292,8 @@ void file_operatortypes(void)
WM_operatortype_append(FILE_OT_parent);
WM_operatortype_append(FILE_OT_refresh);
WM_operatortype_append(FILE_OT_bookmark_toggle);
WM_operatortype_append(FILE_OT_add_bookmark);
WM_operatortype_append(FILE_OT_delete_bookmark);
}
/* NOTE: do not add .blend file reading on this level */
@ -304,7 +306,7 @@ void file_keymap(struct wmWindowManager *wm)
WM_keymap_add_item(keymap, "FILE_OT_select_border", BKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "FILE_OT_highlight", MOUSEMOVE, KM_ANY, 0, 0);
WM_keymap_add_item(keymap, "FILE_OT_parent", PKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "FILE_OT_add_bookmark", BKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "FILE_OT_loadimages", TIMER1, KM_ANY, KM_ANY, 0);
keymap= WM_keymap_listbase(wm, "FileBookmark", SPACE_FILE, 0);