Example #1
0
        private void CreateChartEngine()
        {
            int iEngineIndex = GlobalSettings.ChartProfile.ChartEngineIndex;

            __cChart = new ZChart(this.chart, PaintManager.Manager.GetChartEngineInformations()[iEngineIndex]);
            __cChart.SetChartProperty(__cProfile.ChartProperty);
        }
Example #2
0
        public void Action(ChartParameter parameter)
        {
            InputDeviceStatus cStatus = parameter.Status;

            if (cStatus.Event == EInputDeviceEvent.MouseWheel)
            {
                MouseEventArgs e      = cStatus.GetCurrentMouseArgs();
                ZChart         cChart = parameter.Chart;
                AxisX          cAxisX = cChart.AxisX;

                int iCount = cAxisX.BarCount;
                if (e.Delta < 0)
                {
                    iCount += ZOOM_SCALE_UNIT;
                }
                else
                {
                    iCount -= ZOOM_SCALE_UNIT;
                }

                cAxisX.BarCount = iCount;
                if (cAxisX.Refresh)
                {
                    cChart.Refresh();
                }
            }
        }
Example #3
0
        internal static AbstractPlot Create(GdiEngine engine, ZChart chart, object source, ChartSetting chartSetting)
        {
            AbstractPlot cPlot      = null;
            EChartType   cChartType = chartSetting.ChartType;

            switch (cChartType)
            {
            case EChartType.Candlestick:
                cPlot = new PlotCandlestick(engine, source, chartSetting);
                break;

            case EChartType.HLC:
                cPlot = new PlotHlc(engine, source, chartSetting);
                break;

            case EChartType.OHLC:
                cPlot = new PlotOhlc(engine, source, chartSetting);
                break;

            case EChartType.ClosingLine:
                cPlot = new PlotClosingLine(engine, source, chartSetting);
                break;

            case EChartType.TextObject:
                cPlot = new PlotTextObject(engine, chart, source, chartSetting);
                break;

            case EChartType.TradeObject:
                cPlot = new PlotTradeObject(engine, source, chartSetting);
                break;
            }
            return(cPlot);
        }
        public MeasuresChartPanel()
        {
            fChart      = new ZChart();
            fChart.Dock = DockStyle.Fill;
            Controls.Add(fChart);

            fSelectedAquarium = "*";
        }
Example #5
0
        internal Behavior(ZChart chart, Control context, InputDeviceStatus status)
        {
            __cDrawContainer = new DrawContainer();
            __cParameter     = new ChartParameter(chart, context, this, status);

            __cActions = new List <IAction>(8);
            __cActions.Add(new Resize());
            __cActions.Add(new Move());
            __cActions.Add(new Zoom());
        }
Example #6
0
        internal PlotTextObject(GdiEngine engine, ZChart chart, object source, ChartSetting chartSetting)
            : base(engine, chartSetting)
        {
            __cGDI         = engine.GDI;
            __cTextObjects = source as TextContainer;
            __cTextObjects.SetChartProperty(chart.ChartProperty);

            __cLayers  = new List <Layer>(8);
            __cObjects = new Dictionary <int, Queue <TextObject> >(8);
            __cLayers  = chart.Layers;
        }
Example #7
0
        public void Action(ChartParameter parameter)
        {
            ZChart            cChart  = parameter.Chart;
            InputDeviceStatus cStatus = parameter.Status;
            MouseEventArgs    e       = cStatus.GetCurrentMouseArgs();

            if (cStatus.Event == EInputDeviceEvent.MouseUp)
            {
                if (__cStart == Point.Empty)
                {
                    List <Layer> cLayers = cChart.Layers;
                    int          iCount  = cLayers.Count;
                    for (int i = 0; i < iCount; i++)
                    {
                        Layer cLayer = cLayers[i];
                        if (cLayer.IsLayerScope(e.X, e.Y))
                        {
                            __cLayer = cLayer;
                            break;
                        }
                    }

                    __cStart = e.Location;
                }
                else
                {
                    Point cEnd = e.Location;
                    Boundary.BoundFix(ref __cStart, ref cEnd, new Rectangle4(__cLayer.LayerRectangleWithoutAxisY));

                    //保存至使用者繪製容器內
                    parameter.Behavior.DrawContainer.AddDrawObject(__sName, __cLayer, new Point[] { __cStart, cEnd }, new PowerLanguage.PenStyle[] { parameter.CustomPen });

                    __cStart = Point.Empty;
                    parameter.CustomPainter = null;                      //繪圖完畢需要設定為 null

                    __cGDI.ClearRops(__cLineInfos, null, false);
                    cChart.Refresh();
                }
            }
            else if (__cStart != Point.Empty && cStatus.Event == EInputDeviceEvent.MouseMove)
            {
                __cGDI.SaveDC();
                __cGDI.ClipRectangle(__cLayer.LayerRectangleWithoutAxisY);
                __cGDI.ClearRops(__cLineInfos, null, !parameter.Updated);

                ChartProperty cProperty = cChart.ChartProperty;
                IntPtr        cPen      = Gdi.CreatePen(new PowerLanguage.PenStyle(cProperty.DrawAideLineColor, 1));
                __cLineInfos.Add(__cGDI.DrawRopLine(cPen, __cStart.X, __cStart.Y, e.X, e.Y));

                __cGDI.RestoreDC();
            }
        }
Example #8
0
        public void Action(ChartParameter parameter)
        {
            InputDeviceStatus cStatus = parameter.Status;

            if (cStatus.IsDrag && cStatus.Event == EInputDeviceEvent.MouseMove)
            {
                MouseEventArgs e = cStatus.GetCurrentMouseArgs();
                if (e.Button == MouseButtons.Left)
                {
                    ZChart cChart  = parameter.Chart;
                    AxisX  cAxisX  = cChart.AxisX;
                    double dUnit   = cAxisX.AxisRectangle.Width / (double)cAxisX.BarCount;
                    int    iOffset = (int)((__iMouseX - e.X) / dUnit);

                    cAxisX.BarNumber = __iInitBarNumber + iOffset;
                    if (cAxisX.Refresh)
                    {
                        cChart.Refresh();
                    }
                }
            }
            else if (!cStatus.IsDrag && cStatus.Event == EInputDeviceEvent.MouseDown)
            {
                MouseEventArgs e = cStatus.GetCurrentMouseArgs();
                if (e.Button == MouseButtons.Left)
                {
                    parameter.IsAction       = true;
                    parameter.Context.Cursor = Cursors.SizeWE;
                    __iMouseX        = cStatus.GetCurrentMouseArgs().X;
                    __iInitBarNumber = parameter.Chart.AxisX.BarNumber;
                }
            }
            else if (cStatus.Event == EInputDeviceEvent.MouseUp)
            {
                parameter.IsAction       = false;
                parameter.Context.Cursor = Cursors.Default;
            }
        }
Example #9
0
        internal void DrawObjects()
        {
            ZChart cChart     = __cParameter.Chart;
            AxisX  cAxisX     = cChart.AxisX;
            int    iEndNumber = cAxisX.BarNumber + cAxisX.BarCount - 1;

            HashSet <DrawObject> cObjects = __cDrawContainer.GetDrawObjects(cAxisX.BarNumber, iEndNumber);

            foreach (DrawObject cObject in cObjects)
            {
                if (cObject.Exist)
                {
                    IDrawable cDrawable = GetCustomAction(cObject.Name) as IDrawable;
                    if (cDrawable != null)
                    {
                        if (cObject.LayerIndex < cChart.Layers.Count)
                        {
                            cDrawable.DrawObject(cChart.Layers[cObject.LayerIndex], cObject);
                        }
                    }
                }
            }
        }
Example #10
0
        private IList <ChartPoint> GetChartData(BudgetChartType chartType, TransferType transferType = TransferType.Purchase)
        {
            Dictionary <string, ChartPoint> result = new Dictionary <string, ChartPoint>();

            IList <Brand> brandRecords = null;

            if (chartType == BudgetChartType.Countries)
            {
                brandRecords = fModel.QueryBrands();
            }

            var records = fModel.QueryTransferExpenses();

            foreach (Transfer rec in records)
            {
                if (rec.Type != transferType)
                {
                    continue;
                }

                int factor = +1;
                if (chartType == BudgetChartType.Monthes)
                {
                    switch (rec.Type)
                    {
                    case TransferType.Purchase:
                        factor = -1;
                        break;

                    case TransferType.Sale:
                        factor = +1;
                        break;
                    }
                }

                double trnSum = (rec.Quantity * rec.UnitPrice) * factor;
                if (trnSum == 0.0d)
                {
                    continue;
                }

                var itemRec = fModel.GetRecord(rec.ItemType, rec.ItemId);
                var ts      = rec.Timestamp;

                string key;
                switch (chartType)
                {
                case BudgetChartType.ItemTypes:
                    Inventory inventRec = itemRec as Inventory;
                    ItemType  itType    = (inventRec != null) ? ALCore.GetItemType(inventRec.Type) : rec.ItemType;
                    key = Localizer.LS(ALData.ItemTypes[(int)itType].Name);
                    break;

                case BudgetChartType.Shops:
                    key = rec.Shop;
                    break;

                case BudgetChartType.Brands:
                    var brandedItem = itemRec as IBrandedItem;
                    key = (brandedItem == null) ? "-" : brandedItem.Brand;
                    break;

                case BudgetChartType.Countries:
                    var brandedItem2 = itemRec as IBrandedItem;
                    var brand        = (brandedItem2 == null) ? "-" : brandedItem2.Brand;
                    var brandRec     = brandRecords.FirstOrDefault(p => p.Name == brand);
                    key = (brandRec == null) ? "-" : brandRec.Country;
                    break;

                case BudgetChartType.Monthes:
                    key = string.Format("{0}/{1}", ts.Month, ts.Year);
                    break;

                default:
                    key = "";
                    break;
                }

                if (string.IsNullOrEmpty(key))
                {
                    key = "-";
                }

                ChartPoint chartPoint;
                if (result.TryGetValue(key, out chartPoint))
                {
                    chartPoint.Value += trnSum;
                    result[key]       = chartPoint;
                }
                else
                {
                    chartPoint = new ChartPoint(key, trnSum);
                    if (chartType == BudgetChartType.Monthes)
                    {
                        int days = DateHelper.DaysInMonth((short)ts.Year, (byte)ts.Month);
                        chartPoint.Timestamp = new DateTime(ts.Year, ts.Month, days);
                    }
                    result.Add(key, chartPoint);
                }
            }

            List <ChartPoint> vals = result.Values.ToList();

            if (chartType != BudgetChartType.Monthes)
            {
                vals = ZChart.Consolidation(vals, 0.5d);

                // prettification
                vals = ZChart.AlternateSort(vals);
            }

            return(vals);
        }
Example #11
0
 /// <summary>
 ///   取得 Plot 物件
 /// </summary>
 /// <param name="chart">ZChart 圖表類別</param>
 /// <param name="source">資料來源</param>
 /// <param name="chartType">圖表類型</param>
 /// <returns>回傳值: AbstractPlot 抽象類別</returns>
 public override AbstractPlot GetPlot(ZChart chart, object source, ChartSetting chartSetting)
 {
     return(PlotEngine.Create(this, chart, source, chartSetting));
 }
Example #12
0
 public ChartPanel()
 {
     fChart      = new ZChart();
     fChart.Dock = DockStyle.Fill;
     Controls.Add(fChart);
 }
Example #13
0
 public frmChart()
 {
     InitializeComponent();
     __cChart = new ZChart(chart, PaintManager.Manager.GetChartEngineInformations()[0]);
 }
Example #14
0
        public void Action(ChartParameter parameter)
        {
            __cGDI.ClearRops(true);
            __cGDI.ClearRops(__cLineInfos, __cTextInfos, !parameter.Updated);

            InputDeviceStatus cStatus = parameter.Status;

            if (cStatus.Event == EInputDeviceEvent.MouseMove)
            {
                ZChart         cChart    = parameter.Chart;
                AxisX          cAxisX    = cChart.AxisX;
                ChartProperty  cProperty = cChart.ChartProperty;
                MouseEventArgs e         = cStatus.GetCurrentMouseArgs();

                int    iOldBKColor = __cGDI.SelectBackground(cProperty.BackgroundColor);
                IntPtr cOldFont    = __cGDI.SelectFont(cProperty.AxisFont);
                IntPtr cPen        = Gdi.CreatePen(new PowerLanguage.PenStyle(cProperty.ForeColor, 1));

                int iBarNumber = cAxisX.ConvertBarNumberFromX(e.X);
                if (iBarNumber > cAxisX.DataCount)
                {
                    return;
                }
                else
                {
                    Rectangle cAxisXRect = cAxisX.AxisRectangle;
                    AxisXUnit cUnit      = cAxisX.ConvertBarNumberToWidth(iBarNumber);
                    cAxisXRect.X     = cUnit.CenterPoint;
                    cAxisXRect.Width = cAxisX.FontMetrics.Width * 12;

                    DateTime cDateTime = cAxisX.ConvertBarNumberToTime(iBarNumber);
                    __cLineInfos.Add(__cGDI.DrawRopLine(cPen, cUnit.CenterPoint, 0, cUnit.CenterPoint, cAxisXRect.Y));
                    __cTextInfos.Add(__cGDI.DrawRopString(cDateTime.ToString("MM/dd HH:mm"), cProperty.BackgroundColor, cProperty.ForeColor, 2, 5, cAxisXRect));
                }

                List <Layer> cLayers = cChart.Layers;
                int          iCount  = cLayers.Count;
                for (int i = 0; i < iCount; i++)
                {
                    Layer cLayer = cLayers[i];
                    if (__cLineInfos.Count == 1 && cLayer.IsLayerScope(e.X, e.Y))
                    {
                        AxisY     cAxisY     = cLayer.AxisY;
                        Rectangle cAxisYRect = cAxisY.AxisRectangle;
                        cAxisYRect.Y      = e.Y;
                        cAxisYRect.Height = cAxisY.FontMetrics.Height;

                        __cLineInfos.Add(__cGDI.DrawRopLine(cPen, 0, e.Y, cAxisYRect.X, e.Y));
                        __cTextInfos.Add(__cGDI.DrawRopString(Math.Round(cAxisY.ConvertValueFromY(e.Y), cAxisY.Decimals).ToString(), cProperty.BackgroundColor, cProperty.ForeColor, 5, 0, cAxisYRect));
                    }

                    cLayer.LegendIndex = iBarNumber;
                    __cEngine.DrawLegend(cLayer, cProperty);
                }

                __cGDI.RemoveObject(__cGDI.SelectFont(cOldFont));
                __cGDI.SelectBackground(iOldBKColor);
            }

            //如果使用者使用十字線功能, 如果有在選擇繪圖功能會在 CustomPainter 屬性儲存繪圖功能的類別名稱
            //如果有繪圖類別名稱就取出使用
            string sName = parameter.CustomPainter;

            if (__cCustomPainter == null && sName != null)
            {
                __cCustomPainter = parameter.Behavior.GetCustomAction(sName);
                if (__cCustomPainter == null || !(__cCustomPainter is IDrawable))
                {
                    parameter.CustomPainter = null;
                }
            }

            if (__cCustomPainter != null)
            {
                __cCustomPainter.Action(parameter);

                //如果繪圖類別名稱 == null 表示繪圖已經完畢
                if (parameter.CustomPainter == null)
                {
                    __cCustomPainter = null;
                }
            }
        }
Example #15
0
        public void Action(ChartParameter parameter)
        {
            InputDeviceStatus cStatus = parameter.Status;

            if (cStatus.Event == EInputDeviceEvent.MouseMove)
            {
                MouseEventArgs e = cStatus.GetCurrentMouseArgs();
                if (cStatus.IsDrag && e.Button == MouseButtons.Left)
                {
                    int          iOffset = e.Y - __iMouseY;
                    ZChart       cChart  = parameter.Chart;
                    List <Layer> cLayers = cChart.Layers;
                    Layer        cLayer  = cLayers[__iLayerIndex];

                    //如果 Layers 只有一個就不需要計算鄰近的 Layer 的相對高度
                    if (cLayers.Count > 1)
                    {
                        double dScale = (__dLayerHeight + iOffset) / cChart.ChartRectangle.Height;
                        cLayers[__iLayerIndex + 1].HeightScale += cLayer.HeightScale - dScale;
                        cLayer.HeightScale = dScale;

                        cChart.Resize();
                        cChart.Refresh();
                    }
                }
                else
                {
                    ZChart       cChart  = parameter.Chart;
                    List <Layer> cLayers = cChart.Layers;
                    int          iCount  = cLayers.Count - 1;
                    for (int i = 0; i < iCount; i++)
                    {
                        Layer cLayer = cLayers[i];
                        if (cLayer.IsLayerScope(e.X, e.Y))
                        {
                            Rectangle cRect      = cLayer.LayerRectangle;
                            int       iMaxBottom = cRect.Y + cRect.Height;
                            int       iMinBottom = iMaxBottom - 5;
                            if (e.Y >= iMinBottom && e.Y <= iMaxBottom)
                            {
                                __bResize                = true;
                                __iLayerIndex            = i;
                                __dLayerHeight           = cRect.Height;
                                parameter.Context.Cursor = Cursors.SizeNS;
                                return;
                            }
                        }
                    }

                    __bResize = false;
                    parameter.Context.Cursor = Cursors.Default;
                }
            }
            else if (__bResize && !cStatus.IsDrag && cStatus.Event == EInputDeviceEvent.MouseDown)
            {
                parameter.IsAction = true;
                __iMouseY          = cStatus.GetCurrentMouseArgs().Y;
            }
            else if (cStatus.Event == EInputDeviceEvent.MouseUp)
            {
                __bResize                = false;
                parameter.IsAction       = false;
                parameter.Context.Cursor = Cursors.Default;
            }
        }