public void Draw(GUIView currentInspectedView, Func <GUIView, bool> inspectableViewPredicator)
        {
            using (new GUILayout.HorizontalScope(EditorStyles.toolbar))
            {
                var selectedName = currentInspectedView is GUIView?currentInspectedView.GetViewTitleName() : "<Please Select>";

                var selectedNameLabel = GUIContentUtility.UseCached(selectedName);

                GUILayout.Label("Inspected View: ", GUILayout.ExpandWidth(false));

                var popupPosition = GUILayoutUtility.GetRect(selectedNameLabel, EditorStyles.toolbarDropDown, GUILayout.ExpandWidth(true));
                if (GUI.Button(popupPosition, selectedNameLabel, EditorStyles.toolbarDropDown))
                {
                    var views = new List <GUIView>();
                    GUIViewDebuggerHelper.GetViews(views);
                    views = views.Where(inspectableViewPredicator).ToList();

                    var options = views
                                  .Select(x => x.GetViewTitleName())
                                  .Prepend("None")
                                  .Select(x => new GUIContent(x))
                                  .ToArray();

                    var selectedIndex = views.IndexOf(currentInspectedView) + 1;

                    EditorUtility.DisplayCustomMenu(popupPosition, options, selectedIndex, OnSelectInspectionValue.Invoke, views);
                }
            }
        }
Exemple #2
0
        public void Draw(MutableSkin currentSkin, bool hasUnsavedChanges)
        {
            using (new GUILayout.HorizontalScope(EditorStyles.toolbar))
            {
                GUILayout.Label("Name:", GUILayout.ExpandWidth(false));

                var changedName = GUILayout.TextField(currentSkin.Name, GUILayout.ExpandWidth(true));
                if (changedName != currentSkin.Name)
                {
                    OnChangeName.Invoke(changedName);
                }

                GUI.enabled = hasUnsavedChanges;

                var saveLabel = GUIContentUtility.UseCached("Save current");
                if (GUI.Button(GUILayoutUtility.GetRect(saveLabel, EditorStyles.toolbarButton, GUILayout.ExpandWidth(true)), saveLabel))
                {
                    OnClickSaveCurrent.Invoke();
                }

                GUI.enabled = true;

                var saveAsFileLabel             = GUIContentUtility.UseCached("Save to file");
                var currentSaveAsFileButtonRect = GUILayoutUtility.GetRect(saveAsFileLabel, EditorStyles.toolbarButton, GUILayout.ExpandWidth(true));
                if (GUI.Button(currentSaveAsFileButtonRect, saveAsFileLabel))
                {
                    var path = EditorUtility.SaveFilePanel("Save as", string.Empty, $"{currentSkin.Name}.skn", "skn");

                    if (string.IsNullOrEmpty(path))
                    {
                        return;
                    }

                    OnClickSaveToFile.Invoke(path);
                }

                var loadFileLabel             = GUIContentUtility.UseCached("Load from file");
                var currentLoadFileButtonRect = GUILayoutUtility.GetRect(loadFileLabel, EditorStyles.toolbarButton, GUILayout.ExpandWidth(true));
                if (GUI.Button(currentLoadFileButtonRect, loadFileLabel))
                {
                    if (hasUnsavedChanges && !EditorUtility.DisplayDialog("Warning", "Load skin from file will overwrite current skin. proceed?", "Yes", "No"))
                    {
                        return;
                    }

                    var path = EditorUtility.OpenFilePanel("Load", string.Empty, "skn");
                    if (string.IsNullOrEmpty(path))
                    {
                        return;
                    }

                    OnClickLoadFromFile.Invoke(path);
                }

                var revertLabel      = GUIContentUtility.UseCached("Revert");
                var revertButtonRect = GUILayoutUtility.GetRect(revertLabel, EditorStyles.toolbarButton, GUILayout.ExpandWidth(true));

                GUI.enabled = hasUnsavedChanges;
                if (GUI.Button(revertButtonRect, revertLabel))
                {
                    if (!EditorUtility.DisplayDialog("Warning", "Current progress will be lost. proceed?", "Yes", "No"))
                    {
                        return;
                    }

                    OnClickRevert.Invoke();
                }
                GUI.enabled = true;

                var resetLabel      = GUIContentUtility.UseCached("Restore to default");
                var resetButtonRect = GUILayoutUtility.GetRect(resetLabel, EditorStyles.toolbarButton, GUILayout.ExpandWidth(true));
                if (GUI.Button(resetButtonRect, resetLabel))
                {
                    if (hasUnsavedChanges && !EditorUtility.DisplayDialog("Warning", "Current unsaved properties will be lost. proceed?", "Yes", "No"))
                    {
                        return;
                    }

                    OnClickRestoreToDefault.Invoke();
                }
            }
        }