remove narrow ui feature
[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., 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
24 class DataButtonsPanel():
25     bl_space_type = 'PROPERTIES'
26     bl_region_type = 'WINDOW'
27     bl_context = "data"
28
29     @staticmethod
30     def poll(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     @staticmethod
38     def poll(context):
39         return (context.object and context.object.type == 'CURVE' and context.curve)
40
41
42 class DataButtonsPanelActive(DataButtonsPanel):
43     '''Same as above but for curves only'''
44
45     @staticmethod
46     def poll(context):
47         curve = context.curve
48         return (curve and type(curve) is not bpy.types.TextCurve and curve.splines.active)
49
50
51 class DATA_PT_context_curve(DataButtonsPanel, bpy.types.Panel):
52     bl_label = ""
53     bl_show_header = False
54
55     def draw(self, context):
56         layout = self.layout
57
58         ob = context.object
59         curve = context.curve
60         space = context.space_data
61
62         split = layout.split(percentage=0.65)
63
64         if ob:
65             split.template_ID(ob, "data")
66             split.separator()
67         elif curve:
68             split.template_ID(space, "pin_id")
69             split.separator()
70
71
72 class DATA_PT_custom_props_curve(DataButtonsPanel, PropertyPanel, bpy.types.Panel):
73     _context_path = "object.data"
74
75
76 class DATA_PT_shape_curve(DataButtonsPanel, bpy.types.Panel):
77     bl_label = "Shape"
78
79     def draw(self, context):
80         layout = self.layout
81
82         ob = context.object
83         curve = context.curve
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         col = split.column()
108
109         if is_surf:
110             sub = col.column(align=True)
111             sub.label(text="")
112             sub.prop(curve, "resolution_v", text="Preview V")
113             sub.prop(curve, "render_resolution_v", text="Render V")
114
115         if is_curve or is_text:
116             sub = col.column()
117             sub.label(text="Caps:")
118             sub.prop(curve, "front")
119             sub.prop(curve, "back")
120             sub.prop(curve, "use_deform_fill")
121
122         col.label(text="Textures:")
123         col.prop(curve, "map_along_length")
124         col.prop(curve, "auto_texspace")
125
126
127 class DATA_PT_geometry_curve(DataButtonsPanel, bpy.types.Panel):
128     bl_label = "Geometry"
129
130     @staticmethod
131     def poll(context):
132         obj = context.object
133         if obj and obj.type == 'SURFACE':
134             return False
135
136         return context.curve
137
138     def draw(self, context):
139         layout = self.layout
140
141         curve = context.curve
142
143         split = layout.split()
144
145         col = split.column()
146         col.label(text="Modification:")
147         col.prop(curve, "width")
148         col.prop(curve, "extrude")
149         col.label(text="Taper Object:")
150         col.prop(curve, "taper_object", text="")
151
152         col = split.column()
153         col.label(text="Bevel:")
154         col.prop(curve, "bevel_depth", text="Depth")
155         col.prop(curve, "bevel_resolution", text="Resolution")
156         col.label(text="Bevel Object:")
157         col.prop(curve, "bevel_object", text="")
158
159
160 class DATA_PT_pathanim(DataButtonsPanelCurve, bpy.types.Panel):
161     bl_label = "Path Animation"
162
163     def draw_header(self, context):
164         curve = context.curve
165
166         self.layout.prop(curve, "use_path", text="")
167
168     def draw(self, context):
169         layout = self.layout
170
171         curve = context.curve
172
173         layout.active = curve.use_path
174
175         col = layout.column()
176         layout.prop(curve, "path_length", text="Frames")
177         layout.prop(curve, "eval_time")
178
179         split = layout.split()
180
181         col = split.column()
182         col.prop(curve, "use_path_follow")
183         col.prop(curve, "use_stretch")
184         col.prop(curve, "use_deform_bounds")
185
186         col = split.column()
187         col.prop(curve, "use_radius")
188         col.prop(curve, "use_time_offset", text="Offset Children")
189
190
191 class DATA_PT_active_spline(DataButtonsPanelActive, bpy.types.Panel):
192     bl_label = "Active Spline"
193
194     def draw(self, context):
195         layout = self.layout
196
197         ob = context.object
198         curve = context.curve
199         act_spline = curve.splines.active
200         is_surf = (ob.type == 'SURFACE')
201         is_poly = (act_spline.type == 'POLY')
202
203         split = layout.split()
204
205         if is_poly:
206             # These settings are below but its easier to have
207             # poly's set aside since they use so few settings
208             col = split.column()
209             col.label(text="Cyclic:")
210             col.prop(act_spline, "smooth")
211             col = split.column()
212             col.prop(act_spline, "cyclic_u", text="U")
213
214         else:
215             col = split.column()
216             col.label(text="Cyclic:")
217             if act_spline.type == 'NURBS':
218                 col.label(text="Bezier:")
219                 col.label(text="Endpoint:")
220                 col.label(text="Order:")
221
222             col.label(text="Resolution:")
223
224             col = split.column()
225             col.prop(act_spline, "cyclic_u", text="U")
226
227             if act_spline.type == 'NURBS':
228                 sub = col.column()
229                 # sub.active = (not act_spline.cyclic_u)
230                 sub.prop(act_spline, "bezier_u", text="U")
231                 sub.prop(act_spline, "endpoint_u", text="U")
232
233                 sub = col.column()
234                 sub.prop(act_spline, "order_u", text="U")
235             col.prop(act_spline, "resolution_u", text="U")
236
237             if is_surf:
238                 col = split.column()
239                 col.prop(act_spline, "cyclic_v", text="V")
240
241                 # its a surface, assume its a nurb.
242                 sub = col.column()
243                 sub.active = (not act_spline.cyclic_v)
244                 sub.prop(act_spline, "bezier_v", text="V")
245                 sub.prop(act_spline, "endpoint_v", text="V")
246                 sub = col.column()
247                 sub.prop(act_spline, "order_v", text="V")
248                 sub.prop(act_spline, "resolution_v", text="V")
249
250             if not is_surf:
251                 split = layout.split()
252                 col = split.column()
253                 col.active = (curve.dimensions == '3D')
254
255                 col.label(text="Interpolation:")
256                 col.prop(act_spline, "tilt_interpolation", text="Tilt")
257                 col.prop(act_spline, "radius_interpolation", text="Radius")
258
259             layout.prop(act_spline, "smooth")
260
261
262 class DATA_PT_font(DataButtonsPanel, bpy.types.Panel):
263     bl_label = "Font"
264
265     @staticmethod
266     def poll(context):
267         return (context.object and context.object.type == 'TEXT' and context.curve)
268
269     def draw(self, context):
270         layout = self.layout
271
272         text = context.curve
273         char = context.curve.edit_format
274
275         layout.template_ID(text, "font", open="font.open", unlink="font.unlink")
276
277         #layout.prop(text, "font")
278
279         split = layout.split()
280
281         col = split.column()
282         col.prop(text, "text_size", text="Size")
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         col = split.column()
293         col.label(text="Text on Curve:")
294         col.prop(text, "text_on_curve", text="")
295
296         split = layout.split()
297
298         col = split.column()
299         colsub = col.column(align=True)
300         colsub.label(text="Underline:")
301         colsub.prop(text, "ul_position", text="Position")
302         colsub.prop(text, "ul_height", text="Thickness")
303
304         col = split.column()
305         col.label(text="Character:")
306         col.prop(char, "bold")
307         col.prop(char, "italic")
308         col.prop(char, "underline")
309         
310         split = layout.split()
311         col = split.column()
312         col.prop(text, "small_caps_scale", text="Small Caps")
313         
314         col = split.column()
315         col.prop(char, "use_small_caps")
316
317
318 class DATA_PT_paragraph(DataButtonsPanel, bpy.types.Panel):
319     bl_label = "Paragraph"
320
321     @staticmethod
322     def poll(context):
323         return (context.object and context.object.type == 'TEXT' and context.curve)
324
325     def draw(self, context):
326         layout = self.layout
327
328         text = context.curve
329
330         layout.label(text="Align:")
331         layout.prop(text, "spacemode", expand=True)
332
333         split = layout.split()
334
335         col = split.column(align=True)
336         col.label(text="Spacing:")
337         col.prop(text, "spacing", text="Character")
338         col.prop(text, "word_spacing", text="Word")
339         col.prop(text, "line_dist", text="Line")
340
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, bpy.types.Panel):
348     bl_label = "Text Boxes"
349
350     @staticmethod
351     def poll(context):
352         return (context.object and context.object.type == 'TEXT' and context.curve)
353
354     def draw(self, context):
355         layout = self.layout
356
357         text = context.curve
358
359         split = layout.split()
360         col = split.column()
361         col.operator("font.textbox_add", icon='ZOOMIN')
362         col = split.column()
363
364         for i, box in enumerate(text.textboxes):
365
366             boxy = layout.box()
367
368             row = boxy.row()
369
370             split = row.split()
371
372             col = split.column(align=True)
373
374             col.label(text="Dimensions:")
375             col.prop(box, "width", text="Width")
376             col.prop(box, "height", text="Height")
377
378             col = split.column(align=True)
379
380             col.label(text="Offset:")
381             col.prop(box, "x", text="X")
382             col.prop(box, "y", text="Y")
383
384             row.operator("font.textbox_remove", text='', icon='X', emboss=False).index = i
385
386
387 def register():
388     pass
389
390
391 def unregister():
392     pass
393
394 if __name__ == "__main__":
395     register()