BS 0.1 基础构建完成 / 0.2 Visual 同为Unity UI控件部分
This commit is contained in:
238
Convention/[ES3]/Easy Save 3/Editor/ES3Window.cs
Normal file
238
Convention/[ES3]/Easy Save 3/Editor/ES3Window.cs
Normal file
@@ -0,0 +1,238 @@
|
||||
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()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user