public override void SetDataPaths(string refPathStr, string pathStr, string commonPathStr) { base.SetDataPaths(refPathStr, pathStr, commonPathStr); var style = AssetDanshariStyle.Get(); var resFileList = GetResFileList(); var fileList = GetFileMd5Infos(resFileList); if (fileList == null || fileList.Count == 0) { return; } var rootInfo = new AssetInfo(GetAutoId(), String.Empty, String.Empty); var groups = fileList.GroupBy(info => info.md5).Where(g => g.Count() > 1); foreach (var group in groups) { AssetInfo dirInfo = new AssetInfo(GetAutoId(), String.Empty, String.Format(style.duplicateGroup, group.Count())); dirInfo.isExtra = true; rootInfo.AddChild(dirInfo); foreach (var member in group) { dirInfo.AddChild(GetAssetInfoByFileMd5Info(member)); } } if (rootInfo.hasChildren) { data = rootInfo; } EditorUtility.ClearProgressBar(); }
/// <summary> /// 去引用到的目录查找所有用到的guid,批量更改 /// </summary> /// <param name="group"></param> /// <param name="useInfo"></param> public void SetUseThis(AssetInfo group, AssetInfo useInfo) { var style = AssetDanshariStyle.Get(); if (!EditorUtility.DisplayDialog(String.Empty, style.sureStr + style.duplicateContextOnlyUseThis.text, style.sureStr, style.cancelStr)) { return; } List <string> patterns = new List <string>(); foreach (var info in group.children) { if (info != useInfo) { patterns.Add(AssetDatabase.AssetPathToGUID(info.fileRelativePath)); } } string replaceStr = AssetDatabase.AssetPathToGUID(useInfo.fileRelativePath); List <string> fileList = GetRefFileList(); ThreadDoFilesTextSearchReplace(fileList, patterns, replaceStr, GetSearchResultList(fileList.Count, 0)); EditorUtility.DisplayProgressBar(style.progressTitle, style.deleteFile, 0.98f); SetRemoveAllOther(group, useInfo); EditorUtility.ClearProgressBar(); EditorUtility.DisplayDialog(String.Empty, style.progressFinish, style.sureStr); }
public override void ExportCsv() { string path = AssetDanshariUtility.GetSaveFilePath(typeof(AssetDuplicateWindow).Name); if (string.IsNullOrEmpty(path)) { return; } var style = AssetDanshariStyle.Get(); var sb = new StringBuilder(); sb.AppendFormat("\"{0}\",", style.duplicateHeaderContent.text); sb.AppendFormat("\"{0}\",", style.duplicateHeaderContent2.text); sb.AppendFormat("\"{0}\",", style.duplicateHeaderContent3.text); sb.AppendFormat("\"{0}\"\n", style.duplicateHeaderContent4.text); foreach (var group in data.children) { sb.AppendLine(String.Format(style.duplicateGroup, group.displayName)); foreach (var info in group.children) { sb.AppendFormat("\"{0}\",", info.displayName); sb.AppendFormat("\"{0}\",", info.fileRelativePath); FileMd5Info md5Info = info.bindObj as FileMd5Info; sb.AppendFormat("\"{0}\",", md5Info.fileLength); sb.AppendFormat("\"{0}\"\n", md5Info.fileTime); } } AssetDanshariUtility.SaveFileText(path, sb.ToString()); GUIUtility.ExitGUI(); }
/// <summary> /// 得到资源文件列表 /// </summary> /// <returns></returns> protected List <string> GetResFileList() { List <string> fileList = new List <string>(); foreach (var resPath in resPaths) { if (!Directory.Exists(resPath)) { continue; } EditorUtility.DisplayProgressBar(AssetDanshariStyle.Get().progressTitle, String.Empty, 0f); var allFiles = Directory.GetFiles(resPath, "*", SearchOption.AllDirectories); for (var i = 0; i < allFiles.Length; i++) { var file = allFiles[i]; if (AssetDanshariUtility.IsMetaExt(file)) { continue; } fileList.Add(PathToStandardized(file)); } } return(fileList); }
protected override void ContextClickedItem(int id) { var item = FindItem(id, rootItem); var assetInfo = GetItemAssetInfo(item); if (item == null || assetInfo == null) { return; } GenericMenu menu = new GenericMenu(); if (!IsSelectionMulti()) { menu.AddItem(AssetDanshariStyle.Get().locationContext, false, OnLocate, id); menu.AddItem(AssetDanshariStyle.Get().explorerContext, false, OnContextExplorerActiveItem, item); } if (!IsSelectionContainsRstItem()) { menu.AddSeparator(String.Empty); menu.AddSeparator(String.Empty); menu.AddItem(AssetDanshariStyle.Get().dependenciesDelete, false, OnContextDeleteThisItem); } if (menu.GetItemCount() > 0) { menu.ShowAsContext(); } }
protected override void DrawToolbarMore() { if (GUILayout.Button(AssetDanshariStyle.Get().duplicateManualAdd, EditorStyles.toolbarButton, GUILayout.Width(70f))) { m_ManualAdd = true; } }
private void OnGUI() { Init(); var style = AssetDanshariStyle.Get(); if (!m_IsForceText) { EditorGUILayout.LabelField(style.forceText); return; } EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); GUILayout.FlexibleSpace(); Rect toolBtnRect = GUILayoutUtility.GetRect(style.help, EditorStyles.toolbarDropDown, GUILayout.ExpandWidth(false)); if (GUI.Button(toolBtnRect, style.help, EditorStyles.toolbarDropDown)) { GenericMenu menu = new GenericMenu(); menu.AddItem(style.about, false, OnContextAbout); menu.DropDown(toolBtnRect); } EditorGUILayout.EndHorizontal(); if (m_ReorderableList != null) { m_ScrollViewVector2 = GUILayout.BeginScrollView(m_ScrollViewVector2); m_ReorderableList.DoLayoutList(); GUILayout.EndScrollView(); } }
private void OnContextDeleteThisItem() { if (!HasSelection()) { return; } var style = AssetDanshariStyle.Get(); if (!EditorUtility.DisplayDialog(String.Empty, style.sureStr + style.dependenciesDelete.text, style.sureStr, style.cancelStr)) { return; } var selects = GetSelection(); foreach (var select in selects) { var assetInfo = GetItemAssetInfo(FindItem(select, rootItem)); if (assetInfo == null || assetInfo.deleted) { continue; } if (AssetDatabase.DeleteAsset(assetInfo.fileRelativePath)) { assetInfo.deleted = true; } } Repaint(); }
protected virtual void DrawGUI(GUIContent waiting, bool expandCollapseComplex) { var style = AssetDanshariStyle.Get(); style.InitGUI(); EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); if (GUILayout.Button(AssetDanshariStyle.Get().expandAll2, EditorStyles.toolbarButton, GUILayout.Width(70f))) { m_AssetTreeView.ExpandAll(); } if (GUILayout.Button(AssetDanshariStyle.Get().collapseAll2, EditorStyles.toolbarButton, GUILayout.Width(70f))) { m_AssetTreeView.CollapseAll(); } EditorGUI.BeginChangeCheck(); m_AssetTreeView.searchString = m_SearchField.OnToolbarGUI(m_AssetTreeView.searchString); if (EditorGUI.EndChangeCheck() && GUIUtility.keyboardControl == 0) { m_AssetTreeView.SetFocusAndEnsureSelectedItem(); } DrawToolbarMore(); EditorGUILayout.EndHorizontal(); m_AssetTreeView.OnGUI(GUILayoutUtility.GetRect(0, 100000, 0, 100000)); EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); }
protected override MultiColumnHeaderState CreateMultiColumnHeader() { var columns = new[] { new MultiColumnHeaderState.Column { headerContent = AssetDanshariStyle.Get().nameHeaderContent, headerTextAlignment = TextAlignment.Left, canSort = false, sortingArrowAlignment = TextAlignment.Right, width = 280, minWidth = 150, autoResize = false, allowToggleVisibility = false }, new MultiColumnHeaderState.Column { headerContent = AssetDanshariStyle.Get().dependenciesHeaderContent2, headerTextAlignment = TextAlignment.Left, canSort = false, width = 350, minWidth = 100, autoResize = false, allowToggleVisibility = true } }; return(new MultiColumnHeaderState(columns)); }
public static void DisplayThreadProgressBar(int totalFiles, int filesFinished) { string msg = String.Format(@"{0} ({1}/{2})", AssetDanshariStyle.Get().progressTitle, (filesFinished + 1).ToString(), totalFiles.ToString()); EditorUtility.DisplayProgressBar(AssetDanshariStyle.Get().progressTitle, msg, (filesFinished + 1) * 1f / totalFiles); }
private void Awake() { titleContent = AssetDanshariStyle.Get().dependenciesTitle; minSize = new Vector2(727f, 331f); _treeModel = new AssetDepModel(); _treeModel.SetDataPaths(_queryList); _queryList = null; }
protected void AddContextMoveComm(GenericMenu menu) { if (m_Model.commonDirs != null) { foreach (var dir in m_Model.commonDirs) { menu.AddItem(new GUIContent(AssetDanshariStyle.Get().duplicateContextMoveComm + dir.displayName), false, OnContextMoveItem, dir.fileRelativePath); } } }
protected override void DrawToolbarMore() { EditorGUI.BeginChangeCheck(); m_FilterEmpty = GUILayout.Toggle(m_FilterEmpty, AssetDanshariStyle.Get().dependenciesFilter, EditorStyles.toolbarButton, GUILayout.Width(70f)); if (EditorGUI.EndChangeCheck() && m_AssetTreeView != null) { (m_AssetTreeView as AssetDepTreeView).SetFilterEmpty(m_FilterEmpty); } }
protected void DrawToolbarExpandCollapse() { if (GUILayout.Button(AssetDanshariStyle.Get().expandAll, EditorStyles.toolbarButton, GUILayout.Width(50f))) { m_AssetTreeView.ExpandAll(); } if (GUILayout.Button(AssetDanshariStyle.Get().collapseAll, EditorStyles.toolbarButton, GUILayout.Width(50f))) { m_AssetTreeView.CollapseAll(); } }
protected override void DrawGUI(GUIContent waiting, GUIContent nothing, bool expandCollapseComplex) { if (m_ManualAdd) { DrawManualAdd(); } else { base.DrawGUI(AssetDanshariStyle.Get().duplicateWaiting, AssetDanshariStyle.Get().duplicateNothing, false); } }
public static void SaveFileText(string path, string text) { try { File.WriteAllText(path, text, Encoding.UTF8); System.Diagnostics.Process.Start(path); } catch (Exception e) { EditorUtility.DisplayDialog(AssetDanshariStyle.Get().errorTitle, e.Message, AssetDanshariStyle.Get().sureStr); throw; } }
protected virtual bool OnWatcherImportedAssetsEvent(string[] importedAssets, bool resortItem) { if (importedAssets.Length == 0 || !resortItem || rootItem == null) { return(false); } Array.Sort(importedAssets, EditorUtility.NaturalCompare); foreach (var importedAsset in importedAssets) { var item = FindItemByAssetPath(rootItem, Path.GetDirectoryName(importedAsset)); if (item == null) { continue; } var assetInfo = GetItemAssetInfo(item); if (assetInfo == null) { continue; } // 查找是否原先已经有了(被删除再导入) var item2 = FindItemByAssetPath(item, importedAsset); if (item2 != null) { var assetInfo2 = GetItemAssetInfo(item2); if (assetInfo2 != null) { assetInfo2.deleted = false; assetInfo2.added = true; } } else { var assetInfo2 = m_Model.GenAssetInfo(importedAsset); assetInfo.AddChild(assetInfo2); item2 = new AssetTreeViewItem <AssetTreeModel.AssetInfo>(assetInfo2.id, -1, assetInfo2.displayName, assetInfo2); if (assetInfo2.isFolder) { item2.icon = AssetDanshariStyle.Get().folderIcon; } assetInfo2.added = true; item.AddChild(item2); } } SetupDepthsFromParentsAndChildren(rootItem); SortTreeViewNaturalCompare(rootItem); return(true); }
protected virtual void DrawGUI(GUIContent waiting, GUIContent nothing, bool expandCollapseComplex) { var style = AssetDanshariStyle.Get(); style.InitGUI(); if (m_AssetTreeModel.assetPaths != null) { if (!m_AssetTreeModel.HasData()) { ShowNotification(nothing); GUILayout.FlexibleSpace(); } else { EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); if (expandCollapseComplex) { DrawToolbarExpandCollapse2(); } else { DrawToolbarExpandCollapse(); } EditorGUI.BeginChangeCheck(); m_AssetTreeView.searchString = m_SearchField.OnToolbarGUI(m_AssetTreeView.searchString); if (EditorGUI.EndChangeCheck() && GUIUtility.keyboardControl == 0) { m_AssetTreeView.SetFocusAndEnsureSelectedItem(); } DrawToolbarMore(); if (GUILayout.Button(style.exportCsv, EditorStyles.toolbarButton, GUILayout.Width(70f))) { m_AssetTreeModel.ExportCsv(); } EditorGUILayout.EndHorizontal(); m_AssetTreeView.OnGUI(GUILayoutUtility.GetRect(0, 100000, 0, 100000)); } EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); GUILayout.FlexibleSpace(); EditorGUILayout.LabelField(m_AssetTreeModel.assetPaths, style.labelStyle); EditorGUILayout.EndHorizontal(); } else { ShowNotification(waiting); } }
protected void ThreadDoFilesTextReplace(Dictionary <string, List <string> > targetFileDic, string usePath) { List <JobFileTextReplace> jobList = new List <JobFileTextReplace>(); List <ManualResetEvent> eventList = new List <ManualResetEvent>(); string useGUID = AssetDatabase.AssetPathToGUID(usePath); int numFiles = 0; foreach (var pair in targetFileDic) { numFiles += pair.Value.Count; } int i = 0; foreach (var pair in targetFileDic) { string targetGUID = AssetDatabase.AssetPathToGUID(pair.Key); numFiles = pair.Value.Count; for (int j = 0; j < pair.Value.Count; j++) { if (!AssetDanshariUtility.ValidFileRepeat(pair.Value[j])) { continue; } JobFileTextReplace job = new JobFileTextReplace(pair.Value[j], useGUID, targetGUID); jobList.Add(job); eventList.Add(job.doneEvent); ThreadPool.QueueUserWorkItem(job.ThreadPoolCallback); if (eventList.Count >= Environment.ProcessorCount || (i == numFiles - 1 && eventList.Count > 0)) { WaitHandle.WaitAll(eventList.ToArray()); eventList.Clear(); EditorUtility.DisplayProgressBar(AssetDanshariStyle.Get().progressTitle, "替换引用...", (i + 1) * 1f / numFiles); } i++; } } foreach (var job in jobList) { if (!string.IsNullOrEmpty(job.exception)) { Debug.LogError(job.exception); } } }
protected void DrawItemWithIcon(Rect cellRect, TreeViewItem item, ref RowGUIArgs args, string displayName, string fileRelativePath, bool deleted, bool added, bool contentIndent = true, bool foldoutIndent = false) { if (contentIndent) { float num = GetContentIndent(item); cellRect.xMin += num; } if (foldoutIndent) { float num = GetFoldoutIndent(item); cellRect.xMin += num; } Rect position = cellRect; position.width = 16f; position.height = 16f; position.y += 2f; Texture iconForItem = item.icon; if (iconForItem == null && !deleted) { iconForItem = AssetDatabase.GetCachedIcon(fileRelativePath); if (iconForItem) { item.icon = iconForItem as Texture2D; } } if (iconForItem) { GUI.DrawTexture(position, iconForItem, ScaleMode.ScaleToFit); item.icon = iconForItem as Texture2D; } cellRect.xMin += 18f; DefaultGUI.Label(cellRect, displayName, args.selected, args.focused); if (deleted || added) { position.x = cellRect.xMax - 40f; position.y += 3f; position.height = 9f; position.width = 40f; GUI.DrawTexture(position, added ? AssetDanshariStyle.Get().iconNew.image: AssetDanshariStyle.Get().iconDelete.image, ScaleMode.ScaleToFit); } }
private void BuildDataDir(AssetTreeModel.AssetInfo dirInfo, TreeViewItem parent) { var dirItem = new AssetTreeViewItem <AssetTreeModel.AssetInfo>(dirInfo.id, -1, dirInfo.displayName, dirInfo); if (dirInfo.isFolder) { dirItem.icon = AssetDanshariStyle.Get().folderIcon; } parent.AddChild(dirItem); if (dirInfo.hasChildren) { foreach (var childInfo in dirInfo.children) { BuildDataDir(childInfo, dirItem); } } }
private List <FileMd5Info> GetFileMd5Infos(List <string> fileArray) { var style = AssetDanshariStyle.Get(); var fileList = new List <FileMd5Info>(); for (int i = 0; i < fileArray.Count;) { string file = fileArray[i]; if (string.IsNullOrEmpty(file)) { i++; continue; } EditorUtility.DisplayProgressBar(style.progressTitle, file, i * 1f / fileArray.Count); try { using (var md5 = MD5.Create()) { FileInfo fileInfo = new FileInfo(file); using (var stream = File.OpenRead(fileInfo.FullName)) { FileMd5Info info = new FileMd5Info(); info.filePath = fileInfo.FullName; info.fileSize = fileInfo.Length; info.fileTime = fileInfo.CreationTime.ToString("yyyy-MM-dd HH:mm:ss"); info.md5 = BitConverter.ToString(md5.ComputeHash(stream)).ToLower(); fileList.Add(info); } } i++; } catch (Exception e) { if (!EditorUtility.DisplayDialog(style.errorTitle, file + "\n" + e.Message, style.continueStr, style.cancelStr)) { EditorUtility.ClearProgressBar(); return(null); } } } return(fileList); }
protected override void ContextClickedItem(int id) { var item = FindItem(id, rootItem) as AssetTreeViewItem <AssetTreeModel.AssetInfo>; if (item == null || item.data.deleted || item.data.isExtra) { return; } GenericMenu menu = new GenericMenu(); menu.AddItem(AssetDanshariStyle.Get().locationContext, false, OnContextSetActiveItem, id); menu.AddItem(AssetDanshariStyle.Get().explorerContext, false, OnContextExplorerActiveItem, item); menu.AddSeparator(String.Empty); AddContextMoveComm(menu); menu.AddItem(AssetDanshariStyle.Get().dependenciesTitle, false, OnContextFindDependenciesActiveItem, item); menu.AddSeparator(String.Empty); menu.AddItem(AssetDanshariStyle.Get().duplicateContextOnlyUseThis, false, OnContextUseThisItem, item); menu.ShowAsContext(); }
public bool SetMoveToCommon(AssetInfo moveInfo, string destDir) { var style = AssetDanshariStyle.Get(); string destPath = String.Format("{0}/{1}", destDir, moveInfo.displayName); if (moveInfo.fileRelativePath == destPath) { return(true); } var errorStr = AssetDatabase.MoveAsset(moveInfo.fileRelativePath, destPath); if (!string.IsNullOrEmpty(errorStr)) { EditorUtility.DisplayDialog(style.errorTitle, errorStr, style.sureStr); return(false); } return(true); }
/// <summary> /// 去引用到的目录查找所有用到的guid,批量更改 /// </summary> private void OnContextUseThisItem(object userdata) { var item = userdata as AssetTreeViewItem <AssetModel.AssetInfo>; if (item != null) { AssetModel.AssetInfo group = ((AssetTreeViewItem <AssetModel.AssetInfo>)item.parent).data; AssetModel.AssetInfo useInfo = item.data; var style = AssetDanshariStyle.Get(); if (!EditorUtility.DisplayDialog(String.Empty, style.sureStr + style.duplicateContextOnlyUseThis.text, style.sureStr, style.cancelStr)) { return; } Dictionary <string, List <string> > beReplaceDic = new Dictionary <string, List <string> >(); for (int i = group.children.Count - 1; i >= 0; i--) { var info = group.children[i]; if (info != useInfo) { //存储依赖info的资源路径 if (info.hasChildren) { List <string> depList = new List <string>(); for (int j = 0; j < info.children.Count; j++) { depList.Add(info.children[j].fileRelativePath); } beReplaceDic.Add(info.fileRelativePath, depList); } AssetDatabase.DeleteAsset(info.fileRelativePath); info.deleted = true; } } ((AssetRepeatModel)m_Model).SetUseThis(useInfo.fileRelativePath, beReplaceDic); EditorUtility.DisplayDialog(String.Empty, style.progressFinish, style.sureStr); AssetDatabase.Refresh(); Repaint(); } }
protected void DrawToolbarExpandCollapse2() { var style = AssetDanshariStyle.Get(); Rect toolBtnRect = GUILayoutUtility.GetRect(style.expandAll, EditorStyles.toolbarDropDown, GUILayout.Width(50f)); if (GUI.Button(toolBtnRect, style.expandAll, EditorStyles.toolbarDropDown)) { GenericMenu menu = new GenericMenu(); menu.AddItem(style.expandAll2, false, m_AssetTreeView.ExpandAll); menu.AddItem(style.expandAll3, false, m_AssetTreeView.ExpandAllExceptLast); menu.DropDown(toolBtnRect); } toolBtnRect = GUILayoutUtility.GetRect(style.collapseAll, EditorStyles.toolbarDropDown, GUILayout.Width(50f)); if (GUI.Button(toolBtnRect, style.collapseAll, EditorStyles.toolbarDropDown)) { GenericMenu menu = new GenericMenu(); menu.AddItem(style.collapseAll2, false, m_AssetTreeView.CollapseAll); menu.AddItem(style.collapseAll3, false, m_AssetTreeView.CollapseOnlyLast); menu.DropDown(toolBtnRect); } }
private void OnContextMoveItem(object userdata) { if (!HasSelection()) { return; } var selects = GetSelection(); foreach (var select in selects) { TreeViewItem item = FindItem(select, rootItem); var assetInfo = GetItemAssetInfo(item); if (assetInfo == null || assetInfo.deleted) { continue; } var dirPath = userdata as string; var style = AssetDanshariStyle.Get(); string destPath = String.Format("{0}/{1}", dirPath, assetInfo.displayName); if (assetInfo.fileRelativePath != destPath) { var errorStr = AssetDatabase.MoveAsset(assetInfo.fileRelativePath, destPath); if (!string.IsNullOrEmpty(errorStr)) { EditorUtility.DisplayDialog(style.errorTitle, errorStr, style.sureStr); } else { assetInfo.fileRelativePath = destPath; } } OnContextUseThisItem(item); } }
public override void ExportCsv() { string path = AssetDanshariUtility.GetSaveFilePath(typeof(AssetDependenciesWindow).Name); if (string.IsNullOrEmpty(path)) { return; } var style = AssetDanshariStyle.Get(); var sb = new StringBuilder(); sb.AppendFormat("\"{0}\",", style.nameHeaderContent.text); sb.AppendFormat("\"{0}\"\n", style.dependenciesHeaderContent2.text); foreach (var info in data.children) { ExportCsvDataDir(info, sb, "├"); } AssetDanshariUtility.SaveFileText(path, sb.ToString()); GUIUtility.ExitGUI(); }
protected override void ContextClickedItem(int id) { var item = FindItem(id, rootItem); var assetInfo = GetItemAssetInfo(item); if (item == null || assetInfo == null || assetInfo.deleted) { return; } GenericMenu menu = new GenericMenu(); if (!IsSelectionMulti()) { menu.AddItem(AssetDanshariStyle.Get().locationContext, false, OnContextSetActiveItem, id); menu.AddItem(AssetDanshariStyle.Get().explorerContext, false, OnContextExplorerActiveItem, item); } if (menu.GetItemCount() > 0) { menu.ShowAsContext(); } }