Merge branch 'master' into blender2.8
[blender.git] / release / scripts / startup / bl_ui / properties_animviz.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
21 # Generic Panels (Independent of DataType)
22
23 # NOTE:
24 # The specialized panel types are derived in their respective UI modules
25 # don't register these classes since they are only helpers.
26
27
28 class MotionPathButtonsPanel:
29     bl_space_type = 'PROPERTIES'
30     bl_region_type = 'WINDOW'
31     bl_label = "Motion Paths"
32     bl_options = {'DEFAULT_CLOSED'}
33
34     def draw_settings(self, context, avs, mpath, bones=False):
35         layout = self.layout
36
37         mps = avs.motion_path
38
39         # Display Range
40         layout.prop(mps, "type", expand=True)
41
42         split = layout.split()
43
44         col = split.column()
45         col.label(text="Display Range:")
46         sub = col.column(align=True)
47         if mps.type == 'CURRENT_FRAME':
48             sub.prop(mps, "frame_before", text="Before")
49             sub.prop(mps, "frame_after", text="After")
50         elif mps.type == 'RANGE':
51             sub.prop(mps, "frame_start", text="Start")
52             sub.prop(mps, "frame_end", text="End")
53
54         sub.prop(mps, "frame_step", text="Step")
55
56         col = split.column()
57         if bones:
58             col.label(text="Cache for Bone:")
59         else:
60             col.label(text="Cache:")
61
62         if mpath:
63             sub = col.column(align=True)
64             sub.enabled = False
65             sub.prop(mpath, "frame_start", text="From")
66             sub.prop(mpath, "frame_end", text="To")
67
68             sub = col.row(align=True)
69             if bones:
70                 sub.operator("pose.paths_update", text="Update Paths", icon='BONE_DATA')
71                 sub.operator("pose.paths_clear", text="", icon='X')
72             else:
73                 sub.operator("object.paths_update", text="Update Paths", icon='OBJECT_DATA')
74                 sub.operator("object.paths_clear", text="", icon='X')
75         else:
76             sub = col.column(align=True)
77             sub.label(text="Nothing to show yet...", icon='ERROR')
78             if bones:
79                 sub.operator("pose.paths_calculate", text="Calculate...", icon='BONE_DATA')
80             else:
81                 sub.operator("object.paths_calculate", text="Calculate...", icon='OBJECT_DATA')
82
83         # Display Settings
84         split = layout.split()
85
86         col = split.column()
87         col.label(text="Show:")
88         col.prop(mps, "show_frame_numbers", text="Frame Numbers")
89
90         col = split.column()
91         col.prop(mps, "show_keyframe_highlight", text="Keyframes")
92         sub = col.column()
93         sub.enabled = mps.show_keyframe_highlight
94         if bones:
95             sub.prop(mps, "show_keyframe_action_all", text="+ Non-Grouped Keyframes")
96         sub.prop(mps, "show_keyframe_numbers", text="Keyframe Numbers")
97
98
99 # FIXME: this panel still needs to be ported so that it will work correctly with animviz
100 class OnionSkinButtonsPanel:
101     bl_space_type = 'PROPERTIES'
102     bl_region_type = 'WINDOW'
103     bl_label = "Onion Skinning"
104     bl_options = {'DEFAULT_CLOSED'}
105
106     def draw(self, context):
107         layout = self.layout
108
109         arm = context.armature
110
111         layout.prop(arm, "ghost_type", expand=True)
112
113         split = layout.split()
114
115         col = split.column()
116
117         sub = col.column(align=True)
118         if arm.ghost_type == 'RANGE':
119             sub.prop(arm, "ghost_frame_start", text="Start")
120             sub.prop(arm, "ghost_frame_end", text="End")
121             sub.prop(arm, "ghost_size", text="Step")
122         elif arm.ghost_type == 'CURRENT_FRAME':
123             sub.prop(arm, "ghost_step", text="Range")
124             sub.prop(arm, "ghost_size", text="Step")
125
126         col = split.column()
127         col.label(text="Display:")
128         col.prop(arm, "show_only_ghost_selected", text="Selected Only")
129
130 if __name__ == "__main__":  # only for live edit.
131     import bpy
132     bpy.utils.register_module(__name__)