Exemple #1
0
        public void DrawCursor(Graphics g, FormulaArea fa, FormulaData fd)
        {
            float x = this.Rect.X + fa.Canvas.GetX(this.CursorPos);
            float y = this.Rect.Y + fa.AxisY.CalcY(fd[this.CursorPos]);

            this.DrawCursor(g, x, y);
        }
Exemple #2
0
        public ObjectPoint GetValueFromPos(float X, float Y, ref FormulaArea fa)
        {
            ObjectPoint    point   = new ObjectPoint();
            FormulaHitInfo hitInfo = this.GetHitInfo(X, Y);

            if (fa == null)
            {
                fa = hitInfo.Area;
            }
            point.Y = fa.AxisY.GetValueFromY(Y - this.Rect.Y) * fa.AxisY.MultiplyFactor;
            int cursorPos = hitInfo.CursorPos;

            double[] numArray = this.DataProvider["DATE"];
            if ((numArray != null) && (numArray.Length > 0))
            {
                if (cursorPos < 0)
                {
                    point.X = numArray[0] + cursorPos;
                    return(point);
                }
                if (cursorPos >= numArray.Length)
                {
                    point.X = numArray[numArray.Length - 1] + ((cursorPos - numArray.Length) + 1);
                    return(point);
                }
                point.X = numArray[cursorPos];
            }
            return(point);
        }
Exemple #3
0
        /// <summary>
        /// Draw date label at X
        /// </summary>
        /// <param name="g"></param>
        /// <param name="fc"></param>
        /// <param name="Area"></param>
        /// <param name="X"></param>
        public void DrawCursor(Graphics g, FormulaChart fc, FormulaArea Area, float X)
        {
            if (!LastCursorRect.IsEmpty)
            {
                fc.RestoreMemBmp(g, LastCursorRect);
            }

            FormulaLabel fl = Area.Labels[2];
            int          i  = fc.CursorPos;

            if ((object)fdDate != null)
            {
                if (i >= 0)
                {
                    DateTime D  = fc.IndexToDate(i);
                    string   s  = D.ToString(CursorFormat);          //,DateTimeFormatInfo.InvariantInfo
                    SizeF    sf = g.MeasureString(s, LabelFont);

                    RectangleF R = new RectangleF(X - fc.Rect.X, Rect.Y, sf.Width, Rect.Height - 1);
                    if (R.Right > Rect.Right)
                    {
                        R.Offset(-R.Width - 1, 0);
                    }
                    LastCursorRect = R;
                    LastCursorRect.Inflate(2, 1);
                    R.Offset(fc.Rect.Location);

                    fl.DrawString(g, s, LabelFont, fl.TextBrush, VerticalAlign.Bottom, FormulaAlign.Left, R, false);
                }
            }
        }
Exemple #4
0
        /// <summary>
        /// Render the X-Axis
        /// </summary>
        /// <param name="Canvas">FormulaCanvas</param>
        /// <param name="fa">FormulaArea</param>
        public void Render(FormulaCanvas Canvas, FormulaArea fa)
        {
            if (Visible)
            {
                if (fa.AxisY.AxisPos == AxisPos.Left)
                {
                    Rect.X--;
                }
                Graphics g = Canvas.CurrentGraph;
                Back.Render(g, Rect);
            }

            if (majorTick.Visible || minorTick.Visible)
            {
                double[] Date;
                Date          = fa.Parent.DataProvider["DATE"];
                fdDate        = new FormulaData(Date);
                fdDate.Canvas = Canvas;
                fdDate.AxisY  = fa.AxisY;

                PointF[] pfs = fdDate.GetPoints();

                majorTick.DataCycle          = DataCycle;
                majorTick.Format             = Format;
                majorTick.DateFormatProvider = DateFormatProvider;

                majorTick.DrawXAxisTick(Canvas, Date, fdDate, pfs, this, IntradayInfo);
                minorTick.DrawXAxisTick(Canvas, Date, fdDate, pfs, this, IntradayInfo);
            }
        }
        /// <summary>
        /// Show the formula manager
        /// </summary>
        /// <param name="Formulas">The default formulas</param>
        /// <returns>Dialog result</returns>
        public DialogResult ShowForm(FormulaArea fa, FormulaBase SelectedFormula)
        {
            if (fa != null)
            {
                string[] Formulas = fa.FormulaToStrings();
                if (Formulas != null)
                {
                    this.CurrentFormulas = string.Join("#", Formulas);
                    string s = "";
                    if (SelectedFormula != null)
                    {
                        s = SelectedFormula.CreateName;
                    }

                    this.SelectedFormula = s;

                    ArrayList al = new ArrayList();
                    al.AddRange(Formulas);
                    if (fa.IsMain())
                    {
                        al.AddRange(OverlayFormulas);
                    }
                    else
                    {
                        al.AddRange(ListedFormulas);
                    }
                    AddFavorite((string[])al.ToArray(typeof(string)));
                }
            }
            return(ShowDialog());
        }
Exemple #6
0
 public void Render(FormulaCanvas Canvas, FormulaArea fa)
 {
     if (this.Visible)
     {
         if (fa.AxisY.AxisPos == AxisPos.Left)
         {
             this.Rect.X--;
         }
         Graphics currentGraph = Canvas.CurrentGraph;
         this.Back.Render(currentGraph, this.Rect);
     }
     if (this.MajorTick.Visible || this.MinorTick.Visible)
     {
         double[] data = fa.Parent.DataProvider["DATE"];
         this.fdDate        = new FormulaData(data);
         this.fdDate.Canvas = Canvas;
         this.fdDate.AxisY  = fa.AxisY;
         PointF[] points = this.fdDate.GetPoints();
         this.MajorTick.DataCycle          = this.DataCycle;
         this.MajorTick.Format             = this.Format;
         this.MajorTick.DateFormatProvider = this.DateFormatProvider;
         this.MajorTick.DrawXAxisTick(Canvas, data, this.fdDate, points, this, this.IntradayInfo);
         this.MinorTick.DrawXAxisTick(Canvas, data, this.fdDate, points, this, this.IntradayInfo);
     }
 }
Exemple #7
0
        private void SetBestFormat(FormulaCanvas Canvas, FormulaArea Area, int Start)
        {
            int k = Start;

            for (int i = 0; i < LabelValues.Length; i++)
            {
                double d = (LabelValues[i] / MultiplyFactor);
                k = FormulaHelper.TestBestFormat(d, k);
            }

            bool b = false;

            for (int i = 0; i < Area.FormulaDataArray.Count; i++)
            {
                FormulaRenderType frt = (Area.FormulaDataArray[i] as FormulaData).RenderType;
                if (frt == FormulaRenderType.STOCK)
                {
                    double d = GetLastValue(Canvas, Area, i);
                    if (!double.IsNaN(d))
                    {
                        k = FormulaHelper.TestBestFormat(d, k);
                        b = true;
                    }
                }
            }

            if (format != null && format.Length > 1 && !b)
            {
                format = "f" + format.Substring(1);
            }
            else
            {
                format = "f" + k;
            }
        }
Exemple #8
0
        public void DrawCursor(Graphics g, FormulaChart fc, FormulaArea Area, float X)
        {
            if (!this.LastCursorRect.IsEmpty)
            {
                fc.RestoreMemBmp(g, this.LastCursorRect);
            }
            FormulaLabel label     = Area.Labels[2];
            int          cursorPos = fc.CursorPos;

            if ((Object)fdDate != null && cursorPos >= 0)
            {
                if (cursorPos < this.fdDate.Length)
                {
                    string text = DateTime.FromOADate(this.fdDate[cursorPos]).ToString(this.CursorFormat,
                                                                                       DateTimeFormatInfo.InvariantInfo);
                    SizeF      ef   = g.MeasureString(text, this.LabelFont);
                    RectangleF rect = new RectangleF(X - fc.Rect.X, (float)this.Rect.Y, ef.Width,
                                                     (float)(this.Rect.Height - 1));
                    this.LastCursorRect = rect;
                    this.LastCursorRect.Inflate(2f, 1f);
                    rect.Offset((PointF)fc.Rect.Location);
                    label.DrawString(g, text, this.LabelFont, label.TextBrush, VerticalAlign.Bottom, FormulaAlign.Left,
                                     rect, false);
                }
            }
        }
Exemple #9
0
        public void AddArea(FormulaBase fb)
        {
            FormulaArea fa = new FormulaArea(this);

            fa.HeightPercent = 1.0;
            fa.AddFormula(fb);
            this.Areas.Add(fa);
        }
Exemple #10
0
        public void InsertArea(int Index, FormulaBase fb)
        {
            FormulaArea fa = new FormulaArea(this);

            fa.HeightPercent = 1.0;
            fa.AddFormula(fb);
            this.Areas.Insert(Index, fa);
        }
Exemple #11
0
        static public FormulaChart ShowObjectOnChart(FormulaChart fc, TextReader reader, DataManagerBase dmb,
                                                     bool ObjectLayout)
        {
            ObjectManager om = FromChart(fc);

            om.ReadXml(reader, false);
            if (om.startTime != 0.0)
            {
                fc.StartTime = DateTime.FromOADate(om.startTime);
            }
            if (om.endTime != 0.0)
            {
                fc.EndTime = DateTime.FromOADate(om.endTime);
            }

            if (ObjectLayout && om.indicators != null)
            {
                fc.Areas.Clear();
                if (om.indicators != null)
                {
                    fc.StringsToArea(om.indicators.Split(';'));
                }
                fc.SetAreaPercent(om.areaPercent);
                fc.Rect = new Rectangle(0, 0, om.width, om.height);
            }
            om.SetCanvas(om.Canvas);
            if (om.skin != null)
            {
                fc.SetSkin(om.skin);
            }

            fc.StickRenderType = om.stickRenderType;
            if (om.symbol != null && om.symbol != "")
            {
                //if (om.latestTime!=0.0)
                //	dmb.EndTime = DateTime.FromOADate(om.latestTime);
                CommonDataProvider cdp = (CommonDataProvider)dmb[om.symbol];
                cdp.DataCycle   = DataCycle.Parse(om.currentDataCycle);
                fc.DataProvider = cdp;
            }
            FormulaArea fa = fc.MainArea;

            if (fa != null)
            {
                fa.StockRenderType = om.stockRenderType;
            }

            if (om.minPrice != 0)
            {
                if (fa != null)
                {
                    fa.AxisY.MinY      = om.minPrice;
                    fa.AxisY.MaxY      = om.maxPrice;
                    fa.AxisY.AutoScale = false;
                }
            }
            return(fc);
        }
Exemple #12
0
 private void DesignerControl_MouseMove(object sender, MouseEventArgs e)
 {
     if (this.DragObject != null)
     {
         FormulaArea fa   = this.DragObject.Object.Area;
         float       num  = e.X - this.DragObject.StartPoint.X;
         float       num2 = e.Y - this.DragObject.StartPoint.Y;
         this.InvalidateObject(this.DragObject.Object);
         if (this.DragObject.ControlPointIndex < 0)
         {
             for (int i = 0; i < this.DragObject.Object.ControlPoints.Length; i++)
             {
                 PointF tf = this.DragObject.Object.ToPointF(this.DragObject.ControlPoints[i]);
                 this.DragObject.Object.ControlPoints[i] = this.GetValueFromPos(tf.X + num, tf.Y + num2, ref fa);
             }
         }
         else
         {
             BaseObject obj2 = this.DragObject.Object;
             obj2.ControlPoints[this.DragObject.ControlPointIndex] = this.GetValueFromPos((float)e.X, (float)e.Y, ref fa);
             if (((obj2.InitNum > 0) && (obj2.InitPoints != null)) && (obj2.InSetup && (this.DragObject.ControlPoints.Length > 1)))
             {
                 PointF tf2  = obj2.ToPointF(obj2.ControlPoints[1]);
                 PointF tf3  = obj2.ToPointF(obj2.ControlPoints[0]);
                 float  num4 = (tf2.X - tf3.X) / obj2.InitPoints[1].X;
                 float  num5 = (tf2.Y - tf3.Y) / obj2.InitPoints[1].Y;
                 for (int j = 2; j < obj2.ControlPoints.Length; j++)
                 {
                     obj2.ControlPoints[j] = this.GetValueFromPos(tf3.X + (num4 * obj2.InitPoints[j].X), tf3.Y + (num5 * obj2.InitPoints[j].Y), ref fa);
                 }
             }
         }
         this.InvalidateObject(this.DragObject.Object);
     }
     else
     {
         Cursor cursor = this.Designer.Cursor;
         if (this.GetPointIndex(e.X, e.Y) >= 0)
         {
             this.Designer.Cursor = Cursors.SizeAll;
         }
         else if (this.GetObjectAt(e.X, e.Y) != null)
         {
             this.Designer.Cursor = Cursors.Hand;
         }
         else if (this.ObjectType == null)
         {
             this.Designer.Cursor = cursor;
         }
         else
         {
             this.Designer.Cursor = Cursors.Cross;
         }
     }
 }
Exemple #13
0
        private void DesignerControl_MouseDown(object sender, MouseEventArgs e)
        {
            FormulaArea fa = null;
            BaseObject  objectAt;

            this.StartPoint = this.GetValueFromPos((float)e.X, (float)e.Y, ref fa);
            this.SaveChartControlSetting();
            if (this.ObjectType == null)
            {
                this.SelectedObject = null;
                if (e.Button == MouseButtons.Left)
                {
                    int controlPointIndex = this.GetPointIndex(e.X, e.Y, out objectAt);
                    if (objectAt == null)
                    {
                        objectAt = this.GetObjectAt(e.X, e.Y);
                    }
                    if (objectAt != null)
                    {
                        this.SelectedObject = objectAt;
                        this.DragObject     = new ObjectDragging(new PointF((float)e.X, (float)e.Y), controlPointIndex, objectAt);
                        this.Designer.Invalidate(objectAt.GetRegion());
                        objectAt.InMove = true;
                    }
                }
            }
            else if (e.Button == MouseButtons.Right)
            {
                this.objects.Remove(this.DragObject.Object);
                this.DragObjectFinished();
            }
            else if (this.ObjectSteps == 0)
            {
                objectAt          = this.ObjectType.Invoke();
                objectAt.AreaName = fa.Name;
                objectAt.Area     = fa;
                objectAt.InSetup  = true;
                objectAt.InMove   = true;
                if (this.AfterCreateStart != null)
                {
                    this.AfterCreateStart(this, objectAt);
                }
                objectAt.SetObjectManager(this);
                for (int i = 0; i < objectAt.ControlPointNum; i++)
                {
                    objectAt.ControlPoints[i] = this.StartPoint;
                }
                this.objects.Add(objectAt);
                this.SelectedObject = objectAt;
                this.DragObject     = new ObjectDragging(new PointF((float)e.X, (float)e.Y), ((this.ObjectSteps + objectAt.InitNum) > 1) ? 1 : 0, objectAt);
            }
            this.DragMemBmp = null;
        }
Exemple #14
0
 public string GetAreaTextData(string Separator, bool ShowHeader)
 {
     if (this.Areas.Count > 0)
     {
         FormulaArea selectedArea = this.SelectedArea;
         if (selectedArea == null)
         {
             selectedArea = this.Areas[this.Areas.Count - 1];
         }
         return(this.GetAreaTextData(selectedArea, Separator, ShowHeader));
     }
     return("");
 }
Exemple #15
0
 public void SetObjectManager(BaseObject bo)
 {
     bo.SetObjectManager(this);
     if (Canvas.Chart != null)
     {
         FormulaArea fa = Canvas.Chart[bo.AreaName];
         if (fa == null)
         {
             fa          = Canvas.Chart[0];
             bo.AreaName = fa.Name;
         }
         bo.Area = fa;
     }
 }
Exemple #16
0
        /// <summary>
        /// Calc Y-axis width
        /// </summary>
        /// <param name="Canvas"></param>
        /// <returns></returns>
        public int CalcLabelWidth(FormulaCanvas Canvas, FormulaArea Area)
        {
            Graphics g = Canvas.CurrentGraph;

            CalcLableLine(Canvas);
            int    LabelWidth = int.MinValue;
            string s;

            int Start = 0;

            if (AutoFormat)
            {
                if (MaxY <= 10 && MinY < 1)
                {
                    Start = 3;
                }
                else if (MaxY <= 100)
                {
                    Start = 2;
                }
                else if (MaxY <= 1000)
                {
                    Start = 1;
                }
                else
                {
                    Start = 0;
                }
                format = "Z" + Start;
            }
            if (format.StartsWith("Z"))
            {
                SetBestFormat(Canvas, Area, Start);
            }

            for (int i = -1; i < LabelValues.Length; i++)
            {
                if (i < 0)
                {
                    s = MultiplyFactorToString();
                }
                else
                {
                    double d = (LabelValues[i] / MultiplyFactor);
                    s = FormulaHelper.FormatDouble(d, format);
                }
                LabelWidth = Math.Max(LabelWidth, (int)g.MeasureString(s, LabelFont).Width);
            }
            return(LabelWidth + majorTick.TickWidth);
        }
Exemple #17
0
 public void SetObjectManager(BaseObject bo)
 {
     bo.SetObjectManager(this);
     if (this.Canvas.BackChart != null)
     {
         FormulaArea area = this.Canvas.BackChart[bo.AreaName];
         if (area == null)
         {
             area        = this.Canvas.BackChart[0];
             bo.AreaName = area.Name;
         }
         bo.Area = area;
     }
 }
Exemple #18
0
 private void miChangeFormulaParameter_Click(object sender, System.EventArgs e)
 {
     if (ChartControl.Chart.Areas.Count > 0)
     {
         //Get first area
         FormulaArea fa = ChartControl.Chart.Areas[0];
         if (fa.Formulas.Count > 2)
         {
             //Get third formula and set N parameter to 20
             fa.Formulas[2].SetParam("N", "20");
         }
     }
     ChartControl.SaveChartProperties();
     ChartControl.NeedRebind();
 }
Exemple #19
0
//		private void miChangeFormulaParameter_Click(object sender, System.EventArgs e)
//		{
//
//			if (ChartControl.Chart.Areas.Count>0)
//			{
//				//Get first area
//				FormulaArea fa = ChartControl.Chart.Areas[0];
//				if (fa.Formulas.Count>2)
//					//Get third formula and set N parameter to 20
//					fa.Formulas[2].SetParam("N","20");
//			}
//			ChartControl.SaveChartProperties();
//			ChartControl.NeedRebind();
//		}

        /// <summary>
        /// Add RSI(10) to fa if not exist
        /// </summary>
        /// <param name="fa"></param>
        private void AddFormula(FormulaArea fa)
        {
            if (fa != null)
            {
                string    Indicator = "RSI(10)";
                ArrayList al        = new ArrayList();
                al.AddRange(fa.FormulaToStrings());
                if (al.IndexOf(Indicator) < 0)
                {
                    al.Add(Indicator);
                    fa.Formulas.Clear();
                    fa.StringsToFormula((string[])al.ToArray(typeof(string)));
                    ChartControl.NeedRebind();
                }
            }
        }
Exemple #20
0
        public void DrawCursor(Graphics g, FormulaChart fc, FormulaArea Area, float Y, double d)
        {
            if (!this.LastCursorRect.IsEmpty)
            {
                fc.RestoreMemBmp(g, this.LastCursorRect);
            }
            FormulaLabel label = Area.Labels[2];
            string       text  = d.ToString(this.Format);
            SizeF        ef    = g.MeasureString(text, this.LabelFont);
            RectangleF   rect  = new RectangleF((float)this.Rect.Left, Y - fc.Rect.Y, (this.Rect.Width - 1) - this.Back.RightPen.Width, ef.Height);

            this.LastCursorRect = rect;
            this.LastCursorRect.Inflate(2f, 1f);
            rect.Offset((PointF)fc.Rect.Location);
            label.DrawString(g, text, this.LabelFont, label.TextBrush, VerticalAlign.Bottom, FormulaAlign.Left, rect, false);
        }
Exemple #21
0
        public void Paste()
        {
            try
            {
                IDataObject ido = Clipboard.GetDataObject();
                string      s   = (string)ido.GetData(typeof(string));
                if (s != null)
                {
                    byte[]       bs = Encoding.UTF8.GetBytes(s);
                    MemoryStream ms = new MemoryStream(bs);
                    StreamReader sr = new StreamReader(ms);
                    string       t  = sr.ReadLine();
                    Type         T  = Type.GetType(t);
                    if (T != null)
                    {
                        XmlSerializer xs = new XmlSerializer(T);
                        object        o  = xs.Deserialize(sr);
                        if (o is BaseObject)
                        {
                            BaseObject bo = o as BaseObject;
                            bo.SetObjectManager(this);

                            FormulaHitInfo fhi = Canvas.Chart.GetHitInfo(CurrentMouseX, CurrentMouseY);
                            FormulaArea    fa  = fhi.Area;
                            if (fhi.HitType == FormulaHitType.htArea && fa != null)
                            {
                                PointF pf0    = bo.ToPointF(bo.ControlPoints[0]);
                                float  DeltaX = CurrentMouseX - pf0.X;
                                float  DeltaY = CurrentMouseY - pf0.Y;

                                for (int i = 0; i < bo.ControlPoints.Length; i++)
                                {
                                    PointF pf = bo.ToPointF(bo.ControlPoints[i]);
                                    bo.ControlPoints[i] = GetValueFromPos(pf.X + DeltaX, pf.Y + DeltaY, ref fa);
                                }
                                AddObject(bo);
                                Invalidate();
                            }
                        }
                    }
                }
            }
            catch
            {
            }
        }
Exemple #22
0
 public PointF GetPointAt(FormulaArea fa, int DateIndex, double Price)
 {
     if (((fa != null) && (fa.Canvas != null)) && (fa.AxisY != null))
     {
         float x = (float)(((DateIndex - fa.Canvas.Stop) + 0.5) * this.ColumnWidth);
         float y = fa.AxisY.CalcY(Price);
         foreach (FormulaAxisY sy in fa.AxisYs)
         {
             if (sy.AxisPos == AxisPos.Left)
             {
                 x += sy.Width;
             }
         }
         return(new PointF(x, y));
     }
     return(PointF.Empty);
 }
Exemple #23
0
        /// <summary>
        /// Load object and bind object properties to the chart
        /// </summary>
        /// <param name="Symbol"></param>
        /// <param name="ObjectName">Object file name</param>
        public void LoadObject(string Symbol, string ObjectName)
        {
            if (Symbol != null && Symbol != "")
            {
                if (Canvas.DesignerControl is ChartWinControl)
                {
                    ChartWinControl cwc = Canvas.DesignerControl as ChartWinControl;
                    FormulaArea     fa  = cwc.Chart.MainArea;

                    string ObjectFileName = FormulaHelper.GetObjectFile(ObjectName);
                    if (File.Exists(ObjectFileName))
                    {
                        ReadXml(ObjectFileName, true);

                        if (startTime > 0)
                        {
                            cwc.StartTime = DateTime.FromOADate(startTime);
                        }
                        if (endTime > 0)
                        {
                            cwc.EndTime = DateTime.FromOADate(endTime);
                        }

                        if (fa != null)
                        {
                            if (minPrice > 0)
                            {
                                cwc.MinPrice = minPrice;
                                cwc.MaxPrice = maxPrice;
                            }
                        }
                    }
                    else
                    {
                        if (fa != null)
                        {
                            cwc.MinPrice       = 0;
                            cwc.EndTime        = DateTime.MinValue;
                            fa.AxisY.AutoScale = true;
                        }
                        Clear();
                    }
                }
            }
        }
Exemple #24
0
        /// <summary>
        /// Draw price label at Y
        /// </summary>
        /// <param name="g"></param>
        /// <param name="fc"></param>
        /// <param name="Area"></param>
        /// <param name="Y">Y-Position</param>
        /// <param name="d">Price</param>
        public void DrawCursor(Graphics g, FormulaChart fc, FormulaArea Area, float Y, double d)
        {
            if (!LastCursorRect.IsEmpty)
            {
                fc.RestoreMemBmp(g, LastCursorRect);
            }

            FormulaLabel fl = Area.Labels[2];
            string       s  = FormulaHelper.FormatDouble(d, format);
            SizeF        sf = g.MeasureString(s, LabelFont);

            RectangleF R = new RectangleF(Rect.Left, Y - fc.Rect.Y, Rect.Width - 1 - Back.RightPen.Width, sf.Height);

            LastCursorRect = R;
            LastCursorRect.Inflate(2, 1);
            R.Offset(fc.Rect.Location);

            fl.DrawString(g, s, LabelFont, fl.TextBrush, VerticalAlign.Bottom, FormulaAlign.Left, R, false);
        }
Exemple #25
0
//		private void miAddFormula1_Click(object sender, System.EventArgs e)
//		{
//			if (ChartControl.Chart.Areas.Count>2)
//				AddFormula(ChartControl.Chart.Areas[2]);
//		}
//
//		private void miAddFormula2_Click(object sender, System.EventArgs e)
//		{
//			AddFormula(ChartControl.Chart.SelectedArea);
//		}
//
//		private void miAddFormula3_Click(object sender, System.EventArgs e)
//		{
//			if (ChartControl.Chart.Areas.Count<8)
//				ChartControl.DefaultFormulas +=";RSI(10)";
//		}

        private void MoveFormula(FormulaArea fa1, FormulaArea fa2, int Index)
        {
            if (fa1 != null && fa2 != null)
            {
                ArrayList al = new ArrayList();
                al.AddRange(fa1.FormulaToStrings());
                if (al.Count > Index)
                {
                    string s = (string)al[Index];
                    al.RemoveAt(Index);
                    fa1.Formulas.Clear();
                    fa1.StringsToFormula((string[])al.ToArray(typeof(string)));

                    s = fa2.FormulaToString('#') + '#' + s;
                    fa2.Formulas.Clear();
                    fa2.StringToFormula(s, '#');
                    ChartControl.NeedRebind();
                }
            }
        }
Exemple #26
0
 public PointF GetPointAt(FormulaArea fa, double d, string DataType, double Price)
 {
     if (this.DataProvider != null)
     {
         double[] dd        = this.DataProvider["DATE"];
         double[] numArray2 = null;
         if (DataType != null)
         {
             numArray2 = this.DataProvider[DataType];
         }
         if ((dd != null) && (dd.Length > 0))
         {
             int index = FindIndex(dd, d);
             if (numArray2 != null)
             {
                 Price = numArray2[index];
             }
             return(this.GetPointAt(fa, index, Price));
         }
     }
     return(PointF.Empty);
 }
Exemple #27
0
        public ChartDragInfo(FormulaChart Chart, FormulaHitInfo HitInfo)
        {
            this.HitInfo    = HitInfo;
            this.AreaHeight = new int[Chart.Areas.Count];
            FormulaAxisY axisY = HitInfo.AxisY;

            if ((axisY == null) && (HitInfo.Area != null))
            {
                axisY = HitInfo.Area.AxisY;
            }
            if (axisY != null)
            {
                this.AreaMinY = axisY.MinY;
                this.AreaMaxY = axisY.MaxY;
            }
            for (int i = 0; i < Chart.Areas.Count; i++)
            {
                FormulaArea area = Chart.Areas[i];
                this.AreaHeight[i] = area.Rect.Height;
            }
            this.StartTime = Chart.StartTime;
            this.EndTime   = Chart.EndTime;
        }
Exemple #28
0
        private double GetLastValue(FormulaCanvas Canvas, FormulaArea Area, int LineIndex, out bool IsUp)
        {
            LatestValueType lvt = Area.Parent.LatestValueType;
            FormulaData     f   = Area.FormulaDataArray[LineIndex];
            double          d   = double.NaN;

            IsUp = true;
            if (Area.AxisYs[f.AxisYIndex] == this &&
                ((lvt == LatestValueType.All && f.ValueTextMode != ValueTextMode.None /*!f.TextInvisible*/) ||
                 ((lvt == LatestValueType.All || lvt == LatestValueType.StockOnly) && f.RenderType == FormulaRenderType.STOCK) ||
                 (lvt == LatestValueType.Custom && f.LastValueInAxis)))
            {
                int Start = Math.Max(0, Canvas.Start);
                if (f.Length > Start)
                {
                    int LastIndex = f.Length - 1 - Start;
                    for (int k = f.Length - 1 - Start; k >= 0; k--)
                    {
                        if (!double.IsNaN(f[k]))
                        {
                            LastIndex = k;
                            break;
                        }
                    }

                    d = f[LastIndex];
                    if (LastIndex > 0)
                    {
                        if (f[LastIndex - 1] > d)
                        {
                            IsUp = false;
                        }
                    }
                }
            }
            return(d);
        }
Exemple #29
0
        /// <summary>
        /// Constructor of ChartDragInfo
        /// </summary>
        /// <param name="Chart">FormulaChart instance</param>
        /// <param name="HitInfo">The Hit information of the dragging start point</param>
        public ChartDragInfo(FormulaChart Chart, FormulaHitInfo HitInfo)
        {
            this.HitInfo = HitInfo;
            AreaHeight   = new int[Chart.Areas.Count];
            FormulaAxisY fay = HitInfo.AxisY;

            if (fay == null && HitInfo.Area != null)
            {
                fay = HitInfo.Area.AxisY;
            }
            if (fay != null)
            {
                AreaMinY = fay.MinY;
                AreaMaxY = fay.MaxY;
            }

            for (int i = 0; i < Chart.Areas.Count; i++)
            {
                FormulaArea fa = Chart.Areas[i];
                AreaHeight[i] = fa.Rect.Height;
            }
            StartTime = Chart.StartTime;
            EndTime   = Chart.EndTime;
        }
Exemple #30
0
 private void InternalRender(Graphics g)
 {
     try
     {
         if (this.DataProvider != null)
         {
             double num = 0.0;
             foreach (FormulaArea area in this.Areas)
             {
                 if (area.Visible)
                 {
                     num += area.HeightPercent;
                 }
             }
             double num2 = 0.0;
             for (int i = 0; i < this.Areas.Count; i++)
             {
                 FormulaArea area2 = this.Areas[i];
                 if (area2.Visible)
                 {
                     area2.Rect = new Rectangle(this.Rect.X, this.Rect.Y + ((int)((this.Rect.Height * num2) / num)), this.Rect.Width, ((int)((this.Rect.Height * area2.HeightPercent) / num)) + 1);
                     if (i < (this.Areas.Count - 1))
                     {
                         area2.Rect.Height++;
                     }
                     else
                     {
                         area2.Rect.Height = this.Rect.Bottom - area2.Rect.Top;
                     }
                     num2 += area2.HeightPercent;
                 }
             }
             this.AdjustLabelWidth(g);
             this.SetView();
             for (int j = 0; j < this.Areas.Count; j++)
             {
                 FormulaArea area3 = this.Areas[j];
                 if (area3.Visible)
                 {
                     try
                     {
                         if (this.ShowDateInLastArea && (j < (this.Areas.Count - 1)))
                         {
                             foreach (FormulaAxisX sx in area3.AxisXs)
                             {
                                 sx.Visible = false;
                             }
                         }
                         area3.Render(g);
                     }
                     catch (Exception exception)
                     {
                         StringFormat format = new StringFormat();
                         format.Alignment     = StringAlignment.Center;
                         format.LineAlignment = StringAlignment.Center;
                         g.DrawString(exception.ToString(), new Font("verdana", 10f), Brushes.Red, area3.Rect, format);
                     }
                 }
             }
             if (this.NativePaint != null)
             {
                 this.NativePaint(this, new NativePaintArgs(g, this.Rect, this.MemBmp));
             }
         }
     }
     catch (Exception exception2)
     {
         g.DrawString(exception2.ToString(), new Font("verdana", 10f), Brushes.Red, (float)1f, (float)30f);
     }
 }