rna UI api rename...
[blender.git] / release / scripts / ui / properties_data_curve.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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 # <pep8 compliant>
20 import bpy
21
22 narrowui = 180
23
24
25 class DataButtonsPanel(bpy.types.Panel):
26     bl_space_type = 'PROPERTIES'
27     bl_region_type = 'WINDOW'
28     bl_context = "data"
29
30     def poll(self, context):
31         return (context.object and context.object.type in ('CURVE', 'SURFACE', 'TEXT') and context.curve)
32
33
34 class DataButtonsPanelCurve(DataButtonsPanel):
35     '''Same as above but for curves only'''
36
37     def poll(self, context):
38         return (context.object and context.object.type == 'CURVE' and context.curve)
39
40
41 class DataButtonsPanelActive(DataButtonsPanel):
42     '''Same as above but for curves only'''
43
44     def poll(self, context):
45         curve = context.curve
46         return (curve and curve.active_spline)
47
48
49 class DATA_PT_context_curve(DataButtonsPanel):
50     bl_label = ""
51     bl_show_header = False
52
53     def draw(self, context):
54         layout = self.layout
55
56         ob = context.object
57         curve = context.curve
58         space = context.space_data
59         wide_ui = context.region.width > narrowui
60
61
62         if wide_ui:
63             split = layout.split(percentage=0.65)
64
65             if ob:
66                 split.template_ID(ob, "data")
67                 split.separator()
68             elif curve:
69                 split.template_ID(space, "pin_id")
70                 split.separator()
71         else:
72             layout.template_ID(ob, "data")
73
74
75 class DATA_PT_shape_curve(DataButtonsPanel):
76     bl_label = "Shape"
77
78     def draw(self, context):
79         layout = self.layout
80
81         ob = context.object
82         curve = context.curve
83         wide_ui = context.region.width > narrowui
84         is_surf = (ob.type == 'SURFACE')
85         is_curve = (ob.type == 'CURVE')
86         is_text = (ob.type == 'TEXT')
87
88         if is_curve:
89             row = layout.row()
90             row.prop(curve, "dimensions", expand=True)
91
92         split = layout.split()
93
94         col = split.column()
95         col.label(text="Resolution:")
96         sub = col.column(align=True)
97         sub.prop(curve, "resolution_u", text="Preview U")
98         sub.prop(curve, "render_resolution_u", text="Render U")
99         if is_curve:
100             col.label(text="Twisting:")
101             col.prop(curve, "twist_mode", text="")
102             col.prop(curve, "twist_smooth", text="Smooth")
103         if is_text:
104             col.label(text="Display:")
105             col.prop(curve, "fast", text="Fast Editing")
106
107         if wide_ui:
108             col = split.column()
109
110         if is_surf:
111             sub = col.column(align=True)
112             sub.label(text="")
113             sub.prop(curve, "resolution_v", text="Preview V")
114             sub.prop(curve, "render_resolution_v", text="Render V")
115
116         if is_curve or is_text:
117             sub = col.column()
118             sub.active = (curve.dimensions == '2D')
119             sub.label(text="Caps:")
120             sub.prop(curve, "front")
121             sub.prop(curve, "back")
122
123         col.label(text="Textures:")
124 #       col.prop(curve, "uv_orco")
125         col.prop(curve, "auto_texspace")
126
127
128 class DATA_PT_geometry_curve(DataButtonsPanel):
129     bl_label = "Geometry"
130
131     def draw(self, context):
132         layout = self.layout
133
134         curve = context.curve
135         wide_ui = context.region.width > narrowui
136
137         split = layout.split()
138
139         col = split.column()
140         col.label(text="Modification:")
141         col.prop(curve, "width")
142         col.prop(curve, "extrude")
143         col.label(text="Taper Object:")
144         col.prop(curve, "taper_object", text="")
145
146         if wide_ui:
147             col = split.column()
148         col.label(text="Bevel:")
149         col.prop(curve, "bevel_depth", text="Depth")
150         col.prop(curve, "bevel_resolution", text="Resolution")
151         col.label(text="Bevel Object:")
152         col.prop(curve, "bevel_object", text="")
153
154
155 class DATA_PT_pathanim(DataButtonsPanelCurve):
156     bl_label = "Path Animation"
157
158     def draw_header(self, context):
159         curve = context.curve
160
161         self.layout.prop(curve, "use_path", text="")
162
163     def draw(self, context):
164         layout = self.layout
165
166         curve = context.curve
167         wide_ui = context.region.width > narrowui
168
169         layout.active = curve.use_path
170
171         row = layout.row()
172         layout.prop(curve, "path_length", text="Frames")
173
174         if wide_ui:
175             row.label()
176
177         split = layout.split()
178
179         col = split.column()
180         col.prop(curve, "use_path_follow")
181         col.prop(curve, "use_stretch")
182
183         if wide_ui:
184             col = split.column()
185         col.prop(curve, "use_radius")
186         col.prop(curve, "use_time_offset", text="Offset Children")
187
188
189 class DATA_PT_active_spline(DataButtonsPanelActive):
190     bl_label = "Active Spline"
191
192     def draw(self, context):
193         layout = self.layout
194
195         ob = context.object
196         curve = context.curve
197         act_spline = curve.active_spline
198         is_surf = (ob.type == 'SURFACE')
199         is_poly = (act_spline.type == 'POLY')
200
201         split = layout.split()
202
203         if is_poly:
204             # These settings are below but its easier to have
205             # poly's set aside since they use so few settings
206             col = split.column()
207             col.label(text="Cyclic:")
208             col.prop(act_spline, "smooth")
209             col = split.column()
210             col.prop(act_spline, "cyclic_u", text="U")
211
212         else:
213             col = split.column()
214             col.label(text="Cyclic:")
215             if act_spline.type == 'NURBS':
216                 col.label(text="Bezier:")
217                 col.label(text="Endpoint:")
218                 col.label(text="Order:")
219
220             col.label(text="Resolution:")
221
222             col = split.column()
223             col.prop(act_spline, "cyclic_u", text="U")
224
225             if act_spline.type == 'NURBS':
226                 sub = col.column()
227                 # sub.active = (not act_spline.cyclic_u)
228                 sub.prop(act_spline, "bezier_u", text="U")
229                 sub.prop(act_spline, "endpoint_u", text="U")
230
231                 sub = col.column()
232                 sub.prop(act_spline, "order_u", text="U")
233             col.prop(act_spline, "resolution_u", text="U")
234
235             if is_surf:
236                 col = split.column()
237                 col.prop(act_spline, "cyclic_v", text="V")
238
239                 # its a surface, assume its a nurb.
240                 sub = col.column()
241                 sub.active = (not act_spline.cyclic_v)
242                 sub.prop(act_spline, "bezier_v", text="V")
243                 sub.prop(act_spline, "endpoint_v", text="V")
244                 sub = col.column()
245                 sub.prop(act_spline, "order_v", text="V")
246                 sub.prop(act_spline, "resolution_v", text="V")
247
248             if not is_surf:
249                 split = layout.split()
250                 col = split.column()
251                 col.active = (curve.dimensions == '3D')
252
253                 col.label(text="Interpolation:")
254                 col.prop(act_spline, "tilt_interpolation", text="Tilt")
255                 col.prop(act_spline, "radius_interpolation", text="Radius")
256
257             layout.prop(act_spline, "smooth")
258
259
260 class DATA_PT_font(DataButtonsPanel):
261     bl_label = "Font"
262
263     def poll(self, context):
264         return (context.object and context.object.type == 'TEXT' and context.curve)
265
266     def draw(self, context):
267         layout = self.layout
268
269         text = context.curve
270         char = context.curve.edit_format
271         wide_ui = context.region.width > narrowui
272
273         if wide_ui:
274             layout.prop(text, "font")
275         else:
276             layout.prop(text, "font", text="")
277
278         split = layout.split()
279
280         col = split.column()
281         col.prop(text, "text_size", text="Size")
282         if wide_ui:
283             col = split.column()
284         col.prop(text, "shear")
285
286         split = layout.split()
287
288         col = split.column()
289         col.label(text="Object Font:")
290         col.prop(text, "family", text="")
291
292         if wide_ui:
293             col = split.column()
294         col.label(text="Text on Curve:")
295         col.prop(text, "text_on_curve", text="")
296
297         split = layout.split()
298
299         col = split.column(align=True)
300         col.label(text="Underline:")
301         col.prop(text, "ul_position", text="Position")
302         col.prop(text, "ul_height", text="Thickness")
303
304         if wide_ui:
305             col = split.column()
306         col.label(text="Character:")
307         col.prop(char, "bold")
308         col.prop(char, "italic")
309         col.prop(char, "underline")
310 #       col.prop(char, "style")
311 #       col.prop(char, "wrap")
312
313
314 class DATA_PT_paragraph(DataButtonsPanel):
315     bl_label = "Paragraph"
316
317     def poll(self, context):
318         return (context.object and context.object.type == 'TEXT' and context.curve)
319
320     def draw(self, context):
321         layout = self.layout
322
323         text = context.curve
324         wide_ui = context.region.width > narrowui
325
326         layout.label(text="Align:")
327         if wide_ui:
328             layout.prop(text, "spacemode", expand=True)
329         else:
330             layout.prop(text, "spacemode", text="")
331
332         split = layout.split()
333
334         col = split.column(align=True)
335         col.label(text="Spacing:")
336         col.prop(text, "spacing", text="Character")
337         col.prop(text, "word_spacing", text="Word")
338         col.prop(text, "line_dist", text="Line")
339
340         if wide_ui:
341             col = split.column(align=True)
342         col.label(text="Offset:")
343         col.prop(text, "offset_x", text="X")
344         col.prop(text, "offset_y", text="Y")
345
346
347 class DATA_PT_textboxes(DataButtonsPanel):
348     bl_label = "Text Boxes"
349
350     def poll(self, context):
351         return (context.object and context.object.type == 'TEXT' and context.curve)
352
353     def draw(self, context):
354         layout = self.layout
355
356         text = context.curve
357         wide_ui = context.region.width > narrowui
358
359         for box in text.textboxes:
360             split = layout.box().split()
361
362             col = split.column(align=True)
363             col.label(text="Dimensions:")
364             col.prop(box, "width", text="Width")
365             col.prop(box, "height", text="Height")
366
367             if wide_ui:
368                 col = split.column(align=True)
369             col.label(text="Offset:")
370             col.prop(box, "x", text="X")
371             col.prop(box, "y", text="Y")
372
373 bpy.types.register(DATA_PT_context_curve)
374 bpy.types.register(DATA_PT_shape_curve)
375 bpy.types.register(DATA_PT_geometry_curve)
376 bpy.types.register(DATA_PT_pathanim)
377 bpy.types.register(DATA_PT_active_spline)
378 bpy.types.register(DATA_PT_font)
379 bpy.types.register(DATA_PT_paragraph)
380 bpy.types.register(DATA_PT_textboxes)