blender/release/scripts/ui/space_userpref.py
Martin Poirier 98d4a56d55 Fixing keymap export:
- Didn't support new userdef keymaps (new "active" rna function to get the active version of a keymap)
- Didn't support modal keymaps (new "modal" param to add_keymap function, new "add_modal_item" function on keymaps (both functions now make sure the keymap is of the right type))
2009-11-16 20:50:02 +00:00

1437 lines
46 KiB
Python

# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# ##### END GPL LICENSE BLOCK #####
# <pep8 compliant>
import bpy
class USERPREF_HT_header(bpy.types.Header):
bl_space_type = 'USER_PREFERENCES'
def draw(self, context):
layout = self.layout
layout.template_header(menus=False)
userpref = context.user_preferences
layout.operator_context = 'EXEC_AREA'
layout.itemO("wm.save_homefile", text="Save As Default")
if userpref.active_section == 'INPUT':
layout.operator_context = 'INVOKE_DEFAULT'
layout.itemO("wm.keyconfig_export", "Export Key Configuration...")
class USERPREF_MT_view(bpy.types.Menu):
bl_label = "View"
def draw(self, context):
pass # layout = self.layout
class USERPREF_PT_tabs(bpy.types.Panel):
bl_label = ""
bl_space_type = 'USER_PREFERENCES'
bl_region_type = 'WINDOW'
bl_show_header = False
def draw(self, context):
layout = self.layout
userpref = context.user_preferences
layout.itemR(userpref, "active_section", expand=True)
class USERPREF_PT_interface(bpy.types.Panel):
bl_space_type = 'USER_PREFERENCES'
bl_label = "Interface"
bl_region_type = 'WINDOW'
bl_show_header = False
def poll(self, context):
userpref = context.user_preferences
return (userpref.active_section == 'INTERFACE')
def draw(self, context):
layout = self.layout
userpref = context.user_preferences
view = userpref.view
split = layout.split()
col = split.column()
sub = col.split(percentage=0.85)
sub1 = sub.column()
sub1.itemL(text="Display:")
sub1.itemR(view, "tooltips")
sub1.itemR(view, "display_object_info", text="Object Info")
sub1.itemR(view, "use_large_cursors")
sub1.itemR(view, "show_view_name", text="View Name")
sub1.itemR(view, "show_playback_fps", text="Playback FPS")
sub1.itemR(view, "global_scene")
sub1.itemR(view, "pin_floating_panels")
sub1.itemR(view, "object_center_size")
sub1.itemS()
sub1.itemS()
sub1.itemS()
sub1.itemR(view, "show_mini_axis", text="Display Mini Axis")
sub2 = sub1.column()
sub2.enabled = view.show_mini_axis
sub2.itemR(view, "mini_axis_size", text="Size")
sub2.itemR(view, "mini_axis_brightness", text="Brightness")
col = split.column()
sub = col.split(percentage=0.85)
sub1 = sub.column()
sub1.itemL(text="View Manipulation:")
sub1.itemR(view, "auto_depth")
sub1.itemR(view, "global_pivot")
sub1.itemR(view, "zoom_to_mouse")
sub1.itemR(view, "rotate_around_selection")
sub1.itemS()
sub1.itemR(view, "auto_perspective")
sub1.itemR(view, "smooth_view")
sub1.itemR(view, "rotation_angle")
col = split.column()
sub = col.split(percentage=0.85)
sub1 = sub.column()
#Toolbox doesn't exist yet
# sub1.itemL(text="Toolbox:")
# sub1.itemR(view, "use_column_layout")
# sub1.itemL(text="Open Toolbox Delay:")
# sub1.itemR(view, "open_left_mouse_delay", text="Hold LMB")
# sub1.itemR(view, "open_right_mouse_delay", text="Hold RMB")
#manipulator
sub1.itemR(view, "use_manipulator")
sub2 = sub1.column()
sub2.enabled = view.use_manipulator
sub2.itemR(view, "manipulator_size", text="Size")
sub2.itemR(view, "manipulator_handle_size", text="Handle Size")
sub2.itemR(view, "manipulator_hotspot", text="Hotspot")
sub1.itemS()
sub1.itemS()
sub1.itemS()
sub1.itemL(text="Menus:")
sub1.itemR(view, "open_mouse_over")
sub1.itemL(text="Menu Open Delay:")
sub1.itemR(view, "open_toplevel_delay", text="Top Level")
sub1.itemR(view, "open_sublevel_delay", text="Sub Level")
class USERPREF_PT_edit(bpy.types.Panel):
bl_space_type = 'USER_PREFERENCES'
bl_label = "Edit"
bl_region_type = 'WINDOW'
bl_show_header = False
def poll(self, context):
userpref = context.user_preferences
return (userpref.active_section == 'EDITING')
def draw(self, context):
layout = self.layout
userpref = context.user_preferences
edit = userpref.edit
split = layout.split()
col = split.column()
sub = col.split(percentage=0.85)
sub1 = sub.column()
sub1.itemL(text="Link Materials To:")
sub1.row().itemR(edit, "material_link", expand=True)
sub1.itemS()
sub1.itemS()
sub1.itemS()
sub1.itemL(text="New Objects:")
sub1.itemR(edit, "enter_edit_mode")
sub1.itemL(text="Align To:")
sub1.row().itemR(edit, "object_align", expand=True)
sub1.itemS()
sub1.itemS()
sub1.itemS()
sub1.itemL(text="Undo:")
sub1.itemR(edit, "global_undo")
sub1.itemR(edit, "undo_steps", text="Steps")
sub1.itemR(edit, "undo_memory_limit", text="Memory Limit")
col = split.column()
sub = col.split(percentage=0.85)
sub1 = sub.column()
sub1.itemL(text="Snap:")
sub1.itemR(edit, "snap_translate", text="Translate")
sub1.itemR(edit, "snap_rotate", text="Rotate")
sub1.itemR(edit, "snap_scale", text="Scale")
sub1.itemS()
sub1.itemS()
sub1.itemS()
sub1.itemL(text="Grease Pencil:")
sub1.itemR(edit, "grease_pencil_manhattan_distance", text="Manhattan Distance")
sub1.itemR(edit, "grease_pencil_euclidean_distance", text="Euclidean Distance")
# sub1.itemR(edit, "grease_pencil_simplify_stroke", text="Simplify Stroke")
sub1.itemR(edit, "grease_pencil_eraser_radius", text="Eraser Radius")
sub1.itemR(edit, "grease_pencil_smooth_stroke", text="Smooth Stroke")
col = split.column()
sub = col.split(percentage=0.85)
sub1 = sub.column()
sub1.itemL(text="Keyframing:")
sub1.itemR(edit, "use_visual_keying")
sub1.itemR(edit, "keyframe_insert_needed", text="Only Insert Needed")
sub1.itemS()
sub1.itemL(text="New F-Curve Defaults:")
sub1.itemR(edit, "new_interpolation_type", text="Interpolation")
sub1.itemS()
sub1.itemR(edit, "auto_keying_enable", text="Auto Keyframing:")
sub2 = sub1.column()
sub2.active = edit.auto_keying_enable
sub2.itemR(edit, "auto_keyframe_insert_keyingset", text="Only Insert for Keying Set")
sub2.itemR(edit, "auto_keyframe_insert_available", text="Only Insert Available")
sub1.itemS()
sub1.itemS()
sub1.itemS()
sub1.itemL(text="Transform:")
sub1.itemR(edit, "drag_immediately")
sub1.itemS()
sub1.itemS()
sub1.itemS()
col = split.column()
sub = col.split(percentage=0.85)
sub1 = sub.column()
sub1.itemL(text="Duplicate Data:")
sub1.itemR(edit, "duplicate_mesh", text="Mesh")
sub1.itemR(edit, "duplicate_surface", text="Surface")
sub1.itemR(edit, "duplicate_curve", text="Curve")
sub1.itemR(edit, "duplicate_text", text="Text")
sub1.itemR(edit, "duplicate_metaball", text="Metaball")
sub1.itemR(edit, "duplicate_armature", text="Armature")
sub1.itemR(edit, "duplicate_lamp", text="Lamp")
sub1.itemR(edit, "duplicate_material", text="Material")
sub1.itemR(edit, "duplicate_texture", text="Texture")
sub1.itemR(edit, "duplicate_ipo", text="F-Curve")
sub1.itemR(edit, "duplicate_action", text="Action")
sub1.itemR(edit, "duplicate_particle", text="Particle")
class USERPREF_PT_system(bpy.types.Panel):
bl_space_type = 'USER_PREFERENCES'
bl_label = "System"
bl_region_type = 'WINDOW'
bl_show_header = False
def poll(self, context):
userpref = context.user_preferences
return (userpref.active_section == 'SYSTEM')
def draw(self, context):
layout = self.layout
userpref = context.user_preferences
system = userpref.system
split = layout.split()
col = split.column()
sub = col.split(percentage=0.9)
sub1 = sub.column()
sub1.itemL(text="General:")
sub1.itemR(system, "dpi")
sub1.itemR(system, "frame_server_port")
sub1.itemR(system, "scrollback", text="Console Scrollback")
sub1.itemR(system, "emulate_numpad")
sub1.itemR(system, "auto_run_python_scripts")
sub1.itemS()
sub1.itemS()
sub1.itemS()
sub1.itemL(text="Sound:")
sub1.row().itemR(system, "audio_device", expand=True)
sub2 = sub1.column()
sub2.active = system.audio_device != 'NONE'
sub2.itemR(system, "enable_all_codecs")
sub2.itemR(system, "game_sound")
sub2.itemR(system, "audio_channels", text="Channels")
sub2.itemR(system, "audio_mixing_buffer", text="Mixing Buffer")
sub2.itemR(system, "audio_sample_rate", text="Sample Rate")
sub2.itemR(system, "audio_sample_format", text="Sample Format")
col = split.column()
sub = col.split(percentage=0.9)
sub1 = sub .column()
sub1.itemL(text="Weight Colors:")
sub1.itemR(system, "use_weight_color_range", text="Use Custom Range")
sub2 = sub1.column()
sub2.active = system.use_weight_color_range
sub2.template_color_ramp(system, "weight_color_range", expand=True)
sub1.itemS()
sub1.itemS()
sub1.itemS()
sub1.itemR(system, "language")
sub1.itemL(text="Translate:")
sub1.itemR(system, "translate_tooltips", text="Tooltips")
sub1.itemR(system, "translate_buttons", text="Labels")
sub1.itemR(system, "translate_toolbox", text="Toolbox")
sub1.itemS()
sub1.itemR(system, "use_textured_fonts")
col = split.column()
sub = col.split(percentage=0.9)
sub1 = sub.column()
sub1.itemL(text="OpenGL:")
sub1.itemR(system, "clip_alpha", slider=True)
sub1.itemR(system, "use_mipmaps")
sub1.itemR(system, "use_vbos")
sub1.itemL(text="Window Draw Method:")
sub1.row().itemR(system, "window_draw_method", expand=True)
sub1.itemL(text="Textures:")
sub1.itemR(system, "gl_texture_limit", text="Limit Size")
sub1.itemR(system, "texture_time_out", text="Time Out")
sub1.itemR(system, "texture_collection_rate", text="Collection Rate")
sub1.itemS()
sub1.itemS()
sub1.itemS()
sub1.itemL(text="Sequencer:")
sub1.itemR(system, "prefetch_frames")
sub1.itemR(system, "memory_cache_limit")
class USERPREF_PT_theme(bpy.types.Panel):
bl_space_type = 'USER_PREFERENCES'
bl_label = "Themes"
bl_region_type = 'WINDOW'
bl_show_header = False
def poll(self, context):
userpref = context.user_preferences
return (userpref.active_section == 'THEMES')
def draw(self, context):
layout = self.layout
theme = context.user_preferences.themes[0]
split = layout.split(percentage=0.33)
split.itemR(theme, "active_theme", text="")
layout.itemS()
split = layout.split()
if theme.active_theme == 'VIEW_3D':
v3d = theme.view_3d
col = split.column()
col.itemR(v3d, "back")
col.itemR(v3d, "button")
col.itemR(v3d, "button_title")
col.itemR(v3d, "button_text")
col.itemR(v3d, "header")
col = split.column()
col.itemR(v3d, "grid")
col.itemR(v3d, "wire")
col.itemR(v3d, "lamp", slider=True)
col.itemR(v3d, "editmesh_active", slider=True)
col = split.column()
col.itemR(v3d, "object_selected")
col.itemR(v3d, "object_active")
col.itemR(v3d, "object_grouped")
col.itemR(v3d, "object_grouped_active")
col.itemR(v3d, "transform")
col = split.column()
col.itemR(v3d, "vertex")
col.itemR(v3d, "face", slider=True)
col.itemR(v3d, "normal")
col.itemR(v3d, "bone_solid")
col.itemR(v3d, "bone_pose")
# col.itemR(v3d, "edge") Doesn't seem to work
elif theme.active_theme == 'USER_INTERFACE':
ui = theme.user_interface.wcol_regular
layout.itemL(text="Regular:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "outline")
sub1.itemR(ui, "item", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "inner", slider=True)
sub1.itemR(ui, "inner_sel", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "text")
sub1.itemR(ui, "text_sel")
sub1 = sub.column()
sub1.itemR(ui, "shaded")
sub2 = sub1.column(align=True)
sub2.active = ui.shaded
sub2.itemR(ui, "shadetop")
sub2.itemR(ui, "shadedown")
layout.itemS()
ui = theme.user_interface.wcol_tool
layout.itemL(text="Tool:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "outline")
sub1.itemR(ui, "item", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "inner", slider=True)
sub1.itemR(ui, "inner_sel", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "text")
sub1.itemR(ui, "text_sel")
sub1 = sub.column()
sub1.itemR(ui, "shaded")
sub2 = sub1.column(align=True)
sub2.active = ui.shaded
sub2.itemR(ui, "shadetop")
sub2.itemR(ui, "shadedown")
ui = theme.user_interface.wcol_radio
layout.itemL(text="Radio Buttons:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "outline")
sub1.itemR(ui, "item", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "inner", slider=True)
sub1.itemR(ui, "inner_sel", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "text")
sub1.itemR(ui, "text_sel")
sub1 = sub.column()
sub1.itemR(ui, "shaded")
sub2 = sub1.column(align=True)
sub2.active = ui.shaded
sub2.itemR(ui, "shadetop")
sub2.itemR(ui, "shadedown")
ui = theme.user_interface.wcol_text
layout.itemL(text="Text:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "outline")
sub1.itemR(ui, "item", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "inner", slider=True)
sub1.itemR(ui, "inner_sel", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "text")
sub1.itemR(ui, "text_sel")
sub1 = sub.column()
sub1.itemR(ui, "shaded")
sub2 = sub1.column(align=True)
sub2.active = ui.shaded
sub2.itemR(ui, "shadetop")
sub2.itemR(ui, "shadedown")
ui = theme.user_interface.wcol_option
layout.itemL(text="Option:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "outline")
sub1.itemR(ui, "item", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "inner", slider=True)
sub1.itemR(ui, "inner_sel", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "text")
sub1.itemR(ui, "text_sel")
sub1 = sub.column()
sub1.itemR(ui, "shaded")
sub2 = sub1.column(align=True)
sub2.active = ui.shaded
sub2.itemR(ui, "shadetop")
sub2.itemR(ui, "shadedown")
ui = theme.user_interface.wcol_toggle
layout.itemL(text="Toggle:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "outline")
sub1.itemR(ui, "item", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "inner", slider=True)
sub1.itemR(ui, "inner_sel", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "text")
sub1.itemR(ui, "text_sel")
sub1 = sub.column()
sub1.itemR(ui, "shaded")
sub2 = sub1.column(align=True)
sub2.active = ui.shaded
sub2.itemR(ui, "shadetop")
sub2.itemR(ui, "shadedown")
ui = theme.user_interface.wcol_num
layout.itemL(text="Number Field:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "outline")
sub1.itemR(ui, "item", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "inner", slider=True)
sub1.itemR(ui, "inner_sel", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "text")
sub1.itemR(ui, "text_sel")
sub1 = sub.column()
sub1.itemR(ui, "shaded")
sub2 = sub1.column(align=True)
sub2.active = ui.shaded
sub2.itemR(ui, "shadetop")
sub2.itemR(ui, "shadedown")
ui = theme.user_interface.wcol_numslider
layout.itemL(text="Value Slider:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "outline")
sub1.itemR(ui, "item", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "inner", slider=True)
sub1.itemR(ui, "inner_sel", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "text")
sub1.itemR(ui, "text_sel")
sub1 = sub.column()
sub1.itemR(ui, "shaded")
sub2 = sub1.column(align=True)
sub2.active = ui.shaded
sub2.itemR(ui, "shadetop")
sub2.itemR(ui, "shadedown")
ui = theme.user_interface.wcol_box
layout.itemL(text="Box:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "outline")
sub1.itemR(ui, "item", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "inner", slider=True)
sub1.itemR(ui, "inner_sel", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "text")
sub1.itemR(ui, "text_sel")
sub1 = sub.column()
sub1.itemR(ui, "shaded")
sub2 = sub1.column(align=True)
sub2.active = ui.shaded
sub2.itemR(ui, "shadetop")
sub2.itemR(ui, "shadedown")
ui = theme.user_interface.wcol_menu
layout.itemL(text="Menu:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "outline")
sub1.itemR(ui, "item", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "inner", slider=True)
sub1.itemR(ui, "inner_sel", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "text")
sub1.itemR(ui, "text_sel")
sub1 = sub.column()
sub1.itemR(ui, "shaded")
sub2 = sub1.column(align=True)
sub2.active = ui.shaded
sub2.itemR(ui, "shadetop")
sub2.itemR(ui, "shadedown")
ui = theme.user_interface.wcol_pulldown
layout.itemL(text="Pulldown:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "outline")
sub1.itemR(ui, "item", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "inner", slider=True)
sub1.itemR(ui, "inner_sel", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "text")
sub1.itemR(ui, "text_sel")
sub1 = sub.column()
sub1.itemR(ui, "shaded")
sub2 = sub1.column(align=True)
sub2.active = ui.shaded
sub2.itemR(ui, "shadetop")
sub2.itemR(ui, "shadedown")
ui = theme.user_interface.wcol_menu_back
layout.itemL(text="Menu Back:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "outline")
sub1.itemR(ui, "item", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "inner", slider=True)
sub1.itemR(ui, "inner_sel", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "text")
sub1.itemR(ui, "text_sel")
sub1 = sub.column()
sub1.itemR(ui, "shaded")
sub2 = sub1.column(align=True)
sub2.active = ui.shaded
sub2.itemR(ui, "shadetop")
sub2.itemR(ui, "shadedown")
ui = theme.user_interface.wcol_menu_item
layout.itemL(text="Menu Item:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "outline")
sub1.itemR(ui, "item", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "inner", slider=True)
sub1.itemR(ui, "inner_sel", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "text")
sub1.itemR(ui, "text_sel")
sub1 = sub.column()
sub1.itemR(ui, "shaded")
sub2 = sub1.column(align=True)
sub2.active = ui.shaded
sub2.itemR(ui, "shadetop")
sub2.itemR(ui, "shadedown")
ui = theme.user_interface.wcol_scroll
layout.itemL(text="Scroll Bar:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "outline")
sub1.itemR(ui, "item", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "inner", slider=True)
sub1.itemR(ui, "inner_sel", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "text")
sub1.itemR(ui, "text_sel")
sub1 = sub.column()
sub1.itemR(ui, "shaded")
sub2 = sub1.column(align=True)
sub2.active = ui.shaded
sub2.itemR(ui, "shadetop")
sub2.itemR(ui, "shadedown")
ui = theme.user_interface.wcol_list_item
layout.itemL(text="List Item:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "outline")
sub1.itemR(ui, "item", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "inner", slider=True)
sub1.itemR(ui, "inner_sel", slider=True)
sub1 = sub.column()
sub1.itemR(ui, "text")
sub1.itemR(ui, "text_sel")
sub1 = sub.column()
sub1.itemR(ui, "shaded")
sub2 = sub1.column(align=True)
sub2.active = ui.shaded
sub2.itemR(ui, "shadetop")
sub2.itemR(ui, "shadedown")
ui = theme.user_interface.wcol_state
layout.itemL(text="State:")
sub = layout.row()
sub1 = sub.column()
sub1.itemR(ui, "inner_anim")
sub1.itemR(ui, "inner_anim_sel")
sub1 = sub.column()
sub1.itemR(ui, "inner_driven")
sub1.itemR(ui, "inner_driven_sel")
sub1 = sub.column()
sub1.itemR(ui, "inner_key")
sub1.itemR(ui, "inner_key_sel")
sub1 = sub.column()
sub1.itemR(ui, "blend")
ui = theme.user_interface
layout.itemS()
sub = layout.row()
sub.itemR(ui, "icon_file")
layout.itemS()
layout.itemS()
elif theme.active_theme == 'GRAPH_EDITOR':
graph = theme.graph_editor
col = split.column()
col.itemR(graph, "back")
col.itemR(graph, "button")
col.itemR(graph, "button_title")
col.itemR(graph, "button_text")
col = split.column()
col.itemR(graph, "header")
col.itemR(graph, "grid")
col.itemR(graph, "list")
col.itemR(graph, "channel_group")
col = split.column()
col.itemR(graph, "active_channels_group")
col.itemR(graph, "dopesheet_channel")
col.itemR(graph, "dopesheet_subchannel")
col.itemR(graph, "vertex")
col = split.column()
col.itemR(graph, "current_frame")
col.itemR(graph, "handle_vertex")
col.itemR(graph, "handle_vertex_select")
col.itemS()
col.itemR(graph, "handle_vertex_size")
elif theme.active_theme == 'FILE_BROWSER':
file_browse = theme.file_browser
col = split.column()
col.itemR(file_browse, "back")
col.itemR(file_browse, "text")
col.itemR(file_browse, "text_hi")
col = split.column()
col.itemR(file_browse, "header")
col.itemR(file_browse, "list")
col = split.column()
col.itemR(file_browse, "selected_file")
col.itemR(file_browse, "tiles")
col = split.column()
col.itemR(file_browse, "active_file")
col.itemR(file_browse, "active_file_text")
elif theme.active_theme == 'NLA_EDITOR':
nla = theme.nla_editor
col = split.column()
col.itemR(nla, "back")
col.itemR(nla, "button")
col.itemR(nla, "button_title")
col = split.column()
col.itemR(nla, "button_text")
col.itemR(nla, "text")
col.itemR(nla, "header")
col = split.column()
col.itemR(nla, "grid")
col.itemR(nla, "bars")
col.itemR(nla, "bars_selected")
col = split.column()
col.itemR(nla, "strips")
col.itemR(nla, "strips_selected")
col.itemR(nla, "current_frame")
elif theme.active_theme == 'DOPESHEET_EDITOR':
dope = theme.dopesheet_editor
col = split.column()
col.itemR(dope, "back")
col.itemR(dope, "list")
col.itemR(dope, "text")
col.itemR(dope, "header")
col = split.column()
col.itemR(dope, "grid")
col.itemR(dope, "channels")
col.itemR(dope, "channels_selected")
col.itemR(dope, "channel_group")
col = split.column()
col.itemR(dope, "active_channels_group")
col.itemR(dope, "long_key")
col.itemR(dope, "long_key_selected")
col = split.column()
col.itemR(dope, "current_frame")
col.itemR(dope, "dopesheet_channel")
col.itemR(dope, "dopesheet_subchannel")
elif theme.active_theme == 'IMAGE_EDITOR':
image = theme.image_editor
col = split.column()
col.itemR(image, "back")
col.itemR(image, "button")
col = split.column()
col.itemR(image, "button_title")
col.itemR(image, "button_text")
col = split.column()
col.itemR(image, "header")
col = split.column()
col.itemR(image, "editmesh_active", slider=True)
elif theme.active_theme == 'SEQUENCE_EDITOR':
seq = theme.sequence_editor
col = split.column()
col.itemR(seq, "back")
col.itemR(seq, "button")
col.itemR(seq, "button_title")
col.itemR(seq, "button_text")
col.itemR(seq, "text")
col = split.column()
col.itemR(seq, "header")
col.itemR(seq, "grid")
col.itemR(seq, "movie_strip")
col.itemR(seq, "image_strip")
col.itemR(seq, "scene_strip")
col = split.column()
col.itemR(seq, "audio_strip")
col.itemR(seq, "effect_strip")
col.itemR(seq, "plugin_strip")
col.itemR(seq, "transition_strip")
col = split.column()
col.itemR(seq, "meta_strip")
col.itemR(seq, "current_frame")
col.itemR(seq, "keyframe")
col.itemR(seq, "draw_action")
elif theme.active_theme == 'PROPERTIES':
prop = theme.properties
col = split.column()
col.itemR(prop, "back")
col = split.column()
col.itemR(prop, "title")
col = split.column()
col.itemR(prop, "text")
col = split.column()
col.itemR(prop, "header")
elif theme.active_theme == 'TEXT_EDITOR':
text = theme.text_editor
col = split.column()
col.itemR(text, "back")
col.itemR(text, "button")
col.itemR(text, "button_title")
col.itemR(text, "button_text")
col = split.column()
col.itemR(text, "text")
col.itemR(text, "text_hi")
col.itemR(text, "header")
col.itemR(text, "line_numbers_background")
col = split.column()
col.itemR(text, "selected_text")
col.itemR(text, "cursor")
col.itemR(text, "syntax_builtin")
col.itemR(text, "syntax_special")
col = split.column()
col.itemR(text, "syntax_comment")
col.itemR(text, "syntax_string")
col.itemR(text, "syntax_numbers")
elif theme.active_theme == 'TIMELINE':
time = theme.timeline
col = split.column()
col.itemR(time, "back")
col.itemR(time, "text")
col = split.column()
col.itemR(time, "header")
col = split.column()
col.itemR(time, "grid")
col = split.column()
col.itemR(time, "current_frame")
elif theme.active_theme == 'NODE_EDITOR':
node = theme.node_editor
col = split.column()
col.itemR(node, "back")
col.itemR(node, "button")
col.itemR(node, "button_title")
col.itemR(node, "button_text")
col = split.column()
col.itemR(node, "text")
col.itemR(node, "text_hi")
col.itemR(node, "header")
col.itemR(node, "wires")
col = split.column()
col.itemR(node, "wire_select")
col.itemR(node, "selected_text")
col.itemR(node, "node_backdrop", slider=True)
col.itemR(node, "in_out_node")
col = split.column()
col.itemR(node, "converter_node")
col.itemR(node, "operator_node")
col.itemR(node, "group_node")
elif theme.active_theme == 'LOGIC_EDITOR':
logic = theme.logic_editor
col = split.column()
col.itemR(logic, "back")
col.itemR(logic, "button")
col = split.column()
col.itemR(logic, "button_title")
col.itemR(logic, "button_text")
col = split.column()
col.itemR(logic, "text")
col.itemR(logic, "header")
col = split.column()
col.itemR(logic, "panel")
elif theme.active_theme == 'OUTLINER':
out = theme.outliner
col = split.column()
col.itemR(out, "back")
col = split.column()
col.itemR(out, "text")
col = split.column()
col.itemR(out, "text_hi")
col = split.column()
col.itemR(out, "header")
elif theme.active_theme == 'INFO':
info = theme.info
col = split.column()
col.itemR(info, "back")
col = split.column()
col.itemR(info, "header")
col = split.column()
col.itemR(info, "header_text")
col = split.column()
elif theme.active_theme == 'USER_PREFERENCES':
prefs = theme.user_preferences
col = split.column()
col.itemR(prefs, "back")
col = split.column()
col.itemR(prefs, "text")
col = split.column()
col.itemR(prefs, "header")
col = split.column()
col.itemR(prefs, "header_text")
class USERPREF_PT_file(bpy.types.Panel):
bl_space_type = 'USER_PREFERENCES'
bl_label = "Files"
bl_region_type = 'WINDOW'
bl_show_header = False
def poll(self, context):
userpref = context.user_preferences
return (userpref.active_section == 'FILES')
def draw(self, context):
layout = self.layout
userpref = context.user_preferences
paths = userpref.filepaths
split = layout.split(percentage=0.6)
col = split.column()
col.itemL(text="File Paths:")
sub = col.split(percentage=0.3)
sub.itemL(text="Fonts:")
sub.itemR(paths, "fonts_directory", text="")
sub = col.split(percentage=0.3)
sub.itemL(text="Textures:")
sub.itemR(paths, "textures_directory", text="")
sub = col.split(percentage=0.3)
sub.itemL(text="Texture Plugins:")
sub.itemR(paths, "texture_plugin_directory", text="")
sub = col.split(percentage=0.3)
sub.itemL(text="Sequence Plugins:")
sub.itemR(paths, "sequence_plugin_directory", text="")
sub = col.split(percentage=0.3)
sub.itemL(text="Render Output:")
sub.itemR(paths, "render_output_directory", text="")
sub = col.split(percentage=0.3)
sub.itemL(text="Scripts:")
sub.itemR(paths, "python_scripts_directory", text="")
sub = col.split(percentage=0.3)
sub.itemL(text="Sounds:")
sub.itemR(paths, "sounds_directory", text="")
sub = col.split(percentage=0.3)
sub.itemL(text="Temp:")
sub.itemR(paths, "temporary_directory", text="")
col = split.column()
sub = col.split(percentage=0.2)
sub.column() # sub1, unused
sub2 = sub.column()
sub2.itemL(text="Save & Load:")
sub2.itemR(paths, "use_relative_paths")
sub2.itemR(paths, "compress_file")
sub2.itemR(paths, "load_ui")
sub2.itemR(paths, "filter_file_extensions")
sub2.itemR(paths, "hide_dot_files_datablocks")
sub2.itemS()
sub2.itemS()
sub2.itemL(text="Auto Save:")
sub2.itemR(paths, "save_version")
sub2.itemR(paths, "recent_files")
sub2.itemR(paths, "save_preview_images")
sub2.itemR(paths, "auto_save_temporary_files")
sub3 = sub2.column()
sub3.enabled = paths.auto_save_temporary_files
sub3.itemR(paths, "auto_save_time", text="Timer (mins)")
class USERPREF_PT_input(bpy.types.Panel):
bl_space_type = 'USER_PREFERENCES'
bl_label = "Input"
bl_region_type = 'WINDOW'
bl_show_header = False
def poll(self, context):
userpref = context.user_preferences
return (userpref.active_section == 'INPUT')
def draw(self, context):
layout = self.layout
userpref = context.user_preferences
wm = context.manager
#input = userpref.input
#input = userpref
inputs = userpref.inputs
split = layout.split(percentage=0.25)
# General settings
row = split.row()
col = row.column()
sub = col.column()
sub.itemL(text="Configuration:")
sub.item_pointerR(wm, "active_keyconfig", wm, "keyconfigs", text="")
col.itemS()
sub = col.column()
sub.itemL(text="Mouse:")
sub1 = sub.column()
sub1.enabled = (inputs.select_mouse == 'RIGHT')
sub1.itemR(inputs, "emulate_3_button_mouse")
sub.itemR(inputs, "continuous_mouse")
sub.itemL(text="Select With:")
sub.row().itemR(inputs, "select_mouse", expand=True)
sub.itemL(text="Middle Mouse:")
sub.row().itemR(inputs, "middle_mouse", expand=True)
sub.itemS()
sub.itemS()
sub.itemS()
sub.itemL(text="Orbit Style:")
sub.row().itemR(inputs, "view_rotation", expand=True)
sub.itemL(text="Zoom Style:")
sub.row().itemR(inputs, "viewport_zoom_style", expand=True)
#sub.itemR(inputs, "use_middle_mouse_paste")
#col.itemS()
#sub = col.column()
#sub.itemL(text="Mouse Wheel:")
#sub.itemR(view, "wheel_invert_zoom", text="Invert Zoom")
#sub.itemR(view, "wheel_scroll_lines", text="Scroll Lines")
col.itemS()
sub = col.column()
sub.itemL(text="NDOF Device:")
sub.itemR(inputs, "ndof_pan_speed", text="Pan Speed")
sub.itemR(inputs, "ndof_rotate_speed", text="Orbit Speed")
row.itemS()
# Keymap Settings
col = split.column()
# kc = wm.active_keyconfig
defkc = wm.default_keyconfig
km = wm.active_keymap
subsplit = col.split()
subsplit.item_pointerR(wm, "active_keymap", defkc, "keymaps", text="Map:")
if km.user_defined:
row = subsplit.row()
row.itemO("WM_OT_keymap_restore", text="Restore")
row.item_booleanO("WM_OT_keymap_restore", "all", True, text="Restore All")
else:
row = subsplit.row()
row.itemO("WM_OT_keymap_edit", text="Edit")
row.itemL()
col.itemS()
for kmi in km.items:
subcol = col.column()
subcol.set_context_pointer("keyitem", kmi)
row = subcol.row()
if kmi.expanded:
row.itemR(kmi, "expanded", text="", icon='ICON_TRIA_DOWN')
else:
row.itemR(kmi, "expanded", text="", icon='ICON_TRIA_RIGHT')
itemrow = row.row()
itemrow.enabled = km.user_defined
if kmi.active:
itemrow.itemR(kmi, "active", text="", icon='ICON_CHECKBOX_HLT')
else:
itemrow.itemR(kmi, "active", text="", icon='ICON_CHECKBOX_DEHLT')
itemcol = itemrow.column()
itemcol.active = kmi.active
row = itemcol.row()
if km.modal:
row.itemR(kmi, "propvalue", text="")
else:
row.itemR(kmi, "idname", text="")
sub = row.row()
sub.scale_x = 0.6
sub.itemR(kmi, "map_type", text="")
sub = row.row(align=True)
if kmi.map_type == 'KEYBOARD':
sub.itemR(kmi, "type", text="", full_event=True)
elif kmi.map_type == 'MOUSE':
sub.itemR(kmi, "type", text="", full_event=True)
elif kmi.map_type == 'TWEAK':
sub.scale_x = 0.5
sub.itemR(kmi, "type", text="")
sub.itemR(kmi, "value", text="")
elif kmi.map_type == 'TIMER':
sub.itemR(kmi, "type", text="")
else:
sub.itemL()
if kmi.expanded:
if kmi.map_type not in ('TEXTINPUT', 'TIMER'):
sub = itemcol.row(align=True)
if kmi.map_type == 'KEYBOARD':
sub.itemR(kmi, "type", text="", event=True)
sub.itemR(kmi, "value", text="")
elif kmi.map_type == 'MOUSE':
sub.itemR(kmi, "type", text="")
sub.itemR(kmi, "value", text="")
else:
sub.itemL()
sub.itemL()
subrow = sub.row()
subrow.scale_x = 0.75
subrow.itemR(kmi, "any")
subrow.itemR(kmi, "shift")
subrow.itemR(kmi, "ctrl")
subrow.itemR(kmi, "alt")
subrow.itemR(kmi, "oskey", text="Cmd")
sub.itemR(kmi, "key_modifier", text="", event=True)
flow = itemcol.column_flow(columns=2)
props = kmi.properties
if props != None:
for pname in dir(props):
if not props.is_property_hidden(pname):
flow.itemR(props, pname)
itemcol.itemS()
itemrow.itemO("wm.keyitem_remove", text="", icon='ICON_ZOOMOUT')
itemrow = col.row()
itemrow.itemL()
itemrow.itemO("wm.keyitem_add", text="", icon='ICON_ZOOMIN')
itemrow.enabled = km.user_defined
bpy.types.register(USERPREF_HT_header)
bpy.types.register(USERPREF_MT_view)
bpy.types.register(USERPREF_PT_tabs)
bpy.types.register(USERPREF_PT_interface)
bpy.types.register(USERPREF_PT_theme)
bpy.types.register(USERPREF_PT_edit)
bpy.types.register(USERPREF_PT_system)
bpy.types.register(USERPREF_PT_file)
bpy.types.register(USERPREF_PT_input)
from bpy.props import *
class WM_OT_keyconfig_export(bpy.types.Operator):
"Export key configuration to a python script."
bl_idname = "wm.keyconfig_export"
bl_label = "Export Key Configuration..."
path = bpy.props.StringProperty(name="File Path", description="File path to write file to.")
def _string_value(self, value):
result = ""
if isinstance(value, str):
if value != "":
result = "\'%s\'" % value
elif isinstance(value, bool):
if value:
result = "True"
else:
result = "False"
elif isinstance(value, float):
result = "%.10f" % value
elif isinstance(value, int):
result = "%d" % value
elif getattr(value, '__len__', False):
if len(value):
result = "["
for i in range(0, len(value)):
result += self._string_value(value[i])
if i != len(value)-1:
result += ", "
result += "]"
else:
print("Export key configuration: can't write ", value)
return result
def execute(self, context):
if not self.path:
raise Exception("File path not set.")
f = open(self.path, "w")
if not f:
raise Exception("Could not open file.")
wm = context.manager
kc = wm.active_keyconfig
f.write('# Configuration %s\n' % kc.name)
f.write("wm = bpy.data.windowmanagers[0]\n")
f.write("kc = wm.add_keyconfig(\'%s\')\n\n" % kc.name)
for km in kc.keymaps:
km = km.active()
f.write("# Map %s\n" % km.name)
f.write("km = kc.add_keymap(\'%s\', space_type=\'%s\', region_type=\'%s\', modal=%s)\n\n" % (km.name, km.space_type, km.region_type, km.modal))
for kmi in km.items:
if km.modal:
f.write("kmi = km.add_modal_item(\'%s\', \'%s\', \'%s\'" % (kmi.propvalue, kmi.type, kmi.value))
else:
f.write("kmi = km.add_item(\'%s\', \'%s\', \'%s\'" % (kmi.idname, kmi.type, kmi.value))
if kmi.any:
f.write(", any=True")
else:
if kmi.shift:
f.write(", shift=True")
if kmi.ctrl:
f.write(", ctrl=True")
if kmi.alt:
f.write(", alt=True")
if kmi.oskey:
f.write(", oskey=True")
if kmi.key_modifier and kmi.key_modifier != 'NONE':
f.write(", key_modifier=\'%s\'" % kmi.key_modifier)
f.write(")\n")
props = kmi.properties
if props != None:
for pname in dir(props):
if props.is_property_set(pname) and not props.is_property_hidden(pname):
value = eval("props.%s" % pname)
value = self._string_value(value)
if value != "":
f.write("kmi.properties.%s = %s\n" % (pname, value))
f.write("\n")
f.close()
return ('FINISHED',)
def invoke(self, context, event):
wm = context.manager
wm.add_fileselect(self)
return ('RUNNING_MODAL',)
class WM_OT_keymap_edit(bpy.types.Operator):
"Edit key map."
bl_idname = "wm.keymap_edit"
bl_label = "Edit Key Map"
def execute(self, context):
wm = context.manager
km = wm.active_keymap
km.copy_to_user()
return ('FINISHED',)
class WM_OT_keymap_restore(bpy.types.Operator):
"Restore key map"
bl_idname = "wm.keymap_restore"
bl_label = "Restore Key Map"
all = BoolProperty(attr="all", name="All Keymaps", description="Restore all keymaps to default.")
def execute(self, context):
wm = context.manager
if self.all:
for km in wm.default_keyconfig.keymaps:
km.restore_to_default()
else:
km = wm.active_keymap
km.restore_to_default()
return ('FINISHED',)
class WM_OT_keyitem_add(bpy.types.Operator):
"Add key map item."
bl_idname = "wm.keyitem_add"
bl_label = "Add Key Map Item"
def execute(self, context):
wm = context.manager
km = wm.active_keymap
if km.modal:
km.add_modal_item("", 'A', 'PRESS') # kmi
else:
km.add_item("", 'A', 'PRESS') # kmi
return ('FINISHED',)
class WM_OT_keyitem_remove(bpy.types.Operator):
"Remove key map item."
bl_idname = "wm.keyitem_remove"
bl_label = "Remove Key Map Item"
def execute(self, context):
wm = context.manager
kmi = context.keyitem
km = wm.active_keymap
km.remove_item(kmi)
return ('FINISHED',)
bpy.ops.add(WM_OT_keyconfig_export)
bpy.ops.add(WM_OT_keymap_edit)
bpy.ops.add(WM_OT_keymap_restore)
bpy.ops.add(WM_OT_keyitem_add)
bpy.ops.add(WM_OT_keyitem_remove)