using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Drawing;
namespace TrendCtrlII
{
    [TypeConverterAttribute(typeof(ExpandableObjectConverter))]
    public class ChartStyle
    {
        //XÃàÀÇ ¿øº» °ª
        private Int64 _X1;
        private Int64 _X2;
        //½ÇÁ¦È¸é¿¡ Ç¥½ÃµÇ´Â µ¥ÀÌÅÍ
        private Int64 _XV1;
        private Int64 _XV2;
        //½ÇÁ¦È¸é¿¡ Ç¥½ÃµÇ´Â µ¥ÀÌÅÍÀÇ ¿øº»°ª
        public Int64 XV1o;
        public Int64 XV2o;
        //YÃàÀÇ ¿øº»°ª
        private Single _Y1;
        private Single _Y2;
        //½ÇÁ¦È¸é¿¡ Ç¥½ÃµÇ´Â µ¥ÀÌÅÍ
        private Single _YV1 = 1;
        private Single _YV2 = 3;
        //½ÇÁ¦È¸é¿¡ Ç¥½ÃµÇ´Â µ¥ÀÌÅÍÀÇ ¿øº»°ª
        public Single YV1o = 1;
        public Single YV2o = 3;
        //
        private Boolean _datapoint = false;
        private Font _yfont = new Font("³ª´®°íµñ", 12, FontStyle.Bold);
        public int _ZoneMarginX = 50;
        public int _ZoneMarginY = 50;
        //public Color design_backcolor = Color.White;
        public Color design_mouseinfocolor = Color.Black;
       // public int _xterm = 1800;
        private Font _xfont = new Font("³ª´®°íµñ", 8, FontStyle.Bold);
        public Font _mouseinfofont = new Font("³ª´®°íµñ", 12, FontStyle.Bold);
        private Boolean showdebug = false;
       // private short defaultviewhour = 3;
        public event OnUpdateinfoHandler OnUpdateinfo; //UPDATE USER CURSOR
        public delegate void OnUpdateinfoHandler();
        public Boolean UseZoomX { get; set; }
        public Boolean UseZoomY { get; set; }
        public UInt16 MaxZoomX { get; set; }
        public Single MaxZoomY { get; set; }
        public String UnitY { get; set; }
        public String UnitX { get; set; }
        public ChartStyle()
        {
            MaxZoomX = 10;
            MaxZoomY = 0.01f;
            UseZoomX = true;
            UseZoomY = true;
            UnitY = "Volt";
            UnitX = "Sec";
            XÇ¥½Ã¹üÀ§ = 0;  //±âº»Àüüǥ½Ã¸ðµå·Î Àüȯ
            XGap = 0; //±âº» XÃà Ç¥½Ã°£°ÝÀº ÀÚµ¿À¸·Î
            YGap = 0;   //±âº» YÃà Ç¥½Ã°£°ÝÀº ÀÚµ¿À¸·Î
        }
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("XÃà(½Ã°£)"), Description("XÃà¿¡ Ç¥½ÃµÇ´Â ½Ã°£ÀÇ Ç¥½Ã°£°Ý (0Àº ÀÚµ¿)")]
        public int XGap { get; set; }
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("YÃà"), Description("YÃà¿¡ Ç¥½ÃµÇ´Â Ç¥½Ã°£°Ý (0Àº ÀÚµ¿)")]
        public Single YGap { get; set; }
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("YÃà(VOLT)"), Description("YÃà¿¡ Ç¥½ÃµÇ´Â VOLTÀÇ Ç¥½Ã°£°ÝÀ» ÀÔ·ÂÇϼ¼¿ä.")]
        public Font FontY
        {
            get { return _yfont; }
            set
            {
                _yfont = value;
                if (OnUpdateinfo != null) OnUpdateinfo();
            }
        }
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("XÃà(½Ã°£)"), Description("°¡·ÎÃà¿¡ Ç¥½ÃµÇ´Â ±Û²ÃÀ» ¼±ÅÃÇϼ¼¿ä.")]
        public Font FontX
        {
            get { return _xfont; }
            set
            {
                _xfont = value;
                if (OnUpdateinfo != null) OnUpdateinfo();
            }
        }
        private Int32 _xterm = 0;
        
        /// 
        /// XÃàÀÇ Ç¥½Ã¹üÀ§°ª(ÃÊ) ÁöÁ¤µÈ ½Ã°£(ÃÊ)ÀÇ µ¥ÀÌÅ͸¸ ȸ鿡 Ç¥½ÃµË´Ï´Ù. ÀÌ °ªÀÌ 0ÀÏ °æ¿ì Á¦ÇÑÀÌ ¾øÀ½ÀÌ µÇ¸ç ¸¸¾à ÀÌ °ªÀÌ ¼³Á¤µÇ¾îÀÖ´Ù¸é ½Ç½Ã°£¸ðµåó·³ ÀÛµ¿ÇÏ°Ô µË´Ï´Ù.
        /// 
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("Á¶È¸"), Description("XÃàÀÇ Ç¥½Ã¹üÀ§°ª(ÃÊ) ÁöÁ¤µÈ ½Ã°£(ÃÊ)ÀÇ µ¥ÀÌÅ͸¸ ȸ鿡 Ç¥½ÃµË´Ï´Ù. ÀÌ °ªÀÌ 0ÀÏ °æ¿ì Á¦ÇÑÀÌ ¾øÀ½ÀÌ µÇ¸ç ¸¸¾à ÀÌ °ªÀÌ ¼³Á¤µÇ¾îÀÖ´Ù¸é ½Ç½Ã°£¸ðµåó·³ ÀÛµ¿ÇÏ°Ô µË´Ï´Ù.")]
        public Int32 XÇ¥½Ã¹üÀ§ {
            get { return _xterm; }
            set {
                _xterm = value;
                
                //ÇöÀç ¿µ¿ªÀ» È®ÀÎÇÏ°í ³Ñ´Â´Ù¸é ¾ÕºÎºÐÀ» ÀÚ¸¥´Ù.
                if(value != 0 )
                {
                    TimeSpan ts = DateTime.FromFileTime(X2) - DateTime.FromFileTime(X1);
                    if (ts.TotalSeconds > value) {
                        DateTime NewEd = DateTime.FromFileTime(X2);
                        DateTime NewSd = NewEd.AddSeconds(-1 * value);
                        
                        if (NewSd > DateTime.Now)
                        {
                            NewSd = DateTime.Now;
                            NewEd = NewSd.AddSeconds(value);
                        } 
                        X1 = NewSd.ToFileTime();
                        X2 = NewEd.ToFileTime();                        
                    }
                }
            }
        }
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("±âŸ"), Description("µ¥ÀÌÅÍÆ÷ÀÎÅ͸¦ Ç¥½ÃÇÕ´Ï´Ù.")]
        public Boolean Show_DataPoint {
            get { return _datapoint; }
            set { _datapoint = value;
            if (OnUpdateinfo != null) OnUpdateinfo();
            }
        }
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("°³¹ßÀÚÁ¤º¸"), Description("Debug Message")]
        public Boolean Show_DebugMsg
        {
            get { return this.showdebug; }
            set { this.showdebug = value;
            if (OnUpdateinfo != null) OnUpdateinfo();
            }
        }
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("¸¶¿ì½ºÁ¤º¸"), Description("¸¶¿ì½ºÁ¤º¸¸¦ Ç¥½ÃÇϴ âÀÇ ±ÛÀÚ»ö")]
        public Color ¸¶¿ì½º±ÛÀÚ»ö
        {
            get { return design_mouseinfocolor; }
            set { design_mouseinfocolor = value;
            if (OnUpdateinfo != null) OnUpdateinfo();
            }
        }
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("¸¶¿ì½ºÁ¤º¸"), Description("¸¶¿ì½ºÁ¤º¸¸¦ Ç¥½ÃÇϴ âÀÇ ±Û²Ã")]
        public Font ¸¶¿ì½º±Û²Ã
        {
            get { return _mouseinfofont; }
            set { _mouseinfofont = value;
            if (OnUpdateinfo != null) OnUpdateinfo();
            }
        }
        /// 
        /// YÃà°ªÀ» Ç¥½Ã¿µ¿ªÀ» ÃÖÃÊÀÇ °ªÀ¸·Î º¯°æÇÕ´Ï´Ù.
        /// 
        public void ResetYxis()
        {
            YV1 = Y1;
            YV2 = Y2;
        }
        /// 
        /// XÃà°ªÀÇ Ç¥½Ã¿µ¿ªÀ» ÃÖÃÊÀÇ °ªÀ¸·Î º¯°æÇÕ´Ï´Ù.
        /// 
        public void ResetXxis()
        {
            XV1 = X1;
            XV2 = X2;
        }
        /// 
        /// °¡·ÎÃàÀÇ Á¾·á°ª(ÇöÀç Ç¥½ÃµÇ´Â °ªÀº XV2¸¦ Âü°íÇϼ¼¿ä)
        /// 
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("YÃà(VOLT)"), Description("YÃà¿¡ Ç¥½ÃµÇ´Â VOLTÀÇ ÃÖ´ë°ªÀ» ÀÔ·ÂÇϼ¼¿ä.")]
        public Int64 X2
        {
            get { return _X2; }
            set
            {
                _X2 = value;
                _XV2 = value;
                XV2o = value;
                if (OnUpdateinfo != null) OnUpdateinfo();
            }
        }
        /// 
        /// °¡·ÎÃàÀǽÃÀÛ°ª(ÇöÀç Ç¥½ÃµÇ´Â °ªÀº XV1À» Âü°íÇϼ¼¿ä)
        /// 
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("YÃà(VOLT)"), Description("YÃà¿¡ Ç¥½ÃµÇ´Â VOLTÀÇ ÃÖ¼Ò°ªÀ» ÀÔ·ÂÇϼ¼¿ä.")]
        public Int64 X1
        {
            get { return _X1; }
            set
            {
                _X1 = value;
                _XV1 = value;
                XV1o = value;
                if (OnUpdateinfo != null) OnUpdateinfo();
            }
        }
        /// 
        /// ÇöÀç Ç¥½ÃµÇ´Â °¡·ÎÃàÀÇ ½ÃÀÛ°ªÀÔ´Ï´Ù.
        /// 
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("YÃà(VOLT)"), Description("YÃà¿¡ Ç¥½ÃµÇ´Â VOLTÀÇ ÃÖ¼Ò°ªÀ» ÀÔ·ÂÇϼ¼¿ä.")]
        public Int64 XV1
        {
            get { return _XV1; }
            set
            {
                //ºä°ªÀÇ ÇѰèÄ¡ üũ
                if (value < X1) _XV1 = X1;
                else if (value >= XV2 && XV2 > 0) _XV1 = DateTime.FromFileTime(XV2).AddSeconds(-1).ToFileTime();
                else _XV1 = value;
                XV1o = _XV1;
            }
        }
        /// 
        /// ÇöÀç Ç¥½ÃµÇ´Â °¡·ÎÃàÀÇ Á¾·á°ªÀÔ´Ï´Ù.
        /// 
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("YÃà(VOLT)"), Description("YÃà¿¡ Ç¥½ÃµÇ´Â VOLTÀÇ ÃÖ¼Ò°ªÀ» ÀÔ·ÂÇϼ¼¿ä.")]
        public Int64 XV2
        {
            get { return _XV2; }
            set
            {
                //ºä°ªÀÇ ÇѰèÄ¡ üũ
                if (value > X2) _XV2 = X2;
                else if (value <= XV1 && XV1 > 0) _XV2 = DateTime.FromFileTime(XV1).AddSeconds(1).ToFileTime();
                else _XV2 = value;
                XV2o = _XV2;
            }
        }
                
        /// 
        /// ¼¼·ÎÃàÀÇ Á¾·á°ª(ÇöÀç Ç¥½ÃµÇ´Â °ªÀº YV2¸¦ Âü°íÇϼ¼¿ä)
        /// 
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("YÃà(VOLT)"), Description("YÃà¿¡ Ç¥½ÃµÇ´Â VOLTÀÇ ÃÖ´ë°ªÀ» ÀÔ·ÂÇϼ¼¿ä.")]        
        public Single Y2
        {
            get { return _Y2; }
            set {
                _Y2 = value;
                _YV2 = value;
                YV2o = value;
                if (OnUpdateinfo != null) OnUpdateinfo();
            }
        }
        /// 
        /// ÇöÀçÇ¥½ÃµÇ´Â ¼¼·ÎÃàÀÇ Á¾·á°ªÀÔ´Ï´Ù.
        /// 
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("YÃà(VOLT)"), Description("YÃà¿¡ Ç¥½ÃµÇ´Â VOLTÀÇ ÃÖ´ë°ªÀ» ÀÔ·ÂÇϼ¼¿ä.")]
        public Single YV2
        {
            get { return _YV2; }
            set
            {                
                _YV2 = value;
                YV2o = value;
            }
        }
        /// 
        /// ¼¼·ÎÃàÀÇ ½ÃÀÛ°ª(ÇöÀç Ç¥½ÃµÇ´Â °ªÀº YV1À» Âü°íÇϼ¼¿ä)
        /// 
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("YÃà(VOLT)"), Description("YÃà¿¡ Ç¥½ÃµÇ´Â VOLTÀÇ ÃÖ¼Ò°ªÀ» ÀÔ·ÂÇϼ¼¿ä.")]
        public Single Y1
        {
            get { return _Y1; }
            set {
                _Y1 = value;
                _YV1 = value;
                YV1o = value;
                if (OnUpdateinfo != null) OnUpdateinfo();
            }
        }
        /// 
        /// ¼¼·ÎÃàÀÇ ½ÃÀÛ°ª
        /// 
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("YÃà(VOLT)"), Description("YÃà¿¡ Ç¥½ÃµÇ´Â VOLTÀÇ ÃÖ¼Ò°ªÀ» ÀÔ·ÂÇϼ¼¿ä.")]
        public Single YV1
        {
            get { return _YV1; }
            set
            {                
                _YV1 = value;
                YV1o = value;
            }
        }
      
        //[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("¿©¹é"), Description("Â÷Æ®°¡Ç¥½ÃµÇ´Â ¿µ¿ªÀÇ »ó´Ü ¿©¹é")]
        //public int ¿ÞÂÊ¿©¹é
        //{
        //    get { return _ZoneMarginX; }
        //    set { _ZoneMarginX = value;
        //    if (OnUpdateinfo != null) OnUpdateinfo();
        //    }
        //}
        //[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("¿©¹é"), Description("Â÷Æ®°¡Ç¥½ÃµÇ´Â ¿µ¿ªÀÇ ÇÏ´Ü ¿©¹é")]
        //public int À§ÂÊ¿©¹é
        //{
        //    get { return _ZoneMarginY; }
        //    set { _ZoneMarginY = value;
        //    if (OnUpdateinfo != null) OnUpdateinfo();
        //    }
        //}
     
    }
}