private L10nTextElement CreateLocalTextGUI(VisualElement root, L10nAsset asset, L10nTextRow text)
        {
            var contentElems = new List <ContentElement>();
            var textElem     = new L10nTextElement {
                userData = contentElems,
                text     = text.Id
            };

            var languages      = new List <string>(asset.Languages);
            var languagesPopup = new LanguagePopup("Language Id", languages, 0);

            languagesPopup.RegisterValueChangedCallback(OnChangeLanguage);
            textElem.Content.Add(languagesPopup);

            CreateContentGUI(textElem.Content, asset, text, contentElems, languages[0]);

            root.Add(textElem);
            return(textElem);
        }
        private L10nAssetElement CreateDataGUI(VisualElement root, L10nAsset asset)
        {
            var assetElem = new L10nAssetElement {
                text  = $"Localization ({asset.L10nTexts.Count})",
                value = false,
            };

            var theme = EditorGUIUtility.isProSkin ? "Dark" : "Light";

            assetElem.styleSheets.Add(Resources.Load <StyleSheet>($"{nameof(L10nAsset)}/Layout"));
            assetElem.styleSheets.Add(Resources.Load <StyleSheet>($"{nameof(L10nAsset)}/{theme}Theme"));

            foreach (var kv in asset.L10nTexts)
            {
                CreateLocalTextGUI(assetElem, asset, kv.Value);
            }

            root.Add(assetElem);
            return(assetElem);
        }
        private ContentElement CreateContentGUI(VisualElement root, L10nAsset asset, L10nTextRow text,
                                                IList <ContentElement> contentElems, string language)
        {
            root.userData = asset;
            var contentText = asset.GetContent(text.ContentId)?.GetLocalization(language);

            if (string.IsNullOrEmpty(contentText))
            {
                return(null);
            }

            var contentElem = new ContentElement {
                userData = text.ContentId,
                value    = contentText,
                label    = "Text"
            };

            contentElems.Add(contentElem);
            root.Add(contentElem);
            return(contentElem);
        }
        private void OnChangeLanguage(ChangeEvent <string> evt)
        {
            var contentsContainer = (evt.currentTarget as VisualElement).parent.parent;

            if (!(contentsContainer.userData is IList <ContentElement> contents))
            {
                return;
            }

            L10nAsset asset = null;

            foreach (var content in contents)
            {
                if (!ReferenceEquals(asset, content.parent.userData))
                {
                    asset = content.parent.userData as L10nAsset;
                }

                var id = (int)content.userData;
                content.value = asset.GetContent(id)?.GetLocalization(evt.newValue) ?? string.Empty;
            }
        }
 private void OnEnable()
 {
     this.asset = this.target as L10nAsset;
 }