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();
        }
Example #4
0
        /// <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();
            }
        }
Example #8
0
        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();
        }
Example #9
0
        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));
        }
Example #11
0
        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);
     }
 }
Example #17
0
 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);
            }
        }
Example #20
0
        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();
        }
Example #25
0
        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();
            }
        }