Logic UI: add name option for add operators + ALL button in controller states is...
authorDalai Felinto <dfelinto@gmail.com>
Fri, 14 May 2010 10:45:50 +0000 (10:45 +0000)
committerDalai Felinto <dfelinto@gmail.com>
Fri, 14 May 2010 10:45:50 +0000 (10:45 +0000)
Extra comments related bugs:
1)"actuators_show_active_states" doesn't seem to produce any effect (maybe because PIN is not implemented yet? therefore it's always on?

2)If you set the name to be bigger than 32 it will crashes blender (somehow for s/c/a the get function instead of using the defined 32 maxlen it's using 160 (from UserPrerencesFilePaths_python_scriptsdirectory_get ),

3)properties currently can have the same name as s/c/a and they shouldn't.

4)we need an option to show and/or set the STATE of a given controller (in 2.49 it's the number by the controller name)

source/blender/editors/space_logic/logic_ops.c
source/blender/editors/space_logic/logic_window.c
source/blender/makesrna/intern/rna_space.c

index e7abf49e95b550fb30418c175f2dad14ab15d5ca..632331459cbc4c23fdeeaa141f21dc82338e7cf2 100644 (file)
@@ -263,6 +263,7 @@ static int sensor_add_exec(bContext *C, wmOperator *op)
        PropertyRNA *prop;
        const char *sens_name;
        int type= RNA_enum_get(op->ptr, "type");
+       char name[32];
 
        sens= new_sensor(type);
        BLI_addtail(&(ob->sensors), sens);
@@ -270,9 +271,15 @@ static int sensor_add_exec(bContext *C, wmOperator *op)
        /* set the sensor name based on rna type enum */
        RNA_pointer_create((ID *)ob, &RNA_Sensor, sens, &sens_ptr);
        prop = RNA_struct_find_property(&sens_ptr, "type");
-       RNA_property_enum_name(C, &sens_ptr, prop, RNA_property_enum_get(&sens_ptr, prop), &sens_name);
-       BLI_strncpy(sens->name, sens_name, sizeof(sens->name));
-       
+
+       RNA_string_get(op->ptr, "name", name);
+       if(BLI_strnlen(name, 32) < 1){
+               RNA_property_enum_name(C, &sens_ptr, prop, RNA_property_enum_get(&sens_ptr, prop), &sens_name);
+               BLI_strncpy(sens->name, sens_name, sizeof(sens->name));
+       }
+       else
+               BLI_strncpy(sens->name, name, sizeof(sens->name));
+
        make_unique_prop_names(C, sens->name);
        ob->scaflag |= OB_SHOWSENS;
 
@@ -301,6 +308,7 @@ void LOGIC_OT_sensor_add(wmOperatorType *ot)
        /* properties */
        prop= RNA_def_enum(ot->srna, "type", DummyRNA_NULL_items, SENS_ALWAYS, "Type", "Type of sensor to add");
        RNA_def_enum_funcs(prop, rna_Sensor_type_itemf);
+       prop= RNA_def_string(ot->srna, "name", "", 32, "Name", "Name of the Sensor to add");
 }
 
 /* ************* Add/Remove Controller Operator ************* */
@@ -360,6 +368,7 @@ static int controller_add_exec(bContext *C, wmOperator *op)
        const char *cont_name;
        int type= RNA_enum_get(op->ptr, "type");
        int bit;
+       char name[32];
        
        cont= new_controller(type);
        BLI_addtail(&(ob->controllers), cont);
@@ -367,11 +376,16 @@ static int controller_add_exec(bContext *C, wmOperator *op)
        /* set the controller name based on rna type enum */
        RNA_pointer_create((ID *)ob, &RNA_Controller, cont, &cont_ptr);
        prop = RNA_struct_find_property(&cont_ptr, "type");
-       RNA_property_enum_name(C, &cont_ptr, prop, RNA_property_enum_get(&cont_ptr, prop), &cont_name);
-       BLI_strncpy(cont->name, cont_name, sizeof(cont->name));
-       
+
+       RNA_string_get(op->ptr, "name", name);
+       if(BLI_strnlen(name, 32) < 1){
+               RNA_property_enum_name(C, &cont_ptr, prop, RNA_property_enum_get(&cont_ptr, prop), &cont_name);
+               BLI_strncpy(cont->name, cont_name, sizeof(cont->name));
+       }
+       else
+               BLI_strncpy(cont->name, name, sizeof(cont->name));
+
        make_unique_prop_names(C, 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 */
@@ -411,6 +425,7 @@ void LOGIC_OT_controller_add(wmOperatorType *ot)
        
        /* properties */
        prop= RNA_def_enum(ot->srna, "type", controller_type_items, CONT_LOGIC_AND, "Type", "Type of controller to add");
+       prop= RNA_def_string(ot->srna, "name", "", 32, "Name", "Name of the Controller to add");
 }
 
 /* ************* Add/Remove Actuator Operator ************* */
@@ -468,6 +483,8 @@ static int actuator_add_exec(bContext *C, wmOperator *op)
        PointerRNA act_ptr;
        PropertyRNA *prop;
        const char *act_name;
+       char  name[32];
+       //XXX RNA_string_get is not using maxlen, it's using UserPreferencesFilePaths_python_scripts_directory_get instead (what limits the string copy to 160 chars in this case and CRASHES Blender).
        int type= RNA_enum_get(op->ptr, "type");
 
        act= new_actuator(type);
@@ -476,9 +493,15 @@ static int actuator_add_exec(bContext *C, wmOperator *op)
        /* set the actuator name based on rna type enum */
        RNA_pointer_create((ID *)ob, &RNA_Actuator, act, &act_ptr);
        prop = RNA_struct_find_property(&act_ptr, "type");
-       RNA_property_enum_name(C, &act_ptr, prop, RNA_property_enum_get(&act_ptr, prop), &act_name);
-       BLI_strncpy(act->name, act_name, sizeof(act->name));
-       
+
+       RNA_string_get(op->ptr, "name", name);
+       if (BLI_strnlen(name, 32) < 1){
+               RNA_property_enum_name(C, &act_ptr, prop, RNA_property_enum_get(&act_ptr, prop), &act_name);
+               BLI_strncpy(act->name, act_name, sizeof(act->name));
+       }
+       else
+               BLI_strncpy(act->name, name, sizeof(act->name));
+
        make_unique_prop_names(C, act->name);
        ob->scaflag |= OB_SHOWACT;
        
@@ -507,6 +530,7 @@ void LOGIC_OT_actuator_add(wmOperatorType *ot)
        /* properties */
        prop= RNA_def_enum(ot->srna, "type", DummyRNA_NULL_items, CONT_LOGIC_AND, "Type", "Type of actuator to add");
        RNA_def_enum_funcs(prop, rna_Actuator_type_itemf);
+       prop= RNA_def_string(ot->srna, "name", "", 32, "Name", "Name of the Actuator to add");
 }
 
 void ED_operatortypes_logic(void)
index 1390be14df8dd1709fcf71d261767ee4348a4370..f9310909f2c1b2d883787ce31eb5e8c022418ea8 100644 (file)
@@ -4402,7 +4402,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
                for(cont= ob->controllers.first; cont; cont=cont->next) {
                        RNA_pointer_create((ID *)ob, &RNA_Controller, cont, &ptr);
                        
-                       if (!(ob->state & cont->state_mask))
+                       if (!(ob->scaflag & OB_ALLSTATE) && !(ob->state & cont->state_mask))
                                continue;
                        //if (!(cont->state_mask & (1<<stbit))) 
                        //      continue;
@@ -4477,7 +4477,8 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
                for(sens= ob->sensors.first; sens; sens=sens->next) {
                        RNA_pointer_create((ID *)ob, &RNA_Sensor, sens, &ptr);
                        
-                       if ((slogic->scaflag & BUTS_SENS_STATE) ||
+                       if ((ob->scaflag & OB_ALLSTATE) ||
+                               (slogic->scaflag & BUTS_SENS_STATE) ||
                                (sens->totlinks == 0) ||                                                                                        /* always display sensor without links so that is can be edited */
                                (sens->flag & SENS_PIN && slogic->scaflag & BUTS_SENS_STATE) || /* states can hide some sensors, pinned sensors ignore the visible state */
                                (is_sensor_linked(block, sens))
@@ -4536,7 +4537,8 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
                        
                        RNA_pointer_create((ID *)ob, &RNA_Actuator, act, &ptr);
                        
-                       if ((slogic->scaflag & BUTS_ACT_STATE) ||
+                       if ((ob->scaflag & OB_ALLSTATE) ||
+                               (slogic->scaflag & BUTS_ACT_STATE) ||
                                !(act->flag & ACT_LINKED) ||            /* always display actuators without links so that is can be edited */
                                (act->flag & ACT_VISIBLE) ||            /* this actuator has visible connection, display it */
                                (act->flag & ACT_PIN && slogic->scaflag & BUTS_ACT_STATE)       /* states can hide some sensors, pinned sensors ignore the visible state */
index aa1396889e2e8c2d1cfa67cb813528ddf3eb2b93..7ba56d77801f24534d860f5d17ce1c6b1a886a7d 100644 (file)
@@ -2129,7 +2129,7 @@ static void rna_def_space_logic(BlenderRNA *brna)
        RNA_def_property_update(prop, NC_LOGIC, NULL);
 
        prop= RNA_def_property(srna, "sensors_show_active_states", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_SENS_STATE);
+       RNA_def_property_boolean_negative_sdna(prop, NULL, "scaflag", BUTS_SENS_STATE);
        RNA_def_property_ui_text(prop, "Show Active States", "Show only sensors connected to active states");
        RNA_def_property_update(prop, NC_LOGIC, NULL);
 
@@ -2148,12 +2148,6 @@ static void rna_def_space_logic(BlenderRNA *brna)
        RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_CONT_LINK);
        RNA_def_property_ui_text(prop, "Show Linked to Controller", "Show linked objects to sensor/actuator");
        RNA_def_property_update(prop, NC_LOGIC, NULL);
-       
-       prop= RNA_def_property(srna, "controllers_show_initial_state", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_CONT_INIT_STATE);
-       RNA_def_property_ui_text(prop, "Show Initial State", "Show the initial controller state for this object");
-       RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
-       RNA_def_property_update(prop, NC_LOGIC, NULL);
 
        /* actuators */
        prop= RNA_def_property(srna, "actuators_show_selected_objects", PROP_BOOLEAN, PROP_NONE);
@@ -2172,7 +2166,7 @@ static void rna_def_space_logic(BlenderRNA *brna)
        RNA_def_property_update(prop, NC_LOGIC, NULL);
 
        prop= RNA_def_property(srna, "actuators_show_active_states", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_ACT_STATE);
+       RNA_def_property_boolean_negative_sdna(prop, NULL, "scaflag", BUTS_ACT_STATE);
        RNA_def_property_ui_text(prop, "Show Active States", "Show only actuators connected to active states");
        RNA_def_property_update(prop, NC_LOGIC, NULL);