Color Management, Stage 2: Switch color pipeline to use OpenColorIO
[blender.git] / release / scripts / startup / bl_ui / properties_scene.py
index 7efb9cb6dc382adbc9e93fe83ad2b8a31c48718e..2ccdb9cee268883a753116874eeb4aac7f77ba78 100644 (file)
@@ -18,9 +18,8 @@
 
 # <pep8 compliant>
 import bpy
-from bpy.types import Operator, Panel
+from bpy.types import Panel
 from rna_prop_ui import PropertyPanel
-from blf import gettext as _
 
 
 class SceneButtonsPanel():
@@ -30,19 +29,22 @@ class SceneButtonsPanel():
 
     @classmethod
     def poll(cls, context):
-        return context.scene
+        rd = context.scene.render
+        return context.scene and (rd.engine in cls.COMPAT_ENGINES)
 
 
 class SCENE_PT_scene(SceneButtonsPanel, Panel):
     bl_label = "Scene"
-    COMPAT_ENGINES = {'BLENDER_RENDER'}
+    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
 
     def draw(self, context):
         layout = self.layout
+
         scene = context.scene
 
         layout.prop(scene, "camera")
-        layout.prop(scene, "background_set", text=_("Background"))
+        layout.prop(scene, "background_set", text="Background")
+        layout.prop(scene, "active_clip", text="Active Clip")
 
 
 class SCENE_PT_audio(SceneButtonsPanel, Panel):
@@ -51,8 +53,10 @@ class SCENE_PT_audio(SceneButtonsPanel, Panel):
 
     def draw(self, context):
         layout = self.layout
+
         scene = context.scene
         rd = context.scene.render
+        ffmpeg = rd.ffmpeg
 
         layout.prop(scene, "audio_volume")
         layout.operator("sound.bake_animation")
@@ -60,25 +64,26 @@ class SCENE_PT_audio(SceneButtonsPanel, Panel):
         split = layout.split()
 
         col = split.column()
-        col.label(_("Listener:"))
+        col.label("Listener:")
         col.prop(scene, "audio_distance_model", text="")
-        col.prop(scene, "audio_doppler_speed", text=_("Speed"))
-        col.prop(scene, "audio_doppler_factor", text=_("Doppler"))
+        col.prop(scene, "audio_doppler_speed", text="Speed")
+        col.prop(scene, "audio_doppler_factor", text="Doppler")
 
         col = split.column()
-        col.label(_("Format:"))
-        col.prop(rd, "ffmpeg_audio_channels", text="")
-        col.prop(rd, "ffmpeg_audio_mixrate", text=_("Rate"))
+        col.label("Format:")
+        col.prop(ffmpeg, "audio_channels", text="")
+        col.prop(ffmpeg, "audio_mixrate", text="Rate")
 
         layout.operator("sound.mixdown")
 
 
 class SCENE_PT_unit(SceneButtonsPanel, Panel):
     bl_label = "Units"
-    COMPAT_ENGINES = {'BLENDER_RENDER'}
+    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
 
     def draw(self, context):
         layout = self.layout
+
         unit = context.scene.unit_settings
 
         col = layout.column()
@@ -87,12 +92,13 @@ class SCENE_PT_unit(SceneButtonsPanel, Panel):
 
         row = layout.row()
         row.active = (unit.system != 'NONE')
-        row.prop(unit, "scale_length", text=_("Scale"))
+        row.prop(unit, "scale_length", text="Scale")
         row.prop(unit, "use_separate")
 
 
 class SCENE_PT_keying_sets(SceneButtonsPanel, Panel):
     bl_label = "Keying Sets"
+    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
 
     def draw(self, context):
         layout = self.layout
@@ -112,20 +118,21 @@ class SCENE_PT_keying_sets(SceneButtonsPanel, Panel):
             row = layout.row()
 
             col = row.column()
-            col.prop(ks, "name")
+            col.prop(ks, "bl_label")
+            col.prop(ks, "bl_description")
 
             subcol = col.column()
             subcol.operator_context = 'INVOKE_DEFAULT'
-            op = subcol.operator("anim.keying_set_export", text=_("Export to File"))
-            op.filepath = "keyingset.py"
+            subcol.operator("anim.keying_set_export", text="Export to File").filepath = "keyingset.py"
 
-            col = row.column()
-            col.label(text=_("Keyframing Settings:"))
+            col = row.column(align=True)
+            col.label(text="Keyframing Settings:")
             col.prop(ks, "bl_options")
 
 
 class SCENE_PT_keying_set_paths(SceneButtonsPanel, Panel):
     bl_label = "Active Keying Set"
+    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
 
     @classmethod
     def poll(cls, context):
@@ -139,7 +146,7 @@ class SCENE_PT_keying_set_paths(SceneButtonsPanel, Panel):
         ks = scene.keying_sets.active
 
         row = layout.row()
-        row.label(text=_("Paths:"))
+        row.label(text="Paths:")
 
         row = layout.row()
 
@@ -153,24 +160,29 @@ class SCENE_PT_keying_set_paths(SceneButtonsPanel, Panel):
         ksp = ks.paths.active
         if ksp:
             col = layout.column()
-            col.label(text=_("Target:"))
+            col.label(text="Target:")
             col.template_any_ID(ksp, "id", "id_type")
             col.template_path_builder(ksp, "data_path", ksp.id)
 
-            row = layout.row()
+            row = col.row(align=True)
+            row.label(text="Array Target:")
+            row.prop(ksp, "use_entire_array", text="All Items")
+            if ksp.use_entire_array:
+                row.label(text=" ")  # padding
+            else:
+                row.prop(ksp, "array_index", text="Index")
 
-            col = row.column()
-            col.label(text=_("Array Target:"))
-            col.prop(ksp, "use_entire_array")
-            if ksp.use_entire_array is False:
-                col.prop(ksp, "array_index")
+            layout.separator()
 
+            row = layout.row()
             col = row.column()
-            col.label(text=_("F-Curve Grouping:"))
-            col.prop(ksp, "group_method")
+            col.label(text="F-Curve Grouping:")
+            col.prop(ksp, "group_method", text="")
             if ksp.group_method == 'NAMED':
                 col.prop(ksp, "group")
 
+            col = row.column(align=True)
+            col.label(text="Keyframing Settings:")
             col.prop(ksp, "bl_options")
 
 
@@ -196,141 +208,59 @@ class SCENE_PT_simplify(SceneButtonsPanel, Panel):
     COMPAT_ENGINES = {'BLENDER_RENDER'}
 
     def draw_header(self, context):
-        scene = context.scene
-        rd = scene.render
+        rd = context.scene.render
         self.layout.prop(rd, "use_simplify", text="")
 
     def draw(self, context):
         layout = self.layout
-        scene = context.scene
-        rd = scene.render
+
+        rd = context.scene.render
 
         layout.active = rd.use_simplify
 
         split = layout.split()
 
         col = split.column()
-        col.prop(rd, "simplify_subdivision", text=_("Subdivision"))
-        col.prop(rd, "simplify_child_particles", text=_("Child Particles"))
+        col.prop(rd, "simplify_subdivision", text="Subdivision")
+        col.prop(rd, "simplify_child_particles", text="Child Particles")
 
         col.prop(rd, "use_simplify_triangulate")
 
         col = split.column()
-        col.prop(rd, "simplify_shadow_samples", text=_("Shadow Samples"))
-        col.prop(rd, "simplify_ao_sss", text=_("AO and SSS"))
+        col.prop(rd, "simplify_shadow_samples", text="Shadow Samples")
+        col.prop(rd, "simplify_ao_sss", text="AO and SSS")
 
 
-class SCENE_PT_custom_props(SceneButtonsPanel, PropertyPanel, Panel):
-    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
-    _context_path = "scene"
-    _property_type = bpy.types.Scene
-
-#  XXX, move operator to op/ dir
-
-
-class ANIM_OT_keying_set_export(Operator):
-    "Export Keying Set to a python script"
-    bl_idname = "anim.keying_set_export"
-    bl_label = "Export Keying Set..."
-
-    filepath = bpy.props.StringProperty(name="File Path", description="Filepath to write file to")
-    filter_folder = bpy.props.BoolProperty(name="Filter folders", description="", default=True, options={'HIDDEN'})
-    filter_text = bpy.props.BoolProperty(name="Filter text", description="", default=True, options={'HIDDEN'})
-    filter_python = bpy.props.BoolProperty(name="Filter python", description="", default=True, options={'HIDDEN'})
-
-    def execute(self, context):
-        if not self.filepath:
-            raise Exception("Filepath not set")
+class SCENE_PT_color_management(Panel):
+    bl_label = "Color Management"
+    bl_space_type = 'PROPERTIES'
+    bl_region_type = 'WINDOW'
+    bl_context = "scene"
 
-        f = open(self.filepath, "w")
-        if not f:
-            raise Exception("Could not open file")
+    def draw(self, context):
+        layout = self.layout
 
         scene = context.scene
-        ks = scene.keying_sets.active
-
-        f.write("# Keying Set: %s\n" % ks.name)
-
-        f.write("import bpy\n\n")
-        f.write("scene= bpy.data.scenes[0]\n\n")  # XXX, why not use the current scene?
-
-        # Add KeyingSet and set general settings
-        f.write("# Keying Set Level declarations\n")
-        f.write("ks= scene.keying_sets.new(name=\"%s\")\n" % ks.name)
-
-        if not ks.is_path_absolute:
-            f.write("ks.is_path_absolute = False\n")
-        f.write("\n")
-
-        f.write("ks.bl_options = %r\n" % ks.bl_options)
-        f.write("\n")
-
-        # generate and write set of lookups for id's used in paths
-        id_to_paths_cache = {}  # cache for syncing ID-blocks to bpy paths + shorthands
-
-        for ksp in ks.paths:
-            if ksp.id is None:
-                continue
-            if ksp.id in id_to_paths_cache:
-                continue
-
-            # - idtype_list is used to get the list of id-datablocks from bpy.data.*
-            #   since this info isn't available elsewhere
-            # - id.bl_rna.name gives a name suitable for UI,
-            #   with a capitalised first letter, but we need
-            #   the plural form that's all lower case
-            idtype_list = ksp.id.bl_rna.name.lower() + "s"
-            id_bpy_path = "bpy.data.%s[\"%s\"]" % (idtype_list, ksp.id.name)
-
-            # shorthand ID for the ID-block (as used in the script)
-            short_id = "id_%d" % len(id_to_paths_cache)
-
-            # store this in the cache now
-            id_to_paths_cache[ksp.id] = [short_id, id_bpy_path]
 
-        f.write("# ID's that are commonly used\n")
-        for id_pair in id_to_paths_cache.values():
-            f.write("%s = %s\n" % (id_pair[0], id_pair[1]))
-        f.write("\n")
-
-        # write paths
-        f.write("# Path Definitions\n")
-        for ksp in ks.paths:
-            f.write("ksp = ks.paths.add(")
-
-            # id-block + data_path
-            if ksp.id:
-                # find the relevant shorthand from the cache
-                id_bpy_path = id_to_paths_cache[ksp.id][0]
-            else:
-                id_bpy_path = "None"  # XXX...
-            f.write("%s, '%s'" % (id_bpy_path, ksp.data_path))
-
-            # array index settings (if applicable)
-            if ksp.use_entire_array:
-                f.write(", index=-1")
-            else:
-                f.write(", index=%d" % ksp.array_index)
-
-            # grouping settings (if applicable)
-            # NOTE: the current default is KEYINGSET, but if this changes, change this code too
-            if ksp.group_method == 'NAMED':
-                f.write(", group_method='%s', group_name=\"%s\"" % (ksp.group_method, ksp.group))
-            elif ksp.group_method != 'KEYINGSET':
-                f.write(", group_method='%s'" % ksp.group_method)
+        col = layout.column()
+        col.label(text="Display:")
+        col.prop(scene.display_settings, "display_device")
 
-            # finish off
-            f.write(")\n")
+        col = layout.column()
+        col.separator()
+        col.label(text="Render:")
+        col.template_colormanaged_view_settings(scene, "view_settings")
 
-        f.write("\n")
-        f.close()
+        col = layout.column()
+        col.separator()
+        col.label(text="Sequencer:")
+        col.prop(scene.sequencer_colorspace_settings, "name")
 
-        return {'FINISHED'}
 
-    def invoke(self, context, event):
-        wm = context.window_manager
-        wm.fileselect_add(self)
-        return {'RUNNING_MODAL'}
+class SCENE_PT_custom_props(SceneButtonsPanel, PropertyPanel, Panel):
+    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+    _context_path = "scene"
+    _property_type = bpy.types.Scene
 
 if __name__ == "__main__":  # only for live edit.
     bpy.utils.register_module(__name__)