Esempio n. 1
0
        public GridDropDialog(int left, int top, int width, int height,
                              int minTableWidth, int fixedTableWidth,
                              Color cellBackColor, Color altBackColor, Color fontColor,
                              IEnumerable <FastColumn> columns, IList boundObjects, object selectedObj)
        {
            InitializeComponent();
            grid = new FastGrid {
                Dock = DockStyle.Fill, Parent = this
            };
            Controls.Add(grid);

            Text            = string.Empty;
            FormBorderStyle = FormBorderStyle.FixedDialog;
            MinimizeBox     = false;
            MaximizeBox     = false;
            ControlBox      = false;
            ShowInTaskbar   = false;
            TopMost         = true;
            Capture         = true;

            grid.Columns.AddRange(columns);
            if (minTableWidth > 0)
            {
                grid.MinimumTableWidth = minTableWidth;
            }
            if (fixedTableWidth > 0)
            {
                width = fixedTableWidth;
            }
            grid.ColorAltCellBackground = altBackColor;
            grid.ColorCellBackground    = cellBackColor;
            grid.ColorCellFont          = fontColor;
            grid.DataBind(boundObjects);
            if (selectedObj != null)
            {
                foreach (var row in grid.rows)
                {
                    if (row.ValueObject == selectedObj)
                    {
                        row.Selected = true;
                        break;
                    }
                }
            }
            grid.UserHitCell += GridUserHitCell;

            SetBounds(left, top, width, height);
        }
Esempio n. 2
0
        public GridDropDialog(int left, int top, int width, int height,
            int minTableWidth, int fixedTableWidth,
            Color cellBackColor, Color altBackColor, Color fontColor,
            IEnumerable<FastColumn> columns, IList boundObjects, object selectedObj)
        {
            InitializeComponent();
            grid = new FastGrid {Dock = DockStyle.Fill, Parent = this};
            Controls.Add(grid);

            Text = string.Empty;
            FormBorderStyle = FormBorderStyle.FixedDialog;
            MinimizeBox = false;
            MaximizeBox = false;
            ControlBox = false;
            ShowInTaskbar = false;
            TopMost = true;
            Capture = true;

            grid.Columns.AddRange(columns);
            if (minTableWidth > 0) grid.MinimumTableWidth = minTableWidth;
            if (fixedTableWidth > 0) width = fixedTableWidth;
            grid.ColorAltCellBackground = altBackColor;
            grid.ColorCellBackground = cellBackColor;
            grid.ColorCellFont = fontColor;
            grid.DataBind(boundObjects);
            if (selectedObj != null)
            {
                foreach (var row in grid.rows)
                {
                    if (row.ValueObject == selectedObj)
                    {
                        row.Selected = true;
                        break;
                    }
                }
            }
            grid.UserHitCell += GridUserHitCell;

            SetBounds(left, top, width, height);
        }
Esempio n. 3
0
        private void Rebuild()
        {
            // ищем отображаемые свойства как пересечение множеств свойств выбранных объектов
            var selectedProperties = new List<PropertyInfo>();
            if (selectedObjects != null)
            {
                var chartObjectPropertiesDict = new Dictionary<object, List<PropertyInfo>>();
                var allProperties = new List<PropertyInfo>();
                foreach (var chartObject in selectedObjects)
                {
                    var chartObjectProperties = chartObject.GetType().GetProperties().Where(IsBrowsable).ToList();
                    chartObjectPropertiesDict.Add(chartObject, chartObjectProperties);
                    allProperties.AddRange(chartObjectProperties);
                }
                // ищем пересечение
                foreach (var property in allProperties)
                {
                    var add = true;
                    foreach (var chartObject in selectedObjects)
                    {
                        // одинаковые по сути свойства представлены разными объектами PropertyInfo,
                        // а IEquatable.Equals сравнивает ссылки, поэтому проверку на равенство выполняем самостоятельно
                        if (!chartObjectPropertiesDict[chartObject].Any(p => p.Name == property.Name && p.PropertyType == property.PropertyType))
                        {
                            add = false;
                            break;
                        }
                    }
                    if (add && !selectedProperties.Any(p => p.Name == property.Name && p.PropertyType == property.PropertyType))
                        selectedProperties.Add(property);
                }
            }
            else if (selectedObject != null)
                selectedProperties = selectedObject.GetType().GetProperties().Where(IsBrowsable).ToList();

            // определяем категории
            var categories = new List<Cortege2<string, int>>();
            foreach (var property in selectedProperties)
            {
                var category = GetCategory(property);
                if (!string.IsNullOrEmpty(category) && !categories.Exists(c => c.a == category))
                    categories.Add(new Cortege2<string, int>(category, GetOrder(property).b));
            }

            // сортируем категории
            categories.Sort((arg1, arg2) => arg1.b - arg2.b);

            // для каждой категории создаем по вкладке
            tabControl.TabPages.Clear();
            var blankRow = new FastPropertyGridRow();
            foreach (var category in categories)
            {
                tabControl.TabPages.Add(category.a, category.a);
                var fastGrid = new FastGrid.FastGrid {Dock = DockStyle.Fill, FitWidth = true, CaptionHeight = 0};
                fastGrid.Columns.Add(new FastColumn(blankRow.Property(p => p.Title)));
                fastGrid.Columns.Add(new FastColumn(blankRow.Property(p => p.StringValue)) {ColumnFont = new Font(Font, FontStyle.Bold)});
                fastGrid.Columns.Add(new FastColumn(blankRow.Property(p => p.Property)) {Visible = false});
                fastGrid.Columns.Add(new FastColumn(blankRow.Property(p => p.Value)) {Visible = false});
                fastGrid.UserHitCell += UserHitCell;
                tabControl.TabPages[category.a].Controls.Add(fastGrid);
                // определяем свойства внутри категории
                var propertiesInCategory = new List<Cortege2<PropertyInfo, int>>();
                foreach (var property in selectedProperties)
                {
                    if (GetCategory(property) != category.a)
                        continue;
                    propertiesInCategory.Add(new Cortege2<PropertyInfo, int>(property, GetOrder(property).a));
                }

                // сортируем свойства
                propertiesInCategory.Sort((arg1, arg2) => arg1.b - arg2.b);

                // создаем данные типа "имя-значение"
                var data = new List<FastPropertyGridRow>();
                foreach (var property in propertiesInCategory)
                {
                    // в случае множества объектов, null - фиктивное значение (значение, используемое для отображения в случае различных значений)
                    object value = null;
                    if (selectedObjects != null)
                    {
                        var allValues = GetDistinctPropertyValues(selectedObjects, property.a);
                        if (allValues.Count == 1)
                            value = allValues.First();
                    }
                    else if (selectedObject != null)
                        value = property.a.GetValue(selectedObject, null);

                    data.Add(new FastPropertyGridRow
                        {
                            Title = GetDisplayName(property.a),
                            Value = value,
                            Property = property.a,
                            StringValue = GetStringValue(value, property.a)
                        });
                }
                fastGrid.DataBind(data);

                // фиксируем ширину колонки с наименованием
                fastGrid.CheckSize(true);
            }
            RebuildSample();
        }
Esempio n. 4
0
        private void Rebuild()
        {
            // ищем отображаемые свойства как пересечение множеств свойств выбранных объектов
            var selectedProperties = new List <PropertyInfo>();

            if (selectedObjects != null)
            {
                var chartObjectPropertiesDict = new Dictionary <object, List <PropertyInfo> >();
                var allProperties             = new List <PropertyInfo>();
                foreach (var chartObject in selectedObjects)
                {
                    var chartObjectProperties = chartObject.GetType().GetProperties().Where(IsBrowsable).ToList();
                    chartObjectPropertiesDict.Add(chartObject, chartObjectProperties);
                    allProperties.AddRange(chartObjectProperties);
                }
                // ищем пересечение
                foreach (var property in allProperties)
                {
                    var add = true;
                    foreach (var chartObject in selectedObjects)
                    {
                        // одинаковые по сути свойства представлены разными объектами PropertyInfo,
                        // а IEquatable.Equals сравнивает ссылки, поэтому проверку на равенство выполняем самостоятельно
                        if (chartObjectPropertiesDict[chartObject].Any(
                                p => p.Name == property.Name && p.PropertyType == property.PropertyType))
                        {
                            continue;
                        }
                        add = false;
                        break;
                    }
                    if (add && !selectedProperties.Any(p => p.Name == property.Name && p.PropertyType == property.PropertyType))
                    {
                        selectedProperties.Add(property);
                    }
                }
            }
            else if (selectedObject != null)
            {
                selectedProperties = selectedObject.GetType().GetProperties().Where(IsBrowsable).ToList();
            }

            // определяем категории
            var categories = new List <Cortege2 <string, int> >();

            foreach (var property in selectedProperties)
            {
                var category = GetCategory(property);
                if (!string.IsNullOrEmpty(category) && !categories.Exists(c => c.a == category))
                {
                    categories.Add(new Cortege2 <string, int>(category, GetOrder(property).b));
                }
            }

            // сортируем категории
            categories.Sort((arg1, arg2) => arg1.b - arg2.b);

            // для каждой категории создаем по вкладке
            tabControl.TabPages.Clear();
            var blankRow = new FastPropertyGridRow();

            foreach (var category in categories)
            {
                tabControl.TabPages.Add(category.a, category.a);
                var fastGrid = new FastGrid.FastGrid {
                    Dock = DockStyle.Fill, FitWidth = true, CaptionHeight = 0
                };
                Grid = fastGrid;
                fastGrid.Columns.Add(new FastColumn(blankRow.Property(p => p.Title)));
                fastGrid.Columns.Add(new FastColumn(blankRow.Property(p => p.StringValue))
                {
                    ColumnFont = new Font(Font, FontStyle.Bold)
                });
                fastGrid.Columns.Add(new FastColumn(blankRow.Property(p => p.Property))
                {
                    Visible = false
                });
                fastGrid.Columns.Add(new FastColumn(blankRow.Property(p => p.Value))
                {
                    Visible = false
                });
                fastGrid.UserHitCell += UserHitCell;
                tabControl.TabPages[category.a].Controls.Add(fastGrid);
                // определяем свойства внутри категории
                var propertiesInCategory = new List <Cortege2 <PropertyInfo, int> >();
                foreach (var property in selectedProperties)
                {
                    if (GetCategory(property) != category.a)
                    {
                        continue;
                    }
                    propertiesInCategory.Add(new Cortege2 <PropertyInfo, int>(property, GetOrder(property).a));
                }

                // сортируем свойства
                propertiesInCategory.Sort((arg1, arg2) => arg1.b - arg2.b);

                // создаем данные типа "имя-значение"
                var data = new List <FastPropertyGridRow>();
                foreach (var property in propertiesInCategory)
                {
                    // в случае множества объектов, null - фиктивное значение (значение, используемое для отображения в случае различных значений)
                    object value = null;
                    if (selectedObjects != null)
                    {
                        var allValues = GetDistinctPropertyValues(selectedObjects, property.a);
                        if (allValues.Count == 1)
                        {
                            value = allValues.First();
                        }
                    }
                    else if (selectedObject != null)
                    {
                        value = property.a.GetValue(selectedObject, null);
                    }

                    data.Add(new FastPropertyGridRow
                    {
                        Title       = GetDisplayName(property.a),
                        Value       = value,
                        Property    = property.a,
                        StringValue = GetStringValue(value, property.a)
                    });
                }
                fastGrid.DataBind(data);

                // фиксируем ширину колонки с наименованием
                fastGrid.CheckSize(true);
                fastGrid.Visible = true;
            }
            RebuildSample();
        }
        public static void RebindStatisticsFastGrid(FastGrid.FastGrid grid, PerformerStat performer, AccountEfficiency efficiency)
        {
            if (performer == null)
                return;
            var singleValueData = new List<TradeSharp.Util.Cortege2<string, string>>();
            singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                {
                    a = Localizer.GetString("TitleProfitInPercents"),
                    b = performer.Profit.ToString("f2")
                });
            singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                {
                    a = Localizer.GetString("TitleDealsTotal"),
                    b = performer.DealsCount.ToStringUniformMoneyFormat()
                });
            singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                {
                    a = Localizer.GetString("TitleMaximumRelativeDrawdownInPercents"),
                    b = performer.MaxRelDrawDown.ToString("N2")
                });

            if (efficiency != null) // при получении всех сделок
            {
                singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                {
                    a = Localizer.GetString("TitleProfitableDealCount"),
                    b = (efficiency.closedDeals.Count(d => d.ResultDepo > 0) +
                         efficiency.openedDeals.Count(d => d.ResultDepo > 0)).ToStringUniformMoneyFormat()
                });
                singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                {
                    a = Localizer.GetString("TitleLosingDealCount"),
                    b = (efficiency.closedDeals.Count(d => d.ResultDepo < 0) +
                         efficiency.openedDeals.Count(d => d.ResultDepo < 0)).ToStringUniformMoneyFormat()
                });
                singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                    {
                        a = Localizer.GetString("TitleDealsOpened"),
                        b = efficiency.DealsStillOpened.ToStringUniformMoneyFormat()
                    });
            }

            singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                {
                    a = Localizer.GetString("TitleRatioOfAverageProfitToAverageLossShort"),
                    b = performer.GreedyRatio.ToString("N2")
                });
            singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                {
                    a = Localizer.GetString("TitleMaximumLeverage"),
                    b = performer.MaxLeverage.ToString("N2")
                });
            singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                {
                    a = Localizer.GetString("TitleProfitForNMonthsInPercents"),
                    b = performer.ProfitLastMonths.ToString("f2")
                });
            singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                {
                    a = Localizer.GetString("TitleGAAnnualProfitInPercentsShort"),
                    b = performer.AvgYearProfit.ToString("N3")
                });
            singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                {
                    a = Localizer.GetString("TitleSharpeRatioShort"),
                    b = performer.Sharp.ToString("N2")
                });
            singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                {
                    a = Localizer.GetString("TitleSubscriberCount"),
                    b = performer.SubscriberCount.ToString("d")
                });
            singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                {
                    a = Localizer.GetString("TitleFundsUnderManagementShort") + ", " + performer.DepoCurrency,
                    b = performer.Equity.ToStringUniformMoneyFormat()
                });
            singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                {
                    a = Localizer.GetString("TitleRatingFS"),
                    b = performer.Score.ToString("f2")
                });
            singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                {
                    a = Localizer.GetString("TitleTradeTimeInDays"),
                    b = performer.DaysTraded.ToString("d")
                });
            singleValueData.Add(new TradeSharp.Util.Cortege2<string, string>
                {
                    a = Localizer.GetString("TitleProfitInPoints"),
                    b = performer.SumProfitPoints.ToStringUniformMoneyFormat(false)
                });
            grid.DataBind(singleValueData);

            // для удобочитаемости первая колонка сохраняет первоначальную минимальную ширину
            var skippedColumns = grid.Columns.Where(c => c.PropertyName == "a").ToList();
            var minWidths = skippedColumns.ToDictionary(c => c, c => c.ColumnMinWidth);
            grid.CheckSize(true);
            skippedColumns.ForEach(c => c.ColumnMinWidth = minWidths[c]);
            grid.Invalidate();
        }
        // отобразить данные суммарной статистики
        public static void BindSummaryStatistics(FastGrid.FastGrid gridSummaryStat, PerformerStat performerStat, AccountEfficiency efficiency, bool showFullInfo)
        {
            if (performerStat == null)
                return;

            // суммарная статистика
            var rowColors = new[] { Color.Red, Color.Blue, Color.Black };
            var color = performerStat.Profit >= 0 ? rowColors[1] : rowColors[0];
            var statItems = new List<SummaryStatItem>();
            if (showFullInfo)
            {
                statItems.Add(
                    new SummaryStatItem(
                        string.Format("{0}\t{1}", Localizer.GetString("TitleSubscriberCount"),
                                      performerStat.SubscriberCount),
                        rowColors[2]));
                statItems.Add(
                    new SummaryStatItem(string.Format("{0}\t{1}", Localizer.GetString("TitleInvestorCount"), 0),
                                        rowColors[2]));
                statItems.Add(new SummaryStatItem(
                                  string.Format("{0}, {1}\t{2}", Localizer.GetString("TitleFundsUnderManagementShort"),
                                                performerStat.DepoCurrency,
                                                performerStat.Equity.ToStringUniformMoneyFormat()), rowColors[2]));
            }
            statItems.Add(new SummaryStatItem(Localizer.GetString("TitleTotalProfit"), rowColors[2]));
            statItems.Add(new SummaryStatItem(string.Format("{0} {1} / {2:f2}% / {3} {4}",
                                                            performerStat.ProfitLastMonthsAbs.ToStringUniformMoneyFormat(false),
                                                            performerStat.DepoCurrency,
                                                            performerStat.Profit,
                                                            performerStat.SumProfitPoints.ToStringUniformMoneyFormat(false),
                                                            Localizer.GetString("TitlePointsUnits")), color));

            if (efficiency != null && efficiency.openedDeals != null && efficiency.openedDeals.Count > 0)
            {
                var openResultDepo = efficiency.openedDeals.Sum(o => o.ResultDepo);
                var openResultPoints = efficiency.openedDeals.Sum(o => o.ResultPoints);
                var openResultPercent = performerStat.Equity == 0 ? 0
                                            : 100 * openResultDepo / performerStat.Equity;
                var colorOpen = openResultDepo >= 0 ? rowColors[1] : rowColors[0];
                statItems.Add(new SummaryStatItem(Localizer.GetString("TitleCurrentProfit"), rowColors[2]));
                statItems.Add(new SummaryStatItem(string.Format("{0} {1} / {2:f2}% / {3} {4}",
                                                      openResultDepo.ToStringUniformMoneyFormat(),
                                                      performerStat.DepoCurrency,
                                                      openResultPercent,
                                                      openResultPoints.ToStringUniformMoneyFormat(),
                                                      Localizer.GetString("TitlePointsUnits")),
                                        colorOpen));
            }

            gridSummaryStat.DataBind(statItems);
        }