Пример #1
0
        private void RefreshData()
        {
            profiles     = new List <ImportDefinitionProfile>();
            profileNames = new List <string>();
            GetAuditorProfiles( );

            if (m_AssetListState == null)
            {
                m_AssetListState = new TreeViewState();
            }

            IList <int> selection = null;

            if (m_AssetList != null)
            {
                selection = m_AssetList.GetSelection();
            }

            m_AssetList = new AssetsTreeView(m_AssetListState);
            if (profiles.Count > 0 && selected < profiles.Count)
            {
                m_AssetList.m_Profile = profiles[selected];
            }
            m_AssetList.Reload();

            if (m_PropertyListState == null)
            {
                m_PropertyListState = new TreeViewState();
            }

            m_ModularTreeView             = new ModularDetailTreeView(m_PropertyListState);
            m_AssetList.m_ModularTreeView = m_ModularTreeView;
            m_ModularTreeView.Reload();

            if (selection != null)
            {
                m_AssetList.SetupSelection(selection);
            }
        }
        private void ContextMenuSelectionCallback(object ctx)
        {
            AssetViewItemMenuContext menuContext = ctx as AssetViewItemMenuContext;

            if (menuContext == null)
            {
                Debug.LogError("Incorrect context received from AssetTreeViewItem context menu");
                return;
            }

            List <AssetsTreeViewItem> assets  = new List <AssetsTreeViewItem>();
            List <AssetsTreeViewItem> folders = new List <AssetsTreeViewItem>();

            for (int i = 0; i < menuContext.m_Items.Count; ++i)
            {
                if (menuContext.m_Items[i].isAsset == false)
                {
                    GetAssetItems(menuContext.m_Items[i], assets, folders);
                    if (folders.Contains(menuContext.m_Items[i]) == false)
                    {
                        folders.Add(menuContext.m_Items[i]);
                    }
                }
                else if (menuContext.m_Items[i].conforms == false && assets.Contains(menuContext.m_Items[i]) == false)
                {
                    assets.Add(menuContext.m_Items[i]);
                }
            }

            List <string> assetPaths = new List <string>(assets.Count);

            for (int i = 0; i < assets.Count; ++i)
            {
                assetPaths.Add(assets[i].path);
            }

            for (int i = 0; i < menuContext.m_Modules.Count; ++i)
            {
                if (menuContext.m_Modules[i] == null)
                {
                    Debug.LogError("Module became null during window use, report issue");
                    continue;
                }

                menuContext.m_Modules[i].SetManuallyProcessing(assetPaths, true);
            }

            // reimport all the assets -> triggering the modules to process them (including any that profiles always do)
            AssetDatabase.StartAssetEditing();
            for (int i = 0; i < assets.Count; ++i)
            {
                assets[i].ReimportAsset();
            }
            AssetDatabase.StopAssetEditing();

            foreach (IImportTask module in menuContext.m_Modules)
            {
                Type conformObjectType = module.GetConformObjectType();
                for (int i = 0; i < assets.Count; ++i)
                {
                    // TODO confirm that it now conforms, currently just set everything as Conforms
                    foreach (ConformData data in assets[i].conformData)
                    {
                        foreach (IConformObject conformObject in data.ConformObjects)
                        {
                            if (conformObject.GetType() == conformObjectType)
                            {
                                SetConformObjectRecursive(conformObject, true, conformObjectType);
                            }
                        }
                    }
                }
            }

            List <AssetsTreeViewItem> checkFoldersForConform = new List <AssetsTreeViewItem>();

            for (int i = 0; i < assets.Count; ++i)
            {
                assets[i].Refresh();
                AssetsTreeViewItem parent = assets[i].parent as AssetsTreeViewItem;
                if (parent != null & checkFoldersForConform.Contains(parent) == false)
                {
                    checkFoldersForConform.Add(parent);
                }
            }

            for (int i = 0; i < folders.Count; ++i)
            {
                if (folders[i].conformData == null)
                {
                    folders[i].conforms = true;
                    folders[i].Refresh();
                    AssetsTreeViewItem parent = folders[i].parent as AssetsTreeViewItem;
                    if (parent != null && parent.conforms == false && checkFoldersForConform.Contains(parent) == false)
                    {
                        checkFoldersForConform.Add(parent);
                    }
                }
            }

            while (checkFoldersForConform.Count > 0)
            {
                bool conforms = true;
                for (int i = 0; i < checkFoldersForConform[0].children.Count; ++i)
                {
                    AssetsTreeViewItem item = checkFoldersForConform[0].children[i] as AssetsTreeViewItem;
                    if (item != null && item.conforms == false)
                    {
                        conforms = false;
                    }
                }

                if (conforms)
                {
                    checkFoldersForConform[0].conforms = true;
                    AssetsTreeViewItem parent = checkFoldersForConform[0].parent as AssetsTreeViewItem;
                    if (parent != null & checkFoldersForConform.Contains(parent) == false)
                    {
                        checkFoldersForConform.Add(parent);
                    }
                }

                checkFoldersForConform.RemoveAt(0);
            }

            m_ModularTreeView.Reload();
        }