Merge with trunk, revision 28528 - 28976.
[blender-staging.git] / release / scripts / ui / properties_data_camera.py
1 # ##### BEGIN GPL LICENSE BLOCK #####
2 #
3 #  This program is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU General Public License
5 #  as published by the Free Software Foundation; either version 2
6 #  of the License, or (at your option) any later version.
7 #
8 #  This program is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 #  GNU General Public License for more details.
12 #
13 #  You should have received a copy of the GNU General Public License
14 #  along with this program; if not, write to the Free Software Foundation,
15 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 # <pep8 compliant>
20 import bpy
21 from rna_prop_ui import PropertyPanel
22
23 narrowui = bpy.context.user_preferences.view.properties_width_check
24
25
26 class DataButtonsPanel(bpy.types.Panel):
27     bl_space_type = 'PROPERTIES'
28     bl_region_type = 'WINDOW'
29     bl_context = "data"
30
31     def poll(self, context):
32         engine = context.scene.render.engine
33         return context.camera and (engine in self.COMPAT_ENGINES)
34
35
36 class DATA_PT_context_camera(DataButtonsPanel):
37     bl_label = ""
38     bl_show_header = False
39     COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
40
41     def draw(self, context):
42         layout = self.layout
43
44         ob = context.object
45         cam = context.camera
46         space = context.space_data
47         wide_ui = context.region.width > narrowui
48
49         if wide_ui:
50             split = layout.split(percentage=0.65)
51             if ob:
52                 split.template_ID(ob, "data")
53                 split.separator()
54             elif cam:
55                 split.template_ID(space, "pin_id")
56                 split.separator()
57         else:
58             if ob:
59                 layout.template_ID(ob, "data")
60             elif cam:
61                 layout.template_ID(space, "pin_id")
62
63
64 class DATA_PT_custom_props_camera(DataButtonsPanel, PropertyPanel):
65     _context_path = "object.data"
66     COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
67
68
69 class DATA_PT_camera(DataButtonsPanel):
70     bl_label = "Lens"
71     COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
72
73     def draw(self, context):
74         layout = self.layout
75
76         cam = context.camera
77         wide_ui = context.region.width > narrowui
78
79         if wide_ui:
80             layout.prop(cam, "type", expand=True)
81         else:
82             layout.prop(cam, "type", text="")
83
84         split = layout.split()
85
86         col = split.column()
87         if cam.type == 'PERSP':
88             if cam.lens_unit == 'MILLIMETERS':
89                 col.prop(cam, "lens", text="Angle")
90             elif cam.lens_unit == 'DEGREES':
91                 col.prop(cam, "angle")
92             if wide_ui:
93                 col = split.column()
94             col.prop(cam, "lens_unit", text="")
95
96         elif cam.type == 'ORTHO':
97             col.prop(cam, "ortho_scale")
98
99         layout.prop(cam, "panorama")
100
101         split = layout.split()
102
103         col = split.column(align=True)
104         col.label(text="Shift:")
105         col.prop(cam, "shift_x", text="X")
106         col.prop(cam, "shift_y", text="Y")
107
108         if wide_ui:
109             col = split.column(align=True)
110         col.label(text="Clipping:")
111         col.prop(cam, "clip_start", text="Start")
112         col.prop(cam, "clip_end", text="End")
113
114         layout.label(text="Depth of Field:")
115
116         split = layout.split()
117
118         col = split.column()
119         col.prop(cam, "dof_object", text="")
120
121         if wide_ui:
122             col = split.column()
123         else:
124             col = col.column()
125         if cam.dof_object != None:
126             col.enabled = False
127         col.prop(cam, "dof_distance", text="Distance")
128
129
130 class DATA_PT_camera_display(DataButtonsPanel):
131     bl_label = "Display"
132     COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
133
134     def draw(self, context):
135         layout = self.layout
136
137         cam = context.camera
138         wide_ui = context.region.width > narrowui
139
140         split = layout.split()
141
142         col = split.column()
143         col.prop(cam, "show_limits", text="Limits")
144         col.prop(cam, "show_mist", text="Mist")
145         col.prop(cam, "show_title_safe", text="Title Safe")
146         col.prop(cam, "show_name", text="Name")
147
148         if wide_ui:
149             col = split.column()
150         col.prop(cam, "draw_size", text="Size")
151         col.separator()
152         col.prop(cam, "show_passepartout", text="Passepartout")
153         sub = col.column()
154         sub.active = cam.show_passepartout
155         sub.prop(cam, "passepartout_alpha", text="Alpha", slider=True)
156
157
158 classes = [
159     DATA_PT_context_camera,
160     DATA_PT_camera,
161     DATA_PT_camera_display,
162
163     DATA_PT_custom_props_camera]
164
165
166 def register():
167     register = bpy.types.register
168     for cls in classes:
169         register(cls)
170
171
172 def unregister():
173     unregister = bpy.types.unregister
174     for cls in classes:
175         unregister(cls)
176
177 if __name__ == "__main__":
178     register()