public SkillControl2(Skill objSkill) { if (objSkill == null) { return; } _objSkill = objSkill; _objAttributeActive = objSkill.AttributeObject; InitializeComponent(); SuspendLayout(); pnlAttributes.SuspendLayout(); tlpMain.SuspendLayout(); tlpRight.SuspendLayout(); try { //Display _fntNormalName = lblName.Font; _fntItalicName = new Font(_fntNormalName, FontStyle.Italic); _fntNormal = btnAttribute.Font; _fntItalic = new Font(_fntNormal, FontStyle.Italic); if (!_objSkill.Default) { lblName.Font = _fntItalicName; } lblName.DoOneWayDataBinding("Text", objSkill, nameof(Skill.CurrentDisplayName)); lblName.DoOneWayDataBinding("ForeColor", objSkill, nameof(Skill.PreferredColor)); lblName.DoOneWayDataBinding("ToolTipText", objSkill, nameof(Skill.HtmlSkillToolTip)); btnAttribute.DoOneWayDataBinding("Text", objSkill, nameof(Skill.DisplayAttribute)); lblModifiedRating.Text = objSkill.DisplayOtherAttribute(_objAttributeActive.Abbrev); lblModifiedRating.ToolTipText = objSkill.CompileDicepoolTooltip(_objAttributeActive.Abbrev); // Creating controls outside of the designer saves on handles if the controls would be invisible anyway if (objSkill.AllowDelete) // For active skills, can only change by going from Create to Career mode, so no databinding necessary { cmdDelete = new Button { AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, Dock = DockStyle.Fill, Margin = new Padding(3, 0, 3, 0), Name = "cmdDelete", Tag = "String_Delete", Text = "Delete", UseVisualStyleBackColor = true }; cmdDelete.Click += cmdDelete_Click; tlpRight.Controls.Add(cmdDelete, 4, 0); } int intMinimumSize; using (Graphics g = CreateGraphics()) intMinimumSize = (int)(25 * g.DpiX / 96.0f); if (objSkill.CharacterObject.Created) { lblCareerRating = new Label { Anchor = AnchorStyles.Right, AutoSize = true, MinimumSize = new Size(intMinimumSize, 0), Name = "lblCareerRating", Text = "00", TextAlign = ContentAlignment.MiddleRight }; btnCareerIncrease = new ButtonWithToolTip { Anchor = AnchorStyles.Right, AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, Image = Resources.add, Margin = new Padding(3, 0, 3, 0), Name = "btnCareerIncrease", Padding = new Padding(1), UseVisualStyleBackColor = true }; btnCareerIncrease.Click += btnCareerIncrease_Click; lblCareerRating.DoOneWayDataBinding("Text", objSkill, nameof(Skill.Rating)); btnCareerIncrease.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.CanUpgradeCareer)); btnCareerIncrease.DoOneWayDataBinding("ToolTipText", objSkill, nameof(Skill.UpgradeToolTip)); tlpMain.Controls.Add(lblCareerRating, 2, 0); tlpMain.Controls.Add(btnCareerIncrease, 3, 0); btnAddSpec = new ButtonWithToolTip { Anchor = AnchorStyles.Right, AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, Image = Resources.add, Margin = new Padding(3, 0, 3, 0), Name = "btnAddSpec", Padding = new Padding(1), UseVisualStyleBackColor = true }; btnAddSpec.Click += btnAddSpec_Click; lblCareerSpec = new Label { Anchor = AnchorStyles.Left, AutoSize = true, Name = "lblCareerSpec", Text = "[Specializations]", TextAlign = ContentAlignment.MiddleLeft }; lblCareerSpec.DoOneWayDataBinding("Text", objSkill, nameof(Skill.CurrentDisplaySpecialization)); btnAddSpec.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.CanAffordSpecialization)); btnAddSpec.DoDatabinding("Visible", objSkill, nameof(Skill.CanHaveSpecs)); btnAddSpec.DoOneWayDataBinding("ToolTipText", objSkill, nameof(Skill.AddSpecToolTip)); tlpRight.Controls.Add(lblCareerSpec, 0, 0); tlpRight.Controls.Add(btnAddSpec, 1, 0); List <ListItem> lstAttributeItems = new List <ListItem>(AttributeSection.AttributeStrings.Count); foreach (string strLoopAttribute in AttributeSection.AttributeStrings) { if (strLoopAttribute == "MAGAdept") { if (!objSkill.CharacterObject.Options.MysAdeptSecondMAGAttribute) { continue; } lstAttributeItems.Add(new ListItem(strLoopAttribute, LanguageManager.MAGAdeptString())); } else { string strAttributeShort = LanguageManager.GetString( "String_Attribute" + strLoopAttribute + "Short", GlobalOptions.Language, false); lstAttributeItems.Add(new ListItem(strLoopAttribute, !string.IsNullOrEmpty(strAttributeShort) ? strAttributeShort : strLoopAttribute)); } } cboSelectAttribute = new ElasticComboBox { Anchor = AnchorStyles.Left | AnchorStyles.Right, DropDownStyle = ComboBoxStyle.DropDownList, FormattingEnabled = true, Margin = new Padding(3, 0, 3, 0), Name = "cboSelectAttribute" }; cboSelectAttribute.BeginUpdate(); cboSelectAttribute.PopulateWithListItems(lstAttributeItems); cboSelectAttribute.SelectedValue = _objSkill.AttributeObject.Abbrev; cboSelectAttribute.EndUpdate(); cboSelectAttribute.DropDownClosed += cboSelectAttribute_Closed; pnlAttributes.Controls.Add(cboSelectAttribute); } else { nudSkill = new NumericUpDownEx { Anchor = AnchorStyles.Right, AutoSize = true, InterceptMouseWheel = NumericUpDownEx.InterceptMouseWheelMode.WhenMouseOver, Margin = new Padding(3, 2, 3, 2), Maximum = new decimal(new[] { 99, 0, 0, 0 }), Name = "nudSkill" }; nudKarma = new NumericUpDownEx { Anchor = AnchorStyles.Right, AutoSize = true, InterceptMouseWheel = NumericUpDownEx.InterceptMouseWheelMode.WhenMouseOver, Margin = new Padding(3, 2, 3, 2), Maximum = new decimal(new[] { 99, 0, 0, 0 }), Name = "nudKarma" }; // Trick to make it seem like the button is a label (+ onclick method not doing anything in Create mode) btnAttribute.FlatAppearance.MouseDownBackColor = Color.Transparent; btnAttribute.FlatAppearance.MouseOverBackColor = Color.Transparent; nudSkill.DoDatabinding("Visible", objSkill.CharacterObject, nameof(objSkill.CharacterObject.EffectiveBuildMethodUsesPriorityTables)); nudSkill.DoDatabinding("Value", objSkill, nameof(Skill.Base)); nudSkill.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.BaseUnlocked)); nudSkill.InterceptMouseWheel = GlobalOptions.InterceptMode; nudKarma.DoDatabinding("Value", objSkill, nameof(Skill.Karma)); nudKarma.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.KarmaUnlocked)); nudKarma.InterceptMouseWheel = GlobalOptions.InterceptMode; tlpMain.Controls.Add(nudSkill, 2, 0); tlpMain.Controls.Add(nudKarma, 3, 0); if (objSkill.IsExoticSkill) { lblCareerSpec = new Label { Anchor = AnchorStyles.Left, AutoSize = true, Name = "lblCareerSpec", Text = "[Specializations]", TextAlign = ContentAlignment.MiddleLeft }; lblCareerSpec.DoOneWayDataBinding("Text", objSkill, nameof(Skill.CurrentDisplaySpecialization)); tlpRight.Controls.Add(lblCareerSpec, 0, 0); } else { cboSpec = new ElasticComboBox { Anchor = AnchorStyles.Left | AnchorStyles.Right, AutoCompleteMode = AutoCompleteMode.Suggest, FormattingEnabled = true, Margin = new Padding(3, 0, 3, 0), Name = "cboSpec", Sorted = true, TabStop = false }; cboSpec.BeginUpdate(); cboSpec.PopulateWithListItems(objSkill.CGLSpecializations); cboSpec.SelectedIndex = -1; cboSpec.DoDatabinding("Text", objSkill, nameof(Skill.Specialization)); cboSpec.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.CanHaveSpecs)); cboSpec.EndUpdate(); chkKarma = new ColorableCheckBox(components) { Anchor = AnchorStyles.Left, AutoSize = true, DefaultColorScheme = true, Margin = new Padding(3, 0, 3, 0), Name = "chkKarma", UseVisualStyleBackColor = true }; chkKarma.DoDatabinding("Visible", objSkill.CharacterObject, nameof(objSkill.CharacterObject.EffectiveBuildMethodUsesPriorityTables)); chkKarma.DoDatabinding("Checked", objSkill, nameof(Skill.BuyWithKarma)); chkKarma.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.CanHaveSpecs)); tlpRight.Controls.Add(cboSpec, 0, 0); tlpRight.Controls.Add(chkKarma, 1, 0); } } this.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.Enabled)); this.DoOneWayDataBinding("BackColor", objSkill, nameof(Skill.PreferredControlColor)); SkillControl2_DpiChangedAfterParent(null, EventArgs.Empty); this.UpdateLightDarkMode(); this.TranslateWinForm(string.Empty, false); foreach (ToolStripItem tssItem in cmsSkillLabel.Items) { tssItem.UpdateLightDarkMode(); tssItem.TranslateToolStripItemsRecursively(); } } finally { _blnLoading = false; tlpRight.ResumeLayout(); tlpMain.ResumeLayout(); pnlAttributes.ResumeLayout(); ResumeLayout(true); _objSkill.PropertyChanged += Skill_PropertyChanged; } }
public KnowledgeSkillControl(KnowledgeSkill skill) { if (skill == null) { return; } _skill = skill; _tmrNameChangeTimer = new Timer { Interval = 1000 }; _tmrNameChangeTimer.Tick += NameChangeTimer_Tick; InitializeComponent(); SuspendLayout(); tlpMain.SuspendLayout(); tlpMiddle.SuspendLayout(); try { lblModifiedRating.DoOneWayDataBinding("Text", _skill, nameof(KnowledgeSkill.DisplayPool)); lblModifiedRating.DoOneWayDataBinding("ToolTipText", _skill, nameof(KnowledgeSkill.PoolToolTip)); cmdDelete.DoDatabinding("Visible", _skill, nameof(Skill.AllowDelete)); cboType.BeginUpdate(); cboType.PopulateWithListItems(_skill.CharacterObject.SkillsSection.MyKnowledgeTypes); cboType.DoDatabinding("SelectedValue", _skill, nameof(KnowledgeSkill.Type)); cboType.DoOneWayDataBinding("Enabled", _skill, nameof(Skill.AllowTypeChange)); cboType.EndUpdate(); lblName.DoOneWayNegatableDatabinding("Visible", _skill, nameof(Skill.AllowNameChange)); lblName.DoOneWayDataBinding("Text", _skill, nameof(KnowledgeSkill.WriteableName)); lblName.DoOneWayDataBinding("ForeColor", _skill, nameof(Skill.PreferredColor)); cboName.BeginUpdate(); cboName.PopulateWithListItems(_skill.CharacterObject.SkillsSection.MyDefaultKnowledgeSkills); cboName.SelectedIndex = -1; cboName.Text = _skill.WriteableName; cboName.DoDatabinding("Visible", _skill, nameof(Skill.AllowNameChange)); cboName.EndUpdate(); _blnUpdatingName = false; int intMinimumSize; using (Graphics g = CreateGraphics()) intMinimumSize = (int)(25 * g.DpiX / 96.0f); if (_skill.CharacterObject.Created) { lblRating = new Label { Anchor = AnchorStyles.Right, AutoSize = true, MinimumSize = new Size(intMinimumSize, 0), Name = "lblRating", Text = "00", TextAlign = ContentAlignment.MiddleCenter }; btnCareerIncrease = new ButtonWithToolTip { Anchor = AnchorStyles.Right, AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, Image = Resources.add, Margin = new Padding(3, 0, 3, 0), Name = "btnCareerIncrease", Padding = new Padding(1), UseVisualStyleBackColor = true }; btnCareerIncrease.Click += btnCareerIncrease_Click; lblRating.DoOneWayNegatableDatabinding("Visible", _skill, nameof(KnowledgeSkill.IsNativeLanguage)); lblRating.DoOneWayDataBinding("Text", _skill, nameof(Skill.Rating)); btnCareerIncrease.DoDatabinding("Visible", _skill, nameof(KnowledgeSkill.AllowUpgrade)); btnCareerIncrease.DoOneWayDataBinding("Enabled", _skill, nameof(Skill.CanUpgradeCareer)); btnCareerIncrease.DoOneWayDataBinding("ToolTipText", _skill, nameof(Skill.UpgradeToolTip)); lblRating.UpdateLightDarkMode(); lblRating.TranslateWinForm(); btnCareerIncrease.UpdateLightDarkMode(); btnCareerIncrease.TranslateWinForm(); tlpMain.Controls.Add(lblRating, 1, 0); tlpMain.Controls.Add(btnCareerIncrease, 2, 0); lblSpec = new Label { Anchor = AnchorStyles.Left, AutoSize = true, Name = "lblSpec", Text = "[SPEC]", TextAlign = ContentAlignment.MiddleLeft }; btnAddSpec = new ButtonWithToolTip { Anchor = AnchorStyles.Right, AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, Image = Resources.add, Margin = new Padding(3, 0, 3, 0), Name = "btnAddSpec", Padding = new Padding(1), UseVisualStyleBackColor = true }; btnAddSpec.Click += btnAddSpec_Click; lblSpec.DoOneWayNegatableDatabinding("Visible", _skill, nameof(KnowledgeSkill.IsNativeLanguage)); lblSpec.DoOneWayDataBinding("Text", _skill, nameof(Skill.CurrentDisplaySpecialization)); btnAddSpec.DoDatabinding("Visible", _skill, nameof(Skill.CanHaveSpecs)); btnAddSpec.DoOneWayDataBinding("Enabled", _skill, nameof(Skill.CanAffordSpecialization)); btnAddSpec.DoOneWayDataBinding("ToolTipText", _skill, nameof(Skill.AddSpecToolTip)); lblSpec.UpdateLightDarkMode(); lblSpec.TranslateWinForm(); btnAddSpec.UpdateLightDarkMode(); btnAddSpec.TranslateWinForm(); tlpMiddle.SetColumnSpan(lblSpec, 2); tlpMiddle.Controls.Add(lblSpec, 1, 0); tlpMiddle.Controls.Add(btnAddSpec, 3, 0); } else { nudSkill = new NumericUpDownEx { Anchor = AnchorStyles.Right, AutoSize = true, InterceptMouseWheel = NumericUpDownEx.InterceptMouseWheelMode.WhenMouseOver, Margin = new Padding(3, 2, 3, 2), Maximum = new decimal(new[] { 99, 0, 0, 0 }), Name = "nudSkill" }; nudKarma = new NumericUpDownEx { Anchor = AnchorStyles.Right, AutoSize = true, InterceptMouseWheel = NumericUpDownEx.InterceptMouseWheelMode.WhenMouseOver, Margin = new Padding(3, 2, 3, 2), Maximum = new decimal(new[] { 99, 0, 0, 0 }), Name = "nudKarma" }; nudSkill.DoDatabinding("Visible", _skill.CharacterObject.SkillsSection, nameof(SkillsSection.HasKnowledgePoints)); nudSkill.DoOneWayDataBinding("Enabled", _skill, nameof(KnowledgeSkill.AllowUpgrade)); nudSkill.DoDatabinding("Value", _skill, nameof(Skill.Base)); nudSkill.InterceptMouseWheel = GlobalOptions.InterceptMode; nudKarma.DoOneWayDataBinding("Enabled", _skill, nameof(KnowledgeSkill.AllowUpgrade)); nudKarma.DoDatabinding("Value", _skill, nameof(Skill.Karma)); nudKarma.InterceptMouseWheel = GlobalOptions.InterceptMode; nudSkill.UpdateLightDarkMode(); nudSkill.TranslateWinForm(); nudKarma.UpdateLightDarkMode(); nudKarma.TranslateWinForm(); tlpMain.Controls.Add(nudSkill, 1, 0); tlpMain.Controls.Add(nudKarma, 2, 0); chkNativeLanguage = new ColorableCheckBox(components) { Anchor = AnchorStyles.Left, AutoSize = true, DefaultColorScheme = true, Margin = new Padding(3, 0, 3, 0), Name = "chkNativeLanguage", Tag = "Skill_NativeLanguageLong", Text = "Native", UseVisualStyleBackColor = true }; cboSpec = new ElasticComboBox { Anchor = AnchorStyles.Left | AnchorStyles.Right, AutoCompleteMode = AutoCompleteMode.Suggest, FormattingEnabled = true, Margin = new Padding(3, 0, 3, 0), Name = "cboSpec", TabStop = false }; chkKarma = new ColorableCheckBox(components) { Anchor = AnchorStyles.Left, AutoSize = true, DefaultColorScheme = true, Name = "chkKarma", UseVisualStyleBackColor = true }; chkNativeLanguage.DoDatabinding("Visible", _skill, nameof(Skill.IsLanguage)); chkNativeLanguage.Enabled = _skill.IsNativeLanguage || _skill.CharacterObject.SkillsSection.HasAvailableNativeLanguageSlots; chkNativeLanguage.DoDatabinding("Checked", _skill, nameof(Skill.IsNativeLanguage)); cboSpec.BeginUpdate(); cboSpec.PopulateWithListItems(_skill.CGLSpecializations); cboSpec.SelectedIndex = -1; cboSpec.DoOneWayDataBinding("Enabled", _skill, nameof(Skill.CanHaveSpecs)); cboSpec.DoDatabinding("Text", _skill, nameof(Skill.Specialization)); cboSpec.EndUpdate(); chkKarma.DoOneWayDataBinding("Enabled", _skill, nameof(Skill.CanHaveSpecs)); chkKarma.DoDatabinding("Checked", _skill, nameof(Skill.BuyWithKarma)); chkNativeLanguage.UpdateLightDarkMode(); chkNativeLanguage.TranslateWinForm(); cboSpec.UpdateLightDarkMode(); cboSpec.TranslateWinForm(); chkKarma.UpdateLightDarkMode(); chkKarma.TranslateWinForm(); tlpMiddle.Controls.Add(chkNativeLanguage, 1, 0); tlpMiddle.Controls.Add(cboSpec, 2, 0); tlpMiddle.Controls.Add(chkKarma, 3, 0); } if (_skill.ForcedName) { this.DoOneWayDataBinding("Enabled", _skill, nameof(KnowledgeSkill.Enabled)); } KnowledgeSkillControl_DpiChangedAfterParent(null, EventArgs.Empty); this.UpdateLightDarkMode(); this.TranslateWinForm(string.Empty, false); } finally { tlpMiddle.ResumeLayout(); tlpMain.ResumeLayout(); ResumeLayout(true); _skill.PropertyChanged += Skill_PropertyChanged; _skill.CharacterObject.SkillsSection.PropertyChanged += OnSkillsSectionPropertyChanged; } }