static void _BuildReferencedTreeView(TreeViewCtrl referencedTreeView, TreeViewNode parent, List <U3DAssetInfo> assets)
    {
        if (assets.Count == 0)
        {
            return;
        }

        foreach (var a in assets)
        {
            TreeViewNode newNode = referencedTreeView.CreateNode(Path.GetFileName(a.path));
            newNode.image          = a.icon;
            newNode.tooptip        = a.path;
            newNode.state.IsExpand = false;
            if (parent == null)
            {
                referencedTreeView.Roots.Add(newNode);
            }
            else
            {
                parent.Add(newNode);
            }

            List <U3DAssetInfo> nextLevelAssets = new List <U3DAssetInfo>();
            ResourceManageToolModel.GetInstance().GetAssetReferenced(a.guid, out nextLevelAssets);
            _BuildReferencedTreeView(referencedTreeView, newNode, nextLevelAssets);
        }
    }
 /*
  * 资源数据库发生变化响应函数
  */
 static void OnAssetDatabaseUpdate(ResourceManageToolModel m)
 {
     RebuildResourcesTreeView();
     RebuildUnUsedResourcesListView();
     ClearResourceRefTreeView();
     ClearReferencedTreeView();
 }
    /*
     * 资源数据库状态标签
     */

    static void UpdateAssetDBStateLabel()
    {
        LabelCtrl dbStateLabel = s_root.FindControl("_StateLabel") as LabelCtrl;

        dbStateLabel.textColor = Color.green;
        dbStateLabel.Caption   = "您使用的是\"" + ResourceManageToolModel.GetInstance().GetAssetDatabaseUpdateTime() + "\"更新的数据库";
    }
    static void OnAssetDatabaseStateChange(ResourceManageToolModel m)
    {
        LabelCtrl stateLabel = s_root.FindControl("_StateLabel") as LabelCtrl;

        stateLabel.Name = "_StateLabel";


        switch (m.CurrDBState)
        {
        case ResourceManageToolModel.State.STATE_INIT:
            stateLabel.textColor = Color.red;
            stateLabel.Caption   = "数据库没有更新,无法查看无用资源列表与反向引用!";
            break;

        case ResourceManageToolModel.State.STATE_BUILD:
            stateLabel.textColor = Color.green;
            stateLabel.Caption   = "您使用的是\"" + m.GetAssetDatabaseUpdateTime() + "\"更新的数据库";
            break;

        default:
            break;
        }

        RequestRepaint();
    }
 static void OnCoroutineTaskFinished(Guid taskID, object resultObj)
 {
     if (ResourceManageToolModel.GetInstance().UpdateAssetDatabase(taskID, resultObj))
     {
         EditorUtility.ClearProgressBar();
     }
 }
    static void RebuildUnUsedResourcesListView()
    {
        ListViewCtrl unUsedResListView = s_root.FindControl("_UnUsedResList") as ListViewCtrl;

        if (unUsedResListView == null)
        {
            return;
        }

        unUsedResListView.ClearItems();

        List <U3DAssetInfo> unUsedAssets = ResourceManageToolModel.GetInstance().UnUsedAssetList;

        foreach (var asset in unUsedAssets)
        {
            ListCtrlItem newItem = new ListCtrlItem();
            newItem.name          = Path.GetFileName(asset.path);
            newItem.image         = asset.icon;
            newItem.userObj       = asset.guid;
            newItem.color         = Color.white;
            newItem.onSelectColor = Color.red;
            unUsedResListView.AddItem(newItem);
        }

        RequestRepaint();
    }
 static void OnEnable(EditorRoot root)
 {
     Debug.Log("OnEnable,窗口初始化?");
     ResourceManageConfig.GetInstance().Init();
     ResourceManageToolModel.GetInstance().Init();
     RebuildResourcesTreeView();
 }
    static void OnDestroy(EditorRoot root)
    {
        ResourceManageToolModel.GetInstance().onResourceDBUpdate = null;
        ResourceManageToolModel.DestroyInstance();
        ResourceManageConfig.DestoryInstance();

        s_root = null;
    }
Ejemplo n.º 9
0
 public static ResourceManageToolModel GetInstance()
 {
     if (s_instance == null)
     {
         s_instance = new ResourceManageToolModel();
     }
     return(s_instance);
 }
    static void OnSearchAllAssets(EditorControl c)
    {
        IEditorCoroutineTask newTask = ResourceManageToolModel.GetInstance().NewUpdateTask();

        if (newTask != null)
        {
            s_root.GetCoroutine().AddTask(newTask);
        }
    }
    static void RebuildResourcesTreeView()
    {
        TreeViewCtrl resTreeList = s_root.FindControl("_ResTreeList") as TreeViewCtrl;

        resTreeList.Clear();

        foreach (var assetInfo in ResourceManageToolModel.GetInstance().AssetList)
        {
            AddAssetToResourceTreeView(assetInfo);
        }
        GC.Collect();
        RequestRepaint();
    }
    static void RebuildReferencedTreeView(Guid resID)
    {
        TreeViewCtrl referencedTreeView = s_root.FindControl("_ResReverseRefTreeView") as TreeViewCtrl;

        if (referencedTreeView == null)
        {
            return;
        }
        referencedTreeView.Clear();

        List <U3DAssetInfo> referencedAssets = new List <U3DAssetInfo>();

        ResourceManageToolModel.GetInstance().GetAssetReferenced(resID, out referencedAssets);
        _BuildReferencedTreeView(referencedTreeView, null, referencedAssets);
    }
    static void RebuildResourceRefTreeView(Guid resID)
    {
        TreeViewCtrl resRefTreeView = s_root.FindControl("_ResRefTreeView") as TreeViewCtrl;

        if (resRefTreeView == null)
        {
            return;
        }
        resRefTreeView.Clear();

        List <U3DAssetInfo> depAssets = new List <U3DAssetInfo>();

        ResourceManageToolModel.GetInstance().GetAssetDependencies(resID, out depAssets);
        _BuildResourceRefTreeView(resRefTreeView, null, depAssets);
    }
    /*
     * 搜索框
     */

    //Modify by lteng for 追加共通控件 At 2015/2/26
    static void OnSearchTextBoxChange(EditorControl c, object value)
    {
        TextBoxCtrl        searchBox          = s_root.FindControl("_SearchBox") as TextBoxCtrl;
        ComboBoxCtrl <int> typeFilterComboBox = s_root.FindControl("_AssetTypeCombo") as ComboBoxCtrl <int>;

        typeFilterComboBox.CurrValue = 0;
        if (searchBox.Text.Length == 0)
        {
            ResourceManageToolModel.GetInstance().SetFilter(0);
        }
        else
        {
            AssetNameFilter nameFilter = new AssetNameFilter();
            nameFilter.SearchText = searchBox.Text;
            ResourceManageToolModel.GetInstance().SetFilter(nameFilter);
        }
        RequestRepaint();
    }
    static void AddAssetToResourceTreeView(U3DAssetInfo assetInfo)
    {
        TreeViewCtrl resTreeList = s_root.FindControl("_ResTreeList") as TreeViewCtrl;

        if (resTreeList == null)
        {
            return;
        }

        bool expandTreeNode = false;

        if ((ResourceManageToolModel.GetInstance().CurrFilter as NullTypeFilter) == null)
        {//非过滤器为全部文件则节点都展开
            expandTreeNode = true;
        }

        string assetPath = assetInfo.path;
        string currPath  = assetPath;
        List <TreeViewNode> currLevelNodeList = resTreeList.Roots;
        TreeViewNode        parentNode        = null;
        int len = 0;

        while (currPath != "")
        {
            int i = currPath.IndexOf('/');
            if (i < 0)
            {
                i = currPath.Length;
            }
            len += i + 1;
            string pathNodeName     = currPath.Substring(0, i);
            string currNodeFullPath = assetPath.Substring(0, len - 1);
            if (i + 1 < currPath.Length)
            {
                currPath = currPath.Substring(i + 1);
            }
            else
            {
                currPath = "";
            }


            bool findNode = false;
            foreach (var treeNode in currLevelNodeList)
            {
                if (treeNode.name == pathNodeName)
                {
                    findNode          = true;
                    parentNode        = treeNode;
                    currLevelNodeList = treeNode.children;
                    break;
                }
            }

            if (!findNode)
            {
                U3DAssetInfo info    = null;
                TreeViewNode newNode = new TreeViewNode();
                newNode.name = pathNodeName;
                ResourceManageToolModel.GetInstance().Find(currNodeFullPath, out info);
                newNode.image          = info.icon;
                newNode.userObject     = info.guid;
                newNode.state.IsExpand = expandTreeNode;

                if (parentNode == null)
                {//说明需要作为根节点插入树视图中
                    currLevelNodeList.Add(newNode);
                }
                else
                {
                    parentNode.Add(newNode);
                }

                parentNode        = newNode;
                currLevelNodeList = newNode.children;
            }
        }
    }
 static void OnFilterComboSelectChanged(EditorControl c, object sel)
 {
     ResourceManageToolModel.GetInstance().SetFilter((int)sel);
 }
    //这个方法就是利用EditorManager回调回来的一个EditorRoot实例;
    //构建了一个树形结构;
    public static void InitControls(EditorRoot editorRoot)
    {
        //将之前实例化的那个EditorWindow赋值给s_root
        s_root = editorRoot;

        //s_root.position = new Rect(100f, 100f, 1024, 768f);

        {//对编辑器全局消息响应;
            EditorApplication.projectWindowItemOnGUI += OnProjectWindowItem;
            EditorApplication.projectWindowChanged   += OnProjectWindowChanged;
        }

        {//协程回调
            s_root.onCoroutineMessage      = OnCoroutineMessage;
            s_root.onCoroutineTaskFinished = OnCoroutineTaskFinished;
            s_root.onDestroy = OnDestroy;
            s_root.onEnable  = OnEnable;
        }

        {//注册数据库变化回调
            ResourceManageToolModel.GetInstance().onResourceDBUpdate      = OnAssetDatabaseUpdate;
            ResourceManageToolModel.GetInstance().onResrouceDBStateChange = OnAssetDatabaseStateChange;
        }

        HSpliterCtrl hspliter = new HSpliterCtrl();

        s_root.RootCtrl           = hspliter;
        hspliter.layoutConstraint = LayoutConstraint.GetSpliterConstraint(30f);

        //用来放置上方菜单
        HBoxCtrl     hb0      = new HBoxCtrl();
        VSpliterCtrl vspliter = new VSpliterCtrl();

        vspliter.layoutConstraint = LayoutConstraint.GetSpliterConstraint(300f);
        vspliter.Dragable         = true;

        hspliter.Add(hb0);
        hspliter.Add(vspliter);

        //用来存放 资源列表、无引用资源列表
        VBoxCtrl vb0 = new VBoxCtrl();
        //用来存放 资源依赖项、反向引用
        VBoxCtrl vb1 = new VBoxCtrl();

        vspliter.Add(vb0);
        vspliter.Add(vb1);

        //左侧TabView
        TabViewCtrl leftTabView = new TabViewCtrl();
        //右侧TabView
        TabViewCtrl rightTabView = new TabViewCtrl();

        vb0.Add(leftTabView);
        vb1.Add(rightTabView);

        //资源列表
        TreeViewCtrl resTreeList = new TreeViewCtrl();

        resTreeList.Caption        = "资源列表";
        resTreeList.Name           = "_ResTreeList";
        resTreeList.onItemSelected = OnResourcesTreeViewSelectChanged;

        //无引用资源列表
        ListViewCtrl unUsedList = new ListViewCtrl();

        unUsedList.Caption        = "无引用资源";
        unUsedList.Name           = "_UnUsedResList";
        unUsedList.onItemSelected = OnUnUsedResourcesListViewSelectChanged;

        leftTabView.Add(resTreeList);
        leftTabView.Add(unUsedList);

        //资源依赖项
        TreeViewCtrl resRefTreeView = new TreeViewCtrl();

        resRefTreeView.Caption = "资源依赖项";
        resRefTreeView.Name    = "_ResRefTreeView";


        //反向引用
        TreeViewCtrl resReverseRefTreeView = new TreeViewCtrl();

        resReverseRefTreeView.Caption = "反向引用";
        resReverseRefTreeView.Name    = "_ResReverseRefTreeView";

        rightTabView.Add(resRefTreeView);
        rightTabView.Add(resReverseRefTreeView);


        Rect       btnRect   = new Rect(0, 0, 120, 20);
        ButtonCtrl searchBtn = new ButtonCtrl();

        searchBtn.Name     = "_SearchAllResources";
        searchBtn.Caption  = "扫描资源!";
        searchBtn.Size     = btnRect;
        searchBtn.onClick += OnSearchAllAssets;
        searchBtn.BtnColor = Color.green;
        searchBtn.Visiable = true;

        Rect comboBoxRect = new Rect(0, 0, 100, 20);
        ComboBoxCtrl <int> assetTypeCombo = new ComboBoxCtrl <int>(0);

        assetTypeCombo.Size          = comboBoxRect;
        assetTypeCombo.Name          = "_AssetTypeCombo";
        assetTypeCombo.onValueChange = OnFilterComboSelectChanged;

        List <IAssetFilter> assetFilters = ResourceManageToolModel.GetInstance().AssetFilterList;

        foreach (var filter in assetFilters)
        {
            AssetTypeFilter f = filter as AssetTypeFilter;
            assetTypeCombo.AddItem(new ComboItem(f.DisplayTypeName, f.TypeIndex));
        }

        assetTypeCombo.CurrValue = 0;

        TextBoxCtrl searchTextBox = new TextBoxCtrl();

        searchTextBox.Size          = comboBoxRect;
        searchTextBox.Icon          = UnityInternalIconCache.GetInstance().GetCacheIcon("d_ViewToolZoom");
        searchTextBox.Name          = "_SearchBox";
        searchTextBox.Caption       = "搜索";
        searchTextBox.Visiable      = true;
        searchTextBox.onValueChange = OnSearchTextBoxChange;

        ButtonCtrl helpBtn = new ButtonCtrl();

        helpBtn.Name     = "_HelpButton";
        helpBtn.Caption  = "帮助文档";
        helpBtn.onClick  = OnHelp;
        helpBtn.Size     = btnRect;
        helpBtn.Visiable = true;

        LabelCtrl stateLabel = new LabelCtrl();

        stateLabel.Name             = "_StateLabel";
        stateLabel.textColor        = Color.red;
        stateLabel.Caption          = "数据库没有更新,无法查看无用资源列表与反向引用!";
        stateLabel.layoutConstraint = LayoutConstraint.GetExtensibleViewConstraint();

        hb0.Add(searchBtn);
        hb0.Add(assetTypeCombo);
        hb0.Add(searchTextBox);
        hb0.Add(helpBtn);
        hb0.Add(stateLabel);
    }