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()
 | 
						|
        {
 | 
						|
        }
 | 
						|
	}
 | 
						|
} |