macroScript CopyKeyTypes category:"Bobo_s Tools"
(

--COPY KEY TYPES
--Version 0.1
--Started: 09/23/99
--Edited:  09/23/99
--by Borislav Petrov
--http://gfxcentral.com/bobo/
------------------------------

global ckt_floater
local source_track = undefined
local target_track = undefined
local user_in = 1
local user_out = 1


rollout ckt_roll "CopyKeyTypes"
(
group "Source"
(
checkbutton use_source_track "Use" checked:true across:3 width:48 align:#left
button get_source_track "Get Source Track" width:150 align:#center
button update_source_track "Update" checked:true width:48 align:#right

edittext s_client "Client:" txt:""
edittext s_name "Track" txt:""
edittext s_cont "Contr." txt:""

spinner s_key "Key:" range:[0,0,0] type:#integer fieldwidth:50
dropdownlist s_in "In Tangent Type" items:#("Smooth","Linear","Step","Fast","Slow","Custom") width:120 across:2 align:#left
dropdownlist s_out "Out Tangent Type" items:#("Smooth","Linear","Step","Fast","Slow","Custom") width:120 align:#right
)


group "Target"
(
button get_same "Same" width:48 align:#left across:3
button get_target_track "Get Target Track" enabled:false width:150 align:#center
button update_target_track "Update" checked:true width:48 align:#right

edittext t_client "Client:" txt:""
edittext t_name "Track" txt:""
edittext t_cont "Contr." txt:""

spinner from_key "From Key:  " type:#integer across:2 align:#left range:[0,0,0]
spinner to_key "To Key:" type:#integer align:#right range:[0,0,0]
spinner from_time "From Time:" type:#integer across:2 align:#left range:[animationrange.start,animationrange.end,animationrange.start]
spinner to_time "To Time:" type:#integer align:#right range:[animationrange.start,animationrange.end,animationrange.end]
)

button copy_keys "SET TARGET KEY TYPES" width:260 height:30 enabled:false


fn set_source_tangents =
(
try
(
	itt = s_keys_array[s_key.value].inTangentType
		case itt of
		(
		#smooth: s_in.selection = 1
		#linear: s_in.selection = 2
		#step: s_in.selection = 3
		#fast: s_in.selection = 4
		#slow: s_in.selection = 5
		#custom: s_in.selection = 6
		)
	ott = s_keys_array[s_key.value].outTangentType
		case ott of
		(
		#smooth: s_out.selection = 1
		#linear: s_out.selection = 2
		#step: s_out.selection = 3
		#fast: s_out.selection = 4
		#slow: s_out.selection = 5
		#custom: s_out.selection = 6
		)
)
catch()

)


on use_source_track changed state do
(
get_source_track.enabled= state
s_client.enabled = state
s_name.enabled = state
s_key.enabled = state
s_cont.enabled = state

if source_track == undefined then get_target_track.enabled = not state
if state then 
	(
	user_in = s_in.selection
	user_out = s_out.selection
	set_source_tangents ()
	)
	else
	(
	s_in.selection = user_in
	s_out.selection = user_out
	)
)


on from_key changed value do
(
try
(
from_time.value = ((t_keys_array[value].time as float)  / (4800/FrameRate))
)
catch ()
)

on to_key changed value do
(
try
(
to_time.value = ((t_keys_array[value].time as float)  / (4800/FrameRate))
)
catch()
)

on s_key changed value do
(
set_source_tangents ()
)

fn setup_source_track =
(
if source_track != undefined then
(
s_keys_array = source_track.anim.keys
if s_keys_array.count > 0 then
	(
	s_client.text = source_track.client as string
	s_name.text = source_track.name as string
	s_cont.text = source_track.anim as string	
	s_key.range = [1,s_keys_array.count,1]
	get_target_track.enabled = true
	set_source_tangents ()
	)
	else
	(
	source_track = undefined
	)
)	
)

on get_source_track pressed do
(
source_track = trackView.pickTrackDlg()
setup_source_track ()
)

on update_source_track pressed do
(
setup_source_track ()
)



fn setup_target =
(
if target_track != undefined then
(
try
(
t_client.text = target_track.client as string
t_name.text = target_track.name as string
t_cont.text = target_track.anim as string
t_keys_array = target_track.anim.keys

if t_keys_array.count > 0 then
(
from_key.range = [1,t_keys_array.count,1]
to_key.range = [1,t_keys_array.count,t_keys_array.count]
from_time.range = [((t_keys_array[1].time as float)  / (4800/FrameRate)),((t_keys_array[t_keys_array.count].time as float)  / (4800/FrameRate)),((t_keys_array[1].time as float)  / (4800/FrameRate)) ]
to_time.range = [((t_keys_array[1].time as float)  / (4800/FrameRate)),((t_keys_array[t_keys_array.count].time as float)  / (4800/FrameRate)),((t_keys_array[t_keys_array.count].time as float)  / (4800/FrameRate)) ]
copy_keys.enabled = true
)
else
(
from_key.range = [0,0,0]
to_key.range = [0,0,0]
from_time.range = [0,0,0]
to_time.range = [0,0,0]
copy_keys.enabled = false
)
)
catch
(
from_key.range = [0,0,0]
to_key.range = [0,0,0]
from_time.range = [0,0,0]
to_time.range = [0,0,0]
copy_keys.enabled = false
)

)

)--end fn

on get_target_track pressed do
(
target_track = trackView.pickTrackDlg()
setup_target ()
)

on get_same pressed do
(
target_track = source_track
setup_target ()
)

on update_target_track pressed do
(
setup_target ()
)


on copy_keys pressed do
(
for i = from_key.value to to_key.value do
(

if use_source_track.checked then
(
try
(
t_keys_array[i].inTangentType = s_keys_array[s_key.value].inTangentType 
t_keys_array[i].outTangentType = s_keys_array[s_key.value].outTangentType 
t_keys_array[i].inTangent = s_keys_array[s_key.value].inTangent
t_keys_array[i].outTangent = s_keys_array[s_key.value].outTangent
)
catch(print ("Error Copying To Key "+i as string))
)

else
(
try
(
	case s_in.selection of
		(
		1: itt = #smooth
		2: itt = #linear
		3: itt = #step
		4: itt = #fast
		5: itt = #slow
		6: itt = #custom
		)
		
	case s_out.selection of
		(
		1: ott = #smooth
		2: ott = #linear
		3: ott = #step
		4: ott = #fast
		5: ott = #slow
		6: ott = #custom
		)
		
t_keys_array[i].inTangentType = itt
t_keys_array[i].outTangentType = ott

)
catch(print ("Error Copying To Key "+i as string))


)--end if

)--end i

)



)--end rollout

if ckt_floater != undefined then closerolloutfloater ckt_floater
ckt_floater = newrolloutfloater "Bobo's CopyKeyTypes" 300 450 100 100
addrollout ckt_roll ckt_floater


)--end util