private void OnGUI() { var keySearchBarStyle = new GUIStyle(EditorStyles.textField) { fixedWidth = position.width * .99f, fixedHeight = 23f, alignment = TextAnchor.MiddleCenter, fontSize = 12 }; key = GUILayout.TextField(key, keySearchBarStyle); key = Localizator.ConvertRawToKey(key); GUILayout.Space(10f); Localizator.UpdateKeyFile(); if (key != keyLastValue || values.Length != Localizator.GetLanguageCount()) { values = new string[Localizator.GetLanguageCount()]; } if (Localizator.DoesContainKey(key)) { scrollPos = GUILayout.BeginScrollView(scrollPos, false, true); for (var i = 0; i < values.Length; i++) { if (values[i] == null) { values[i] = Localizator.GetString(key, Localizator.GetAvailableLanguages()[i], false); } GUILayout.BeginHorizontal(); var isSameAsTheSavedValue = values[i] == Localizator.GetString(key, Localizator.GetAvailableLanguages()[i], false); GUI.color = isSameAsTheSavedValue ? Color.green : Color.red; EditorGUILayout.LabelField($"{Localizator.GetAvailableLanguages()[i]}: ", GUILayout.MaxWidth(50)); GUI.color = Color.white; var customTextAreaStyle = EditorStyles.textArea; customTextAreaStyle.wordWrap = true; customTextAreaStyle.fixedHeight = 0; customTextAreaStyle.stretchHeight = true; values[i] = EditorGUILayout.TextArea( values[i], customTextAreaStyle); GUILayout.EndHorizontal(); } GUILayout.EndScrollView(); if (GUILayout.Button("Update Values")) { for (var i = 0; i < values.Length; i++) { Localizator.AddLocalizedValue(key, values[i], Localizator.GetAvailableLanguages()[i]); } Localizator.RefreshAll(); RefreshKeyBrowser(); } if (GUILayout.Button("Remove Key")) { var dialogOutput = EditorUtility.DisplayDialog( $"{key} will be removed permanently", "Are you sure you want to remove this key?", "Remove", "Cancel"); if (dialogOutput) { Localizator.RemoveKey(key); Localizator.RefreshAll(); RefreshKeyBrowser(); } } // Renaming EditorScriptingUtils.BeginCenter(); var canRename = !Localizator.DoesContainKey(newName.Trim()) && !string.IsNullOrWhiteSpace(newName.Trim()); if (GUILayout.Button("Rename Key", GUILayout.Width(this.position.width * .5f))) { if (canRename) { Localizator.AddKey(newName.Trim()); foreach (var language in Localizator.GetAvailableLanguages()) { Localizator.AddLocalizedValue(newName.Trim(), Localizator.GetString(key, language, returnErrorString: false), language); } Localizator.RemoveKey(key); key = newName.Trim(); newName = ""; RefreshKeyBrowser(); } } newName = Localizator.ConvertRawToKey(GUILayout.TextField(newName, GUILayout.Width(this.position.width * .5f))); EditorScriptingUtils.EndCenter(); if (Localizator.DoesContainKey(newName.Trim())) { EditorGUILayout.HelpBox("The key name entered is already in use.", MessageType.Warning); } } else if (GUILayout.Button("Add New Key") && !string.IsNullOrEmpty(key) && !string.IsNullOrWhiteSpace(key)) { Localizator.AddKey(key); RefreshKeyBrowser(); } keyLastValue = key; }
private void OnGUI() { // Styles var languageDisplayerStyle = new GUIStyle { richText = true, fixedHeight = ELEMENT_HEIGHT, fontStyle = FontStyle.Bold, fontSize = 12, padding = new RectOffset(10, 10, 5, 5) }; var keyButtonStyle = new GUIStyle(EditorStyles.miniButton) { fixedHeight = ELEMENT_HEIGHT, fixedWidth = ELEMENT_WIDTH, fontSize = 12, padding = new RectOffset(10, 10, 5, 5) }; var keyButtonStyleBold = new GUIStyle(GUI.skin.button) { fixedHeight = ELEMENT_HEIGHT, fixedWidth = ELEMENT_WIDTH, fontSize = 12, fontStyle = FontStyle.BoldAndItalic, padding = new RectOffset(10, 10, 5, 5) }; if (GUILayout.Button("Refresh", GUILayout.Height(BUTTON_HEIGHT)) || !keysInit) { Refresh(); } GUILayout.Space(10); var searchStyle = new GUIStyle(EditorStyles.textField) { fixedWidth = position.width * .99f, fixedHeight = 23f, alignment = TextAnchor.MiddleCenter, fontSize = 12 }; search = GUILayout.TextField(search, searchStyle); search = search.Replace(' ', '_').ToLower(); Search(search); // Search Options SetLocalizationStatus((LocalizationStatus)EditorGUILayout.EnumPopup(statusToDisplay)); GUILayout.Space(10); EditorScriptingUtils.HorizontalLine(3); var rectPos = EditorGUILayout.GetControlRect(); var rectBox = new Rect(rectPos.x, rectPos.y, rectPos.width, position.height - 110); var viewRect = new Rect(rectPos.x, rectPos.y, currentLanguages.Length * LANGUAGE_NAME_DISPLAYER_WIDTH + ELEMENT_WIDTH, searchedKeys.Count * ELEMENT_HEIGHT); scrollPos = GUI.BeginScrollView(rectBox, scrollPos, viewRect, false, true); var viewCount = Mathf.FloorToInt((position.height - 110) / ELEMENT_HEIGHT); var firstIndex = Mathf.FloorToInt(scrollPos.y / ELEMENT_HEIGHT); var contentPos = new Rect(rectBox.x, firstIndex * ELEMENT_HEIGHT + 80f, rectBox.width, ELEMENT_HEIGHT); Localizator.UpdateKeyFile(); for (var i = firstIndex; i < Mathf.Min(firstIndex + viewCount, searchedKeys.Count); i++) { contentPos.y += ELEMENT_HEIGHT; var localizationStatus = Localizator.GetLocalizationStatusOfKey(searchedKeys[i]); // Displaying EditorGUILayout.BeginHorizontal(); var currentKey = searchedKeys[i]; if (GUI.Button(contentPos, currentKey, currentKey == "lng_name" || currentKey == "lng_error" ? keyButtonStyleBold : keyButtonStyle)) { KeyEditor.key = currentKey; var window = (KeyEditor)GetWindow(typeof(KeyEditor), false, "Key Editor", true); window.Show(); FocusWindowIfItsOpen(typeof(KeyEditor)); } GUILayout.FlexibleSpace(); for (var j = 0; j < currentLanguages.Length; j++) { var language = currentLanguages[j]; var xOffset = ELEMENT_WIDTH + j * LANGUAGE_NAME_DISPLAYER_WIDTH; var offsetedContentPos = new Rect(contentPos.x + xOffset, contentPos.y, contentPos.width, ELEMENT_HEIGHT); GUI.Label(offsetedContentPos, localizationStatus[j] ? $"<color=green>{language.ToString()}</color>" : $"<color=red>{language.ToString()}</color>", languageDisplayerStyle); } EditorGUILayout.EndHorizontal(); } GUI.EndScrollView(); }