public KnowledgeSkillControl(KnowledgeSkill objSkill) { if (objSkill == null) { return; } _objSkill = objSkill; InitializeComponent(); SuspendLayout(); tlpMain.SuspendLayout(); tlpMiddle.SuspendLayout(); try { lblModifiedRating.DoOneWayDataBinding("Text", objSkill, nameof(KnowledgeSkill.DisplayPool)); lblModifiedRating.DoOneWayDataBinding("ToolTipText", objSkill, nameof(KnowledgeSkill.PoolToolTip)); cmdDelete.DoOneWayDataBinding("Visible", objSkill, nameof(Skill.AllowDelete)); cboType.BeginUpdate(); cboType.PopulateWithListItems(objSkill.CharacterObject.SkillsSection.MyKnowledgeTypes); cboType.DoDataBinding("SelectedValue", objSkill, nameof(KnowledgeSkill.Type)); cboType.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.AllowTypeChange)); cboType.EndUpdate(); lblName.DoOneWayNegatableDataBinding("Visible", objSkill, nameof(Skill.AllowNameChange)); lblName.DoOneWayDataBinding("Text", objSkill, nameof(KnowledgeSkill.WritableName)); lblName.DoOneWayDataBinding("ForeColor", objSkill, nameof(Skill.PreferredColor)); cboName.BeginUpdate(); cboName.PopulateWithListItems(objSkill.CharacterObject.SkillsSection.MyDefaultKnowledgeSkills); cboName.SelectedIndex = -1; cboName.Text = objSkill.WritableName; cboName.DoOneWayDataBinding("Visible", objSkill, nameof(Skill.AllowNameChange)); cboName.EndUpdate(); _blnUpdatingName = false; _tmrNameChangeTimer = new Timer { Interval = 1000 }; _tmrNameChangeTimer.Tick += NameChangeTimer_Tick; if (objSkill.CharacterObject.Created) { lblRating = new Label { Anchor = AnchorStyles.Right, AutoSize = true, Margin = new Padding(3, 6, 3, 6), Name = "lblRating", Text = "00", TextAlign = ContentAlignment.MiddleCenter }; btnCareerIncrease = new ButtonWithToolTip { Anchor = AnchorStyles.Right, AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, ImageDpi96 = Resources.add, ImageDpi192 = Resources.add1, MinimumSize = new Size(24, 24), Name = "btnCareerIncrease", Padding = new Padding(1), UseVisualStyleBackColor = true }; btnCareerIncrease.Click += btnCareerIncrease_Click; lblRating.DoOneWayNegatableDataBinding("Visible", objSkill, nameof(KnowledgeSkill.IsNativeLanguage)); lblRating.DoOneWayDataBinding("Text", objSkill, nameof(Skill.Rating)); btnCareerIncrease.DoOneWayDataBinding("Visible", objSkill, nameof(KnowledgeSkill.AllowUpgrade)); btnCareerIncrease.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.CanUpgradeCareer)); btnCareerIncrease.DoOneWayDataBinding("ToolTipText", objSkill, nameof(Skill.UpgradeToolTip)); tlpMain.Controls.Add(lblRating, 1, 0); tlpMain.Controls.Add(btnCareerIncrease, 2, 0); lblSpec = new Label { Anchor = AnchorStyles.Left, AutoSize = true, Margin = new Padding(3, 6, 3, 6), Name = "lblSpec", Text = "[SPEC]", TextAlign = ContentAlignment.MiddleLeft }; btnAddSpec = new ButtonWithToolTip { Anchor = AnchorStyles.Right, AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, ImageDpi96 = Resources.add, ImageDpi192 = Resources.add1, MinimumSize = new Size(24, 24), Name = "btnAddSpec", Padding = new Padding(1), UseVisualStyleBackColor = true }; btnAddSpec.Click += btnAddSpec_Click; lblSpec.DoOneWayDataBinding("Text", objSkill, nameof(Skill.CurrentDisplaySpecialization)); btnAddSpec.DoOneWayDataBinding("Visible", objSkill, nameof(Skill.CanHaveSpecs)); btnAddSpec.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.CanAffordSpecialization)); btnAddSpec.DoOneWayDataBinding("ToolTipText", objSkill, nameof(Skill.AddSpecToolTip)); 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.DoOneWayDataBinding("Visible", objSkill.CharacterObject.SkillsSection, nameof(SkillsSection.HasKnowledgePoints)); nudSkill.DoOneWayDataBinding("Enabled", objSkill, nameof(KnowledgeSkill.AllowUpgrade)); nudSkill.DoDataBinding("Value", objSkill, nameof(Skill.Base)); nudSkill.InterceptMouseWheel = GlobalSettings.InterceptMode; nudKarma.DoOneWayDataBinding("Enabled", objSkill, nameof(KnowledgeSkill.AllowUpgrade)); nudKarma.DoDataBinding("Value", objSkill, nameof(Skill.Karma)); nudKarma.InterceptMouseWheel = GlobalSettings.InterceptMode; 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, 4, 3, 4), 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, Margin = new Padding(3, 4, 3, 4), Name = "chkKarma", UseVisualStyleBackColor = true }; chkNativeLanguage.DoOneWayDataBinding("Visible", objSkill, nameof(Skill.IsLanguage)); chkNativeLanguage.Enabled = objSkill.IsNativeLanguage || objSkill.CharacterObject.SkillsSection.HasAvailableNativeLanguageSlots; chkNativeLanguage.DoDataBinding("Checked", objSkill, nameof(Skill.IsNativeLanguage)); cboSpec.BeginUpdate(); cboSpec.PopulateWithListItems(objSkill.CGLSpecializations); cboSpec.EndUpdate(); cboSpec.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.CanHaveSpecs)); cboSpec.Text = objSkill.CurrentDisplaySpecialization; cboSpec.TextChanged += cboSpec_TextChanged; _blnUpdatingSpec = false; _tmrSpecChangeTimer = new Timer { Interval = 1000 }; _tmrSpecChangeTimer.Tick += SpecChangeTimer_Tick; chkKarma.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.CanHaveSpecs)); chkKarma.DoDataBinding("Checked", objSkill, nameof(Skill.BuyWithKarma)); tlpMiddle.Controls.Add(chkNativeLanguage, 1, 0); tlpMiddle.Controls.Add(cboSpec, 2, 0); tlpMiddle.Controls.Add(chkKarma, 3, 0); // Hacky way of fixing a weird UI issue caused by items of a combobox only being populated from the DataSource after the combobox is added _blnUpdatingSpec = true; cboSpec.Text = objSkill.CurrentDisplaySpecialization; _blnUpdatingSpec = false; } if (objSkill.ForcedName) { this.DoOneWayDataBinding("Enabled", objSkill, nameof(KnowledgeSkill.Enabled)); } AdjustForDpi(); this.UpdateLightDarkMode(); this.TranslateWinForm(blnDoResumeLayout: false); } finally { tlpMiddle.ResumeLayout(); tlpMain.ResumeLayout(); ResumeLayout(true); objSkill.PropertyChanged += Skill_PropertyChanged; objSkill.CharacterObject.SkillsSection.PropertyChanged += OnSkillsSectionPropertyChanged; } }
public SkillControl(Skill objSkill) { if (objSkill == null) { return; } _objSkill = objSkill; _objAttributeActive = objSkill.AttributeObject; if (_objAttributeActive != null) { _objAttributeActive.PropertyChanged += Attribute_PropertyChanged; } 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)); RefreshPoolTooltipAndDisplay(); // 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); } if (objSkill.CharacterObject.Created) { lblCareerRating = new Label { Anchor = AnchorStyles.Right, AutoSize = true, Margin = new Padding(3, 6, 3, 6), Name = "lblCareerRating", Text = "00", TextAlign = ContentAlignment.MiddleRight }; btnCareerIncrease = new ButtonWithToolTip { Anchor = AnchorStyles.Right, AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, ImageDpi96 = Resources.add, ImageDpi192 = Resources.add1, MinimumSize = new Size(24, 24), 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, ImageDpi96 = Resources.add, ImageDpi192 = Resources.add1, MinimumSize = new Size(24, 24), Name = "btnAddSpec", Padding = new Padding(1), UseVisualStyleBackColor = true }; btnAddSpec.Click += btnAddSpec_Click; lblCareerSpec = new Label { Anchor = AnchorStyles.Left, AutoSize = true, Margin = new Padding(3, 6, 3, 6), Name = "lblCareerSpec", Text = "[Specializations]", TextAlign = ContentAlignment.MiddleLeft }; lblCareerSpec.DoOneWayDataBinding("Text", objSkill, nameof(Skill.CurrentDisplaySpecialization)); btnAddSpec.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.CanAffordSpecialization)); btnAddSpec.DoOneWayDataBinding("Visible", objSkill, nameof(Skill.CanHaveSpecs)); btnAddSpec.DoOneWayDataBinding("ToolTipText", objSkill, nameof(Skill.AddSpecToolTip)); tlpRight.Controls.Add(lblCareerSpec, 0, 0); tlpRight.Controls.Add(btnAddSpec, 1, 0); using (new FetchSafelyFromPool <List <ListItem> >(Utils.ListItemListPool, out List <ListItem> lstAttributeItems)) { foreach (string strLoopAttribute in AttributeSection.AttributeStrings) { if (strLoopAttribute == "MAGAdept") { if (!objSkill.CharacterObject.Settings.MysAdeptSecondMAGAttribute) { continue; } lstAttributeItems.Add(new ListItem(strLoopAttribute, LanguageManager.MAGAdeptString())); } else { string strAttributeShort = LanguageManager.GetString( "String_Attribute" + strLoopAttribute + "Short", GlobalSettings.Language, false); lstAttributeItems.Add(new ListItem(strLoopAttribute, !string.IsNullOrEmpty(strAttributeShort) ? strAttributeShort : strLoopAttribute)); } } cboSelectAttribute = new ElasticComboBox { Dock = DockStyle.Fill, DropDownStyle = ComboBoxStyle.DropDownList, FormattingEnabled = true, Margin = new Padding(3, 0, 3, 0), Name = "cboSelectAttribute" }; cboSelectAttribute.PopulateWithListItems(lstAttributeItems); cboSelectAttribute.SelectedValue = _objSkill.AttributeObject.Abbrev; 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.DoOneWayDataBinding("Visible", objSkill.CharacterObject, nameof(objSkill.CharacterObject.EffectiveBuildMethodUsesPriorityTables)); nudSkill.DoDataBinding("Value", objSkill, nameof(Skill.Base)); nudSkill.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.BaseUnlocked)); nudSkill.InterceptMouseWheel = GlobalSettings.InterceptMode; nudKarma.DoDataBinding("Value", objSkill, nameof(Skill.Karma)); nudKarma.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.KarmaUnlocked)); nudKarma.InterceptMouseWheel = GlobalSettings.InterceptMode; tlpMain.Controls.Add(nudSkill, 2, 0); tlpMain.Controls.Add(nudKarma, 3, 0); if (objSkill.IsExoticSkill) { lblCareerSpec = new Label { Anchor = AnchorStyles.Left, AutoSize = true, Margin = new Padding(3, 6, 3, 6), 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.PopulateWithListItems(objSkill.CGLSpecializations); cboSpec.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.CanHaveSpecs)); cboSpec.Text = objSkill.CurrentDisplaySpecialization; cboSpec.TextChanged += cboSpec_TextChanged; _blnUpdatingSpec = false; _tmrSpecChangeTimer = new Timer { Interval = 1000 }; _tmrSpecChangeTimer.Tick += SpecChangeTimer_Tick; chkKarma = new ColorableCheckBox(components) { Anchor = AnchorStyles.Left, AutoSize = true, DefaultColorScheme = true, Margin = new Padding(3, 4, 3, 4), Name = "chkKarma", UseVisualStyleBackColor = true }; chkKarma.DoOneWayDataBinding("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); // Hacky way of fixing a weird UI issue caused by items of a combobox only being populated from the DataSource after the combobox is added _blnUpdatingSpec = true; cboSpec.Text = objSkill.CurrentDisplaySpecialization; _blnUpdatingSpec = false; } } this.DoOneWayDataBinding("Enabled", objSkill, nameof(Skill.Enabled)); this.DoOneWayDataBinding("BackColor", objSkill, nameof(Skill.PreferredControlColor)); AdjustForDpi(); this.UpdateLightDarkMode(); this.TranslateWinForm(blnDoResumeLayout: 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; } }