[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38521] branches/soc-2011-pepper/source/ blender/editors/space_outliner/outliner_tools.c: Add/ Clear Fake Users from Outliner by RMB on ID blocks

Joshua Leung aligorith at gmail.com
Wed Jul 20 03:12:58 CEST 2011


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;




More information about the Bf-blender-cvs mailing list