[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(&region->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(&region->handlers, keymap);
 +  {
 +    wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "View2D Buttons List", 0, 0);
 +    WM_event_add_keymap_handler(&region->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