120 lines
4.1 KiB
C#
120 lines
4.1 KiB
C#
|
|
using System.Reflection;
|
|||
|
|
|
|||
|
|
using UnityEditorWindow = UnityEditor.EditorWindow;
|
|||
|
|
|
|||
|
|
#if !UNITY_6000_0_OR_NEWER
|
|||
|
|
using Unity.PlasticSCM.Editor.UnityInternals.UnityEditor;
|
|||
|
|
using EditorWindow = Unity.PlasticSCM.Editor.UnityInternals.UnityEditor.EditorWindow;
|
|||
|
|
#else
|
|||
|
|
using UnityEditor;
|
|||
|
|
using EditorWindow = UnityEditor.EditorWindow;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
namespace Unity.PlasticSCM.Editor.UI
|
|||
|
|
{
|
|||
|
|
internal static class RunModal
|
|||
|
|
{
|
|||
|
|
static RunModal()
|
|||
|
|
{
|
|||
|
|
InitializeInfo();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
internal static void Dialog(UnityEditorWindow window)
|
|||
|
|
{
|
|||
|
|
ShowAsUtility(window);
|
|||
|
|
|
|||
|
|
SavedGUIState savedGUIState = CreateSavedGUIState();
|
|||
|
|
PushDispatcherContext(window);
|
|||
|
|
|
|||
|
|
MakeModal(window);
|
|||
|
|
|
|||
|
|
PopDispatcherContext(window);
|
|||
|
|
ApplySavedGUIState(savedGUIState);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static void MakeModal(UnityEditorWindow window)
|
|||
|
|
{
|
|||
|
|
// MakeModal(m_Parent.window);
|
|||
|
|
#if !UNITY_6000_0_OR_NEWER
|
|||
|
|
HostView hostView = window.m_Parent();
|
|||
|
|
#else
|
|||
|
|
HostView hostView = window.m_Parent;
|
|||
|
|
#endif
|
|||
|
|
ContainerWindow parentWindow = hostView.window;
|
|||
|
|
|
|||
|
|
EditorWindow.Internal_MakeModal(parentWindow);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static void ShowAsUtility(UnityEditorWindow window)
|
|||
|
|
{
|
|||
|
|
// ShowWithMode(ShowMode.Utility);
|
|||
|
|
|
|||
|
|
#if !UNITY_6000_0_OR_NEWER
|
|||
|
|
window.ShowWithMode(2);
|
|||
|
|
#else
|
|||
|
|
window.ShowWithMode((ShowMode)2);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static SavedGUIState CreateSavedGUIState()
|
|||
|
|
{
|
|||
|
|
// SavedGUIState guiState = SavedGUIState.Create();
|
|||
|
|
return SavedGUIState.Create();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static void ApplySavedGUIState(SavedGUIState savedGUIState)
|
|||
|
|
{
|
|||
|
|
// guiState.ApplyAndForget();
|
|||
|
|
savedGUIState.ApplyAndForget();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static void PopDispatcherContext(UnityEditorWindow window)
|
|||
|
|
{
|
|||
|
|
//UnityEngine.UIElements.EventDispatcher.editorDispatcher.PopDispatcherContext();
|
|||
|
|
|
|||
|
|
object editorDispatcher = mEditorDispatcherProp2020.GetValue(null);
|
|||
|
|
mPopContextMethod2020.Invoke(editorDispatcher, null);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static void PushDispatcherContext(UnityEditorWindow window)
|
|||
|
|
{
|
|||
|
|
//UnityEngine.UIElements.EventDispatcher.editorDispatcher.PushDispatcherContext();
|
|||
|
|
|
|||
|
|
object editorDispatcher = mEditorDispatcherProp2020.GetValue(null);
|
|||
|
|
mPushContextMethod2020.Invoke(editorDispatcher, null);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static void InitializeInfo()
|
|||
|
|
{
|
|||
|
|
var flags = BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static;
|
|||
|
|
|
|||
|
|
mEditorDispatcherProp2020 = typeof(UnityEngine.UIElements.EventDispatcher).GetProperty("editorDispatcher", flags);
|
|||
|
|
mPushContextMethod2020 = mEditorDispatcherProp2020.PropertyType.GetMethod("PushDispatcherContext", flags);
|
|||
|
|
mPopContextMethod2020 = mEditorDispatcherProp2020.PropertyType.GetMethod("PopDispatcherContext", flags);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static PropertyInfo mEditorDispatcherProp2020;
|
|||
|
|
static MethodInfo mPushContextMethod2020;
|
|||
|
|
static MethodInfo mPopContextMethod2020;
|
|||
|
|
|
|||
|
|
// // How ContainerWindows are visualized. Used with ContainerWindow.Show
|
|||
|
|
// internal enum ShowMode
|
|||
|
|
// {
|
|||
|
|
// // Show as a normal window with max, min & close buttons.
|
|||
|
|
// NormalWindow = 0,
|
|||
|
|
// // Used for a popup menu. On mac this means light shadow and no titlebar.
|
|||
|
|
// PopupMenu = 1,
|
|||
|
|
// // Utility window - floats above the app. Disappears when app loses focus.
|
|||
|
|
// Utility = 2,
|
|||
|
|
// // Window has no shadow or decorations. Used internally for dragging stuff around.
|
|||
|
|
// NoShadow = 3,
|
|||
|
|
// // The Unity main window. On mac, this is the same as NormalWindow, except window doesn't have a close button.
|
|||
|
|
// MainWindow = 4,
|
|||
|
|
// // Aux windows. The ones that close the moment you move the mouse out of them.
|
|||
|
|
// AuxWindow = 5,
|
|||
|
|
// // Like PopupMenu, but without keyboard focus
|
|||
|
|
// cm-help.es.txtTooltip = 6
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
}
|