From 072d80a9de3adef632b8637649b169c4a895c1b9 Mon Sep 17 00:00:00 2001 From: Jorge Bernal Date: Thu, 29 Jan 2015 16:03:19 +1100 Subject: Fix T42858: Non uniform gamelogic names on copy Use generic function for consistent behavior D949 by @lordloki --- source/blender/editors/space_logic/logic_ops.c | 9 ++- source/blender/editors/space_logic/logic_window.c | 88 ++--------------------- 2 files changed, 10 insertions(+), 87 deletions(-) (limited to 'source/blender/editors/space_logic') diff --git a/source/blender/editors/space_logic/logic_ops.c b/source/blender/editors/space_logic/logic_ops.c index 62703ba517e..2c6280f5670 100644 --- a/source/blender/editors/space_logic/logic_ops.c +++ b/source/blender/editors/space_logic/logic_ops.c @@ -39,6 +39,8 @@ #include "BLI_blenlib.h" #include "BLI_utildefines.h" +#include "BLF_translation.h" + #include "BKE_context.h" #include "BKE_main.h" #include "BKE_sca.h" @@ -298,7 +300,7 @@ static int sensor_add_exec(bContext *C, wmOperator *op) BLI_strncpy(sens->name, sens_name, sizeof(sens->name)); } - make_unique_prop_names(C, sens->name); + BLI_uniquename(&ob->sensors, sens, DATA_("Sensor"), '.', offsetof(bSensor, name), sizeof(sens->name)); ob->scaflag |= OB_SHOWSENS; WM_event_add_notifier(C, NC_LOGIC, NULL); @@ -405,7 +407,8 @@ static int controller_add_exec(bContext *C, wmOperator *op) BLI_strncpy(cont->name, cont_name, sizeof(cont->name)); } - make_unique_prop_names(C, cont->name); + BLI_uniquename(&ob->controllers, cont, DATA_("Controller"), '.', offsetof(bController, name), sizeof(cont->name)); + /* set the controller state mask from the current object state. * A controller is always in a single state, so select the lowest bit set * from the object state */ @@ -523,7 +526,7 @@ static int actuator_add_exec(bContext *C, wmOperator *op) BLI_strncpy(act->name, act_name, sizeof(act->name)); } - make_unique_prop_names(C, act->name); + BLI_uniquename(&ob->actuators, act, DATA_("Actuator"), '.', offsetof(bActuator, name), sizeof(act->name)); ob->scaflag |= OB_SHOWACT; WM_event_add_notifier(C, NC_LOGIC, NULL); diff --git a/source/blender/editors/space_logic/logic_window.c b/source/blender/editors/space_logic/logic_window.c index 9e87fe02da1..37c634672df 100644 --- a/source/blender/editors/space_logic/logic_window.c +++ b/source/blender/editors/space_logic/logic_window.c @@ -48,6 +48,7 @@ #include "BLI_blenlib.h" #include "BLI_utildefines.h" +#include "BLI_path_util.h" #include "BKE_action.h" #include "BKE_context.h" @@ -94,87 +95,6 @@ /* proto */ static ID **get_selected_and_linked_obs(bContext *C, short *count, short scavisflag); -static int vergname(const void *v1, const void *v2) -{ - const char * const *x1 = v1, * const *x2 = v2; - return BLI_natstrcmp(*x1, *x2); -} - -void make_unique_prop_names(bContext *C, char *str) -{ - Object *ob; - bProperty *prop; - bSensor *sens; - bController *cont; - bActuator *act; - ID **idar; - short a, obcount, propcount=0, nr; - const char **names; - - /* this function is called by a Button, and gives the current - * stringpointer as an argument, this is the one that can change - */ - - idar= get_selected_and_linked_obs(C, &obcount, BUTS_SENS_SEL|BUTS_SENS_ACT|BUTS_ACT_SEL|BUTS_ACT_ACT|BUTS_CONT_SEL|BUTS_CONT_ACT); - - /* for each object, make properties and sca names unique */ - - /* count total names */ - for (a=0; aprop); - propcount+= BLI_listbase_count(&ob->sensors); - propcount+= BLI_listbase_count(&ob->controllers); - propcount+= BLI_listbase_count(&ob->actuators); - } - if (propcount==0) { - if (idar) MEM_freeN(idar); - return; - } - - /* make names array for sorting */ - names= MEM_callocN(propcount*sizeof(void *), "names"); - - /* count total names */ - nr= 0; - for (a=0; aprop.first; - while (prop) { - names[nr++] = prop->name; - prop= prop->next; - } - sens= ob->sensors.first; - while (sens) { - names[nr++] = sens->name; - sens= sens->next; - } - cont= ob->controllers.first; - while (cont) { - names[nr++] = cont->name; - cont= cont->next; - } - act= ob->actuators.first; - while (act) { - names[nr++] = act->name; - act= act->next; - } - } - - qsort(names, propcount, sizeof(void *), vergname); - - /* now we check for double names, and change them */ - - for (nr=0; nrscaflag &= ~OB_ADDSENS; sens= new_sensor(SENS_ALWAYS); BLI_addtail(&(ob->sensors), sens); - make_unique_prop_names(C, sens->name); + BLI_uniquename(&ob->sensors, sens, DATA_("Sensor"), '.', offsetof(bSensor, name), sizeof(sens->name)); ob->scaflag |= OB_SHOWSENS; } } @@ -248,7 +168,7 @@ static void do_logic_buts(bContext *C, void *UNUSED(arg), int event) if (ob->scaflag & OB_ADDCONT) { ob->scaflag &= ~OB_ADDCONT; cont= new_controller(CONT_LOGIC_AND); - make_unique_prop_names(C, cont->name); + BLI_uniquename(&ob->controllers, cont, DATA_("Controller"), '.', offsetof(bController, name), sizeof(cont->name)); ob->scaflag |= OB_SHOWCONT; BLI_addtail(&(ob->controllers), cont); /* set the controller state mask from the current object state. @@ -324,7 +244,7 @@ static void do_logic_buts(bContext *C, void *UNUSED(arg), int event) if (ob->scaflag & OB_ADDACT) { ob->scaflag &= ~OB_ADDACT; act= new_actuator(ACT_OBJECT); - make_unique_prop_names(C, act->name); + BLI_uniquename(&ob->actuators, act, DATA_("Actuator"), '.', offsetof(bActuator, name), sizeof(act->name)); BLI_addtail(&(ob->actuators), act); ob->scaflag |= OB_SHOWACT; } -- cgit v1.2.3