private void CreateSettingsGUI(LocalizationSettings settings) { var tableChoices = settings.TableGuids.Prepend(Guid.Empty.ToString()).ToList(); var defaultIndex = settings.GuidToTableIndex(localizedString.TableGuid) + 1; var tableDropdown = new PopupField <string>("Table", tableChoices, defaultIndex, guid => settings.GuidToTableName(guid, "None"), guid => settings.GuidToTableName(guid, "None")); tableDropdown.name = "TableDropdown"; tableDropdown.RegisterValueChangedCallback(evt => { var table = settings.GuidToTable(evt.newValue); localizedString.TableGuid = evt.newValue; localizedString.Table = table; localizedString.Key = null; localizedString.KeyGuid = null; EditorUtility.SetDirty(localizedString); UpdateKeyVisibility(); }); rootSettingsContainer.Add(tableDropdown); rootSettingsContainer.Add(localizationSettingsContainer = new VisualElement { name = "LocalizationSettingsContainer" }); localizationSettingsContainer.AddGet <VisualElement>("KeyContainer").Do(keyContainer => { keyContainer.AddGet(new TextField("Key") { name = "LocalizationKey", isReadOnly = true }).Do(self => { self.SetEnabled(false); self.BindProperty(keyProperty); }); keyContainer.AddGet(new Button(OnSelectKey) { text = "Select Key", name = "SelectKeyButton" }); }); localizationSettingsContainer.Add(new PropertyField(setterProperty).Do(field => { field.RegisterValueChangeCallback(evt => { var count = localizedString.Setter.GetPersistentEventCount(); for (var i = 0; i < count; i++) { localizedString.Setter.SetPersistentListenerState(i, UnityEventCallState.EditorAndRuntime); } }); })); // Preview section if (localizedString.PreviewLocaleIndex == -1) { localizedString.PreviewLocaleIndex = settings.DefaultLocaleIndex(); } var previewContainer = localizationSettingsContainer.AddGet <VisualElement>("PreviewContainer"); previewContainer.AddGet(previewToggleButton = new Button(TogglePreview) { name = "TogglePreviewButton", text = "Preview" }) .SetClass(localizedString.IsPreviewActive, "active"); previewButtons = new List <Button>(); previewSettings = previewContainer.AddGet <VisualElement>("PreviewSettings").SetClass(!localizedString.IsPreviewActive, "hidden"); previewSettings.AddGet(new ScrollView(ScrollViewMode.Horizontal) { name = "PreviewLocalesContainer" }).Do(container => { for (var i = 0; i < settings.Locales.Count; i++) { var locale = settings.Locales[i]; var localeIndex = i; previewButtons.Add(container.AddGet( new Button(() => SetPreviewLocale(localeIndex)) { text = $"{locale.LocaleCode}" } .SetClass(localeIndex == localizedString.PreviewLocaleIndex, "active") ) ); } }); if (localizedString.IsPreviewActive) { UpdatePreview(); } }