[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