[Bf-blender-cvs] [d0fd4079852] temp-spreadsheet-row-filter: New implementation of the UI in a sidebar

Hans Goudey noreply at git.blender.org
Wed Apr 14 04:44:22 CEST 2021


Commit: d0fd4079852b2e1cdc300610b04622f05742a379
Author: Hans Goudey
Date:   Tue Apr 13 21:33:18 2021 -0500
Branches: temp-spreadsheet-row-filter
https://developer.blender.org/rBd0fd4079852b2e1cdc300610b04622f05742a379

New implementation of the UI in a sidebar

Includes panels and drag and drop

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

M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
M	release/scripts/startup/bl_ui/space_spreadsheet.py
M	source/blender/blenkernel/intern/screen.c
M	source/blender/blenloader/intern/versioning_290.c
M	source/blender/editors/interface/interface_panel.c
M	source/blender/editors/space_spreadsheet/CMakeLists.txt
M	source/blender/editors/space_spreadsheet/space_spreadsheet.cc
M	source/blender/editors/space_spreadsheet/spreadsheet_column_values.hh
M	source/blender/editors/space_spreadsheet/spreadsheet_intern.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
A	source/blender/editors/space_spreadsheet/spreadsheet_row_filter_ui.cc
A	source/blender/editors/space_spreadsheet/spreadsheet_row_filter_ui.hh
M	source/blender/makesdna/DNA_space_types.h
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_space.c

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

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 68e273f2244..b0dd7e6577d 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -2994,6 +2994,23 @@ def km_clip_dopesheet_editor(_params):
 
     return keymap
 
+def km_spreadsheet_generic(_params):
+    items = []
+    keymap = (
+        "Spreadsheet Generic",
+        {"space_type": 'SPREADSHEET', "region_type": 'WINDOW'},
+        {"items": items},
+    )
+
+    items.extend([
+        *_template_space_region_type_toggle(
+            toolbar_key={"type": 'T', "value": 'PRESS'},
+            sidebar_key={"type": 'N', "value": 'PRESS'},
+        ),
+    ])
+
+    return keymap
+
 
 # ------------------------------------------------------------------------------
 # Animation
@@ -7037,6 +7054,7 @@ def generate_keymaps(params=None):
         km_image(params),
         km_node_generic(params),
         km_node_editor(params),
+        km_spreadsheet_generic(params),
         km_info(params),
         km_file_browser(params),
         km_file_browser_main(params),
diff --git a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
index 91f153a0f42..19a516bbc81 100644
--- a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
+++ b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
@@ -2145,6 +2145,24 @@ def km_clip_dopesheet_editor(_params):
     return keymap
 
 
+def km_spreadsheet_generic(_params):
+    items = []
+    keymap = (
+        "Spreadsheet Generic",
+        {"space_type": 'SPREADSHEET', "region_type": 'WINDOW'},
+        {"items": items},
+    )
+
+    items.extend([
+        *_template_space_region_type_toggle(
+            toolbar_key={"type": 'T', "value": 'PRESS'},
+            sidebar_key={"type": 'N', "value": 'PRESS'},
+        ),
+    ])
+
+    return keymap
+
+
 # ------------------------------------------------------------------------------
 # Animation
 
@@ -4070,6 +4088,7 @@ def generate_keymaps_impl(params=None):
         km_image(params),
         km_node_generic(params),
         km_node_editor(params),
+        km_spreadsheet_generic(params),
         km_info(params),
         km_file_browser(params),
         km_file_browser_main(params),
diff --git a/release/scripts/startup/bl_ui/space_spreadsheet.py b/release/scripts/startup/bl_ui/space_spreadsheet.py
index 29bcc0a2a57..9e20982d566 100644
--- a/release/scripts/startup/bl_ui/space_spreadsheet.py
+++ b/release/scripts/startup/bl_ui/space_spreadsheet.py
@@ -18,113 +18,6 @@
 
 import bpy
 
-def get_visible_column_data_type(columns, column_name):
-    for column in columns:
-        if column.id.name == column_name:
-            return column.data_type
-    return 'FLOAT' # Show float data type by default, arbitrary choice.
-
-def get_operation_string(operation):
-    if operation == 'EQUAL':
-        return "=="
-    elif operation == 'GREATER':
-        return ">"
-    elif operation == 'LESS':
-        return "<"
-    return ""
-
-def get_value_string(filter, data_type):
-    if data_type == 'FLOAT':
-        return "%.3f" % filter.value_float
-    elif data_type == 'INT32':
-        return str(filter.value_int)
-    elif data_type == 'BOOLEAN':
-        return "True" if filter.value_boolean else "False"
-    return ""
-
-def get_filter_label_text(filter, column_name, operation, data_type):
-    if len(column_name) == 0:
-        return "Filter"
-
-    return "%s %s %s" % (column_name, 
-                         get_operation_string(operation), 
-                         get_value_string(filter, data_type))
-    
-
-def draw_filter(layout, filter, columns, index):
-    box = layout.box()
-
-    column_name = filter.column_name
-    operation = filter.operation
-    data_type = get_visible_column_data_type(columns, column_name)
-    label_text = get_filter_label_text(filter, column_name, operation, data_type)
-
-    row = box.row(align=True)
-    row.prop(filter, "show_expanded", text="", emboss=False)
-    row.prop(filter, "enabled", text="")
-    row.label(text=label_text)
-    sub = row.row()
-    sub.alignment = 'RIGHT'
-    sub.emboss = 'NONE'
-    sub.operator("spreadsheet.remove_rule", text="", icon='X').index = index
-
-    if not filter.show_expanded:
-        return
-    
-    box.prop(filter, "column_name", text="")
-    if data_type != 'BOOLEAN':
-        box.prop(filter, "operation", text="")
-
-    if data_type == 'FLOAT':
-        box.prop(filter, "value_float", text="Value")
-        if operation == 'EQUAL':
-            box.prop(filter, "threshold")
-    elif data_type == 'INT32':
-        box.prop(filter, "value_int", text="Value")
-    elif data_type == 'BOOLEAN':
-        box.prop(filter, "value_boolean", text="Value")
-
-
-class SPREADSHEET_PT_filter_rules(bpy.types.Panel):
-    bl_space_type = 'SPREADSHEET'
-    bl_region_type = 'HEADER'
-    bl_label = "Filters"
-    bl_parent_id = 'SPREADSHEET_PT_filter'
-
-    def draw_header(self, context):
-        layout = self.layout
-        layout.label(text="Filters")
-        sub = layout.row()
-        sub.alignment = 'RIGHT'
-        sub.emboss = 'NONE'
-        sub.operator("spreadsheet.add_rule", text="", icon='ADD')
-
-    def draw(self, context):
-        layout = self.layout
-        space = context.space_data
-
-        index = 0
-        for filter in space.row_filters:
-            draw_filter(layout, filter, space.columns, index)
-            index += 1
-
-
-class SPREADSHEET_PT_filter(bpy.types.Panel):
-    bl_space_type = 'SPREADSHEET'
-    bl_region_type = 'HEADER'
-    bl_label = "Filter"
-
-    def draw(self, context):
-        layout = self.layout
-        space = context.space_data
-
-        pinned_id = space.pinned_id
-        used_id = pinned_id if pinned_id else context.active_object
-
-        if isinstance(used_id, bpy.types.Object) and used_id.mode == 'EDIT':
-            layout.prop(space, "show_only_selected", text="Selected Only")
-
-
 class SPREADSHEET_HT_header(bpy.types.Header):
     bl_space_type = 'SPREADSHEET'
 
@@ -152,13 +45,10 @@ class SPREADSHEET_HT_header(bpy.types.Header):
 
         row = layout.row(align=True)
         row.prop(space, "use_filter", toggle=True, icon='FILTER', icon_only=True)
-        row.popover("SPREADSHEET_PT_filter", text="")
 
 
 classes = (
     SPREADSHEET_HT_header,
-    SPREADSHEET_PT_filter,
-    SPREADSHEET_PT_filter_rules,
 )
 
 if __name__ == "__main__":  # Only for live edit.
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index ca6b5de0079..f4a65788b82 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -1354,7 +1354,8 @@ 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_string(writer, row_filter->column_name);
+        BLO_write_struct(writer, SpreadsheetColumnID, row_filter->column_id);
+        BLO_write_string(writer, row_filter->column_id->name);
       }
 
       LISTBASE_FOREACH (SpreadsheetColumn *, column, &sspreadsheet->columns) {
@@ -1716,7 +1717,8 @@ static void direct_link_area(BlendDataReader *reader, ScrArea *area)
 
       BLO_read_list(reader, &sspreadsheet->row_filters);
       LISTBASE_FOREACH (SpreadsheetRowFilter *, row_filter, &sspreadsheet->row_filters) {
-        BLO_read_data_address(reader, &row_filter->column_name);
+        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);
diff --git a/source/blender/blenloader/intern/versioning_290.c b/source/blender/blenloader/intern/versioning_290.c
index 819d077bf0a..90706c2b531 100644
--- a/source/blender/blenloader/intern/versioning_290.c
+++ b/source/blender/blenloader/intern/versioning_290.c
@@ -2054,5 +2054,22 @@ void blo_do_versions_290(FileData *fd, Library *UNUSED(lib), Main *bmain)
         }
       }
     }
+
+    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 --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c
index 6505a7cd76a..6694535e3af 100644
--- a/source/blender/editors/interface/interface_panel.c
+++ b/source/blender/editors/interface/interface_panel.c
@@ -674,7 +674,7 @@ static bool panel_type_context_poll(ARegion *region,
                                     const PanelType *panel_type,
                                     const char *context)
 {
-  if (UI_panel_category_is_visible(region)) {
+  if (!BLI_listbase_is_empty(&region->panels_category)) {
     return STREQ(panel_type->category, UI_panel_category_active_get(region, false));
   }
 
diff --git a/source/blender/editors/space_spreadsheet/CMakeLists.txt b/source/blender/editors/space_spreadsheet/CMakeLists.txt
index 1f0a4ecb208..a5fb72c2e5e 100644
--- a/source/blender/editors/space_spreadsheet/CMakeLists.txt
+++ b/source/blender/editors/space_spreadsheet/CMakeLists.txt
@@ -20,6 +20,7 @@ set(INC
   ../../blenfont
   ../../blenkernel
   ../../blenlib
+  ../../blentranslation
   ../../bmesh
   ../.

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list