Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-08-11 09:04:01 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-08-11 09:04:01 +0400
commitef18ec335ff8496d1a047615073c7258eeffa371 (patch)
tree0da45af24c4b9f4055390a9640bf0d59613605bc /source/blender/editors/interface
parent17e88915fdd7048365df1be48d615d69c0924b4c (diff)
parent50277c48ba5bf9eae418453159e421489895dafd (diff)
svn merge -r39145:39286 https://svn.blender.org/svnroot/bf-blender/trunk/blender
Diffstat (limited to 'source/blender/editors/interface')
-rw-r--r--source/blender/editors/interface/interface_layout.c38
-rw-r--r--source/blender/editors/interface/interface_templates.c26
2 files changed, 38 insertions, 26 deletions
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index 85cc944f03b..df654cf3645 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -2745,6 +2745,25 @@ void uiLayoutOperatorButs(const bContext *C, uiLayout *layout, wmOperator *op,in
uiItemL(layout, "* Redo Unsupported *", ICON_NONE); // XXX, could give some nicer feedback or not show redo panel at all?
}
+ /* menu */
+ if(op->type->flag & OPTYPE_PRESET) {
+ /* XXX, no simple way to get WM_MT_operator_presets.bl_label from python! Label remains the same always! */
+ PointerRNA op_ptr;
+ uiLayout *row;
+
+ row= uiLayoutRow(layout, TRUE);
+ uiItemM(row, (bContext *)C, "WM_MT_operator_presets", NULL, ICON_NONE);
+
+ WM_operator_properties_create(&op_ptr, "WM_OT_operator_preset_add");
+ RNA_string_set(&op_ptr, "operator", op->type->idname);
+ op_ptr= uiItemFullO(row, "WM_OT_operator_preset_add", "", ICON_ZOOMIN, op_ptr.data, WM_OP_INVOKE_DEFAULT, 0);
+
+ WM_operator_properties_create(&op_ptr, "WM_OT_operator_preset_add");
+ RNA_string_set(&op_ptr, "operator", op->type->idname);
+ RNA_boolean_set(&op_ptr, "remove_active", 1);
+ op_ptr= uiItemFullO(row, "WM_OT_operator_preset_add", "", ICON_ZOOMOUT, op_ptr.data, WM_OP_INVOKE_DEFAULT, 0);
+ }
+
if(op->type->ui) {
op->layout= layout;
op->type->ui((bContext*)C, op);
@@ -2759,25 +2778,6 @@ void uiLayoutOperatorButs(const bContext *C, uiLayout *layout, wmOperator *op,in
RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr);
- /* menu */
- if(op->type->flag & OPTYPE_PRESET) {
- /* XXX, no simple way to get WM_MT_operator_presets.bl_label from python! Label remains the same always! */
- PointerRNA op_ptr;
- uiLayout *row;
-
- row= uiLayoutRow(layout, TRUE);
- uiItemM(row, (bContext *)C, "WM_MT_operator_presets", NULL, ICON_NONE);
-
- WM_operator_properties_create(&op_ptr, "WM_OT_operator_preset_add");
- RNA_string_set(&op_ptr, "operator", op->type->idname);
- op_ptr= uiItemFullO(row, "WM_OT_operator_preset_add", "", ICON_ZOOMIN, op_ptr.data, WM_OP_INVOKE_DEFAULT, 0);
-
- WM_operator_properties_create(&op_ptr, "WM_OT_operator_preset_add");
- RNA_string_set(&op_ptr, "operator", op->type->idname);
- RNA_boolean_set(&op_ptr, "remove_active", 1);
- op_ptr= uiItemFullO(row, "WM_OT_operator_preset_add", "", ICON_ZOOMOUT, op_ptr.data, WM_OP_INVOKE_DEFAULT, 0);
- }
-
/* main draw call */
empty= uiDefAutoButsRNA(layout, &ptr, check_prop, label_align) == 0;
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index c85d5ae5616..c841e846c58 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -54,6 +54,7 @@
#include "BKE_displist.h"
#include "ED_screen.h"
+#include "ED_object.h"
#include "ED_render.h"
#include "RNA_access.h"
@@ -276,8 +277,22 @@ static void template_id_cb(bContext *C, void *arg_litem, void *arg_event)
}
break;
case UI_ID_ALONE:
- if(id)
- id_single_user(C, id, &template->ptr, template->prop);
+ if(id) {
+ const int do_scene_obj= (GS(id->name) == ID_OB) &&
+ (template->ptr.type == &RNA_SceneObjects);
+
+ /* make copy */
+ if(do_scene_obj) {
+ Scene *scene= CTX_data_scene(C);
+ ED_object_single_user(scene, (struct Object *)id);
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, scene);
+ }
+ else {
+ if(id) {
+ id_single_user(C, id, &template->ptr, template->prop);
+ }
+ }
+ }
break;
#if 0
case UI_ID_AUTO_NAME:
@@ -395,10 +410,7 @@ static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, Str
sprintf(str, "%d", id->us);
- if(id->us<10)
- but= uiDefBut(block, BUT, 0, str, 0,0,UI_UNIT_X,UI_UNIT_Y, NULL, 0, 0, 0, 0, "Displays number of users of this data. Click to make a single-user copy.");
- else
- but= uiDefBut(block, BUT, 0, str, 0,0,UI_UNIT_X+10,UI_UNIT_Y, NULL, 0, 0, 0, 0, "Displays number of users of this data. Click to make a single-user copy.");
+ but= uiDefBut(block, BUT, 0, str, 0,0,UI_UNIT_X + ((id->us < 10) ? 0:10), UI_UNIT_Y, NULL, 0, 0, 0, 0, "Displays number of users of this data. Click to make a single-user copy.");
uiButSetNFunc(but, template_id_cb, MEM_dupallocN(template), SET_INT_IN_POINTER(UI_ID_ALONE));
if(!id_copy(id, NULL, 1 /* test only */) || (idfrom && idfrom->lib) || !editable)
@@ -2093,7 +2105,7 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe
}
else if(itemptr->type == &RNA_ShapeKey) {
Object *ob= (Object*)activeptr->data;
- Key *key= (Key*)itemptr->data;
+ Key *key= (Key*)itemptr->id.data;
split= uiLayoutSplit(sub, 0.75f, 0);