// * // * Copyright (C) 2008 Roger Alsing : http://www.RogerAlsing.com // * // * This library is free software; you can redistribute it and/or modify it // * under the terms of the GNU Lesser General Public License 2.1 or later, as // * published by the Free Software Foundation. See the included license.txt // * or http://www.gnu.org/copyleft/lesser.html for details. // * // * using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Design; using System.Windows.Forms; using System.Windows.Forms.Design; namespace Alsing.SourceCode { public class TextStyleUIEditor : UITypeEditor { private IWindowsFormsEditorService edSvc; public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { if (context != null && context.Instance != null && provider != null) { edSvc = (IWindowsFormsEditorService) provider.GetService(typeof (IWindowsFormsEditorService)); if (edSvc != null) { var style = (TextStyle) value; using (var tsd = new TextStyleDesignerDialog(style) ) { context.OnComponentChanging(); if (edSvc.ShowDialog(tsd) == DialogResult.OK) { ValueChanged(this, EventArgs.Empty); context.OnComponentChanged(); return style; } } } } return value; } public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) { return UITypeEditorEditStyle.Modal; } private void ValueChanged(object sender, EventArgs e) { if (edSvc != null) {} } public override void PaintValue(PaintValueEventArgs e) { var ts = (TextStyle) e.Value; using (var b = new SolidBrush(ts.BackColor)) { e.Graphics.FillRectangle(b, e.Bounds); } FontStyle fs = FontStyle.Regular; if (ts.Bold) fs |= FontStyle.Bold; if (ts.Italic) fs |= FontStyle.Italic; if (ts.Underline) fs |= FontStyle.Underline; var f = new Font("arial", 8f, fs); using (var b = new SolidBrush(ts.ForeColor)) { e.Graphics.DrawString("abc", f, b, e.Bounds); } f.Dispose(); } public override bool GetPaintValueSupported (ITypeDescriptorContext context) { return true; } } }