Esempio n. 1
0
        public void NewText(List <string> lines, bool resetIndex = true)
        {
            if (resetIndex)
            {
                _index       = 0;
                CurrentLines = lines;
                UpdatePositionBar();
            }

            if (resetIndex)
            {
                if (Index != -1)
                {
                    MaximumLines = 19;
                    if (lines.Count > MaximumLines)
                    {
                        UpButton.Visible    = true;
                        DownButton.Visible  = true;
                        PositionBar.Visible = true;
                    }
                    else
                    {
                        UpButton.Visible    = false;
                        DownButton.Visible  = false;
                        PositionBar.Visible = false;
                    }
                }
                else
                {
                    MaximumLines        = 19;
                    UpButton.Visible    = false;
                    DownButton.Visible  = false;
                    PositionBar.Visible = false;
                }
            }

            for (int i = 0; i < TextButtons.Count; i++)
            {
                TextButtons[i].Dispose();
            }

            for (int i = 0; i < TextLabel.Length; i++)
            {
                if (TextLabel[i] != null)
                {
                    TextLabel[i].Text = "";
                }
            }

            TextButtons.Clear();

            int lastLine = lines.Count > MaximumLines ? ((MaximumLines + _index) > lines.Count ? lines.Count : (MaximumLines + _index)) : lines.Count;

            for (int i = _index; i < lastLine; i++)
            {
                TextLabel[i] = new MirLabel
                {
                    Font       = font,
                    DrawFormat = TextFormatFlags.WordBreak,
                    Visible    = true,
                    Parent     = this,
                    Size       = new Size(420, 20),
                    Location   = new Point(40, 64 + (i - _index) * 20),
                    NotControl = true
                };

                if (i >= lines.Count)
                {
                    TextLabel[i].Text = string.Empty;
                    continue;
                }

                string currentLine = lines[i];

                List <Match> matchList = R.Matches(currentLine).Cast <Match>().ToList();
                matchList.AddRange(C.Matches(currentLine).Cast <Match>());

                int oldLength = currentLine.Length;

                foreach (Match match in matchList.OrderBy(o => o.Index).ToList())
                {
                    int offSet = oldLength - currentLine.Length;

                    Capture  capture = match.Groups[1].Captures[0];
                    string[] values  = capture.Value.Split('/');
                    currentLine = currentLine.Remove(capture.Index - 1 - offSet, capture.Length + 2).Insert(capture.Index - 1 - offSet, values[0]);
                    string text = currentLine.Substring(0, capture.Index - 1 - offSet) + " ";
                    Size   size = TextRenderer.MeasureText(CMain.Graphics, text, TextLabel[i].Font, TextLabel[i].Size, TextFormatFlags.TextBoxControl);

                    if (R.Match(match.Value).Success)
                    {
                        string link = GetLinkFromString(values[0], values[1]);

                        NewButton(values[0], values[1], TextLabel[i].Location.Add(new Point(size.Width - 11, 0)), link);
                    }

                    if (C.Match(match.Value).Success)
                    {
                        NewColour(values[0], values[1], TextLabel[i].Location.Add(new Point(size.Width - 11, 0)));
                    }
                }

                TextLabel[i].Text        = currentLine;
                TextLabel[i].MouseWheel += LoginNoticeDialog_MouseWheel;
            }
            OkButton.BringToFront();
        }