Esempio n. 1
0
        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();
                }
            });
        }