forked from bartvdbraak/blender
697 lines
20 KiB
Python
697 lines
20 KiB
Python
|
|
import bpy
|
|
|
|
class USERPREF_HT_header(bpy.types.Header):
|
|
__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_save", "Save Key Configuration...")
|
|
|
|
class USERPREF_MT_view(bpy.types.Menu):
|
|
__label__ = "View"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
class USERPREF_PT_tabs(bpy.types.Panel):
|
|
__space_type__ = 'USER_PREFERENCES'
|
|
__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):
|
|
__space_type__ = 'USER_PREFERENCES'
|
|
__label__ = "Interface"
|
|
__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.itemL(text="Zoom Style:")
|
|
sub1.row().itemR(view, "viewport_zoom_style", expand=True)
|
|
sub1.itemL(text="Orbit Style:")
|
|
sub1.row().itemR(view, "view_rotation", expand=True)
|
|
sub1.itemR(view, "perspective_orthographic_switch")
|
|
sub1.itemR(view, "smooth_view")
|
|
sub1.itemR(view, "rotation_angle")
|
|
|
|
col = split.column()
|
|
sub = col.split(percentage=0.85)
|
|
|
|
sub1 = sub.column()
|
|
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")
|
|
|
|
sub1.itemS()
|
|
sub1.itemS()
|
|
sub1.itemS()
|
|
|
|
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")
|
|
|
|
col = split.column()
|
|
sub = col.split(percentage=0.85)
|
|
|
|
sub1 = sub.column()
|
|
#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")
|
|
|
|
class USERPREF_PT_edit(bpy.types.Panel):
|
|
__space_type__ = 'USER_PREFERENCES'
|
|
__label__ = "Edit"
|
|
__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
|
|
view = userpref.view
|
|
|
|
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="Transform:")
|
|
sub1.itemR(edit, "drag_immediately")
|
|
|
|
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="Undo:")
|
|
sub1.itemR(edit, "global_undo")
|
|
sub1.itemR(edit, "undo_steps", text="Steps")
|
|
sub1.itemR(edit, "undo_memory_limit", text="Memory Limit")
|
|
|
|
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):
|
|
__space_type__ = 'USER_PREFERENCES'
|
|
__label__ = "System"
|
|
__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_file(bpy.types.Panel):
|
|
__space_type__ = 'USER_PREFERENCES'
|
|
__label__ = "Files"
|
|
__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)
|
|
sub1 = sub.column()
|
|
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):
|
|
__space_type__ = 'USER_PREFERENCES'
|
|
__label__ = "Input"
|
|
__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
|
|
view = userpref.view
|
|
|
|
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 = (view.select_mouse == 'RIGHT')
|
|
sub1.itemR(view, "emulate_3_button_mouse")
|
|
sub.itemR(view, "continuous_mouse")
|
|
|
|
sub.itemL(text="Select With:")
|
|
sub.row().itemR(view, "select_mouse", expand=True)
|
|
#sub.itemL(text="Middle Mouse:")
|
|
#sub.row().itemR(view, "middle_mouse", expand=True)
|
|
#sub.itemR(view, "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(view, "ndof_pan_speed", text="Pan Speed")
|
|
sub.itemR(view, "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
|
|
itemrow.itemR(kmi, "active", text="", icon="ICON_DOT")
|
|
|
|
itemcol = itemrow.column()
|
|
itemcol.active = kmi.active
|
|
row = itemcol.row()
|
|
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, "shift")
|
|
subrow.itemR(kmi, "ctrl")
|
|
subrow.itemR(kmi, "alt")
|
|
subrow.itemR(kmi, "oskey")
|
|
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_edit)
|
|
bpy.types.register(USERPREF_PT_system)
|
|
bpy.types.register(USERPREF_PT_file)
|
|
bpy.types.register(USERPREF_PT_input)
|
|
|
|
class WM_OT_keyconfig_save(bpy.types.Operator):
|
|
"Save key configuration to a python script."
|
|
__idname__ = "wm.keyconfig_save"
|
|
__label__ = "Save Key Configuration..."
|
|
__props__ = [
|
|
bpy.props.StringProperty(attr="path", 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("Save 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:
|
|
f.write("# Map %s\n" % km.name)
|
|
f.write("km = kc.add_keymap(\'%s\', space_type=\'%s\', region_type=\'%s\')\n\n" % (km.name, km.space_type, km.region_type))
|
|
for kmi in km.items:
|
|
f.write("kmi = km.add_item(\'%s\', \'%s\', \'%s\'" % (kmi.idname, kmi.type, kmi.value))
|
|
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.__operator__)
|
|
return ('RUNNING_MODAL',)
|
|
|
|
class WM_OT_keymap_edit(bpy.types.Operator):
|
|
"Edit key map."
|
|
__idname__ = "wm.keymap_edit"
|
|
__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"
|
|
__idname__ = "wm.keymap_restore"
|
|
__label__ = "Restore Key Map"
|
|
__props__ = [bpy.props.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."
|
|
__idname__ = "wm.keyitem_add"
|
|
__label__ = "Add Key Map Item"
|
|
|
|
def execute(self, context):
|
|
wm = context.manager
|
|
km = wm.active_keymap
|
|
kmi = km.add_item("", "A", "PRESS")
|
|
return ('FINISHED',)
|
|
|
|
class WM_OT_keyitem_remove(bpy.types.Operator):
|
|
"Remove key map item."
|
|
__idname__ = "wm.keyitem_remove"
|
|
__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_save)
|
|
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)
|
|
|