Exemplo n.º 1
0
        private void OnRoomReceive(List <Room> rooms)
        {
            for (var rowIndex = 0; rowIndex < grid.rows.Count; rowIndex++)
            {
                var row       = grid.rows[rowIndex];
                var performer = (PerformerStatEx)row.ValueObject;
                performer.Rooms = string.Join(", ", rooms.Where(r => r.Owner == performer.UserId).Select(r => r.Name));
                grid.UpdateRow(rowIndex, performer);
            }
            var blank            = new PerformerStatEx();
            var roomsColumnIndex = grid.Columns.FindIndex(col => col.PropertyName == blank.Property(p => p.Rooms));

            grid.InvalidateColumns(roomsColumnIndex, roomsColumnIndex);
            chat.RoomsReceived -= RoomsReceived;
        }
Exemplo n.º 2
0
        public void SetupGrid()
        {
            var stat = new PerformerStatEx();

            try
            {
                var metadataSettings = TradeSharpDictionary.Instance.proxy.GetMetadataByCategory("UserInfoEx");
                if (metadataSettings != null)
                {
                    imgListAvatar.ImageSize = new Size((int)metadataSettings["SmallAvatarMaxSize"],
                                                       (int)metadataSettings["SmallAvatarMaxSize"]);
                }
            }
            catch (Exception ex)
            {
                Logger.Info("PerformersFastGrid.SetupGrid", ex);
            }
            try
            {
                grid.Columns.Clear();
                var cols     = LoadColumns();
                var fontBold = new Font(Font, FontStyle.Bold);

                foreach (var col in cols)
                {
                    var column = new FastColumn(col.PropertyName, col.Title)
                    {
                        FormatString = col.FormatString
                                       //ColumnMinWidth = 65
                    };
                    if (!string.IsNullOrEmpty(col.FormatSuffix))
                    {
                        column.Tag             = col.FormatSuffix;
                        column.CellFormatting += args =>
                        {
                            args.resultedString += (string)column.Tag;
                        };
                    }
                    // определенные колонки имеют определенные настройки
                    if (col.PropertyName == stat.Property(t => t.IsSubscribed))
                    {
                        column.IsHyperlinkStyleColumn = true;
                        column.HyperlinkActiveCursor  = Cursors.Hand;
                        column.ImageList = imageListGrid;
                    }
                    else if (col.PropertyName == stat.Property(t => t.TradeSignalTitle) ||
                             col.PropertyName == stat.Property(t => t.Login))
                    {
                        if (col.PropertyName == stat.Property(t => t.TradeSignalTitle))
                        {
                            column.ColumnMinWidth = 70;
                        }
                        column.IsHyperlinkStyleColumn   = true;
                        column.HyperlinkActiveCursor    = Cursors.Hand;
                        column.ColorHyperlinkTextActive = Color.Blue;
                        column.HyperlinkFontActive      = fontBold;
                        column.ShowClippedContent       = true;
                    }
                    else if (col.PropertyName == stat.Property(t => t.ChartIndex))
                    {
                        column.ColumnWidth            = imgListChartMini.ImageSize.Width + grid.CellPadding * 2;
                        column.ImageList              = imgListChartMini;
                        column.IsHyperlinkStyleColumn = true;
                        column.HyperlinkActiveCursor  = Cursors.Hand;
                    }
                    else if (col.PropertyName == stat.Property(t => t.UserScore))
                    {
                        column.IsHyperlinkStyleColumn   = true;
                        column.HyperlinkActiveCursor    = Cursors.Hand;
                        column.ColorHyperlinkTextActive = Color.Blue;
                        column.HyperlinkFontActive      = fontBold;
                    }
                    else if (col.PropertyName == stat.Property(t => t.IsRealAccount))
                    {
                        column.ImageList = imageListGrid;
                    }
                    else if (col.PropertyName == stat.Property(t => t.AvatarSmallIndex))
                    {
                        column.ImageList   = imgListAvatar;
                        column.ColumnWidth = imgListAvatar.ImageSize.Width + grid.CellPadding * 2;
                    }
                    else if (col.PropertyName == stat.Property(t => t.Rooms))
                    {
                        column.IsHyperlinkStyleColumn   = true;
                        column.HyperlinkActiveCursor    = Cursors.Hand;
                        column.ColorHyperlinkTextActive = Color.Blue;
                        column.HyperlinkFontActive      = fontBold;
                    }

                    column.Visible = true;
                    grid.Columns.Add(column);
                }

                // установка минимальных размеров таблицы (а зачем?)
                //grid.CalcSetTableMinWidth();
                grid.DataBind(grid.rows.Select(r => r.ValueObject).ToList());
                grid.CheckSize(true);
            }
            // ReSharper disable EmptyGeneralCatchClause
            catch
            // ReSharper restore EmptyGeneralCatchClause
            {
                // мб в режиме дизайнера, о чем контрол никогда не узнает
            }
        }
Exemplo n.º 3
0
        public void DataBind(List <PerformerStatEx> performerStats, ChatControlBackEnd chat)
        {
            var images = imgListChartMini.Images.Cast <Image>().ToList();

            imgListChartMini.Images.Clear();
            foreach (var img in images)
            {
                img.Dispose();
            }
            var data = new List <PerformerStatEx>();

            // UserScore вычисляется на сервере
            // RecalcUserScore(performerStats);

            var userInfoExSource = new UserInfoExCache(TradeSharpAccountStatistics.Instance.proxy);
            var usersInfoEx      = userInfoExSource.GetUsersInfo(performerStats.Select(p => p.UserId).Distinct().ToList());

            var rowColors    = new[] { Color.Red, Color.ForestGreen, Color.Black };
            var stringFormat = new StringFormat
            {
                Alignment     = StringAlignment.Near,
                LineAlignment = StringAlignment.Center
            };

            using (var font = new Font(Font.FontFamily, 7))
                foreach (var performerStat in performerStats)
                {
                    // создать картинку с графиком
                    var bmp = new Bitmap(imgListChartMini.ImageSize.Width, imgListChartMini.ImageSize.Height);
                    if (performerStat.Chart != null)
                    {
                        using (var gr = Graphics.FromImage(bmp))
                        {
                            var leftValue = performerStat.AvgYearProfit;
                            var leftText  = string.Format("{0:f2}%", leftValue);

                            var leftTextWidth = gr.MeasureString(leftText, font).ToSize().Width;
                            var rightValue    = performerStat.ProfitLastMonthsAbs;
                            var rightText     = rightValue.ToStringUniformMoneyFormat(false);
                            var textWidth     = leftTextWidth + gr.MeasureString(rightText, font).ToSize().Width;
                            if (!ShowLabelsInMiniChart)
                            {
                                textWidth = 0;
                            }
                            PointF[] points;
                            if (ChartBrush != null)
                            {
                                points = MiniChartPacker.MakePolygon(performerStat.Chart,
                                                                     imgListChartMini.ImageSize.Width - textWidth,
                                                                     imgListChartMini.ImageSize.Height, 1, 1);
                            }
                            else
                            {
                                points = MiniChartPacker.MakePolyline(performerStat.Chart,
                                                                      imgListChartMini.ImageSize.Width - textWidth,
                                                                      imgListChartMini.ImageSize.Height, 1, 1);
                            }
                            gr.SmoothingMode     = SmoothingMode.AntiAlias;
                            gr.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
                            if (ShowLabelsInMiniChart)
                            {
                                for (var i = 0; i < points.Length; i++)
                                {
                                    points[i] = new PointF(points[i].X + leftTextWidth, points[i].Y);
                                }
                                gr.DrawString(leftText, font,
                                              new SolidBrush(leftValue >= 0 ? rowColors[1] : rowColors[0]), 0,
                                              imgListChartMini.ImageSize.Height / 2, stringFormat);
                                gr.DrawString(rightText, font,
                                              new SolidBrush(rightValue >= 0 ? rowColors[1] : rowColors[0]),
                                              imgListChartMini.ImageSize.Width - textWidth + leftTextWidth,
                                              imgListChartMini.ImageSize.Height / 2, stringFormat);
                            }

                            if (ChartBrush != null)
                            {
                                gr.FillPolygon(ChartBrush, points);
                            }
                            else
                            {
                                gr.DrawLines(ChartPen ?? new Pen(leftValue >= 0 ? rowColors[1] : rowColors[0], 2), points);
                            }
                        }
                    }
                    var item = new PerformerStatEx(performerStat)
                    {
                        ChartIndex = imgListChartMini.Images.Count
                    };
                    imgListChartMini.Images.Add(bmp);
                    imgListChartMini.Images.SetKeyName(item.ChartIndex, item.ChartIndex.ToString());

                    // создать фотку
                    UserInfoEx userInfoEx = null;
                    if (usersInfoEx != null)
                    {
                        userInfoEx = usersInfoEx.Find(ui => ui != null && ui.Id == performerStat.UserId);
                    }
                    if (userInfoEx != null && userInfoEx.AvatarSmall != null)
                    {
                        item.AvatarSmallIndex = imgListAvatar.Images.Count;
                        imgListAvatar.Images.Add(userInfoEx.AvatarSmall);
                        imgListAvatar.Images.SetKeyName(item.AvatarSmallIndex, item.AvatarSmallIndex.ToString());
                    }
                    else
                    {
                        item.AvatarSmallIndex = -1;
                    }

                    data.Add(item);
                }

            grid.DataBind(data);
            grid.Invalidate();

            if (this.chat != null)
            {
                this.chat.RoomsReceived -= RoomsReceived;
            }
            this.chat = chat;

            if (chat == null)
            {
                return;
            }

            chat.RoomsReceived += RoomsReceived;
            chat.GetRooms();
        }
Exemplo n.º 4
0
        private void SetupGrids()
        {
            var blank = new PerformerStatEx();

            // участники
            performersFastGrid.LoadPerformersGridSelectedColumns += () => new List <string>
            {
                blank.Property(p => p.ChartIndex),
                blank.Property(p => p.TradeSignalTitle),
                blank.Property(p => p.Profit),
                blank.Property(p => p.SumProfitPoints),
                blank.Property(p => p.ProfitLastMonthsAbs),
            };
            performersFastGrid.SetupGrid();
            // переименовываем и задаем подходящее форматирование
            var colTradeSignalTitle = performersFastGrid.Grid.Columns.FirstOrDefault(c => c.PropertyName == blank.Property(p => p.TradeSignalTitle));

            if (colTradeSignalTitle != null)
            {
                colTradeSignalTitle.Title = Localizer.GetString("TitleTrader");
                colTradeSignalTitle.ShowClippedContent = true;
            }
            var column = performersFastGrid.Grid.Columns.FirstOrDefault(c => c.PropertyName == blank.Property(p => p.Profit));

            if (column != null)
            {
                column.Title                = "%";
                column.cellFormatting       = null; // отменяем дополнение цифр единицами измерения, которые выполняется в PerformersFastGrid
                column.colorColumnFormatter = DigitColorColumnFormatter;
            }
            column = performersFastGrid.Grid.Columns.FirstOrDefault(c => c.PropertyName == blank.Property(p => p.SumProfitPoints));
            if (column != null)
            {
                column.Title                = Localizer.GetString("TitlePointsUnits");
                column.cellFormatting       = null;
                column.colorColumnFormatter = DigitColorColumnFormatter;
            }
            column = performersFastGrid.Grid.Columns.FirstOrDefault(c => c.PropertyName == blank.Property(p => p.ProfitLastMonthsAbs));
            if (column != null)
            {
                column.Title                = "$";
                column.cellFormatting       = null;
                column.FormatString         = "f0";
                column.colorColumnFormatter = DigitColorColumnFormatter;
            }
            performersFastGrid.Grid.CheckSize(true);

            // статистика
            statisticsFastGrid.SelectEnabled = false;
            statisticsFastGrid.Columns.Add(new FastColumn("a", Localizer.GetString("TitleStatisticsIndex"))
            {
                ShowClippedContent = true,
            });
            statisticsFastGrid.Columns.Add(new FastColumn("b", " ")
            {
                ColumnWidth          = 50,
                colorColumnFormatter = DigitColorColumnFormatter
            });

            // таблицы с позициями
            PerformerStatistic.SetupDealsGrid(openedOrdersFastGrid, false);
            PerformerStatistic.SetupDealsGrid(closedOrdersFastGrid, true);

            // суммарная статистика
            var blankSummaryStatItem = new SummaryStatItem(string.Empty, Color.Empty);

            gridSummaryStat.Columns.Add(new FastColumn(blankSummaryStatItem.Property(p => p.ValueString), Localizer.GetString("TitleValue")));
            gridSummaryStat.colorFormatter = (object value, out Color? color, out Color? fontColor) =>
            {
                color = null;
                var rowData = (SummaryStatItem)value;
                fontColor = rowData.RowColor;
            };
            gridSummaryStat.UserDrawCellText += PerformerStatistic.GridSummaryStatUserDrawCellText;
        }