[Bf-blender-cvs] [8919c68adb2] temp-spreadsheet-row-filter: Merge branch 'master' into temp-spreadsheet-row-filter
Hans Goudey
noreply at git.blender.org
Fri Apr 16 18:57:49 CEST 2021
Commit: 8919c68adb2329ac99c83b71c4c97a87693dac54
Author: Hans Goudey
Date: Fri Apr 16 11:57:39 2021 -0500
Branches: temp-spreadsheet-row-filter
https://developer.blender.org/rB8919c68adb2329ac99c83b71c4c97a87693dac54
Merge branch 'master' into temp-spreadsheet-row-filter
===================================================================
===================================================================
diff --cc release/scripts/startup/bl_ui/space_spreadsheet.py
index 3b8a68fd3e7,13e435a7350..4afafd91bb3
--- a/release/scripts/startup/bl_ui/space_spreadsheet.py
+++ b/release/scripts/startup/bl_ui/space_spreadsheet.py
@@@ -44,8 -60,47 +60,46 @@@ class SPREADSHEET_HT_header(bpy.types.H
layout.separator_spacer()
- if isinstance(obj, bpy.types.Object) and obj.mode == 'EDIT':
- layout.prop(space, "show_only_selected", text="Selected Only")
+ layout.prop(space, "use_filter", toggle=True, icon='FILTER', icon_only=True)
+ def draw_without_context_path(self, layout):
+ layout.label(text="No active context")
+
+ def draw_full_context_path(self, context, layout, context_path):
+ space = context.space_data
+ row = layout.row()
+ for ctx in context_path[:-1]:
+ subrow = row.row(align=True)
+ self.draw_spreadsheet_context(subrow, ctx)
+ self.draw_spreadsheet_context_path_icon(subrow, space)
+
+ self.draw_spreadsheet_context(row, context_path[-1])
+
+ def draw_collapsed_context_path(self, context, layout, context_path):
+ space = context.space_data
+ row = layout.row(align=True)
+ self.draw_spreadsheet_context(row, context_path[0])
+ if len(context_path) == 1:
+ return
+ self.draw_spreadsheet_context_path_icon(row, space)
+ if len(context_path) > 2:
+ self.draw_spreadsheet_context_path_icon(row, space, icon='DOT')
+ self.draw_spreadsheet_context_path_icon(row, space)
+ self.draw_spreadsheet_context(row, context_path[-1])
+
+ def draw_spreadsheet_context(self, layout, ctx):
+ if ctx.type == 'OBJECT':
+ if ctx.object is None:
+ layout.label(text="<no object>", icon='OBJECT_DATA')
+ else:
+ layout.label(text=ctx.object.name, icon='OBJECT_DATA')
+ elif ctx.type == 'MODIFIER':
+ layout.label(text=ctx.modifier_name, icon='MODIFIER')
+ elif ctx.type == 'NODE':
+ layout.label(text=ctx.node_name, icon='NODE')
+
+ def draw_spreadsheet_context_path_icon(self, layout, space, icon='RIGHTARROW_THIN'):
+ layout.prop(space, "display_context_path_collapsed", icon_only=True, emboss=False, icon=icon)
classes = (
SPREADSHEET_HT_header,
diff --cc source/blender/blenkernel/intern/screen.c
index dbcb47a9f49,d0d63192ebf..3981f279448
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@@ -1360,11 -1361,28 +1365,32 @@@ static void write_area(BlendWriter *wri
BLO_write_struct(writer, SpreadsheetColumn, column);
BLO_write_struct(writer, SpreadsheetColumnID, column->id);
BLO_write_string(writer, column->id->name);
+ /* While the display name is runtime data, we write it here, otherwise the row filters
+ * might not now there type on the first redraw, if the row filter region draws before the
+ * main region. */
+ BLO_write_string(writer, column->display_name);
}
+ LISTBASE_FOREACH (SpreadsheetContext *, context, &sspreadsheet->context_path) {
+ switch (context->type) {
+ case SPREADSHEET_CONTEXT_OBJECT: {
+ SpreadsheetContextObject *object_context = (SpreadsheetContextObject *)context;
+ BLO_write_struct(writer, SpreadsheetContextObject, object_context);
+ break;
+ }
+ case SPREADSHEET_CONTEXT_MODIFIER: {
+ SpreadsheetContextModifier *modifier_context = (SpreadsheetContextModifier *)context;
+ BLO_write_struct(writer, SpreadsheetContextModifier, modifier_context);
+ BLO_write_string(writer, modifier_context->modifier_name);
+ break;
+ }
+ case SPREADSHEET_CONTEXT_NODE: {
+ SpreadsheetContextNode *node_context = (SpreadsheetContextNode *)context;
+ BLO_write_struct(writer, SpreadsheetContextNode, node_context);
+ BLO_write_string(writer, node_context->node_name);
+ break;
+ }
+ }
+ }
}
}
}
@@@ -1721,11 -1740,26 +1747,30 @@@ static void direct_link_area(BlendDataR
LISTBASE_FOREACH (SpreadsheetColumn *, column, &sspreadsheet->columns) {
BLO_read_data_address(reader, &column->id);
BLO_read_data_address(reader, &column->id->name);
+ /* While the display name is runtime data, it is loaded here, otherwise the row filters
+ * might not now there type on the first redraw, if the row filter region draws before the
+ * main region. */
+ BLO_read_data_address(reader, &column->display_name);
}
+
+ BLO_read_list(reader, &sspreadsheet->context_path);
+ LISTBASE_FOREACH (SpreadsheetContext *, context, &sspreadsheet->context_path) {
+ switch (context->type) {
+ case SPREADSHEET_CONTEXT_NODE: {
+ SpreadsheetContextNode *node_context = (SpreadsheetContextNode *)context;
+ BLO_read_data_address(reader, &node_context->node_name);
+ break;
+ }
+ case SPREADSHEET_CONTEXT_MODIFIER: {
+ SpreadsheetContextModifier *modifier_context = (SpreadsheetContextModifier *)context;
+ BLO_read_data_address(reader, &modifier_context->modifier_name);
+ break;
+ }
+ case SPREADSHEET_CONTEXT_OBJECT: {
+ break;
+ }
+ }
+ }
}
}
diff --cc source/blender/blenloader/intern/versioning_290.c
index 90706c2b531,916c4bf0cad..c037deb48df
--- a/source/blender/blenloader/intern/versioning_290.c
+++ b/source/blender/blenloader/intern/versioning_290.c
@@@ -2055,21 -2044,31 +2044,49 @@@ void blo_do_versions_290(FileData *fd,
}
}
+ /* Consolidate node and final evaluation modes. */
+ LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
+ LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
+ LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
+ if (sl->spacetype == SPACE_SPREADSHEET) {
+ SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)sl;
+ if (sspreadsheet->object_eval_state == 2) {
+ sspreadsheet->object_eval_state = SPREADSHEET_OBJECT_EVAL_STATE_EVALUATED;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Versioning code until next subversion bump goes here.
+ *
+ * \note Be sure to check when bumping the version:
+ * - "versioning_userdef.c", #blo_do_versions_userdef
+ * - "versioning_userdef.c", #do_versions_theme
+ *
+ * \note Keep this message at the bottom of the function.
+ */
+ {
+ /* Keep this block, even when empty. */
++
++ /* Add a properties sidebar to the spreadsheet editor. */
+ LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
+ LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
+ LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
+ if (sl->spacetype == SPACE_SPREADSHEET) {
+ ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
+ &sl->regionbase;
+ ARegion *new_sidebar = do_versions_add_region_if_not_found(
+ regionbase, RGN_TYPE_UI, "sidebar for spreadsheet", RGN_TYPE_FOOTER);
+ if (new_sidebar != NULL) {
+ new_sidebar->alignment = RGN_ALIGN_RIGHT;
+ new_sidebar->flag |= RGN_FLAG_HIDDEN;
+ }
+ }
+ }
+ }
+ }
}
}
diff --cc source/blender/editors/space_spreadsheet/CMakeLists.txt
index a5fb72c2e5e,b2a0905d4a2..7e3f3db9bc8
--- a/source/blender/editors/space_spreadsheet/CMakeLists.txt
+++ b/source/blender/editors/space_spreadsheet/CMakeLists.txt
@@@ -40,9 -40,8 +41,10 @@@ set(SR
spreadsheet_draw.cc
spreadsheet_layout.cc
spreadsheet_ops.cc
+ spreadsheet_row_filter.cc
+ spreadsheet_row_filter_ui.cc
+ spreadsheet_context.hh
spreadsheet_cell_value.hh
spreadsheet_column.hh
spreadsheet_column_values.hh
diff --cc source/blender/editors/space_spreadsheet/space_spreadsheet.cc
index a1e94d1c64a,190f50ed443..a22057a2e50
--- a/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
+++ b/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
@@@ -143,12 -128,28 +150,30 @@@ static SpaceLink *spreadsheet_duplicate
return (SpaceLink *)sspreadsheet_new;
}
-static void spreadsheet_keymap(wmKeyConfig *UNUSED(keyconf))
+static void spreadsheet_keymap(wmKeyConfig *keyconf)
{
+ /* Entire editor only. */
+ WM_keymap_ensure(keyconf, "Spreadsheet Generic", SPACE_SPREADSHEET, 0);
}
+ static void spreadsheet_id_remap(ScrArea *UNUSED(area), SpaceLink *slink, ID *old_id, ID *new_id)
+ {
+ SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)slink;
+ LISTBASE_FOREACH (SpreadsheetContext *, context, &sspreadsheet->context_path) {
+ if (context->type == SPREADSHEET_CONTEXT_OBJECT) {
+ SpreadsheetContextObject *object_context = (SpreadsheetContextObject *)context;
+ if ((ID *)object_context->object == old_id) {
+ if (new_id && GS(new_id->name) == ID_OB) {
+ object_context->object = (Object *)new_id;
+ }
+ else {
+ object_context->object = nullptr;
+ }
+ }
+ }
+ }
+ }
+
static void spreadsheet_main_region_init(wmWindowManager *wm, ARegion *region)
{
region->v2d.scroll = V2D_SCROLL_RIGHT | V2D_SCROLL_BOTTOM;
@@@ -159,25 -160,87 +184,94 @@@
UI_view2d_region_reinit(®ion->v2d, V2D_COMMONVIEW_LIST, region->winx, region->winy);
- wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "View2D Buttons List", 0, 0);
- WM_event_add_keymap_handler(®ion->handlers, keymap);
+ {
+ wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "View2D Buttons List", 0, 0);
+ WM_event_add_keymap_handler(®ion->handlers, keymap);
+ }
+ {
+ wmKeyMap *keymap = WM_keymap_ensure(
+ wm->defaultconf, "Spreadsheet Generic"
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list