Commit: 3a82de14d1b7a7df43e072f6a70a4eb20169dec1
Author: Joshua Leung
Date:   Mon Jul 16 17:05:31 2018 +1200
Branches: greasepencil-object
https://developer.blender.org/rB3a82de14d1b7a7df43e072f6a70a4eb20169dec1

RNA: Add pointer poll callbacks so that Annotation datablocks don't get used 
for GP Objects and vice versa

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

M       source/blender/makesrna/intern/rna_gpencil.c
M       source/blender/makesrna/intern/rna_internal.h
M       source/blender/makesrna/intern/rna_movieclip.c
M       source/blender/makesrna/intern/rna_nodetree.c
M       source/blender/makesrna/intern/rna_object.c
M       source/blender/makesrna/intern/rna_scene.c
M       source/blender/makesrna/intern/rna_space.c
M       source/blender/makesrna/intern/rna_tracking.c

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

diff --git a/source/blender/makesrna/intern/rna_gpencil.c 
b/source/blender/makesrna/intern/rna_gpencil.c
index f4df82ae2c8..7b23ec1b622 100644
--- a/source/blender/makesrna/intern/rna_gpencil.c
+++ b/source/blender/makesrna/intern/rna_gpencil.c
@@ -129,6 +129,22 @@ static void 
UNUSED_FUNCTION(rna_GPencil_onion_skinning_update)(Main *bmain, Scen
        rna_GPencil_update(bmain, scene, ptr);
 }
 
+
+/* Poll Callback to filter GP Datablocks to only show those for Annotations */
+bool rna_GPencil_datablocks_annotations_poll(PointerRNA *UNUSED(ptr), const 
PointerRNA value)
+{
+       bGPdata *gpd = value.data;
+       return (gpd->flag & GP_DATA_ANNOTATIONS) != 0;
+}
+
+/* Poll Callback to filter GP Datablocks to only show those for GP Objects */
+bool rna_GPencil_datablocks_obdata_poll(PointerRNA *UNUSED(ptr), const 
PointerRNA value)
+{
+       bGPdata *gpd = value.data;
+       return (gpd->flag & GP_DATA_ANNOTATIONS) == 0;
+}
+
+
 static char *rna_GPencilLayer_path(PointerRNA *ptr)
 {
        bGPDlayer *gpl = (bGPDlayer *)ptr->data;
diff --git a/source/blender/makesrna/intern/rna_internal.h 
b/source/blender/makesrna/intern/rna_internal.h
index 626c336a84c..a88623e5b5b 100644
--- a/source/blender/makesrna/intern/rna_internal.h
+++ b/source/blender/makesrna/intern/rna_internal.h
@@ -294,6 +294,10 @@ bool rna_Mesh_object_poll(struct PointerRNA *ptr, struct 
PointerRNA value);
 bool rna_Action_id_poll(struct PointerRNA *ptr, struct PointerRNA value);
 bool rna_Action_actedit_assign_poll(struct PointerRNA *ptr, struct PointerRNA 
value);
 
+/* Grease Pencil datablock polling functions - for filtering GP Object vs 
Annotation datablocks */
+bool rna_GPencil_datablocks_annotations_poll(struct PointerRNA *ptr, const 
struct PointerRNA value);
+bool rna_GPencil_datablocks_obdata_poll(struct PointerRNA *ptr, const struct 
PointerRNA value);
+
 char *rna_TextureSlot_path(struct PointerRNA *ptr);
 char *rna_Node_ImageUser_path(struct PointerRNA *ptr);
 
diff --git a/source/blender/makesrna/intern/rna_movieclip.c 
b/source/blender/makesrna/intern/rna_movieclip.c
index aded4229a3c..81c3c9b43b9 100644
--- a/source/blender/makesrna/intern/rna_movieclip.c
+++ b/source/blender/makesrna/intern/rna_movieclip.c
@@ -338,6 +338,7 @@ static void rna_def_movieclip(BlenderRNA *brna)
        prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "gpd");
        RNA_def_property_struct_type(prop, "GreasePencil");
+       RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, 
"rna_GPencil_datablocks_annotations_poll");
        RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
        RNA_def_property_ui_text(prop, "Grease Pencil", "Grease pencil data for 
this movie clip");
        RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, NULL);
diff --git a/source/blender/makesrna/intern/rna_nodetree.c 
b/source/blender/makesrna/intern/rna_nodetree.c
index c0eda3dc053..799d50f01ce 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -8267,6 +8267,7 @@ static void rna_def_nodetree(BlenderRNA *brna)
        prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "gpd");
        RNA_def_property_struct_type(prop, "GreasePencil");
+       RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, 
"rna_GPencil_datablocks_annotations_poll");
        RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
        RNA_def_property_ui_text(prop, "Grease Pencil Data", "Grease Pencil 
data-block");
        RNA_def_property_update(prop, NC_NODE, NULL);
diff --git a/source/blender/makesrna/intern/rna_object.c 
b/source/blender/makesrna/intern/rna_object.c
index 9f2e5db9635..4e956e5b4fa 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -186,6 +186,7 @@ const EnumPropertyItem rna_enum_object_axis_items[] = {
 
 #include "DNA_key_types.h"
 #include "DNA_constraint_types.h"
+#include "DNA_gpencil_types.h"
 #include "DNA_ID.h"
 #include "DNA_lattice_types.h"
 #include "DNA_node_types.h"
@@ -397,6 +398,19 @@ static StructRNA *rna_Object_data_typef(PointerRNA *ptr)
        }
 }
 
+static bool rna_Object_data_poll(PointerRNA *ptr, const PointerRNA value)
+{
+       Object *ob = (Object *)ptr->data;
+
+       if (ob->type == OB_GPENCIL) {
+               /* GP Object - Don't allow using "Annotation" GP datablocks 
here */
+               bGPdata *gpd = value.data;
+               return (gpd->flag & GP_DATA_ANNOTATIONS) == 0;
+       }
+
+       return true;
+}
+
 static void rna_Object_parent_set(PointerRNA *ptr, PointerRNA value)
 {
        Object *ob = (Object *)ptr->data;
@@ -2070,7 +2084,7 @@ static void rna_def_object(BlenderRNA *brna)
 
        prop = RNA_def_property(srna, "data", PROP_POINTER, PROP_NONE);
        RNA_def_property_struct_type(prop, "ID");
-       RNA_def_property_pointer_funcs(prop, NULL, "rna_Object_data_set", 
"rna_Object_data_typef", NULL);
+       RNA_def_property_pointer_funcs(prop, NULL, "rna_Object_data_set", 
"rna_Object_data_typef", "rna_Object_data_poll");
        RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_UNLINK);
        RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
        RNA_def_property_ui_text(prop, "Data", "Object data");
@@ -2651,6 +2665,7 @@ static void rna_def_object(BlenderRNA *brna)
        prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "gpd");
        RNA_def_property_struct_type(prop, "GreasePencil");
+       RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, 
"rna_GPencil_datablocks_obdata_poll"); /* XXX */
        RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
        RNA_def_property_ui_text(prop, "Grease Pencil Data", "Grease Pencil 
data-block (deprecated)");
        RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
diff --git a/source/blender/makesrna/intern/rna_scene.c 
b/source/blender/makesrna/intern/rna_scene.c
index 092bc94c088..ba3a46b02c9 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -6279,6 +6279,7 @@ void RNA_def_scene(BlenderRNA *brna)
        prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "gpd");
        RNA_def_property_struct_type(prop, "GreasePencil");
+       RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, 
"rna_GPencil_datablocks_annotations_poll");
        RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
        RNA_def_property_ui_text(prop, "Annotations", "Grease Pencil data-block 
used for annotations in the 3D view");
        RNA_def_property_update(prop, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
diff --git a/source/blender/makesrna/intern/rna_space.c 
b/source/blender/makesrna/intern/rna_space.c
index 6709f4c09a3..bebf0882fa9 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -3472,6 +3472,7 @@ static void rna_def_space_image(BlenderRNA *brna)
        prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "gpd");
        RNA_def_property_struct_type(prop, "GreasePencil");
+       RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, 
"rna_GPencil_datablocks_annotations_poll");
        RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
        RNA_def_property_ui_text(prop, "Grease Pencil", "Grease pencil data for 
this space");
        RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
@@ -3667,8 +3668,9 @@ static void rna_def_space_sequencer(BlenderRNA *brna)
        prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "gpd");
        RNA_def_property_struct_type(prop, "GreasePencil");
+       RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, 
"rna_GPencil_datablocks_annotations_poll");
        RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
-       RNA_def_property_ui_text(prop, "Grease Pencil", "Grease pencil data for 
this space");
+       RNA_def_property_ui_text(prop, "Grease Pencil", "Grease Pencil data for 
this Preview region");
        RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
 
        prop = RNA_def_property(srna, "overlay_type", PROP_ENUM, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_tracking.c 
b/source/blender/makesrna/intern/rna_tracking.c
index 5da49ac5957..4c5af755b13 100644
--- a/source/blender/makesrna/intern/rna_tracking.c
+++ b/source/blender/makesrna/intern/rna_tracking.c
@@ -1480,6 +1480,7 @@ static void rna_def_trackingTrack(BlenderRNA *brna)
        prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "gpd");
        RNA_def_property_struct_type(prop, "GreasePencil");
+       RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, 
"rna_GPencil_datablocks_annotations_poll");
        RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
        RNA_def_property_ui_text(prop, "Grease Pencil", "Grease pencil data for 
this track");
        RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, NULL);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to