238 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			238 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C#
		
	
	
	
| using UnityEngine;
 | |
| using UnityEditor;
 | |
| using System.Linq;
 | |
| 
 | |
| namespace ES3Editor
 | |
| {
 | |
| 	public class ES3Window : EditorWindow
 | |
| 	{
 | |
| 		private SubWindow[] windows = null;
 | |
| 
 | |
| 		public SubWindow currentWindow;
 | |
| 
 | |
| 		[MenuItem("Window/Easy Save 3", false, 1000)]
 | |
|         [MenuItem("Assets/Easy Save 3/Open Easy Save 3 Window", false, 1000)]
 | |
| 		public static void Init()
 | |
| 		{
 | |
| 			// Get existing open window or if none, make a new one:
 | |
| 			ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window));
 | |
|             if(window != null)
 | |
| 			    window.Show();
 | |
| 		}
 | |
| 
 | |
| 		public static void InitAndShowHome()
 | |
| 		{
 | |
| 			// Get existing open window or if none, make a new one:
 | |
| 			ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window));
 | |
|             if (window != null)
 | |
|             {
 | |
|                 window.Show();
 | |
|                 window.SetCurrentWindow(typeof(HomeWindow));
 | |
|             }
 | |
| 		}
 | |
| 
 | |
|         [MenuItem("Tools/Easy Save 3/Auto Save", false, 100)]
 | |
|         public static void InitAndShowAutoSave()
 | |
| 		{
 | |
| 			// Get existing open window or if none, make a new one:
 | |
| 			ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window));
 | |
|             if (window != null)
 | |
|             {
 | |
|                 window.Show();
 | |
|                 window.SetCurrentWindow(typeof(AutoSaveWindow));
 | |
|             }
 | |
| 		}
 | |
| 
 | |
|         public static void InitAndShowReferences()
 | |
|         {
 | |
|             // Get existing open window or if none, make a new one:
 | |
|             ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window));
 | |
|             if (window != null)
 | |
|             {
 | |
|                 window.Show();
 | |
|                 window.SetCurrentWindow(typeof(ReferencesWindow));
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         [MenuItem("Tools/Easy Save 3/Types", false, 100)]
 | |
|         public static void InitAndShowTypes()
 | |
|         {
 | |
|             // Get existing open window or if none, make a new one:
 | |
|             ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window));
 | |
|             if (window != null)
 | |
|             {
 | |
|                 window.Show();
 | |
|                 window.SetCurrentWindow(typeof(TypesWindow));
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public static void InitAndShowTypes(System.Type type)
 | |
|         {
 | |
|             // Get existing open window or if none, make a new one:
 | |
|             ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window));
 | |
|             if (window != null)
 | |
|             {
 | |
|                 window.Show();
 | |
|                 var typesWindow = (TypesWindow)window.SetCurrentWindow(typeof(TypesWindow));
 | |
|                 typesWindow.SelectType(type);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         [MenuItem("Tools/Easy Save 3/Settings", false, 100)]
 | |
|         public static void InitAndShowSettings()
 | |
|         {
 | |
|             // Get existing open window or if none, make a new one:
 | |
|             ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window));
 | |
|             if (window != null)
 | |
|             {
 | |
|                 window.Show();
 | |
|                 window.SetCurrentWindow(typeof(SettingsWindow));
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         [MenuItem("Tools/Easy Save 3/Tools", false, 100)]
 | |
|         public static void InitAndShowTools()
 | |
|         {
 | |
|             // Get existing open window or if none, make a new one:
 | |
|             ES3Window window = (ES3Window)EditorWindow.GetWindow(typeof(ES3Window));
 | |
|             if (window != null)
 | |
|             {
 | |
|                 window.Show();
 | |
|                 window.SetCurrentWindow(typeof(ToolsWindow));
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public void InitSubWindows()
 | |
| 		{
 | |
| 			windows = new SubWindow[]{
 | |
| 				new HomeWindow(this),
 | |
| 				new SettingsWindow(this),
 | |
| 				new ToolsWindow(this),
 | |
| 				new TypesWindow(this),
 | |
| 				new AutoSaveWindow(this)
 | |
| 				//, new ReferencesWindow(this)
 | |
| 			};
 | |
| 		}
 | |
| 
 | |
| 		void OnLostFocus()
 | |
| 		{
 | |
| 			if(currentWindow != null)
 | |
| 				currentWindow.OnLostFocus();
 | |
| 		}
 | |
| 
 | |
|         private void OnFocus()
 | |
|         {
 | |
|             if (currentWindow != null)
 | |
|                 currentWindow.OnFocus();
 | |
|         }
 | |
| 
 | |
|         void OnDestroy()
 | |
| 		{
 | |
| 			if(currentWindow != null)
 | |
| 				currentWindow.OnDestroy();
 | |
| 		}
 | |
| 
 | |
| 		void OnEnable()
 | |
| 		{
 | |
| 			if(windows == null)
 | |
| 				InitSubWindows();
 | |
| 			// Set the window name and icon.
 | |
| 			var icon = AssetDatabase.LoadAssetAtPath<Texture2D>(ES3Settings.PathToEasySaveFolder()+"Editor/es3Logo16x16.png");
 | |
| 			titleContent = new GUIContent("Easy Save", icon);
 | |
| 
 | |
| 			// Get the last opened window and open it.
 | |
| 			if(currentWindow == null)
 | |
| 			{
 | |
| 				var currentWindowName = EditorPrefs.GetString("ES3Editor.Window.currentWindow", windows[0].name);
 | |
| 				for(int i=0; i<windows.Length; i++)
 | |
| 				{
 | |
| 					if(windows[i].name == currentWindowName)
 | |
| 					{
 | |
| 						currentWindow = windows[i];
 | |
| 						break;
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
|         private void OnHierarchyChange()
 | |
|         {
 | |
|             if (currentWindow != null)
 | |
|                 currentWindow.OnHierarchyChange();
 | |
|         }
 | |
| 
 | |
|         void OnGUI()
 | |
| 		{
 | |
| 			var style = EditorStyle.Get;
 | |
| 
 | |
| 			// Display the menu.
 | |
| 			EditorGUILayout.BeginHorizontal();
 | |
| 
 | |
| 			for(int i=0; i<windows.Length; i++)
 | |
| 			{
 | |
| 				if(GUILayout.Button(windows[i].name, currentWindow == windows[i] ? style.menuButtonSelected : style.menuButton))
 | |
| 					SetCurrentWindow(windows[i]);
 | |
| 			}
 | |
| 
 | |
| 			EditorGUILayout.EndHorizontal();
 | |
| 
 | |
| 			if(currentWindow != null)
 | |
| 				currentWindow.OnGUI();
 | |
| 		}
 | |
| 
 | |
| 		void SetCurrentWindow(SubWindow window)
 | |
| 		{
 | |
|             if (currentWindow != null)
 | |
|                 currentWindow.OnLostFocus();
 | |
|             currentWindow = window;
 | |
|             currentWindow.OnFocus();
 | |
| 			EditorPrefs.SetString("ES3Editor.Window.currentWindow", window.name);
 | |
| 		}
 | |
| 
 | |
| 		SubWindow SetCurrentWindow(System.Type type)
 | |
| 		{
 | |
| 			currentWindow.OnLostFocus();
 | |
| 			currentWindow = windows.First(w => w.GetType() == type);
 | |
| 			EditorPrefs.SetString("ES3Editor.Window.currentWindow", currentWindow.name);
 | |
|             return currentWindow;
 | |
| 		}
 | |
| 			
 | |
| 		// Shows the Easy Save Home window if it's not been disabled.
 | |
| 		// This method is called from the Postprocessor.
 | |
| 		public static void OpenEditorWindowOnStart()
 | |
| 		{
 | |
| 			if(EditorPrefs.GetBool("Show ES3 Window on Start", true))
 | |
| 				ES3Window.InitAndShowHome();
 | |
| 			EditorPrefs.SetBool("Show ES3 Window on Start", false);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public abstract class SubWindow
 | |
| 	{
 | |
| 		public string name;
 | |
| 		public EditorWindow parent;
 | |
| 		public abstract void OnGUI();
 | |
| 
 | |
| 		public SubWindow(string name, EditorWindow parent)
 | |
| 		{
 | |
| 			this.name = name;
 | |
| 			this.parent = parent;
 | |
| 		}
 | |
| 
 | |
| 		public virtual void OnLostFocus()
 | |
| 		{
 | |
| 		}
 | |
| 
 | |
|         public virtual void OnFocus()
 | |
|         {
 | |
|         }
 | |
| 
 | |
| 		public virtual void OnDestroy()
 | |
| 		{
 | |
| 		}
 | |
| 
 | |
|         public virtual void OnHierarchyChange()
 | |
|         {
 | |
|         }
 | |
| 	}
 | |
| } |