Example #1
0
        public override void DoGUI(IGUIDrawer drawer)
        {
            drawer.ImportantLabel("Keywords:");
            drawer.BeginToolbarHorizontal();
            m_AutoRefreshKeyword.Set(drawer.ToolbarToggle(m_AutoRefreshKeyword, "自动刷新"));
            if (!m_AutoRefreshKeyword &&
                drawer.ToolbarButton(false, "刷新"))
            {
                RefreshShaderKeywords();
            }
            m_OnlyDisplayEnabledKeyword.Set(drawer.ToolbarToggle(m_OnlyDisplayEnabledKeyword, "只显示已启用"));
            if (drawer.ToolbarButton(false, "Log"))
            {
                LogShaderKeywords();
            }
            drawer.EndHorizontal();

            drawer.BeginToolbarHorizontal();
            float rowWidth = 0;
            bool  dirty    = false;

            for (int iKeyword = 0; iKeyword < m_GlobalKeywords.Count; iKeyword++)
            {
                KeywordItem iterKeyword = m_GlobalKeywords[iKeyword];
                if (m_OnlyDisplayEnabledKeyword &&
                    !iterKeyword.Enable)
                {
                    continue;
                }

                if (drawer.ToolbarButton(iterKeyword.Enable, iterKeyword.Content.text))
                {
                    dirty = true;
                    if (iterKeyword.Enable)
                    {
                        Shader.DisableKeyword(iterKeyword.KeywordName);
                    }
                    else
                    {
                        Shader.EnableKeyword(iterKeyword.KeywordName);
                    }
                }

                drawer.CalcMinMaxWidth_Button(iterKeyword.Content, out float minWidth, out float maxWidth);
                rowWidth += maxWidth;
                if (rowWidth >= drawer.GetPanelWidth() * 0.64f)
                {
                    rowWidth = 0;
                    drawer.EndHorizontal();
                    drawer.BeginToolbarHorizontal();
                }
            }
            drawer.EndHorizontal();

            if (dirty ||
                m_AutoRefreshKeyword)
            {
                RefreshShaderKeywords();
            }
        }
Example #2
0
        private void LogShaderKeywords()
        {
            RefreshShaderKeywords();
            StringBuilder disableKeywords = new StringBuilder();
            StringBuilder enabledKeywords = new StringBuilder();

            for (int iKeyword = 0; iKeyword < m_GlobalKeywords.Count; iKeyword++)
            {
                KeywordItem iterKeyword = m_GlobalKeywords[iKeyword];
                if (Shader.IsKeywordEnabled(iterKeyword.KeywordName))
                {
                    enabledKeywords.Append(iKeyword).Append(",是,")
                    .Append(iterKeyword.KeywordName).Append(',')
                    .Append(iterKeyword.KeywordType).Append('\n');
                }
                else
                {
                    disableKeywords.Append(iKeyword).Append(",否,")
                    .Append(iterKeyword.KeywordName).Append(',')
                    .Append(iterKeyword.KeywordType).Append('\n');
                }
            }

            string shaderKeywords = $"编号,是否启用,名字,类型\n{enabledKeywords.ToString()}{disableKeywords.ToString()}";

            MDebug.Log("ShaderTools", "ShaderKeywords:\n" + shaderKeywords);

#if UNITY_EDITOR
            string reportFileName = $"{Application.dataPath}/../Temp/ShaderKeywords.csv";
            File.WriteAllText(reportFileName, shaderKeywords);
            EditorUtility.OpenWithDefaultApp(reportFileName);
            EditorUtility.RevealInFinder(reportFileName);
#endif
        }
Example #3
0
        public KeyWordList()
        {
            InitializeComponent();

            mRootItem = new KeywordItem();
            mListSelectedObjects_KeyWords = new List <KeywordItem>();
            mListKeywordInfos             = new List <KeywordInfo>();
            mListKeywordItems             = new List <KeywordItem>();

            Loaded += KeyWordList_Loaded;
        }
Example #4
0
        protected virtual void OnReadMetadata(XmlReader reader)
        {
            if (reader.IsEmptyElement)
            {
                return;
            }

            string startName = reader.Name;

            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    switch (reader.Name)
                    {
                    case "keyword":
                        KeywordItem keyItem = new KeywordItem();
                        keyItem.ReadXml(reader);
                        if (!keyItem.IsEmpty)
                        {
                            _keywords.Add(keyItem);
                        }
                        break;

                    case "attribute":
                        AttributeItem attrItem = new AttributeItem();
                        attrItem.ReadXml(reader);
                        if (!attrItem.IsEmpty)
                        {
                            _attributes.Add(attrItem);
                        }
                        break;

                    case "authoring":
                        break;
                    }
                }
                else if (reader.NodeType == XmlNodeType.EndElement)
                {
                    if (String.Equals(reader.Name, startName,
                                      StringComparison.OrdinalIgnoreCase))
                    {
                        break;
                    }
                }
            }
        }
Example #5
0
        private void RefreshShaderKeywords()
        {
            m_GlobalKeywords.Clear();
            for (int iKeyword = 0; iKeyword < UnityEngineReflectionUtility.ShaderKeyword.MAX_SHADER_KEYWORDS; iKeyword++)
            {
                ShaderKeyword iterKeyword = UnityEngineReflectionUtility.ShaderKeyword.NewShaderKeyword(iKeyword);
                string        keywordName = ShaderKeyword.GetGlobalKeywordName(iterKeyword);
                if (!ShaderUtility.IsValidAndUsed(iterKeyword, keywordName))
                {
                    continue;
                }

                KeywordItem keywordItem = new KeywordItem();
                keywordItem.KeywordName = keywordName;
                keywordItem.KeywordType = ShaderKeyword.GetGlobalKeywordType(iterKeyword);
                keywordItem.Enable      = Shader.IsKeywordEnabled(keywordItem.KeywordName);
                keywordItem.Content     = new GUIContent(keywordItem.KeywordName);
                m_GlobalKeywords.Add(keywordItem);
            }
        }
Example #6
0
 private void GetCheckedInspector(KeywordItem parentItem)
 {
     try
     {
         for (int i = 0; i < parentItem.Children.Count; i++)
         {
             KeywordItem item = parentItem.Children[i] as KeywordItem;
             if (item != null)
             {
                 if (item.IsChecked == true && item.ObjID > 0)
                 {
                     mListSelectedObjects_KeyWords.Add(item);
                 }
                 GetCheckedInspector(item);
             }
         }
     }
     catch (Exception ex)
     {
         ShowException(ex.Message);
     }
 }
Example #7
0
 private void CreateKeywordItems()
 {
     try
     {
         mRootItem.Children.Clear();
         mListKeywordItems.Clear();
         //所有关键词
         KeywordItem allItem = new KeywordItem();
         allItem.ObjID       = 0;
         allItem.Name        = CurrentApp.GetLanguageInfo("3102001", "All Keyword");
         allItem.Description = CurrentApp.GetLanguageInfo("3102001", "All Keyword");
         mRootItem.AddChild(allItem);
         mListKeywordItems.Add(allItem);
         var keywords = mListKeywordInfos.GroupBy(k => k.SerialNo);
         foreach (var keyword in keywords)
         {
             KeywordItem item     = new KeywordItem();
             long        serialNo = 0;
             string      strName  = string.Empty;
             string      strDesc  = string.Empty;
             foreach (var content in keyword)
             {
                 serialNo = content.SerialNo;
                 strName  = content.Name;
                 strDesc += string.Format("{0};", content.Content);
                 item.ListKeywordInfos.Add(content);
             }
             item.ObjID       = serialNo;
             item.Name        = strName;
             item.Description = string.Format("{0} ({1}) ", strName, strDesc);
             allItem.AddChild(item);
             mListKeywordItems.Add(item);
         }
     }
     catch (Exception ex)
     {
         ShowException(ex.Message);
     }
 }
Example #8
0
        protected virtual bool OnLoadTopicMetadata()
        {
            if (_filePath == null || !_filePath.Exists)
            {
                return(false);
            }

            XmlReaderSettings settings = new XmlReaderSettings();

            settings.IgnoreComments               = true;
            settings.IgnoreWhitespace             = true;
            settings.IgnoreProcessingInstructions = true;

            XmlReader reader = null;

            try
            {
                reader = XmlReader.Create(_filePath, settings);

                XmlNodeType nodeType = reader.MoveToContent();
                Debug.Assert(nodeType == XmlNodeType.Element);
                if (nodeType != XmlNodeType.Element)
                {
                    return(false);
                }

                if (String.Equals(reader.Name, "topic",
                                  StringComparison.OrdinalIgnoreCase))
                {
                    _includesTopicId = true;

                    _topicId = reader.GetAttribute("id");
                    string strTemp = reader.GetAttribute("revisionNumber");
                    if (!String.IsNullOrEmpty(strTemp))
                    {
                        _revNumber = Convert.ToInt32(strTemp);
                    }

                    string nodeName = null;
                    while (reader.Read())
                    {
                        nodeType = reader.NodeType;
                        nodeName = reader.Name;
                        if (nodeType == XmlNodeType.Element)
                        {
                            if (ConceptualUtils.IsValidDocumentTag(nodeName))
                            {
                                this.OnDocumentType(nodeName);

                                break;
                            }
                        }
                        else if (nodeType == XmlNodeType.EndElement)
                        {
                            if (String.Equals(nodeName, "topic") ||
                                ConceptualUtils.IsValidDocumentTag(nodeName))
                            {
                                this.OnDocumentType(nodeName);

                                break;
                            }
                        }
                    }
                }
                else if (ConceptualUtils.IsValidDocumentTag(reader.Name))
                {
                    _includesTopicId = false;

                    this.OnDocumentType(reader.Name);
                }
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }
            }

            // If the companion file is available, load it...
            string companionFile = Path.ChangeExtension(_filePath, ".cmp");

            if (!File.Exists(companionFile))
            {
                return(true);
            }

            try
            {
                reader = XmlReader.Create(companionFile, settings);

                XmlNodeType nodeType = XmlNodeType.None;
                string      nodeName = null;
                string      nodeText = null;
                while (reader.Read())
                {
                    nodeType = reader.NodeType;
                    nodeName = reader.Name;
                    if (nodeType == XmlNodeType.Element)
                    {
                        switch (nodeName)
                        {
                        case "title":
                            nodeText = reader.ReadString().Trim();
                            if (!String.IsNullOrEmpty(nodeText))
                            {
                                _topicTitle = nodeText;
                            }
                            break;

                        case "tableOfContentsTitle":
                            nodeText = reader.ReadString().Trim();
                            if (!String.IsNullOrEmpty(nodeText))
                            {
                                _topicTocTitle = nodeText;
                            }
                            break;

                        case "linkText":
                            nodeText = reader.ReadString().Trim();
                            if (!String.IsNullOrEmpty(nodeText))
                            {
                                _topicLinkText = nodeText;
                            }
                            break;

                        case "keyword":
                            KeywordItem keyItem = new KeywordItem();
                            keyItem.ReadXml(reader);
                            if (!keyItem.IsEmpty)
                            {
                                _keywords.Add(keyItem);
                            }
                            break;

                        case "attribute":
                            AttributeItem attrItem = new AttributeItem();
                            attrItem.ReadXml(reader);
                            if (!attrItem.IsEmpty)
                            {
                                _attributes.Add(attrItem);
                            }
                            break;

                        case "authoring":
                            break;
                        }
                    }
                    else if (nodeType == XmlNodeType.EndElement)
                    {
                        if (String.Equals(nodeName, "metadata"))
                        {
                            this.OnDocumentType(nodeName);

                            break;
                        }
                    }
                }
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }
            }

            return(true);
        }
Example #9
0
        private void ReadTopic(XmlReader reader, ConceptualContent content,
                               ConceptualItem parentItem)
        {
            XmlNodeType nodeType  = XmlNodeType.None;
            string      nodeName  = null;
            int         revNumber = 1;

            while (reader.Read())
            {
                nodeType = reader.NodeType;
                if (nodeType == XmlNodeType.Element)
                {
                    nodeName = reader.Name;
                    if (String.Equals(nodeName, "Topic"))
                    {
                        bool isVisible = true;

                        string docId = reader.GetAttribute("id");
                        if (ConceptualUtils.IsValidId(docId))
                        {
                            string textTemp = reader.GetAttribute("visible");
                            if (!String.IsNullOrEmpty(textTemp))
                            {
                                isVisible = Convert.ToBoolean(textTemp);
                            }

                            string docTitle = reader.GetAttribute("title");
                            if (!String.IsNullOrEmpty(docTitle))
                            {
                                string fullPath = Path.Combine(_contentDir,
                                                               docId + ".aml");
                                ConceptualTopic docItem = new ConceptualTopic(
                                    new BuildFilePath(fullPath), docTitle, docId);

                                docItem.Content = content;

                                docItem.BeginInit();

                                docItem.Visible        = isVisible;
                                docItem.TopicRevisions = revNumber;
                                //docItem.IncludesTopicId = true;

                                docItem.EndInit();

                                // handle the sub-item...
                                if (!reader.IsEmptyElement)
                                {
                                    ReadTopic(reader, content, docItem);
                                }

                                parentItem.Add(docItem);
                            }
                        }
                    }
                    else if (String.Equals(nodeName, "HelpKeyword"))
                    {
                        string index = reader.GetAttribute("index");
                        string term  = reader.GetAttribute("term");
                        if (!String.IsNullOrEmpty(index) &&
                            !String.IsNullOrEmpty(term))
                        {
                            KeywordItem keyword = new KeywordItem(
                                KeywordItem.ParseIndex(index), term);

                            parentItem.Keywords.Add(keyword);
                        }
                    }
                }
                else if (nodeType == XmlNodeType.EndElement)
                {
                    if (String.Equals(reader.Name, "Topic"))
                    {
                        break;
                    }
                }
            }
        }