[Bf-blender-cvs] [aa87764] asset-experiments: WIP UILists for filebrowser: add access to three remaining types.

Bastien Montagne noreply at git.blender.org
Mon Dec 22 12:27:45 CET 2014


Commit: aa87764d136de181390f9e3358a01f5f8dfa1800
Author: Bastien Montagne
Date:   Mon Dec 22 12:25:40 2014 +0100
Branches: asset-experiments
https://developer.blender.org/rBaa87764d136de181390f9e3358a01f5f8dfa1800

WIP UILists for filebrowser: add access to three remaining types.

This also change update of active bookmark indices to happen in file_refresh().

Still not fully working, of course.

===================================================================

M	release/scripts/startup/bl_ui/space_filebrowser.py
M	source/blender/editors/space_file/file_panels.c
M	source/blender/editors/space_file/fsmenu.c
M	source/blender/editors/space_file/fsmenu.h
M	source/blender/editors/space_file/space_file.c
M	source/blender/makesdna/DNA_space_types.h
M	source/blender/makesrna/intern/rna_space.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_filebrowser.py b/release/scripts/startup/bl_ui/space_filebrowser.py
index 0142d9a..8f5c2ed 100644
--- a/release/scripts/startup/bl_ui/space_filebrowser.py
+++ b/release/scripts/startup/bl_ui/space_filebrowser.py
@@ -99,8 +99,8 @@ class FILEBROWSER_UL_dir(bpy.types.UIList):
         space = context.space_data
         icon = 'DISK_DRIVE' if active_propname == "system_folders_active" else 'NONE'
 
-        if (space.params.directory == direntry.path):
-            setattr(active_data, active_propname, index)
+        #~ if (space.params.directory == direntry.path):
+            #~ setattr(active_data, active_propname, index)
 
         if self.layout_type in {'DEFAULT', 'COMPACT'}:
             row = layout.row(align=True)
@@ -118,8 +118,7 @@ class FILEBROWSER_UL_dir(bpy.types.UIList):
 class FILEBROWSER_PT_system_folders(Panel):
     bl_space_type = 'FILE_BROWSER'
     bl_region_type = 'CHANNELS'
-    bl_label = "System Folders"
-    #bl_options = {'HIDE_HEADER'}
+    bl_label = "System"
 
     def draw(self, context):
         layout = self.layout
@@ -131,5 +130,58 @@ class FILEBROWSER_PT_system_folders(Panel):
             layout.template_list("FILEBROWSER_UL_dir", "system_folders", space, "system_folders", space, "system_folders_active", rows=1, maxrows=6)
 
 
+class FILEBROWSER_PT_system_bookmarks(Panel):
+    bl_space_type = 'FILE_BROWSER'
+    bl_region_type = 'CHANNELS'
+    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:
+            #~ print(space.system_folders_active)
+            layout.template_list("FILEBROWSER_UL_dir", "system_bookmarks", space, "system_bookmarks", space, "system_bookmarks_active", rows=1, maxrows=6)
+
+
+class FILEBROWSER_PT_bookmarks(Panel):
+    bl_space_type = 'FILE_BROWSER'
+    bl_region_type = 'CHANNELS'
+    bl_label = "Bookmarks"
+
+    def draw(self, context):
+        layout = self.layout
+
+        space = context.space_data
+
+        if space.bookmarks:
+            #~ print(space.system_folders_active)
+            layout.template_list("FILEBROWSER_UL_dir", "bookmarks", space, "bookmarks", space, "bookmarks_active", rows=1, maxrows=6)
+
+
+class FILEBROWSER_PT_recent_folders(Panel):
+    bl_space_type = 'FILE_BROWSER'
+    bl_region_type = 'CHANNELS'
+    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:
+            #~ print(space.system_folders_active)
+            layout.template_list("FILEBROWSER_UL_dir", "recent_folders", space, "recent_folders", space, "recent_folders_active", rows=1, maxrows=6)
+
+
 if __name__ == "__main__":  # only for live edit.
     bpy.utils.register_module(__name__)
diff --git a/source/blender/editors/space_file/file_panels.c b/source/blender/editors/space_file/file_panels.c
index 42c5d49..062ac2d 100644
--- a/source/blender/editors/space_file/file_panels.c
+++ b/source/blender/editors/space_file/file_panels.c
@@ -79,7 +79,7 @@ static void file_panel_category(const bContext *C, Panel *pa, FSMenuCategory cat
 	int i, nentries = fsmenu_get_nentries(fsmenu, category);
 
 	/* reset each time */
-	*nr = -1;
+	//~ *nr = -1;
 
 	/* hide if no entries */
 	if (nentries == 0)
@@ -148,9 +148,9 @@ 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);
-	}
+	//~ if (sfile && !(U.uiflag & USER_HIDE_SYSTEM_BOOKMARKS)) {
+		//~ file_panel_category(C, pa, FS_CATEGORY_SYSTEM_BOOKMARKS, &sfile->systemnr, ICON_BOOKMARKS, 0);
+	//~ }
 
 }
 
@@ -164,7 +164,7 @@ static void file_panel_bookmarks(const bContext *C, Panel *pa)
 		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);
+		//~ file_panel_category(C, pa, FS_CATEGORY_BOOKMARKS, &sfile->bookmarknr, ICON_BOOKMARKS, 1);
 	}
 }
 
@@ -185,7 +185,7 @@ static void file_panel_recent(const bContext *C, Panel *pa)
 			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);
+			//~ file_panel_category(C, pa, FS_CATEGORY_RECENT, &sfile->recentnr, ICON_FILE_FOLDER, 0);
 		}
 	}
 }
diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c
index 305030c..4166561 100644
--- a/source/blender/editors/space_file/fsmenu.c
+++ b/source/blender/editors/space_file/fsmenu.c
@@ -635,3 +635,16 @@ void fsmenu_free(void)
 	g_fsmenu = NULL;
 }
 
+int fsmenu_get_active_indices(struct FSMenu *fsmenu, enum FSMenuCategory category, const char *dir)
+{
+	FSMenuEntry *fsm_iter = fsmenu_get_category(fsmenu, category);
+	int i;
+
+	for (i = 0; fsm_iter; fsm_iter = fsm_iter->next, i++) {
+		if (BLI_path_cmp(dir, fsm_iter->path) == 0) {
+			return i;
+		}
+	}
+
+	return -1;
+}
diff --git a/source/blender/editors/space_file/fsmenu.h b/source/blender/editors/space_file/fsmenu.h
index 4d31802..fa92531 100644
--- a/source/blender/editors/space_file/fsmenu.h
+++ b/source/blender/editors/space_file/fsmenu.h
@@ -70,5 +70,8 @@ void    fsmenu_free(void);
 /** Refresh system directory menu */
 void    fsmenu_refresh_system_category(struct FSMenu *fsmenu);
 
+/** Get active index based on given directory. */
+int     fsmenu_get_active_indices(struct FSMenu *fsmenu, enum FSMenuCategory category, const char *dir);
+
 #endif
 
diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c
index 457e031..4b72d45 100644
--- a/source/blender/editors/space_file/space_file.c
+++ b/source/blender/editors/space_file/space_file.c
@@ -192,6 +192,7 @@ static void file_refresh(const bContext *C, ScrArea *UNUSED(sa))
 	wmWindowManager *wm = CTX_wm_manager(C);
 	SpaceFile *sfile = CTX_wm_space_file(C);
 	FileSelectParams *params = ED_fileselect_get_params(sfile);
+	struct FSMenu *fsmenu = fsmenu_get();
 
 	if (!sfile->folders_prev)
 		sfile->folders_prev = folderlist_new();
@@ -208,6 +209,12 @@ static void file_refresh(const bContext *C, ScrArea *UNUSED(sa))
 	                                         params->filter_glob,
 	                                         params->filter_search);
 
+	/* Update the active indices of bookmarks & co. */
+	sfile->systemnr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_SYSTEM, params->dir);
+	sfile->system_bookmarknr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_SYSTEM_BOOKMARKS, params->dir);
+	sfile->bookmarknr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_BOOKMARKS, params->dir);
+	sfile->recentnr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_RECENT, params->dir);
+
 	if (filelist_force_reset(sfile->files)) {
 		filelist_readjob_stop(wm, sfile->files);
 		filelist_clear(sfile->files);
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index b9926e5..a371d34 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -634,7 +634,7 @@ typedef struct SpaceFile {
 	struct FileLayout *layout;
 	
 	short recentnr, bookmarknr;
-	short systemnr, pad2;
+	short systemnr, system_bookmarknr;
 } SpaceFile;
 
 /* FSMenuEntry's without paths indicate seperators */
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index d7680ce..67776fc 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -1391,6 +1391,13 @@ static void rna_FileBrowser_FSMenuEntry_name_get(PointerRNA *ptr, char *value)
 	BLI_strncpy(value, fsmenu_entry_get_name(ptr->data), sizeof(value));
 }
 
+static int rna_FileBrowser_FSMenuEntry_name_get_editable(PointerRNA *ptr)
+{
+	FSMenuEntry *fsm = ptr->data;
+
+	return fsm->save;
+}
+
 static void rna_FileBrowser_FSMenu_next(CollectionPropertyIterator *iter)
 {
 	ListBaseIterator *internal = &iter->internal.listbase;
@@ -1418,10 +1425,6 @@ static void rna_FileBrowser_FSMenu_begin(CollectionPropertyIterator *iter, FSMen
 	internal->skip = NULL;
 
 	iter->valid = (internal->link != NULL);
-
-	//if (skip && iter->valid && skip(iter, internal->link)) {
-		//rna_FileBrowser_FSMenu_next(iter);
-	//}
 }
 
 static PointerRNA rna_FileBrowser_FSMenu_get(CollectionPropertyIterator *iter)
@@ -1450,24 +1453,63 @@ static int rna_FileBrowser_FSMenuSystem_data_length(PointerRNA *UNUSED(ptr))
 	return fsmenu_get_nentries(fsmenu, FS_CATEGORY_SYSTEM);
 }
 
+static void rna_FileBrowser_FSMenuSystemBookmark_data_begin(CollectionPropertyIterator *iter, PointerRNA *UNUSED(ptr))
+{
+	rna_FileBrowser_FSMenu_begin(iter, FS_CATEGORY_SYSTEM_BOOKMARKS);
+}
+
+static int rna_FileBrowser_FSMenuSystemBookmark_data_length(PointerRNA *UNUSED(ptr))
+{
+	struct FSMenu *fsmenu = fsmenu_get();
+
+	return fsmenu_get_nentries(fsmenu, FS_CATEGORY_SYSTEM_BOOKMARKS);
+}
+
+static void rna_FileBrowser_FSMenuBookmark_data_begin(CollectionPropertyIterator *iter, PointerRNA *UNUSED(ptr))
+{
+	rna_FileBrowser_FSMenu_begin(iter, FS_CATEGORY_BOOKMARKS);
+}
+
+static int rna_FileBrowser_FSMenuBookmark_data_length(PointerRNA *UNUSED(ptr))
+{
+	struct FSMenu *fsmenu = fsmenu_get();
+
+	return fsmenu_get_nentries(fsmenu, FS_CATEGORY_BOOKMARKS);
+}
+
+static void rna_FileBrowser_FSMenuRecent_data_begin(CollectionPropertyIterator *iter, PointerRNA *UNUSED(ptr))
+{
+	rna_FileBrowser_FSMenu_begin(iter, FS_CATEGORY_RECENT);
+}
+
+static int rna_FileBrowser_FSMenuRecent_data_length(PointerRNA *UNUSED(ptr))
+{
+	struct FSMenu *fsmenu = fsmenu_get();
+
+	return fsmenu_get_nentries(fsmenu, FS_CATEGORY_RECENT);
+}
+
 static int rna_FileBrows

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list