Revision: 38521
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38521
Author:   aligorith
Date:     2011-07-20 01:12:57 +0000 (Wed, 20 Jul 2011)
Log Message:
-----------
Add/Clear Fake Users from Outliner by RMB on ID blocks

Modified Paths:
--------------
    
branches/soc-2011-pepper/source/blender/editors/space_outliner/outliner_tools.c

Modified: 
branches/soc-2011-pepper/source/blender/editors/space_outliner/outliner_tools.c
===================================================================
--- 
branches/soc-2011-pepper/source/blender/editors/space_outliner/outliner_tools.c 
    2011-07-20 00:36:28 UTC (rev 38520)
+++ 
branches/soc-2011-pepper/source/blender/editors/space_outliner/outliner_tools.c 
    2011-07-20 01:12:57 UTC (rev 38521)
@@ -300,14 +300,33 @@
 
 static void id_local_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeElement 
*UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
 {
-       if(tselem->id->lib && (tselem->id->flag & LIB_EXTERN)) {
+       if (tselem->id->lib && (tselem->id->flag & LIB_EXTERN)) {
                tselem->id->lib= NULL;
                tselem->id->flag= LIB_LOCAL;
                new_id(NULL, tselem->id, NULL);
        }
 }
 
+static void id_fake_user_set_cb(bContext *UNUSED(C), Scene *UNUSED(scene), 
TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
+{
+       ID *id = tselem->id;
+       
+       if ((id) && ((id->flag & LIB_FAKEUSER) == 0)) {
+               id->flag |= LIB_FAKEUSER;
+               id_us_plus(id);
+       }
+}
 
+static void id_fake_user_clear_cb(bContext *UNUSED(C), Scene *UNUSED(scene), 
TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
+{
+       ID *id = tselem->id;
+       
+       if ((id) && (id->flag & LIB_FAKEUSER)) {
+               id->flag &= ~LIB_FAKEUSER;
+               id_us_min(id);
+       }
+}
+
 static void singleuser_action_cb(bContext *C, Scene *UNUSED(scene), 
TreeElement *UNUSED(te), TreeStoreElem *tsep, TreeStoreElem *tselem)
 {
        ID *id = tselem->id;
@@ -637,9 +656,13 @@
 
 typedef enum eOutlinerIdOpTypes {
        OUTLINER_IDOP_INVALID = 0,
+       
        OUTLINER_IDOP_UNLINK,
        OUTLINER_IDOP_LOCAL,
-       OUTLINER_IDOP_SINGLE
+       OUTLINER_IDOP_SINGLE,
+       
+       OUTLINER_IDOP_FAKE_ADD,
+       OUTLINER_IDOP_FAKE_CLEAR
 } eOutlinerIdOpTypes;
 
 // TODO: implement support for changing the ID-block used
@@ -647,6 +670,8 @@
        {OUTLINER_IDOP_UNLINK, "UNLINK", 0, "Unlink", ""},
        {OUTLINER_IDOP_LOCAL, "LOCAL", 0, "Make Local", ""},
        {OUTLINER_IDOP_SINGLE, "SINGLE", 0, "Make Single User", ""},
+       {OUTLINER_IDOP_FAKE_ADD, "ADD_FAKE", 0, "Add Fake User", "Ensure 
datablock gets saved even if it isn't in use (e.g. for motion and material 
libraries)"},
+       {OUTLINER_IDOP_FAKE_CLEAR, "CLEAR_FAKE", 0, "Clear Fake User", ""},
        {0, NULL, 0, NULL, NULL}
 };
 
@@ -721,6 +746,26 @@
                }
                        break;
                        
+               case OUTLINER_IDOP_FAKE_ADD:
+               {
+                       /* set fake user */
+                       outliner_do_libdata_operation(C, scene, soops, 
&soops->tree, id_fake_user_set_cb);
+                       
+                       WM_event_add_notifier(C, NC_ID|NA_EDITED, NULL);
+                       ED_undo_push(C, "Add Fake User");
+               }
+                       break;
+                       
+               case OUTLINER_IDOP_FAKE_CLEAR:
+               {
+                       /* clear fake user */
+                       outliner_do_libdata_operation(C, scene, soops, 
&soops->tree, id_fake_user_clear_cb);
+                       
+                       WM_event_add_notifier(C, NC_ID|NA_EDITED, NULL);
+                       ED_undo_push(C, "Clear Fake User");
+               }
+                       break;
+                       
                default:
                        // invalid - unhandled
                        break;

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

Reply via email to