Exemple #1
0
        private static void SetupAxisX(Axis axis, GraphConfiguration configuration)
        {
            SetupAxis(axis, configuration.AxisXConfiguration);

            axis.Interval = configuration.AxisXConfiguration.Interval ?? 1;

            switch (configuration.AxisXConfiguration.AxisXLabelFilter.Value)
            {
            case AxisXLabelFilter.All:
                break;

            case AxisXLabelFilter.AllDays:
                axis.IntervalType = DateTimeIntervalType.Days;
                break;

            case AxisXLabelFilter.StartOfMonth:
                axis.IntervalType = DateTimeIntervalType.Months;
                break;

            case AxisXLabelFilter.StartOfWeek:
                axis.IntervalType       = DateTimeIntervalType.Weeks;
                axis.IntervalOffsetType = DateTimeIntervalType.Days;
                axis.IntervalOffset     = configuration.FirstWeekDay - DayOfWeek.Sunday;
                break;

            default:
                throw new ArgumentException(
                          "Invalid AxisXLabelFilter value",
                          configuration.AxisXConfiguration.AxisXLabelFilter.ToString()
                          );
            }
        }
Exemple #2
0
        private static void MinuteSecondSort(
            GraphData data,
            GraphConfiguration configuration,
            ValGroup sortGroup,
            string name,
            Series series
            )
        {
            int    i     = 0;
            int    point = 0;
            double?value = null;

            for (DateTime date = data.FromDate; date <= data.ToDate; date = sortGroup == ValGroup.Minute ? date.AddMinutes(1) : date.AddSeconds(1))
            {
                value = data.GetValueForNameAndDate(name, date, data.Configuration.ItemsConfiguration.Unit, sortGroup);

                if (value != null && value >= 1.0d)
                {
                    point = series.Points.AddXY(i, value.Value);

                    series.Points[point].AxisLabel = date.ToString("HH:mm" + (sortGroup == ValGroup.Minute ? "" : ":ss") + " dd.MM.yy");
                }
                else if (value != null && value < 1.0d)
                {
                }
                else if (configuration.GraphType.Value == GraphTypeEnum.NameDateStackedColumn)
                {
                    point = series.Points.AddXY(i, 0.0d);

                    series.Points[point].AxisLabel = date.ToString("HH:mm" + (sortGroup == ValGroup.Minute ? "" : ":ss") + " dd.MM.yy");
                }

                i++;
            }
        }
Exemple #3
0
        internal GraphData(GraphConfiguration configuration, object context)
        {
            this._configuration = configuration;
            this._plainData     = this._configuration.GraphSource.GetPlainData(context);

            if ((configuration.GraphType == GraphTypeEnum.NameDateStackedColumn) || (configuration.GraphType == GraphTypeEnum.NameDateLine) || (configuration.GraphType == GraphTypeEnum.NamedLine))
            {
                ParseData();
            }
        }
Exemple #4
0
        private static void SetupSeries(Series series, GraphConfiguration configuration, int index)
        {
            if (configuration.Palette.Count > 0)
            {
                PaletteItem item = configuration.Palette[index % configuration.Palette.Count];

                series.BackHatchStyle = item.HatchStyle;
                series.Color          = item.Color;
            }
        }
Exemple #5
0
        private static void SetupPoint(DataPoint point, GraphConfiguration configuration, int index)
        {
            if (configuration.Palette.Count > 0)
            {
                PaletteItem item = configuration.Palette[index % configuration.Palette.Count];

                point.BackHatchStyle = item.HatchStyle;
                point.Color          = item.Color;
            }
        }
Exemple #6
0
        private void DrawSimpleGraph(GraphData data, GraphConfiguration configuration)
        {
            var dt = data.PlainData.FirstOrDefault(d => d.Value.Where(p => p.XValue.HasValue).Count() > 0);

            if (dt.Value != null)
            {
                DrawSimpleXYGraph(dt.Value, configuration);
            }
            else
            {
                DrawSimpleDateTimeGraph(data, configuration);
            }
        }
Exemple #7
0
        /// <summary>
        /// Get configuration from string and draw graph.
        /// </summary>
        /// <param name="text">XML configuration represented as string.</param>
        /// <param name="ownerSize">Owner size.</param>
        /// <param name="context">Configuration context.</param>
        public void SetConfigurationFromText(string text, Size ownerSize, object context)
        {
            using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(text)))
            {
                stream.Seek(0, SeekOrigin.Begin);

                this.SetConfiguration(
                    GraphConfiguration.LoadFromXml(stream),
                    ownerSize,
                    context
                    );
            }
        }
Exemple #8
0
        /// <summary>
        /// Draw graph according passed configuration
        /// </summary>
        /// <param name="configuration">Graph configuration</param>
        /// <param name="ownerSize">Owner size.</param>
        /// <param name="context">Configuration context.</param>
        public void SetConfiguration(GraphConfiguration configuration, Size ownerSize, object context)
        {
            this.chart.Series.Clear();

            this.SetupGraph(configuration);

            switch (configuration.GraphType.Value)
            {
            case GraphTypeEnum.NameDateStackedColumn:
            case GraphTypeEnum.NameDateLine:
                this.DrawNameDateGraph(new GraphData(configuration, context), configuration);
                break;

            case GraphTypeEnum.NamedLine:
                this.DrawNamedGraph(new GraphData(configuration, context), configuration);
                break;

            case GraphTypeEnum.GanttDiagram:
                this.DrawGantt(new GanttGraphData(configuration, context), configuration);
                break;

            default:
                this.DrawSimpleGraph(new GraphData(configuration, context), configuration);
                break;
            }

            foreach (Series series in this.chart.Series)
            {
                GraphSeriesSettings seriesState = this._stateSettings.GetSeriesSettings(series.Name);

                series.Enabled = seriesState.Visible;

                if (!seriesState.Visible && configuration.GraphType.Value == GraphTypeEnum.GanttDiagram)
                {
                    this.RevalueAxisY(series);
                }
            }

            if (configuration.GraphType == GraphTypeEnum.NameDateStackedColumn ||
                configuration.GraphType == GraphTypeEnum.NameDateLine ||
                configuration.GraphType == GraphTypeEnum.NamedLine
                )
            {
                this.HideUnnecessaryXAxisZeroLabel();
            }
        }
Exemple #9
0
        private void SetupGraph(GraphConfiguration configuration)
        {
            this._graphType = configuration.GraphType;

            // set background color for the graph as transparent
            this.chart.BackColor = Color.Transparent;

            this.chart.ChartAreas[0].BorderWidth = configuration.AxisXConfiguration.MajorGrid.Enabled
                                ? configuration.AxisXConfiguration.MajorGrid.LineWidth
                                : 0;

            this.chart.ChartAreas[0].BorderColor = configuration.AxisXConfiguration.MajorGrid.LineColor;

            this.chart.ChartAreas[0].BorderDashStyle = ChartDashStyle.Solid;

            switch (configuration.GraphType.Value)
            {
            case GraphTypeEnum.GanttDiagram:
                this.chart.ChartAreas[0].AxisX.Enabled = AxisEnabled.False;
                SetupAxisX(this.chart.ChartAreas[0].AxisY, configuration);
                this.chart.FormatNumber += chart_FormatNumber;
                break;

            default:
                SetupAxisX(this.chart.ChartAreas[0].AxisX, configuration);
                SetupAxisY(configuration.AxisYConfiguration);
                break;
            }

            this.chart.Legends[0].Enabled   = configuration.LegendConfiguration.Enabled;
            this.chart.Legends[0].Docking   = configuration.LegendConfiguration.Docking;
            this.chart.Legends[0].Alignment = configuration.LegendConfiguration.Alignment;

            if (configuration.LegendConfiguration.GraphicOverlap)
            {
                // this.chart.Legends[0].Alignment = StringAlignment.Center;
                // this.chart.Legends[0].Docking = Docking.Top;
                this.chart.Legends[0].DockedToChartArea = this.chart.ChartAreas[0].Name;
            }

            SetupChartMargin(configuration);
        }
Exemple #10
0
        private void DrawSimpleXYGraph(List <PlainItem> values, GraphConfiguration configuration)
        {
            var linesData = values.GroupBy(v => v.Name);
            int i         = 0;

            foreach (var items in linesData)
            {
                var series = new Series();

                SetupSeries(series, configuration, i++);

                series.IsXValueIndexed = false;
                series.ChartType       = SeriesChartType.Line;
                series.Name            = items.Key;

                this.chart.Series.Add(series);

                this.chart.ChartAreas[0].AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount;

                if (configuration.AxisXConfiguration.Interval.HasValue)
                {
                    this.chart.ChartAreas[0].AxisX.Interval = configuration.AxisXConfiguration.Interval.Value;
                }

                this.chart.ChartAreas[0].AxisX.LabelStyle.Format = configuration.AxisXConfiguration.Format;

                this.chart.FormatNumber += chart_FormatNumber;

                var orderedItems = items.OrderBy(itm => itm.XValue);

                foreach (var item in orderedItems)
                {
                    var    x  = item.Name != null ? (object)item.Name : item.DateTime;
                    var    y  = GraphData.FormatNumericValue(configuration.ItemsConfiguration.Unit, item.YValue);
                    double fx = GraphData.FormatNumericValue(configuration.ItemsConfiguration.Unit, item.XValue.Value);

                    series.Points.AddXY(fx, y);
                }
            }
        }
Exemple #11
0
 /// <summary>
 /// Load configuration from XML file and draw graph
 /// </summary>
 /// <param name="fileName">XML configuration filename</param>
 /// <param name="ownerSize">Owner size.</param>
 /// <param name="context">Configuration context.</param>
 public void SetConfiguration(string fileName, Size ownerSize, object context)
 {
     this.SetConfiguration(GraphConfiguration.LoadFromXml(fileName), ownerSize, context);
 }
Exemple #12
0
        private void DrawSimpleDateTimeGraph(GraphData data, GraphConfiguration configuration)
        {
            int i = 0;

            this.chart.FormatNumber -= chart_FormatNumber;

            foreach (var items in data.PlainData)
            {
                var series = new Series();

                SetupSeries(series, configuration, i++);

                series.IsXValueIndexed = true;

                switch (configuration.GraphType.Value)
                {
                case GraphTypeEnum.Line:
                    series.ChartType = SeriesChartType.Line;
                    break;

                case GraphTypeEnum.Pie:
                    series.ChartType = SeriesChartType.Pie;
                    break;

                case GraphTypeEnum.Column:
                    series.ChartType = SeriesChartType.Column;
                    break;

                case GraphTypeEnum.StackedColumn:
                    series.ChartType = SeriesChartType.StackedColumn;
                    break;
                }

                series.Name = items.Key;

                this.chart.Series.Add(series);

                foreach (var item in items.Value)
                {
                    if (String.IsNullOrEmpty(item.Name) && configuration.GraphType.Value != GraphTypeEnum.Pie &&
                        items.Value[items.Value.Count - 1].DateTime - items.Value[0].DateTime <= new TimeSpan(2, 0, 0, 0)
                        )
                    {
                        var d = items.Value.SelectMany(it => new[] { it.DateTime }).ToList();

                        var min = d.Min();
                        var max = d.Max();

                        this.chart.ChartAreas[0].AxisX.Minimum = min.ToOADate();
                        this.chart.ChartAreas[0].AxisX.Maximum = max.ToOADate();

                        if (item.Equals(items.Value[0]))
                        {
                            this.chart.ChartAreas[0].AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount;
                            this.chart.ChartAreas[0].AxisX.IntervalType     = DateTimeIntervalType.Auto;
                            this.chart.ChartAreas[0].AxisX.Interval         = 0.0;

                            this.chart.FormatNumber += chart_FormatNumber;

                            series.IsXValueIndexed = false;
                        }

                        var y = GraphData.FormatNumericValue(configuration.ItemsConfiguration.Unit, item.YValue);

                        series.Points.AddXY(item.DateTime, y);
                    }
                    else
                    {
                        var x     = item.Name != null ? (object)item.Name : item.DateTime;
                        var y     = GraphData.FormatNumericValue(configuration.ItemsConfiguration.Unit, item.YValue);
                        var index = series.Points.AddXY(x, y);
                        var point = series.Points[index];

                        if (configuration.GraphType.Value == GraphTypeEnum.Pie)
                        {
                            SetupPoint(point, configuration, index);
                        }
                    }
                }
            }

            this.chart.ChartAreas[0].AxisX.IsStartedFromZero = false;
        }
Exemple #13
0
        private void DrawNamedGraph(GraphData data, GraphConfiguration configuration)
        {
            int      seriesIndex = 0;
            DateTime minDate     = DateTime.MaxValue;
            DateTime maxDate     = DateTime.MinValue;
            bool     setupAxis   = false;

            foreach (string name in data.Names)
            {
                Series series = new Series(name)
                {
                    IsXValueIndexed = true
                };

                SetupSeries(series, configuration, seriesIndex++);

                series.ChartType = SeriesChartType.Line;

                this.chart.Series.Add(series);

                foreach (KeyValuePair <string, List <PlainItem> > items in data.PlainData)
                {
                    List <PlainItem> namedItems = items.Value.Where(el => el.Name == name).ToList();

                    if (namedItems.Any())
                    {
                        List <DateTime> d = namedItems.SelectMany(it => new[] { it.DateTime }).ToList();
                        DateTime        minCurrentNamedItem = d.Min();
                        DateTime        maxCurrentNamedItem = d.Max();

                        // minDate = new DateTime(Math.Min(minCurrentNamedItem.Ticks, minDate.Ticks));
                        // maxDate = new DateTime(Math.Max(maxCurrentNamedItem.Ticks, maxDate.Ticks));

                        if (minDate > minCurrentNamedItem)
                        {
                            minDate = minCurrentNamedItem;
                        }

                        if (maxDate < maxCurrentNamedItem)
                        {
                            maxDate = maxCurrentNamedItem;
                        }

                        if (!setupAxis)
                        {
                            setupAxis = true;
                        }

                        this.chart.FormatNumber += chart_FormatNumber;

                        series.IsXValueIndexed = false;

                        foreach (PlainItem item in namedItems)
                        {
                            double y = GraphData.FormatNumericValue(
                                configuration.ItemsConfiguration.Unit,
                                item.YValue
                                );

                            series.Points.AddXY(item.DateTime, y);
                        }
                    }
                }
            }

            ChartArea chartArea = this.chart.ChartAreas[0];

            if (setupAxis)
            {
                chartArea.AxisX.Minimum           = minDate.ToOADate();
                chartArea.AxisX.Maximum           = maxDate.ToOADate();
                chartArea.AxisX.IntervalAutoMode  = IntervalAutoMode.VariableCount;
                chartArea.AxisX.IntervalType      = DateTimeIntervalType.Auto;
                chartArea.AxisX.Interval          = 0.0d;
                chartArea.AxisX.IsStartedFromZero = false;
            }
        }
Exemple #14
0
 /// <summary>
 /// Load configuration from XML in stream and draw graph
 /// </summary>
 /// <param name="stream">Xml configuration stream</param>
 /// <param name="ownerSize">Owner size.</param>
 /// <param name="context">Configuration context.</param>
 public void SetConfiguration(Stream stream, Size ownerSize, object context)
 {
     this.SetConfiguration(GraphConfiguration.LoadFromXml(stream), ownerSize, context);
 }
Exemple #15
0
        private void SetupChartMargin(GraphConfiguration configuration)
        {
            //
            // AxisX.IsMarginVisible
            //
            if (this.chart.ChartAreas[0].AxisX.LabelStyle.Enabled)
            {
                this.chart.ChartAreas[0].AxisX.IsMarginVisible = true;

                // top
                this.chart.ChartAreas[0].InnerPlotPosition.Y = configuration.GraphMargins.GetTop();
                // bottom
                this.chart.ChartAreas[0].InnerPlotPosition.Height = configuration.GraphMargins.GetBottom();
            }
            else
            {
                this.chart.ChartAreas[0].AxisX.IsMarginVisible = false;

                // top
                this.chart.ChartAreas[0].InnerPlotPosition.Y = 0.0f;
                // bottom
                this.chart.ChartAreas[0].InnerPlotPosition.Height = 100.0f;
            }

            //
            // AxisY.IsMarginVisible
            //
            if (this.chart.ChartAreas[0].AxisY.LabelStyle.Enabled)
            {
                this.chart.ChartAreas[0].AxisY.IsMarginVisible = true;

                // left
                this.chart.ChartAreas[0].InnerPlotPosition.X = configuration.GraphMargins.GetLeft();
                // right
                this.chart.ChartAreas[0].InnerPlotPosition.Width = configuration.GraphMargins.GetRight();
            }
            else
            {
                this.chart.ChartAreas[0].AxisY.IsMarginVisible = false;

                // left
                this.chart.ChartAreas[0].InnerPlotPosition.X = 0.0f;
                // right
                this.chart.ChartAreas[0].InnerPlotPosition.Width = 100.0f;
            }

            /*
             * // left
             * this.chart.ChartAreas[0].InnerPlotPosition.X = configuration.GraphMargins.GetLeft();
             *
             * // right
             * this.chart.ChartAreas[0].InnerPlotPosition.Width = configuration.GraphMargins.GetRight();
             *
             * // top
             * this.chart.ChartAreas[0].InnerPlotPosition.Y = configuration.GraphMargins.GetTop();
             *
             * // bottom
             * this.chart.ChartAreas[0].InnerPlotPosition.Height = configuration.GraphMargins.GetBottom();
             */

            this.chart.ChartAreas[0].Position.X = this.chart.ChartAreas[0].InnerPlotPosition.X;

            if (this.chart.ChartAreas[0].AxisY.LabelStyle.Enabled)
            {
                this.chart.ChartAreas[0].Position.Y = 1;
            }
            else
            {
                this.chart.ChartAreas[0].Position.Y = 0;
            }

            this.chart.ChartAreas[0].Position.Width = this.chart.ChartAreas[0].InnerPlotPosition.Width;

            if (this.chart.ChartAreas[0].AxisY.LabelStyle.Enabled)
            {
                this.chart.ChartAreas[0].Position.Height = 98;
            }
            else
            {
                this.chart.ChartAreas[0].Position.Height = 100;
            }

            if (!configuration.LegendConfiguration.GraphicOverlap)
            {
                this.chart.ChartAreas[0].Position.Auto = true;
            }
            else
            {
                this.chart.ChartAreas[0].Position.Auto = false;
            }

            this.chart.Padding = new Padding(0, 0, 0, 0);

            /*
             * var chartArea = this.chart.ChartAreas[0];
             *
             * chartArea.AxisX.IsMarginVisible = true;
             * chartArea.AxisY.IsMarginVisible = true;
             *
             * chartArea.InnerPlotPosition = new ElementPosition(
             *      -0.5f,
             *      -0.5f,
             *      configuration.GraphMargins.GetRight() + 3,
             *      configuration.GraphMargins.GetBottom() + 3
             * );
             */
        }
Exemple #16
0
        private static void MonthWeekDaySort(
            GraphData data,
            GraphConfiguration configuration,
            string name,
            Series series,
            ValGroup sort
            )
        {
            int    i     = 0;
            int    point = 0;
            double?value = null;

            for (DateTime date = data.FromDate.Date; date <= data.ToDate.Date; date = date.Date.AddDays(1))
            {
                DateTime labelDate = date;

                if (sort == ValGroup.Week)
                {
                    labelDate = labelDate.PreviousMonday();
                }

                value = data.GetValueForNameAndDate(name, date, data.Configuration.ItemsConfiguration.Unit, sort);

                if (value != null && value >= 1.0d)
                {
                    point = 0;

                    switch (sort)
                    {
                    case ValGroup.Month:
                        point = series.Points.AddXY(i, value.Value);
                        series.Points[point].AxisLabel = date.Date.ToString("MM.yyyy");
                        break;

                    case ValGroup.Day:
                        point = series.Points.AddXY(date, value.Value);
                        series.Points[point].AxisLabel = date.Date.ToString("dd.MM.yyyy");
                        break;

                    case ValGroup.Week:
                        point = series.Points.AddXY(labelDate, value.Value);
                        series.Points[point].AxisLabel = labelDate.Date.ToString("dd.MM.yyyy");
                        break;
                    }
                }
                else if (value != null && value < 1.0d)
                {
                }
                else if (configuration.GraphType.Value == GraphTypeEnum.NameDateStackedColumn)
                {
                    switch (sort)
                    {
                    case ValGroup.Month:
                        int t = series.Points.AddXY(i, 0.0d);

                        series.Points[t].AxisLabel = date.Date.ToString("MM.yyyy");

                        while (date.AddDays(1).Day != 1)
                        {
                            date = date.AddDays(1);
                        }
                        break;

                    case ValGroup.Day: t           = series.Points.AddXY(date, 0.0d);
                        series.Points[t].AxisLabel = date.Date.ToString("dd.MM.yyyy");
                        break;

                    case ValGroup.Week:
                        if (date.DayOfWeek == DayOfWeek.Monday)
                        {
                            t = series.Points.AddXY(labelDate, 0.0d);
                            series.Points[t].AxisLabel = labelDate.Date.ToString("dd.MM.yyyy");
                        }
                        break;
                    }
                }

                i++;
            }
        }
Exemple #17
0
        private void DrawGantt(GanttGraphData data, GraphConfiguration configuration)
        {
            this.chart.Series.Clear();

            DrawGantt(this.chart, data.Jobs);
        }
Exemple #18
0
        private void DrawNameDateGraph(GraphData data, GraphConfiguration configuration)
        {
            int  i           = 0;
            int  countPoints = -1;
            bool flag        = false;
            var  sortGroup   = ((XmlFileGraphSource)configuration.GraphSource).ValueGroup;

            foreach (string name in data.Names)
            {
                var series = new Series(name)
                {
                    IsXValueIndexed = true
                };

                SetupSeries(series, configuration, i);

                switch (configuration.GraphType.Value)
                {
                case GraphTypeEnum.NameDateStackedColumn:
                    series.ChartType = SeriesChartType.StackedColumn;
                    break;

                case GraphTypeEnum.NameDateLine:
                    series.ChartType = SeriesChartType.Line;
                    break;
                }

                this.chart.Series.Add(series);

                switch (sortGroup)
                {
                case ValGroup.Day:
                case ValGroup.Week:
                case ValGroup.Month:
                default: MonthWeekDaySort(data, configuration, name, series, sortGroup);
                    break;

                case ValGroup.Hour: HourSort(data, configuration, sortGroup, name, series);
                    break;

                case ValGroup.Minute:
                case ValGroup.Second:
                    MinuteSecondSort(data, configuration, sortGroup, name, series);
                    break;
                }

                countPoints = countPoints == -1 ? series.Points.Count : -1;

                flag = flag || (countPoints != series.Points.Count);

                i++;
            }

            if (flag)
            {
                foreach (var chartItems in this.chart.Series)
                {
                    chartItems.IsXValueIndexed = false;
                }
            }
        }
Exemple #19
0
 public GanttGraphData(GraphConfiguration configuration, object context)
 {
     this._configuration = configuration;
     this._data          = this._configuration.GraphSource.GetGanttData(context);
 }