Revision: 23219
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23219
Author:   blendix
Date:     2009-09-14 14:30:49 +0200 (Mon, 14 Sep 2009)

Log Message:
-----------
Link/Append, small changes:

* Added separate menu items for Link and Append.
* Change some OPERATOR_FINISHED to OPERATOR_CANCELLED.
* Remove some IPO specific hacks, these are no longer ID blocks,
  so not necessary to take into account.
* Some comment and code formatting tweaks.

Modified Paths:
--------------
    trunk/blender/release/ui/space_info.py
    trunk/blender/source/blender/blenkernel/intern/library.c
    trunk/blender/source/blender/editors/space_file/filelist.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/release/ui/space_info.py
===================================================================
--- trunk/blender/release/ui/space_info.py      2009-09-14 12:28:59 UTC (rev 
23218)
+++ trunk/blender/release/ui/space_info.py      2009-09-14 12:30:49 UTC (rev 
23219)
@@ -61,7 +61,8 @@
 
                layout.itemS()
                layout.operator_context = "INVOKE_AREA"
-               layout.itemO("wm.link_append", text="Append or Link")
+               layout.itemO("wm.link_append", text="Link")
+               layout.item_booleanO("wm.link_append", "link", False, 
text="Append")
                layout.itemS()
 
                layout.itemM("INFO_MT_file_import")

Modified: trunk/blender/source/blender/blenkernel/intern/library.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/library.c    2009-09-14 
12:28:59 UTC (rev 23218)
+++ trunk/blender/source/blender/blenkernel/intern/library.c    2009-09-14 
12:30:49 UTC (rev 23219)
@@ -455,16 +455,14 @@
        while(a--)      flag_listbase_ids(lbarray[a], flag, value);
 }
 
-void recalc_all_library_objects(struct Main *main)
+void recalc_all_library_objects(Main *main)
 {
-       /* DISPLISTS? */
-       Object *ob= main->object.first;
-       while(ob) {
-               if(ob->id.lib) {
+       Object *ob;
+
+       /* flag for full recalc */
+       for(ob=main->object.first; ob; ob=ob->id.next)
+               if(ob->id.lib)
                        ob->recalc |= OB_RECALC;
-               }
-               ob= ob->id.next;
-       }
 }
 
 /* note: MAX_LIBARRAY define should match this code */

Modified: trunk/blender/source/blender/editors/space_file/filelist.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/filelist.c  2009-09-14 
12:28:59 UTC (rev 23218)
+++ trunk/blender/source/blender/editors/space_file/filelist.c  2009-09-14 
12:30:49 UTC (rev 23219)
@@ -1184,11 +1184,6 @@
                id= lb->first;
                filelist->numfiles= 0;
                while(id) {
-                       /* XXXXX TODO: the selection of the ipo blocktype might 
go somewhere else? 
-                       if(filelist->has_func && idcode==ID_IP) {
-                               if(filelist->ipotype== ((Ipo *)id)->blocktype) 
filelist->numfiles++;
-                       }
-                       else */
                        if (!filelist->hide_dot || id->name[2] != '.') {
                                filelist->numfiles++;
                        }
@@ -1214,14 +1209,6 @@
                totlib= totbl= 0;
                
                while(id) {
-#if 0 
-                       // XXXXX TODO: this is deprecated, checks for correct 
IPO block? 
-                       ok= 0;
-                       if(filelist->has_func && idcode==ID_IP) {
-                               if(filelist->ipotype== ((Ipo *)id)->blocktype) 
ok= 1;
-                       }
-                       else ok= 1;
-#endif                 
                        ok = 1;
                        if(ok) {
                                if (!filelist->hide_dot || id->name[2] != '.') {

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c    
2009-09-14 12:28:59 UTC (rev 23218)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c    
2009-09-14 12:30:49 UTC (rev 23219)
@@ -247,7 +247,7 @@
        
        ot->idname= idname;
        ot->name= name;
-       ot->flag= OPTYPE_MACRO | flag;
+       ot->flag= OPTYPE_MACRO|flag;
        
        ot->exec= wm_macro_exec;
        ot->invoke= wm_macro_invoke;
@@ -542,7 +542,7 @@
 }
 
 /* op->invoke */
-static void redo_cb(bContext *C, void *arg_op, void *arg2)
+static void redo_cb(bContext *C, void *arg_op, int event)
 {
        wmOperator *lastop= arg_op;
        
@@ -564,7 +564,7 @@
        block= uiBeginBlock(C, ar, "redo_popup", UI_EMBOSS);
        uiBlockClearFlag(block, UI_BLOCK_LOOP);
        uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN|UI_BLOCK_RET_1);
-       uiBlockSetFunc(block, redo_cb, arg_op, NULL);
+       uiBlockSetHandleFunc(block, redo_cb, arg_op);
 
        if(!op->properties) {
                IDPropertyTemplate val = {0};
@@ -881,22 +881,10 @@
        RNA_def_enum_funcs(prop, open_recentfile_itemf);
 }
 
-/* ********* main file *********** */
+/* *************** open file **************** */
 
-static void untitled(char *name)
+static void open_set_load_ui(wmOperator *op)
 {
-       if (G.save_over == 0 && strlen(name) < FILE_MAX-16) {
-               char *c= BLI_last_slash(name);
-               
-               if (c)
-                       strcpy(&c[1], "untitled.blend");
-               else
-                       strcpy(name, "untitled.blend");
-       }
-}
-
-static void load_set_load_ui(wmOperator *op)
-{
        if(!RNA_property_is_set(op->ptr, "load_ui"))
                RNA_boolean_set(op->ptr, "load_ui", !(U.flag & USER_FILENOUI));
 }
@@ -904,7 +892,7 @@
 static int wm_open_mainfile_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
        RNA_string_set(op->ptr, "path", G.sce);
-       load_set_load_ui(op);
+       open_set_load_ui(op);
 
        WM_event_add_fileselect(C, op);
 
@@ -916,7 +904,7 @@
        char path[FILE_MAX];
 
        RNA_string_get(op->ptr, "path", path);
-       load_set_load_ui(op);
+       open_set_load_ui(op);
 
        if(RNA_boolean_get(op->ptr, "load_ui"))
                G.fileflags &= ~G_FILE_NO_UI;
@@ -947,9 +935,11 @@
        RNA_def_boolean(ot->srna, "load_ui", 1, "Load UI", "Load user interface 
setup in the .blend file.");
 }
 
+/* **************** link/append *************** */
+
 static int wm_link_append_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
-       if (RNA_property_is_set(op->ptr, "path")) {
+       if(RNA_property_is_set(op->ptr, "path")) {
                return WM_operator_call(C, op);
        } 
        else {
@@ -962,27 +952,24 @@
 
 static short wm_link_append_flag(wmOperator *op)
 {
-       short flag = 0;
-       if (RNA_boolean_get(op->ptr, "autoselect")) flag |= FILE_AUTOSELECT;
-       if (RNA_boolean_get(op->ptr, "active_layer")) flag |= FILE_ACTIVELAY;
-       if (RNA_boolean_get(op->ptr, "relative_paths")) flag |= FILE_STRINGCODE;
-       if (RNA_boolean_get(op->ptr, "link")) flag |= FILE_LINK;
+       short flag= 0;
+
+       if(RNA_boolean_get(op->ptr, "autoselect")) flag |= FILE_AUTOSELECT;
+       if(RNA_boolean_get(op->ptr, "active_layer")) flag |= FILE_ACTIVELAY;
+       if(RNA_boolean_get(op->ptr, "relative_paths")) flag |= FILE_STRINGCODE;
+       if(RNA_boolean_get(op->ptr, "link")) flag |= FILE_LINK;
+
        return flag;
 }
 
-#define GROUP_MAX 32
-
-
-static void make_library_local(const char *libname, Main *main)
+static void wm_link_make_library_local(Main *main, const char *libname)
 {
-       struct Library *lib;
+       Library *lib;
 
        /* and now find the latest append lib file */
-       lib= main->library.first;
-       while(lib) {
-               if (BLI_streq(libname, lib->filename)) break;
-               lib= lib->id.next;
-       }
+       for(lib= main->library.first; lib; lib=lib->id.next)
+               if(BLI_streq(libname, lib->filename))
+                       break;
        
        /* make local */
        if(lib) {
@@ -995,49 +982,51 @@
 
 static int wm_link_append_exec(bContext *C, wmOperator *op)
 {
-       char name[FILE_MAX], dir[FILE_MAX], libname[FILE_MAX], group[GROUP_MAX];
-       int idcode;
+       Main *bmain= CTX_data_main(C);
+       Scene *scene= CTX_data_scene(C);
+       Main *mainl= 0;
        BlendHandle *bh;
-       struct Main *mainvar= CTX_data_main(C);
-       struct Scene *scene= CTX_data_scene(C);
-       struct Main *mainl= 0;
-       
        PropertyRNA *prop;
-       int totfiles=0;
+       char name[FILE_MAX], dir[FILE_MAX], libname[FILE_MAX], group[GROUP_MAX];
+       int idcode, totfiles=0;
        short flag;
 
        name[0] = '\0';
        RNA_string_get(op->ptr, "filename", name);
        RNA_string_get(op->ptr, "directory", dir);
 
-       if ( BLO_is_a_library(dir, libname, group)==0 ) {
+       /* test if we have a valid data */
+       if(BLO_is_a_library(dir, libname, group) == 0) {
                BKE_report(op->reports, RPT_ERROR, "Not a library");
-               return OPERATOR_FINISHED;
-       } else if (group[0]==0) {
+               return OPERATOR_CANCELLED;
+       }
+       else if(group[0] == 0) {
                BKE_report(op->reports, RPT_ERROR, "Nothing indicated");
-               return OPERATOR_FINISHED;
-       } else if (BLI_streq(mainvar->name, libname)) {
+               return OPERATOR_CANCELLED;
+       }
+       else if(BLI_streq(bmain->name, libname)) {
                BKE_report(op->reports, RPT_ERROR, "Cannot use current file as 
library");
-               return OPERATOR_FINISHED;
+               return OPERATOR_CANCELLED;
        }
 
        /* check if something is indicated for append/link */
        prop = RNA_struct_find_property(op->ptr, "files");
-       if (prop) {
+       if(prop) {
                totfiles= RNA_property_collection_length(op->ptr, prop);
-               if (totfiles == 0) {
-                       if (name[0] == '\0') {
+               if(totfiles == 0) {
+                       if(name[0] == '\0') {
                                BKE_report(op->reports, RPT_ERROR, "Nothing 
indicated");
-                               return OPERATOR_FINISHED;
+                               return OPERATOR_CANCELLED;
                        }
                }
-       } else if (name[0] == '\0') {
+       }
+       else if(name[0] == '\0') {
                BKE_report(op->reports, RPT_ERROR, "Nothing indicated");
-               return OPERATOR_FINISHED;
+               return OPERATOR_CANCELLED;
        }
 
        /* now we have or selected, or an indicated file */
-       if (RNA_boolean_get(op->ptr, "autoselect"))
+       if(RNA_boolean_get(op->ptr, "autoselect"))
                scene_deselect_all(scene);
 
        bh = BLO_blendhandle_from_file(libname);
@@ -1045,16 +1034,16 @@
        
        flag = wm_link_append_flag(op);
 
-       if((flag & FILE_LINK)==0) {
-               /* tag everything, all untagged data can be made local */
+       /* tag everything, all untagged data can be made local */
+       if((flag & FILE_LINK)==0)
                flag_all_listbases_ids(LIB_APPEND_TAG, 1);
-       }
 
        /* here appending/linking starts */
        mainl = BLO_library_append_begin(C, &bh, libname);
-       if (totfiles == 0) {
+       if(totfiles == 0) {
                BLO_library_append_named_part(C, mainl, &bh, name, idcode, 
flag);
-       } else {
+       }
+       else {
                RNA_BEGIN(op->ptr, itemptr, "files") {
                        RNA_string_get(&itemptr, "name", name);
                        BLO_library_append_named_part(C, mainl, &bh, name, 
idcode, flag);
@@ -1063,17 +1052,16 @@
        }
        BLO_library_append_end(C, mainl, &bh, idcode, flag);
        
-       /* DISPLISTS? */
-       recalc_all_library_objects(mainvar);
+       /* mark all library linked objects to be updated */
+       recalc_all_library_objects(bmain);
 
-       /* Append, rather than linking */
-       if ((flag & FILE_LINK)==0) {
-               make_library_local(libname, mainvar);
-       }
+       /* append, rather than linking */
+       if((flag & FILE_LINK)==0)
+               wm_link_make_library_local(bmain, libname);
 
-       /* do we need to do this? */
-       if(scene)
-               DAG_scene_sort(scene);
+       /* recreate dependency graph to include new objects */
+       DAG_scene_sort(scene);
+       DAG_ids_flush_update(0);
 
        BLO_blendhandle_close(bh);
        BLI_strncpy(G.lib, dir, FILE_MAX);
@@ -1103,6 +1091,8 @@
        RNA_def_collection_runtime(ot->srna, "files", 
&RNA_OperatorFileListElement, "Files", "");
 }      
 
+/* *************** recover last session **************** */
+
 static int wm_recover_last_session_exec(bContext *C, wmOperator *op)
 {
        char scestr[FILE_MAX], filename[FILE_MAX];
@@ -1137,6 +1127,20 @@
        ot->poll= WM_operator_winactive;
 }
 
+/* *************** save file as **************** */
+
+static void untitled(char *name)
+{
+       if(G.save_over == 0 && strlen(name) < FILE_MAX-16) {
+               char *c= BLI_last_slash(name);
+               
+               if(c)
+                       strcpy(&c[1], "untitled.blend");
+               else
+                       strcpy(name, "untitled.blend");
+       }
+}
+
 static void save_set_compress(wmOperator *op)
 {
        if(!RNA_property_is_set(op->ptr, "compress")) {
@@ -1199,7 +1203,7 @@

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to