コード例 #1
0
        private async void SelectAttribute_Load(object sender, EventArgs e)
        {
            using (new FetchSafelyFromPool <List <ListItem> >(Utils.ListItemListPool, out List <ListItem> lstAttributes))
            {
                // Build the list of Attributes.
                foreach (string strAbbrev in _lstAttributeAbbrevs)
                {
                    string strAttributeDisplayName = strAbbrev == "MAGAdept"
                        ? await LanguageManager.MAGAdeptStringAsync()
                        : await LanguageManager.GetStringAsync("String_Attribute" + strAbbrev + "Short");

                    lstAttributes.Add(new ListItem(strAbbrev, strAttributeDisplayName));
                }

                await cboAttribute.PopulateWithListItemsAsync(lstAttributes);

                if (lstAttributes.Count >= 1)
                {
                    cboAttribute.SelectedIndex = 0;
                }
                else if (lstAttributes.Count == 0)
                {
                    cmdOK.Enabled = false;
                }
                else
                {
                    cmdOK_Click(sender, e);
                }
            }
        }
コード例 #2
0
ファイル: PetControl.cs プロジェクト: gdelmee/chummer5a
        private async void tsAttachCharacter_Click(object sender, EventArgs e)
        {
            // Prompt the user to select a save file to associate with this Contact.
            using (OpenFileDialog openFileDialog = new OpenFileDialog
            {
                Filter = await LanguageManager.GetStringAsync("DialogFilter_Chum5") + '|' + await LanguageManager.GetStringAsync("DialogFilter_All")
            })
            {
                if (!string.IsNullOrEmpty(_objContact.FileName) && File.Exists(_objContact.FileName))
                {
                    openFileDialog.InitialDirectory = Path.GetDirectoryName(_objContact.FileName);
                    openFileDialog.FileName         = Path.GetFileName(_objContact.FileName);
                }

                if (openFileDialog.ShowDialog(this) != DialogResult.OK)
                {
                    return;
                }
                using (new CursorWait(this))
                {
                    _objContact.FileName = openFileDialog.FileName;
                    cmdLink.ToolTipText  = await LanguageManager.GetStringAsync("Tip_Contact_OpenFile");

                    // Set the relative path.
                    Uri uriApplication = new Uri(Utils.GetStartupPath);
                    Uri uriFile        = new Uri(_objContact.FileName);
                    Uri uriRelative    = uriApplication.MakeRelativeUri(uriFile);
                    _objContact.RelativeFileName = "../" + uriRelative;

                    ContactDetailChanged?.Invoke(this, new TextEventArgs("File"));
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Update the Window title to show the Character's name and unsaved changes status.
        /// </summary>
        private async Task UpdateWindowTitleAsync(CancellationToken token = default)
        {
            token.ThrowIfCancellationRequested();
            if (_lstCharacters.Count == 0)
            {
                await LanguageManager.GetStringAsync("Title_CharacterViewer")
                .ContinueWith(y => this.DoThreadSafeAsync(x => x.Text = y.Result, token), token)
                .Unwrap();

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

            string strCreate = await LanguageManager.GetStringAsync("Title_CreateNewCharacter");

            string strCareer = await LanguageManager.GetStringAsync("Title_CareerMode");

            StringBuilder sbdTitle = new StringBuilder(await LanguageManager.GetStringAsync("Title_CharacterViewer") + ':' + strSpace);

            sbdTitle.AppendJoin(',' + strSpace,
                                _lstCharacters.Select(x => x.CharacterName + strSpace + '-' + strSpace
                                                      + (x.Created ? strCareer : strCreate) + strSpace + '('
                                                      + x.Settings.Name + ')'));
            string strTitle = sbdTitle.ToString();

            await this.DoThreadSafeAsync(x => x.Text = strTitle, token);
        }
コード例 #4
0
        private async void tsAttachCharacter_Click(object sender, EventArgs e)
        {
            // Prompt the user to select a save file to associate with this Contact.
            using (OpenFileDialog openFileDialog = new OpenFileDialog
            {
                Filter = await LanguageManager.GetStringAsync("DialogFilter_Chum5") + '|' + await LanguageManager.GetStringAsync("DialogFilter_All")
            })
            {
                if (!string.IsNullOrEmpty(_objSpirit.FileName) && File.Exists(_objSpirit.FileName))
                {
                    openFileDialog.InitialDirectory = Path.GetDirectoryName(_objSpirit.FileName);
                    openFileDialog.FileName         = Path.GetFileName(_objSpirit.FileName);
                }

                if (openFileDialog.ShowDialog(this) == DialogResult.OK)
                {
                    _objSpirit.FileName = openFileDialog.FileName;
                    string strText = await LanguageManager.GetStringAsync(
                        _objSpirit.EntityType == SpiritType.Spirit? "Tip_Spirit_OpenFile" : "Tip_Sprite_OpenFile");

                    await cmdLink.SetToolTipTextAsync(strText);

                    ContactDetailChanged?.Invoke(this, e);
                }
            }
        }
コード例 #5
0
        private async void tsSaveAsXml_Click(object sender, EventArgs e)
        {
            // Save the printout XML generated by the character.
            SaveFileDialog1.Filter = await LanguageManager.GetStringAsync("DialogFilter_Xml") + '|' + await LanguageManager.GetStringAsync("DialogFilter_All");

            SaveFileDialog1.Title = await LanguageManager.GetStringAsync("Button_Viewer_SaveAsXml");

            SaveFileDialog1.ShowDialog();
            string strSaveFile = SaveFileDialog1.FileName;

            if (string.IsNullOrEmpty(strSaveFile))
            {
                return;
            }

            if (!strSaveFile.EndsWith(".xml", StringComparison.OrdinalIgnoreCase))
            {
                strSaveFile += ".xml";
            }

            try
            {
                _objCharacterXml.Save(strSaveFile);
            }
            catch (XmlException)
            {
                Program.MainForm.ShowMessageBox(this, await LanguageManager.GetStringAsync("Message_Save_Error_Warning"));
            }
            catch (UnauthorizedAccessException)
            {
                Program.MainForm.ShowMessageBox(this, await LanguageManager.GetStringAsync("Message_Save_Error_Warning"));
            }
        }
コード例 #6
0
        private async ValueTask ExportJson(string destination = null, CancellationToken token = default)
        {
            token.ThrowIfCancellationRequested();
            string strSaveFile = destination;

            if (string.IsNullOrEmpty(strSaveFile))
            {
                SaveFileDialog1.AddExtension = true;
                SaveFileDialog1.DefaultExt   = "json";
                SaveFileDialog1.Filter       = await LanguageManager.GetStringAsync("DialogFilter_Json") + '|' + await LanguageManager.GetStringAsync("DialogFilter_All");

                SaveFileDialog1.Title = await LanguageManager.GetStringAsync("Button_Export_SaveJsonAs");

                SaveFileDialog1.ShowDialog();
                strSaveFile = SaveFileDialog1.FileName;
            }
            if (string.IsNullOrWhiteSpace(strSaveFile))
            {
                return;
            }

            (bool blnSuccess, Tuple <string, string> strBoxText)
                = await _dicCache.TryGetValueAsync(new Tuple <string, string>(_strExportLanguage, _strXslt), token);

            File.WriteAllText(strSaveFile, // Change this to a proper path.
                              blnSuccess
                                  ? strBoxText.Item1
                                  : txtText.Text,
                              Encoding.UTF8);
        }
コード例 #7
0
        private async Task GenerateCharacterXml(CancellationToken token = default)
        {
            token.ThrowIfCancellationRequested();
            CursorWait objCursorWait = await CursorWait.NewAsync(this, token : token);

            try
            {
                await Task.WhenAll(cmdExport.DoThreadSafeAsync(x => x.Enabled      = false, token),
                                   cmdExportClose.DoThreadSafeAsync(x => x.Enabled = false, token),
                                   LanguageManager.GetStringAsync("String_Generating_Data")
                                   .ContinueWith(
                                       y => txtText.DoThreadSafeAsync(x => x.Text = y.Result, token),
                                       token).Unwrap());

                token.ThrowIfCancellationRequested();
                using (token.Register(() => _objCharacterXmlGeneratorCancellationTokenSource.Cancel(false)))
                    _objCharacterXml = await _objCharacter.GenerateExportXml(_objExportCulture, _strExportLanguage,
                                                                             _objCharacterXmlGeneratorCancellationTokenSource
                                                                             .Token);
                token.ThrowIfCancellationRequested();
                if (_objCharacterXml != null)
                {
                    await DoXsltUpdate(token);
                }
            }
            finally
            {
                await objCursorWait.DisposeAsync();
            }
        }
コード例 #8
0
        private async void SelectLimit_Load(object sender, EventArgs e)
        {
            // Build the list of Limits.
            using (new FetchSafelyFromPool <List <ListItem> >(Utils.ListItemListPool, out List <ListItem> lstLimitItems))
            {
                foreach (string strLimit in _lstLimits)
                {
                    lstLimitItems.Add(
                        new ListItem(strLimit, await LanguageManager.GetStringAsync("String_Limit" + strLimit + "Short")));
                }

                await cboLimit.PopulateWithListItemsAsync(lstLimitItems);

                if (lstLimitItems.Count >= 1)
                {
                    await cboLimit.DoThreadSafeAsync(x => x.SelectedIndex = 0);
                }
                else if (lstLimitItems.Count == 1)
                {
                    string strSelectedLimit = await cboLimit.DoThreadSafeFuncAsync(x => x.SelectedValue?.ToString());

                    if (!string.IsNullOrEmpty(strSelectedLimit))
                    {
                        _strReturnValue = strSelectedLimit;
                        _strSelectedDisplayLimit
                                     = ((ListItem)await cboLimit.DoThreadSafeFuncAsync(x => x.SelectedItem)).Name;
                        DialogResult = DialogResult.OK;
                    }
                }
                else
                {
                    await cmdOK.DoThreadSafeAsync(x => x.Enabled = false);
                }
            }
        }
コード例 #9
0
        private async void ExportCharacter_Load(object sender, EventArgs e)
        {
            await LanguageManager.PopulateSheetLanguageListAsync(cboLanguage, GlobalSettings.DefaultCharacterSheet, _objCharacter.Yield(), _objExportCulture);

            using (new FetchSafelyFromPool <List <ListItem> >(
                       Utils.ListItemListPool, out List <ListItem> lstExportMethods))
            {
                // Populate the XSLT list with all of the XSL files found in the sheets directory.
                string exportDirectoryPath = Path.Combine(Utils.GetStartupPath, "export");
                foreach (string strFile in Directory.GetFiles(exportDirectoryPath))
                {
                    // Only show files that end in .xsl. Do not include files that end in .xslt since they are used as "hidden" reference sheets (hidden because they are partial templates that cannot be used on their own).
                    if (!strFile.EndsWith(".xslt", StringComparison.OrdinalIgnoreCase) &&
                        strFile.EndsWith(".xsl", StringComparison.OrdinalIgnoreCase))
                    {
                        string strFileName = Path.GetFileNameWithoutExtension(strFile);
                        lstExportMethods.Add(new ListItem(strFileName, strFileName));
                    }
                }
                lstExportMethods.Sort();
                lstExportMethods.Insert(0, new ListItem("JSON", await LanguageManager.GetStringAsync("String_Export_JSON")));

                await cboXSLT.PopulateWithListItemsAsync(lstExportMethods);

                if (cboXSLT.Items.Count > 0)
                {
                    cboXSLT.SelectedIndex = 0;
                }
            }

            _blnLoading = false;
            await Task.WhenAll(
                this.DoThreadSafeAsync(async x => x.Text += await LanguageManager.GetStringAsync("String_Space") + _objCharacter?.Name),
                DoLanguageUpdate().AsTask());
        }
コード例 #10
0
        /// <summary>
        /// Generates a name for the treenode based on values contained in the CharacterCache object.
        /// </summary>
        /// <param name="objCache"></param>
        /// <returns></returns>
        private static async Task <string> CalculatedName(HeroLabCharacterCache objCache)
        {
            string strName = objCache.CharacterAlias;

            if (string.IsNullOrEmpty(strName))
            {
                strName = objCache.CharacterName;
                if (string.IsNullOrEmpty(strName))
                {
                    strName = await LanguageManager.GetStringAsync("String_UnnamedCharacter");
                }
            }
            string strBuildMethod = await LanguageManager.GetStringAsync("String_" + objCache.BuildMethod, false);

            if (string.IsNullOrEmpty(strBuildMethod))
            {
                strBuildMethod = await LanguageManager.GetStringAsync("String_Unknown");
            }
            string strSpace = await LanguageManager.GetStringAsync("String_Space");

            strName += strSpace + '(' + strBuildMethod + strSpace + '-' + strSpace
                       + await LanguageManager.GetStringAsync(objCache.Created? "Title_CareerMode" : "Title_CreateMode") + ')';

            return(strName);
        }
コード例 #11
0
        private async void SelectAttribute_Load(object sender, EventArgs e)
        {
            using (new FetchSafelyFromPool <List <ListItem> >(Utils.ListItemListPool, out List <ListItem> lstAttributes))
            {
                // Build the list of Attributes.
                foreach (string strAbbrev in _lstAttributeAbbrevs)
                {
                    string strAttributeDisplayName = strAbbrev == "MAGAdept"
                        ? await LanguageManager.MAGAdeptStringAsync()
                        : await LanguageManager.GetStringAsync("String_Attribute" + strAbbrev + "Short");

                    lstAttributes.Add(new ListItem(strAbbrev, strAttributeDisplayName));
                }

                await cboAttribute.PopulateWithListItemsAsync(lstAttributes);

                if (lstAttributes.Count >= 1)
                {
                    await cboAttribute.DoThreadSafeAsync(x => x.SelectedIndex = 0);
                }
                else if (lstAttributes.Count == 0)
                {
                    await cmdOK.DoThreadSafeAsync(x => x.Enabled = false);
                }
                else
                {
                    _strReturnValue = await cboAttribute.DoThreadSafeFuncAsync(x => x.SelectedValue.ToString());

                    DialogResult = DialogResult.OK;
                }
            }
        }
コード例 #12
0
ファイル: SelectLimit.cs プロジェクト: JoschiGrey/chummer5a
        private async void SelectLimit_Load(object sender, EventArgs e)
        {
            // Build the list of Limits.
            using (new FetchSafelyFromPool <List <ListItem> >(Utils.ListItemListPool, out List <ListItem> lstLimitItems))
            {
                foreach (string strLimit in _lstLimits)
                {
                    lstLimitItems.Add(
                        new ListItem(strLimit, await LanguageManager.GetStringAsync("String_Limit" + strLimit + "Short")));
                }

                await cboLimit.PopulateWithListItemsAsync(lstLimitItems);

                if (lstLimitItems.Count >= 1)
                {
                    cboLimit.SelectedIndex = 0;
                }
                else if (lstLimitItems.Count == 1)
                {
                    cmdOK_Click(sender, e);
                }
                else
                {
                    cmdOK.Enabled = false;
                }
            }
        }
コード例 #13
0
ファイル: SelectQuality.cs プロジェクト: Stexinator/chummer5a
        /// <summary>
        /// Accept the selected item and close the form.
        /// </summary>
        private async ValueTask AcceptForm()
        {
            string strSelectedQuality = await lstQualities.DoThreadSafeFuncAsync(x => x.SelectedValue?.ToString());

            if (string.IsNullOrEmpty(strSelectedQuality))
            {
                return;
            }

            XPathNavigator objNode = _xmlBaseQualityDataNode.SelectSingleNode("qualities/quality[id = " + strSelectedQuality.CleanXPath() + ']');

            if (objNode?.RequirementsMet(_objCharacter, null, await LanguageManager.GetStringAsync("String_Quality"), IgnoreQuality) != true)
            {
                return;
            }

            _strSelectedQuality = strSelectedQuality;
            _strSelectCategory  = (GlobalSettings.SearchInCategoryOnly || await txtSearch.DoThreadSafeFuncAsync(x => x.TextLength) == 0)
                ? await cboCategory.DoThreadSafeFuncAsync(x => x.SelectedValue?.ToString())
                : objNode.SelectSingleNode("category")?.Value;

            await this.DoThreadSafeAsync(x =>
            {
                x.DialogResult = DialogResult.OK;
                x.Close();
            });
        }
コード例 #14
0
        private async ValueTask ProcessGameplayIndexChanged()
        {
            // Load the Priority information.
            if (cboCharacterSetting.SelectedValue is CharacterSettings objSelectedGameplayOption)
            {
                lblBuildMethod.Text = await LanguageManager.GetStringAsync("String_" + objSelectedGameplayOption.BuildMethod);

                switch (objSelectedGameplayOption.BuildMethod)
                {
                case CharacterBuildMethod.Priority:
                    lblBuildMethodParamLabel.Text = await LanguageManager.GetStringAsync("Label_SelectBP_Priorities");

                    lblBuildMethodParam.Text         = objSelectedGameplayOption.PriorityArray;
                    lblBuildMethodParamLabel.Visible = true;
                    lblBuildMethodParam.Visible      = true;
                    break;

                case CharacterBuildMethod.SumtoTen:
                    lblBuildMethodParamLabel.Text = await LanguageManager.GetStringAsync("String_SumtoTen");

                    lblBuildMethodParam.Text         = objSelectedGameplayOption.SumtoTen.ToString(GlobalSettings.CultureInfo);
                    lblBuildMethodParamLabel.Visible = true;
                    lblBuildMethodParam.Visible      = true;
                    break;

                default:
                    lblBuildMethodParamLabel.Visible = false;
                    lblBuildMethodParam.Visible      = false;
                    break;
                }

                lblMaxAvail.Text     = objSelectedGameplayOption.MaximumAvailability.ToString(GlobalSettings.CultureInfo);
                lblKarma.Text        = objSelectedGameplayOption.BuildKarma.ToString(GlobalSettings.CultureInfo);
                lblMaxNuyen.Text     = objSelectedGameplayOption.NuyenMaximumBP.ToString(GlobalSettings.CultureInfo);
                lblQualityKarma.Text = objSelectedGameplayOption.QualityKarmaLimit.ToString(GlobalSettings.CultureInfo);

                lblBooks.Text = _objCharacter.TranslatedBookList(string.Join(";", objSelectedGameplayOption.Books));
                if (string.IsNullOrEmpty(lblBooks.Text))
                {
                    lblBooks.Text = await LanguageManager.GetStringAsync("String_None");
                }

                using (new FetchSafelyFromPool <StringBuilder>(Utils.StringBuilderPool,
                                                               out StringBuilder sbdCustomDataDirectories))
                {
                    foreach (CustomDataDirectoryInfo objLoopInfo in objSelectedGameplayOption
                             .EnabledCustomDataDirectoryInfos)
                    {
                        sbdCustomDataDirectories.AppendLine(objLoopInfo.Name);
                    }

                    lblCustomData.Text = sbdCustomDataDirectories.ToString();
                }

                if (string.IsNullOrEmpty(lblBooks.Text))
                {
                    lblCustomData.Text = await LanguageManager.GetStringAsync("String_None");
                }
            }
        }
コード例 #15
0
        private async void cmdSelectFile_Click(object sender, EventArgs e)
        {
            // Prompt the user to select a save file to possess.
            using (OpenFileDialog openFileDialog = new OpenFileDialog
            {
                Filter = await LanguageManager.GetStringAsync("DialogFilter_HeroLab") + '|'
                         + await LanguageManager.GetStringAsync("DialogFilter_All"),
                Multiselect = false
            })
            {
                if (openFileDialog.ShowDialog(this) != DialogResult.OK)
                {
                    return;
                }
                using (await CursorWait.NewAsync(this))
                {
                    string   strSelectedFile = openFileDialog.FileName;
                    TreeNode objNode         = await CacheCharacters(strSelectedFile);

                    if (objNode != null)
                    {
                        await treCharacterList.DoThreadSafeAsync(x =>
                        {
                            x.Nodes.Clear();
                            x.Nodes.Add(objNode);
                            x.SelectedNode = objNode.Nodes.Count > 0 ? objNode.Nodes[0] : objNode;
                        });
                    }
                }
            }
        }
コード例 #16
0
        /// <summary>
        /// Refreshes the BoroughList based on the selected District to generate a cascading dropdown menu
        /// </summary>
        private async ValueTask RefreshBoroughList()
        {
            string strSelectedCityRefresh     = cboCity.SelectedValue?.ToString() ?? string.Empty;
            string strSelectedDistrictRefresh = cboDistrict.SelectedValue?.ToString() ?? string.Empty;

            using (new FetchSafelyFromPool <List <ListItem> >(Utils.ListItemListPool,
                                                              out List <ListItem> lstBorough))
            {
                using (XmlNodeList xmlBoroughList = _objXmlDocument.SelectNodes(
                           "/chummer/cities/city[name = " + strSelectedCityRefresh.CleanXPath() + "]/district[name = "
                           + strSelectedDistrictRefresh.CleanXPath() + "]/borough"))
                {
                    if (xmlBoroughList?.Count > 0)
                    {
                        foreach (XmlNode objXmlDistrict in xmlBoroughList)
                        {
                            string strName = objXmlDistrict["name"]?.InnerText
                                             ?? await LanguageManager.GetStringAsync("String_Unknown");

                            lstBorough.Add(new ListItem(strName, objXmlDistrict["translate"]?.InnerText ?? strName));
                        }
                    }
                }

                await cboBorough.PopulateWithListItemsAsync(lstBorough);
            }
        }
コード例 #17
0
        private async void SelectOptionalPower_Load(object sender, EventArgs e)
        {
            using (new FetchSafelyFromPool <List <ListItem> >(Utils.ListItemListPool, out List <ListItem> lstPowerItems))
            {
                foreach ((string strPowerName, string strPowerExtra) in _lstPowerExtraPairs)
                {
                    string strName = string.IsNullOrEmpty(strPowerExtra)
                        ? await _objCharacter.TranslateExtraAsync(strPowerName)
                        : await _objCharacter.TranslateExtraAsync(strPowerName)
                                     + await LanguageManager.GetStringAsync("String_Space") + '('
                                     + await _objCharacter.TranslateExtraAsync(strPowerExtra) + ')';

                    lstPowerItems.Add(new ListItem(new Tuple <string, string>(strPowerName, strPowerExtra), strName));
                }

                cboPower.BeginUpdate();
                cboPower.PopulateWithListItems(lstPowerItems);
                if (lstPowerItems.Count >= 1)
                {
                    cboPower.SelectedIndex = 0;
                }
                else
                {
                    cmdOK.Enabled = false;
                }
                cboPower.EndUpdate();
                if (lstPowerItems.Count == 1)
                {
                    cmdOK_Click(sender, e);
                }
            }
        }
コード例 #18
0
        private async void VersionHistory_Load(object sender, EventArgs e)
        {
            // Display the contents of the changelog.txt file in the TextBox.
            try
            {
                await txtHistory.DoThreadSafeAsync(
                    x => x.Text = File.ReadAllText(Path.Combine(Utils.GetStartupPath, "changelog.txt")));
            }
            catch
            {
                Program.ShowMessageBox(this,
                                       await LanguageManager.GetStringAsync("Message_History_FileNotFound"),
                                       await LanguageManager.GetStringAsync("MessageTitle_FileNotFound"), MessageBoxButtons.OK,
                                       MessageBoxIcon.Exclamation);
                await this.DoThreadSafeAsync(x => x.Close());

                return;
            }

            await txtHistory.DoThreadSafeAsync(x =>
            {
                x.SelectionStart  = 0;
                x.SelectionLength = 0;
            });
        }
コード例 #19
0
        private async void SelectLimitModifier_Load(object sender, EventArgs e)
        {
            // Build the list of Limits.
            using (new FetchSafelyFromPool <List <ListItem> >(Utils.ListItemListPool, out List <ListItem> lstLimitItems))
            {
                foreach (string strLimit in _lstLimits)
                {
                    lstLimitItems.Add(
                        new ListItem(strLimit, await LanguageManager.GetStringAsync("String_Limit" + strLimit + "Short")));
                }

                await cboLimit.PopulateWithListItemsAsync(lstLimitItems);

                if (lstLimitItems.Count >= 1)
                {
                    cboLimit.SelectedIndex = 0;
                }
                else
                {
                    cmdOK.Enabled = false;
                }
            }

            if (_objLimitModifier != null)
            {
                cboLimit.SelectedValue = _objLimitModifier.Limit;
                txtName.Text           = _objLimitModifier.Name;
                _intBonus         = _objLimitModifier.Bonus;
                txtCondition.Text = _objLimitModifier.Condition;
            }
        }
コード例 #20
0
ファイル: SelectVehicle.cs プロジェクト: JoschiGrey/chummer5a
        private async void SelectVehicle_Load(object sender, EventArgs e)
        {
            DataGridViewCellStyle dataGridViewNuyenCellStyle = new DataGridViewCellStyle
            {
                Alignment = DataGridViewContentAlignment.TopRight,
                Format    = _objCharacter.Settings.NuyenFormat + '¥',
                NullValue = null
            };

            dgvc_Cost.DefaultCellStyle = dataGridViewNuyenCellStyle;
            if (_objCharacter.Created)
            {
                chkHideOverAvailLimit.Visible = false;
                chkHideOverAvailLimit.Checked = false;
            }
            else
            {
                chkHideOverAvailLimit.Text    = string.Format(GlobalSettings.CultureInfo, chkHideOverAvailLimit.Text, _objCharacter.Settings.MaximumAvailability);
                chkHideOverAvailLimit.Checked = GlobalSettings.HideItemsOverAvailLimit;
            }

            // Populate the Vehicle Category list.
            string strFilterPrefix = "vehicles/vehicle[(" + _objCharacter.Settings.BookXPath() + ") and category = ";

            foreach (XPathNavigator objXmlCategory in await _xmlBaseVehicleDataNode.SelectAndCacheExpressionAsync("categories/category"))
            {
                string strInnerText = objXmlCategory.Value;
                if (_xmlBaseVehicleDataNode.SelectSingleNode(strFilterPrefix + strInnerText.CleanXPath() + ']') != null)
                {
                    _lstCategory.Add(new ListItem(strInnerText,
                                                  (await objXmlCategory.SelectSingleNodeAndCacheExpressionAsync("@translate"))?.Value ?? strInnerText));
                }
            }
            _lstCategory.Sort(CompareListItems.CompareNames);

            if (_lstCategory.Count > 0)
            {
                _lstCategory.Insert(0, new ListItem("Show All", await LanguageManager.GetStringAsync("String_ShowAll")));
            }
            chkBlackMarketDiscount.Visible = _objCharacter.BlackMarketDiscount;

            await cboCategory.PopulateWithListItemsAsync(_lstCategory);

            _blnLoading = false;
            // Select the first Category in the list.
            if (string.IsNullOrEmpty(_strSelectCategory))
            {
                cboCategory.SelectedIndex = 0;
            }
            else
            {
                cboCategory.SelectedValue = _strSelectCategory;
            }

            if (cboCategory.SelectedIndex == -1)
            {
                cboCategory.SelectedIndex = 0;
            }
        }
コード例 #21
0
        private async void CreateImprovement_Load(object sender, EventArgs e)
        {
            using (new FetchSafelyFromPool <List <ListItem> >(Utils.ListItemListPool, out List <ListItem> lstTypes))
            {
                // Populate the Improvement Type list.
                XmlNodeList objXmlImprovementList = _objDocument.SelectNodes("/chummer/improvements/improvement");
                if (objXmlImprovementList?.Count > 0)
                {
                    foreach (XmlNode objXmlImprovement in objXmlImprovementList)
                    {
                        string strId = objXmlImprovement["id"]?.InnerText;
                        if (!string.IsNullOrEmpty(strId))
                        {
                            lstTypes.Add(new ListItem(strId,
                                                      objXmlImprovement["translate"]?.InnerText
                                                      ?? objXmlImprovement["name"]?.InnerText
                                                      ?? await LanguageManager.GetStringAsync("String_Unknown")));
                        }
                    }
                }

                lstTypes.Sort(CompareListItems.CompareNames);
                await cboImprovemetType.PopulateWithListItemsAsync(lstTypes);

                // Load the information from the passed Improvement if one has been given.
                if (EditImprovementObject != null)
                {
                    cboImprovemetType.SelectedValue = EditImprovementObject.CustomId;
                    txtName.Text = EditImprovementObject.CustomName;
                    if (nudMax.Visible)
                    {
                        nudMax.Value = EditImprovementObject.Maximum;
                    }
                    if (nudMin.Visible)
                    {
                        nudMin.Value = EditImprovementObject.Minimum;
                    }
                    if (nudVal.Visible)
                    {
                        // specificattribute stores the Value in Augmented instead.
                        nudVal.Value = EditImprovementObject.CustomId == "specificattribute"
                            ? EditImprovementObject.Augmented
                            : EditImprovementObject.Value;
                    }

                    chkApplyToRating.Checked = chkApplyToRating.Visible && EditImprovementObject.AddToRating;
                    if (txtTranslateSelection.Visible)
                    {
                        txtSelect.Text = EditImprovementObject.ImprovedName;
                        // get the selection type of improvement and generate translation
                        XmlNode objFetchNode = _objDocument.SelectSingleNode(
                            "/chummer/improvements/improvement[id = "
                            + cboImprovemetType.SelectedValue.ToString().CleanXPath() + "]/fields/field");
                        txtTranslateSelection.Text
                            = await TranslateField(objFetchNode?.InnerText, EditImprovementObject.ImprovedName);
                    }
                }
            }
        }
コード例 #22
0
        /// <summary>
        /// Populate the Mentor list.
        /// </summary>
        private async void RefreshMentorsList(object sender, EventArgs e)
        {
            string strForceId = string.Empty;

            string strFilter = '(' + _objCharacter.Settings.BookXPath() + ')';
            string strSearch = await txtSearch.DoThreadSafeFuncAsync(x => x.Text);

            if (!string.IsNullOrEmpty(strSearch))
            {
                strFilter += " and " + CommonFunctions.GenerateSearchXPath(strSearch);
            }
            using (new FetchSafelyFromPool <List <ListItem> >(Utils.ListItemListPool, out List <ListItem> lstMentors))
            {
                foreach (XPathNavigator objXmlMentor in _xmlBaseMentorSpiritDataNode.Select(
                             "mentors/mentor[" + strFilter + ']'))
                {
                    if (!objXmlMentor.RequirementsMet(_objCharacter))
                    {
                        continue;
                    }

                    string strName = (await objXmlMentor.SelectSingleNodeAndCacheExpressionAsync("name"))?.Value
                                     ?? await LanguageManager.GetStringAsync("String_Unknown");

                    string strId = (await objXmlMentor.SelectSingleNodeAndCacheExpressionAsync("id"))?.Value ?? string.Empty;
                    if (strName == _strForceMentor)
                    {
                        strForceId = strId;
                    }
                    lstMentors.Add(new ListItem(
                                       strId,
                                       (await objXmlMentor.SelectSingleNodeAndCacheExpressionAsync("translate"))?.Value ?? strName));
                }

                lstMentors.Sort(CompareListItems.CompareNames);
                string strOldSelected = await lstMentor.DoThreadSafeFuncAsync(x => x.SelectedValue?.ToString());

                _blnSkipRefresh = true;
                await lstMentor.PopulateWithListItemsAsync(lstMentors);

                _blnSkipRefresh = false;
                await lstMentor.DoThreadSafeAsync(x =>
                {
                    if (!string.IsNullOrEmpty(strOldSelected))
                    {
                        x.SelectedValue = strOldSelected;
                    }
                    else
                    {
                        x.SelectedIndex = -1;
                    }
                    if (!string.IsNullOrEmpty(strForceId))
                    {
                        x.SelectedValue = strForceId;
                        x.Enabled       = false;
                    }
                });
            }
        }
コード例 #23
0
        private async void SelectMetamagic_Load(object sender, EventArgs e)
        {
            Text = string.Format(GlobalSettings.CultureInfo, await LanguageManager.GetStringAsync("Title_SelectGeneric"), _strType);
            chkLimitList.Text = string.Format(GlobalSettings.CultureInfo, await LanguageManager.GetStringAsync("Checkbox_SelectGeneric_LimitList"), _strType);

            _blnLoading = false;
            await BuildMetamagicList();
        }
コード例 #24
0
        private async ValueTask ExportNormal(string destination = null, CancellationToken token = default)
        {
            token.ThrowIfCancellationRequested();
            string strSaveFile = destination;

            if (string.IsNullOrEmpty(destination))
            {
                // Look for the file extension information.
                string strExtension    = "xml";
                string exportSheetPath = Path.Combine(Utils.GetStartupPath, "export", _strXslt + ".xsl");
                using (StreamReader objFile = new StreamReader(exportSheetPath, Encoding.UTF8, true))
                {
                    string strLine;
                    while ((strLine = await objFile.ReadLineAsync()) != null)
                    {
                        token.ThrowIfCancellationRequested();
                        if (strLine.StartsWith("<!-- ext:", StringComparison.Ordinal))
                        {
                            strExtension = strLine.TrimStartOnce("<!-- ext:", true).FastEscapeOnceFromEnd("-->").Trim();
                        }
                    }
                }

                if (strExtension.Equals("XML", StringComparison.OrdinalIgnoreCase))
                {
                    SaveFileDialog1.Filter = await LanguageManager.GetStringAsync("DialogFilter_Xml");
                }
                else if (strExtension.Equals("JSON", StringComparison.OrdinalIgnoreCase))
                {
                    SaveFileDialog1.Filter = await LanguageManager.GetStringAsync("DialogFilter_Json");
                }
                else if (strExtension.Equals("HTM", StringComparison.OrdinalIgnoreCase) || strExtension.Equals("HTML", StringComparison.OrdinalIgnoreCase))
                {
                    SaveFileDialog1.Filter = await LanguageManager.GetStringAsync("DialogFilter_Html");
                }
                else
                {
                    SaveFileDialog1.Filter = strExtension.ToUpper(GlobalSettings.CultureInfo) + "|*." + strExtension.ToLowerInvariant();
                }
                SaveFileDialog1.Title = await LanguageManager.GetStringAsync("Button_Viewer_SaveAsHtml");

                SaveFileDialog1.ShowDialog();
                strSaveFile = SaveFileDialog1.FileName;
            }
            if (string.IsNullOrEmpty(strSaveFile))
            {
                return;
            }

            (bool blnSuccess, Tuple <string, string> strBoxText)
                = await _dicCache.TryGetValueAsync(new Tuple <string, string>(_strExportLanguage, _strXslt), token);

            File.WriteAllText(strSaveFile, // Change this to a proper path.
                              blnSuccess
                                  ? strBoxText.Item1
                                  : txtText.Text,
                              Encoding.UTF8);
        }
コード例 #25
0
        private async void SpiritControl_Load(object sender, EventArgs e)
        {
            bool blnIsSpirit = _objSpirit.EntityType == SpiritType.Spirit;

            nudForce.DoOneWayDataBinding("Enabled", _objSpirit.CharacterObject, nameof(Character.Created));
            chkBound.DoDataBinding("Checked", _objSpirit, nameof(Spirit.Bound));
            chkBound.DoOneWayDataBinding("Enabled", _objSpirit.CharacterObject, nameof(Character.Created));
            cboSpiritName.DoDataBinding("Text", _objSpirit, nameof(Spirit.Name));
            txtCritterName.DoDataBinding("Text", _objSpirit, nameof(Spirit.CritterName));
            txtCritterName.DoOneWayDataBinding("Enabled", _objSpirit, nameof(Spirit.NoLinkedCharacter));
            nudForce.DoOneWayDataBinding("Maximum", _objSpirit.CharacterObject, blnIsSpirit ? nameof(Character.MaxSpiritForce) : nameof(Character.MaxSpriteLevel));
            nudServices.DoDataBinding("Value", _objSpirit, nameof(Spirit.ServicesOwed));
            nudForce.DoDataBinding("Value", _objSpirit, nameof(Spirit.Force));
            chkFettered.DoOneWayDataBinding("Enabled", _objSpirit, nameof(Spirit.AllowFettering));
            chkFettered.DoDataBinding("Checked", _objSpirit, nameof(Spirit.Fettered));
            if (blnIsSpirit)
            {
                lblForce.Text = await LanguageManager.GetStringAsync("Label_Spirit_Force");

                chkBound.Text = await LanguageManager.GetStringAsync("Checkbox_Spirit_Bound");

                cmdLink.ToolTipText = await LanguageManager.GetStringAsync(!string.IsNullOrEmpty(_objSpirit.FileName)? "Tip_Spirit_OpenFile" : "Tip_Spirit_LinkSpirit");

                string strTooltip = await LanguageManager.GetStringAsync("Tip_Spirit_EditNotes");

                if (!string.IsNullOrEmpty(_objSpirit.Notes))
                {
                    strTooltip += Environment.NewLine + Environment.NewLine + _objSpirit.Notes;
                }
                cmdNotes.ToolTipText = strTooltip.WordWrap();
            }
            else
            {
                lblForce.Text = await LanguageManager.GetStringAsync("Label_Sprite_Rating");

                lblServices.Text = await LanguageManager.GetStringAsync("Label_Sprite_TasksOwed");

                chkBound.Text = await LanguageManager.GetStringAsync("Label_Sprite_Registered");

                chkFettered.Text = await LanguageManager.GetStringAsync("Checkbox_Sprite_Pet");

                cmdLink.ToolTipText = await LanguageManager.GetStringAsync(!string.IsNullOrEmpty(_objSpirit.FileName)? "Tip_Sprite_OpenFile" : "Tip_Sprite_LinkSpirit");

                string strTooltip = await LanguageManager.GetStringAsync("Tip_Sprite_EditNotes");

                if (!string.IsNullOrEmpty(_objSpirit.Notes))
                {
                    strTooltip += Environment.NewLine + Environment.NewLine + _objSpirit.Notes;
                }
                cmdNotes.ToolTipText = strTooltip.WordWrap();
            }

            _objSpirit.CharacterObject.PropertyChanged += RebuildSpiritListOnTraditionChange;

            _blnLoading = false;
        }
コード例 #26
0
        private async void SelectCritterPower_Load(object sender, EventArgs e)
        {
            // Populate the Category list.
            foreach (XPathNavigator objXmlCategory in await _xmlBaseCritterPowerDataNode.SelectAndCacheExpressionAsync("categories/category"))
            {
                string strInnerText = objXmlCategory.Value;
                if ((await ImprovementManager
                     .GetCachedImprovementListForValueOfAsync(_objCharacter,
                                                              Improvement.ImprovementType.AllowCritterPowerCategory))
                    .Any(imp => strInnerText.Contains(imp.ImprovedName)) &&
                    (await objXmlCategory.SelectSingleNodeAndCacheExpressionAsync("@whitelist"))?.Value == bool.TrueString ||
                    (await ImprovementManager
                     .GetCachedImprovementListForValueOfAsync(_objCharacter,
                                                              Improvement.ImprovementType.LimitCritterPowerCategory))
                    .Any(imp => strInnerText.Contains(imp.ImprovedName)))
                {
                    _lstCategory.Add(new ListItem(strInnerText,
                                                  (await objXmlCategory.SelectSingleNodeAndCacheExpressionAsync("@translate"))?.Value ?? strInnerText));
                    continue;
                }

                if ((await ImprovementManager
                     .GetCachedImprovementListForValueOfAsync(_objCharacter,
                                                              Improvement.ImprovementType.LimitCritterPowerCategory))
                    .Any(imp => !strInnerText.Contains(imp.ImprovedName)))
                {
                    continue;
                }
                _lstCategory.Add(new ListItem(strInnerText,
                                              (await objXmlCategory.SelectSingleNodeAndCacheExpressionAsync("@translate"))?.Value ?? strInnerText));
            }

            _lstCategory.Sort(CompareListItems.CompareNames);

            if (_lstCategory.Count > 0)
            {
                _lstCategory.Insert(0, new ListItem("Show All", await LanguageManager.GetStringAsync("String_ShowAll")));
            }

            await cboCategory.PopulateWithListItemsAsync(_lstCategory);

            // Select the first Category in the list.
            if (string.IsNullOrEmpty(_strSelectCategory))
            {
                cboCategory.SelectedIndex = 0;
            }
            else if (cboCategory.Items.Contains(_strSelectCategory))
            {
                cboCategory.SelectedValue = _strSelectCategory;
            }

            if (cboCategory.SelectedIndex == -1)
            {
                cboCategory.SelectedIndex = 0;
            }
        }
コード例 #27
0
        private async void SelectWeaponCategory_Load(object sender, EventArgs e)
        {
            // Build a list of Weapon Categories found in the Weapons file.
            using (new FetchSafelyFromPool <List <ListItem> >(Utils.ListItemListPool, out List <ListItem> lstCategory))
            {
                XPathNavigator objXmlDocument = await XmlManager.LoadXPathAsync("weapons.xml", _objCharacter?.Settings.EnabledCustomDataDirectoryPaths);

                foreach (XPathNavigator objXmlCategory in !string.IsNullOrEmpty(OnlyCategory)
                             ? objXmlDocument.Select("/chummer/categories/category[. = "
                                                     + OnlyCategory.CleanXPath() + ']')
                             : await objXmlDocument.SelectAndCacheExpressionAsync("/chummer/categories/category"))
                {
                    if (!string.IsNullOrEmpty(WeaponType) && objXmlCategory.Value != "Exotic Ranged Weapons")
                    {
                        string strType = (await objXmlCategory.SelectSingleNodeAndCacheExpressionAsync("@type"))?.Value;
                        if (string.IsNullOrEmpty(strType) || strType != WeaponType)
                        {
                            continue;
                        }
                    }

                    string strInnerText = objXmlCategory.Value;
                    lstCategory.Add(new ListItem(strInnerText,
                                                 (await objXmlCategory.SelectSingleNodeAndCacheExpressionAsync("@translate"))?.Value
                                                 ?? strInnerText));
                }

                // Add the Cyberware Category.
                if (lstCategory.Count == 0 && (OnlyCategory == "Cyberware" || OnlyCategory == "Cyberweapon"))
                {
                    lstCategory.Add(new ListItem("Cyberware", await LanguageManager.GetStringAsync("String_Cyberware")));
                }

                switch (lstCategory.Count)
                {
                case 0:
                    ConfirmSelection(string.Empty);
                    break;

                case 1:
                    ConfirmSelection(lstCategory[0].Value.ToString());
                    break;
                }

                await cboCategory.PopulateWithListItemsAsync(lstCategory);

                await cboCategory.DoThreadSafeAsync(x =>
                {
                    // Select the first Skill in the list.
                    if (x.Items.Count > 0)
                    {
                        x.SelectedIndex = 0;
                    }
                });
            }
        }
コード例 #28
0
        /// <summary>
        /// Populate the Martial Arts Techniques list.
        /// </summary>
        private async ValueTask RefreshTechniquesList()
        {
            string strFilter = '(' + _objCharacter.Settings.BookXPath() + ')';
            string strSearch = await txtSearch.DoThreadSafeFuncAsync(x => x.Text);

            if (!string.IsNullOrEmpty(strSearch))
            {
                strFilter += " and " + CommonFunctions.GenerateSearchXPath(strSearch);
            }
            XPathNodeIterator objTechniquesList = _xmlBaseChummerNode.Select("techniques/technique[" + strFilter + ']');

            using (new FetchSafelyFromPool <List <ListItem> >(Utils.ListItemListPool, out List <ListItem> lstTechniqueItems))
            {
                foreach (XPathNavigator xmlTechnique in objTechniquesList)
                {
                    string strId = (await xmlTechnique.SelectSingleNodeAndCacheExpressionAsync("id"))?.Value;
                    if (!string.IsNullOrEmpty(strId))
                    {
                        string strTechniqueName = (await xmlTechnique.SelectSingleNodeAndCacheExpressionAsync("name"))?.Value
                                                  ?? await LanguageManager.GetStringAsync("String_Unknown");

                        if (_setAllowedTechniques?.Contains(strTechniqueName) == false)
                        {
                            continue;
                        }

                        if (xmlTechnique.RequirementsMet(_objCharacter, _objMartialArt))
                        {
                            lstTechniqueItems.Add(new ListItem(
                                                      strId,
                                                      (await xmlTechnique.SelectSingleNodeAndCacheExpressionAsync("translate"))
                                                      ?.Value ?? strTechniqueName));
                        }
                    }
                }

                lstTechniqueItems.Sort(CompareListItems.CompareNames);
                string strOldSelected = await lstTechniques.DoThreadSafeFuncAsync(x => x.SelectedValue?.ToString());

                _blnLoading = true;
                await lstTechniques.PopulateWithListItemsAsync(lstTechniqueItems);

                _blnLoading = false;
                await lstTechniques.DoThreadSafeAsync(x =>
                {
                    if (!string.IsNullOrEmpty(strOldSelected))
                    {
                        x.SelectedValue = strOldSelected;
                    }
                    else
                    {
                        x.SelectedIndex = -1;
                    }
                });
            }
        }
コード例 #29
0
        private async void SelectVehicleMod_Load(object sender, EventArgs e)
        {
            if (_objCharacter.Created)
            {
                lblMarkupLabel.Visible        = true;
                nudMarkup.Visible             = true;
                lblMarkupPercentLabel.Visible = true;
                chkHideOverAvailLimit.Visible = false;
                chkHideOverAvailLimit.Checked = false;
            }
            else
            {
                lblMarkupLabel.Visible        = false;
                nudMarkup.Visible             = false;
                lblMarkupPercentLabel.Visible = false;
                chkHideOverAvailLimit.Text    = string.Format(GlobalSettings.CultureInfo, chkHideOverAvailLimit.Text, _objCharacter.Settings.MaximumAvailability);
                chkHideOverAvailLimit.Checked = GlobalSettings.HideItemsOverAvailLimit;
            }
            chkBlackMarketDiscount.Visible = _objCharacter.BlackMarketDiscount;

            string[] strValues = _strLimitToCategories.Split(',', StringSplitOptions.RemoveEmptyEntries);

            // Populate the Category list.
            string strFilterPrefix = (VehicleMountMods
                ? "weaponmountmods/mod[("
                : "mods/mod[(") + _objCharacter.Settings.BookXPath() + ") and category = ";

            foreach (XPathNavigator objXmlCategory in await _xmlBaseVehicleDataNode.SelectAndCacheExpressionAsync("modcategories/category"))
            {
                string strInnerText = objXmlCategory.Value;
                if ((string.IsNullOrEmpty(_strLimitToCategories) || strValues.Contains(strInnerText)) &&
                    _xmlBaseVehicleDataNode.SelectSingleNode(strFilterPrefix + strInnerText.CleanXPath() + ']') != null)
                {
                    _lstCategory.Add(new ListItem(strInnerText, (await objXmlCategory.SelectSingleNodeAndCacheExpressionAsync("@translate"))?.Value ?? strInnerText));
                }
            }
            _lstCategory.Sort(CompareListItems.CompareNames);
            if (_lstCategory.Count > 0)
            {
                _lstCategory.Insert(0, new ListItem("Show All", await LanguageManager.GetStringAsync("String_ShowAll")));
            }
            await cboCategory.PopulateWithListItemsAsync(_lstCategory);

            // Select the first Category in the list.
            if (!string.IsNullOrEmpty(_strSelectCategory))
            {
                cboCategory.SelectedValue = _strSelectCategory;
            }
            if (cboCategory.SelectedIndex == -1 && _lstCategory.Count > 0)
            {
                cboCategory.SelectedIndex = 0;
            }

            _blnLoading = false;
            await UpdateGearInfo();
        }
コード例 #30
0
        private async void SelectDiceHits_Load(object sender, EventArgs e)
        {
            string strSpace = await LanguageManager.GetStringAsync("String_Space");

            lblDice.Text = await LanguageManager.GetStringAsync("String_DiceHits_HitsOn") + strSpace + Dice.ToString(GlobalSettings.CultureInfo)
                           + await LanguageManager.GetStringAsync("String_D6") + await LanguageManager.GetStringAsync("String_Colon") + strSpace;

            nudDiceResult.Maximum = Dice * 6;
            nudDiceResult.Minimum = 6;
        }