public void ImportUxmlFromProject(BuilderLibraryTreeItem projectCategory, bool includePackages) { var assets = AssetDatabase.FindAllAssets(m_SearchFilter); var categoryStack = new List <BuilderLibraryTreeItem>(); foreach (var asset in assets) { var assetPath = AssetDatabase.GetAssetPath(asset.instanceID); var prettyPath = assetPath; prettyPath = Path.GetDirectoryName(prettyPath); prettyPath = prettyPath.ConvertSeparatorsToUnity(); if (prettyPath.StartsWith("Packages/") && !includePackages) { continue; } if (prettyPath.StartsWith(BuilderConstants.UIBuilderPackageRootPath)) { continue; } var split = prettyPath.Split('/'); AddCategoriesToStack(projectCategory, categoryStack, split); var vta = asset.pptrValue as VisualTreeAsset; var newItem = new BuilderLibraryTreeItem(asset.name + ".uxml", null, typeof(TemplateContainer), () => { if (vta == null) { return(null); } var tree = vta.CloneTree(); tree.SetProperty(BuilderConstants.LibraryItemLinkedTemplateContainerPathVEPropertyName, assetPath); tree.name = vta.name; return(tree); }, (inVta, inParent, ve) => { var vea = inVta.AddTemplateInstance(inParent, assetPath) as VisualElementAsset; vea.AddProperty("name", vta.name); ve.SetProperty(BuilderConstants.ElementLinkedInstancedVisualTreeAssetVEPropertyName, vta); return(vea); }, null, vta); newItem.SetIcon((Texture2D)EditorGUIUtility.IconContent("UxmlScript Icon").image); newItem.HasPreview = true; if (categoryStack.Count == 0) { projectCategory.AddChild(newItem); } else { categoryStack.Last().AddChild(newItem); } } }
public void RefreshThemeFiles() { m_ThemeFiles?.Clear(); var assets = AssetDatabase.FindAllAssets(m_SearchFilter); foreach (var asset in assets) { var assetPath = AssetDatabase.GetAssetPath(asset.instanceID); AddThemeFile(assetPath); } NotifyThemesChanged(); }
void ImportUxmlFromProject(LibraryTreeItem projectCategory) { var filter = new SearchFilter(); filter.searchArea = SearchFilter.SearchArea.AllAssets; filter.classNames = new string[] { "VisualTreeAsset" }; var assets = AssetDatabase.FindAllAssets(filter); m_ProjectUxmlPathsHash = GetAllProjectUxmlFilePathsHash(assets); var categoryStack = new List <LibraryTreeItem>(); foreach (var asset in assets) { var assetPath = AssetDatabase.GetAssetPath(asset.instanceID); var prettyPath = assetPath; prettyPath = Path.GetDirectoryName(prettyPath); prettyPath = prettyPath.Replace('\\', '/'); if (prettyPath.StartsWith(BuilderConstants.UIBuilderPackageRootPath)) { continue; } var split = prettyPath.Split('/'); AddCategoriesToStack(projectCategory, categoryStack, split); var vta = asset.pptrValue as VisualTreeAsset; var newItem = new LibraryTreeItem(asset.name + ".uxml", () => { var tree = vta.CloneTree(); tree.SetProperty(BuilderConstants.LibraryItemLinkedTemplateContainerPathVEPropertyName, assetPath); return(tree); }, (inVta, inParent) => { return(inVta.AddTemplateInstance(inParent, assetPath) as VisualElementAsset); }); newItem.sourceAsset = vta; if (categoryStack.Count == 0) { projectCategory.AddChild(newItem); } else { categoryStack.Last().AddChild(newItem); } } }
public int GetAllProjectUxmlFilePathsHash() { var assets = AssetDatabase.FindAllAssets(m_SearchFilter); var sb = new StringBuilder(); foreach (var asset in assets) { var assetPath = AssetDatabase.GetAssetPath(asset.instanceID); sb.Append(assetPath); } var pathsStr = sb.ToString(); return(pathsStr.GetHashCode()); }
int GetAllProjectUxmlFilePathsHash(IEnumerable <HierarchyProperty> assets = null) { if (assets == null) { var filter = new SearchFilter(); filter.classNames = new string[] { "VisualTreeAsset" }; assets = AssetDatabase.FindAllAssets(filter); } var sb = new StringBuilder(); foreach (var asset in assets) { var assetPath = AssetDatabase.GetAssetPath(asset.instanceID); sb.Append(assetPath); } var pathsStr = sb.ToString(); return(pathsStr.GetHashCode()); }
public void ImportUxmlFromProject(BuilderLibraryItem projectCategory, bool includePackages) { var categoryStack = new List <BuilderLibraryItem>(); var assets = AssetDatabase.FindAllAssets(m_SearchFilter); foreach (var asset in assets) { var assetPath = AssetDatabase.GetAssetPath(asset.instanceID); var prettyPath = assetPath; prettyPath = Path.GetDirectoryName(prettyPath); prettyPath = prettyPath.ConvertSeparatorsToUnity(); if (prettyPath.StartsWith("Packages/") && !includePackages) { continue; } if (prettyPath.StartsWith(BuilderConstants.UIBuilderPackageRootPath)) { continue; } // Check to make sure the asset is actually writable. var packageInfo = PackageInfo.FindForAssetPath(assetPath); if (packageInfo != null && packageInfo.source != PackageSource.Embedded && packageInfo.source != PackageSource.Local) { continue; } // Anoter way to check the above. Leaving it here for references in case the above stops working. //AssetDatabase.GetAssetFolderInfo(assetPath, out bool isRoot, out bool isImmutable); //if (isImmutable) //continue; var split = prettyPath.Split('/'); AddCategoriesToStack(projectCategory, categoryStack, split); var vta = asset.pptrValue as VisualTreeAsset; var newItem = BuilderLibraryContent.CreateItem(asset.name + ".uxml", nameof(TemplateContainer), typeof(TemplateContainer), () => { if (vta == null) { return(null); } var tree = vta.CloneTree(); tree.SetProperty(BuilderConstants.LibraryItemLinkedTemplateContainerPathVEPropertyName, assetPath); tree.name = vta.name; return(tree); }, (inVta, inParent, ve) => { var vea = inVta.AddTemplateInstance(inParent, assetPath) as VisualElementAsset; vea.AddProperty("name", vta.name); ve.SetProperty(BuilderConstants.ElementLinkedInstancedVisualTreeAssetVEPropertyName, vta); return(vea); }, null, vta); var data = newItem.data; if (data.icon == null) { data.SetIcon((Texture2D)EditorGUIUtility.IconContent("VisualTreeAsset Icon").image); } data.hasPreview = true; if (categoryStack.Count == 0) { projectCategory.AddChild(newItem); } else { categoryStack.Last().AddChild(newItem); } } }