[Bf-blender-cvs] [8ff310861c5] temp-spreadsheet-editor-python-prototyping: cleanup
Jacques Lucke
noreply at git.blender.org
Fri Mar 5 13:37:04 CET 2021
Commit: 8ff310861c5776b770020068e5a85d0a5aa1b7e4
Author: Jacques Lucke
Date: Fri Mar 5 13:36:51 2021 +0100
Branches: temp-spreadsheet-editor-python-prototyping
https://developer.blender.org/rB8ff310861c5776b770020068e5a85d0a5aa1b7e4
cleanup
===================================================================
M release/scripts/modules/bpy_spreadsheet.py
M source/blender/editors/space_spreadsheet/spreadsheet_from_python.cc
===================================================================
diff --git a/release/scripts/modules/bpy_spreadsheet.py b/release/scripts/modules/bpy_spreadsheet.py
index 63786aa139b..7635223cf5f 100644
--- a/release/scripts/modules/bpy_spreadsheet.py
+++ b/release/scripts/modules/bpy_spreadsheet.py
@@ -19,28 +19,42 @@
import bpy
class SpreadsheetDrawer:
- def __init__(self):
- self.objects = list(bpy.context.selected_objects)
+ def get_row_amount(self):
+ return 0
+
+ def get_column_amount(self):
+ return 0
+
+ def get_top_row_cell(self, column_index):
+ return None
+
+ def get_left_column_cell(self, row_index):
+ return None
+
+ def get_content_cell(self, row_index, column_index):
+ return None
+
+class ObjectPropertiesSpreadsheet(SpreadsheetDrawer):
+ def __init__(self, objects, property_names):
+ self.objects = objects
+ self.property_names = property_names
def get_row_amount(self):
return len(self.objects)
def get_column_amount(self):
- return 2
+ return len(self.property_names)
def get_top_row_cell(self, column_index):
- return ("Name", "Pass Index")[column_index]
+ return self.property_names[column_index]
def get_left_column_cell(self, row_index):
return row_index
def get_content_cell(self, row_index, column_index):
ob = self.objects[row_index]
- if column_index == 0:
- return (ob, "name")
- elif column_index == 1:
- return (ob, "pass_index")
+ return (ob, self.property_names[column_index])
def get_spreadsheet_drawer(spreadsheet_space: bpy.types.SpaceSpreadsheet):
- return SpreadsheetDrawer()
+ return ObjectPropertiesSpreadsheet(list(bpy.context.selected_objects), ["name", "location.x", "location.y", "location.z"])
diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_from_python.cc b/source/blender/editors/space_spreadsheet/spreadsheet_from_python.cc
index 01703bbaacb..2de9e9e3d34 100644
--- a/source/blender/editors/space_spreadsheet/spreadsheet_from_python.cc
+++ b/source/blender/editors/space_spreadsheet/spreadsheet_from_python.cc
@@ -138,21 +138,25 @@ class PythonSpreadsheetDrawer : public SpreadsheetDrawer {
}
if (PyTuple_Check(py_cell_content)) {
PyObject *py_rna_ptr = PyTuple_GetItem(py_cell_content, 0);
- PyObject *py_name = PyTuple_GetItem(py_cell_content, 1);
- const char *prop_name = PyUnicode_AsUTF8(py_name);
+ PyObject *py_prop_path = PyTuple_GetItem(py_cell_content, 1);
+ const char *prop_path = PyUnicode_AsUTF8(py_prop_path);
BPy_StructRNA *py_struct_rna = (BPy_StructRNA *)py_rna_ptr;
- PointerRNA ptr = py_struct_rna->ptr;
- PropertyRNA *prop = RNA_struct_find_property(&ptr, prop_name);
- uiDefAutoButR(params.block,
- &ptr,
- prop,
- -1,
- "",
- ICON_NONE,
- params.xmin,
- params.ymin,
- params.width,
- params.height);
+ PointerRNA ptr;
+ PropertyRNA *prop = nullptr;
+ int index;
+ RNA_path_resolve_full(&py_struct_rna->ptr, prop_path, &ptr, &prop, &index);
+ if (prop != nullptr) {
+ uiDefAutoButR(params.block,
+ &ptr,
+ prop,
+ index,
+ "",
+ ICON_NONE,
+ params.xmin,
+ params.ymin,
+ params.width,
+ params.height);
+ }
}
}
};
More information about the Bf-blender-cvs
mailing list