Commit: 7cda7bd22ef6e18a9cd2b0cbe145a483d6a9c423
Author: Julian Eisel
Date:   Mon Jan 2 02:50:11 2017 +0100
Branches: workspaces
https://developer.blender.org/rB7cda7bd22ef6e18a9cd2b0cbe145a483d6a9c423

Make workspaces append-/linkable

TODO:
* Make indirectly linked screens local.
* Make workspaces only appendable, it doesn't make sense to link them.

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

M       source/blender/blenkernel/intern/idcode.c
M       source/blender/blenkernel/intern/library.c
M       source/blender/blenkernel/intern/library_query.c
M       source/blender/blenloader/intern/readfile.c
M       source/blender/editors/space_file/filesel.c
M       source/blender/makesdna/DNA_ID.h
M       source/blender/makesrna/intern/rna_space.c

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

diff --git a/source/blender/blenkernel/intern/idcode.c 
b/source/blender/blenkernel/intern/idcode.c
index 20b8ac6..32ad4ac 100644
--- a/source/blender/blenkernel/intern/idcode.c
+++ b/source/blender/blenkernel/intern/idcode.c
@@ -90,7 +90,8 @@ static IDType idtypes[] = {
        { ID_TXT,  "Text",               "texts",           
BLT_I18NCONTEXT_ID_TEXT,               IDTYPE_FLAGS_ISLINKABLE },
        { ID_VF,   "VFont",              "fonts",           
BLT_I18NCONTEXT_ID_VFONT,              IDTYPE_FLAGS_ISLINKABLE },
        { ID_WO,   "World",              "worlds",          
BLT_I18NCONTEXT_ID_WORLD,              IDTYPE_FLAGS_ISLINKABLE },
-       { ID_WS,   "WorkSpace",          "workspaces",      
BLT_I18NCONTEXT_ID_WORKSPACE,          0                       },
+       /* TODO only appendable */
+       { ID_WS,   "WorkSpace",          "workspaces",      
BLT_I18NCONTEXT_ID_WORKSPACE,          IDTYPE_FLAGS_ISLINKABLE },
        { ID_WM,   "WindowManager",      "window_managers", 
BLT_I18NCONTEXT_ID_WINDOWMANAGER,      0                       },
 
        /** Keep last, not an ID exactly, only include for completeness */
@@ -211,6 +212,7 @@ int BKE_idcode_to_idfilter(const short idcode)
                CASE_IDFILTER(TXT);
                CASE_IDFILTER(VF);
                CASE_IDFILTER(WO);
+               CASE_IDFILTER(WS);
                default:
                        return 0;
        }
diff --git a/source/blender/blenkernel/intern/library.c 
b/source/blender/blenkernel/intern/library.c
index db30169..1d91b3d 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -120,6 +120,7 @@
 #include "BKE_scene.h"
 #include "BKE_text.h"
 #include "BKE_texture.h"
+#include "BKE_workspace.h"
 #include "BKE_world.h"
 
 #include "DEG_depsgraph.h"
@@ -464,10 +465,12 @@ bool id_make_local(Main *bmain, ID *id, const bool test, 
const bool lib_local)
                case ID_CF:
                        if (!test) BKE_cachefile_make_local(bmain, (CacheFile 
*)id, lib_local);
                        return true;
+               case ID_WS:
+//                     if (!test) BKE_workspace_make_local(bmain, (WorkSpace 
*)id, lib_local);
+                       return true;
                case ID_SCR:
                case ID_LI:
                case ID_KE:
-               case ID_WS:
                case ID_WM:
                        return false; /* can't be linked */
                case ID_IP:
@@ -572,10 +575,12 @@ bool id_copy(Main *bmain, ID *id, ID **newid, bool test)
                case ID_CF:
                        if (!test) *newid = (ID *)BKE_cachefile_copy(bmain, 
(CacheFile *)id);
                        return true;
+               case ID_WS:
+//                     if (!test) *newid = (ID *)BKE_workspace_copy(bmain, 
(WorkSpace *)id);
+                       return true;
                case ID_SCE:
                case ID_LI:
                case ID_SCR:
-               case ID_WS:
                case ID_WM:
                        return false;  /* can't be copied from here */
                case ID_VF:
diff --git a/source/blender/blenkernel/intern/library_query.c 
b/source/blender/blenkernel/intern/library_query.c
index 6043c3f..abb3079 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -79,6 +79,7 @@
 #include "BKE_sca.h"
 #include "BKE_sequencer.h"
 #include "BKE_tracking.h"
+#include "BKE_workspace.h"
 
 
 #define FOREACH_FINALIZE _finalize
@@ -875,6 +876,22 @@ void BKE_library_foreach_ID_link(ID *id, 
LibraryIDLinkCallback callback, void *u
                                break;
                        }
 
+                       case ID_WS:
+                       {
+                               WorkSpace *workspace = (WorkSpace *)id;
+                               ListBase *layouts = 
BKE_workspace_layouts_get(workspace);
+
+                               BKE_workspace_layout_iter_begin(layout, 
layouts->first);
+                               {
+                                       bScreen *screen = 
BKE_workspace_layout_screen_get(layout);
+
+                                       CALLBACK_INVOKE(screen, IDWALK_NOP);
+                               }
+                               BKE_workspace_layout_iter_end;
+
+                               break;
+                       }
+
                        /* Nothing needed for those... */
                        case ID_SCR:
                        case ID_IM:
@@ -886,7 +903,6 @@ void BKE_library_foreach_ID_link(ID *id, 
LibraryIDLinkCallback callback, void *u
                        case ID_PAL:
                        case ID_PC:
                        case ID_CF:
-                       case ID_WS:
                                break;
 
                        /* Deprecated. */
diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index 9ddc9a6..f5aa465 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -8861,6 +8861,11 @@ static void expand_doit_library(void *fdhandle, Main 
*mainvar, void *old)
                        }
                }
                else {
+                       /* in 2.50+ file identifier for screens is patched, 
forward compatibility */
+                       if (bhead->code == ID_SCRN) {
+                               bhead->code = ID_SCR;
+                       }
+
                        id = is_yet_read(fd, mainvar, bhead);
                        if (id == NULL) {
                                read_libblock(fd, mainvar, bhead, 
LIB_TAG_TESTIND, NULL);
@@ -9700,6 +9705,17 @@ static void expand_gpencil(FileData *fd, Main *mainvar, 
bGPdata *gpd)
                expand_animdata(fd, mainvar, gpd->adt);
 }
 
+static void expand_workspace(FileData *fd, Main *mainvar, WorkSpace *workspace)
+{
+       ListBase *layouts = BKE_workspace_layouts_get(workspace);
+
+       BKE_workspace_layout_iter_begin(layout, layouts->first)
+       {
+               expand_doit(fd, mainvar, 
BKE_workspace_layout_screen_get(layout));
+       }
+       BKE_workspace_layout_iter_end;
+}
+
 /**
  * Set the callback func used over all ID data found by \a BLO_expand_main 
func.
  *
@@ -9812,6 +9828,9 @@ void BLO_expand_main(void *fdhandle, Main *mainvar)
                                        case ID_CF:
                                                expand_cachefile(fd, mainvar, 
(CacheFile *)id);
                                                break;
+                                       case ID_WS:
+                                               expand_workspace(fd, mainvar, 
(WorkSpace *)id);
+                                               break;
                                        }
                                        
                                        do_it = true;
diff --git a/source/blender/editors/space_file/filesel.c 
b/source/blender/editors/space_file/filesel.c
index 7abe5ff..8954bd1 100644
--- a/source/blender/editors/space_file/filesel.c
+++ b/source/blender/editors/space_file/filesel.c
@@ -215,7 +215,7 @@ short ED_fileselect_set_params(SpaceFile *sfile)
                                    FILTER_ID_GR | FILTER_ID_IM | FILTER_ID_LA 
| FILTER_ID_LS | FILTER_ID_LT | FILTER_ID_MA |
                                    FILTER_ID_MB | FILTER_ID_MC | FILTER_ID_ME 
| FILTER_ID_MSK | FILTER_ID_NT | FILTER_ID_OB |
                                    FILTER_ID_PA | FILTER_ID_PAL | FILTER_ID_PC 
| FILTER_ID_SCE | FILTER_ID_SPK | FILTER_ID_SO |
-                                   FILTER_ID_TE | FILTER_ID_TXT | FILTER_ID_VF 
| FILTER_ID_WO | FILTER_ID_CF;
+                                   FILTER_ID_TE | FILTER_ID_TXT | FILTER_ID_VF 
| FILTER_ID_WO | FILTER_ID_CF | FILTER_ID_WS;
 
                if (U.uiflag & USER_HIDE_DOT) {
                        params->flag |= FILE_HIDE_DOT;
diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h
index 8bb997c..89f78ac 100644
--- a/source/blender/makesdna/DNA_ID.h
+++ b/source/blender/makesdna/DNA_ID.h
@@ -389,6 +389,7 @@ enum {
        FILTER_ID_WO        = (1 << 26),
        FILTER_ID_PA        = (1 << 27),
        FILTER_ID_CF        = (1 << 28),
+       FILTER_ID_WS        = (1 << 29),
 };
 
 /* IMPORTANT: this enum matches the order currently use in set_lisbasepointers,
diff --git a/source/blender/makesrna/intern/rna_space.c 
b/source/blender/makesrna/intern/rna_space.c
index 8bbb6d5..dbf9631 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -3916,6 +3916,7 @@ static void rna_def_fileselect_params(BlenderRNA *brna)
                {FILTER_ID_TXT, "TEXT", ICON_TEXT, "Texts", "Show/hide Text 
data-blocks"},
                {FILTER_ID_VF, "FONT", ICON_FONT_DATA, "Fonts", "Show/hide Font 
data-blocks"},
                {FILTER_ID_WO, "WORLD", ICON_WORLD_DATA, "Worlds", "Show/hide 
World data-blocks"},
+               {FILTER_ID_WS, "WORK_SPACE", ICON_NONE, "Workspaces", 
"Show/hide workspace data-blocks"},
                {0, NULL, 0, NULL, NULL}
        };
 
@@ -3933,7 +3934,7 @@ static void rna_def_fileselect_params(BlenderRNA *brna)
             "Show/hide materials, nodetrees, textures and Freestyle's 
linestyles"},
                {FILTER_ID_IM | FILTER_ID_MC | FILTER_ID_MSK | FILTER_ID_SO,
             "IMAGE", ICON_IMAGE_DATA, "Images & Sounds", "Show/hide images, 
movie clips, sounds and masks"},
-               {FILTER_ID_CA | FILTER_ID_LA | FILTER_ID_SPK | FILTER_ID_WO,
+               {FILTER_ID_CA | FILTER_ID_LA | FILTER_ID_SPK | FILTER_ID_WO | 
FILTER_ID_WS,
             "ENVIRONMENT", ICON_WORLD_DATA, "Environment", "Show/hide worlds, 
lamps, cameras and speakers"},
                {FILTER_ID_BR | FILTER_ID_GD | FILTER_ID_PA | FILTER_ID_PAL | 
FILTER_ID_PC | FILTER_ID_TXT | FILTER_ID_VF | FILTER_ID_CF,
             "MISC", ICON_GREASEPENCIL, "Miscellaneous", "Show/hide other data 
types"},

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to