This is a test script for layout in the workbench.

Folder Creation ..
	- DnD view over view
	- DnD view over folder
	- DnD view over view in floating window
	- NEG TEST - DnD view over editor area. 
	- DnD editor over editor
	- DnD editor over editor folder
	- NEG TEST - DnD editor over view area.  

Folder Breakdown ..
	- DnD view out of folder with 2
	- DnD view out of folder with 3.  Folder should remain.
	- DnD view out of folder in floating window
	- DnD editor out of editor folder with 2
	- DnD editor out of editor folder with 3.  Folder should remain

Relative Drag and Drop ..
	- DnD view to top, right, bottom, left of another view
	- DnD view to top, right, bottom, left of folder
	- DnD view to top, right, bottom, left of editor area. 
	- DnD editor within editor area

Detached Windows ..
	- DnD view out of window, open detached window
	- DnD view back into window, close detached window
	- DnD second view over floating window 
	- DnD second view out of floating window to create second 
		detached window
	- DnD second view out of floating window onto main.  

Tab Items
	- reorder items in view folder by dragging tabs
	- reorder itmes in editor folder by dragging tabs

Fast Views
	- DnD view over shortcut bar.  It should become fast view
	- Open fast view.  Unpin.  It should return to last position in 
		root layout.

Page Switch
	- Verify layout persistance of main window when switching pages
	- Verify layout persistance of detached windows when switching pages

Zoom
	- zoom / unzoom view in root layout
	- zoom / unzoom view in folder.  Verify folder not visible
	- zoom / unzoom editor in single folder.  Verify no other 
		editors visible
	- zoom / unzoom editor in mult-folder editor area.  Verify no 
		other editors visible
	- NEG TEST - zoom / unzoom view in detached window.  Should have 
		no effect

The following actions should maintain zoom
	- Show View ( if it is zoomed View )
	- Show View ( if view is visible in Detached Window )
	- switch to another page and back
	- click on any visible view or editor
	- Show / hide fast view

The following actions should cause unzoom
	- Open editor
	- Close editor
	- Close all editors
	- Show / Hide editor area
	- Show view / editor which is not visible
	- Activate view / editor which is not visible
	- Reset perspective
	- Save perspective
	- Change perspective
	- DnD zoom view out of main window to detached window
	- DnD view in detached window onto zoom view

The following actions cause unzoom now, but it would be convenient 
if they didn't in future
	- Close detached view.
	- All DnD

Persistance Between Sessions
	- ensure layout is persisted between sessions
	- fast views
	- view layout
	- detached windows
	- open editors

Placeholders
	- Drag view to new position, close, reopen.
	- Drag view to folder, close, reopen.
	- Drag view to detached, close, reopen.
	- Close all views in folder, reopen one by one.
	- Make view fast, restore.
	- Make folder fast, restore views one by one.
