Example #1
0
        /// <summary>
        /// Handles the Click event of the btnCharacterTemplate control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        void btnCharacterTemplate_Click(object sender, EventArgs e)
        {
            using (var f = new CharacterTemplateUITypeEditorForm(pgCharacterTemplate.SelectedObject))
            {
                if (f.ShowDialog(this) != DialogResult.OK)
                {
                    return;
                }

                var item = f.SelectedItem;
                pgCharacterTemplate.SelectedObject = new EditorCharacterTemplate(item, _dbController);
            }
        }
        /// <summary>
        /// Edits the specified object's value using the editor style indicated by the
        /// <see cref="M:System.Drawing.Design.UITypeEditor.GetEditStyle"/> method.
        /// </summary>
        /// <param name="context">An <see cref="T:System.ComponentModel.ITypeDescriptorContext"/> that can be
        /// used to gain additional context information.</param>
        /// <param name="provider">An <see cref="T:System.IServiceProvider"/> that this editor can use to
        /// obtain services.</param>
        /// <param name="value">The object to edit.</param>
        /// <returns>
        /// The new value of the object. If the value of the object has not changed, this should return the
        /// same object it was passed.
        /// </returns>
        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            var svc = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;

            if (svc != null)
            {
                using (var editorForm = new CharacterTemplateUITypeEditorForm(value))
                {
                    var pt = context.PropertyDescriptor.PropertyType;
                    if (svc.ShowDialog(editorForm) == DialogResult.OK)
                    {
                        if (pt == typeof(CharacterTemplateID) || pt == typeof(CharacterTemplateID?))
                            value = editorForm.SelectedItem.ID;
                        else if (pt == typeof(CharacterTemplate))
                            value = editorForm.SelectedItem;
                        else if (pt == typeof(string))
                            value = editorForm.SelectedItem.ID.ToString();
                        else
                        {
                            const string errmsg =
                                "Don't know how to handle the source property type `{0}`. In value: {1}. Editor type: {2}";
                            if (log.IsErrorEnabled)
                                log.ErrorFormat(errmsg, pt, value, editorForm.GetType());
                            Debug.Fail(string.Format(errmsg, pt, value, editorForm.GetType()));
                        }
                    }
                    else
                    {
                        if (pt == typeof(CharacterTemplateID?))
                            value = null;
                    }
                }
            }

            return value;
        }
        /// <summary>
        /// Handles the Click event of the btnBrowse control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        void btnBrowse_Click(object sender, EventArgs e)
        {
            using (var f = new CharacterTemplateUITypeEditorForm(null))
            {
                // If we require distinct, skip items we already have in the list
                if (RequireDistinct)
                {
                    var listItems = lstItems.Items.OfType<MutablePair<CharacterTemplateID, ushort>>().ToImmutable();
                    f.SkipItems = (x => listItems.Any(y => y.Key == x.ID));
                }

                if (f.ShowDialog(this) != DialogResult.OK)
                    return;

                var item = f.SelectedItem;
                _selectedItem = item.ID;
                txtItem.Text = item.ID + " [" + item.Name + "]";
            }
        }