[Bf-blender-cvs] [17615ab5aae] temp-spreadsheet-editor: initial pinning in header ui

Jacques Lucke noreply at git.blender.org
Thu Feb 25 13:33:57 CET 2021


Commit: 17615ab5aaea5f4055f6a63bcc8d8a3ad5d2f57b
Author: Jacques Lucke
Date:   Thu Feb 25 11:14:13 2021 +0100
Branches: temp-spreadsheet-editor
https://developer.blender.org/rB17615ab5aaea5f4055f6a63bcc8d8a3ad5d2f57b

initial pinning in header ui

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

M	release/scripts/startup/bl_operators/__init__.py
A	release/scripts/startup/bl_operators/spreadsheet.py
M	release/scripts/startup/bl_ui/space_spreadsheet.py
M	source/blender/blenkernel/intern/screen.c
M	source/blender/editors/space_spreadsheet/space_spreadsheet.cc
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/startup/bl_operators/__init__.py b/release/scripts/startup/bl_operators/__init__.py
index 7e6f14a0a51..078b32f5e2a 100644
--- a/release/scripts/startup/bl_operators/__init__.py
+++ b/release/scripts/startup/bl_operators/__init__.py
@@ -45,6 +45,7 @@ _modules = [
     "rigidbody",
     "screen_play_rendered_anim",
     "sequencer",
+    "spreadsheet",
     "userpref",
     "uvcalc_follow_active",
     "uvcalc_lightmap",
diff --git a/release/scripts/startup/bl_ui/space_spreadsheet.py b/release/scripts/startup/bl_operators/spreadsheet.py
similarity index 57%
copy from release/scripts/startup/bl_ui/space_spreadsheet.py
copy to release/scripts/startup/bl_operators/spreadsheet.py
index 23bfa98a193..159c2b3041d 100644
--- a/release/scripts/startup/bl_ui/space_spreadsheet.py
+++ b/release/scripts/startup/bl_operators/spreadsheet.py
@@ -16,22 +16,32 @@
 #
 # ##### END GPL LICENSE BLOCK #####
 
+from __future__ import annotations
+
 import bpy
 
+class SPREADSHEET_OT_toggle_pin(bpy.types.Operator):
+    '''Turn on or off pinning'''
+    bl_idname = "spreadsheet.toggle_pin"
+    bl_label = "Toggle Pin"
+    bl_options = {'REGISTER', 'UNDO'}
+
+    @classmethod
+    def poll(cls, context):
+        space = context.space_data
+        return space and space.type == 'SPREADSHEET'
 
-class SPREADSHEET_HT_header(bpy.types.Header):
-    bl_space_type = 'SPREADSHEET'
+    def execute(self, context):
+        space = context.space_data
 
-    def draw(self, context):
-        layout = self.layout
+        if space.pinned_id:
+            space.pinned_id = None
+        else:
+            space.pinned_id = context.active_object
+
+        return {'FINISHED'}
 
-        layout.template_header()
 
 classes = (
-    SPREADSHEET_HT_header,
+    SPREADSHEET_OT_toggle_pin,
 )
-
-if __name__ == "__main__":  # only for live edit.
-    from bpy.utils import register_class
-    for cls in classes:
-        register_class(cls)
diff --git a/release/scripts/startup/bl_ui/space_spreadsheet.py b/release/scripts/startup/bl_ui/space_spreadsheet.py
index 23bfa98a193..fe2c025db18 100644
--- a/release/scripts/startup/bl_ui/space_spreadsheet.py
+++ b/release/scripts/startup/bl_ui/space_spreadsheet.py
@@ -24,9 +24,21 @@ class SPREADSHEET_HT_header(bpy.types.Header):
 
     def draw(self, context):
         layout = self.layout
+        space = context.space_data
 
         layout.template_header()
 
+        pinned_id = space.pinned_id
+        used_id = pinned_id if pinned_id else context.active_object
+
+        if used_id:
+            layout.label(text=used_id.name, icon="OBJECT_DATA")
+
+        layout.operator("spreadsheet.toggle_pin", text="", icon='PINNED' if pinned_id else 'UNPINNED', emboss=False)
+
+
+
+
 classes = (
     SPREADSHEET_HT_header,
 )
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index a890127fa9d..10a3a2a742d 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -224,6 +224,12 @@ void BKE_screen_foreach_id_screen_area(LibraryForeachIDData *data, ScrArea *area
         BKE_LIB_FOREACHID_PROCESS(data, sclip->mask_info.mask, IDWALK_CB_USER_ONE);
         break;
       }
+      case SPACE_SPREADSHEET: {
+        SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)sl;
+
+        BKE_LIB_FOREACHID_PROCESS_ID(data, sspreadsheet->pinned_id, IDWALK_CB_NOP);
+        break;
+      }
       default:
         break;
     }
@@ -1906,6 +1912,11 @@ void BKE_screen_area_blend_read_lib(BlendLibReader *reader, ID *parent_id, ScrAr
         BLO_read_id_address(reader, parent_id->lib, &sclip->mask_info.mask);
         break;
       }
+      case SPACE_SPREADSHEET: {
+        SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)sl;
+        BLO_read_id_address(reader, parent_id->lib, &sspreadsheet->pinned_id);
+        break;
+      }
       default:
         break;
     }
diff --git a/source/blender/editors/space_spreadsheet/space_spreadsheet.cc b/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
index 0dea904295e..75e9c7e6b0a 100644
--- a/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
+++ b/source/blender/editors/space_spreadsheet/space_spreadsheet.cc
@@ -505,6 +505,12 @@ static void spreadsheet_header_region_free(ARegion *UNUSED(region))
 {
 }
 
+static void spreadsheet_header_region_listener(const wmRegionListenerParams *params)
+{
+  /* TODO: Do more precise check. */
+  ED_region_tag_redraw(params->region);
+}
+
 void ED_spacetype_spreadsheet(void)
 {
   SpaceType *st = (SpaceType *)MEM_callocN(sizeof(SpaceType), "spacetype spreadsheet");
@@ -540,6 +546,7 @@ void ED_spacetype_spreadsheet(void)
   art->init = spreadsheet_header_region_init;
   art->draw = spreadsheet_header_region_draw;
   art->free = spreadsheet_header_region_free;
+  art->listener = spreadsheet_header_region_listener;
   BLI_addhead(&st->regiontypes, art);
 
   BKE_spacetype_register(st);
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index a15aaef557f..fe4f0b09be4 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -1846,6 +1846,8 @@ typedef struct SpaceSpreadsheet {
   char link_flag;
   char _pad0[6];
   /* End 'SpaceLink' header. */
+
+  struct ID *pinned_id;
 } SpaceSpreadsheet;
 
 /** \} */
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index eecac8ca19e..74b8517f538 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -601,6 +601,7 @@ extern StructRNA RNA_SpaceOutliner;
 extern StructRNA RNA_SpacePreferences;
 extern StructRNA RNA_SpaceProperties;
 extern StructRNA RNA_SpaceSequenceEditor;
+extern StructRNA RNA_SpaceSpreadsheet;
 extern StructRNA RNA_SpaceTextEditor;
 extern StructRNA RNA_SpaceUVEditor;
 extern StructRNA RNA_SpaceView3D;
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 2dda878be7e..17306574bec 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -576,13 +576,14 @@ static StructRNA *rna_Space_refine(struct PointerRNA *ptr)
       return &RNA_SpacePreferences;
     case SPACE_CLIP:
       return &RNA_SpaceClipEditor;
+    case SPACE_SPREADSHEET:
+      return &RNA_SpaceSpreadsheet;
 
       /* Currently no type info. */
     case SPACE_SCRIPT:
     case SPACE_EMPTY:
     case SPACE_TOPBAR:
     case SPACE_STATUSBAR:
-    case SPACE_SPREADSHEET:
       break;
   }
 
@@ -2982,6 +2983,14 @@ static void rna_SpaceFileBrowser_browse_mode_update(Main *UNUSED(bmain),
   ED_area_tag_refresh(area);
 }
 
+static void rna_SpaceSpreadsheet_pinned_id_set(PointerRNA *ptr,
+                                               PointerRNA value,
+                                               struct ReportList *UNUSED(reports))
+{
+  SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)ptr->data;
+  sspreadsheet->pinned_id = value.data;
+}
+
 #else
 
 static const EnumPropertyItem dt_uv_items[] = {
@@ -7175,6 +7184,21 @@ static void rna_def_space_clip(BlenderRNA *brna)
   RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
 }
 
+static void rna_def_space_spreadsheet(BlenderRNA *brna)
+{
+  StructRNA *srna;
+  PropertyRNA *prop;
+
+  srna = RNA_def_struct(brna, "SpaceSpreadsheet", "Space");
+  RNA_def_struct_ui_text(srna, "Space Spreadsheet", "Spreadsheet space data");
+
+  prop = RNA_def_property(srna, "pinned_id", PROP_POINTER, PROP_NONE);
+  RNA_def_property_flag(prop, PROP_EDITABLE);
+  RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceSpreadsheet_pinned_id_set", NULL, NULL);
+  RNA_def_property_ui_text(prop, "Pinned ID", "Data-block whose values are displayed");
+  RNA_def_property_update(prop, NC_SPACE, NULL);
+}
+
 void RNA_def_space(BlenderRNA *brna)
 {
   rna_def_space(brna);
@@ -7200,6 +7224,7 @@ void RNA_def_space(BlenderRNA *brna)
   rna_def_node_tree_path(brna);
   rna_def_space_node(brna);
   rna_def_space_clip(brna);
+  rna_def_space_spreadsheet(brna);
 }
 
 #endif



More information about the Bf-blender-cvs mailing list