Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/interface/interface_ops.c')
-rw-r--r--source/blender/editors/interface/interface_ops.c2363
1 files changed, 1193 insertions, 1170 deletions
diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c
index e00ea2d16bd..537a1d4c851 100644
--- a/source/blender/editors/interface/interface_ops.c
+++ b/source/blender/editors/interface/interface_ops.c
@@ -27,7 +27,7 @@
#include "DNA_armature_types.h"
#include "DNA_screen_types.h"
-#include "DNA_text_types.h" /* for UI_OT_reports_to_text */
+#include "DNA_text_types.h" /* for UI_OT_reports_to_text */
#include "DNA_object_types.h" /* for OB_DATA_SUPPORT_ID */
#include "BLI_blenlib.h"
@@ -76,92 +76,92 @@
static bool copy_data_path_button_poll(bContext *C)
{
- PointerRNA ptr;
- PropertyRNA *prop;
- char *path;
- int index;
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ char *path;
+ int index;
- UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- if (ptr.id.data && ptr.data && prop) {
- path = RNA_path_from_ID_to_property(&ptr, prop);
+ if (ptr.id.data && ptr.data && prop) {
+ path = RNA_path_from_ID_to_property(&ptr, prop);
- if (path) {
- MEM_freeN(path);
- return 1;
- }
- }
+ if (path) {
+ MEM_freeN(path);
+ return 1;
+ }
+ }
- return 0;
+ return 0;
}
static int copy_data_path_button_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr;
- PropertyRNA *prop;
- char *path;
- int index;
-
- const bool full_path = RNA_boolean_get(op->ptr, "full_path");
-
- /* try to create driver using property retrieved from UI */
- UI_context_active_but_prop_get(C, &ptr, &prop, &index);
-
- if (ptr.id.data != NULL) {
-
- if (full_path) {
-
- if (prop) {
- path = RNA_path_full_property_py_ex(&ptr, prop, index, true);
- }
- else {
- path = RNA_path_full_struct_py(&ptr);
- }
- }
- else {
- path = RNA_path_from_ID_to_property(&ptr, prop);
- }
-
- if (path) {
- WM_clipboard_text_set(path, false);
- MEM_freeN(path);
- return OPERATOR_FINISHED;
- }
- }
-
- return OPERATOR_CANCELLED;
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ char *path;
+ int index;
+
+ const bool full_path = RNA_boolean_get(op->ptr, "full_path");
+
+ /* try to create driver using property retrieved from UI */
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+
+ if (ptr.id.data != NULL) {
+
+ if (full_path) {
+
+ if (prop) {
+ path = RNA_path_full_property_py_ex(&ptr, prop, index, true);
+ }
+ else {
+ path = RNA_path_full_struct_py(&ptr);
+ }
+ }
+ else {
+ path = RNA_path_from_ID_to_property(&ptr, prop);
+ }
+
+ if (path) {
+ WM_clipboard_text_set(path, false);
+ MEM_freeN(path);
+ return OPERATOR_FINISHED;
+ }
+ }
+
+ return OPERATOR_CANCELLED;
}
static void UI_OT_copy_data_path_button(wmOperatorType *ot)
{
- PropertyRNA *prop;
+ PropertyRNA *prop;
- /* identifiers */
- ot->name = "Copy Data Path";
- ot->idname = "UI_OT_copy_data_path_button";
- ot->description = "Copy the RNA data path for this property to the clipboard";
+ /* identifiers */
+ ot->name = "Copy Data Path";
+ ot->idname = "UI_OT_copy_data_path_button";
+ ot->description = "Copy the RNA data path for this property to the clipboard";
- /* callbacks */
- ot->exec = copy_data_path_button_exec;
- ot->poll = copy_data_path_button_poll;
+ /* callbacks */
+ ot->exec = copy_data_path_button_exec;
+ ot->poll = copy_data_path_button_poll;
- /* flags */
- ot->flag = OPTYPE_REGISTER;
+ /* flags */
+ ot->flag = OPTYPE_REGISTER;
- /* properties */
- prop = RNA_def_boolean(ot->srna, "full_path", false, "full_path", "Copy full data path");
- RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+ /* properties */
+ prop = RNA_def_boolean(ot->srna, "full_path", false, "full_path", "Copy full data path");
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
}
static bool copy_python_command_button_poll(bContext *C)
{
- uiBut *but = UI_context_active_but_get(C);
+ uiBut *but = UI_context_active_but_get(C);
- if (but && (but->optype != NULL)) {
- return 1;
- }
+ if (but && (but->optype != NULL)) {
+ return 1;
+ }
- return 0;
+ return 0;
}
/** \} */
@@ -172,38 +172,38 @@ static bool copy_python_command_button_poll(bContext *C)
static int copy_python_command_button_exec(bContext *C, wmOperator *UNUSED(op))
{
- uiBut *but = UI_context_active_but_get(C);
+ uiBut *but = UI_context_active_but_get(C);
- if (but && (but->optype != NULL)) {
- PointerRNA *opptr;
- char *str;
- opptr = UI_but_operator_ptr_get(but); /* allocated when needed, the button owns it */
+ if (but && (but->optype != NULL)) {
+ PointerRNA *opptr;
+ char *str;
+ opptr = UI_but_operator_ptr_get(but); /* allocated when needed, the button owns it */
- str = WM_operator_pystring_ex(C, NULL, false, true, but->optype, opptr);
+ str = WM_operator_pystring_ex(C, NULL, false, true, but->optype, opptr);
- WM_clipboard_text_set(str, 0);
+ WM_clipboard_text_set(str, 0);
- MEM_freeN(str);
+ MEM_freeN(str);
- return OPERATOR_FINISHED;
- }
+ return OPERATOR_FINISHED;
+ }
- return OPERATOR_CANCELLED;
+ return OPERATOR_CANCELLED;
}
static void UI_OT_copy_python_command_button(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Copy Python Command";
- ot->idname = "UI_OT_copy_python_command_button";
- ot->description = "Copy the Python command matching this button";
+ /* identifiers */
+ ot->name = "Copy Python Command";
+ ot->idname = "UI_OT_copy_python_command_button";
+ ot->description = "Copy the Python command matching this button";
- /* callbacks */
- ot->exec = copy_python_command_button_exec;
- ot->poll = copy_python_command_button_poll;
+ /* callbacks */
+ ot->exec = copy_python_command_button_exec;
+ ot->poll = copy_python_command_button_poll;
- /* flags */
- ot->flag = OPTYPE_REGISTER;
+ /* flags */
+ ot->flag = OPTYPE_REGISTER;
}
/** \} */
@@ -214,73 +214,73 @@ static void UI_OT_copy_python_command_button(wmOperatorType *ot)
static int operator_button_property_finish(bContext *C, PointerRNA *ptr, PropertyRNA *prop)
{
- ID *id = ptr->id.data;
-
- /* perform updates required for this property */
- RNA_property_update(C, ptr, prop);
-
- /* as if we pressed the button */
- UI_context_active_but_prop_handle(C);
-
- /* Since we don't want to undo _all_ edits to settings, eg window
- * edits on the screen or on operator settings.
- * it might be better to move undo's inline - campbell */
- if (id && ID_CHECK_UNDO(id)) {
- /* do nothing, go ahead with undo */
- return OPERATOR_FINISHED;
- }
- else {
- return OPERATOR_CANCELLED;
- }
+ ID *id = ptr->id.data;
+
+ /* perform updates required for this property */
+ RNA_property_update(C, ptr, prop);
+
+ /* as if we pressed the button */
+ UI_context_active_but_prop_handle(C);
+
+ /* Since we don't want to undo _all_ edits to settings, eg window
+ * edits on the screen or on operator settings.
+ * it might be better to move undo's inline - campbell */
+ if (id && ID_CHECK_UNDO(id)) {
+ /* do nothing, go ahead with undo */
+ return OPERATOR_FINISHED;
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
}
static bool reset_default_button_poll(bContext *C)
{
- PointerRNA ptr;
- PropertyRNA *prop;
- int index;
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ int index;
- UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- return (ptr.data && prop && RNA_property_editable(&ptr, prop));
+ return (ptr.data && prop && RNA_property_editable(&ptr, prop));
}
static int reset_default_button_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr;
- PropertyRNA *prop;
- int index;
- const bool all = RNA_boolean_get(op->ptr, "all");
-
- /* try to reset the nominated setting to its default value */
- UI_context_active_but_prop_get(C, &ptr, &prop, &index);
-
- /* if there is a valid property that is editable... */
- if (ptr.data && prop && RNA_property_editable(&ptr, prop)) {
- if (RNA_property_reset(&ptr, prop, (all) ? -1 : index)) {
- return operator_button_property_finish(C, &ptr, prop);
- }
- }
-
- return OPERATOR_CANCELLED;
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ int index;
+ const bool all = RNA_boolean_get(op->ptr, "all");
+
+ /* try to reset the nominated setting to its default value */
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+
+ /* if there is a valid property that is editable... */
+ if (ptr.data && prop && RNA_property_editable(&ptr, prop)) {
+ if (RNA_property_reset(&ptr, prop, (all) ? -1 : index)) {
+ return operator_button_property_finish(C, &ptr, prop);
+ }
+ }
+
+ return OPERATOR_CANCELLED;
}
static void UI_OT_reset_default_button(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Reset to Default Value";
- ot->idname = "UI_OT_reset_default_button";
- ot->description = "Reset this property's value to its default value";
+ /* identifiers */
+ ot->name = "Reset to Default Value";
+ ot->idname = "UI_OT_reset_default_button";
+ ot->description = "Reset this property's value to its default value";
- /* callbacks */
- ot->poll = reset_default_button_poll;
- ot->exec = reset_default_button_exec;
+ /* callbacks */
+ ot->poll = reset_default_button_poll;
+ ot->exec = reset_default_button_exec;
- /* flags */
- ot->flag = OPTYPE_UNDO;
+ /* flags */
+ ot->flag = OPTYPE_UNDO;
- /* properties */
- RNA_def_boolean(ot->srna, "all", 1, "All", "Reset to default values all elements of the array");
+ /* properties */
+ RNA_def_boolean(ot->srna, "all", 1, "All", "Reset to default values all elements of the array");
}
/** \} */
@@ -291,53 +291,54 @@ static void UI_OT_reset_default_button(wmOperatorType *ot)
static bool assign_default_button_poll(bContext *C)
{
- PointerRNA ptr;
- PropertyRNA *prop;
- int index;
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ int index;
- UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- if (ptr.data && prop && RNA_property_editable(&ptr, prop)) {
- PropertyType type = RNA_property_type(prop);
+ if (ptr.data && prop && RNA_property_editable(&ptr, prop)) {
+ PropertyType type = RNA_property_type(prop);
- return RNA_property_is_idprop(prop) && !RNA_property_array_check(prop) && ELEM(type, PROP_INT, PROP_FLOAT);
- }
+ return RNA_property_is_idprop(prop) && !RNA_property_array_check(prop) &&
+ ELEM(type, PROP_INT, PROP_FLOAT);
+ }
- return false;
+ return false;
}
static int assign_default_button_exec(bContext *C, wmOperator *UNUSED(op))
{
- PointerRNA ptr;
- PropertyRNA *prop;
- int index;
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ int index;
- /* try to reset the nominated setting to its default value */
- UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+ /* try to reset the nominated setting to its default value */
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- /* if there is a valid property that is editable... */
- if (ptr.data && prop && RNA_property_editable(&ptr, prop)) {
- if (RNA_property_assign_default(&ptr, prop)) {
- return operator_button_property_finish(C, &ptr, prop);
- }
- }
+ /* if there is a valid property that is editable... */
+ if (ptr.data && prop && RNA_property_editable(&ptr, prop)) {
+ if (RNA_property_assign_default(&ptr, prop)) {
+ return operator_button_property_finish(C, &ptr, prop);
+ }
+ }
- return OPERATOR_CANCELLED;
+ return OPERATOR_CANCELLED;
}
static void UI_OT_assign_default_button(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Assign Value as Default";
- ot->idname = "UI_OT_assign_default_button";
- ot->description = "Set this property's current value as the new default";
+ /* identifiers */
+ ot->name = "Assign Value as Default";
+ ot->idname = "UI_OT_assign_default_button";
+ ot->description = "Set this property's current value as the new default";
- /* callbacks */
- ot->poll = assign_default_button_poll;
- ot->exec = assign_default_button_exec;
+ /* callbacks */
+ ot->poll = assign_default_button_poll;
+ ot->exec = assign_default_button_exec;
- /* flags */
- ot->flag = OPTYPE_UNDO;
+ /* flags */
+ ot->flag = OPTYPE_UNDO;
}
/** \} */
@@ -348,38 +349,37 @@ static void UI_OT_assign_default_button(wmOperatorType *ot)
static int unset_property_button_exec(bContext *C, wmOperator *UNUSED(op))
{
- PointerRNA ptr;
- PropertyRNA *prop;
- int index;
-
- /* try to unset the nominated property */
- UI_context_active_but_prop_get(C, &ptr, &prop, &index);
-
- /* if there is a valid property that is editable... */
- if (ptr.data && prop && RNA_property_editable(&ptr, prop) &&
- /* RNA_property_is_idprop(prop) && */
- RNA_property_is_set(&ptr, prop))
- {
- RNA_property_unset(&ptr, prop);
- return operator_button_property_finish(C, &ptr, prop);
- }
-
- return OPERATOR_CANCELLED;
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ int index;
+
+ /* try to unset the nominated property */
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+
+ /* if there is a valid property that is editable... */
+ if (ptr.data && prop && RNA_property_editable(&ptr, prop) &&
+ /* RNA_property_is_idprop(prop) && */
+ RNA_property_is_set(&ptr, prop)) {
+ RNA_property_unset(&ptr, prop);
+ return operator_button_property_finish(C, &ptr, prop);
+ }
+
+ return OPERATOR_CANCELLED;
}
static void UI_OT_unset_property_button(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Unset property";
- ot->idname = "UI_OT_unset_property_button";
- ot->description = "Clear the property and use default or generated value in operators";
+ /* identifiers */
+ ot->name = "Unset property";
+ ot->idname = "UI_OT_unset_property_button";
+ ot->description = "Clear the property and use default or generated value in operators";
- /* callbacks */
- ot->poll = ED_operator_regionactive;
- ot->exec = unset_property_button_exec;
+ /* callbacks */
+ ot->poll = ED_operator_regionactive;
+ ot->exec = unset_property_button_exec;
- /* flags */
- ot->flag = OPTYPE_UNDO;
+ /* flags */
+ ot->flag = OPTYPE_UNDO;
}
/** \} */
@@ -391,211 +391,230 @@ static void UI_OT_unset_property_button(wmOperatorType *ot)
/* Note that we use different values for UI/UX than 'real' override operations, user does not care
* whether it's added or removed for the differential operation e.g. */
enum {
- UIOverride_Type_NOOP = 0,
- UIOverride_Type_Replace = 1,
- UIOverride_Type_Difference = 2, /* Add/subtract */
- UIOverride_Type_Factor = 3, /* Multiply */
- /* TODO: should/can we expose insert/remove ones for collections? Doubt it... */
+ UIOverride_Type_NOOP = 0,
+ UIOverride_Type_Replace = 1,
+ UIOverride_Type_Difference = 2, /* Add/subtract */
+ UIOverride_Type_Factor = 3, /* Multiply */
+ /* TODO: should/can we expose insert/remove ones for collections? Doubt it... */
};
static EnumPropertyItem override_type_items[] = {
- {UIOverride_Type_NOOP, "NOOP", 0, "NoOp",
- "'No-Operation', place holder preventing automatic override to ever affect the property"},
- {UIOverride_Type_Replace, "REPLACE", 0, "Replace", "Completely replace value from linked data by local one"},
- {UIOverride_Type_Difference, "DIFFERENCE", 0, "Difference", "Store difference to linked data value"},
- {UIOverride_Type_Factor, "FACTOR", 0, "Factor", "Store factor to linked data value (useful e.g. for scale)"},
- {0, NULL, 0, NULL, NULL},
+ {UIOverride_Type_NOOP,
+ "NOOP",
+ 0,
+ "NoOp",
+ "'No-Operation', place holder preventing automatic override to ever affect the property"},
+ {UIOverride_Type_Replace,
+ "REPLACE",
+ 0,
+ "Replace",
+ "Completely replace value from linked data by local one"},
+ {UIOverride_Type_Difference,
+ "DIFFERENCE",
+ 0,
+ "Difference",
+ "Store difference to linked data value"},
+ {UIOverride_Type_Factor,
+ "FACTOR",
+ 0,
+ "Factor",
+ "Store factor to linked data value (useful e.g. for scale)"},
+ {0, NULL, 0, NULL, NULL},
};
-
static bool override_type_set_button_poll(bContext *C)
{
- PointerRNA ptr;
- PropertyRNA *prop;
- int index;
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ int index;
- UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- const int override_status = RNA_property_static_override_status(&ptr, prop, index);
+ const int override_status = RNA_property_static_override_status(&ptr, prop, index);
- return (ptr.data && prop && (override_status & RNA_OVERRIDE_STATUS_OVERRIDABLE));
+ return (ptr.data && prop && (override_status & RNA_OVERRIDE_STATUS_OVERRIDABLE));
}
static int override_type_set_button_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr;
- PropertyRNA *prop;
- int index;
- bool created;
- const bool all = RNA_boolean_get(op->ptr, "all");
- const int op_type = RNA_enum_get(op->ptr, "type");
-
- short operation;
-
- switch (op_type) {
- case UIOverride_Type_NOOP:
- operation = IDOVERRIDESTATIC_OP_NOOP;
- break;
- case UIOverride_Type_Replace:
- operation = IDOVERRIDESTATIC_OP_REPLACE;
- break;
- case UIOverride_Type_Difference:
- /* override code will automatically switch to subtract if needed. */
- operation = IDOVERRIDESTATIC_OP_ADD;
- break;
- case UIOverride_Type_Factor:
- operation = IDOVERRIDESTATIC_OP_MULTIPLY;
- break;
- default:
- operation = IDOVERRIDESTATIC_OP_REPLACE;
- BLI_assert(0);
- break;
- }
-
- /* try to reset the nominated setting to its default value */
- UI_context_active_but_prop_get(C, &ptr, &prop, &index);
-
- BLI_assert(ptr.id.data != NULL);
-
- if (all) {
- index = -1;
- }
-
- IDOverrideStaticPropertyOperation *opop = RNA_property_override_property_operation_get(
- &ptr, prop, operation, index, true, NULL, &created);
- if (!created) {
- opop->operation = operation;
- }
-
- return operator_button_property_finish(C, &ptr, prop);
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ int index;
+ bool created;
+ const bool all = RNA_boolean_get(op->ptr, "all");
+ const int op_type = RNA_enum_get(op->ptr, "type");
+
+ short operation;
+
+ switch (op_type) {
+ case UIOverride_Type_NOOP:
+ operation = IDOVERRIDESTATIC_OP_NOOP;
+ break;
+ case UIOverride_Type_Replace:
+ operation = IDOVERRIDESTATIC_OP_REPLACE;
+ break;
+ case UIOverride_Type_Difference:
+ /* override code will automatically switch to subtract if needed. */
+ operation = IDOVERRIDESTATIC_OP_ADD;
+ break;
+ case UIOverride_Type_Factor:
+ operation = IDOVERRIDESTATIC_OP_MULTIPLY;
+ break;
+ default:
+ operation = IDOVERRIDESTATIC_OP_REPLACE;
+ BLI_assert(0);
+ break;
+ }
+
+ /* try to reset the nominated setting to its default value */
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+
+ BLI_assert(ptr.id.data != NULL);
+
+ if (all) {
+ index = -1;
+ }
+
+ IDOverrideStaticPropertyOperation *opop = RNA_property_override_property_operation_get(
+ &ptr, prop, operation, index, true, NULL, &created);
+ if (!created) {
+ opop->operation = operation;
+ }
+
+ return operator_button_property_finish(C, &ptr, prop);
}
-static int override_type_set_button_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+static int override_type_set_button_invoke(bContext *C,
+ wmOperator *op,
+ const wmEvent *UNUSED(event))
{
-#if 0 /* Disabled for now */
- return WM_menu_invoke_ex(C, op, WM_OP_INVOKE_DEFAULT);
+#if 0 /* Disabled for now */
+ return WM_menu_invoke_ex(C, op, WM_OP_INVOKE_DEFAULT);
#else
- RNA_enum_set(op->ptr, "type", IDOVERRIDESTATIC_OP_REPLACE);
- return override_type_set_button_exec(C, op);
+ RNA_enum_set(op->ptr, "type", IDOVERRIDESTATIC_OP_REPLACE);
+ return override_type_set_button_exec(C, op);
#endif
}
static void UI_OT_override_type_set_button(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Define Override Type";
- ot->idname = "UI_OT_override_type_set_button";
- ot->description = "Create an override operation, or set the type of an existing one";
-
- /* callbacks */
- ot->poll = override_type_set_button_poll;
- ot->exec = override_type_set_button_exec;
- ot->invoke = override_type_set_button_invoke;
-
- /* flags */
- ot->flag = OPTYPE_UNDO;
-
- /* properties */
- RNA_def_boolean(ot->srna, "all", 1, "All", "Reset to default values all elements of the array");
- ot->prop = RNA_def_enum(
- ot->srna, "type", override_type_items, UIOverride_Type_Replace,
- "Type", "Type of override operation");
- /* TODO: add itemf callback, not all options are available for all data types... */
+ /* identifiers */
+ ot->name = "Define Override Type";
+ ot->idname = "UI_OT_override_type_set_button";
+ ot->description = "Create an override operation, or set the type of an existing one";
+
+ /* callbacks */
+ ot->poll = override_type_set_button_poll;
+ ot->exec = override_type_set_button_exec;
+ ot->invoke = override_type_set_button_invoke;
+
+ /* flags */
+ ot->flag = OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_boolean(ot->srna, "all", 1, "All", "Reset to default values all elements of the array");
+ ot->prop = RNA_def_enum(ot->srna,
+ "type",
+ override_type_items,
+ UIOverride_Type_Replace,
+ "Type",
+ "Type of override operation");
+ /* TODO: add itemf callback, not all options are available for all data types... */
}
-
static bool override_remove_button_poll(bContext *C)
{
- PointerRNA ptr;
- PropertyRNA *prop;
- int index;
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ int index;
- UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- const int override_status = RNA_property_static_override_status(&ptr, prop, index);
+ const int override_status = RNA_property_static_override_status(&ptr, prop, index);
- return (ptr.data && ptr.id.data && prop && (override_status & RNA_OVERRIDE_STATUS_OVERRIDDEN));
+ return (ptr.data && ptr.id.data && prop && (override_status & RNA_OVERRIDE_STATUS_OVERRIDDEN));
}
static int override_remove_button_exec(bContext *C, wmOperator *op)
{
- Main *bmain = CTX_data_main(C);
- PointerRNA ptr, id_refptr, src;
- PropertyRNA *prop;
- int index;
- const bool all = RNA_boolean_get(op->ptr, "all");
-
- /* try to reset the nominated setting to its default value */
- UI_context_active_but_prop_get(C, &ptr, &prop, &index);
-
- ID *id = ptr.id.data;
- IDOverrideStaticProperty *oprop = RNA_property_override_property_find(&ptr, prop);
- BLI_assert(oprop != NULL);
- BLI_assert(id != NULL && id->override_static != NULL);
-
- const bool is_template = (id->override_static->reference == NULL);
-
- /* We need source (i.e. linked data) to restore values of deleted overrides...
- * If this is an override template, we obviously do not need to restore anything. */
- if (!is_template) {
- RNA_id_pointer_create(id->override_static->reference, &id_refptr);
- if (!RNA_path_resolve(&id_refptr, oprop->rna_path, &src, NULL)) {
- BLI_assert(0 && "Failed to create matching source (linked data) RNA pointer");
- }
- }
-
- if (!all && index != -1) {
- bool is_strict_find;
- /* Remove override operation for given item,
- * add singular operations for the other items as needed. */
- IDOverrideStaticPropertyOperation *opop = BKE_override_static_property_operation_find(
- oprop, NULL, NULL, index, index, false, &is_strict_find);
- BLI_assert(opop != NULL);
- if (!is_strict_find) {
- /* No specific override operation, we have to get generic one,
- * and create item-specific override operations for all but given index,
- * before removing generic one. */
- for (int idx = RNA_property_array_length(&ptr, prop); idx--; ) {
- if (idx != index) {
- BKE_override_static_property_operation_get(oprop, opop->operation, NULL, NULL, idx, idx, true, NULL, NULL);
- }
- }
- }
- BKE_override_static_property_operation_delete(oprop, opop);
- if (!is_template) {
- RNA_property_copy(bmain, &ptr, &src, prop, index);
- }
- if (BLI_listbase_is_empty(&oprop->operations)) {
- BKE_override_static_property_delete(id->override_static, oprop);
- }
- }
- else {
- /* Just remove whole generic override operation of this property. */
- BKE_override_static_property_delete(id->override_static, oprop);
- if (!is_template) {
- RNA_property_copy(bmain, &ptr, &src, prop, -1);
- }
- }
-
- return operator_button_property_finish(C, &ptr, prop);
+ Main *bmain = CTX_data_main(C);
+ PointerRNA ptr, id_refptr, src;
+ PropertyRNA *prop;
+ int index;
+ const bool all = RNA_boolean_get(op->ptr, "all");
+
+ /* try to reset the nominated setting to its default value */
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+
+ ID *id = ptr.id.data;
+ IDOverrideStaticProperty *oprop = RNA_property_override_property_find(&ptr, prop);
+ BLI_assert(oprop != NULL);
+ BLI_assert(id != NULL && id->override_static != NULL);
+
+ const bool is_template = (id->override_static->reference == NULL);
+
+ /* We need source (i.e. linked data) to restore values of deleted overrides...
+ * If this is an override template, we obviously do not need to restore anything. */
+ if (!is_template) {
+ RNA_id_pointer_create(id->override_static->reference, &id_refptr);
+ if (!RNA_path_resolve(&id_refptr, oprop->rna_path, &src, NULL)) {
+ BLI_assert(0 && "Failed to create matching source (linked data) RNA pointer");
+ }
+ }
+
+ if (!all && index != -1) {
+ bool is_strict_find;
+ /* Remove override operation for given item,
+ * add singular operations for the other items as needed. */
+ IDOverrideStaticPropertyOperation *opop = BKE_override_static_property_operation_find(
+ oprop, NULL, NULL, index, index, false, &is_strict_find);
+ BLI_assert(opop != NULL);
+ if (!is_strict_find) {
+ /* No specific override operation, we have to get generic one,
+ * and create item-specific override operations for all but given index,
+ * before removing generic one. */
+ for (int idx = RNA_property_array_length(&ptr, prop); idx--;) {
+ if (idx != index) {
+ BKE_override_static_property_operation_get(
+ oprop, opop->operation, NULL, NULL, idx, idx, true, NULL, NULL);
+ }
+ }
+ }
+ BKE_override_static_property_operation_delete(oprop, opop);
+ if (!is_template) {
+ RNA_property_copy(bmain, &ptr, &src, prop, index);
+ }
+ if (BLI_listbase_is_empty(&oprop->operations)) {
+ BKE_override_static_property_delete(id->override_static, oprop);
+ }
+ }
+ else {
+ /* Just remove whole generic override operation of this property. */
+ BKE_override_static_property_delete(id->override_static, oprop);
+ if (!is_template) {
+ RNA_property_copy(bmain, &ptr, &src, prop, -1);
+ }
+ }
+
+ return operator_button_property_finish(C, &ptr, prop);
}
static void UI_OT_override_remove_button(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Remove Override";
- ot->idname = "UI_OT_override_remove_button";
- ot->description = "Remove an override operation";
+ /* identifiers */
+ ot->name = "Remove Override";
+ ot->idname = "UI_OT_override_remove_button";
+ ot->description = "Remove an override operation";
- /* callbacks */
- ot->poll = override_remove_button_poll;
- ot->exec = override_remove_button_exec;
+ /* callbacks */
+ ot->poll = override_remove_button_poll;
+ ot->exec = override_remove_button_exec;
- /* flags */
- ot->flag = OPTYPE_UNDO;
+ /* flags */
+ ot->flag = OPTYPE_UNDO;
- /* properties */
- RNA_def_boolean(ot->srna, "all", 1, "All", "Reset to default values all elements of the array");
+ /* properties */
+ RNA_def_boolean(ot->srna, "all", 1, "All", "Reset to default values all elements of the array");
}
/** \} */
@@ -604,150 +623,148 @@ static void UI_OT_override_remove_button(wmOperatorType *ot)
/** \name Copy To Selected Operator
* \{ */
-bool UI_context_copy_to_selected_list(
- bContext *C, PointerRNA *ptr, PropertyRNA *prop,
- ListBase *r_lb, bool *r_use_path_from_id, char **r_path)
+bool UI_context_copy_to_selected_list(bContext *C,
+ PointerRNA *ptr,
+ PropertyRNA *prop,
+ ListBase *r_lb,
+ bool *r_use_path_from_id,
+ char **r_path)
{
- *r_use_path_from_id = false;
- *r_path = NULL;
-
- if (RNA_struct_is_a(ptr->type, &RNA_EditBone)) {
- *r_lb = CTX_data_collection_get(C, "selected_editable_bones");
- }
- else if (RNA_struct_is_a(ptr->type, &RNA_PoseBone)) {
- *r_lb = CTX_data_collection_get(C, "selected_pose_bones");
- }
- else if (RNA_struct_is_a(ptr->type, &RNA_Bone)) {
- ListBase lb;
- lb = CTX_data_collection_get(C, "selected_pose_bones");
-
- if (!BLI_listbase_is_empty(&lb)) {
- CollectionPointerLink *link;
- for (link = lb.first; link; link = link->next) {
- bPoseChannel *pchan = link->ptr.data;
- RNA_pointer_create(link->ptr.id.data, &RNA_Bone, pchan->bone, &link->ptr);
- }
- }
-
- *r_lb = lb;
- }
- else if (RNA_struct_is_a(ptr->type, &RNA_Sequence)) {
- *r_lb = CTX_data_collection_get(C, "selected_editable_sequences");
- }
- else if (RNA_struct_is_a(ptr->type, &RNA_FCurve)) {
- *r_lb = CTX_data_collection_get(C, "selected_editable_fcurves");
- }
- else if (RNA_struct_is_a(ptr->type, &RNA_Node) ||
- RNA_struct_is_a(ptr->type, &RNA_NodeSocket))
- {
- ListBase lb = {NULL, NULL};
- char *path = NULL;
- bNode *node = NULL;
-
- /* Get the node we're editing */
- if (RNA_struct_is_a(ptr->type, &RNA_NodeSocket)) {
- bNodeTree *ntree = ptr->id.data;
- bNodeSocket *sock = ptr->data;
- if (nodeFindNode(ntree, sock, &node, NULL)) {
- if ((path = RNA_path_resolve_from_type_to_property(ptr, prop, &RNA_Node)) != NULL) {
- /* we're good! */
- }
- else {
- node = NULL;
- }
- }
- }
- else {
- node = ptr->data;
- }
-
- /* Now filter by type */
- if (node) {
- CollectionPointerLink *link, *link_next;
- lb = CTX_data_collection_get(C, "selected_nodes");
-
- for (link = lb.first; link; link = link_next) {
- bNode *node_data = link->ptr.data;
- link_next = link->next;
-
- if (node_data->type != node->type) {
- BLI_remlink(&lb, link);
- MEM_freeN(link);
- }
- }
- }
-
- *r_lb = lb;
- *r_path = path;
- }
- else if (ptr->id.data) {
- ID *id = ptr->id.data;
-
- if (GS(id->name) == ID_OB) {
- *r_lb = CTX_data_collection_get(C, "selected_editable_objects");
- *r_use_path_from_id = true;
- *r_path = RNA_path_from_ID_to_property(ptr, prop);
- }
- else if (OB_DATA_SUPPORT_ID(GS(id->name))) {
- /* check we're using the active object */
- const short id_code = GS(id->name);
- ListBase lb = CTX_data_collection_get(C, "selected_editable_objects");
- char *path = RNA_path_from_ID_to_property(ptr, prop);
-
- /* de-duplicate obdata */
- if (!BLI_listbase_is_empty(&lb)) {
- CollectionPointerLink *link, *link_next;
-
- for (link = lb.first; link; link = link->next) {
- Object *ob = link->ptr.id.data;
- if (ob->data) {
- ID *id_data = ob->data;
- id_data->tag |= LIB_TAG_DOIT;
- }
- }
-
- for (link = lb.first; link; link = link_next) {
- Object *ob = link->ptr.id.data;
- ID *id_data = ob->data;
- link_next = link->next;
-
- if ((id_data == NULL) ||
- (id_data->tag & LIB_TAG_DOIT) == 0 ||
- ID_IS_LINKED(id_data) ||
- (GS(id_data->name) != id_code))
- {
- BLI_remlink(&lb, link);
- MEM_freeN(link);
- }
- else {
- /* avoid prepending 'data' to the path */
- RNA_id_pointer_create(id_data, &link->ptr);
- }
-
- if (id_data) {
- id_data->tag &= ~LIB_TAG_DOIT;
- }
- }
- }
-
- *r_lb = lb;
- *r_path = path;
- }
- else if (GS(id->name) == ID_SCE) {
- /* Sequencer's ID is scene :/ */
- /* Try to recursively find an RNA_Sequence ancestor,
- * to handle situations like T41062... */
- if ((*r_path = RNA_path_resolve_from_type_to_property(ptr, prop, &RNA_Sequence)) != NULL) {
- *r_lb = CTX_data_collection_get(C, "selected_editable_sequences");
- }
- }
- return (*r_path != NULL);
- }
- else {
- return false;
- }
-
- return true;
+ *r_use_path_from_id = false;
+ *r_path = NULL;
+
+ if (RNA_struct_is_a(ptr->type, &RNA_EditBone)) {
+ *r_lb = CTX_data_collection_get(C, "selected_editable_bones");
+ }
+ else if (RNA_struct_is_a(ptr->type, &RNA_PoseBone)) {
+ *r_lb = CTX_data_collection_get(C, "selected_pose_bones");
+ }
+ else if (RNA_struct_is_a(ptr->type, &RNA_Bone)) {
+ ListBase lb;
+ lb = CTX_data_collection_get(C, "selected_pose_bones");
+
+ if (!BLI_listbase_is_empty(&lb)) {
+ CollectionPointerLink *link;
+ for (link = lb.first; link; link = link->next) {
+ bPoseChannel *pchan = link->ptr.data;
+ RNA_pointer_create(link->ptr.id.data, &RNA_Bone, pchan->bone, &link->ptr);
+ }
+ }
+
+ *r_lb = lb;
+ }
+ else if (RNA_struct_is_a(ptr->type, &RNA_Sequence)) {
+ *r_lb = CTX_data_collection_get(C, "selected_editable_sequences");
+ }
+ else if (RNA_struct_is_a(ptr->type, &RNA_FCurve)) {
+ *r_lb = CTX_data_collection_get(C, "selected_editable_fcurves");
+ }
+ else if (RNA_struct_is_a(ptr->type, &RNA_Node) || RNA_struct_is_a(ptr->type, &RNA_NodeSocket)) {
+ ListBase lb = {NULL, NULL};
+ char *path = NULL;
+ bNode *node = NULL;
+
+ /* Get the node we're editing */
+ if (RNA_struct_is_a(ptr->type, &RNA_NodeSocket)) {
+ bNodeTree *ntree = ptr->id.data;
+ bNodeSocket *sock = ptr->data;
+ if (nodeFindNode(ntree, sock, &node, NULL)) {
+ if ((path = RNA_path_resolve_from_type_to_property(ptr, prop, &RNA_Node)) != NULL) {
+ /* we're good! */
+ }
+ else {
+ node = NULL;
+ }
+ }
+ }
+ else {
+ node = ptr->data;
+ }
+
+ /* Now filter by type */
+ if (node) {
+ CollectionPointerLink *link, *link_next;
+ lb = CTX_data_collection_get(C, "selected_nodes");
+
+ for (link = lb.first; link; link = link_next) {
+ bNode *node_data = link->ptr.data;
+ link_next = link->next;
+
+ if (node_data->type != node->type) {
+ BLI_remlink(&lb, link);
+ MEM_freeN(link);
+ }
+ }
+ }
+
+ *r_lb = lb;
+ *r_path = path;
+ }
+ else if (ptr->id.data) {
+ ID *id = ptr->id.data;
+
+ if (GS(id->name) == ID_OB) {
+ *r_lb = CTX_data_collection_get(C, "selected_editable_objects");
+ *r_use_path_from_id = true;
+ *r_path = RNA_path_from_ID_to_property(ptr, prop);
+ }
+ else if (OB_DATA_SUPPORT_ID(GS(id->name))) {
+ /* check we're using the active object */
+ const short id_code = GS(id->name);
+ ListBase lb = CTX_data_collection_get(C, "selected_editable_objects");
+ char *path = RNA_path_from_ID_to_property(ptr, prop);
+
+ /* de-duplicate obdata */
+ if (!BLI_listbase_is_empty(&lb)) {
+ CollectionPointerLink *link, *link_next;
+
+ for (link = lb.first; link; link = link->next) {
+ Object *ob = link->ptr.id.data;
+ if (ob->data) {
+ ID *id_data = ob->data;
+ id_data->tag |= LIB_TAG_DOIT;
+ }
+ }
+
+ for (link = lb.first; link; link = link_next) {
+ Object *ob = link->ptr.id.data;
+ ID *id_data = ob->data;
+ link_next = link->next;
+
+ if ((id_data == NULL) || (id_data->tag & LIB_TAG_DOIT) == 0 || ID_IS_LINKED(id_data) ||
+ (GS(id_data->name) != id_code)) {
+ BLI_remlink(&lb, link);
+ MEM_freeN(link);
+ }
+ else {
+ /* avoid prepending 'data' to the path */
+ RNA_id_pointer_create(id_data, &link->ptr);
+ }
+
+ if (id_data) {
+ id_data->tag &= ~LIB_TAG_DOIT;
+ }
+ }
+ }
+
+ *r_lb = lb;
+ *r_path = path;
+ }
+ else if (GS(id->name) == ID_SCE) {
+ /* Sequencer's ID is scene :/ */
+ /* Try to recursively find an RNA_Sequence ancestor,
+ * to handle situations like T41062... */
+ if ((*r_path = RNA_path_resolve_from_type_to_property(ptr, prop, &RNA_Sequence)) != NULL) {
+ *r_lb = CTX_data_collection_get(C, "selected_editable_sequences");
+ }
+ }
+ return (*r_path != NULL);
+ }
+ else {
+ return false;
+ }
+
+ return true;
}
/**
@@ -759,104 +776,103 @@ bool UI_context_copy_to_selected_list(
*/
static bool copy_to_selected_button(bContext *C, bool all, bool poll)
{
- Main *bmain = CTX_data_main(C);
- PointerRNA ptr, lptr, idptr;
- PropertyRNA *prop, *lprop;
- bool success = false;
- int index;
-
- /* try to reset the nominated setting to its default value */
- UI_context_active_but_prop_get(C, &ptr, &prop, &index);
-
- /* if there is a valid property that is editable... */
- if (ptr.data && prop) {
- char *path = NULL;
- bool use_path_from_id;
- CollectionPointerLink *link;
- ListBase lb = {NULL};
-
- if (UI_context_copy_to_selected_list(C, &ptr, prop, &lb, &use_path_from_id, &path) &&
- !BLI_listbase_is_empty(&lb))
- {
- for (link = lb.first; link; link = link->next) {
- if (link->ptr.data != ptr.data) {
- if (use_path_from_id) {
- /* Path relative to ID. */
- lprop = NULL;
- RNA_id_pointer_create(link->ptr.id.data, &idptr);
- RNA_path_resolve_property(&idptr, path, &lptr, &lprop);
- }
- else if (path) {
- /* Path relative to elements from list. */
- lprop = NULL;
- RNA_path_resolve_property(&link->ptr, path, &lptr, &lprop);
- }
- else {
- lptr = link->ptr;
- lprop = prop;
- }
-
- if (lptr.data == ptr.data) {
- /* lptr might not be the same as link->ptr! */
- continue;
- }
-
- if (lprop == prop) {
- if (RNA_property_editable(&lptr, lprop)) {
- if (poll) {
- success = true;
- break;
- }
- else {
- if (RNA_property_copy(bmain, &lptr, &ptr, prop, (all) ? -1 : index)) {
- RNA_property_update(C, &lptr, prop);
- success = true;
- }
- }
- }
- }
- }
- }
- }
- MEM_SAFE_FREE(path);
- BLI_freelistN(&lb);
- }
-
- return success;
+ Main *bmain = CTX_data_main(C);
+ PointerRNA ptr, lptr, idptr;
+ PropertyRNA *prop, *lprop;
+ bool success = false;
+ int index;
+
+ /* try to reset the nominated setting to its default value */
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+
+ /* if there is a valid property that is editable... */
+ if (ptr.data && prop) {
+ char *path = NULL;
+ bool use_path_from_id;
+ CollectionPointerLink *link;
+ ListBase lb = {NULL};
+
+ if (UI_context_copy_to_selected_list(C, &ptr, prop, &lb, &use_path_from_id, &path) &&
+ !BLI_listbase_is_empty(&lb)) {
+ for (link = lb.first; link; link = link->next) {
+ if (link->ptr.data != ptr.data) {
+ if (use_path_from_id) {
+ /* Path relative to ID. */
+ lprop = NULL;
+ RNA_id_pointer_create(link->ptr.id.data, &idptr);
+ RNA_path_resolve_property(&idptr, path, &lptr, &lprop);
+ }
+ else if (path) {
+ /* Path relative to elements from list. */
+ lprop = NULL;
+ RNA_path_resolve_property(&link->ptr, path, &lptr, &lprop);
+ }
+ else {
+ lptr = link->ptr;
+ lprop = prop;
+ }
+
+ if (lptr.data == ptr.data) {
+ /* lptr might not be the same as link->ptr! */
+ continue;
+ }
+
+ if (lprop == prop) {
+ if (RNA_property_editable(&lptr, lprop)) {
+ if (poll) {
+ success = true;
+ break;
+ }
+ else {
+ if (RNA_property_copy(bmain, &lptr, &ptr, prop, (all) ? -1 : index)) {
+ RNA_property_update(C, &lptr, prop);
+ success = true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ MEM_SAFE_FREE(path);
+ BLI_freelistN(&lb);
+ }
+
+ return success;
}
static bool copy_to_selected_button_poll(bContext *C)
{
- return copy_to_selected_button(C, false, true);
+ return copy_to_selected_button(C, false, true);
}
static int copy_to_selected_button_exec(bContext *C, wmOperator *op)
{
- bool success;
+ bool success;
- const bool all = RNA_boolean_get(op->ptr, "all");
+ const bool all = RNA_boolean_get(op->ptr, "all");
- success = copy_to_selected_button(C, all, false);
+ success = copy_to_selected_button(C, all, false);
- return (success) ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
+ return (success) ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
}
static void UI_OT_copy_to_selected_button(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Copy To Selected";
- ot->idname = "UI_OT_copy_to_selected_button";
- ot->description = "Copy property from this object to selected objects or bones";
+ /* identifiers */
+ ot->name = "Copy To Selected";
+ ot->idname = "UI_OT_copy_to_selected_button";
+ ot->description = "Copy property from this object to selected objects or bones";
- /* callbacks */
- ot->poll = copy_to_selected_button_poll;
- ot->exec = copy_to_selected_button_exec;
+ /* callbacks */
+ ot->poll = copy_to_selected_button_poll;
+ ot->exec = copy_to_selected_button_exec;
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
- /* properties */
- RNA_def_boolean(ot->srna, "all", true, "All", "Copy to selected all elements of the array");
+ /* properties */
+ RNA_def_boolean(ot->srna, "all", true, "All", "Copy to selected all elements of the array");
}
/** \} */
@@ -868,63 +884,61 @@ static void UI_OT_copy_to_selected_button(wmOperatorType *ot)
/** Jump to the object or bone referenced by the pointer, or check if it is possible. */
static bool jump_to_target_ptr(bContext *C, PointerRNA ptr, const bool poll)
{
- if (RNA_pointer_is_null(&ptr)) {
- return false;
- }
-
- /* Verify pointer type. */
- char bone_name[MAXBONENAME];
- const StructRNA *target_type = NULL;
-
- if (ELEM(ptr.type, &RNA_EditBone, &RNA_PoseBone, &RNA_Bone)) {
- RNA_string_get(&ptr, "name", bone_name);
- if (bone_name[0] != '\0') {
- target_type = &RNA_Bone;
- }
- }
- else if (RNA_struct_is_a(ptr.type, &RNA_Object)) {
- target_type = &RNA_Object;
- }
-
- if (target_type == NULL) {
- return false;
- }
-
- /* Find the containing Object. */
- ViewLayer *view_layer = CTX_data_view_layer(C);
- Base *base = NULL;
- const short id_type = GS(((ID *)ptr.id.data)->name);
- if (id_type == ID_OB) {
- base = BKE_view_layer_base_find(view_layer, ptr.id.data);
- }
- else if (OB_DATA_SUPPORT_ID(id_type)) {
- base = ED_object_find_first_by_data_id(view_layer, ptr.id.data);
- }
-
- bool ok = false;
- if ((base == NULL) ||
- ((target_type == &RNA_Bone) && (base->object->type != OB_ARMATURE)))
- {
- /* pass */
- }
- else if (poll) {
- ok = true;
- }
- else {
- /* Make optional. */
- const bool reveal_hidden = true;
- /* Select and activate the target. */
- if (target_type == &RNA_Bone) {
- ok = ED_object_jump_to_bone(C, base->object, bone_name, reveal_hidden);
- }
- else if (target_type == &RNA_Object) {
- ok = ED_object_jump_to_object(C, base->object, reveal_hidden);
- }
- else {
- BLI_assert(0);
- }
- }
- return ok;
+ if (RNA_pointer_is_null(&ptr)) {
+ return false;
+ }
+
+ /* Verify pointer type. */
+ char bone_name[MAXBONENAME];
+ const StructRNA *target_type = NULL;
+
+ if (ELEM(ptr.type, &RNA_EditBone, &RNA_PoseBone, &RNA_Bone)) {
+ RNA_string_get(&ptr, "name", bone_name);
+ if (bone_name[0] != '\0') {
+ target_type = &RNA_Bone;
+ }
+ }
+ else if (RNA_struct_is_a(ptr.type, &RNA_Object)) {
+ target_type = &RNA_Object;
+ }
+
+ if (target_type == NULL) {
+ return false;
+ }
+
+ /* Find the containing Object. */
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Base *base = NULL;
+ const short id_type = GS(((ID *)ptr.id.data)->name);
+ if (id_type == ID_OB) {
+ base = BKE_view_layer_base_find(view_layer, ptr.id.data);
+ }
+ else if (OB_DATA_SUPPORT_ID(id_type)) {
+ base = ED_object_find_first_by_data_id(view_layer, ptr.id.data);
+ }
+
+ bool ok = false;
+ if ((base == NULL) || ((target_type == &RNA_Bone) && (base->object->type != OB_ARMATURE))) {
+ /* pass */
+ }
+ else if (poll) {
+ ok = true;
+ }
+ else {
+ /* Make optional. */
+ const bool reveal_hidden = true;
+ /* Select and activate the target. */
+ if (target_type == &RNA_Bone) {
+ ok = ED_object_jump_to_bone(C, base->object, bone_name, reveal_hidden);
+ }
+ else if (target_type == &RNA_Object) {
+ ok = ED_object_jump_to_object(C, base->object, reveal_hidden);
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+ return ok;
}
/**
@@ -936,73 +950,74 @@ static bool jump_to_target_ptr(bContext *C, PointerRNA ptr, const bool poll)
*/
static bool jump_to_target_button(bContext *C, bool poll)
{
- PointerRNA ptr, target_ptr;
- PropertyRNA *prop;
- int index;
+ PointerRNA ptr, target_ptr;
+ PropertyRNA *prop;
+ int index;
- UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- /* If there is a valid property... */
- if (ptr.data && prop) {
- const PropertyType type = RNA_property_type(prop);
+ /* If there is a valid property... */
+ if (ptr.data && prop) {
+ const PropertyType type = RNA_property_type(prop);
- /* For pointer properties, use their value directly. */
- if (type == PROP_POINTER) {
- target_ptr = RNA_property_pointer_get(&ptr, prop);
+ /* For pointer properties, use their value directly. */
+ if (type == PROP_POINTER) {
+ target_ptr = RNA_property_pointer_get(&ptr, prop);
- return jump_to_target_ptr(C, target_ptr, poll);
- }
- /* For string properties with prop_search, look up the search collection item. */
- else if (type == PROP_STRING) {
- const uiBut *but = UI_context_active_but_get(C);
+ return jump_to_target_ptr(C, target_ptr, poll);
+ }
+ /* For string properties with prop_search, look up the search collection item. */
+ else if (type == PROP_STRING) {
+ const uiBut *but = UI_context_active_but_get(C);
- if (but->type == UI_BTYPE_SEARCH_MENU && but->search_func == ui_rna_collection_search_cb) {
- uiRNACollectionSearch *coll_search = but->search_arg;
+ if (but->type == UI_BTYPE_SEARCH_MENU && but->search_func == ui_rna_collection_search_cb) {
+ uiRNACollectionSearch *coll_search = but->search_arg;
- char str_buf[MAXBONENAME];
- char *str_ptr = RNA_property_string_get_alloc(&ptr, prop, str_buf, sizeof(str_buf), NULL);
+ char str_buf[MAXBONENAME];
+ char *str_ptr = RNA_property_string_get_alloc(&ptr, prop, str_buf, sizeof(str_buf), NULL);
- int found = RNA_property_collection_lookup_string(&coll_search->search_ptr, coll_search->search_prop, str_ptr, &target_ptr);
+ int found = RNA_property_collection_lookup_string(
+ &coll_search->search_ptr, coll_search->search_prop, str_ptr, &target_ptr);
- if (str_ptr != str_buf) {
- MEM_freeN(str_ptr);
- }
+ if (str_ptr != str_buf) {
+ MEM_freeN(str_ptr);
+ }
- if (found) {
- return jump_to_target_ptr(C, target_ptr, poll);
- }
- }
- }
- }
+ if (found) {
+ return jump_to_target_ptr(C, target_ptr, poll);
+ }
+ }
+ }
+ }
- return false;
+ return false;
}
bool ui_jump_to_target_button_poll(bContext *C)
{
- return jump_to_target_button(C, true);
+ return jump_to_target_button(C, true);
}
static int jump_to_target_button_exec(bContext *C, wmOperator *UNUSED(op))
{
- bool success = jump_to_target_button(C, false);
+ bool success = jump_to_target_button(C, false);
- return (success) ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
+ return (success) ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
}
static void UI_OT_jump_to_target_button(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Jump To Target";
- ot->idname = "UI_OT_jump_to_target_button";
- ot->description = "Switch to the target object or bone";
+ /* identifiers */
+ ot->name = "Jump To Target";
+ ot->idname = "UI_OT_jump_to_target_button";
+ ot->description = "Switch to the target object or bone";
- /* callbacks */
- ot->poll = ui_jump_to_target_button_poll;
- ot->exec = jump_to_target_button_exec;
+ /* callbacks */
+ ot->poll = ui_jump_to_target_button_poll;
+ ot->exec = jump_to_target_button_exec;
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
/** \} */
@@ -1017,47 +1032,47 @@ static void UI_OT_jump_to_target_button(wmOperatorType *ot)
static bool reports_to_text_poll(bContext *C)
{
- return CTX_wm_reports(C) != NULL;
+ return CTX_wm_reports(C) != NULL;
}
static int reports_to_text_exec(bContext *C, wmOperator *UNUSED(op))
{
- ReportList *reports = CTX_wm_reports(C);
- Main *bmain = CTX_data_main(C);
- Text *txt;
- char *str;
-
- /* create new text-block to write to */
- txt = BKE_text_add(bmain, "Recent Reports");
-
- /* convert entire list to a display string, and add this to the text-block
- * - if commandline debug option enabled, show debug reports too
- * - otherwise, up to info (which is what users normally see)
- */
- str = BKE_reports_string(reports, (G.debug & G_DEBUG) ? RPT_DEBUG : RPT_INFO);
-
- if (str) {
- TextUndoBuf *utxt = NULL; // FIXME
- BKE_text_write(txt, utxt, str);
- MEM_freeN(str);
-
- return OPERATOR_FINISHED;
- }
- else {
- return OPERATOR_CANCELLED;
- }
+ ReportList *reports = CTX_wm_reports(C);
+ Main *bmain = CTX_data_main(C);
+ Text *txt;
+ char *str;
+
+ /* create new text-block to write to */
+ txt = BKE_text_add(bmain, "Recent Reports");
+
+ /* convert entire list to a display string, and add this to the text-block
+ * - if commandline debug option enabled, show debug reports too
+ * - otherwise, up to info (which is what users normally see)
+ */
+ str = BKE_reports_string(reports, (G.debug & G_DEBUG) ? RPT_DEBUG : RPT_INFO);
+
+ if (str) {
+ TextUndoBuf *utxt = NULL; // FIXME
+ BKE_text_write(txt, utxt, str);
+ MEM_freeN(str);
+
+ return OPERATOR_FINISHED;
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
}
static void UI_OT_reports_to_textblock(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Reports to Text Block";
- ot->idname = "UI_OT_reports_to_textblock";
- ot->description = "Write the reports ";
-
- /* callbacks */
- ot->poll = reports_to_text_poll;
- ot->exec = reports_to_text_exec;
+ /* identifiers */
+ ot->name = "Reports to Text Block";
+ ot->idname = "UI_OT_reports_to_textblock";
+ ot->description = "Write the reports ";
+
+ /* callbacks */
+ ot->poll = reports_to_text_poll;
+ ot->exec = reports_to_text_exec;
}
/** \} */
@@ -1073,13 +1088,13 @@ static void UI_OT_reports_to_textblock(wmOperatorType *ot)
* note, this includes utility functions and button matching checks */
typedef struct uiEditSourceStore {
- uiBut but_orig;
- GHash *hash;
+ uiBut but_orig;
+ GHash *hash;
} uiEditSourceStore;
typedef struct uiEditSourceButStore {
- char py_dbg_fn[FILE_MAX];
- int py_dbg_ln;
+ char py_dbg_fn[FILE_MAX];
+ int py_dbg_ln;
} uiEditSourceButStore;
/* should only ever be set while the edit source operator is running */
@@ -1087,198 +1102,190 @@ static struct uiEditSourceStore *ui_editsource_info = NULL;
bool UI_editsource_enable_check(void)
{
- return (ui_editsource_info != NULL);
+ return (ui_editsource_info != NULL);
}
static void ui_editsource_active_but_set(uiBut *but)
{
- BLI_assert(ui_editsource_info == NULL);
+ BLI_assert(ui_editsource_info == NULL);
- ui_editsource_info = MEM_callocN(sizeof(uiEditSourceStore), __func__);
- memcpy(&ui_editsource_info->but_orig, but, sizeof(uiBut));
+ ui_editsource_info = MEM_callocN(sizeof(uiEditSourceStore), __func__);
+ memcpy(&ui_editsource_info->but_orig, but, sizeof(uiBut));
- ui_editsource_info->hash = BLI_ghash_ptr_new(__func__);
+ ui_editsource_info->hash = BLI_ghash_ptr_new(__func__);
}
static void ui_editsource_active_but_clear(void)
{
- BLI_ghash_free(ui_editsource_info->hash, NULL, MEM_freeN);
- MEM_freeN(ui_editsource_info);
- ui_editsource_info = NULL;
+ BLI_ghash_free(ui_editsource_info->hash, NULL, MEM_freeN);
+ MEM_freeN(ui_editsource_info);
+ ui_editsource_info = NULL;
}
static bool ui_editsource_uibut_match(uiBut *but_a, uiBut *but_b)
{
-#if 0
- printf("matching buttons: '%s' == '%s'\n",
- but_a->drawstr, but_b->drawstr);
-#endif
-
- /* this just needs to be a 'good-enough' comparison so we can know beyond
- * reasonable doubt that these buttons are the same between redraws.
- * if this fails it only means edit-source fails - campbell */
- if (BLI_rctf_compare(&but_a->rect, &but_b->rect, FLT_EPSILON) &&
- (but_a->type == but_b->type) &&
- (but_a->rnaprop == but_b->rnaprop) &&
- (but_a->optype == but_b->optype) &&
- (but_a->unit_type == but_b->unit_type) &&
- STREQLEN(but_a->drawstr, but_b->drawstr, UI_MAX_DRAW_STR))
- {
- return true;
- }
- else {
- return false;
- }
+# if 0
+ printf("matching buttons: '%s' == '%s'\n",
+ but_a->drawstr, but_b->drawstr);
+# endif
+
+ /* this just needs to be a 'good-enough' comparison so we can know beyond
+ * reasonable doubt that these buttons are the same between redraws.
+ * if this fails it only means edit-source fails - campbell */
+ if (BLI_rctf_compare(&but_a->rect, &but_b->rect, FLT_EPSILON) && (but_a->type == but_b->type) &&
+ (but_a->rnaprop == but_b->rnaprop) && (but_a->optype == but_b->optype) &&
+ (but_a->unit_type == but_b->unit_type) &&
+ STREQLEN(but_a->drawstr, but_b->drawstr, UI_MAX_DRAW_STR)) {
+ return true;
+ }
+ else {
+ return false;
+ }
}
void UI_editsource_active_but_test(uiBut *but)
{
- extern void PyC_FileAndNum_Safe(const char **filename, int *lineno);
+ extern void PyC_FileAndNum_Safe(const char **filename, int *lineno);
- struct uiEditSourceButStore *but_store = MEM_callocN(sizeof(uiEditSourceButStore), __func__);
+ struct uiEditSourceButStore *but_store = MEM_callocN(sizeof(uiEditSourceButStore), __func__);
- const char *fn;
- int lineno = -1;
+ const char *fn;
+ int lineno = -1;
-#if 0
- printf("comparing buttons: '%s' == '%s'\n",
- but->drawstr, ui_editsource_info->but_orig.drawstr);
-#endif
+# if 0
+ printf("comparing buttons: '%s' == '%s'\n",
+ but->drawstr, ui_editsource_info->but_orig.drawstr);
+# endif
- PyC_FileAndNum_Safe(&fn, &lineno);
+ PyC_FileAndNum_Safe(&fn, &lineno);
- if (lineno != -1) {
- BLI_strncpy(but_store->py_dbg_fn, fn,
- sizeof(but_store->py_dbg_fn));
- but_store->py_dbg_ln = lineno;
- }
- else {
- but_store->py_dbg_fn[0] = '\0';
- but_store->py_dbg_ln = -1;
- }
+ if (lineno != -1) {
+ BLI_strncpy(but_store->py_dbg_fn, fn, sizeof(but_store->py_dbg_fn));
+ but_store->py_dbg_ln = lineno;
+ }
+ else {
+ but_store->py_dbg_fn[0] = '\0';
+ but_store->py_dbg_ln = -1;
+ }
- BLI_ghash_insert(ui_editsource_info->hash, but, but_store);
+ BLI_ghash_insert(ui_editsource_info->hash, but, but_store);
}
-static int editsource_text_edit(
- bContext *C, wmOperator *op,
- const char filepath[FILE_MAX], const int line)
+static int editsource_text_edit(bContext *C,
+ wmOperator *op,
+ const char filepath[FILE_MAX],
+ const int line)
{
- struct Main *bmain = CTX_data_main(C);
- Text *text;
-
- /* Developers may wish to copy-paste to an external editor. */
- printf("%s:%d\n", filepath, line);
-
- for (text = bmain->texts.first; text; text = text->id.next) {
- if (text->name && BLI_path_cmp(text->name, filepath) == 0) {
- break;
- }
- }
-
- if (text == NULL) {
- text = BKE_text_load(bmain, filepath, BKE_main_blendfile_path(bmain));
- id_us_ensure_real(&text->id);
- }
-
- if (text == NULL) {
- BKE_reportf(op->reports, RPT_WARNING, "File '%s' cannot be opened", filepath);
- return OPERATOR_CANCELLED;
- }
- else {
- /* naughty!, find text area to set, not good behavior
- * but since this is a dev tool lets allow it - campbell */
- ScrArea *sa = BKE_screen_find_big_area(CTX_wm_screen(C), SPACE_TEXT, 0);
- if (sa) {
- SpaceText *st = sa->spacedata.first;
- st->text = text;
- }
- else {
- BKE_reportf(op->reports, RPT_INFO, "See '%s' in the text editor", text->id.name + 2);
- }
-
- txt_move_toline(text, line - 1, false);
- WM_event_add_notifier(C, NC_TEXT | ND_CURSOR, text);
- }
-
- return OPERATOR_FINISHED;
+ struct Main *bmain = CTX_data_main(C);
+ Text *text;
+
+ /* Developers may wish to copy-paste to an external editor. */
+ printf("%s:%d\n", filepath, line);
+
+ for (text = bmain->texts.first; text; text = text->id.next) {
+ if (text->name && BLI_path_cmp(text->name, filepath) == 0) {
+ break;
+ }
+ }
+
+ if (text == NULL) {
+ text = BKE_text_load(bmain, filepath, BKE_main_blendfile_path(bmain));
+ id_us_ensure_real(&text->id);
+ }
+
+ if (text == NULL) {
+ BKE_reportf(op->reports, RPT_WARNING, "File '%s' cannot be opened", filepath);
+ return OPERATOR_CANCELLED;
+ }
+ else {
+ /* naughty!, find text area to set, not good behavior
+ * but since this is a dev tool lets allow it - campbell */
+ ScrArea *sa = BKE_screen_find_big_area(CTX_wm_screen(C), SPACE_TEXT, 0);
+ if (sa) {
+ SpaceText *st = sa->spacedata.first;
+ st->text = text;
+ }
+ else {
+ BKE_reportf(op->reports, RPT_INFO, "See '%s' in the text editor", text->id.name + 2);
+ }
+
+ txt_move_toline(text, line - 1, false);
+ WM_event_add_notifier(C, NC_TEXT | ND_CURSOR, text);
+ }
+
+ return OPERATOR_FINISHED;
}
static int editsource_exec(bContext *C, wmOperator *op)
{
- uiBut *but = UI_context_active_but_get(C);
-
- if (but) {
- GHashIterator ghi;
- struct uiEditSourceButStore *but_store = NULL;
-
- ARegion *ar = CTX_wm_region(C);
- int ret;
-
- /* needed else the active button does not get tested */
- UI_screen_free_active_but(C, CTX_wm_screen(C));
-
- // printf("%s: begin\n", __func__);
-
- /* take care not to return before calling ui_editsource_active_but_clear */
- ui_editsource_active_but_set(but);
-
- /* redraw and get active button python info */
- ED_region_do_layout(C, ar);
- ED_region_do_draw(C, ar);
- ar->do_draw = false;
-
- for (BLI_ghashIterator_init(&ghi, ui_editsource_info->hash);
- BLI_ghashIterator_done(&ghi) == false;
- BLI_ghashIterator_step(&ghi))
- {
- uiBut *but_key = BLI_ghashIterator_getKey(&ghi);
- if (but_key && ui_editsource_uibut_match(&ui_editsource_info->but_orig, but_key)) {
- but_store = BLI_ghashIterator_getValue(&ghi);
- break;
- }
-
- }
-
- if (but_store) {
- if (but_store->py_dbg_ln != -1) {
- ret = editsource_text_edit(
- C, op,
- but_store->py_dbg_fn,
- but_store->py_dbg_ln);
- }
- else {
- BKE_report(op->reports, RPT_ERROR, "Active button is not from a script, cannot edit source");
- ret = OPERATOR_CANCELLED;
- }
- }
- else {
- BKE_report(op->reports, RPT_ERROR, "Active button match cannot be found");
- ret = OPERATOR_CANCELLED;
- }
-
-
- ui_editsource_active_but_clear();
-
- // printf("%s: end\n", __func__);
-
- return ret;
- }
- else {
- BKE_report(op->reports, RPT_ERROR, "Active button not found");
- return OPERATOR_CANCELLED;
- }
+ uiBut *but = UI_context_active_but_get(C);
+
+ if (but) {
+ GHashIterator ghi;
+ struct uiEditSourceButStore *but_store = NULL;
+
+ ARegion *ar = CTX_wm_region(C);
+ int ret;
+
+ /* needed else the active button does not get tested */
+ UI_screen_free_active_but(C, CTX_wm_screen(C));
+
+ // printf("%s: begin\n", __func__);
+
+ /* take care not to return before calling ui_editsource_active_but_clear */
+ ui_editsource_active_but_set(but);
+
+ /* redraw and get active button python info */
+ ED_region_do_layout(C, ar);
+ ED_region_do_draw(C, ar);
+ ar->do_draw = false;
+
+ for (BLI_ghashIterator_init(&ghi, ui_editsource_info->hash);
+ BLI_ghashIterator_done(&ghi) == false;
+ BLI_ghashIterator_step(&ghi)) {
+ uiBut *but_key = BLI_ghashIterator_getKey(&ghi);
+ if (but_key && ui_editsource_uibut_match(&ui_editsource_info->but_orig, but_key)) {
+ but_store = BLI_ghashIterator_getValue(&ghi);
+ break;
+ }
+ }
+
+ if (but_store) {
+ if (but_store->py_dbg_ln != -1) {
+ ret = editsource_text_edit(C, op, but_store->py_dbg_fn, but_store->py_dbg_ln);
+ }
+ else {
+ BKE_report(
+ op->reports, RPT_ERROR, "Active button is not from a script, cannot edit source");
+ ret = OPERATOR_CANCELLED;
+ }
+ }
+ else {
+ BKE_report(op->reports, RPT_ERROR, "Active button match cannot be found");
+ ret = OPERATOR_CANCELLED;
+ }
+
+ ui_editsource_active_but_clear();
+
+ // printf("%s: end\n", __func__);
+
+ return ret;
+ }
+ else {
+ BKE_report(op->reports, RPT_ERROR, "Active button not found");
+ return OPERATOR_CANCELLED;
+ }
}
static void UI_OT_editsource(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Edit Source";
- ot->idname = "UI_OT_editsource";
- ot->description = "Edit UI source code of the active button";
+ /* identifiers */
+ ot->name = "Edit Source";
+ ot->idname = "UI_OT_editsource";
+ ot->description = "Edit UI source code of the active button";
- /* callbacks */
- ot->exec = editsource_exec;
+ /* callbacks */
+ ot->exec = editsource_exec;
}
/** \} */
@@ -1292,165 +1299,180 @@ static void UI_OT_editsource(wmOperatorType *ot)
* \note: this includes utility functions and button matching checks.
* this only works in conjunction with a py operator!
*/
-static void edittranslation_find_po_file(const char *root, const char *uilng, char *path, const size_t maxlen)
+static void edittranslation_find_po_file(const char *root,
+ const char *uilng,
+ char *path,
+ const size_t maxlen)
{
- char tstr[32]; /* Should be more than enough! */
-
- /* First, full lang code. */
- BLI_snprintf(tstr, sizeof(tstr), "%s.po", uilng);
- BLI_join_dirfile(path, maxlen, root, uilng);
- BLI_path_append(path, maxlen, tstr);
- if (BLI_is_file(path)) {
- return;
- }
-
- /* Now try without the second iso code part (_ES in es_ES). */
- {
- const char *tc = NULL;
- size_t szt = 0;
- tstr[0] = '\0';
-
- tc = strchr(uilng, '_');
- if (tc) {
- szt = tc - uilng;
- if (szt < sizeof(tstr)) { /* Paranoid, should always be true! */
- BLI_strncpy(tstr, uilng, szt + 1); /* +1 for '\0' char! */
- }
- }
- if (tstr[0]) {
- /* Because of some codes like sr_SR@latin... */
- tc = strchr(uilng, '@');
- if (tc) {
- BLI_strncpy(tstr + szt, tc, sizeof(tstr) - szt);
- }
-
- BLI_join_dirfile(path, maxlen, root, tstr);
- strcat(tstr, ".po");
- BLI_path_append(path, maxlen, tstr);
- if (BLI_is_file(path)) {
- return;
- }
- }
- }
-
- /* Else no po file! */
- path[0] = '\0';
+ char tstr[32]; /* Should be more than enough! */
+
+ /* First, full lang code. */
+ BLI_snprintf(tstr, sizeof(tstr), "%s.po", uilng);
+ BLI_join_dirfile(path, maxlen, root, uilng);
+ BLI_path_append(path, maxlen, tstr);
+ if (BLI_is_file(path)) {
+ return;
+ }
+
+ /* Now try without the second iso code part (_ES in es_ES). */
+ {
+ const char *tc = NULL;
+ size_t szt = 0;
+ tstr[0] = '\0';
+
+ tc = strchr(uilng, '_');
+ if (tc) {
+ szt = tc - uilng;
+ if (szt < sizeof(tstr)) { /* Paranoid, should always be true! */
+ BLI_strncpy(tstr, uilng, szt + 1); /* +1 for '\0' char! */
+ }
+ }
+ if (tstr[0]) {
+ /* Because of some codes like sr_SR@latin... */
+ tc = strchr(uilng, '@');
+ if (tc) {
+ BLI_strncpy(tstr + szt, tc, sizeof(tstr) - szt);
+ }
+
+ BLI_join_dirfile(path, maxlen, root, tstr);
+ strcat(tstr, ".po");
+ BLI_path_append(path, maxlen, tstr);
+ if (BLI_is_file(path)) {
+ return;
+ }
+ }
+ }
+
+ /* Else no po file! */
+ path[0] = '\0';
}
static int edittranslation_exec(bContext *C, wmOperator *op)
{
- uiBut *but = UI_context_active_but_get(C);
- int ret = OPERATOR_CANCELLED;
-
- if (but) {
- wmOperatorType *ot;
- PointerRNA ptr;
- char popath[FILE_MAX];
- const char *root = U.i18ndir;
- const char *uilng = BLT_lang_get();
-
- uiStringInfo but_label = {BUT_GET_LABEL, NULL};
- uiStringInfo rna_label = {BUT_GET_RNA_LABEL, NULL};
- uiStringInfo enum_label = {BUT_GET_RNAENUM_LABEL, NULL};
- uiStringInfo but_tip = {BUT_GET_TIP, NULL};
- uiStringInfo rna_tip = {BUT_GET_RNA_TIP, NULL};
- uiStringInfo enum_tip = {BUT_GET_RNAENUM_TIP, NULL};
- uiStringInfo rna_struct = {BUT_GET_RNASTRUCT_IDENTIFIER, NULL};
- uiStringInfo rna_prop = {BUT_GET_RNAPROP_IDENTIFIER, NULL};
- uiStringInfo rna_enum = {BUT_GET_RNAENUM_IDENTIFIER, NULL};
- uiStringInfo rna_ctxt = {BUT_GET_RNA_LABEL_CONTEXT, NULL};
-
- if (!BLI_is_dir(root)) {
- BKE_report(
- op->reports, RPT_ERROR,
- "Please set your Preferences' 'Translation Branches "
- "Directory' path to a valid directory");
- return OPERATOR_CANCELLED;
- }
- ot = WM_operatortype_find(EDTSRC_I18N_OP_NAME, 0);
- if (ot == NULL) {
- BKE_reportf(
- op->reports, RPT_ERROR,
- "Could not find operator '%s'! Please enable ui_translate add-on "
- "in the User Preferences", EDTSRC_I18N_OP_NAME);
- return OPERATOR_CANCELLED;
- }
- /* Try to find a valid po file for current language... */
- edittranslation_find_po_file(root, uilng, popath, FILE_MAX);
- /* printf("po path: %s\n", popath); */
- if (popath[0] == '\0') {
- BKE_reportf(op->reports, RPT_ERROR, "No valid po found for language '%s' under %s", uilng, root);
- return OPERATOR_CANCELLED;
- }
-
- UI_but_string_info_get(
- C, but, &but_label, &rna_label, &enum_label, &but_tip, &rna_tip, &enum_tip,
- &rna_struct, &rna_prop, &rna_enum, &rna_ctxt, NULL);
-
- WM_operator_properties_create_ptr(&ptr, ot);
- RNA_string_set(&ptr, "lang", uilng);
- RNA_string_set(&ptr, "po_file", popath);
- RNA_string_set(&ptr, "but_label", but_label.strinfo);
- RNA_string_set(&ptr, "rna_label", rna_label.strinfo);
- RNA_string_set(&ptr, "enum_label", enum_label.strinfo);
- RNA_string_set(&ptr, "but_tip", but_tip.strinfo);
- RNA_string_set(&ptr, "rna_tip", rna_tip.strinfo);
- RNA_string_set(&ptr, "enum_tip", enum_tip.strinfo);
- RNA_string_set(&ptr, "rna_struct", rna_struct.strinfo);
- RNA_string_set(&ptr, "rna_prop", rna_prop.strinfo);
- RNA_string_set(&ptr, "rna_enum", rna_enum.strinfo);
- RNA_string_set(&ptr, "rna_ctxt", rna_ctxt.strinfo);
- ret = WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, &ptr);
-
- /* Clean up */
- if (but_label.strinfo) {
- MEM_freeN(but_label.strinfo);
- }
- if (rna_label.strinfo) {
- MEM_freeN(rna_label.strinfo);
- }
- if (enum_label.strinfo) {
- MEM_freeN(enum_label.strinfo);
- }
- if (but_tip.strinfo) {
- MEM_freeN(but_tip.strinfo);
- }
- if (rna_tip.strinfo) {
- MEM_freeN(rna_tip.strinfo);
- }
- if (enum_tip.strinfo) {
- MEM_freeN(enum_tip.strinfo);
- }
- if (rna_struct.strinfo) {
- MEM_freeN(rna_struct.strinfo);
- }
- if (rna_prop.strinfo) {
- MEM_freeN(rna_prop.strinfo);
- }
- if (rna_enum.strinfo) {
- MEM_freeN(rna_enum.strinfo);
- }
- if (rna_ctxt.strinfo) {
- MEM_freeN(rna_ctxt.strinfo);
- }
-
- return ret;
- }
- else {
- BKE_report(op->reports, RPT_ERROR, "Active button not found");
- return OPERATOR_CANCELLED;
- }
+ uiBut *but = UI_context_active_but_get(C);
+ int ret = OPERATOR_CANCELLED;
+
+ if (but) {
+ wmOperatorType *ot;
+ PointerRNA ptr;
+ char popath[FILE_MAX];
+ const char *root = U.i18ndir;
+ const char *uilng = BLT_lang_get();
+
+ uiStringInfo but_label = {BUT_GET_LABEL, NULL};
+ uiStringInfo rna_label = {BUT_GET_RNA_LABEL, NULL};
+ uiStringInfo enum_label = {BUT_GET_RNAENUM_LABEL, NULL};
+ uiStringInfo but_tip = {BUT_GET_TIP, NULL};
+ uiStringInfo rna_tip = {BUT_GET_RNA_TIP, NULL};
+ uiStringInfo enum_tip = {BUT_GET_RNAENUM_TIP, NULL};
+ uiStringInfo rna_struct = {BUT_GET_RNASTRUCT_IDENTIFIER, NULL};
+ uiStringInfo rna_prop = {BUT_GET_RNAPROP_IDENTIFIER, NULL};
+ uiStringInfo rna_enum = {BUT_GET_RNAENUM_IDENTIFIER, NULL};
+ uiStringInfo rna_ctxt = {BUT_GET_RNA_LABEL_CONTEXT, NULL};
+
+ if (!BLI_is_dir(root)) {
+ BKE_report(op->reports,
+ RPT_ERROR,
+ "Please set your Preferences' 'Translation Branches "
+ "Directory' path to a valid directory");
+ return OPERATOR_CANCELLED;
+ }
+ ot = WM_operatortype_find(EDTSRC_I18N_OP_NAME, 0);
+ if (ot == NULL) {
+ BKE_reportf(op->reports,
+ RPT_ERROR,
+ "Could not find operator '%s'! Please enable ui_translate add-on "
+ "in the User Preferences",
+ EDTSRC_I18N_OP_NAME);
+ return OPERATOR_CANCELLED;
+ }
+ /* Try to find a valid po file for current language... */
+ edittranslation_find_po_file(root, uilng, popath, FILE_MAX);
+ /* printf("po path: %s\n", popath); */
+ if (popath[0] == '\0') {
+ BKE_reportf(
+ op->reports, RPT_ERROR, "No valid po found for language '%s' under %s", uilng, root);
+ return OPERATOR_CANCELLED;
+ }
+
+ UI_but_string_info_get(C,
+ but,
+ &but_label,
+ &rna_label,
+ &enum_label,
+ &but_tip,
+ &rna_tip,
+ &enum_tip,
+ &rna_struct,
+ &rna_prop,
+ &rna_enum,
+ &rna_ctxt,
+ NULL);
+
+ WM_operator_properties_create_ptr(&ptr, ot);
+ RNA_string_set(&ptr, "lang", uilng);
+ RNA_string_set(&ptr, "po_file", popath);
+ RNA_string_set(&ptr, "but_label", but_label.strinfo);
+ RNA_string_set(&ptr, "rna_label", rna_label.strinfo);
+ RNA_string_set(&ptr, "enum_label", enum_label.strinfo);
+ RNA_string_set(&ptr, "but_tip", but_tip.strinfo);
+ RNA_string_set(&ptr, "rna_tip", rna_tip.strinfo);
+ RNA_string_set(&ptr, "enum_tip", enum_tip.strinfo);
+ RNA_string_set(&ptr, "rna_struct", rna_struct.strinfo);
+ RNA_string_set(&ptr, "rna_prop", rna_prop.strinfo);
+ RNA_string_set(&ptr, "rna_enum", rna_enum.strinfo);
+ RNA_string_set(&ptr, "rna_ctxt", rna_ctxt.strinfo);
+ ret = WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, &ptr);
+
+ /* Clean up */
+ if (but_label.strinfo) {
+ MEM_freeN(but_label.strinfo);
+ }
+ if (rna_label.strinfo) {
+ MEM_freeN(rna_label.strinfo);
+ }
+ if (enum_label.strinfo) {
+ MEM_freeN(enum_label.strinfo);
+ }
+ if (but_tip.strinfo) {
+ MEM_freeN(but_tip.strinfo);
+ }
+ if (rna_tip.strinfo) {
+ MEM_freeN(rna_tip.strinfo);
+ }
+ if (enum_tip.strinfo) {
+ MEM_freeN(enum_tip.strinfo);
+ }
+ if (rna_struct.strinfo) {
+ MEM_freeN(rna_struct.strinfo);
+ }
+ if (rna_prop.strinfo) {
+ MEM_freeN(rna_prop.strinfo);
+ }
+ if (rna_enum.strinfo) {
+ MEM_freeN(rna_enum.strinfo);
+ }
+ if (rna_ctxt.strinfo) {
+ MEM_freeN(rna_ctxt.strinfo);
+ }
+
+ return ret;
+ }
+ else {
+ BKE_report(op->reports, RPT_ERROR, "Active button not found");
+ return OPERATOR_CANCELLED;
+ }
}
static void UI_OT_edittranslation_init(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Edit Translation";
- ot->idname = "UI_OT_edittranslation_init";
- ot->description = "Edit i18n in current language for the active button";
+ /* identifiers */
+ ot->name = "Edit Translation";
+ ot->idname = "UI_OT_edittranslation_init";
+ ot->description = "Edit i18n in current language for the active button";
- /* callbacks */
- ot->exec = edittranslation_exec;
+ /* callbacks */
+ ot->exec = edittranslation_exec;
}
#endif /* WITH_PYTHON */
@@ -1463,22 +1485,22 @@ static void UI_OT_edittranslation_init(wmOperatorType *ot)
static int reloadtranslation_exec(bContext *UNUSED(C), wmOperator *UNUSED(op))
{
- BLT_lang_init();
- BLF_cache_clear();
- BLT_lang_set(NULL);
- UI_reinit_font();
- return OPERATOR_FINISHED;
+ BLT_lang_init();
+ BLF_cache_clear();
+ BLT_lang_set(NULL);
+ UI_reinit_font();
+ return OPERATOR_FINISHED;
}
static void UI_OT_reloadtranslation(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Reload Translation";
- ot->idname = "UI_OT_reloadtranslation";
- ot->description = "Force a full reload of UI translation";
+ /* identifiers */
+ ot->name = "Reload Translation";
+ ot->idname = "UI_OT_reloadtranslation";
+ ot->description = "Force a full reload of UI translation";
- /* callbacks */
- ot->exec = reloadtranslation_exec;
+ /* callbacks */
+ ot->exec = reloadtranslation_exec;
}
/** \} */
@@ -1489,61 +1511,61 @@ static void UI_OT_reloadtranslation(wmOperatorType *ot)
static ARegion *region_event_inside_for_screen(bContext *C, const int xy[2])
{
- bScreen *sc = CTX_wm_screen(C);
- if (sc) {
- for (ARegion *ar = sc->regionbase.first; ar; ar = ar->next) {
- if (BLI_rcti_isect_pt_v(&ar->winrct, xy)) {
- return ar;
- }
- }
- }
- return NULL;
+ bScreen *sc = CTX_wm_screen(C);
+ if (sc) {
+ for (ARegion *ar = sc->regionbase.first; ar; ar = ar->next) {
+ if (BLI_rcti_isect_pt_v(&ar->winrct, xy)) {
+ return ar;
+ }
+ }
+ }
+ return NULL;
}
static int ui_button_press_invoke(bContext *C, wmOperator *op, const wmEvent *event)
{
- const bool skip_depressed = RNA_boolean_get(op->ptr, "skip_depressed");
- ARegion *ar_prev = CTX_wm_region(C);
- ARegion *ar = region_event_inside_for_screen(C, &event->x);
+ const bool skip_depressed = RNA_boolean_get(op->ptr, "skip_depressed");
+ ARegion *ar_prev = CTX_wm_region(C);
+ ARegion *ar = region_event_inside_for_screen(C, &event->x);
- if (ar == NULL) {
- ar = ar_prev;
- }
+ if (ar == NULL) {
+ ar = ar_prev;
+ }
- CTX_wm_region_set(C, ar);
- uiBut *but = UI_context_active_but_get(C);
- CTX_wm_region_set(C, ar_prev);
+ CTX_wm_region_set(C, ar);
+ uiBut *but = UI_context_active_but_get(C);
+ CTX_wm_region_set(C, ar_prev);
- if (but == NULL) {
- return OPERATOR_PASS_THROUGH;
- }
- if (skip_depressed && (but->flag & (UI_SELECT | UI_SELECT_DRAW))) {
- return OPERATOR_PASS_THROUGH;
- }
+ if (but == NULL) {
+ return OPERATOR_PASS_THROUGH;
+ }
+ if (skip_depressed && (but->flag & (UI_SELECT | UI_SELECT_DRAW))) {
+ return OPERATOR_PASS_THROUGH;
+ }
- /* Weak, this is a workaround for 'UI_but_is_tool', which checks the operator type,
- * having this avoids a minor drawing glitch. */
- void *but_optype = but->optype;
+ /* Weak, this is a workaround for 'UI_but_is_tool', which checks the operator type,
+ * having this avoids a minor drawing glitch. */
+ void *but_optype = but->optype;
- UI_but_execute(C, but);
+ UI_but_execute(C, but);
- but->optype = but_optype;
+ but->optype = but_optype;
- WM_event_add_mousemove(C);
+ WM_event_add_mousemove(C);
- return OPERATOR_FINISHED;
+ return OPERATOR_FINISHED;
}
static void UI_OT_button_execute(wmOperatorType *ot)
{
- ot->name = "Press Button";
- ot->idname = "UI_OT_button_execute";
- ot->description = "Presses active button";
+ ot->name = "Press Button";
+ ot->idname = "UI_OT_button_execute";
+ ot->description = "Presses active button";
- ot->invoke = ui_button_press_invoke;
- ot->flag = OPTYPE_INTERNAL;
+ ot->invoke = ui_button_press_invoke;
+ ot->flag = OPTYPE_INTERNAL;
- RNA_def_boolean(ot->srna, "skip_depressed", 0, "Skip Depressed", "");
+ RNA_def_boolean(ot->srna, "skip_depressed", 0, "Skip Depressed", "");
}
/** \} */
@@ -1552,99 +1574,100 @@ static void UI_OT_button_execute(wmOperatorType *ot)
/** \name Drop Color Operator
* \{ */
-bool UI_drop_color_poll(struct bContext *C, wmDrag *drag, const wmEvent *UNUSED(event), const char **UNUSED(tooltip))
+bool UI_drop_color_poll(struct bContext *C,
+ wmDrag *drag,
+ const wmEvent *UNUSED(event),
+ const char **UNUSED(tooltip))
{
- /* should only return true for regions that include buttons, for now
- * return true always */
- if (drag->type == WM_DRAG_COLOR) {
- SpaceImage *sima = CTX_wm_space_image(C);
- ARegion *ar = CTX_wm_region(C);
-
- if (UI_but_active_drop_color(C)) {
- return 1;
- }
-
- if (sima && (sima->mode == SI_MODE_PAINT) &&
- sima->image && (ar && ar->regiontype == RGN_TYPE_WINDOW))
- {
- return 1;
- }
- }
-
- return 0;
+ /* should only return true for regions that include buttons, for now
+ * return true always */
+ if (drag->type == WM_DRAG_COLOR) {
+ SpaceImage *sima = CTX_wm_space_image(C);
+ ARegion *ar = CTX_wm_region(C);
+
+ if (UI_but_active_drop_color(C)) {
+ return 1;
+ }
+
+ if (sima && (sima->mode == SI_MODE_PAINT) && sima->image &&
+ (ar && ar->regiontype == RGN_TYPE_WINDOW)) {
+ return 1;
+ }
+ }
+
+ return 0;
}
void UI_drop_color_copy(wmDrag *drag, wmDropBox *drop)
{
- uiDragColorHandle *drag_info = drag->poin;
+ uiDragColorHandle *drag_info = drag->poin;
- RNA_float_set_array(drop->ptr, "color", drag_info->color);
- RNA_boolean_set(drop->ptr, "gamma", drag_info->gamma_corrected);
+ RNA_float_set_array(drop->ptr, "color", drag_info->color);
+ RNA_boolean_set(drop->ptr, "gamma", drag_info->gamma_corrected);
}
static int drop_color_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
{
- ARegion *ar = CTX_wm_region(C);
- uiBut *but = NULL;
- float color[4];
- bool gamma;
-
- RNA_float_get_array(op->ptr, "color", color);
- gamma = RNA_boolean_get(op->ptr, "gamma");
-
- /* find button under mouse, check if it has RNA color property and
- * if it does copy the data */
- but = ui_region_find_active_but(ar);
-
- if (but && but->type == UI_BTYPE_COLOR && but->rnaprop) {
- const int color_len = RNA_property_array_length(&but->rnapoin, but->rnaprop);
- BLI_assert(color_len <= 4);
-
- /* keep alpha channel as-is */
- if (color_len == 4) {
- color[3] = RNA_property_float_get_index(&but->rnapoin, but->rnaprop, 3);
- }
-
- if (RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA) {
- if (!gamma) {
- IMB_colormanagement_scene_linear_to_srgb_v3(color);
- }
- RNA_property_float_set_array(&but->rnapoin, but->rnaprop, color);
- RNA_property_update(C, &but->rnapoin, but->rnaprop);
- }
- else if (RNA_property_subtype(but->rnaprop) == PROP_COLOR) {
- if (gamma) {
- IMB_colormanagement_srgb_to_scene_linear_v3(color);
- }
- RNA_property_float_set_array(&but->rnapoin, but->rnaprop, color);
- RNA_property_update(C, &but->rnapoin, but->rnaprop);
- }
- }
- else {
- if (gamma) {
- srgb_to_linearrgb_v3_v3(color, color);
- }
-
- ED_imapaint_bucket_fill(C, color, op);
- }
-
- ED_region_tag_redraw(ar);
-
- return OPERATOR_FINISHED;
+ ARegion *ar = CTX_wm_region(C);
+ uiBut *but = NULL;
+ float color[4];
+ bool gamma;
+
+ RNA_float_get_array(op->ptr, "color", color);
+ gamma = RNA_boolean_get(op->ptr, "gamma");
+
+ /* find button under mouse, check if it has RNA color property and
+ * if it does copy the data */
+ but = ui_region_find_active_but(ar);
+
+ if (but && but->type == UI_BTYPE_COLOR && but->rnaprop) {
+ const int color_len = RNA_property_array_length(&but->rnapoin, but->rnaprop);
+ BLI_assert(color_len <= 4);
+
+ /* keep alpha channel as-is */
+ if (color_len == 4) {
+ color[3] = RNA_property_float_get_index(&but->rnapoin, but->rnaprop, 3);
+ }
+
+ if (RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA) {
+ if (!gamma) {
+ IMB_colormanagement_scene_linear_to_srgb_v3(color);
+ }
+ RNA_property_float_set_array(&but->rnapoin, but->rnaprop, color);
+ RNA_property_update(C, &but->rnapoin, but->rnaprop);
+ }
+ else if (RNA_property_subtype(but->rnaprop) == PROP_COLOR) {
+ if (gamma) {
+ IMB_colormanagement_srgb_to_scene_linear_v3(color);
+ }
+ RNA_property_float_set_array(&but->rnapoin, but->rnaprop, color);
+ RNA_property_update(C, &but->rnapoin, but->rnaprop);
+ }
+ }
+ else {
+ if (gamma) {
+ srgb_to_linearrgb_v3_v3(color, color);
+ }
+
+ ED_imapaint_bucket_fill(C, color, op);
+ }
+
+ ED_region_tag_redraw(ar);
+
+ return OPERATOR_FINISHED;
}
-
static void UI_OT_drop_color(wmOperatorType *ot)
{
- ot->name = "Drop Color";
- ot->idname = "UI_OT_drop_color";
- ot->description = "Drop colors to buttons";
+ ot->name = "Drop Color";
+ ot->idname = "UI_OT_drop_color";
+ ot->description = "Drop colors to buttons";
- ot->invoke = drop_color_invoke;
- ot->flag = OPTYPE_INTERNAL;
+ ot->invoke = drop_color_invoke;
+ ot->flag = OPTYPE_INTERNAL;
- RNA_def_float_color(ot->srna, "color", 3, NULL, 0.0, FLT_MAX, "Color", "Source color", 0.0, 1.0);
- RNA_def_boolean(ot->srna, "gamma", 0, "Gamma Corrected", "The source color is gamma corrected ");
+ RNA_def_float_color(ot->srna, "color", 3, NULL, 0.0, FLT_MAX, "Color", "Source color", 0.0, 1.0);
+ RNA_def_boolean(ot->srna, "gamma", 0, "Gamma Corrected", "The source color is gamma corrected ");
}
/** \} */
@@ -1655,31 +1678,31 @@ static void UI_OT_drop_color(wmOperatorType *ot)
void ED_operatortypes_ui(void)
{
- WM_operatortype_append(UI_OT_copy_data_path_button);
- WM_operatortype_append(UI_OT_copy_python_command_button);
- WM_operatortype_append(UI_OT_reset_default_button);
- WM_operatortype_append(UI_OT_assign_default_button);
- WM_operatortype_append(UI_OT_unset_property_button);
- WM_operatortype_append(UI_OT_override_type_set_button);
- WM_operatortype_append(UI_OT_override_remove_button);
- WM_operatortype_append(UI_OT_copy_to_selected_button);
- WM_operatortype_append(UI_OT_jump_to_target_button);
- WM_operatortype_append(UI_OT_reports_to_textblock); /* XXX: temp? */
- WM_operatortype_append(UI_OT_drop_color);
+ WM_operatortype_append(UI_OT_copy_data_path_button);
+ WM_operatortype_append(UI_OT_copy_python_command_button);
+ WM_operatortype_append(UI_OT_reset_default_button);
+ WM_operatortype_append(UI_OT_assign_default_button);
+ WM_operatortype_append(UI_OT_unset_property_button);
+ WM_operatortype_append(UI_OT_override_type_set_button);
+ WM_operatortype_append(UI_OT_override_remove_button);
+ WM_operatortype_append(UI_OT_copy_to_selected_button);
+ WM_operatortype_append(UI_OT_jump_to_target_button);
+ WM_operatortype_append(UI_OT_reports_to_textblock); /* XXX: temp? */
+ WM_operatortype_append(UI_OT_drop_color);
#ifdef WITH_PYTHON
- WM_operatortype_append(UI_OT_editsource);
- WM_operatortype_append(UI_OT_edittranslation_init);
+ WM_operatortype_append(UI_OT_editsource);
+ WM_operatortype_append(UI_OT_edittranslation_init);
#endif
- WM_operatortype_append(UI_OT_reloadtranslation);
- WM_operatortype_append(UI_OT_button_execute);
-
- /* external */
- WM_operatortype_append(UI_OT_eyedropper_color);
- WM_operatortype_append(UI_OT_eyedropper_colorramp);
- WM_operatortype_append(UI_OT_eyedropper_colorramp_point);
- WM_operatortype_append(UI_OT_eyedropper_id);
- WM_operatortype_append(UI_OT_eyedropper_depth);
- WM_operatortype_append(UI_OT_eyedropper_driver);
+ WM_operatortype_append(UI_OT_reloadtranslation);
+ WM_operatortype_append(UI_OT_button_execute);
+
+ /* external */
+ WM_operatortype_append(UI_OT_eyedropper_color);
+ WM_operatortype_append(UI_OT_eyedropper_colorramp);
+ WM_operatortype_append(UI_OT_eyedropper_colorramp_point);
+ WM_operatortype_append(UI_OT_eyedropper_id);
+ WM_operatortype_append(UI_OT_eyedropper_depth);
+ WM_operatortype_append(UI_OT_eyedropper_driver);
}
/**
@@ -1687,10 +1710,10 @@ void ED_operatortypes_ui(void)
*/
void ED_keymap_ui(wmKeyConfig *keyconf)
{
- WM_keymap_ensure(keyconf, "User Interface", 0, 0);
+ WM_keymap_ensure(keyconf, "User Interface", 0, 0);
- eyedropper_modal_keymap(keyconf);
- eyedropper_colorband_modal_keymap(keyconf);
+ eyedropper_modal_keymap(keyconf);
+ eyedropper_colorband_modal_keymap(keyconf);
}
/** \} */