forked from bartvdbraak/blender
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:
parent
84cd5a6cfb
commit
17d5bfd970
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user