[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