コード例 #1
0
    private void OnGUI()
    {
        if (allRecords == null)
        {
            allRecords = new List <PrefsRecord>();
        }
        if (filteredRecords == null)
        {
            filteredRecords = new List <PrefsRecord>();
        }

        using (CustomEditorGUI.Horizontal(CustomEditorGUI.Toolbar))
        {
            if (GUILayout.Button(new GUIContent("+", "Create new prefs record."), EditorStyles.toolbarButton, GUILayout.Width(20)))
            {
                addingNewRecord = true;
            }

            if (GUILayout.Button(new GUIContent("Refresh", "Re-read and re-parse all prefs."), EditorStyles.toolbarButton, GUILayout.Width(50)))
            {
                RefreshData();
                GUIUtility.keyboardControl = 0;
                scrollPosition             = Vector2.zero;
                recordsCurrentPage         = 0;
            }

            EditorGUI.BeginChangeCheck();
            sortingType = (SortingType)EditorGUILayout.EnumPopup(sortingType, EditorStyles.toolbarDropDown, GUILayout.Width(110));
            if (EditorGUI.EndChangeCheck())
            {
                ApplySorting();
            }

            GUILayout.Space(10);

            EditorGUI.BeginChangeCheck();
            searchPattern = CustomEditorGUI.SearchToolbar(searchPattern);
            if (EditorGUI.EndChangeCheck())
            {
                ApplyFiltering();
            }
        }

        if (addingNewRecord)
        {
            using (CustomEditorGUI.Horizontal(CustomEditorGUI.PanelWithBackground))
            {
                string[] types = { "String", "Int", "Float" };
                newRecordType = EditorGUILayout.Popup(newRecordType, types, GUILayout.Width(50));
                Color guiColor = GUI.color;

                GUILayout.Label("Key:", GUILayout.ExpandWidth(false));
                newRecordKey = EditorGUILayout.TextField(newRecordKey);
                GUILayout.Label("Value:", GUILayout.ExpandWidth(false));

                if (newRecordType == 0)
                {
                    newRecordStringValue = EditorGUILayout.TextField(newRecordStringValue);
                }
                else if (newRecordType == 1)
                {
                    newRecordIntValue = EditorGUILayout.IntField(newRecordIntValue);
                }
                else
                {
                    newRecordFloatValue = EditorGUILayout.FloatField(newRecordFloatValue);
                }

                GUI.color = guiColor;

                if (GUILayout.Button("OK", CustomEditorGUI.CompactButton, GUILayout.Width(30)))
                {
                    if (string.IsNullOrEmpty(newRecordKey) ||
                        (newRecordType == 0 && string.IsNullOrEmpty(newRecordStringValue)) ||
                        (newRecordType == 1 && newRecordIntValue == 0) ||
                        (newRecordType == 2 && Math.Abs(newRecordFloatValue) < 0.00000001f))
                    {
                        ShowNotification(new GUIContent("Please fill in the pref first!"));
                    }
                    else
                    {
                        PrefsRecord newRecord;

                        if (newRecordType == 0)
                        {
                            newRecord = new PrefsRecord(newRecordKey, newRecordStringValue);
                        }
                        else if (newRecordType == 1)
                        {
                            newRecord = new PrefsRecord(newRecordKey, newRecordIntValue);
                        }
                        else
                        {
                            newRecord = new PrefsRecord(newRecordKey, newRecordFloatValue);
                        }

                        if (newRecord.Save())
                        {
                            allRecords.Add(newRecord);
                            ApplySorting();
                            CloseNewRecordPanel();
                        }
                    }
                }
                if (GUILayout.Button("Cancel", CustomEditorGUI.CompactButton, GUILayout.Width(60)))
                {
                    CloseNewRecordPanel();
                }
            }
        }

        using (CustomEditorGUI.Vertical(CustomEditorGUI.PanelWithBackground))
        {
            GUILayout.Space(5);

            DrawRecordsPages();

            GUILayout.Space(5);
        }
    }