From ce6e6112eb81892c8c179c8502ffa8ca17b57f46 Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Sun, 16 May 2010 16:28:50 +0000 Subject: [PATCH] Logic UI: copy logic operator (old Ctrl+C) + add logics (shift+a) According to Matt the RMB->Copy to selected wouldn't work for logics because the copy we need is for the whole logic (s/c/a). So (at least for the time been), copy logic is possible again. It work as 2.49 (replacing the existent logic). Add Logics is a python menu to give quick access to add logics. I have to see how to put that in Add Menu. I should be easy, but I'll leave it for later. --- release/scripts/ui/space_logic.py | 11 ++++- .../editors/object/object_constraint.c | 2 +- .../blender/editors/space_logic/logic_ops.c | 43 +++++++++++++++++++ .../blender/editors/space_logic/space_logic.c | 1 + 4 files changed, 55 insertions(+), 2 deletions(-) diff --git a/release/scripts/ui/space_logic.py b/release/scripts/ui/space_logic.py index 07b26fdc862..0dcdbbb1def 100644 --- a/release/scripts/ui/space_logic.py +++ b/release/scripts/ui/space_logic.py @@ -46,9 +46,18 @@ class LOGIC_PT_properties(bpy.types.Panel): row.prop(prop, "debug", text="", toggle=True, icon='INFO') row.operator("object.game_property_remove", text="", icon='X').index = i +class LOGIC_MT_logicbricks_add(bpy.types.Menu): + bl_label = "Add" + + def draw(self, context): + layout = self.layout + + layout.operator_menu_enum("logic.sensor_add", "type", text="Sensor") + layout.operator_menu_enum("logic.controller_add", "type", text="Controller") + layout.operator_menu_enum("logic.actuator_add", "type", text="Actuator") classes = [ - LOGIC_PT_properties] + LOGIC_PT_properties, LOGIC_MT_logicbricks_add] def register(): diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c index 039b18efb39..9163baf606f 100644 --- a/source/blender/editors/object/object_constraint.c +++ b/source/blender/editors/object/object_constraint.c @@ -1340,7 +1340,7 @@ void OBJECT_OT_constraint_add_with_targets(wmOperatorType *ot) void OBJECT_OT_constraint_copy(wmOperatorType *ot) { /* identifiers */ - ot->name= "Copy Constraints to Others"; + ot->name= "Copy Constraints to Selected"; ot->description = "Copy constraints to other selected objects."; ot->idname= "OBJECT_OT_constraint_copy"; diff --git a/source/blender/editors/space_logic/logic_ops.c b/source/blender/editors/space_logic/logic_ops.c index 632331459cb..347b586f49c 100644 --- a/source/blender/editors/space_logic/logic_ops.c +++ b/source/blender/editors/space_logic/logic_ops.c @@ -533,6 +533,48 @@ void LOGIC_OT_actuator_add(wmOperatorType *ot) prop= RNA_def_string(ot->srna, "name", "", 32, "Name", "Name of the Actuator to add"); } +/* Copy Routines */ + +static int logicbricks_copy_exec(bContext *C, wmOperator *op) +{ + Object *ob=ED_object_active_context(C); + + CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) { + if(ob != ob_iter) { + if (ob->data != ob_iter->data){ + copy_sensors(&ob_iter->sensors, &ob->sensors); + copy_controllers(&ob_iter->controllers, &ob->controllers); + copy_actuators(&ob_iter->actuators, &ob->actuators); + } + + if(ob_iter->totcol==ob->totcol) { + ob_iter->actcol= ob->actcol; + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob_iter); + } + } + } + CTX_DATA_END; + + WM_event_add_notifier(C, NC_LOGIC, NULL); + + return OPERATOR_FINISHED; +} + +void LOGIC_OT_bricks_copy(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Copy Logic Bricks to Selected"; + ot->description = "Copy logic bricks to other selected objects."; + ot->idname= "LOGIC_OT_bricks_copy"; + + /* api callbacks */ + ot->exec= logicbricks_copy_exec; + ot->poll= ED_operator_object_active_editable; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + void ED_operatortypes_logic(void) { WM_operatortype_append(LOGIC_OT_sensor_remove); @@ -541,4 +583,5 @@ void ED_operatortypes_logic(void) WM_operatortype_append(LOGIC_OT_controller_add); WM_operatortype_append(LOGIC_OT_actuator_remove); WM_operatortype_append(LOGIC_OT_actuator_add); + WM_operatortype_append(LOGIC_OT_bricks_copy); } diff --git a/source/blender/editors/space_logic/space_logic.c b/source/blender/editors/space_logic/space_logic.c index 89eff3beb0c..ed3d956ce01 100644 --- a/source/blender/editors/space_logic/space_logic.c +++ b/source/blender/editors/space_logic/space_logic.c @@ -182,6 +182,7 @@ void logic_keymap(struct wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "LOGIC_OT_properties", NKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "LOGIC_OT_links_cut", LEFTMOUSE, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_menu(keymap, "LOGIC_MT_logicbricks_add", AKEY, KM_PRESS, KM_SHIFT, 0); } static void logic_refresh(const bContext *C, ScrArea *sa)