/// <summary>
 /// Copies values of supplied <see cref="AppearenceText" /> to current object.
 /// </summary>
 /// <param name="appearence"><see cref="AppearenceText" /> object whose value is to be copied.</param>
 public void Assign(AppearenceText appearence)
 {
     alignment     = appearence.Alignment;
     font          = appearence.Font;
     lineAlignment = appearence.LineAlignment;
     trimming      = Trimming;
     xshift        = appearence.Xshift;
     yshift        = appearence.Yshift;
 }
        /// <summary>
        /// Creates a new object that is a copy of the current instance.
        /// </summary>
        /// <returns>A new object that is a copy of this instance.</returns>
        public object Clone()
        {
            var appearence = new AppearenceText
            {
                Xshift        = Xshift,
                Yshift        = Yshift,
                Trimming      = Trimming,
                Alignment     = Alignment,
                LineAlignment = LineAlignment,
                Font          = Font
            };

            return(appearence);
        }
 /// <summary>
 /// Initialize new instance of <see cref="AppearanceItem" />.
 /// </summary>
 public AppearanceItem()
 {
     backStyle = new ColorPair();
     backStyle.AppearanceChanged += OnAppearanceChanged;
     clickStyle = new ColorPair();
     clickStyle.AppearanceChanged += OnAppearanceChanged;
     hoverStyle = new ColorPair();
     hoverStyle.AppearanceChanged         += OnAppearanceChanged;
     selectedHoverStyle                    = new ColorPair();
     selectedHoverStyle.AppearanceChanged += OnAppearanceChanged;
     selectedStyle = new ColorPair();
     selectedStyle.AppearanceChanged += OnAppearanceChanged;
     disabledStyle = new ColorPair();
     disabledStyle.AppearanceChanged += OnAppearanceChanged;
     appearenceText = new AppearenceText();
     appearenceText.AppearenceChanged += OnAppearanceChanged;
     Reset();
 }
        /// <summary>
        /// Converts an object into its XML representation.
        /// </summary>
        /// <param name="writer">The <see cref="T:System.Xml.XmlWriter" /> stream to which the object is serialized.</param>
        public void WriteXml(XmlWriter writer)
        {
            writer.WriteStartElement("BackStyle");
            BackStyle.WriteXml(writer);
            writer.WriteEndElement();

            writer.WriteStartElement("ClickStyle");
            ClickStyle.WriteXml(writer);
            writer.WriteEndElement();

            writer.WriteStartElement("HoverStyle");
            HoverStyle.WriteXml(writer);
            writer.WriteEndElement();

            writer.WriteStartElement("SelectedStyle");
            SelectedStyle.WriteXml(writer);
            writer.WriteEndElement();

            writer.WriteStartElement("DisabledStyle");
            DisabledStyle.WriteXml(writer);
            writer.WriteEndElement();

            writer.WriteStartElement("SelectedHoverStyle");
            SelectedHoverStyle.WriteXml(writer);
            writer.WriteEndElement();

            writer.WriteElementString("NormalBorder", PaintUtility.GetString(NormalBorder));
            writer.WriteElementString("HoverBorder", PaintUtility.GetString(HoverBorder));
            writer.WriteElementString("NormalForeGround", PaintUtility.GetString(NormalForeGround));
            writer.WriteElementString("SelectedBorder", PaintUtility.GetString(SelectedBorder));
            writer.WriteElementString("HoverForeGround", PaintUtility.GetString(HoverForeGround));

            writer.WriteStartElement("AppearenceText");
            AppearenceText.WriteXml(writer);
            writer.WriteEndElement();

            writer.WriteElementString("SelectedForeGround", PaintUtility.GetString(SelectedForeGround));
            writer.WriteElementString("DisabledBorder", PaintUtility.GetString(DisabledBorder));
            writer.WriteElementString("DisabledForeGround", PaintUtility.GetString(DisabledForeGround));

            writer.WriteElementString("Gradient", Gradient.ToString());
        }
        /// <summary>
        /// Creates a new object that is a copy of the current instance.
        /// </summary>
        /// <returns>A new object that is a copy of this instance.</returns>
        public object Clone()
        {
            var app = new AppearanceItem();

            app.BackStyle.Assign((ColorPair)BackStyle.Clone());
            app.ClickStyle.Assign((ColorPair)ClickStyle.Clone());
            app.DisabledBorder     = DisabledBorder;
            app.DisabledForeGround = DisabledForeGround;
            app.DisabledStyle.Assign((ColorPair)DisabledStyle.Clone());
            app.Gradient        = Gradient;
            app.HoverBorder     = HoverBorder;
            app.HoverForeGround = HoverForeGround;
            app.HoverStyle.Assign((ColorPair)HoverStyle.Clone());
            app.NormalBorder       = NormalBorder;
            app.NormalForeGround   = NormalForeGround;
            app.SelectedBorder     = SelectedBorder;
            app.SelectedForeGround = SelectedForeGround;
            app.SelectedHoverStyle.Assign((ColorPair)SelectedHoverStyle.Clone());
            app.SelectedStyle.Assign((ColorPair)SelectedStyle.Clone());
            app.AppearenceText.Assign((AppearenceText)AppearenceText.Clone());
            return(app);
        }
        /// <summary>
        /// Draws the string.
        /// </summary>
        /// <param name="graphics">The graphics.</param>
        /// <param name="rectangle">The rectangle.</param>
        /// <param name="text">The text.</param>
        /// <param name="app">The application.</param>
        /// <param name="useMnemonic">if set to <c>true</c> [use mnemonic].</param>
        /// <param name="textColor">Color of the text.</param>
        internal static void DrawString(Graphics graphics, Rectangle rectangle, string text, AppearenceText app,
                                        bool useMnemonic, Color textColor)
        {
            if (rectangle.IsEmpty)
            {
                return;
            }
            var format = new StringFormat();

            format.Trimming      = app.Trimming;
            format.Alignment     = app.Alignment;
            format.LineAlignment = app.LineAlignment;
            if (useMnemonic)
            {
                format.HotkeyPrefix = HotkeyPrefix.Show;
            }
            rectangle.X += (int)app.Xshift;
            rectangle.Y += (int)app.Yshift;
            graphics.DrawString(text, app.Font, new SolidBrush(ChangeColor(textColor, Color.White, 100, false)),
                                rectangle, format);
            rectangle.X -= (int)app.Xshift;
            rectangle.Y -= (int)app.Yshift;
            graphics.DrawString(text, app.Font, new SolidBrush(textColor), rectangle, format);
        }
        /// <summary>
        /// Generates an object from its XML representation.
        /// </summary>
        /// <param name="reader">The <see cref="T:System.Xml.XmlReader" /> stream from which the object is deserialized.</param>
        public void ReadXml(XmlReader reader)
        {
            var doc = new XmlDocument();

            doc.Load(reader);

            if (doc.GetElementsByTagName("BackStyle").Count > 0)
            {
                var xml = "<ColorPair>" + doc.GetElementsByTagName("BackStyle")[0].InnerXml + "</ColorPair>";
                BackStyle.ReadXml(new XmlTextReader(xml, XmlNodeType.Document, null));
            }
            if (doc.GetElementsByTagName("ClickStyle").Count > 0)
            {
                var xml = "<ColorPair>" + doc.GetElementsByTagName("ClickStyle")[0].InnerXml + "</ColorPair>";
                ClickStyle.ReadXml(new XmlTextReader(xml, XmlNodeType.Document, null));
            }
            if (doc.GetElementsByTagName("HoverStyle").Count > 0)
            {
                var xml = "<ColorPair>" + doc.GetElementsByTagName("HoverStyle")[0].InnerXml + "</ColorPair>";
                HoverStyle.ReadXml(new XmlTextReader(xml, XmlNodeType.Document, null));
            }
            if (doc.GetElementsByTagName("SelectedStyle").Count > 0)
            {
                var xml = "<ColorPair>" + doc.GetElementsByTagName("SelectedStyle")[0].InnerXml + "</ColorPair>";
                SelectedStyle.ReadXml(new XmlTextReader(xml, XmlNodeType.Document, null));
            }
            if (doc.GetElementsByTagName("DisabledStyle").Count > 0)
            {
                var xml = "<ColorPair>" + doc.GetElementsByTagName("DisabledStyle")[0].InnerXml + "</ColorPair>";
                DisabledStyle.ReadXml(new XmlTextReader(xml, XmlNodeType.Document, null));
            }
            if (doc.GetElementsByTagName("SelectedHoverStyle").Count > 0)
            {
                var xml = "<ColorPair>" + doc.GetElementsByTagName("SelectedHoverStyle")[0].InnerXml + "</ColorPair>";
                SelectedHoverStyle.ReadXml(new XmlTextReader(xml, XmlNodeType.Document, null));
            }


            if (doc.GetElementsByTagName("NormalBorder").Count > 0)
            {
                NormalBorder = PaintUtility.GetColor(doc.GetElementsByTagName("NormalBorder")[0].InnerText);
            }
            if (doc.GetElementsByTagName("HoverBorder").Count > 0)
            {
                HoverBorder = PaintUtility.GetColor(doc.GetElementsByTagName("HoverBorder")[0].InnerText);
            }
            if (doc.GetElementsByTagName("SelectedBorder").Count > 0)
            {
                SelectedBorder = PaintUtility.GetColor(doc.GetElementsByTagName("SelectedBorder")[0].InnerText);
            }
            if (doc.GetElementsByTagName("NormalForeGround").Count > 0)
            {
                NormalForeGround = PaintUtility.GetColor(doc.GetElementsByTagName("NormalForeGround")[0].InnerText);
            }
            if (doc.GetElementsByTagName("HoverForeGround").Count > 0)
            {
                HoverForeGround = PaintUtility.GetColor(doc.GetElementsByTagName("HoverForeGround")[0].InnerText);
            }

            if (doc.GetElementsByTagName("AppearenceText").Count > 0)
            {
                var xml = "<AppearenceText>" + doc.GetElementsByTagName("AppearenceText")[0].InnerXml +
                          "</AppearenceText>";
                AppearenceText.ReadXml(new XmlTextReader(xml, XmlNodeType.Document, null));
            }

            if (doc.GetElementsByTagName("SelectedForeGround").Count > 0)
            {
                SelectedForeGround = PaintUtility.GetColor(doc.GetElementsByTagName("SelectedForeGround")[0].InnerText);
            }
            if (doc.GetElementsByTagName("DisabledBorder").Count > 0)
            {
                DisabledBorder = PaintUtility.GetColor(doc.GetElementsByTagName("DisabledBorder")[0].InnerText);
            }
            if (doc.GetElementsByTagName("DisabledForeGround").Count > 0)
            {
                DisabledForeGround = PaintUtility.GetColor(doc.GetElementsByTagName("DisabledForeGround")[0].InnerText);
            }
            if (doc.GetElementsByTagName("Gradient").Count > 0)
            {
                Gradient = Convert.ToInt32(doc.GetElementsByTagName("Gradient")[0].InnerText);
            }
        }
 /// <summary>
 /// Indicates wether <see cref="AppearenceText" /> needs to be serialized by designer or not.
 /// </summary>
 /// <returns>true if designer needs to serialize</returns>
 protected virtual bool ShouldSerializeAppearenceText()
 {
     return(AppearenceText.DefaultChanged());
 }
 /// <summary>
 /// Resets <see cref="AppearenceText" /> to default value.
 /// </summary>
 protected virtual void ResetAppearenceText()
 {
     AppearenceText.Reset();
 }