773 lines
27 KiB
C#
773 lines
27 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
|
|
namespace DevComponents.DotNetBar.Controls
|
|
{
|
|
/// <summary>
|
|
/// Represents the panel which can slide out and into the view.
|
|
/// </summary>
|
|
[ToolboxBitmap(typeof(CircularProgress), "Controls.SlidePanel.ico"), ToolboxItem(true), Designer("DevComponents.DotNetBar.Design.SlidePanelDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf")]
|
|
public class SlidePanel : UserControl
|
|
{
|
|
internal const int DefaultAnimationTime = 500;
|
|
#region Events
|
|
/// <summary>
|
|
/// Occurs when IsOpen property value has changed, i.e. slide-panel is shown or hidden.
|
|
/// </summary>
|
|
[Description("Occurs when IsOpen property value has changed, i.e. slide-panel is shown or hidden.")]
|
|
public event EventHandler IsOpenChanged;
|
|
/// <summary>
|
|
/// Raises IsOpenChanged event.
|
|
/// </summary>
|
|
/// <param name="e">Provides event arguments.</param>
|
|
protected virtual void OnIsOpenChanged(EventArgs e)
|
|
{
|
|
EventHandler handler = IsOpenChanged;
|
|
if (handler != null)
|
|
handler(this, e);
|
|
}
|
|
#endregion
|
|
|
|
#region Constructor
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
DisposeSlideOutButton();
|
|
base.Dispose(disposing);
|
|
}
|
|
#endregion
|
|
|
|
#region Implementation
|
|
|
|
private eSlideSide _SlideSide = eSlideSide.Left;
|
|
/// <summary>
|
|
/// Gets or sets side panel slides into.
|
|
/// </summary>
|
|
[DefaultValue(eSlideSide.Left), Category("Behavior"), Description("Indicates side panel slides into.")]
|
|
public eSlideSide SlideSide
|
|
{
|
|
get { return _SlideSide; }
|
|
set
|
|
{
|
|
if (value != _SlideSide)
|
|
{
|
|
eSlideSide oldValue = _SlideSide;
|
|
_SlideSide = value;
|
|
OnSlideSideChanged(oldValue, value);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Called when SlideSide property has changed.
|
|
/// </summary>
|
|
/// <param name="oldValue">Old property value</param>
|
|
/// <param name="newValue">New property value</param>
|
|
protected virtual void OnSlideSideChanged(eSlideSide oldValue, eSlideSide newValue)
|
|
{
|
|
//OnPropertyChanged(new PropertyChangedEventArgs("SlideSide"));
|
|
if (!this.IsOpen)
|
|
{
|
|
WaitForCurrentAnimationFinish();
|
|
this.Bounds = GetSlideOutBounds(this.Parent, _OpenBounds);
|
|
|
|
if (_SlideOutButtonVisible)
|
|
CreateSlideOutButton();
|
|
}
|
|
}
|
|
|
|
private bool _IsOpen = true;
|
|
/// <summary>
|
|
/// Gets or sets whether panel is open. When this property is changed panel will slide in or out of the view.
|
|
/// </summary>
|
|
[Browsable(false), DefaultValue(true), Description("Indicates whether panel is open. When this property is changed panel will slide in or out of the view.")]
|
|
public bool IsOpen
|
|
{
|
|
get { return _IsOpen; }
|
|
set
|
|
{
|
|
if (_UsesBlockingAnimation && _CurrentAnimation != null || _IsWaiting) return;
|
|
if (value != _IsOpen)
|
|
{
|
|
bool oldValue = _IsOpen;
|
|
_IsOpen = value;
|
|
OnIsOpenChanged(oldValue, value);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Called when IsOpen property has changed.
|
|
/// </summary>
|
|
/// <param name="oldValue">Old property value</param>
|
|
/// <param name="newValue">New property value</param>
|
|
protected virtual void OnIsOpenChanged(bool oldValue, bool newValue)
|
|
{
|
|
//OnPropertyChanged(new PropertyChangedEventArgs("IsOpen"));
|
|
if (!newValue)
|
|
SlideOutOfView();
|
|
else
|
|
SlideIntoView();
|
|
OnIsOpenChanged(EventArgs.Empty);
|
|
}
|
|
|
|
private bool _UsesBlockingAnimation = false;
|
|
/// <summary>
|
|
/// Gets or sets whether panel uses modal animation, meaning when IsOpen property is set the call is not returned until animation is complete.
|
|
/// </summary>
|
|
[Browsable(false)]
|
|
public bool UsesBlockingAnimation
|
|
{
|
|
get { return _UsesBlockingAnimation; }
|
|
set
|
|
{
|
|
_UsesBlockingAnimation = value;
|
|
}
|
|
}
|
|
|
|
private Rectangle _OpenBounds = Rectangle.Empty;
|
|
/// <summary>
|
|
/// Gets or sets the open panel bounds. When control IsOpen=false and panel is collapsed its original bounds are stored in OpenBounds property and restored once panel is open.
|
|
/// </summary>
|
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
|
public Rectangle OpenBounds
|
|
{
|
|
get { return _OpenBounds; }
|
|
set
|
|
{
|
|
_OpenBounds = value;
|
|
if (!this.Visible && this.Bounds.Size != _OpenBounds.Size)
|
|
this.Bounds = GetSlideOutBounds(this.Parent, _OpenBounds);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Slides panel into the view.
|
|
/// </summary>
|
|
private void SlideIntoView()
|
|
{
|
|
Animation.Animation current = _CurrentAnimation;
|
|
if (current != null)
|
|
{
|
|
current.Stop();
|
|
WaitForCurrentAnimationFinish();
|
|
}
|
|
|
|
Rectangle bounds = this.Bounds;
|
|
Rectangle targetBounds = _OpenBounds;
|
|
if (_SlideOutButton != null) _SlideOutButton.Visible = false;
|
|
|
|
if (_AnimationTime > 0)
|
|
{
|
|
_IsAnimating = true;
|
|
//BarFunctions.AnimateControl(this, true, _AnimationTime, bounds, targetBounds);
|
|
this.Visible = true;
|
|
Animation.AnimationRectangle anim = new DevComponents.DotNetBar.Animation.AnimationRectangle(
|
|
new Animation.AnimationRequest(this, "Bounds", bounds, targetBounds),
|
|
Animation.AnimationEasing.EaseOutExpo, _AnimationTime);
|
|
anim.AnimationCompleted += new EventHandler(AnimationCompleted);
|
|
anim.Start();
|
|
_CurrentAnimation = anim;
|
|
}
|
|
else
|
|
this.Bounds = targetBounds;
|
|
if (_SlideOutButtonVisible && _SlideOutButton != null)
|
|
{
|
|
DisposeSlideOutButton();
|
|
}
|
|
}
|
|
|
|
internal void AbortAnimation()
|
|
{
|
|
Animation.Animation anim = _CurrentAnimation;
|
|
_CurrentAnimation = null;
|
|
if (anim != null)
|
|
{
|
|
anim.Stop();
|
|
anim.Dispose();
|
|
//Console.WriteLine("{0} Animation Forcefully Stopped", DateTime.Now);
|
|
}
|
|
}
|
|
|
|
private bool _IsWaiting = false;
|
|
/// <summary>
|
|
/// Waits for current slide animation to finish and then returns control.
|
|
/// </summary>
|
|
public void WaitForCurrentAnimationFinish()
|
|
{
|
|
if (_IsWaiting) return;
|
|
|
|
_IsWaiting = true;
|
|
try
|
|
{
|
|
if (_CurrentAnimation == null) return;
|
|
DateTime start = DateTime.Now;
|
|
while (_CurrentAnimation != null)
|
|
{
|
|
Application.DoEvents();
|
|
if (DateTime.Now.Subtract(start).TotalMilliseconds > _AnimationTime * 1.5f)
|
|
{
|
|
AbortAnimation();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
_IsWaiting = false;
|
|
}
|
|
}
|
|
private void DisposeSlideOutButton()
|
|
{
|
|
if (_SlideOutButton == null) return;
|
|
|
|
Control parent = _SlideOutButton.Parent;
|
|
if (parent != null)
|
|
{
|
|
parent.Resize -= ParentResize;
|
|
parent.Controls.Remove(_SlideOutButton);
|
|
}
|
|
_SlideOutButton.Dispose();
|
|
_SlideOutButton = null;
|
|
}
|
|
|
|
private Animation.Animation _CurrentAnimation = null;
|
|
/// <summary>
|
|
/// Slides panel out of the view.
|
|
/// </summary>
|
|
private void SlideOutOfView()
|
|
{
|
|
Animation.Animation current = _CurrentAnimation;
|
|
if (current != null)
|
|
{
|
|
current.Stop();
|
|
WaitForCurrentAnimationFinish();
|
|
}
|
|
|
|
Rectangle bounds = this.Bounds;
|
|
Rectangle targetBounds = GetSlideOutBounds();
|
|
|
|
if (_AnimationTime > 0 && this.Visible)
|
|
{
|
|
_IsAnimating = true;
|
|
//BarFunctions.AnimateControl(this, true, _AnimationTime, bounds, targetBounds);
|
|
Animation.AnimationRectangle anim = new DevComponents.DotNetBar.Animation.AnimationRectangle(
|
|
new Animation.AnimationRequest(this, "Bounds", bounds, targetBounds),
|
|
Animation.AnimationEasing.EaseOutExpo, _AnimationTime);
|
|
anim.AnimationCompleted += new EventHandler(AnimationCompleted);
|
|
anim.Start();
|
|
_CurrentAnimation = anim;
|
|
//this.Visible = false;
|
|
}
|
|
else
|
|
this.Bounds = targetBounds;
|
|
_OpenBounds = bounds;
|
|
|
|
if (_SlideOutButtonVisible)
|
|
CreateSlideOutButton();
|
|
}
|
|
|
|
private bool _IsAnimating = false;
|
|
internal bool IsAnimating
|
|
{
|
|
get
|
|
{
|
|
return _IsAnimating;
|
|
}
|
|
}
|
|
|
|
private void AnimationCompleted(object sender, EventArgs e)
|
|
{
|
|
//Console.WriteLine("{0} Animation Completed", DateTime.Now);
|
|
Animation.Animation anim = _CurrentAnimation;
|
|
_CurrentAnimation = null;
|
|
if (anim != null)
|
|
anim.Dispose();
|
|
if (!_IsOpen)
|
|
{
|
|
this.Visible = false;
|
|
}
|
|
_IsAnimating = false;
|
|
}
|
|
public void SlideOutOfViewSilent(Control parent)
|
|
{
|
|
_OpenBounds = this.Bounds;
|
|
this.Bounds = GetSlideOutBounds(parent);
|
|
_IsOpen = false;
|
|
}
|
|
|
|
private SliderButton _SlideOutButton = null;
|
|
private void CreateSlideOutButton()
|
|
{
|
|
DisposeSlideOutButton();
|
|
Control parent = this.Parent;
|
|
if (parent == null) return;
|
|
|
|
_SlideOutButton = new SliderButton(this);
|
|
if (_SlideOutButtonStyle != null)
|
|
_SlideOutButton.Style = _SlideOutButtonStyle;
|
|
else
|
|
_SlideOutButton.Style = new ElementStyle(DevComponents.DotNetBar.Rendering.ElementStyleClassKeys.SlideOutButtonKey);
|
|
|
|
Size activeSlideOutSize = Dpi.Size(_SlideOutActiveButtonSize);
|
|
Size slideOutSize = Dpi.Size(_SlideOutButtonSize);
|
|
if (_SlideSide == eSlideSide.Top || _SlideSide == eSlideSide.Bottom) // Flip width/height
|
|
{
|
|
activeSlideOutSize = new Size(activeSlideOutSize.Height, activeSlideOutSize.Width);
|
|
slideOutSize = new Size(slideOutSize.Height, slideOutSize.Width);
|
|
}
|
|
_SlideOutButton.ActiveSliderSize = activeSlideOutSize;
|
|
_SlideOutButton.SliderSize = slideOutSize;
|
|
_SlideOutButton.Symbol = _Symbol;
|
|
_SlideOutButton.SymbolColor = _SymbolColor;
|
|
_SlideOutButton.SymbolSet = _SymbolSet;
|
|
_SlideOutButton.SymbolSize = _SymbolSize;
|
|
parent.Controls.Add(_SlideOutButton);
|
|
parent.Controls.SetChildIndex(_SlideOutButton, 0);
|
|
parent.Resize += ParentResize;
|
|
}
|
|
|
|
private void ParentResize(object sender, EventArgs e)
|
|
{
|
|
if (_SlideOutButton != null) _SlideOutButton.UpdatePosition();
|
|
}
|
|
|
|
private Rectangle GetSlideOutBounds()
|
|
{
|
|
return GetSlideOutBounds(this.Parent);
|
|
}
|
|
private Rectangle GetSlideOutBounds(Control parent)
|
|
{
|
|
return GetSlideOutBounds(parent, this.Bounds);
|
|
}
|
|
private Rectangle GetSlideOutBounds(Control parent, Rectangle panelBounds)
|
|
{
|
|
if (parent == null) return panelBounds;
|
|
|
|
Rectangle r = panelBounds;
|
|
if (_SlideSide == eSlideSide.Left)
|
|
{
|
|
r.X = -r.Width;
|
|
}
|
|
else if (_SlideSide == eSlideSide.Right)
|
|
{
|
|
r.X = parent.Width;
|
|
}
|
|
else if (_SlideSide == eSlideSide.Top)
|
|
{
|
|
r.Y = -r.Height;
|
|
}
|
|
else if (_SlideSide == eSlideSide.Bottom)
|
|
{
|
|
r.Y = parent.Height;
|
|
}
|
|
return r;
|
|
}
|
|
|
|
private int _AnimationTime = DefaultAnimationTime;
|
|
/// <summary>
|
|
/// Gets or sets the animation duration time in milliseconds. Setting this property to 0 will disable slide animation.
|
|
/// </summary>
|
|
[DefaultValue(DefaultAnimationTime), Category("Behavior"), Description("Indicates animation duration time in milliseconds. Setting this property to 0 will disable slide animation.")]
|
|
public int AnimationTime
|
|
{
|
|
get { return _AnimationTime; }
|
|
set
|
|
{
|
|
if (value != _AnimationTime)
|
|
{
|
|
int oldValue = _AnimationTime;
|
|
_AnimationTime = value;
|
|
OnAnimationTimeChanged(oldValue, value);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Called when AnimationTime property has changed.
|
|
/// </summary>
|
|
/// <param name="oldValue">Old property value</param>
|
|
/// <param name="newValue">New property value</param>
|
|
protected virtual void OnAnimationTimeChanged(int oldValue, int newValue)
|
|
{
|
|
//OnPropertyChanged(new PropertyChangedEventArgs("AnimationTime"));
|
|
|
|
}
|
|
|
|
private bool _SlideOutButtonVisible = true;
|
|
/// <summary>
|
|
/// Gets or sets whether slide out button is shown when panel is out of the view and which allows panel to be shown.
|
|
/// </summary>
|
|
[DefaultValue(true), Category("Behavior"), Description("Indicates whether slide out button is shown when panel is out of the view and which allows panel to be shown.")]
|
|
public bool SlideOutButtonVisible
|
|
{
|
|
get { return _SlideOutButtonVisible; }
|
|
set
|
|
{
|
|
if (value != _SlideOutButtonVisible)
|
|
{
|
|
bool oldValue = _SlideOutButtonVisible;
|
|
_SlideOutButtonVisible = value;
|
|
OnSlideOutButtonVisibleChanged(oldValue, value);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Called when SlideOutButtonVisible property has changed.
|
|
/// </summary>
|
|
/// <param name="oldValue">Old property value</param>
|
|
/// <param name="newValue">New property value</param>
|
|
protected virtual void OnSlideOutButtonVisibleChanged(bool oldValue, bool newValue)
|
|
{
|
|
//OnPropertyChanged(new PropertyChangedEventArgs("SlideOutButtonVisible"));
|
|
if (_IsOpen) return;
|
|
if (newValue)
|
|
CreateSlideOutButton();
|
|
else
|
|
DisposeSlideOutButton();
|
|
}
|
|
|
|
private Size _SlideOutButtonSize = SliderButton.DefaultSliderSize;
|
|
/// <summary>
|
|
/// Gets or sets the slide-out buttton size in default state.
|
|
/// </summary>
|
|
[Category("Appearance"), Description("Indicates slide-out buttton size in default state.")]
|
|
public Size SlideOutButtonSize
|
|
{
|
|
get { return _SlideOutButtonSize; }
|
|
set
|
|
{
|
|
if (value != _SlideOutButtonSize)
|
|
{
|
|
Size oldValue = _SlideOutButtonSize;
|
|
_SlideOutButtonSize = value;
|
|
OnSlideOutButtonSizeChanged(oldValue, value);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Called when SlideOutButtonSize property has changed.
|
|
/// </summary>
|
|
/// <param name="oldValue">Old property value</param>
|
|
/// <param name="newValue">New property value</param>
|
|
protected virtual void OnSlideOutButtonSizeChanged(Size oldValue, Size newValue)
|
|
{
|
|
//OnPropertyChanged(new PropertyChangedEventArgs("SlideOutButtonSize"));
|
|
if (_SlideOutButton != null)
|
|
{
|
|
_SlideOutButton.SliderSize = newValue;
|
|
_SlideOutButton.UpdatePosition();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Returns whether property should be serialized.
|
|
/// </summary>
|
|
public bool ShouldSerializeSlideOutButtonSize()
|
|
{
|
|
return _SlideOutButtonSize != SliderButton.DefaultSliderSize;
|
|
}
|
|
/// <summary>
|
|
/// Resets property to default value.
|
|
/// </summary>
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
public void ResetSlideOutButtonSize()
|
|
{
|
|
SlideOutButtonSize = SliderButton.DefaultSliderSize;
|
|
}
|
|
|
|
private Size _SlideOutActiveButtonSize = SliderButton.DefaultActiveSliderSize;
|
|
/// <summary>
|
|
/// Gets or sets active (mouse over) slide out button size.
|
|
/// </summary>
|
|
[Category("Appearance"), Description("Indicates active (mouse over) slide out button size.")]
|
|
public Size SlideOutActiveButtonSize
|
|
{
|
|
get { return _SlideOutActiveButtonSize; }
|
|
set
|
|
{
|
|
if (value != _SlideOutActiveButtonSize)
|
|
{
|
|
Size oldValue = _SlideOutActiveButtonSize;
|
|
_SlideOutActiveButtonSize = value;
|
|
OnSlideOutActiveButtonSizeChanged(oldValue, value);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Called when SlideOutActiveButtonSize property has changed.
|
|
/// </summary>
|
|
/// <param name="oldValue">Old property value</param>
|
|
/// <param name="newValue">New property value</param>
|
|
protected virtual void OnSlideOutActiveButtonSizeChanged(Size oldValue, Size newValue)
|
|
{
|
|
//OnPropertyChanged(new PropertyChangedEventArgs("SlideOutActiveButtonSize"));
|
|
if (_SlideOutButton != null)
|
|
{
|
|
_SlideOutButton.ActiveSliderSize = newValue;
|
|
_SlideOutButton.UpdatePosition();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Returns whether property should be serialized.
|
|
/// </summary>
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
public bool ShouldSerializeSlideOutActiveButtonSize()
|
|
{
|
|
return _SlideOutActiveButtonSize != SliderButton.DefaultActiveSliderSize;
|
|
}
|
|
/// <summary>
|
|
/// Resets property to default value.
|
|
/// </summary>
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
public void ResetSlideOutActiveButtonSize()
|
|
{
|
|
SlideOutActiveButtonSize = SliderButton.DefaultActiveSliderSize;
|
|
}
|
|
|
|
private ElementStyle _SlideOutButtonStyle = null;
|
|
/// <summary>
|
|
/// Gets or sets slide-out button style.
|
|
/// </summary>
|
|
[DefaultValue(null), Category("Appearance"), Description("Indicates slide-out button style.")]
|
|
public ElementStyle SlideOutButtonStyle
|
|
{
|
|
get { return _SlideOutButtonStyle; }
|
|
set
|
|
{
|
|
if (value != _SlideOutButtonStyle)
|
|
{
|
|
ElementStyle oldValue = _SlideOutButtonStyle;
|
|
_SlideOutButtonStyle = value;
|
|
OnSlideOutButtonStyleChanged(oldValue, value);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Called when SlideOutButtonStyle property has changed.
|
|
/// </summary>
|
|
/// <param name="oldValue">Old property value</param>
|
|
/// <param name="newValue">New property value</param>
|
|
protected virtual void OnSlideOutButtonStyleChanged(ElementStyle oldValue, ElementStyle newValue)
|
|
{
|
|
if (newValue != null)
|
|
{
|
|
if (_SlideOutButton != null)
|
|
_SlideOutButton.Style = newValue;
|
|
}
|
|
//OnPropertyChanged(new PropertyChangedEventArgs("SlideOutButtonStyle"));
|
|
}
|
|
|
|
private bool _CenterContent = false;
|
|
/// <summary>
|
|
/// Gets or sets whether panel centers the Controls inside of it. Default value is false.
|
|
/// </summary>
|
|
internal bool CenterContent
|
|
{
|
|
get { return _CenterContent; }
|
|
set
|
|
{
|
|
if (value != _CenterContent)
|
|
{
|
|
bool oldValue = _CenterContent;
|
|
_CenterContent = value;
|
|
OnCenterContentChanged(oldValue, value);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Called when CenterContent property has changed.
|
|
/// </summary>
|
|
/// <param name="oldValue">Old property value</param>
|
|
/// <param name="newValue">New property value</param>
|
|
protected virtual void OnCenterContentChanged(bool oldValue, bool newValue)
|
|
{
|
|
//OnPropertyChanged(new PropertyChangedEventArgs("CenterContent"));
|
|
if (newValue)
|
|
CenterControls();
|
|
}
|
|
|
|
protected override void OnResize(EventArgs e)
|
|
{
|
|
if (_CenterContent)
|
|
CenterControls();
|
|
base.OnResize(e);
|
|
}
|
|
|
|
protected override void OnControlAdded(ControlEventArgs e)
|
|
{
|
|
if (_CenterContent)
|
|
CenterControl(e.Control);
|
|
base.OnControlAdded(e);
|
|
}
|
|
|
|
private void CenterControl(Control item)
|
|
{
|
|
Point loc = new Point(Math.Max(0, (this.Width - item.Width) / 2), Math.Max(0, (this.Height - item.Height) / 2));
|
|
if (item.Location != loc)
|
|
item.Location = loc;
|
|
}
|
|
private void CenterControls()
|
|
{
|
|
foreach (Control item in this.Controls)
|
|
{
|
|
CenterControl(item);
|
|
}
|
|
}
|
|
|
|
[Browsable(true), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible), EditorBrowsable(EditorBrowsableState.Always), Bindable(true)]
|
|
public override string Text
|
|
{
|
|
get
|
|
{
|
|
return base.Text;
|
|
}
|
|
set
|
|
{
|
|
base.Text = value;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private Color _SymbolColor = Color.Empty;
|
|
/// <summary>
|
|
/// Gets or sets the color of the Symbol displayed on slideout button.
|
|
/// </summary>
|
|
[Category("Appearance"), Description("Indicates color of the Symbol displayed on slideout button.")]
|
|
public Color SymbolColor
|
|
{
|
|
get { return _SymbolColor; }
|
|
set { _SymbolColor = value; this.Invalidate(); }
|
|
}
|
|
/// <summary>
|
|
/// Gets whether property should be serialized.
|
|
/// </summary>
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
public bool ShouldSerializeSymbolColor()
|
|
{
|
|
return !_SymbolColor.IsEmpty;
|
|
}
|
|
/// <summary>
|
|
/// Resets property to its default value.
|
|
/// </summary>
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
public void ResetSymbolColor()
|
|
{
|
|
this.SymbolColor = Color.Empty;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the realized symbol string.
|
|
/// </summary>
|
|
[Browsable(false)]
|
|
public string SymbolRealized
|
|
{
|
|
get { return _SymbolRealized; }
|
|
}
|
|
private string _Symbol = "", _SymbolRealized = "";
|
|
/// <summary>
|
|
/// Indicates the symbol displayed on face of the slideout button.
|
|
/// </summary>
|
|
[DefaultValue(""), Category("Appearance"), Description("Indicates the symbol displayed on face of the slideout button.")]
|
|
[Editor("DevComponents.DotNetBar.Design.SymbolTypeEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor))]
|
|
public string Symbol
|
|
{
|
|
get { return _Symbol; }
|
|
set
|
|
{
|
|
if (value != _Symbol)
|
|
{
|
|
string oldValue = _Symbol;
|
|
_Symbol = value;
|
|
OnSymbolChanged(oldValue, value);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Called when Symbol property has changed.
|
|
/// </summary>
|
|
/// <param name="oldValue">Old property value</param>
|
|
/// <param name="newValue">New property value</param>
|
|
protected virtual void OnSymbolChanged(string oldValue, string newValue)
|
|
{
|
|
if (string.IsNullOrEmpty(newValue))
|
|
_SymbolRealized = "";
|
|
else
|
|
_SymbolRealized = Symbols.GetSymbol(newValue);
|
|
this.Invalidate();
|
|
}
|
|
|
|
private eSymbolSet _SymbolSet = eSymbolSet.Awesome;
|
|
/// <summary>
|
|
/// Gets or sets the symbol set used to represent the Symbol.
|
|
/// </summary>
|
|
[Browsable(false), DefaultValue(eSymbolSet.Awesome)]
|
|
public eSymbolSet SymbolSet
|
|
{
|
|
get { return _SymbolSet; }
|
|
set
|
|
{
|
|
if (_SymbolSet != value)
|
|
{
|
|
eSymbolSet oldValue = _SymbolSet;
|
|
_SymbolSet = value;
|
|
OnSymbolSetChanged(oldValue, value);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Called when SymbolSet property value changes.
|
|
/// </summary>
|
|
/// <param name="oldValue">Indciates old value</param>
|
|
/// <param name="newValue">Indicates new value</param>
|
|
protected virtual void OnSymbolSetChanged(eSymbolSet oldValue, eSymbolSet newValue)
|
|
{
|
|
this.Invalidate();
|
|
this.Refresh();
|
|
}
|
|
|
|
|
|
private float _SymbolSize = 10f;
|
|
/// <summary>
|
|
/// Indicates the size of the symbol in points.
|
|
/// </summary>
|
|
[DefaultValue(10f), Category("Appearance"), Description("Indicates the size of the symbol in points.")]
|
|
public float SymbolSize
|
|
{
|
|
get { return _SymbolSize; }
|
|
set
|
|
{
|
|
if (value != _SymbolSize)
|
|
{
|
|
float oldValue = _SymbolSize;
|
|
_SymbolSize = value;
|
|
OnSymbolSizeChanged(oldValue, value);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Called when SymbolSize property has changed.
|
|
/// </summary>
|
|
/// <param name="oldValue">Old property value</param>
|
|
/// <param name="newValue">New property value</param>
|
|
protected virtual void OnSymbolSizeChanged(float oldValue, float newValue)
|
|
{
|
|
this.Invalidate();
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
/// <summary>
|
|
/// Defines the side SlidePanel slides into.
|
|
/// </summary>
|
|
public enum eSlideSide
|
|
{
|
|
Left,
|
|
Right,
|
|
Top,
|
|
Bottom
|
|
}
|
|
}
|