[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(®ion->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