From 9e2abbc9ba5d8edf3f43060122d683d0c6ae2525 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Wed, 11 Feb 2015 00:09:45 +0100 Subject: FileBrowser: Editable Bookmarks. Bookmarks are now editable (i.e. you can rename them, and reorder them). They are also listed in regular UILists, so you can filter/sort them as usual too. Also, FileBrowser 'T' side area is changed to something similar to 3DView one, in this case because we need op panel to remain at the bottom, and later because we'll more than likely need tabs here! Thanks to Campbell and Sergey for reviews. Differential Revision: https://developer.blender.org/D1093 --- release/scripts/startup/bl_ui/space_filebrowser.py | 125 ++++++++++++++++++++- 1 file changed, 124 insertions(+), 1 deletion(-) (limited to 'release') diff --git a/release/scripts/startup/bl_ui/space_filebrowser.py b/release/scripts/startup/bl_ui/space_filebrowser.py index 6fe50c7eeb5..cda3dfe499d 100644 --- a/release/scripts/startup/bl_ui/space_filebrowser.py +++ b/release/scripts/startup/bl_ui/space_filebrowser.py @@ -18,7 +18,7 @@ # import bpy -from bpy.types import Header +from bpy.types import Header, Panel, Menu class FILEBROWSER_HT_header(Header): @@ -81,5 +81,128 @@ class FILEBROWSER_HT_header(Header): row.prop(params, "filter_search", text="", icon='VIEWZOOM') + +class FILEBROWSER_UL_dir(bpy.types.UIList): + def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): + direntry = item + space = context.space_data + icon = 'NONE' + if active_propname == "system_folders_active": + icon = 'DISK_DRIVE' + if active_propname == "system_bookmarks_active": + icon = 'BOOKMARKS' + if active_propname == "bookmarks_active": + icon = 'BOOKMARKS' + if active_propname == "recent_folders_active": + icon = 'FILE_FOLDER' + + if self.layout_type in {'DEFAULT', 'COMPACT'}: + row = layout.row(align=True) + row.prop(direntry, "name", text="", emboss=False, icon=icon) + + elif self.layout_type in {'GRID'}: + layout.alignment = 'CENTER' + layout.prop(direntry, "path", text="") + + +class FILEBROWSER_PT_system_folders(Panel): + bl_space_type = 'FILE_BROWSER' + bl_region_type = 'TOOLS' + bl_category = "Bookmarks" + bl_label = "System" + + def draw(self, context): + layout = self.layout + space = context.space_data + + if space.system_folders: + row = layout.row() + row.template_list("FILEBROWSER_UL_dir", "system_folders", space, "system_folders", + space, "system_folders_active", item_dyntip_propname="path", rows=1, maxrows=6) + + +class FILEBROWSER_PT_system_bookmarks(Panel): + bl_space_type = 'FILE_BROWSER' + bl_region_type = 'TOOLS' + bl_category = "Bookmarks" + bl_label = "System Bookmarks" + + @classmethod + def poll(cls, context): + return not context.user_preferences.filepaths.hide_system_bookmarks + + def draw(self, context): + layout = self.layout + space = context.space_data + + if space.system_bookmarks: + row = layout.row() + row.template_list("FILEBROWSER_UL_dir", "system_bookmarks", space, "system_bookmarks", + space, "system_bookmarks_active", item_dyntip_propname="path", rows=1, maxrows=6) + + +class FILEBROWSER_MT_bookmarks_specials(Menu): + bl_label = "Bookmarks Specials" + + def draw(self, context): + layout = self.layout + + layout.operator("file.bookmark_move", icon='TRIA_UP_BAR', text="Move To Top").direction = 'TOP' + layout.operator("file.bookmark_move", icon='TRIA_DOWN_BAR', text="Move To Bottom").direction = 'BOTTOM' + + +class FILEBROWSER_PT_bookmarks(Panel): + bl_space_type = 'FILE_BROWSER' + bl_region_type = 'TOOLS' + bl_category = "Bookmarks" + bl_label = "Bookmarks" + + def draw(self, context): + layout = self.layout + space = context.space_data + + if space.bookmarks: + row = layout.row() + num_rows = len(space.bookmarks) + row.template_list("FILEBROWSER_UL_dir", "bookmarks", space, "bookmarks", + space, "bookmarks_active", item_dyntip_propname="path", + rows=(2 if num_rows < 2 else 4), maxrows=6) + + col = row.column(align=True) + col.operator("file.bookmark_add", icon='ZOOMIN', text="") + col.operator("file.bookmark_delete", icon='ZOOMOUT', text="") + col.menu("FILEBROWSER_MT_bookmarks_specials", icon='DOWNARROW_HLT', text="") + + if num_rows > 1: + col.separator() + col.operator("file.bookmark_move", icon='TRIA_UP', text="").direction = 'UP' + col.operator("file.bookmark_move", icon='TRIA_DOWN', text="").direction = 'DOWN' + else: + layout.operator("file.bookmark_add", icon='ZOOMIN') + + +class FILEBROWSER_PT_recent_folders(Panel): + bl_space_type = 'FILE_BROWSER' + bl_region_type = 'TOOLS' + bl_category = "Bookmarks" + bl_label = "Recent" + + @classmethod + def poll(cls, context): + return not context.user_preferences.filepaths.hide_recent_locations + + def draw(self, context): + layout = self.layout + space = context.space_data + + if space.recent_folders: + row = layout.row() + row.template_list("FILEBROWSER_UL_dir", "recent_folders", space, "recent_folders", + space, "recent_folders_active", item_dyntip_propname="path", rows=1, maxrows=6) + + col = row.column(align=True) + col.operator("file.reset_recent", icon='X', text="") + + if __name__ == "__main__": # only for live edit. bpy.utils.register_module(__name__) -- cgit v1.2.3