Revision: 30895
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30895
Author:   aligorith
Date:     2010-07-30 13:15:39 +0200 (Fri, 30 Jul 2010)

Log Message:
-----------
Bullet SoC - I/O Code for Manipulators

Note: this adds a dependency in blenloader on the WindowManager module. I've 
only done this for scons now, so other buildsystems will need tweaking later. 
However, I'm not sure if it's fine to reference windowmanager stuff in 
blenloader...

Modified Paths:
--------------
    branches/soc-2010-aligorith-2/source/blender/blenloader/SConscript
    branches/soc-2010-aligorith-2/source/blender/blenloader/intern/readfile.c
    branches/soc-2010-aligorith-2/source/blender/blenloader/intern/writefile.c

Modified: branches/soc-2010-aligorith-2/source/blender/blenloader/SConscript
===================================================================
--- branches/soc-2010-aligorith-2/source/blender/blenloader/SConscript  
2010-07-30 10:44:00 UTC (rev 30894)
+++ branches/soc-2010-aligorith-2/source/blender/blenloader/SConscript  
2010-07-30 11:15:39 UTC (rev 30895)
@@ -6,6 +6,7 @@
 incs = '. #/intern/guardedalloc ../blenlib ../blenkernel'
 incs += ' ../makesdna ../readblenfile ../editors/include'
 incs += ' ../render/extern/include ../makesrna'
+incs += ' ../windowmanager/'
 
 incs += ' ' + env['BF_ZLIB_INC']
 

Modified: 
branches/soc-2010-aligorith-2/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/soc-2010-aligorith-2/source/blender/blenloader/intern/readfile.c   
2010-07-30 10:44:00 UTC (rev 30894)
+++ branches/soc-2010-aligorith-2/source/blender/blenloader/intern/readfile.c   
2010-07-30 11:15:39 UTC (rev 30895)
@@ -149,6 +149,9 @@
 #include "BLO_undofile.h"
 #include "BLO_readblenfile.h" // streaming read pipe, for BLO_readblenfile 
BLO_readblenfilememory
 
+#include "WM_api.h"
+#include "WM_types.h"
+
 #include "readfile.h"
 
 #include "PIL_time.h"
@@ -5041,6 +5044,22 @@
                v3d->twtype= V3D_MANIP_TRANSLATE;
 }
 
+static void direct_link_manipulator(FileData *fd, wmManipulator *man)
+{
+       /* relink properties */
+       man->properties = newdataadr(fd, man->properties);
+       if (man->properties)
+               IDP_DirectLinkProperty(man->properties, (fd->flags & 
FD_FLAGS_SWITCH_ENDIAN), fd);
+               
+       /* relink type-info */
+       man->type = WM_manipulatortype_find(man->idname, 1);
+       
+       /* clear runtime state storage */
+       // XXX: actually relink some of this instead?
+       man->draw_callbacks.first= man->draw_callbacks.last= NULL;
+       man->active_handle = 0;
+}
+
 static void direct_link_screen(FileData *fd, bScreen *sc)
 {
        ScrArea *sa;
@@ -5086,15 +5105,20 @@
        for(sa= sc->areabase.first; sa; sa= sa->next) {
                SpaceLink *sl;
                ARegion *ar;
+               wmManipulator *man;
 
                link_list(fd, &(sa->spacedata));
                link_list(fd, &(sa->regionbase));
+               link_list(fd, &(sa->manipulators));
 
                sa->handlers.first= sa->handlers.last= NULL;
                sa->type= NULL; /* spacetype callbacks */
                
                for(ar= sa->regionbase.first; ar; ar= ar->next)
                        direct_link_region(fd, ar, sa->spacetype);
+                       
+               for(man= sa->manipulators.first; man; man= man->next)
+                       direct_link_manipulator(fd, man);
                
                /* accident can happen when read/save new file with older 
version */
                /* 2.50: we now always add spacedata for info */
@@ -5109,9 +5133,13 @@
                
                for (sl= sa->spacedata.first; sl; sl= sl->next) {
                        link_list(fd, &(sl->regionbase));
+                       link_list(fd, &(sl->manipulators));
 
                        for(ar= sl->regionbase.first; ar; ar= ar->next)
                                direct_link_region(fd, ar, sl->spacetype);
+                       
+                       for(man= sa->manipulators.first; man; man= man->next)
+                       direct_link_manipulator(fd, man);
 
                        if (sl->spacetype==SPACE_VIEW3D) {
                                View3D *v3d= (View3D*) sl;

Modified: 
branches/soc-2010-aligorith-2/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/soc-2010-aligorith-2/source/blender/blenloader/intern/writefile.c  
2010-07-30 10:44:00 UTC (rev 30894)
+++ branches/soc-2010-aligorith-2/source/blender/blenloader/intern/writefile.c  
2010-07-30 11:15:39 UTC (rev 30895)
@@ -2003,6 +2003,15 @@
        }
 }
 
+static void write_manipulator(WriteData *wd, wmManipulator *man)
+{
+       /* don't bother trying to save data from the 'runtime' section... */
+       writestruct(wd, DATA, "wmManipulator", 1, man);
+       
+       if (man->properties)
+               IDP_WriteProperty(man->properties, wd);
+}
+
 static void write_screens(WriteData *wd, ListBase *scrbase)
 {
        bScreen *sc;
@@ -2030,6 +2039,7 @@
                        SpaceLink *sl;
                        Panel *pa;
                        ARegion *ar;
+                       wmManipulator *man;
                        
                        writestruct(wd, DATA, "ScrArea", 1, sa);
                        
@@ -2040,8 +2050,14 @@
                                        writestruct(wd, DATA, "Panel", 1, pa);
                        }
                        
+                       for(man= sa->manipulators.first; man; man= man->next) 
+                               write_manipulator(wd, man);
+                       
                        sl= sa->spacedata.first;
                        while(sl) {
+                               for(man= sl->manipulators.first; man; man= 
man->next) 
+                                       write_manipulator(wd, man);
+                               
                                for(ar= sl->regionbase.first; ar; ar= ar->next)
                                        write_region(wd, ar, sl->spacetype);
                                


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to