#RVK-POZER by Chris Clawson
# http://www.meloware.com/blender
# webmaster@meloware.com
# Aug 6, 2000 Version 1.0a

import Blender
from Blender.Draw import *
from Blender.BGL import *
from Blender import Ipo

################ Change this next line to point to your setup file !!#########

file_string="/project/murdock.txt"

###################################################################
set_slider_b=Create(0)
sli_select=Create(0)
ipo_select=Create(0)
curve_select=Create(0)
sli_s_min=Create(0.0000)
sli_s_max=Create(0.0000)
type_select=Create(0)
sli_delete=Create(0)
key_name=Create("")
write_file=Create(0)
han=Create(0)
handle_str="Vect"
handle_msg="Vector"
def_min=Create("0")
def_max=Create("1")

sli_old=0

err_str=""
msg_str=""

fixed="Fixed Values"
sampled="Sampled from Curve"
type_string=fixed

old_slider=0


min_val=0.0
max_val=0.0

sli_s_maxn=1
sli_s_maxx=1
sli_s_minn=0
sli_s_minx=0

string_sli="Sliders %x0|Slider 1%x1|Slider 2%x2|Slider 3%x3|Slider 4%x4|Slider 5%x5|Slider 6%x6|Slider 7%x7|Slider 8%x8|Slider 9%x9|Slider 10%x10|Slider 11%x11|Slider 12%x12|Slider 13%x13|Slider 14%x14|Slider 15%x15|Slider 16%x16|Slider 17%x17|Slider 18%x18|Slider 19%x19|Slider 20%x20|Slider 21%x21|Slider 22%x22|Slider 23%x23|Slider 24%x24|Slider 25%x25|Slider 26%x26|Slider 27%x27|Slider 28%x28|Slider 29%x29|Slider 30%x30|Slider 31%x31|Slider 32%x32"
string_ipo="IPOs %x0|"
string_curve="Curves %x0|"

sli_1=Create(0.0)
del_1=Create(0)
sli_1_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_2=Create(0.0)
del_2=Create(0)
sli_2_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_3=Create(0.0)
del_3=Create(0)
sli_3_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_4=Create(0.0)
del_4=Create(0)
sli_4_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_5=Create(0.0)
del_5=Create(0)
sli_5_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_6=Create(0.0)
del_6=Create(0)
sli_6_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_7=Create(0.0)
del_7=Create(0)
sli_7_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_8=Create(0.0)
del_8=Create(0)
sli_8_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_9=Create(0.0)
del_9=Create(0)
sli_9_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_10=Create(0.0)
del_10=Create(0)
sli_10_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_11=Create(0.0)
del_11=Create(0)
sli_11_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_12=Create(0.0)
del_12=Create(0)
sli_12_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_13=Create(0.0)
del_13=Create(0)
sli_13_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_14=Create(0.0)
del_14=Create(0)
sli_14_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_15=Create(0.0)
del_15=Create(0)
sli_15_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_16=Create(0.0)
del_16=Create(0)
sli_16_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_17=Create(0.0)
del_17=Create(0)
sli_17_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_18=Create(0.0)
del_18=Create(0)
sli_18_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_19=Create(0.0)
del_19=Create(0)
sli_19_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_20=Create(0.0)
del_20=Create(0)
sli_20_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_21=Create(0.0)
del_21=Create(0)
sli_21_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_22=Create(0.0)
del_22=Create(0)
sli_22_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_23=Create(0.0)
del_23=Create(0)
sli_23_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_24=Create(0.0)
del_24=Create(0)
sli_24_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_25=Create(0.0)
del_25=Create(0)
sli_25_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_26=Create(0.0)
del_26=Create(0)
sli_26_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_27=Create(0.0)
del_27=Create(0)
sli_27_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_28=Create(0.0)
del_28=Create(0)
sli_28_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_29=Create(0.0)
del_29=Create(0)
sli_29_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_30=Create(0.0)
del_30=Create(0)
sli_30_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_31=Create(0.0)
del_31=Create(0)
sli_31_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]

sli_32=Create(0.0)
del_32=Create(0)
sli_32_list=[9999,0,0,0,0,0,"UnNamed","", 0.0, 0.0]



slider_list=[sli_1_list,sli_2_list,sli_3_list,sli_4_list,sli_5_list,sli_6_list,sli_7_list,sli_8_list
,sli_9_list,sli_10_list,sli_11_list,sli_12_list,sli_13_list,sli_14_list,sli_15_list,sli_16_list
,sli_17_list,sli_18_list,sli_19_list,sli_20_list,sli_21_list,sli_22_list,sli_23_list,sli_24_list
,sli_25_list,sli_26_list,sli_27_list,sli_28_list,sli_29_list,sli_30_list,sli_31_list,sli_32_list]
key_frame_old=-1
page=Create(0)

string5="Page 1 %x0|Page 2 %x1|Page 3 %x2"

def draw():
	global page, sli_select, ipo_select, curve_select, def_min, def_max
	global sli_s_min, sli_s_max, type_select, sli_delete, key_name, write_file,han
	global del_1,del_2,del_3,del_4,del_5,del_6,del_7,del_8,del_9,del_10,del_11,del_12,del_13,del_14,del_15,del_16
	global del_17,del_18,del_19,del_20,del_21,del_22,del_23,del_24,del_25,del_26,del_27,del_28,del_29,del_30,del_31,del_32
	global sli_1,sli_2,sli_3,sli_4,sli_5,sli_6,sli_7,sli_8,sli_9,sli_10,sli_11,sli_12,sli_13,sli_14,sli_15,sli_16
	global sli_17,sli_18,sli_19,sli_20,sli_21,sli_22,sli_23,sli_24,sli_25,sli_26,sli_27,sli_28,sli_29,sli_30,sli_31,sli_32
	
	glClearColor(.2,.2,.2, 0.0)
	glClear(GL_COLOR_BUFFER_BIT)

	if page.val ==0:
		glClearColor(.2,.4,.2, 0.0)
		glClear(GL_COLOR_BUFFER_BIT)

		glColor3d(1,1,1)	

		this_slider=slider_list[0]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,625)
			Text(this_slider[6])
			sli_1=Slider(this_slider[7]+"  ",51,80,620,380,20, sli_1.val, this_slider[2], this_slider[3])
			del_1=Button("Del",101,480,620,50,20)
		this_slider=slider_list[1]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,595)
			Text(this_slider[6])
			sli_2=Slider(this_slider[7]+"  ",52,80,590,380,20, sli_2.val, this_slider[2], this_slider[3])
			del_2=Button("Del",102,480,590,50,20)
		this_slider=slider_list[2]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,565)
			Text(this_slider[6])
			sli_3=Slider(this_slider[7]+"  ",53,80,560,380,20, sli_3.val, this_slider[2],this_slider[3])
			del_3=Button("Del",103,480,560,50,20)
		this_slider=slider_list[3]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,535)
			Text(this_slider[6])
			sli_4=Slider(this_slider[7]+"  ",54,80,530,380,20, sli_4.val, this_slider[2],this_slider[3])
			del_4=Button("Del",104,480,530,50,20)
		this_slider=slider_list[4]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,505)
			Text(this_slider[6])
			sli_5=Slider(this_slider[7]+"  ",55,80,500,380,20, sli_5.val, this_slider[2],this_slider[3])
			del_5=Button("Del",105,480,500,50,20)
		this_slider=slider_list[5]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,475)
			Text(this_slider[6])
			sli_6=Slider(this_slider[7]+"  ",56,80,470,380,20, sli_6.val, this_slider[2],this_slider[3])
			del_6=Button("Del",106,480,470,50,20)
		this_slider=slider_list[6]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,445)
			Text(this_slider[6])
			sli_7=Slider(this_slider[7]+"  ",57,80,440,380,20, sli_7.val, this_slider[2],this_slider[3])
			del_7=Button("Del",107,480,440,50,20)
		this_slider=slider_list[7]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,415)
			Text(this_slider[6])
			sli_8=Slider(this_slider[7]+"  ",58,80,410,380,20, sli_8.val, this_slider[2],this_slider[3])
			del_8=Button("Del",108,480,410,50,20)
		this_slider=slider_list[8]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,385)
			Text(this_slider[6])
			sli_9=Slider(this_slider[7]+"  ",59,80,380,380,20, sli_9.val, this_slider[2],this_slider[3])
			del_9=Button("Del",109,480,380,50,20)
		this_slider=slider_list[9]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,355)
			Text(this_slider[6])
			sli_10=Slider(this_slider[7]+"  ",60,80,350,380,20, sli_10.val, this_slider[2],this_slider[3])
			del_10=Button("Del",110,480,350,50,20)
		this_slider=slider_list[10]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,325)
			Text(this_slider[6])
			sli_11=Slider(this_slider[7]+"  ",61,80,320,380,20, sli_11.val, this_slider[2],this_slider[3])
			del_11=Button("Del",111,480,320,50,20)
		this_slider=slider_list[11]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,295)
			Text(this_slider[6])
			sli_12=Slider(this_slider[7]+"  ",62,80,290,380,20, sli_12.val, this_slider[2],this_slider[3])
			del_12=Button("Del",112,480,290,50,20)
		this_slider=slider_list[12]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,265)
			Text(this_slider[6])
			sli_13=Slider(this_slider[7]+"  ",63,80,260,380,20, sli_13.val, this_slider[2],this_slider[3])
			del_13=Button("Del",113,480,260,50,20)
		this_slider=slider_list[13]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,235)
			Text(this_slider[6])
			sli_14=Slider(this_slider[7]+"  ",64,80,230,380,20, sli_14.val, this_slider[2],this_slider[3])
			del_14=Button("Del",114,480,230,50,20)
		this_slider=slider_list[14]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,205)
			Text(this_slider[6])
			sli_15=Slider(this_slider[7]+"  ",65,80,200,380,20, sli_15.val, this_slider[2],this_slider[3])
			del_15=Button("Del",115,480,200,50,20)
		this_slider=slider_list[15]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,175)
			Text(this_slider[6])
			sli_16=Slider(this_slider[7]+"  ",66,80,170,380,20, sli_16.val, this_slider[2],this_slider[3])
			del_16=Button("Del",116,480,170,50,20)
		glColor3d(1,1,1)
		glRasterPos2d(8,40)
		Text(msg_str)

		han=Toggle("Handle Type",28,100,10,100,20,han.val)
		glColor3d(1,1,1)
		glRasterPos2d(220,15)
		Text(handle_msg)
	if page.val ==1:
		glClearColor(.2,.4,.6, 0.0)
		glClear(GL_COLOR_BUFFER_BIT)
		glColor3d(1,1,.5)

		this_slider=slider_list[16]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,625)
			Text(this_slider[6])
			sli_17=Slider(this_slider[7]+"  ",67,80,620,380,20, sli_17.val, this_slider[2], this_slider[3])
			del_17=Button("Del",117,480,620,50,20)
		this_slider=slider_list[17]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,595)
			Text(this_slider[6])
			sli_18=Slider(this_slider[7]+"  ",68,80,590,380,20, sli_18.val, this_slider[2], this_slider[3])
			del_18=Button("Del",118,480,590,50,20)
		this_slider=slider_list[18]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,565)
			Text(this_slider[6])
			sli_19=Slider(this_slider[7]+"  ",69,80,560,380,20, sli_19.val, this_slider[2],this_slider[3])
			del_19=Button("Del",119,480,560,50,20)
		this_slider=slider_list[19]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,535)
			Text(this_slider[6])
			sli_20=Slider(this_slider[7]+"  ",70,80,530,380,20, sli_20.val, this_slider[2],this_slider[3])
			del_20=Button("Del",120,480,530,50,20)
		this_slider=slider_list[20]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,505)
			Text(this_slider[6])
			sli_21=Slider(this_slider[7]+"  ",71,80,500,380,20, sli_21.val, this_slider[2],this_slider[3])
			del_21=Button("Del",121,480,500,50,20)
		this_slider=slider_list[21]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,475)
			Text(this_slider[6])
			sli_22=Slider(this_slider[7]+"  ",72,80,470,380,20, sli_22.val, this_slider[2],this_slider[3])
			del_22=Button("Del",122,480,470,50,20)
		this_slider=slider_list[22]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,445)
			Text(this_slider[6])
			sli_23=Slider(this_slider[7]+"  ",73,80,440,380,20, sli_23.val, this_slider[2],this_slider[3])
			del_23=Button("Del",123,480,440,50,20)
		this_slider=slider_list[23]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,415)
			Text(this_slider[6])
			sli_24=Slider(this_slider[7]+"  ",74,80,410,380,20, sli_24.val, this_slider[2],this_slider[3])
			del_24=Button("Del",124,480,410,50,20)
		this_slider=slider_list[24]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,385)
			Text(this_slider[6])
			sli_25=Slider(this_slider[7]+"  ",75,80,380,380,20, sli_25.val, this_slider[2],this_slider[3])
			del_25=Button("Del",125,480,380,50,20)
		this_slider=slider_list[25]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,355)
			Text(this_slider[6])
			sli_26=Slider(this_slider[7]+"  ",76,80,350,380,20, sli_26.val, this_slider[2],this_slider[3])
			del_26=Button("Del",126,480,350,50,20)
		this_slider=slider_list[26]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,325)
			Text(this_slider[6])
			sli_27=Slider(this_slider[7]+"  ",77,80,320,380,20, sli_27.val, this_slider[2],this_slider[3])
			del_27=Button("Del",127,480,320,50,20)
		this_slider=slider_list[27]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,295)
			Text(this_slider[6])
			sli_28=Slider(this_slider[7]+"  ",78,80,290,380,20, sli_28.val, this_slider[2],this_slider[3])
			del_28=Button("Del",128,480,290,50,20)
		this_slider=slider_list[28]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,265)
			Text(this_slider[6])
			sli_29=Slider(this_slider[7]+"  ",79,80,260,380,20, sli_29.val, this_slider[2],this_slider[3])
			del_29=Button("Del",129,480,260,50,20)
		this_slider=slider_list[29]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,235)
			Text(this_slider[6])
			sli_30=Slider(this_slider[7]+"  ",80,80,230,380,20, sli_30.val, this_slider[2],this_slider[3])
			del_30=Button("Del",130,480,230,50,20)
		this_slider=slider_list[30]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,205)
			Text(this_slider[6])
			sli_31=Slider(this_slider[7]+"  ",81,80,200,380,20, sli_31.val, this_slider[2],this_slider[3])
			del_31=Button("Del",131,480,200,50,20)
		this_slider=slider_list[31]
		if this_slider[6] != "UnNamed":
			glRasterPos2d(8,175)
			Text(this_slider[6])
			sli_32=Slider(this_slider[7]+"  ",82,80,170,380,20, sli_32.val, this_slider[2],this_slider[3])
			del_32=Button("Del",132,480,170,50,20)
		glColor3d(1,1,1)
		glRasterPos2d(8,40)
		Text(msg_str)

		han=Toggle("Handle Type",28,100,10,100,20,han.val)
		glColor3d(1,1,1)
		glRasterPos2d(220,15)
		Text(handle_msg)
	if page.val ==2:
		glClearColor(.2,.2,.4, 0.0)
		glClear(GL_COLOR_BUFFER_BIT)
		glColor3d(.2,1,.2)
		glRasterPos2d(200,310)
		Text("RVK-POZER! Ver. 1.0a")	
		write_file=Button("Save Setup to File",25,10,300,160,30)
		glColor3d(1,1,1)
		glRasterPos2d(10,260)
		Text("Default Min/Max Settings")
		def_min=String("Min: ",9,210,255,60,20,def_min.val,12)
		def_max=String("Max: ",9,310,255,60,20,def_max.val,12)
		sli_select=Menu(string_sli, 24, 10, 200, 100, 20, sli_select.val)
		ipo_select=Menu(string_ipo, 22, 120, 200, 150, 20, ipo_select.val)
		key_name=String("Slider Name: ", 2, 120,170,150,20,key_name.val,32)
		curve_select=Menu(string_curve, 21, 290, 200, 150, 20, curve_select.val)
		type_select=Toggle("Type", 26, 10, 140, 60, 20, type_select.val)
		glColor3d(1,1,1)
		glRasterPos2d(85,145)
		Text(type_string)
		sli_delete=Button("Delete Slider", 27, 200, 30, 100, 20)
		set_slider_b=Button("Set Slider", 11, 320, 150, 80, 30)
		val_min=float(def_min.val)
		sli_s_minn=val_min
		sli_s_maxn=val_min
		val_max=float(def_max.val)
		sli_s_minx=val_max
		sli_s_maxx=val_max
		sli_s_min=Slider("min: ",21,80,110,380,20, sli_s_min.val, sli_s_minn, sli_s_minx)
		sli_s_max=Slider("max: ",21,80,80,380,20, sli_s_max.val, sli_s_maxn, sli_s_maxx)
		glColor3d(1,1,.3)
		glRasterPos2d(15,60)
		Text(err_str)
	Button("Exit", 1, 10, 10, 70, 20)	
	page=Menu(string5, 2, 360, 10, 100, 20, page.val)

	
def event(evt, val):

	global sli_2	
	if (evt== QKEY and not val):
		Exit()
	else:
		Blender.Draw.Draw()
	

def bevent(evt):
	global text_len1, text_len2, string3, string4, string5, string6,string7
	global use_slider,slider_max,key_name,type_string,err_str, msg_str,handle_str,handle_msg

	if   (evt== 1): 
		Exit()
	elif (evt== 2): Redraw(1)
	elif (evt==3): eval_ipos()
	
	elif (evt==10):
		move_key()
		Ipo.Recalc(ipo)
		Blender.Redraw(1)
	elif (evt==11):
		set_slider()
		key_name.val=""
		Redraw()
	elif (evt==22):
		get_curves()
		err_str=""
		Redraw()
	elif (evt==23):
		slider_type()
		Redraw()
	elif (evt==24):
		this_slider=evt
		slider_settings()
		Redraw()
	elif (evt==25):
		save_setup()
		Redraw()
	elif (evt==26):
		slider_type()
		Redraw()
	elif (evt==27):
		delete_slider()
		Redraw()
	elif (evt==28):
		if han.val:
			handle_str="Auto"
			handle_msg="Auto Align"
		else:
			handle_str="Vect"
			handle_msg="Vector Align"	
		Redraw()
	elif (evt>50):
		msg_str=""
		Redraw()
		this_slider=evt
		if this_slider > 100:
			this_slider=this_slider-50
			do_slider(this_slider)
			delete_key()
			Ipo.Recalc(this_ipo)
			Blender.Redraw(1)
			return
		do_slider(this_slider)
		move_key()
		Ipo.Recalc(this_ipo)
		Blender.Redraw(1)
		#use the event number as an index into a slider table
		#test at entry to see if this is a new action under the same event number.
		#if it is, use the old slider parameters, if new, load them and continue.

def do_slider(this_slider):

	global edit_curve, current_slider,this_ipo

	slider_val=get_value(this_slider)
	current_slider=slider_list[this_slider-51]
	this_ipo=ipo_s[current_slider[0]]
	these_curves=this_ipo.curves
	edit_curve=these_curves[current_slider[1]]

def delete_key():

	global edit_curve, msg_str
	time=Blender.Get("curframe")
	index=0
	points=edit_curve.points
	for point in points:
		pt_time=point.pt[0]
		if pt_time==time:
			del(points[index])
			edit_curve.points=points
			msg_str="Deleted Key"
			return
		index=index+1
	msg_str="No Key Found at this Frame"

def get_value(this_slider):

	global value_list

	global slider_val
	value_list=( sli_1.val, sli_2.val, sli_3.val, sli_4.val, sli_5.val, sli_6.val, sli_7.val, sli_8.val, sli_9.val, sli_10.val, sli_11.val, sli_12.val, sli_13.val, sli_14.val, sli_15.val, sli_16.val,sli_17.val, sli_18.val, sli_19.val, sli_20.val, sli_21.val, sli_22.val, sli_23.val, sli_24.val, sli_25.val, sli_26.val, sli_27.val, sli_28.val, sli_29.val, sli_30.val, sli_31.val, sli_32.val)
	value_index=this_slider-51
	slider_val=value_list[value_index]
	return slider_val

def slider_type():
	global sli_s_maxn, sli_s_maxx,sli_s_minn,sli_s_minx
	global slider_s_min, slider_s_max,type_string, err_str
	if not type_select.val:
		type_string=fixed
		sli_s_maxn=-2
		sli_s_maxx=2
		sli_s_max.val=1
		sli_s_minn=-2
		sli_s_minx=2
		sli_s_min.val=0
		err_str=""
	else: 
		type_string=sampled
		find_minmax()
		sli_s_min.val=sli_s_minn

		sli_s_max.val=sli_s_maxn
def slider_settings():
	global ipo_select, key_name, curve_select, type_select, sli_s_minn, sli_s_maxn, type_string,sli_s_maxx,sli_s_minx
	global sli_s_min, sli_s_max
	current_slider=slider_list[sli_select.val-1]
	value=current_slider[0]
	value=int(value)
	if value==9999:
		return
	value=value+1
	ipo_select.val=value
	Redraw()
	get_curves()
	key_name.val=current_slider[6]
	value=current_slider[1]
	curve_select.val=value+1
	type_select.val=current_slider[4]
	if not type_select.val:
		type_string=fixed
	else:
		type_string=sampled

	sli_s_minn=current_slider[8]
	sli_s_maxn=current_slider[8]
	current_slider[9]=float(current_slider[9])
	sli_s_minx=current_slider[9]
	sli_s_maxx=current_slider[9]
	sli_s_min.val=current_slider[2]
	sli_s_max.val=current_slider[3]

def set_slider():

	global slider_list, this_ipo, err_str

	this_slider=sli_select.val-1
	slider_data= slider_list[this_slider]
	slider_data[0]=ipo_select.val-1
	slider_data[1]=curve_select.val-1
	slider_data[2]=sli_s_min.val
	slider_data[3]=sli_s_max.val
	slider_data[4]=type_select.val
	this_ipo=ipo_s[ipo_select.val-1]
	if key_name.val=="":
		slider_data[6]=this_ipo.name
	else:
		slider_data[6]=key_name.val
	the_curves=this_ipo.curves
	this_curve=the_curves[curve_select.val-1]
	slider_data[7]=this_curve.name+"  "
	slider_data[8]=sli_s_min.val
	slider_data[9]=sli_s_max.val
	slider_list[this_slider]=slider_data
	err_str="Slider Set!"	

#Find existing IPOs in the drawing and format them into the menu string
def get_ipos():
	global string_ipo,ipo_s

	stringX= "IPOs %x0"
	ipo_s = Ipo.Get()
	ipo_num=len(ipo_s)
	dumnum=1
	ipo_list=[]
	nmbr=1
	for ip in ipo_s:		
		if len(ipo_s)>0:
			if nmbr > ipo_select.val:
				stringX = stringX+('|%s' %ip.name)
				numbr=str(dumnum)
				stringX=stringX+('%x')
				stringX=stringX+(numbr)
			nmbr=nmbr+1
			if (nmbr - ipo_select.val)==99:
				break
		dumnum=dumnum+1
	
	string_ipo=stringX

def get_curves():
	global string_curve

	stringX= "Curves %x0"

	menu_ipo=ipo_s[ipo_select.val-1]
	curves=menu_ipo.curves	

	dumnum=1
	nmbr=1
	for curve in curves:		
		if len(curves)>0:
			stringX = stringX+('|%s' %curve.name)
			numbr=str(dumnum)
			stringX=stringX+('%x')
			stringX=stringX+(numbr)
			nmbr=nmbr+1
			if (nmbr - curve_select.val)==99:
				break
		dumnum=dumnum+1

	string_curve=stringX

def move_key():
	global new_bzt, edit_key_index, old_slider

	this_frame= Blender.Get("curframe")

	if key_frame_old != this_frame:
		new_key(this_frame)
		return
	if old_slider!= current_slider:
		new_key(this_frame)
		old_slider=current_slider
		return
	if current_slider[4]:
		value=Ipo.Eval(edit_curve,slider_val)
	else:
		value=slider_val
	new_bzt=key_list[edit_key_index]
	new_bzt.pt[1]=value
	del key_list[edit_key_index]

	key_list.insert(edit_key_index,new_bzt)
	edit_curve.points=key_list
	
def new_key(this_frame):
	global new_bzt,edit_key_index

	edit_key_index, list_end, found_key= set_key()
	if found_key:
		if current_slider[4]:
			value=Ipo.Eval(edit_curve,slider_val)
		else:
			value=slider_val
		new_bzt=key_list[edit_key_index]
		new_bzt.pt[1]=value
		del key_list[edit_key_index]
		key_list.insert(edit_key_index,new_bzt)
		edit_curve.points=key_list
		return
	new_bzt= Blender.Ipo.BezTriple()
	new_bzt.pt[0]= this_frame
	if current_slider[4]:
		value=Ipo.Eval(edit_curve,slider_val)
	else:
		value=slider_val
	new_bzt.pt[1]=value

	h1_0=0
	h1_1=0
	h2_0=0
	h2_1=0
	f1=0
	f2=0
	f3=0

	new_bzt.h1[0]=h1_0
	new_bzt.h1[1]=h1_1
	new_bzt.h2[0]=h2_0
	new_bzt.h2[1]=h2_1
	new_bzt.f1=f1
	new_bzt.f2=f2
	new_bzt.f3=f3
	new_bzt.h1t=handle_str
	new_bzt.h2t=handle_str
	if list_end:
		key_list.append(new_bzt)
	else:
		key_list.insert(edit_key_index,new_bzt)
	edit_curve.points=key_list
	return

def set_key():
	global key_frame_old, key_list

	frame=Blender.Get("curframe")
	key_frame_old=frame
	key_list=edit_curve.points
	edit_key_index=0
	list_end=0
	found_key=0

	for point in key_list:
		this_frame=point.pt[0]
		if this_frame> frame:
			return edit_key_index, list_end, found_key
		if this_frame==frame:
			found_key=1
			return edit_key_index, list_end, found_key
		edit_key_index=edit_key_index+1
	list_end=1
	return edit_key_index, list_end, found_key
def find_minmax():
	global sli_s_minn, sli_s_minx,sli_s_maxn, sli_s_maxx, err_str
	if ipo_select.val==0:
		err_str="First Select IPO"
		return
	if curve_select.val==0:
		err_str="First Select Curve"
		return
	menu_ipo=ipo_s[ipo_select.val-1]
	curves=menu_ipo.curves
	curve=curves[curve_select.val-1]
	points=curve.points
	first=points[0]
	last=points[-1]
	min_time=first.pt[0]
	max_time=last.pt[0]
	sli_s_minn=min_time
	sli_s_maxn=min_time
	sli_s_minx=max_time
	sli_s_maxx=max_time
	err_str=""

def save_setup():
	global err_str
	try:
		f=open(file_string,'w')
		the_list=str(slider_list)
		f.write(the_list)
		f.close()
		err_str="OK, Setup Saved"
	except:
		err_str="Could Not Create File"

def get_number(index):
    global tmp_value
    a_char=filetxt[index]
    if a_char=='\040':
	return index,tmp_value,a_char
    if a_char==',':
	return index,tmp_value,a_char
    if a_char=="[":
	return index,tmp_value,a_char
    if a_char=="]":
	return index,tmp_value,a_char

    tmp_value=tmp_value+a_char
    return index,tmp_value,a_char
def read_file():
	global slider_list,filetxt,tmp_value, err_str
	try:
		f=open(file_string)
		filetxt=f.read()
		f.close()
	except:
		err_str="Setup File Not Found"
		return
	index=2
	slider_list=[]
	tmp_list=[]
	tmp_value=""

	while index< len(filetxt):
		index,tmp_value,a_char=get_number(index)
		if a_char==',':
			try:
				tmp_value=int(tmp_value)
			except:
				try:
					tmp_value=float(tmp_value)
				except:
					tmp_value=tmp_value[1:-1]
			tmp_list.append(tmp_value)
			tmp_value=""
		if a_char=="[":
			slider_list.append(tmp_list)
			tmp_list=[]
		index=index+1
	tmp_value=float(tmp_value)
	tmp_list.append(tmp_value)
	slider_list.append(tmp_list)

def delete_slider():
	global slider_list, this_ipo,string_curve,ipo_select, key_name

	this_slider=sli_select.val-1
	slider_data= slider_list[this_slider]
	slider_data[0]=9999
	slider_data[1]=0
	slider_data[2]=0
	slider_data[3]=0
	slider_data[4]=0
	slider_data[5]=0
	slider_data[6]="UnNamed"
	slider_data[7]=""
	slider_data[8]=0
	slider_data[9]=0
	slider_list[this_slider]=slider_data
	string_curve= "Curves %x0"
	ipo_select.val=0
	key_name.val=""	

Register(draw, event, bevent)

get_ipos()
read_file()
frame=Blender.Get("curframe")
key_frame_old= -1 