Merge with trunk r41625
[blender.git] / source / blender / editors / interface / interface_templates.c
index 7c745c3..6a3e602 100644 (file)
@@ -32,6 +32,7 @@
 #include "MEM_guardedalloc.h"
 
 #include "DNA_anim_types.h"
+#include "DNA_dynamicpaint_types.h"
 #include "DNA_key_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_userdef_types.h"
@@ -43,6 +44,7 @@
 #include "BKE_animsys.h"
 #include "BKE_colortools.h"
 #include "BKE_context.h"
+#include "BKE_dynamicpaint.h"
 #include "BKE_global.h"
 #include "BKE_library.h"
 #include "BKE_main.h"
@@ -684,7 +686,7 @@ static int modifier_can_delete(ModifierData *md)
 static int modifier_is_simulation(ModifierData *md)
 {
        // Physic Tab
-       if(ELEM6(md->type, eModifierType_Cloth, eModifierType_Collision, eModifierType_Fluidsim, eModifierType_Smoke, eModifierType_Softbody, eModifierType_Surface)) {
+       if(ELEM7(md->type, eModifierType_Cloth, eModifierType_Collision, eModifierType_Fluidsim, eModifierType_Smoke, eModifierType_Softbody, eModifierType_Surface, eModifierType_DynamicPaint)) {
                return 1;
        }
        // Particle Tab
@@ -2047,6 +2049,13 @@ static int list_item_icon_get(bContext *C, PointerRNA *itemptr, int rnaicon, int
        else if(RNA_struct_is_a(itemptr->type, &RNA_TextureSlot)) {
                id= RNA_pointer_get(itemptr, "texture").data;
        }
+       else if(RNA_struct_is_a(itemptr->type, &RNA_DynamicPaintSurface)) {
+               DynamicPaintSurface *surface= (DynamicPaintSurface*)itemptr->data;
+
+               if (surface->format == MOD_DPAINT_SURFACE_F_PTEX) return ICON_TEXTURE_SHADED;
+               else if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) return ICON_OUTLINER_DATA_MESH;
+               else if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) return ICON_FILE_IMAGE;
+       }
 
        /* get icon from ID */
        if(id) {
@@ -2164,6 +2173,25 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe
                /* nothing else special to do... */
                uiItemL(sub, name, icon); /* fails, backdrop LISTROW... */
        }
+       else if(itemptr->type == &RNA_DynamicPaintSurface) {
+               char name_final[96];
+               const char *enum_name;
+               PropertyRNA *prop = RNA_struct_find_property(itemptr, "surface_type");
+               DynamicPaintSurface *surface= (DynamicPaintSurface*)itemptr->data;
+
+               RNA_property_enum_name(C, itemptr, prop, RNA_property_enum_get(itemptr, prop), &enum_name);
+
+               BLI_snprintf(name_final, sizeof(name_final), "%s (%s)",name,enum_name);
+               uiItemL(sub, name_final, icon);
+               if (dynamicPaint_surfaceHasColorPreview(surface)) {
+                       uiBlockSetEmboss(block, UI_EMBOSSN);
+                       uiDefIconButR(block, OPTION, 0, (surface->flags & MOD_DPAINT_PREVIEW) ? ICON_RESTRICT_VIEW_OFF : ICON_RESTRICT_VIEW_ON,
+                               0, 0, UI_UNIT_X, UI_UNIT_Y, itemptr, "show_preview", 0, 0, 0, 0, 0, NULL);
+                       uiBlockSetEmboss(block, UI_EMBOSS);
+               }
+               uiDefButR(block, OPTION, 0, "", 0, 0, UI_UNIT_X, UI_UNIT_Y, itemptr, "is_active", i, 0, 0, 0, 0,  NULL);
+       }
+
        /* There is a last chance to display custom controls (in addition to the name/label):
         * If the given item property group features a string property named as prop_list,
         * this tries to add controls for all properties of the item listed in that string property.
@@ -2177,11 +2205,11 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe
         *     integer = IntProperty()
         *     string  = StringProperty()
         * 
-        *     # A string of all identifiers (colon-separated) which propertys controls should be
+        *     # A string of all identifiers (colon-separated) which property\92s controls should be
         *     # displayed in a template_list.
         *     template_list_controls = StringProperty(default="integer:bool:string", options={"HIDDEN"})
         *
-        * … you’ll get a numfield for the integer prop, a check box for the bool prop, and a textfield
+        * \85 you\92ll get a numfield for the integer prop, a check box for the bool prop, and a textfield
         * for the string prop, after the name of each item of the collection.
         */
        else if (prop_list_id) {
@@ -2190,9 +2218,9 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe
 
                /* XXX: Check, as sometimes we get an itemptr looking like
                 *      {id = {data = 0x0}, type = 0x0, data = 0x0}
-                *      which would obviously produce a sigsev */
+                *      which would obviously produce a sigsev\85 */
                if (itemptr->type) {
-                       /* If the special property is set for the item, and it is a collection */
+                       /* If the special property is set for the item, and it is a collection\85 */
                        PropertyRNA *prop_list= RNA_struct_find_property(itemptr, prop_list_id);
 
                        if(prop_list && RNA_property_type(prop_list) == PROP_STRING) {