/*
	ViewsMan v.1.0 [2010-04-26] by Anubis [project3d.narod.ru]
	
	Save and restore unlimited views.
	You can save views in one scene and load them in another scene.
	Double click in the list to restore the saved view.
	
	The idea come from AutoCAD where you can save up to 5 views.
	Im not sure (never see) how exactly this feature works in AutoCAD,
	I just read about this in the ScriptSpot.com,
	so I hope this tool is useful anyway ;-)
*/
if viewsMan != undefined do
	if classOf viewsMan == RolloutClass do
		destroyDialog viewsMan
rollout viewsMan "ViewsMan"
(
	local store = #(), file
	
	editText et_rename "Rename selected to:" bold:true --width:220
	button bt_addRec "Add Record" width:100 align:#left
	button bt_delSel "Remove Selected" width:100 align:#left
	button bt_delAll "Remove All" width:100 align:#left
	button bt_save "Save..." width:100 align:#left
	button bt_load "Load..." width:100 align:#left
	listBox lb_list "" items:#() pos:[115,28] width:192
	
	on et_rename entered txt do
	(
		if txt != "" and lb_list.selection != 0 do (
			store[lb_list.selection][1] = txt
			lb_list.selected = txt
		)
	)
	on bt_addRec pressed do
	(
		vName = "View " + (lb_list.items.count+1) as string
		append store #(vName,viewport.getTM(),viewport.GetFOV())
		tmp = lb_list.items
		append tmp vName
		lb_list.items = tmp
	)
	on bt_delSel pressed do
	(
		itm = lb_list.selection
		if itm > 0 do (
			tmp = lb_list.items
			deleteItem tmp itm
			deleteItem store itm
			lb_list.items = tmp
		)
	)
	on bt_delAll pressed do
	(
		lb_list.items = #()
		store = #()
	)
	on lb_list selected itm do
	(
		et_rename.text = lb_list.selected
		print lb_list.selection -- debug
		print lb_list.items[itm] -- debug
	)
	on lb_list doubleClicked itm do
	(
		viewport.setTM store[itm][2] -- restore view
		if (maxVersion())[1] >= 10000 do -- if Max2008+
			viewport.SetFOV store[itm][3] -- restore FOV
	)
	on bt_save pressed do
	(
		file = getSaveFileName types:"Text File (*.txt)|*.txt|All Files (*.*)|*.*|"
		if file != undefined do (
			f = createFile file
			print store to:f
			close f
		)
	)
	on bt_load pressed do
	(
		file = getOpenFileName types:"Text File (*.txt)|*.txt|All Files (*.*)|*.*|"
		if file != undefined do (
			f = openFile file
			store = #()
			while not eof f do (append store (readValue f))
			close f
			--// build items list ...
			tmp = for itm in store collect itm[1]
			lb_list.items = tmp
		)
	)
)
createDialog viewsMan 320 170 \
style:#(#style_titlebar, #style_border, #style_sysmenu, #style_minimizebox)
