示例#1
0
        public string GetStory(string strLanguage)
        {
            //Little bit of data required for following steps
            XmlDocument    xmlDoc = _objCharacter.LoadData("lifemodules.xml", strLanguage);
            XPathNavigator xdoc   = _objCharacter.LoadDataXPath("lifemodules.xml", strLanguage);

            //Generate list of all life modules (xml, we don't save required data to quality) this character has
            List <XmlNode> modules = new List <XmlNode>(10);

            foreach (Quality quality in _objCharacter.Qualities)
            {
                if (quality.Type == QualityType.LifeModule)
                {
                    modules.Add(Quality.GetNodeOverrideable(quality.SourceIDString, xmlDoc));
                }
            }

            //Sort the list (Crude way, but have to do)
            for (int i = 0; i < modules.Count; i++)
            {
                string stageName = xdoc.SelectSingleNode("chummer/stages/stage[@order = " + (i <= 4 ? (i + 1).ToString(GlobalOptions.InvariantCultureInfo).CleanXPath() : "\"5\"") + "]")?.Value;
                int    j;
                for (j = i; j < modules.Count; j++)
                {
                    if (modules[j]["stage"]?.InnerText == stageName)
                    {
                        break;
                    }
                }
                if (j != i && j < modules.Count)
                {
                    XmlNode tmp = modules[i];
                    modules[i] = modules[j];
                    modules[j] = tmp;
                }
            }

            string[]       story             = new string[modules.Count];
            object         storyLock         = new object();
            XPathNavigator xmlBaseMacrosNode = xdoc.SelectSingleNode("/chummer/storybuilder/macros");

            //Actually "write" the story
            Parallel.For(0, modules.Count, i =>
            {
                XmlNode objStoryModule        = modules[i];
                StringBuilder sbdModuleString = new StringBuilder();
                Write(sbdModuleString, objStoryModule["story"]?.InnerText ?? string.Empty, 5, xmlBaseMacrosNode);
                lock (storyLock)
                    story[i] = sbdModuleString.ToString();
            });

            return(string.Join(Environment.NewLine + Environment.NewLine, story));
        }
示例#2
0
        private async void treModules_AfterSelect(object sender, TreeViewEventArgs e)
        {
            bool blnSelectAble;

            if (e.Node.Nodes.Count == 0)
            {
                blnSelectAble = true;
            }
            else
            {
                //Select any node that have an id node equal to tag
                string  selectString = "//*[id = " + e.Node.Tag.ToString().CleanXPath() + "]/selectable";
                XmlNode node         = _xmlDocument.SelectSingleNode(selectString);
                //if it contains >selectable>True</selectable>, yes or </selectable>
                //set button to selectable, otherwise not
                blnSelectAble = (node != null && (node.InnerText == bool.TrueString || node.OuterXml.EndsWith("/>", StringComparison.Ordinal)));
            }

            _strSelectedId = (string)e.Node.Tag;
            XmlNode xmlSelectedNodeInfo = Quality.GetNodeOverrideable(_strSelectedId, await _objCharacter.LoadDataAsync("lifemodules.xml"));

            if (xmlSelectedNodeInfo != null)
            {
                await cmdOK.DoThreadSafeAsync(x => x.Enabled = blnSelectAble);

                await cmdOKAdd.DoThreadSafeAsync(x => x.Enabled = blnSelectAble);

                await lblBP.DoThreadSafeAsync(x => x.Text = xmlSelectedNodeInfo["karma"]?.InnerText ?? string.Empty);

                string strSpace = await LanguageManager.GetStringAsync("String_Space");

                await lblSource.DoThreadSafeAsync(x => x.Text = xmlSelectedNodeInfo["source"]?.InnerText
                                                  ?? string.Empty + strSpace
                                                  + xmlSelectedNodeInfo["page"]?.InnerText);

                await lblStage.DoThreadSafeAsync(x => x.Text = xmlSelectedNodeInfo["stage"]?.InnerText ?? string.Empty);
            }
            else
            {
                string strError = await LanguageManager.GetStringAsync("String_Error");

                await lblBP.DoThreadSafeAsync(x => x.Text = strError);

                await lblStage.DoThreadSafeAsync(x => x.Text = strError);

                await lblSource.DoThreadSafeAsync(x => x.Text = strError);

                await cmdOK.DoThreadSafeAsync(x => x.Enabled = false);

                await cmdOKAdd.DoThreadSafeAsync(x => x.Enabled = false);
            }
        }
示例#3
0
        public string GetStory(string strLanguage)
        {
            //Little bit of data required for following steps
            XmlDocument xdoc = XmlManager.Load("lifemodules.xml", strLanguage);

            //Generate list of all life modules (xml, we don't save required data to quality) this character has
            List <XmlNode> modules = new List <XmlNode>();

            foreach (Quality quality in _objCharacter.Qualities)
            {
                if (quality.Type == QualityType.LifeModule)
                {
                    modules.Add(Quality.GetNodeOverrideable(quality.QualityId, xdoc));
                }
            }

            //Sort the list (Crude way, but have to do)
            for (int i = 0; i < modules.Count; i++)
            {
                string stageName = xdoc.SelectSingleNode(i <= 4 ? "chummer/stages/stage[@order = \"" + (i + 1).ToString() + "\"]" : "chummer/stages/stage[@order = \"5\"]")?.InnerText;
                int    j;
                for (j = i; j < modules.Count; j++)
                {
                    if (modules[j]["stage"] != null && modules[j]["stage"].InnerText == stageName)
                    {
                        break;
                    }
                }
                if (j != i && j < modules.Count)
                {
                    XmlNode tmp = modules[i];
                    modules[i] = modules[j];
                    modules[j] = tmp;
                }
            }

            string[] story     = new string[modules.Count];
            object   storyLock = new object();

            //Actually "write" the story
            Parallel.For(0, modules.Count, i =>
            {
                XmlNode objStoryModule        = modules[i];
                StringBuilder objModuleString = new StringBuilder();
                Write(objModuleString, objStoryModule["story"]?.InnerText ?? string.Empty, 5, xdoc);
                lock (storyLock)
                    story[i] = objModuleString.ToString();
            });

            return(string.Join(Environment.NewLine + Environment.NewLine, story));
        }
示例#4
0
        public async ValueTask <string> GetStory(string strLanguage)
        {
            //Little bit of data required for following steps
            XmlDocument xmlDoc = await _objCharacter.LoadDataAsync("lifemodules.xml", strLanguage);

            XPathNavigator xdoc = await _objCharacter.LoadDataXPathAsync("lifemodules.xml", strLanguage);

            //Generate list of all life modules (xml, we don't save required data to quality) this character has
            List <XmlNode> modules = new List <XmlNode>(10);

            foreach (Quality quality in _objCharacter.Qualities)
            {
                if (quality.Type == QualityType.LifeModule)
                {
                    modules.Add(Quality.GetNodeOverrideable(quality.SourceIDString, xmlDoc));
                }
            }

            //Sort the list (Crude way, but have to do)
            for (int i = 0; i < modules.Count; i++)
            {
                string stageName = xdoc.SelectSingleNode("chummer/stages/stage[@order = " + (i <= 4 ? (i + 1).ToString(GlobalSettings.InvariantCultureInfo).CleanXPath() : "\"5\"") + ']')?.Value;
                int    j;
                for (j = i; j < modules.Count; j++)
                {
                    if (modules[j]["stage"]?.InnerText == stageName)
                    {
                        break;
                    }
                }
                if (j != i && j < modules.Count)
                {
                    (modules[i], modules[j]) = (modules[j], modules[i]);
                }
            }

            string[]       story             = new string[modules.Count];
            XPathNavigator xmlBaseMacrosNode = xdoc.SelectSingleNodeAndCacheExpression("/chummer/storybuilder/macros");
            //Actually "write" the story
            await Task.Run(() => Parallel.For(0, modules.Count,
                                              i =>
            {
                using (new FetchSafelyFromPool <StringBuilder>(Utils.StringBuilderPool,
                                                               out StringBuilder sbdTemp))
                {
                    story[i] = Write(sbdTemp, modules[i]["story"]?.InnerText ?? string.Empty, 5,
                                     xmlBaseMacrosNode).ToString();
                }
            }));
示例#5
0
        private void treModules_AfterSelect(object sender, TreeViewEventArgs e)
        {
            bool blnSelectAble;

            if (e.Node.Nodes.Count == 0)
            {
                blnSelectAble = true;
            }
            else
            {
                //Select any node that have an id node equal to tag
                String  selectString = "//*[id = \"" + e.Node.Tag + "\"]/selectable";
                XmlNode node         = _xmlDocument.SelectSingleNode(selectString);
                //if it contains >selectable>true</selectable>, yes or </selectable>
                //set button to selectable, otherwise not
                blnSelectAble = (node != null &&
                                 (node.InnerText == "true" || node.InnerText == "yes" || node.OuterXml.EndsWith("/>")));
            }

            _selectedId = (string)e.Node.Tag;
            XmlNode selectedNodeInfo = Quality.GetNodeOverrideable(_selectedId);

            if (selectedNodeInfo != null)
            {
                cmdOK.Enabled    = blnSelectAble;
                cmdOKAdd.Enabled = blnSelectAble;

                lblBP.Text     = selectedNodeInfo["karma"] != null ? selectedNodeInfo["karma"].InnerText : string.Empty;
                lblSource.Text = (selectedNodeInfo["source"] != null ? selectedNodeInfo["source"].InnerText : string.Empty) +
                                 " " + (selectedNodeInfo["page"] != null ? selectedNodeInfo["page"].InnerText : string.Empty);

                lblStage.Text = selectedNodeInfo["stage"] != null ? selectedNodeInfo["stage"].InnerText : string.Empty;
            }
            else
            {
                lblBP.Text     = "ERROR";
                lblStage.Text  = "ERROR";
                lblSource.Text = "ERROR";

                cmdOK.Enabled    = false;
                cmdOKAdd.Enabled = false;
            }
        }
        private void treModules_AfterSelect(object sender, TreeViewEventArgs e)
        {
            bool blnSelectAble;

            if (e.Node.Nodes.Count == 0)
            {
                blnSelectAble = true;
            }
            else
            {
                //Select any node that have an id node equal to tag
                string  selectString = "//*[id = \"" + e.Node.Tag + "\"]/selectable";
                XmlNode node         = _xmlDocument.SelectSingleNode(selectString);
                //if it contains >selectable>True</selectable>, yes or </selectable>
                //set button to selectable, otherwise not
                blnSelectAble = (node != null && (node.InnerText == bool.TrueString || node.OuterXml.EndsWith("/>")));
            }

            _selectedId = (string)e.Node.Tag;
            XmlNode selectedNodeInfo = Quality.GetNodeOverrideable(_selectedId, XmlManager.Load("lifemodules.xml", GlobalOptions.Language));

            if (selectedNodeInfo != null)
            {
                cmdOK.Enabled    = blnSelectAble;
                cmdOKAdd.Enabled = blnSelectAble;

                lblBP.Text     = selectedNodeInfo["karma"]?.InnerText ?? string.Empty;
                lblSource.Text = selectedNodeInfo["source"]?.InnerText ?? string.Empty + ' ' + selectedNodeInfo["page"]?.InnerText;

                lblStage.Text = selectedNodeInfo["stage"]?.InnerText ?? string.Empty;
            }
            else
            {
                lblBP.Text     = LanguageManager.GetString("String_Error", GlobalOptions.Language);
                lblStage.Text  = LanguageManager.GetString("String_Error", GlobalOptions.Language);
                lblSource.Text = LanguageManager.GetString("String_Error", GlobalOptions.Language);

                cmdOK.Enabled    = false;
                cmdOKAdd.Enabled = false;
            }
        }
示例#7
0
        public String GetStory()
        {
            //Little bit of data required for following steps
            XmlDocument xdoc = XmlManager.Instance.Load("lifemodules.xml");

            if (xdoc != null)
            {
                //Generate list of all life modules (xml, we don't save required data to quality) this character has
                List <XmlNode> modules = new List <XmlNode>();

                foreach (Quality quality in _objCharacter.Qualities)
                {
                    if (quality.Type == QualityType.LifeModule)
                    {
                        modules.Add(Quality.GetNodeOverrideable(quality.QualityId));
                    }
                }

                //Sort the list (Crude way, but have to do)
                for (int i = 0; i < modules.Count; i++)
                {
                    String stageName = string.Empty;
                    if (i <= 4)
                    {
                        stageName = xdoc.SelectSingleNode("chummer/stages/stage[@order = \"" + (i + 1) + "\"]").InnerText;
                    }
                    else
                    {
                        stageName = xdoc.SelectSingleNode("chummer/stages/stage[@order = \"" + 5 + "\"]").InnerText;
                    }
                    int j;
                    for (j = i; j < modules.Count; j++)
                    {
                        if (modules[j]["stage"] != null && modules[j]["stage"].InnerText == stageName)
                        {
                            break;
                        }
                    }
                    if (j != i && j < modules.Count)
                    {
                        XmlNode tmp = modules[i];
                        modules[i] = modules[j];
                        modules[j] = tmp;
                    }
                }

                StringBuilder story = new StringBuilder();
                //Acctualy "write" the story
                foreach (XmlNode module in modules)
                {
                    if (module["story"] != null)
                    {
                        Write(story, module["story"].InnerText, 5);
                        story.Append(Environment.NewLine);
                        story.Append(Environment.NewLine);
                    }
                }

                return(story.ToString());
            }

            return(string.Empty);
        }