354 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			354 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Text;
 | 
						|
using System.ComponentModel;
 | 
						|
using DevComponents.DotNetBar;
 | 
						|
using System.Windows.Forms;
 | 
						|
using System.Drawing;
 | 
						|
using System.Globalization;
 | 
						|
 | 
						|
namespace DevComponents.Editors.DateTimeAdv
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Represents a control that enables the user to select time using visual time display. 
 | 
						|
    /// </summary>
 | 
						|
    [ToolboxBitmap(typeof(DotNetBarManager), "TimeSelector.ico"), ToolboxItem(true), Designer("DevComponents.DotNetBar.Design.TimeSelectorDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf")]
 | 
						|
    [DefaultEvent("SelectedTimeChanged"), DefaultProperty("SelectedTime")]
 | 
						|
    public class TimeSelector : ItemControl
 | 
						|
    {
 | 
						|
         #region Private Variables
 | 
						|
        private TimeSelectorItem _TimeSelector = null;
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Events
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs after SelectedTime changes.
 | 
						|
        /// </summary>
 | 
						|
        [Description("Occurs after SelectedTime changes.")]
 | 
						|
        public event EventHandler SelectedTimeChanged;
 | 
						|
        /// <summary>
 | 
						|
        /// Raises SelectedTimeChanged event.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="e">Provides event arguments.</param>
 | 
						|
        protected virtual void OnSelectedTimeChanged(EventArgs e)
 | 
						|
        {
 | 
						|
            EventHandler handler = SelectedTimeChanged;
 | 
						|
            if (handler != null)
 | 
						|
                handler(this, e);
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when OK button is clicked.
 | 
						|
        /// </summary>
 | 
						|
        [Description("Occurs when OK button is clicked.")]
 | 
						|
        public event EventHandler OkClick;
 | 
						|
        /// <summary>
 | 
						|
        /// Raises OkClick event.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="e">Provides event arguments.</param>
 | 
						|
        protected virtual void OnOkClick(EventArgs e)
 | 
						|
        {
 | 
						|
            EventHandler handler = OkClick;
 | 
						|
            if (handler != null)
 | 
						|
                handler(this, e);
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Constructor
 | 
						|
        /// <summary>
 | 
						|
        /// Initializes a new instance of the MonthCalendarAdv class.
 | 
						|
        /// </summary>
 | 
						|
        public TimeSelector()
 | 
						|
        {
 | 
						|
            this.SetStyle(ControlStyles.Selectable, false);
 | 
						|
 | 
						|
            _TimeSelector = new TimeSelectorItem();
 | 
						|
            _TimeSelector.GlobalItem = false;
 | 
						|
            _TimeSelector.ContainerControl = this;
 | 
						|
            _TimeSelector.Stretch = false;
 | 
						|
            _TimeSelector.Displayed = true;
 | 
						|
            _TimeSelector.Style = eDotNetBarStyle.StyleManagerControlled;
 | 
						|
            this.ColorScheme.Style = eDotNetBarStyle.StyleManagerControlled;
 | 
						|
            _TimeSelector.SetOwner(this);
 | 
						|
 | 
						|
            _TimeSelector.SelectedTimeChanged += new EventHandler(TimeSelector_SelectedTimeChanged);
 | 
						|
            _TimeSelector.OkClick += new EventHandler(TimeSelector_OkClick);
 | 
						|
            this.SetBaseItemContainer(_TimeSelector);
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Internal Implementation
 | 
						|
        void TimeSelector_OkClick(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            OnOkClick(e);
 | 
						|
        }
 | 
						|
 | 
						|
        void TimeSelector_SelectedTimeChanged(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            OnSelectedTimeChanged(e);
 | 
						|
        }
 | 
						|
 | 
						|
        internal bool GetDesignModeInternal()
 | 
						|
        {
 | 
						|
            return DesignMode;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the text displayed on OK button.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue("OK"), Category("Appearance"), Description("Indicates text displayed on OK button."), Localizable(true)]
 | 
						|
        public string OkText
 | 
						|
        {
 | 
						|
            get { return _TimeSelector.OkText; }
 | 
						|
            set { _TimeSelector.OkText = value; }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether Ok button is visible.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(true), Category("Appearance"), Description("Indicates whether Ok button is visible.")]
 | 
						|
        public bool OkButtonVisible
 | 
						|
        {
 | 
						|
            get { return _TimeSelector.OkButtonVisible; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _TimeSelector.OkButtonVisible = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the selected date time.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public DateTime SelectedDateTime
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _TimeSelector.SelectedDateTime;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _TimeSelector.SelectedDateTime = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets selected time. Returns TimeSpan.Zero if there is no time selected.
 | 
						|
        /// </summary>
 | 
						|
        [Category("Data"), Description("Indicates selected time.")]
 | 
						|
        public TimeSpan SelectedTime
 | 
						|
        {
 | 
						|
            get { return _TimeSelector.SelectedTime; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _TimeSelector.SelectedTime = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Returns whether property should be serialized.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeSelectedTime()
 | 
						|
        {
 | 
						|
            return _TimeSelector.ShouldSerializeSelectedTime();
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Resets property to default value.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetSelectedTime()
 | 
						|
        {
 | 
						|
            _TimeSelector.ResetSelectedTime();
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the time format used to present time by the selector.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(eTimeSelectorFormat.System), Category("Appearance"), Description("Indicates time format used to present time by the selector."), Localizable(true)]
 | 
						|
        public eTimeSelectorFormat TimeFormat
 | 
						|
        {
 | 
						|
            get { return _TimeSelector.TimeFormat; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _TimeSelector.TimeFormat = value;
 | 
						|
                _PreferredSize = Size.Empty;
 | 
						|
                AdjustSize();
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the format for the 12 Hour Time Display.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(TimeSelectorItem.DefaultTimeFormat12H), Category("Data"), Description("Indicates format for the 12 Hour Time Display."), Localizable(true)]
 | 
						|
        public string TimeFormat12H
 | 
						|
        {
 | 
						|
            get { return _TimeSelector.TimeFormat12H; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _TimeSelector.TimeFormat12H = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the format for the 24 Hour Time Display.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(TimeSelectorItem.DefaultTimeFormat24H), Category("Data"), Description("Indicates format for the 24 Hour Time Display."), Localizable(true)]
 | 
						|
        public string TimeFormat24H
 | 
						|
        {
 | 
						|
            get { return _TimeSelector.TimeFormat24H; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _TimeSelector.TimeFormat24H = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private Size _PreferredSize = Size.Empty;
 | 
						|
        /// <summary>
 | 
						|
        /// Invalidates control auto-size and resizes the control if AutoSize is set to true.
 | 
						|
        /// </summary>
 | 
						|
        public void InvalidateAutoSize()
 | 
						|
        {
 | 
						|
            _PreferredSize = Size.Empty;
 | 
						|
            AdjustSize();
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false)]
 | 
						|
        public override string Text
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.Text;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.Text = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
#if FRAMEWORK20
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets a value indicating whether the control is automatically resized to display its entire contents. You can set MaximumSize.Width property to set the maximum width used by the control.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DefaultValue(false), EditorBrowsable(EditorBrowsableState.Always), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
 | 
						|
        public override bool AutoSize
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.AutoSize;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (this.AutoSize != value)
 | 
						|
                {
 | 
						|
                    base.AutoSize = value;
 | 
						|
                    AdjustSize();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void AdjustSize()
 | 
						|
        {
 | 
						|
            if (this.AutoSize)
 | 
						|
            {
 | 
						|
                this.Size = base.PreferredSize;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnFontChanged(EventArgs e)
 | 
						|
        {
 | 
						|
            InvalidateAutoSize();
 | 
						|
            base.OnFontChanged(e);
 | 
						|
        }
 | 
						|
 | 
						|
        public override Size GetPreferredSize(Size proposedSize)
 | 
						|
        {
 | 
						|
            if (!_PreferredSize.IsEmpty) return _PreferredSize;
 | 
						|
 | 
						|
            if (!BarFunctions.IsHandleValid(this))
 | 
						|
                return base.GetPreferredSize(proposedSize);
 | 
						|
 | 
						|
            ElementStyle style = this.GetBackgroundStyle();
 | 
						|
 | 
						|
            _TimeSelector.RecalcSize();
 | 
						|
            _PreferredSize = _TimeSelector.Size;
 | 
						|
            if (style != null)
 | 
						|
            {
 | 
						|
                _PreferredSize.Width += ElementStyleLayout.HorizontalStyleWhiteSpace(style);
 | 
						|
                _PreferredSize.Height += ElementStyleLayout.VerticalStyleWhiteSpace(style);
 | 
						|
            }
 | 
						|
 | 
						|
            return _PreferredSize;
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
 | 
						|
        {
 | 
						|
            if (this.AutoSize)
 | 
						|
            {
 | 
						|
                Size preferredSize = base.PreferredSize;
 | 
						|
                width = preferredSize.Width;
 | 
						|
                height = preferredSize.Height;
 | 
						|
            }
 | 
						|
            base.SetBoundsCore(x, y, width, height, specified);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnHandleCreated(EventArgs e)
 | 
						|
        {
 | 
						|
            if (this.AutoSize)
 | 
						|
                this.AdjustSize();
 | 
						|
            base.OnHandleCreated(e);
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false)]
 | 
						|
        public override bool ThemeAware
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.ThemeAware;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.ThemeAware = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
#endif
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates the type of the selector used to select time.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(eTimeSelectorType.TouchStyle), Category("Appearance"), Description("Indicates the type of the selector used to select time.")]
 | 
						|
        public eTimeSelectorType SelectorType
 | 
						|
        {
 | 
						|
            get { return _TimeSelector.SelectorType; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _TimeSelector.SelectorType = value;
 | 
						|
                _PreferredSize = Size.Empty;
 | 
						|
                AdjustSize();
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the text displayed on Clear button only when MonthCalendarStyle is used.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue("Clear"), Category("Appearance"), Description("Indicates text displayed on Clear button only when MonthCalendarStyle is used."), Localizable(true)]
 | 
						|
        public string ClearText
 | 
						|
        {
 | 
						|
            get { return _TimeSelector.ClearText; }
 | 
						|
            set { _TimeSelector.ClearText = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the text displayed on Hour label.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue("Hour"), Category("Appearance"), Description("Indicates text displayed on Hour label."), Localizable(true)]
 | 
						|
        public string HourText
 | 
						|
        {
 | 
						|
            get { return _TimeSelector.HourText; }
 | 
						|
            set { _TimeSelector.HourText = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the text displayed on Minute label.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue("Minute"), Category("Appearance"), Description("Indicates text displayed on Minute label."), Localizable(true)]
 | 
						|
        public string MinuteText
 | 
						|
        {
 | 
						|
            get { return _TimeSelector.MinuteText; }
 | 
						|
            set { _TimeSelector.MinuteText = value; }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
    }
 | 
						|
}
 |