internal static SaveOverlayPreset ShowWindow(EditorWindow window, Action <string> callback) { SaveOverlayPreset w = GetWindowDontShow <SaveOverlayPreset>(); w.m_Window = window; w.save = callback; w.m_PresetName = window.overlayCanvas.lastAppliedPresetName; if (string.IsNullOrEmpty(w.m_PresetName)) { w.m_PresetName = "Default"; } w.minSize = w.maxSize = new Vector2(k_Width, k_Height); w.ShowAuxWindow(); return(w); }
public static void GenerateMenu(GenericMenu menu, string pathPrefix, EditorWindow window) { var presets = GetAllPresets(window.GetType()); foreach (var preset in presets) { menu.AddItem(new GUIContent(pathPrefix + preset.name), false, () => { window.overlayCanvas.ApplyPreset(preset); }); } menu.AddSeparator(pathPrefix); menu.AddItem(EditorGUIUtility.TrTextContent($"{pathPrefix}Save Preset..."), false, () => { SaveOverlayPreset.ShowWindow(window, name => { var preset = CreatePresetFromOverlayState(name, window); SaveAllPreferences(); window.overlayCanvas.ApplyPreset(preset); }); }); menu.AddItem(EditorGUIUtility.TrTextContent($"{pathPrefix}Save Preset To File..."), false, () => { string path = EditorUtility.SaveFilePanel("Save window preset to disk...", "", "NewOverlayPreset", k_FileExtension); if (!string.IsNullOrEmpty(path)) { SaveOverlayStateToFile(path, window); EditorUtility.RevealInFinder(path); } }); menu.AddItem(EditorGUIUtility.TrTextContent($"{pathPrefix}Load Preset From File..."), false, () => { var filePath = EditorUtility.OpenFilePanel("Load preset from disk...", "", k_FileExtension); if (!string.IsNullOrEmpty(filePath)) { var preset = LoadFromFile(filePath); bool failed = false; if (preset == null) { EditorUtility.DisplayDialog( L10n.Tr("Load Overlay Preset From Disk"), string.Format(L10n.Tr("Failed to load the chosen preset, the file may not be a .{0} or was corrupted."), k_FileExtension), L10n.Tr("Ok")); failed = true; } else if (!preset.CanApplyToWindow(window.GetType())) { EditorUtility.DisplayDialog( L10n.Tr("Load Overlay Preset From Disk"), string.Format(L10n.Tr("Trying to load an overlay preset with the name {0}. This preset targets the window type {0} which isn't valid for this window."), preset.targetWindowType), L10n.Tr("Ok")); failed = true; } if (Exists(preset.targetWindowType, preset.name)) { if (!EditorUtility.DisplayDialog( L10n.Tr("Load Overlay Preset From Disk"), string.Format(L10n.Tr("Trying to load an overlay preset with the name {0}. This name is already in used in the window, do you want to overwrite it?"), preset.name), L10n.Tr("Yes"), L10n.Tr("No"))) { failed = true; } } if (failed) { if (!EditorUtility.IsPersistent(preset)) { DestroyImmediate(preset); } return; } AddPreset(preset); window.overlayCanvas.ApplyPreset(preset); } }); foreach (var preset in presets) { menu.AddItem(EditorGUIUtility.TrTextContent($"{pathPrefix}Delete Preset/{preset.name}"), false, () => { DeletePreset(preset); }); } menu.AddItem(EditorGUIUtility.TrTextContent($"{pathPrefix}Revert All Saved Presets"), false, () => { if (EditorUtility.DisplayDialog( L10n.Tr("Revert All Saved Presets"), L10n.Tr("Unity is about to delete all overlay presets that are not loaded from files in project and restore default settings."), L10n.Tr("Continue"), L10n.Tr("Cancel"))) { RevertPreferencesPresetsToDefault(); ReloadAllPresets(); } }); }