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;
            }
            }
        }
示例#2
0
        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;
            }
            }
        }