public FlowSceneItem(FlowSystemEditorWindow rootWindow, FlowWindow window, AnimatedValues.AnimFloat progressValue) {

			this.isLocked = false;

			this.rootWindow = rootWindow;
			this.window = window;
			this.currentScene = EditorApplication.currentScene;
			this.layouts = new List<WindowLayout>();
			this.layoutPrefab = null;

			this.screens = new List<WindowBase>();
			this.screenPrefab = null;

			#if UNITY_5_0
			EditorApplication.NewEmptyScene();
			#else
			EditorApplication.NewScene();
			#endif

			var popupOffset = 100f;
			var popupSize = new Vector2(rootWindow.position.width - popupOffset * 2f, rootWindow.position.height - popupOffset * 2f);
			var popupRect = new Rect(rootWindow.position.x + popupOffset, rootWindow.position.y + popupOffset, popupSize.x, popupSize.y);

			this.view = FlowSceneViewWindow.CreateInstance<FlowSceneViewWindow>();
			FlowSceneView.recompileChecker = this.view;

			var title = "UI.Windows Flow Screen Editor ('{0}')";
			title = string.Format(title, this.window.title);
			#if !UNITY_4
			this.view.titleContent = new GUIContent(string.Format(title, this.window.title));
			#else
			this.view.title = string.Format(title, this.window.title);
			#endif
			this.view.position = popupRect;
			this.view.rootWindow = rootWindow;
			
			/*this.inspector = FlowInspectorWindow.CreateInstance<FlowInspectorWindow>();
			this.inspector.position = popupRect;
			this.inspector.rootWindow = rootWindow;
			this.inspector.Repaint();
			this.inspector.Focus();
			
			this.hierarchy = FlowHierarchyWindow.CreateInstance<FlowHierarchyWindow>();
			this.hierarchy.position = popupRect;
			this.hierarchy.rootWindow = rootWindow;
			this.hierarchy.Repaint();
			this.hierarchy.Focus();*/

			this.Show();

			//this.inspector.Repaint();
			//this.inspector.Focus();
			//this.hierarchy.Repaint();
			//this.hierarchy.Focus();
			this.view.Repaint();
			this.view.Focus();

			this.autoloadedScreen = false;
			this.ReloadScreens();
			this.autoloadedLayout = false;
			this.ReloadLayouts();

			this.defaultRects = false;

			progressValue.valueChanged.AddListener(() => {
				
				this.view.DrawProgress(progressValue.value);
				//this.inspector.DrawProgress(progressValue.value);
				//this.hierarchy.DrawProgress(progressValue.value);

				if (progressValue.value == progressValue.target) {
					
					this.view.Repaint();
					this.view.Focus();

				}

			});

		}
		public void Dispose(bool onDestroy = false, AnimatedValues.AnimFloat progressValue = null) {

			System.Action close = () => {
				
				if (this.view != null && onDestroy == false) this.view.Close();
				if (this.inspector != null && onDestroy == false) this.inspector.Close();
				if (this.hierarchy != null && onDestroy == false) this.hierarchy.Close();
				this.view = null;
				this.inspector = null;
				this.hierarchy = null;

			};

			if (progressValue != null) {

				progressValue.valueChanged.AddListener(() => {
					
					this.view.DrawProgress(progressValue.value);
					//this.inspector.DrawProgress(progressValue.value);
					//this.hierarchy.DrawProgress(progressValue.value);

					if (progressValue.value == progressValue.target) {

						close();

					}

				});

			} else {

				close();

			}

			if (string.IsNullOrEmpty(this.currentScene) == true) {

				EditorApplication.NewScene();

			} else {
				
				EditorApplication.OpenScene(this.currentScene);

			}

			SceneView.onSceneGUIDelegate -= this.OnGUI;

		}