Changeset View
Changeset View
Standalone View
Standalone View
release/scripts/startup/bl_operators/wm.py
| Show First 20 Lines • Show All 1,046 Lines • ▼ Show 20 Lines | |||||
| ) | ) | ||||
| rna_value = StringProperty( | rna_value = StringProperty( | ||||
| name="Property Value", | name="Property Value", | ||||
| description="Property value edit", | description="Property value edit", | ||||
| maxlen=1024, | maxlen=1024, | ||||
| ) | ) | ||||
| rna_default = StringProperty( | |||||
| name="Default Value", | |||||
| description="Default value of the property. Important for NLA mixing", | |||||
| maxlen=1024, | |||||
| ) | |||||
| rna_property = StringProperty( | rna_property = StringProperty( | ||||
| name="Property Name", | name="Property Name", | ||||
| description="Property name edit", | description="Property name edit", | ||||
| maxlen=1024, | maxlen=1024, | ||||
| ) | ) | ||||
| rna_min = FloatProperty( | rna_min = FloatProperty( | ||||
| name="Min", | name="Min", | ||||
| Show All 21 Lines | class WM_OT_properties_edit(Operator): | ||||
| bl_idname = "wm.properties_edit" | bl_idname = "wm.properties_edit" | ||||
| bl_label = "Edit Property" | bl_label = "Edit Property" | ||||
| # register only because invoke_props_popup requires. | # register only because invoke_props_popup requires. | ||||
| bl_options = {'REGISTER', 'INTERNAL'} | bl_options = {'REGISTER', 'INTERNAL'} | ||||
| data_path: rna_path | data_path: rna_path | ||||
| property: rna_property | property: rna_property | ||||
| value: rna_value | value: rna_value | ||||
| default: rna_default | |||||
| min: rna_min | min: rna_min | ||||
| max: rna_max | max: rna_max | ||||
| use_soft_limits: rna_use_soft_limits | use_soft_limits: rna_use_soft_limits | ||||
| is_overridable_static: rna_is_overridable_static | is_overridable_static: rna_is_overridable_static | ||||
| soft_min: rna_min | soft_min: rna_min | ||||
| soft_max: rna_max | soft_max: rna_max | ||||
| description: StringProperty( | description: StringProperty( | ||||
| name="Tooltip", | name="Tooltip", | ||||
| ) | ) | ||||
| def _cmp_props_get(self): | def _cmp_props_get(self): | ||||
| # Changing these properties will refresh the UI | # Changing these properties will refresh the UI | ||||
| return { | return { | ||||
| "use_soft_limits": self.use_soft_limits, | "use_soft_limits": self.use_soft_limits, | ||||
| "soft_range": (self.soft_min, self.soft_max), | "soft_range": (self.soft_min, self.soft_max), | ||||
| "hard_range": (self.min, self.max), | "hard_range": (self.min, self.max), | ||||
| } | } | ||||
| def get_value_eval(self): | |||||
| try: | |||||
| value_eval = eval(self.value) | |||||
| # assert else None -> None, not "None", see [#33431] | |||||
| assert(type(value_eval) in {str, float, int, bool, tuple, list}) | |||||
| except: | |||||
| value_eval = self.value | |||||
| return value_eval | |||||
| def get_default_eval(self): | |||||
| try: | |||||
| default_eval = eval(self.default) | |||||
| # assert else None -> None, not "None", see [#33431] | |||||
| assert(type(default_eval) in {str, float, int, bool, tuple, list}) | |||||
| except: | |||||
| default_eval = self.default | |||||
| return default_eval | |||||
| def execute(self, context): | def execute(self, context): | ||||
| from rna_prop_ui import ( | from rna_prop_ui import ( | ||||
| rna_idprop_ui_prop_get, | rna_idprop_ui_prop_get, | ||||
| rna_idprop_ui_prop_clear, | rna_idprop_ui_prop_clear, | ||||
| rna_idprop_ui_prop_update, | rna_idprop_ui_prop_update, | ||||
| ) | ) | ||||
| data_path = self.data_path | data_path = self.data_path | ||||
| value = self.value | value = self.value | ||||
| prop = self.property | prop = self.property | ||||
| prop_old = getattr(self, "_last_prop", [None])[0] | prop_old = getattr(self, "_last_prop", [None])[0] | ||||
| if prop_old is None: | if prop_old is None: | ||||
| self.report({'ERROR'}, "Direct execution not supported") | self.report({'ERROR'}, "Direct execution not supported") | ||||
| return {'CANCELLED'} | return {'CANCELLED'} | ||||
| try: | value_eval = self.get_value_eval() | ||||
| value_eval = eval(value) | default_eval = self.get_default_eval() | ||||
| # assert else None -> None, not "None", see [#33431] | |||||
| assert(type(value_eval) in {str, float, int, bool, tuple, list}) | |||||
| except: | |||||
| value_eval = value | |||||
| # First remove | # First remove | ||||
| item = eval("context.%s" % data_path) | item = eval("context.%s" % data_path) | ||||
| prop_type_old = type(item[prop_old]) | prop_type_old = type(item[prop_old]) | ||||
| rna_idprop_ui_prop_clear(item, prop_old) | rna_idprop_ui_prop_clear(item, prop_old) | ||||
| exec_str = "del item[%r]" % prop_old | exec_str = "del item[%r]" % prop_old | ||||
| # print(exec_str) | # print(exec_str) | ||||
| Show All 13 Lines | def execute(self, context): | ||||
| prop_type = type(item[prop]) | prop_type = type(item[prop]) | ||||
| prop_ui = rna_idprop_ui_prop_get(item, prop) | prop_ui = rna_idprop_ui_prop_get(item, prop) | ||||
| if prop_type in {float, int}: | if prop_type in {float, int}: | ||||
| prop_ui["min"] = prop_type(self.min) | prop_ui["min"] = prop_type(self.min) | ||||
| prop_ui["max"] = prop_type(self.max) | prop_ui["max"] = prop_type(self.max) | ||||
| if type(default_eval) in {float, int} and default_eval != 0: | |||||
| prop_ui["default"] = prop_type(default_eval) | |||||
| if self.use_soft_limits: | if self.use_soft_limits: | ||||
| prop_ui["soft_min"] = prop_type(self.soft_min) | prop_ui["soft_min"] = prop_type(self.soft_min) | ||||
| prop_ui["soft_max"] = prop_type(self.soft_max) | prop_ui["soft_max"] = prop_type(self.soft_max) | ||||
| else: | else: | ||||
| prop_ui["soft_min"] = prop_type(self.min) | prop_ui["soft_min"] = prop_type(self.min) | ||||
| prop_ui["soft_max"] = prop_type(self.max) | prop_ui["soft_max"] = prop_type(self.max) | ||||
| ▲ Show 20 Lines • Show All 48 Lines • ▼ Show 20 Lines | def invoke(self, context, event): | ||||
| self._last_prop = [self.property] | self._last_prop = [self.property] | ||||
| item = eval("context.%s" % data_path) | item = eval("context.%s" % data_path) | ||||
| # retrieve overridable static | # retrieve overridable static | ||||
| exec_str = "item.is_property_overridable_static('[\"%s\"]')" % (self.property) | exec_str = "item.is_property_overridable_static('[\"%s\"]')" % (self.property) | ||||
| self.is_overridable_static = bool(eval(exec_str)) | self.is_overridable_static = bool(eval(exec_str)) | ||||
| # default default value | |||||
| prop_type = type(self.get_value_eval()) | |||||
| if prop_type in {int,float}: | |||||
| self.default = str(prop_type(0)) | |||||
| else: | |||||
| self.default = "" | |||||
| # setup defaults | # setup defaults | ||||
| prop_ui = rna_idprop_ui_prop_get(item, self.property, False) # don't create | prop_ui = rna_idprop_ui_prop_get(item, self.property, False) # don't create | ||||
| if prop_ui: | if prop_ui: | ||||
| self.min = prop_ui.get("min", -1000000000) | self.min = prop_ui.get("min", -1000000000) | ||||
| self.max = prop_ui.get("max", 1000000000) | self.max = prop_ui.get("max", 1000000000) | ||||
| self.description = prop_ui.get("description", "") | self.description = prop_ui.get("description", "") | ||||
| defval = prop_ui.get("default", None) | |||||
| if defval is not None: | |||||
| self.default = str(defval) | |||||
| self.soft_min = prop_ui.get("soft_min", self.min) | self.soft_min = prop_ui.get("soft_min", self.min) | ||||
| self.soft_max = prop_ui.get("soft_max", self.max) | self.soft_max = prop_ui.get("soft_max", self.max) | ||||
| self.use_soft_limits = ( | self.use_soft_limits = ( | ||||
| self.min != self.soft_min or | self.min != self.soft_min or | ||||
| self.max != self.soft_max | self.max != self.soft_max | ||||
| ) | ) | ||||
| # store for comparison | # store for comparison | ||||
| Show All 29 Lines | def check(self, context): | ||||
| self._cmp_props = cmp_props | self._cmp_props = cmp_props | ||||
| return changed | return changed | ||||
| def draw(self, context): | def draw(self, context): | ||||
| layout = self.layout | layout = self.layout | ||||
| layout.prop(self, "property") | layout.prop(self, "property") | ||||
| layout.prop(self, "value") | layout.prop(self, "value") | ||||
| row = layout.row() | |||||
| row.enabled = type(self.get_value_eval()) in {int,float} | |||||
| row.prop(self, "default") | |||||
| row = layout.row(align=True) | row = layout.row(align=True) | ||||
| row.prop(self, "min") | row.prop(self, "min") | ||||
| row.prop(self, "max") | row.prop(self, "max") | ||||
| row = layout.row() | row = layout.row() | ||||
| row.prop(self, "use_soft_limits") | row.prop(self, "use_soft_limits") | ||||
| row.prop(self, "is_overridable_static") | row.prop(self, "is_overridable_static") | ||||
| ▲ Show 20 Lines • Show All 1,543 Lines • Show Last 20 Lines | |||||