private async void Skill_PropertyChanged(object sender, PropertyChangedEventArgs e) { bool blnAll = false; switch (e?.PropertyName) { case null: blnAll = true; goto case nameof(Skill.CGLSpecializations); case nameof(Skill.CGLSpecializations): if (cboSpec != null) { string strOldSpec = _objSkill.CGLSpecializations.Count != 0 ? cboSpec.SelectedItem?.ToString() : cboSpec.Text; IReadOnlyList <ListItem> lstSpecializations = _objSkill.CGLSpecializations; _blnUpdatingSpec = true; try { await cboSpec.PopulateWithListItemsAsync(lstSpecializations); await cboSpec.DoThreadSafeAsync(x => { if (string.IsNullOrEmpty(strOldSpec)) { x.SelectedIndex = -1; } else { x.SelectedValue = strOldSpec; if (x.SelectedIndex == -1) { x.Text = strOldSpec; } } }); } finally { _blnUpdatingSpec = false; } } if (blnAll) { goto case nameof(KnowledgeSkill.WritableName); } break; case nameof(KnowledgeSkill.WritableName): if (!_blnUpdatingName) { string strWritableName = _objSkill.WritableName; _blnUpdatingName = true; try { await cboName.DoThreadSafeAsync(x => x.Text = strWritableName); } finally { _blnUpdatingName = false; } } if (blnAll) { goto case nameof(Skill.TopMostDisplaySpecialization); } break; case nameof(KnowledgeSkill.TopMostDisplaySpecialization): if (cboSpec != null && !_blnUpdatingSpec) { string strDisplaySpec = _objSkill.TopMostDisplaySpecialization; _blnUpdatingSpec = true; try { await cboSpec.DoThreadSafeAsync(x => x.Text = strDisplaySpec); } finally { _blnUpdatingSpec = false; } } if (blnAll) { goto case nameof(Skill.IsNativeLanguage); } break; case nameof(Skill.IsNativeLanguage): if (chkNativeLanguage != null) { bool blnEnabled = _objSkill.IsNativeLanguage || _objSkill.CharacterObject.SkillsSection.HasAvailableNativeLanguageSlots; await chkNativeLanguage.DoThreadSafeAsync(x => x.Enabled = blnEnabled); } if (blnAll) { goto case nameof(Skill.Specializations); } break; case nameof(Skill.Specializations): { if (await Program.GetFormForDialogAsync(_objSkill.CharacterObject) is CharacterShared frmParent) { await frmParent.RequestCharacterUpdate(); } break; } } }
private async void Skill_PropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs) { if (_blnLoading) { return; } bool blnUpdateAll = false; //I learned something from this but i'm not sure it is a good solution //scratch that, i'm sure it is a bad solution. (Tooltip manager from tooltip, properties from reflection? //if name of changed is null it does magic to change all, otherwise it only does one. switch (propertyChangedEventArgs?.PropertyName) { case null: blnUpdateAll = true; goto case nameof(Skill.DisplayPool); case nameof(Skill.DisplayPool): await RefreshPoolTooltipAndDisplayAsync(); if (blnUpdateAll) { goto case nameof(Skill.Default); } break; case nameof(Skill.Default): await lblName.DoThreadSafeAsync(x => x.Font = !_objSkill.Default?_fntItalicName : _fntNormalName); if (blnUpdateAll) { goto case nameof(Skill.DefaultAttribute); } break; case nameof(Skill.DefaultAttribute): if (cboSelectAttribute != null) { cboSelectAttribute.SelectedValue = _objSkill.AttributeObject.Abbrev; cboSelectAttribute_Closed(this, EventArgs.Empty); } else { AttributeActive = _objSkill.AttributeObject; } if (blnUpdateAll) { goto case nameof(Skill.TopMostDisplaySpecialization); } break; case nameof(Skill.TopMostDisplaySpecialization): if (cboSpec != null && !_blnUpdatingSpec) { string strDisplaySpec = _objSkill.TopMostDisplaySpecialization; _blnUpdatingSpec = true; try { await cboSpec.DoThreadSafeAsync(x => x.Text = strDisplaySpec); } finally { _blnUpdatingSpec = false; } } if (blnUpdateAll) { goto case nameof(Skill.CGLSpecializations); } break; case nameof(Skill.CGLSpecializations): if (cboSpec?.Visible == true) { string strOldSpec = cboSpec.Text; IReadOnlyList <ListItem> lstSpecializations = _objSkill.CGLSpecializations; _blnUpdatingSpec = true; try { await cboSpec.PopulateWithListItemsAsync(lstSpecializations); await cboSpec.DoThreadSafeAsync(x => { if (string.IsNullOrEmpty(strOldSpec)) { x.SelectedIndex = -1; } else { x.SelectedValue = strOldSpec; if (x.SelectedIndex == -1) { x.Text = strOldSpec; } } }); } finally { _blnUpdatingSpec = false; } } if (blnUpdateAll) { goto case nameof(Skill.Specializations); } break; case nameof(Skill.Specializations): { if (await Program.GetFormForDialogAsync(_objSkill.CharacterObject) is CharacterShared frmParent) { await frmParent.RequestCharacterUpdate(); } break; } } }