363 lines
8.2 KiB
C#

using System;
using System.ComponentModel;
using System.Windows.Forms;
using DevComponents.Charts.TextMarkup;
using DevComponents.DotNetBar.Charts.Style;
namespace DevComponents.DotNetBar.Charts
{
/// <summary>
/// ChartNote.
/// </summary>
public class ChartNote : ChartVisualElement
{
#region Private variables
private States _States;
private string _Text;
private BodyElement _TextMarkup;
private int _FixedHeight;
#endregion
#region Public properties
#region EnableTextMarkup
/// <summary>
/// Gets or sets whether text-markup support is enabled
/// </summary>
[DefaultValue(false), Category("Appearance")]
[Description("Indicates whether text-markup support is enabled.")]
public bool EnableTextMarkup
{
get { return (TestState(States.EnableTextMarkup)); }
set
{
if (EnableTextMarkup != value)
{
SetState(States.EnableTextMarkup, value);
MarkupTextChanged();
OnPropertyChangedEx("EnableTextMarkup", VisualChangeType.Layout);
}
}
}
#region MarkupTextChanged
private void MarkupTextChanged()
{
if (_TextMarkup != null)
_TextMarkup.HyperLinkClick -= TextMarkupLinkClick;
_TextMarkup = null;
if (EnableTextMarkup == true)
{
if (MarkupParser.IsMarkup(_Text) == true)
{
_TextMarkup = MarkupParser.Parse(_Text);
if (_TextMarkup != null)
_TextMarkup.HyperLinkClick += TextMarkupLinkClick;
}
}
}
#endregion
#region TextMarkupLinkClick
/// <summary>
/// Occurs when a text markup link is clicked
/// </summary>
protected virtual void TextMarkupLinkClick(object sender, EventArgs e)
{
HyperLink link = sender as HyperLink;
if (link != null)
ChartControl.DoChartTitleMarkupLinkClickEvent(this, link);
}
#endregion
#endregion
#region PlainText
/// <summary>
/// Gets text without text-markup (if text-markup is used in Text)
/// </summary>
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public string PlainText
{
get { return (_TextMarkup != null ? _TextMarkup.PlainText : _Text); }
}
#endregion
#region FixedHeight
/// <summary>
/// Gets or sets the fixed Text height (0 to auto-size)
/// </summary>
[DefaultValue(0), Category("Layout")]
[Description("Indicates the fixed Text height (0 to auto-size)")]
public int FixedHeight
{
get { return (_FixedHeight); }
set
{
if (value != _FixedHeight)
{
_FixedHeight = value;
OnPropertyChangedEx("FixedHeight", VisualChangeType.Layout);
}
}
}
#endregion
#region Text
/// <summary>
/// Gets or sets the item Text.
/// </summary>
[DefaultValue(null), Category("Appearance")]
[Description("Indicates the item Text.")]
[Editor("DevComponents.DotNetBar.Design.TextMarkupUIEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor))]
public string Text
{
get { return (_Text); }
set
{
_Text = value;
MarkupTextChanged();
OnPropertyChangedEx("Text", VisualChangeType.Layout);
}
}
#endregion
#endregion
#region Internal properties
#region TextMarkup
internal BodyElement TextMarkup
{
get { return (_TextMarkup); }
}
#endregion
#endregion
#region MeasureOverride
protected override void MeasureOverride(ChartLayoutInfo layoutInfo)
{
throw new NotImplementedException();
}
#endregion
#region ArrangeOverride
protected override void ArrangeOverride(ChartLayoutInfo layoutInfo)
{
throw new NotImplementedException();
}
#endregion
#region RenderOverride
protected override void RenderOverride(ChartRenderInfo renderInfo)
{
throw new NotImplementedException();
}
#endregion
#region Mouse handling
#region OnMouseEnter
protected override bool OnMouseEnter(EventArgs e)
{
return (true);
}
#endregion
#region OnMouseLeave
protected override bool OnMouseLeave(EventArgs e)
{
return (true);
}
#endregion
#region OnMouseMove
protected override bool OnMouseMove(MouseEventArgs e)
{
ChartCursor = Cursors.Default;
return (false);
}
#endregion
#region OnMouseDown
protected override bool OnMouseDown(MouseEventArgs e)
{
return (false);
}
#endregion
#region OnMouseUp
protected override bool OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
return (true);
}
#endregion
#endregion
#region Copy/CopyTo
public override ChartVisualElement Copy()
{
ChartNote copy = new ChartNote();
CopyTo(copy);
return (copy);
}
public override void CopyTo(ChartVisualElement copy)
{
ChartNote c = copy as ChartNote;
if (c != null)
{
base.CopyTo(c);
c.EnableTextMarkup = EnableTextMarkup;
c.FixedHeight = FixedHeight;
c.Text = Text;
}
}
#endregion
#region GetSerialData
internal override SerialElementCollection GetSerialData(string serialName)
{
SerialElementCollection sec = new SerialElementCollection();
if (serialName != null)
{
if (serialName.Equals("") == true)
serialName = "ChartNote";
sec.AddStartElement(serialName);
}
sec.AddValue("EnableTextMarkup", EnableTextMarkup, false);
sec.AddValue("FixedHeight", FixedHeight, 0);
sec.AddValue("Text", Text, null);
sec.AddElement(base.GetSerialData(null));
if (serialName != null)
sec.AddEndElement(serialName);
return (sec);
}
#endregion
#region PutSerialData
#region ProcessValue
internal override void ProcessValue(SerialElement se)
{
switch (se.Name)
{
case "EnableTextMarkup":
EnableTextMarkup = bool.Parse(se.StringValue);
break;
case "FixedHeight":
FixedHeight = int.Parse(se.StringValue);
break;
case "Text":
Text = se.StringValue;
break;
default:
base.ProcessValue(se);
break;
}
}
#endregion
#endregion
#region States
[Flags]
private enum States : uint
{
EnableTextMarkup = (1U << 0),
}
#region TestState
private bool TestState(States state)
{
return ((_States & state) == state);
}
#endregion
#region SetState
private void SetState(States state, bool value)
{
if (value == true)
_States |= state;
else
_States &= ~state;
}
#endregion
#endregion
}
}