[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