macroScript SavePerspective
	category:"Viewports"
	toolTip:"Save Perspective Viewports"
(

--SAVE PERSPECTIVE VIEWPORTS
--Version 1.1
--Started: 1/13/99
--Edited:  7/18/00
--by Borislav Petrov
--bobo@email.archlab.tuwien.ac.at
--http://gfxcentral.com/bobo/
---------------------------------------


global spv_nf

if vp_names_array == undefined then vp_names_array = #()
if vp_array == undefined then vp_array = #()

rollout save_vp "Save Perspective"
(
dropdownlist vp_list items:vp_names_array width:100 align:#center
edittext vp_name text:"Viewport" fieldwidth:100 align:#center offset:[-2,-4]
button save_vp "Save" across:3 align:#left width:32 height:18 offset:[-7,-4] tooltip:"Save current Perspective Viewport"
button rename_vp "Rename"  align:#center width:48 height:18 offset:[7,-4] tooltip:"Replace Current Viewport Definition's Name"
button delete_vp "X" align:#right width:20 height:18 offset:[8,-4] tooltip:"Delete Current Viewport Definition"
button save_file "Write" across:3 align:#left width:32 height:18 offset:[-7,-4] tooltip:"Output current list to SPV file"
button load_file "Read" align:#center width:35 height:18 offset:[0,-4] tooltip:"Load a list from SPV file"
button save_macro "Macro" align:#right width:35 height:18 offset:[9,-4] tooltip:"Create Viewport Presets MacroScript"

on save_macro pressed do
(
suggest_name = cui.getDir()+"\\macroscripts\\SPV_" + vp_names_array[vp_list.selection] + ".mcr"
out_name = getSaveFileName caption:"Save SPV Preset as MacroScript" filename:suggest_name types:"MacroScript (*.mcr)|*.mcr|All Files (*.*)|*.*|"
if out_name != undefined then
(
if substring out_name (out_name.count-3) 4 != ".mcr" then out_name += ".mcr"
script_name = getFilenameFile 
out_file = createfile (out_name)
fix_name = ""
for i = 1 to (vp_names_array[vp_list.selection]).count do
(
if substring (vp_names_array[vp_list.selection]) i 1 == " " then 
	(
	fix_name += "_" 
	)
	else 
	(
	fix_name += (substring (vp_names_array[vp_list.selection]) i 1)
	)
)

txt = "MacroScript SPV_"+ fix_name +" category:\"Viewports\" tooltip:\""+(vp_names_array[vp_list.selection])+"\" \n( "
format "%\n" txt to:out_file

format "%\n" "--Generated Automatically by SavePerspectiveView Script v1.0" to:out_file

txt = "try ("
format "%\n" txt to:out_file
format "%\n" "viewport.setType #view_persp_user" to:out_file
format "%%\n" "viewport.SetTM " (vp_array[vp_list.selection] as string) to:out_file
format "%\n" "max views redraw" to:out_file
txt = ")catch()\n)"
format "%\n" txt to:out_file

close out_file

in_file = openfile out_name
txt = ""
while not eof(in_file) do
	(
	try
	(
	txt += (readline in_file)
	txt +="\n"
	)catch()
	)
try 
(	
execute txt	
)catch()

)
)


on save_vp pressed do
(


if viewport.getType() == #view_persp_user or viewport.getType() == #view_camera or viewport.getType() == #view_iso_user then
(
new_matrix = viewport.GetTM ()
append vp_array new_matrix
vp_names_array = vp_list.items
append vp_names_array vp_name.text
vp_list.items = vp_names_array
persistent global vp_array
persistent global vp_names_array 
vp_name.text = "Viewport"+(vp_list.items.count+1) as string
)
else
(

messagebox "Current Viewport is NOT\na Perspective Viewport!" title:"SPV"
)
)

on vp_list selected slc do
(
max vpt persp user
new_vp = vp_array[slc]
viewport.SetTM (new_vp)
max views redraw
vp_name.text = vp_names_array[slc]
)

on rename_vp pressed do
(
if vp_list.items[vp_list.selection] != undefined then
	(
	temp_array = vp_list.items
	temp_array[vp_list.selection] = vp_name.text
	vp_list.items = temp_array
	)
)

on delete_vp pressed do
(
if vp_list.items[vp_list.selection] != undefined then
	(
	vp_names_array = vp_list.items
	old_selection = vp_list.selection
	deleteItem vp_array vp_list.selection
	deleteItem vp_names_array vp_list.selection 
	if old_selection  > 1 then old_selection -= 1
	vp_list.items = vp_names_array
	vp_list.selection = old_selection 
	persistent global vp_array
	persistent global vp_names_array 
	)
)

on save_file pressed do
(
if MaxFilename == "" then 
	(
	suggest_name = "untitled.spv" 
	)
	else
	(
	suggest_name = (getfilenamefile(MaxFileName)+".spv")
	)
out_name = getSaveFileName caption:"Save SPV File" filename:suggest_name types:"SavePerspectiveView (*.spv)|*.spv|All Files (*.*)|*.*|"
if out_name != undefined then 
	(
	out_file = createfile out_name
	format "%\n" "SavePerspectiveViewport Version 1.0" to:out_file
	format "%\n" (vp_array.count as string) to:out_file
	
	for i = 1 to vp_array.count do
		(
		format "%\n" (vp_names_array[i] as string) to:out_file
		format "%\n" (vp_array[i] as string) to:out_file
		)
	close out_file
	)

)--end save


on load_file pressed do
(
in_name = getOpenFileName caption:"Open SPV File" filename:"" types:"SavePerspectiveView (*.spv)|*.spv|All Files (*.*)|*.*|"
if in_name != undefined then 
	(
	try
	(
	in_file = openfile in_name
	str = readline in_file
	if findstring str "SavePerspectiveViewport" > 0 then
		(
		number_of_entries = (readline in_file) as integer
		vp_names_array = #()
		vp_array = #()
		for i = 1 to number_of_entries do
			(
			str = readline in_file
			append vp_names_array str
			str = readline in_file
			append vp_array (execute str)
			)
		)	
	close in_file
	vp_list.items = vp_names_array
	vp_list.selection = 1
	)
	catch ()
	)

)--end load



)--end rollout

if spv_nf != undefined then closerolloutfloater spv_nf
spv_nf = newrolloutfloater "SPV" 140 142 100 100 

addrollout save_vp spv_nf
)