示例#1
0
        /// <summary>
        /// When user click on the chart element, check if userline was selected
        /// </summary>

        private void testUserlineClick()
        {
            splitMain.Panel2Collapsed = true;
            selectedSeries            = null;
            selectedLine   = null;
            DrawingAllowed = false;

            if (userlines != null)
            {
                var pos     = currentMouseLocation;
                var results = chartStock.HitTest(pos.Value.X, pos.Value.Y, false, ChartElementType.DataPoint);
                foreach (var result in results)
                {
                    if (result.ChartElementType == ChartElementType.DataPoint && result.Series.Name.Contains("Line"))
                    {
                        selectedSeries = result.Series;
                        var item = (UserLines)result.Series.Tag;

                        DrawingAllowed = true;
                        selectedLine   = item;
                        createUserlineInfobox(selectedLine);

                        btnLineSubmitChanges.Visible = true;

                        result.Series.BorderWidth = (int)item?.Thickness;
                    }
                }

                chartStock.Invalidate();
            }
        }
示例#2
0
 /// <summary>
 /// Deletes the selected userline
 /// </summary>
 public void deleteUserline(UserLines selectedLine)
 {
     if (ConnectionState == true)
     {
         var query = db.UserLines.Single(x => x.LineID == selectedLine.LineID);
         db.UserLines.DeleteOnSubmit(query);
         db.SubmitChanges();
     }
 }
示例#3
0
 /// <summary>
 /// Opens the infobox and replaces fields with selected user line
 /// </summary>
 private void createUserlineInfobox(UserLines line)
 {
     splitMain.Panel2Collapsed = false;
     tbLineThickness.Value     = (line?.Thickness >= 1) ? Convert.ToInt16(line?.Thickness) : 1;
     lineThickness             = tbLineThickness.Value;
     lblLineThickness.Text     = "Breite : " + tbLineThickness.Value;
     btnLinecolor.BackColor    = ColorTranslator.FromHtml(line?.LineColor);
     lineColor             = btnLinecolor.BackColor;
     btnDeleteLine.Visible = true;
 }
示例#4
0
 /// <summary>
 /// Deletes selected user line asynchronously
 /// </summary>
 private async void btnDeleteLine_Click(object sender, EventArgs e)
 {
     if (selectedLine != null)
     {
         mainForm.notifyUser(FrmMain.NotifyType.PrepareMessage, "Linie wird gelöscht...");
         var   model = new UserlineModel(stock);
         Task  task  = Task.Run(() => model.deleteUserline(selectedLine));
         await task;
         refreshChartAsync(stock.symbol);
         mainForm.notifyUser(FrmMain.NotifyType.StatusMessage, "Bereit");
         btnLineSubmitChanges.Visible = false;
     }
     selectedLine = null;
 }
示例#5
0
 /// <summary>
 /// Updates the selected userline - NOT WORKING
 /// </summary>
 public void updateUserline(UserLines selectedLine = null)
 {
     if (ConnectionState == true && selectedLine != null)
     {
         var query = db.UserLines.Single(x => x.LineID == selectedLine.LineID);
         if (query != null)
         {
             query.TimePoint1  = selectedLine.TimePoint1;
             query.TimePoint2  = selectedLine.TimePoint2;
             query.PricePoint1 = selectedLine.PricePoint1;
             query.PricePoint2 = selectedLine.PricePoint2;
             query.LineColor   = selectedLine.LineColor;
             query.Thickness   = selectedLine.Thickness;
             db.SubmitChanges();
         }
     }
 }
示例#6
0
        /// <summary>
        /// Updates selected user line asynchronously
        /// </summary>
        private async void btnLineSubmitChanges_Click(object sender, EventArgs e)
        {
            if (selectedLine != null)
            {
                mainForm.notifyUser(FrmMain.NotifyType.PrepareMessage, "Linie wird aktualisiert...");
                selectedLine.Thickness = (short)lineThickness;
                selectedLine.LineColor = ColorTranslator.ToHtml(lineColor);

                var   model = new UserlineModel(stock);
                Task  task  = Task.Run(() => model.updateUserline(selectedLine));
                await task;
                refreshChartAsync(stock.symbol);
                mainForm.notifyUser(FrmMain.NotifyType.StatusMessage, "Bereit");
                btnLineSubmitChanges.Visible = false;
            }
            selectedLine = null;
        }
示例#7
0
        /// <summary>
        /// Inserts a new userline for the selected userline
        /// </summary>
        public UserLines insertUserline(DataPoint p1, DataPoint p2)
        {
            UserLines result = null;

            if (ConnectionState == true)
            {
                var newItem = new UserLines
                {
                    StocksMapID = stock.StocksMapID,
                    PricePoint1 = p1.YValues[0],
                    PricePoint2 = p2.YValues[0],
                    TimePoint1  = p1.XValue,
                    TimePoint2  = p2.XValue,
                    LineColor   = ColorTranslator.ToHtml(lineColor),
                    Thickness   = Convert.ToSByte(lineThickness),
                };
                db.UserLines.InsertOnSubmit(newItem);
                db.SubmitChanges();
                result = newItem;
            }
            return(result);
        }
示例#8
0
 private void resetAttributes()
 {
     selectedSeries = null;
     selectedDot    = null;
     selectedLine   = null;
 }
示例#9
0
        /// <summary>
        /// Creates tooltip or crosshair
        /// </summary>
        private void chartStock_MouseMove(object sender, MouseEventArgs e)
        {
            if ((crosshairToolStripMenuItem.Checked || tooltipToolStripMenuItem.Checked) &&
                currentMouseLocation != e.Location && e.X > 0 && e.Y > 0 &&
                e.X < (chartStock.Width - 1))
            {
                tooltip.RemoveAll();
                currentMouseLocation = e.Location;

                if (selectedSeries != null && selectedDot != null)
                {
                    double dateOLE = chartStock.ChartAreas[0].AxisX.PixelPositionToValue(e.X);
                    double price   = chartStock.ChartAreas[0].AxisY.PixelPositionToValue(e.Y);

                    int index = selectedSeries.Points.IndexOf(selectedDot);
                    if (index >= 0)
                    {
                        selectedSeries.Points[index].XValue     = dateOLE;
                        selectedSeries.Points[index].YValues[0] = price;
                        var currentItem = (UserLines)selectedSeries.Tag;
                        if (index == 0)
                        {
                            currentItem.TimePoint1  = dateOLE;
                            currentItem.PricePoint1 = price;
                        }
                        else if (index == 1)
                        {
                            currentItem.TimePoint2  = dateOLE;
                            currentItem.PricePoint2 = price;
                        }
                        selectedLine       = currentItem;
                        selectedSeries.Tag = selectedLine;
                    }

                    chartStock.Invalidate();
                }
                else if (!DrawingAllowed)
                {
                    double dateOLE = chartStock.ChartAreas[0].AxisX.PixelPositionToValue(e.X);
                    if (!double.IsInfinity(dateOLE))
                    {
                        double  cursorX = Math.Round(dateOLE, 0);
                        double  cursorY = .0;
                        decimal price   = 0;
                        decimal volume  = 0;

                        if (seriesDict.ContainsKey(cursorX) && seriesDict[cursorX] != null)
                        {
                            cursorY = (double)seriesDict[cursorX].Close;
                            price   = seriesDict[cursorX].Close;
                            volume  = seriesDict[cursorX].Volume;
                        }

                        if (crosshairToolStripMenuItem.Checked)
                        {
                            double verticalLinePos = chartStock.ChartAreas[0].AxisY.ValueToPixelPosition(cursorY);
                            chartStock.ChartAreas[0].CursorX.SetCursorPixelPosition(new Point(e.X, e.Y), true);
                            chartStock.ChartAreas[1].CursorX.SetCursorPixelPosition(new Point(e.X, e.Y), true);
                            chartStock.ChartAreas[0].CursorY.SetCursorPixelPosition(new Point(e.X, (int)verticalLinePos), true);
                        }

                        if (tooltipToolStripMenuItem.Checked)
                        {
                            var toolTipText = String.Format(Math.Round(price, 2) + " " + currencySymbol
                                                            + Environment.NewLine + "Volumen: " + String.Format("{0:#,#,0}", volume)
                                                            + Environment.NewLine + DateTime.FromOADate(dateOLE).ToShortDateString());
                            tooltip.Show(toolTipText, chartStock, e.Location.X + 10, e.Location.Y - 15);
                        }
                    }
                }
            }
        }