Commit: 072d80a9de3adef632b8637649b169c4a895c1b9
Author: Jorge Bernal
Date:   Thu Jan 29 16:03:19 2015 +1100
Branches: master
https://developer.blender.org/rB072d80a9de3adef632b8637649b169c4a895c1b9

Fix T42858: Non uniform gamelogic names on copy

Use generic function for consistent behavior

D949 by @lordloki

===================================================================

M       source/blender/blenkernel/intern/property.c
M       source/blender/editors/object/object_edit.c
M       source/blender/editors/space_logic/logic_ops.c
M       source/blender/editors/space_logic/logic_window.c
M       source/blender/makesrna/intern/rna_actuator.c
M       source/blender/makesrna/intern/rna_controller.c
M       source/blender/makesrna/intern/rna_property.c
M       source/blender/makesrna/intern/rna_sensor.c

===================================================================

diff --git a/source/blender/blenkernel/intern/property.c 
b/source/blender/blenkernel/intern/property.c
index 819f4af..100df5f 100644
--- a/source/blender/blenkernel/intern/property.c
+++ b/source/blender/blenkernel/intern/property.c
@@ -131,60 +131,6 @@ bProperty *BKE_bproperty_new(int type)
        return prop;
 }
 
-/* used by BKE_bproperty_unique() only */
-static bProperty *bproperty_get(bProperty *first, bProperty *self, const char 
*name)
-{
-       bProperty *p;
-       for (p = first; p; p = p->next) {
-               if (p != self && STREQ(p->name, name))
-                       return p;
-       }
-       return NULL;
-}
-void BKE_bproperty_unique(bProperty *first, bProperty *prop, int force)
-{
-       bProperty *p;
-
-       /* set the first if its not set */
-       if (first == NULL) {
-               first = prop;
-               while (first->prev) {
-                       first = first->prev;
-               }
-       }
-
-       if (force) {
-               /* change other names to make them unique */
-               while ((p = bproperty_get(first, prop, prop->name))) {
-                       BKE_bproperty_unique(first, p, 0);
-               }
-       }
-       else {
-               /* change our own name until its unique */
-               if (bproperty_get(first, prop, prop->name)) {
-                       /* there is a collision */
-                       char new_name[sizeof(prop->name)];
-                       char base_name[sizeof(prop->name)];
-                       char num[sizeof(prop->name)];
-                       int i = 0;
-
-                       /* strip numbers */
-                       BLI_strncpy(base_name, prop->name, sizeof(base_name));
-                       for (i = strlen(base_name) - 1; (i >= 0 && 
isdigit(base_name[i])); i--) {
-                               base_name[i] = '\0';
-                       }
-                       i = 0;
-
-                       do { /* ensure we have enough chars for the new number 
in the name */
-                               const size_t num_len = BLI_snprintf(num, 
sizeof(num), "%d", i++);
-                               BLI_snprintf(new_name, sizeof(prop->name),
-                                            "%.*s%s", (int)(sizeof(prop->name) 
- num_len), base_name, num);
-                       } while (bproperty_get(first, prop, new_name));
-
-                       BLI_strncpy(prop->name, new_name, sizeof(prop->name));
-               }
-       }
-}
 
 bProperty *BKE_bproperty_object_get(Object *ob, const char *name)
 {
diff --git a/source/blender/editors/object/object_edit.c 
b/source/blender/editors/object/object_edit.c
index 62c27d8..749a178 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -42,6 +42,8 @@
 #include "BLI_utildefines.h"
 #include "BLI_ghash.h"
 
+#include "BLF_translation.h"
+
 #include "DNA_armature_types.h"
 #include "DNA_curve_types.h"
 #include "DNA_group_types.h"
@@ -1701,7 +1703,7 @@ static int game_property_new_exec(bContext *C, wmOperator 
*op)
                BLI_strncpy(prop->name, name, sizeof(prop->name));
        }
 
-       BKE_bproperty_unique(NULL, prop, 0); // 
make_unique_prop_names(prop->name);
+       BLI_uniquename(&ob->prop, prop, DATA_("Property"), '.', 
offsetof(bProperty, name), sizeof(prop->name));
 
        WM_event_add_notifier(C, NC_LOGIC, NULL);
        return OPERATOR_FINISHED;
diff --git a/source/blender/editors/space_logic/logic_ops.c 
b/source/blender/editors/space_logic/logic_ops.c
index 62703ba..2c6280f 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 9e87fe0..37c6346 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; a<obcount; a++) {
-               ob= (Object *)idar[a];
-               propcount+= BLI_listbase_count(&ob->prop);
-               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; a<obcount; a++) {
-               ob= (Object *)idar[a];
-               prop= ob->prop.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; nr<propcount; nr++) {
-               if (names[nr] != str && STREQ(names[nr], str)) {
-                       BLI_newname(str, +1);
-               }
-       }
-       
-       MEM_freeN(idar);
-       MEM_freeN(names);
-}
-
 static void do_logic_buts(bContext *C, void *UNUSED(arg), int event)
 {
        Main *bmain= CTX_data_main(C);
@@ -206,7 +126,7 @@ static void do_logic_buts(bContext *C, void *UNUSED(arg), 
int event)
                                ob->scaflag &= ~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;
                        }
diff --git a/source/blender/makesrna/intern/rna_actuator.c 
b/source/blender/makesrna/intern/rna_actuator.c
index 9c7d66d..691a743 100644
--- a/source/blender/makesrna/intern/rna_actuator.c
+++ b/source/blender/makesrna/intern/rna_actuator.c
@@ -120,14 +120,10 @@ static StructRNA *rna_Actuator_refine(struct PointerRNA 
*ptr)
 
 static void rna_Actuator_name_set(PointerRNA *ptr, const char *value)
 {
-       bActuator *act = (bActuator *)ptr->data;
-
+       Object *ob = ptr->id.data;
+       bActuator *act = ptr->data;
        BLI_strncpy_utf8(act->name, value, sizeof(act->name));
-
-       if (ptr->id.data) {
-               Object *ob = (Object *)ptr->id.data;
-               BLI_uniquename(&ob->actuators, act, DATA_("Actuator"), '.', 
offsetof(bActuator, name), sizeof(act->name));
-       }
+       BLI_uniquename(&ob->actuators, act, DATA_("Actuator"), '.', 
offsetof(bActuator, name), sizeof(act->name));
 }
 
 static void rna_Actuator_type_set(struct PointerRNA *ptr, int value)
diff --git a/source/blender/makesrna/intern/rna_controller.c 
b/source/blender/makesrna/intern/rna_controller.c
index 8b5074e..ba0214d 100644
--- a/source/blender/makesrna/intern/rna_controller.c
+++ b/source/blender/makesrna/intern/rna_controller.c
@@ -85,15 +85,10 @@ static StructRNA *rna_Controller_refine(struct PointerRNA 
*ptr)
 
 static void rna_Constroller_name_set(PointerRNA *ptr, const char *value)
 {
-       bController *cont = (bController *)ptr->data;
-
+       Object *ob = ptr->id.data;
+       bController *cont = ptr->data;
        BLI_strncpy_utf8(cont->name, value, sizeof(cont->name));
-
-       if (ptr->id.data) {
-               Object *ob = (Object *)ptr->id.data;
-               BLI_uniquename(&ob->controllers, cont, DATA_("Controller"), 
'.', offsetof(bController, name),
-                              sizeof(cont->name));
-       }
+       BLI_uniquename(&ob->controllers, cont, DATA_("Controller"), '.', 
offsetof(bController, name), sizeof(cont->name));
 }
 
 static void rna_Controller_type_set(struct PointerRNA *ptr, int value)
diff --git a/source/blender/make

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to