[Bf-blender-cvs] [5e5242dbc98] temp-spreadsheet-row-filter: Compare display names instead of the column ID

Hans Goudey noreply at git.blender.org
Fri Apr 16 18:57:49 CEST 2021


Commit: 5e5242dbc98915ef5e631db689b1ab89b1402f40
Author: Hans Goudey
Date:   Wed Apr 14 12:50:18 2021 -0500
Branches: temp-spreadsheet-row-filter
https://developer.blender.org/rB5e5242dbc98915ef5e631db689b1ab89b1402f40

Compare display names instead of the column ID

===================================================================

M	source/blender/blenkernel/intern/screen.c
M	source/blender/editors/space_spreadsheet/space_spreadsheet.cc
M	source/blender/editors/space_spreadsheet/spreadsheet_column.cc
M	source/blender/editors/space_spreadsheet/spreadsheet_column.hh
M	source/blender/editors/space_spreadsheet/spreadsheet_ops.cc
M	source/blender/editors/space_spreadsheet/spreadsheet_row_filter.cc
M	source/blender/editors/space_spreadsheet/spreadsheet_row_filter.hh
M	source/blender/editors/space_spreadsheet/spreadsheet_row_filter_ui.cc
M	source/blender/makesdna/DNA_space_types.h
M	source/blender/makesrna/intern/rna_space.c

===================================================================

diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index f4a65788b82..dbcb47a9f49 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -1354,14 +1354,16 @@ static void write_area(BlendWriter *writer, ScrArea *area)
 
       LISTBASE_FOREACH (SpreadsheetRowFilter *, row_filter, &sspreadsheet->row_filters) {
         BLO_write_struct(writer, SpreadsheetRowFilter, row_filter);
-        BLO_write_struct(writer, SpreadsheetColumnID, row_filter->column_id);
-        BLO_write_string(writer, row_filter->column_id->name);
       }
 
       LISTBASE_FOREACH (SpreadsheetColumn *, column, &sspreadsheet->columns) {
         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);
       }
     }
   }
@@ -1714,17 +1716,15 @@ static void direct_link_area(BlendDataReader *reader, ScrArea *area)
     else if (sl->spacetype == SPACE_SPREADSHEET) {
       SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)sl;
       sspreadsheet->runtime = NULL;
-
       BLO_read_list(reader, &sspreadsheet->row_filters);
-      LISTBASE_FOREACH (SpreadsheetRowFilter *, row_filter, &sspreadsheet->row_filters) {
-        BLO_read_data_address(reader, &row_filter->column_id);
-        BLO_read_data_address(reader, &row_filter->column_id->name);
-      }
-
       BLO_read_list(reader, &sspreadsheet->columns);
       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);
       }
     }
   }
diff --git a/source/blender/editors/space_spreadsheet/space_spreadsheet.cc b/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
index 9e481056fbf..a1e94d1c64a 100644
--- a/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
+++ b/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
@@ -251,7 +251,7 @@ static void update_visible_columns(ListBase &columns, DataSource &data_source)
         SpreadsheetColumn *new_column = spreadsheet_column_new(new_id);
 
         /* Copy the current data type to the column storage for convenience. */
-        new_column->data_type = values->type();
+        spreadsheet_column_assign_runtime_data(new_column, values->type(), values->name());
 
         BLI_addtail(&columns, new_column);
       }
@@ -298,10 +298,9 @@ static void spreadsheet_main_region_draw(const bContext *C, ARegion *region)
   ARegion *footer = BKE_area_find_region_type(CTX_wm_area(C), RGN_TYPE_FOOTER);
   ED_region_tag_redraw(footer);
 
-  /* Tag the sidebar for redraw, because the main region updates data for it. */
-  ARegion *sidebar = BKE_area_find_region_type(CTX_wm_area(C), RGN_TYPE_UI);
-  ED_region_tag_redraw(sidebar);
-
+  // /* Tag the sidebar for redraw, because the main region updates data for it. */
+  // ARegion *sidebar = BKE_area_find_region_type(CTX_wm_area(C), RGN_TYPE_UI);
+  // ED_region_tag_redraw(sidebar);
   // sspreadsheet->runtime->data_source = *data_source;
 }
 
diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_column.cc b/source/blender/editors/space_spreadsheet/spreadsheet_column.cc
index 6c573ce7238..1db7e35ff3b 100644
--- a/source/blender/editors/space_spreadsheet/spreadsheet_column.cc
+++ b/source/blender/editors/space_spreadsheet/spreadsheet_column.cc
@@ -57,16 +57,28 @@ SpreadsheetColumn *spreadsheet_column_new(SpreadsheetColumnID *column_id)
   return column;
 }
 
+void spreadsheet_column_assign_runtime_data(SpreadsheetColumn *column,
+                                            const eSpreadsheetColumnValueType data_type,
+                                            const StringRef display_name)
+{
+  column->data_type = data_type;
+  column->display_name = BLI_strdup(display_name.data());
+}
+
 SpreadsheetColumn *spreadsheet_column_copy(const SpreadsheetColumn *src_column)
 {
   SpreadsheetColumnID *new_column_id = spreadsheet_column_id_copy(src_column->id);
   SpreadsheetColumn *new_column = spreadsheet_column_new(new_column_id);
+  if (src_column->display_name != nullptr) {
+    new_column->display_name = BLI_strdup(src_column->display_name);
+  }
   return new_column;
 }
 
 void spreadsheet_column_free(SpreadsheetColumn *column)
 {
   spreadsheet_column_id_free(column->id);
+  MEM_SAFE_FREE(column->display_name);
   MEM_freeN(column);
 }
 
diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_column.hh b/source/blender/editors/space_spreadsheet/spreadsheet_column.hh
index 0f74ee0141a..8a62ab415f6 100644
--- a/source/blender/editors/space_spreadsheet/spreadsheet_column.hh
+++ b/source/blender/editors/space_spreadsheet/spreadsheet_column.hh
@@ -43,6 +43,9 @@ void spreadsheet_column_id_free(SpreadsheetColumnID *column_id);
 
 SpreadsheetColumn *spreadsheet_column_new(SpreadsheetColumnID *column_id);
 SpreadsheetColumn *spreadsheet_column_copy(const SpreadsheetColumn *src_column);
+void spreadsheet_column_assign_runtime_data(SpreadsheetColumn *column,
+                                            const eSpreadsheetColumnValueType data_type,
+                                            const StringRef display_name);
 void spreadsheet_column_free(SpreadsheetColumn *column);
 
 }  // namespace blender::ed::spreadsheet
diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_ops.cc b/source/blender/editors/space_spreadsheet/spreadsheet_ops.cc
index f32c15401c9..0d19e3f1a41 100644
--- a/source/blender/editors/space_spreadsheet/spreadsheet_ops.cc
+++ b/source/blender/editors/space_spreadsheet/spreadsheet_ops.cc
@@ -37,8 +37,7 @@ static int row_filter_add_exec(bContext *C, wmOperator *UNUSED(op))
 {
   SpaceSpreadsheet *sspreadsheet = CTX_wm_space_spreadsheet(C);
 
-  SpreadsheetColumnID *column_id = spreadsheet_column_id_new();
-  SpreadsheetRowFilter *row_filter = spreadsheet_row_filter_new(column_id);
+  SpreadsheetRowFilter *row_filter = spreadsheet_row_filter_new();
   BLI_addtail(&sspreadsheet->row_filters, row_filter);
 
   WM_event_add_notifier(C, NC_SPACE | ND_SPACE_SPREADSHEET, sspreadsheet);
diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.cc b/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.cc
index 4a9af0fd3f5..3dbea7afae2 100644
--- a/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.cc
+++ b/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.cc
@@ -19,6 +19,7 @@
 #include "BLI_listbase.h"
 
 #include "DNA_screen_types.h"
+#include "DNA_space_types.h"
 
 #include "DEG_depsgraph_query.h"
 
@@ -59,8 +60,7 @@ static void apply_row_filter(const SpreadsheetLayout &spreadsheet_layout,
 {
   for (const ColumnLayout &column : spreadsheet_layout.columns) {
     const ColumnValues &values = *column.values;
-    /* TODO: Compare full column ID here instead of just the name? */
-    if (values.name() != row_filter.column_id->name) {
+    if (values.name() != row_filter.column_name) {
       continue;
     }
 
@@ -215,28 +215,31 @@ Span<int64_t> spreadsheet_filter_rows(const SpaceSpreadsheet &sspreadsheet,
   return indices;
 }
 
-SpreadsheetRowFilter *spreadsheet_row_filter_new(SpreadsheetColumnID *column_id)
+SpreadsheetRowFilter *spreadsheet_row_filter_new()
 {
   SpreadsheetRowFilter *row_filter = (SpreadsheetRowFilter *)MEM_callocN(
       sizeof(SpreadsheetRowFilter), __func__);
-  row_filter->threshold = 0.01f;
-  row_filter->operation = SPREADSHEET_ROW_FILTER_LESS;
   row_filter->flag = (SPREADSHEET_ROW_FILTER_UI_EXPAND | SPREADSHEET_ROW_FILTER_ENABLED);
-  row_filter->column_id = column_id;
+  row_filter->operation = SPREADSHEET_ROW_FILTER_LESS;
+  row_filter->threshold = 0.01f;
+  row_filter->column_name[0] = '\0';
 
   return row_filter;
 }
 
 SpreadsheetRowFilter *spreadsheet_row_filter_copy(const SpreadsheetRowFilter *src_row_filter)
 {
-  SpreadsheetColumnID *new_column_id = spreadsheet_column_id_copy(src_row_filter->column_id);
-  SpreadsheetRowFilter *new_filter = spreadsheet_row_filter_new(new_column_id);
+  SpreadsheetRowFilter *new_filter = spreadsheet_row_filter_new();
+
+  memcpy(new_filter, src_row_filter, sizeof(SpreadsheetRowFilter));
+  new_filter->next = nullptr;
+  new_filter->prev = nullptr;
+
   return new_filter;
 }
 
 void spreadsheet_row_filter_free(SpreadsheetRowFilter *column)
 {
-  spreadsheet_column_id_free(column->column_id);
   MEM_freeN(column);
 }
 
diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.hh b/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.hh
index 33c4a939881..6254175162b 100644
--- a/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.hh
+++ b/source/blender/editors/space_spreadsheet/spreadsheet_row_filter.hh
@@ -30,7 +30,7 @@ Span<int64_t> spreadsheet_filter_rows(const SpaceSpreadsheet &sspreadsheet,
                                       const DataSource &data_source,
                                       ResourceScope &scope);
 
-SpreadsheetRowFilter *spreadsheet_row_filter_new(SpreadsheetColumnID *column_id);
+SpreadsheetRowFilter *spreadsheet_row_filter_new();
 SpreadsheetRowFilter *spreadsheet_row_filter_copy(const SpreadsheetRowFilter *src_row_filter);
 void spreadsheet_row_filter_free(SpreadsheetRowFilter *column);
 
diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_row_filter_ui.cc b/source/blender/editors/space_spreadsheet/spreadsheet_row_filter_ui.cc
index 185141b9276..3a3a226a4d4 100644
--- a/source/blender/editors/space_spreadsheet/spreadsheet_row_filter_ui.cc
+++ b/source/blender/editors/space_spr

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list