
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")
			
class USERPREF_MT_view(bpy.types.Menu):
	__space_type__ = 'USER_PREFERENCES'
	__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_view(bpy.types.Panel):
	__space_type__ = 'USER_PREFERENCES'
	__label__ = "View"
	__show_header__ = False

	def poll(self, context):
		userpref = context.user_preferences
		return (userpref.active_section == 'VIEW_CONTROLS')

	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")
		sub1.itemS()
		sub1.itemL(text="NDOF Device:")
		sub1.itemR(view, "ndof_pan_speed", text="Pan Speed")
		sub1.itemR(view, "ndof_rotate_speed", text="Orbit Speed")
		
		col = split.column()
		sub = col.split(percentage=0.85)
		
		sub1 = sub.column()
		sub1.itemL(text="Mouse Buttons:")
		sub1.itemR(view, "left_mouse_button_select")
		sub1.itemR(view, "right_mouse_button_select")
		sub1.itemR(view, "emulate_3_button_mouse")
		sub1.itemR(view, "use_middle_mouse_paste")
		sub1.itemR(view, "middle_mouse_rotate")
		sub1.itemR(view, "middle_mouse_pan")
		sub1.itemR(view, "wheel_invert_zoom")
		sub1.itemR(view, "wheel_scroll_lines")
		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")

		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")	
		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")

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 == 'EDIT_METHODS')

	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="Materials:")
		sub1.itemR(edit, "material_linked_object", text="Linked to Object")
		sub1.itemR(edit, "material_linked_obdata", text="Linked to ObData")
		sub1.itemS()
		sub1.itemS()
		sub1.itemS()
		sub1.itemL(text="New Objects:")
		sub1.itemR(edit, "enter_edit_mode")
		sub1.itemR(edit, "align_to_view")
		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_smooth_stroke", text="Smooth Stroke")
		# sub1.itemR(edit, "grease_pencil_simplify_stroke", text="Simplify Stroke")
		sub1.itemR(edit, "grease_pencil_eraser_radius", text="Eraser Radius")
		
		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, "new_interpolation_type")
		sub1.itemS()
		sub1.itemR(edit, "auto_keying_enable", text="Auto Keyframing")
		sub2 = sub1.column()
		sub2.enabled = edit.auto_keying_enable
		sub2.row().itemR(edit, "auto_keying_mode", expand=True)
		sub2.itemR(edit, "auto_keyframe_insert_available", text="Only Insert Available")
		sub2.itemR(edit, "auto_keyframe_insert_needed", text="Only Insert Needed")
		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:")
		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_OPENGL')

	def draw(self, context):
		layout = self.layout
		
		userpref = context.user_preferences
		system = userpref.system
		lan = userpref.language
		
		split = layout.split()
		
		col = split.column()
		sub = col.split(percentage=0.85)
		
		sub1 = sub.column()
		sub1.itemR(system, "emulate_numpad")	
		sub1.itemS()
		sub1.itemS()
		
		#Weight Colors
		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()
		
		#sequencer
		sub1.itemL(text="Sequencer:")
		sub1.itemR(system, "prefetch_frames")
		sub1.itemR(system, "memory_cache_limit")
		
		col = split.column()	
		sub = col.split(percentage=0.85)
		
		sub1 = sub .column()
		#System
		sub1.itemL(text="System:")
		sub1.itemR(lan, "dpi")
		sub1.itemR(system, "auto_run_python_scripts")
		sub1.itemR(system, "frame_server_port")
		sub1.itemR(system, "filter_file_extensions")
		sub1.itemR(system, "hide_dot_files_datablocks")
		sub1.itemR(lan, "scrollback", text="Console Scrollback")
		sub1.itemS()
		sub1.itemS()
		sub1.itemL(text="Sound:")
		sub1.itemR(system, "audio_device")
		sub2 = sub1.column()
		sub2.active = system.audio_device != 'AUDIO_DEVICE_NULL'
		sub2.itemR(system, "enable_all_codecs")
		sub2.itemR(system, "game_sound")
		sub2.itemR(system, "audio_channels")
		sub2.itemR(system, "audio_mixing_buffer")
		sub2.itemR(system, "audio_sample_rate")
		sub2.itemR(system, "audio_sample_format")
		
		col = split.column()
		sub = col.split(percentage=0.85)
		
		sub1 = sub.column()
		#OpenGL
		sub1.itemL(text="OpenGL:")
		sub1.itemR(system, "clip_alpha", slider=True)
		sub1.itemR(system, "use_mipmaps")
		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")		
		
class USERPREF_PT_filepaths(bpy.types.Panel):
	__space_type__ = 'USER_PREFERENCES'
	__label__ = "File Paths"
	__show_header__ = False

	def poll(self, context):
		userpref = context.user_preferences
		return (userpref.active_section == 'FILE_PATHS')

	def draw(self, context):
		layout = self.layout
		
		userpref = context.user_preferences
		paths = userpref.filepaths
		
		split = layout.split()
		
		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.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_language(bpy.types.Panel):
	__space_type__ = 'USER_PREFERENCES'
	__label__ = "Language"
	__show_header__ = False

	def poll(self, context):
		userpref = context.user_preferences
		return (userpref.active_section == 'LANGUAGE_COLORS')

	def draw(self, context):
		layout = self.layout
		
		userpref = context.user_preferences
		lan = userpref.language
		
		split = layout.split()
		col = split.column()
		
		col.itemR(lan, "language")
		col.itemL(text="Translate:")
		col.itemR(lan, "translate_tooltips", text="Tooltips")
		col.itemR(lan, "translate_buttons", text="Labels")
		col.itemR(lan, "translate_toolbox", text="Toolbox")
		col.itemS()
		col.itemS()
		col.itemR(lan, "use_textured_fonts")
		
		col = split.column()
		

bpy.types.register(USERPREF_HT_header)
bpy.types.register(USERPREF_MT_view)
bpy.types.register(USERPREF_PT_tabs)
bpy.types.register(USERPREF_PT_view)
bpy.types.register(USERPREF_PT_edit)
bpy.types.register(USERPREF_PT_system)
bpy.types.register(USERPREF_PT_filepaths)
bpy.types.register(USERPREF_PT_language)

