[Bf-blender-cvs] [e2cf5b8b2ea] temp-spreadsheet-editor: draw integer attributes
Jacques Lucke
noreply at git.blender.org
Thu Feb 25 13:33:57 CET 2021
Commit: e2cf5b8b2eab901f1e5c42acbeb22b7007e3c752
Author: Jacques Lucke
Date: Thu Feb 25 12:50:20 2021 +0100
Branches: temp-spreadsheet-editor
https://developer.blender.org/rBe2cf5b8b2eab901f1e5c42acbeb22b7007e3c752
draw integer attributes
===================================================================
M source/blender/editors/space_spreadsheet/space_spreadsheet.cc
===================================================================
diff --git a/source/blender/editors/space_spreadsheet/space_spreadsheet.cc b/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
index 43c03be7889..117108123ba 100644
--- a/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
+++ b/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
@@ -516,6 +516,37 @@ template<typename GetValueF> class FloatCellDrawer : public CellDrawer {
}
};
+template<typename GetValueF> class IntCellDrawer : public CellDrawer {
+ private:
+ const GetValueF get_value_;
+
+ public:
+ IntCellDrawer(GetValueF get_value) : get_value_(std::move(get_value))
+ {
+ }
+
+ void draw_cell(const CellDrawParams ¶ms) const final
+ {
+ const int value = get_value_(params.index);
+ const std::string value_str = std::to_string(value);
+ uiDefIconTextBut(params.block,
+ UI_BTYPE_LABEL,
+ 0,
+ ICON_NONE,
+ value_str.c_str(),
+ params.xmin,
+ params.ymin,
+ params.width,
+ params.height,
+ nullptr,
+ 0,
+ 0,
+ 0,
+ 0,
+ nullptr);
+ }
+};
+
static void gather_spreadsheet_data(const bContext *C,
SpreadsheetLayout &spreadsheet_layout,
ResourceCollector &resources,
@@ -560,41 +591,41 @@ static void gather_spreadsheet_data(const bContext *C,
});
for (StringRef attribute_name : attribute_names) {
- ReadAttributePtr attribute = component->attribute_try_get_for_read(attribute_name);
- if (attribute->domain() != ATTR_DOMAIN_POINT) {
+ ReadAttributePtr owned_attribute = component->attribute_try_get_for_read(attribute_name);
+ if (owned_attribute->domain() != ATTR_DOMAIN_POINT) {
continue;
}
+ ReadAttribute *attribute = owned_attribute.get();
+ resources.add(std::move(owned_attribute), "read attribute");
const CustomDataType data_type = attribute->custom_data_type();
switch (data_type) {
case CD_PROP_FLOAT: {
- TextColumnHeaderDrawer &header_drawer = resources.construct<TextColumnHeaderDrawer>(
+ ColumnHeaderDrawer &header_drawer = resources.construct<TextColumnHeaderDrawer>(
"attribute header drawer", attribute_name);
- auto get_value = [attribute = std::move(attribute)](int index) {
+ auto get_value = [attribute](int index) {
float value;
attribute->get(index, &value);
return value;
};
CellDrawer &cell_drawer = resources.construct<FloatCellDrawer<decltype(get_value)>>(
- "float cell drawer", std::move(get_value));
+ "float cell drawer", get_value);
spreadsheet_layout.columns.append({100, &header_drawer, &cell_drawer});
break;
}
case CD_PROP_FLOAT3: {
- ReadAttribute *attribute_ptr = attribute.get();
- resources.add(std::move(attribute), "read attribute");
static std::array<char, 3> axis_char = {'X', 'Y', 'Z'};
for (const int i : IndexRange(3)) {
std::string header_name = attribute_name + " " + axis_char[i];
ColumnHeaderDrawer &header_drawer = resources.construct<TextColumnHeaderDrawer>(
"attribute header drawer", header_name);
- auto get_value = [attribute_ptr, i](int index) {
+ auto get_value = [attribute, i](int index) {
float3 value;
- attribute_ptr->get(index, &value);
+ attribute->get(index, &value);
return value[i];
};
@@ -605,6 +636,22 @@ static void gather_spreadsheet_data(const bContext *C,
}
break;
}
+ case CD_PROP_INT32: {
+ ColumnHeaderDrawer &header_drawer = resources.construct<TextColumnHeaderDrawer>(
+ "attribute header drawer", attribute_name);
+
+ auto get_value = [attribute](int index) {
+ int value;
+ attribute->get(index, &value);
+ return value;
+ };
+
+ CellDrawer &cell_drawer = resources.construct<IntCellDrawer<decltype(get_value)>>(
+ "int cell drawer", get_value);
+
+ spreadsheet_layout.columns.append({100, &header_drawer, &cell_drawer});
+ break;
+ }
default:
break;
}
More information about the Bf-blender-cvs
mailing list