Forex_Strategy_Builder.Journal_Bars.OnPaint C# (CSharp) Метод

OnPaint() защищенный Метод

Paints the journal
protected OnPaint ( PaintEventArgs e ) : void
e PaintEventArgs
Результат void
        protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;

            int   iHScrll  = -hScrollBar.Value;
            bool  bWarning = false;
            Brush brush    = Brushes.Red;
            Size  size     = new Size(ClientSize.Width - vScrollBar.Width, rowHeight);

            StringFormat sf = new StringFormat();
            sf.Alignment = StringAlignment.Center;

            // Caption background
            RectangleF rectfCaption = new RectangleF(0, 0, ClientSize.Width, 2 * rowHeight);
            Data.GradientPaint(g, rectfCaption, LayoutColors.ColorCaptionBack, LayoutColors.DepthCaption);

            // Print the journal caption
            string unit = Configs.AccountInMoney ? " [" + Configs.AccountCurrency + "]" : " [" + Language.T("pips") + "]";
            string accUnit = " [" + Configs.AccountCurrency + "]";
            g.SetClip(new RectangleF(border, 0, ClientSize.Width - 2 * border, 2 * rowHeight));
            g.DrawString(Language.T("Market Data"), font, brushCaptionText, iHScrll + (aiX[8] + aiX[0]) / 2, 0, sf);
            g.DrawString(Language.T("Summary") + unit, font, brushCaptionText, iHScrll + (aiX[14] + aiX[8]) / 2, 0, sf);
            g.DrawString(Language.T("Account") + unit, font, brushCaptionText, iHScrll + (aiX[16] + aiX[14]) / 2, 0, sf);
            g.DrawString(Language.T("Margin")  + accUnit, font, brushCaptionText, iHScrll + (aiX[18] + aiX[16]) / 2, 0, sf);
            g.DrawString(Language.T("Backtest"), font, brushCaptionText, iHScrll + (aiX[19] + aiX[18]) / 2, 0, sf);
            if (Configs.AccountInMoney)
            {
                for (int i = 0; i < columns; i++)
                    g.DrawString(asTitlesMoney[i], font, brushCaptionText, iHScrll + (aiX[i] + aiX[i + 1]) / 2, rowHeight, sf);
            }
            else
            {
                for (int i = 0; i < columns; i++)
                    g.DrawString(asTitlesPips[i], font, brushCaptionText, iHScrll + (aiX[i] + aiX[i + 1]) / 2, rowHeight, sf);
            }
            g.ResetClip();

            RectangleF rectField = new RectangleF(border, 2 * rowHeight, ClientSize.Width - 2 * border, ClientSize.Height - 2 * rowHeight - border);
            g.FillRectangle(new SolidBrush(colorBack), rectField);

            size = new Size(ClientSize.Width - vScrollBar.Width - 2 * border, rowHeight);

            // Prints the journal data
            for (int bar = firstBar; bar < firstBar + shownBars; bar++)
            {
                int y = (bar - firstBar + 2) * rowHeight;
                Point point = new Point(border, y);

                // Even row
                if ((bar - firstBar) % 2f != 0)
                    g.FillRectangle(brushEvenRowBack, new Rectangle(point, size));

                // Warning row
                if (asJournalData[bar - firstBar, columns - 1] == Language.T("Ambiguous"))
                {
                    g.FillRectangle(brushWarningBack, new Rectangle(point, size));
                    bWarning = true;
                }
                else
                {
                    bWarning = false;
                }

                // Selected row
                if (bar - firstBar == selectedRow)
                {
                    g.FillRectangle(brushSelectedRowBack, new Rectangle(point, size));
                    brush = brushSelectedRowText;
                }
                else
                {
                    brush = bWarning ? brushWarningText : brushRowText;
                }

                // Draw the position icon
                int imgY = y + (int)Math.Floor((rowHeight - 16) / 2.0);
                g.DrawImage(aiPositionIcons[bar - firstBar], iHScrll + 2, imgY, 16, 16);

                // Prints the data
                g.DrawString(asJournalData[bar - firstBar, 0], font, brush, iHScrll + (16 + aiX[1]) / 2, (bar - firstBar + 2) * rowHeight, sf);
                for (int i = 1; i < columns; i++)
                    g.DrawString(asJournalData[bar - firstBar, i], font, brush, iHScrll + (aiX[i] + aiX[i + 1]) / 2, (bar - firstBar + 2) * rowHeight, sf);
            }

            // Horizontal line in the title
            //g.DrawLine(penLines, 0, iRowHeight, ClientSize.Width, iRowHeight);

            // Vertical lines
            for (int i = 1; i < columns; i++)
            {
                if (i == 8 || i == 14 || i == 16 || i == 18)
                {
                    RectangleF rectfSeparator = new RectangleF(aiX[i] + iHScrll, rowHeight / 2, 1, 3 * rowHeight / 2);
                    Data.GradientPaint(g, rectfSeparator, LayoutColors.ColorCaptionBack, -2 * LayoutColors.DepthCaption);
                    g.DrawLine(penLines, aiX[i] + iHScrll, 2 * rowHeight, aiX[i] + iHScrll, ClientSize.Height);
                }
                else
                    g.DrawLine(penLines, aiX[i] + iHScrll, 2 * rowHeight, aiX[i] + iHScrll, ClientSize.Height);
            }

            // Border
            g.DrawLine(penBorder, 1, 2 * rowHeight, 1, ClientSize.Height);
            g.DrawLine(penBorder, ClientSize.Width - border + 1, 2 * rowHeight, ClientSize.Width - border + 1, ClientSize.Height);
            g.DrawLine(penBorder, 0, ClientSize.Height - border + 1, ClientSize.Width, ClientSize.Height - border + 1);

            OnSelectedBarChange(new EventArgs());

            return;
        }