Exemplo n.º 1
0
        public void DrawRegions(Graphics gfx)
        {
            if (_regions == null)
            {
                return;
            }

            using (StringFormat textFormat = new StringFormat())
            {
                textFormat.Alignment     = StringAlignment.Center;
                textFormat.LineAlignment = StringAlignment.Center;

                using (Font font = new Font(_fontFamily, _labelFontSize))
                {
                    using (Brush textBrush = new SolidBrush(_fontColor))
                    {
                        using (Pen solidPen = new Pen(_fontColor))
                        {
                            using (Pen lightPen = new Pen(Color.FromArgb(128, _fontColor)))
                            {
                                float labelWidth = _barWidth + _spaceBtwBars;

                                for (int i = 0; i < _regions.Length; ++i)
                                {
                                    BarRegion reg = _regions[i];

                                    RectangleF rc = new RectangleF(_xOrigin + (reg.m_RangeFrom * labelWidth), _yOrigin, (reg.m_RangeTo - reg.m_RangeFrom + 1) * labelWidth, _graphHeight);

                                    if (rc.X + rc.Width > _xOrigin + _graphWidth)
                                    {
                                        rc.Width = _xOrigin + _graphWidth - rc.X;
                                    }

                                    using (SolidBrush brsh = new SolidBrush(Color.FromArgb(48, GetColor(i))))
                                        gfx.FillRectangle(brsh, rc);

                                    rc.Offset((rc.Width - 200.0f) * 0.5f, -16.0f);
                                    rc.Width  = 200.0f;
                                    rc.Height = 20.0f;

                                    gfx.DrawString(reg.m_Name, font, textBrush, rc, textFormat);
                                }
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        public static BarGraph OverTime(SnapshotHistory history, string reportName, string valueName, int step, int max, int ival)
        {
            BarGraph barGraph = new BarGraph(valueName + " over time", "graphs_" + valueName.ToLower() + "_ot", 10, "Time", valueName, BarGraphRenderMode.Lines);

            TimeSpan ts = TimeSpan.FromHours((max * step) - 0.5);

            DateTime mostRecent = history.Snapshots[history.Snapshots.Count - 1].TimeStamp;
            DateTime minTime    = mostRecent - ts;

            barGraph.FontSize = 6;
            barGraph.Interval = ival;

            ArrayList regions = new ArrayList();

            for (int i = 0; i < history.Snapshots.Count; ++i)
            {
                Snapshot ss        = history.Snapshots[i];
                DateTime timeStamp = ss.TimeStamp;

                if (timeStamp < minTime)
                {
                    continue;
                }

                if ((i % step) != 0)
                {
                    continue;
                }

                int val = LookupReportValue(ss, reportName, valueName);

                if (val == -1)
                {
                    continue;
                }

                int realHours = timeStamp.TimeOfDay.Hours;
                int hours;

                if (realHours == 0)
                {
                    hours = 12;
                }
                else if (realHours > 12)
                {
                    hours = realHours - 12;
                }
                else
                {
                    hours = realHours;
                }

                string dayName = timeStamp.DayOfWeek.ToString();

                if (regions.Count == 0)
                {
                    regions.Add(new BarRegion(barGraph.Items.Count, barGraph.Items.Count, dayName));
                }
                else
                {
                    BarRegion region = (BarRegion)regions[regions.Count - 1];

                    if (region.m_Name == dayName)
                    {
                        region.m_RangeTo = barGraph.Items.Count;
                    }
                    else
                    {
                        regions.Add(new BarRegion(barGraph.Items.Count, barGraph.Items.Count, dayName));
                    }
                }

                barGraph.Items.Add(hours + (realHours >= 12 ? " PM" : " AM"), val);
            }

            barGraph.Regions = (BarRegion[])regions.ToArray(typeof(BarRegion));

            return(barGraph);
        }
Exemplo n.º 3
0
        public static BarGraph Growth(SnapshotHistory history, string reportName, string valueName)
        {
            BarGraph barGraph = new BarGraph("Growth of " + valueName + " over time", "graphs_" + valueName.ToLower() + "_growth", 10, "Time", valueName, BarGraphRenderMode.Lines);

            barGraph.FontSize = 6;
            barGraph.Interval = 7;

            DateTime startPeriod = history.Snapshots[0].TimeStamp.Date + TimeSpan.FromDays(1.0);
            DateTime endPeriod   = history.Snapshots[history.Snapshots.Count - 1].TimeStamp.Date;

            ArrayList regions = new ArrayList();

            DateTime curDate = DateTime.MinValue;
            int      curPeak = -1;
            int      curLow  = 1000;
            int      curTotl = 0;
            int      curCont = 0;
            int      curValu = 0;

            for (int i = 0; i < history.Snapshots.Count; ++i)
            {
                Snapshot ss        = history.Snapshots[i];
                DateTime timeStamp = ss.TimeStamp;

                if (timeStamp < startPeriod || timeStamp >= endPeriod)
                {
                    continue;
                }

                int val = LookupReportValue(ss, reportName, valueName);

                if (val == -1)
                {
                    continue;
                }

                DateTime thisDate = timeStamp.Date;

                if (curDate == DateTime.MinValue)
                {
                    curDate = thisDate;
                }

                curCont++;
                curTotl += val;
                curValu  = curTotl / curCont;

                if (curDate != thisDate && curValu >= 0)
                {
                    string mnthName = thisDate.ToString("MMMM");

                    if (regions.Count == 0)
                    {
                        regions.Add(new BarRegion(barGraph.Items.Count, barGraph.Items.Count, mnthName));
                    }
                    else
                    {
                        BarRegion region = (BarRegion)regions[regions.Count - 1];

                        if (region.m_Name == mnthName)
                        {
                            region.m_RangeTo = barGraph.Items.Count;
                        }
                        else
                        {
                            regions.Add(new BarRegion(barGraph.Items.Count, barGraph.Items.Count, mnthName));
                        }
                    }

                    barGraph.Items.Add(thisDate.Day.ToString(), curValu);

                    curPeak = val;
                    curLow  = val;
                }
                else
                {
                    if (val > curPeak)
                    {
                        curPeak = val;
                    }

                    if (val > 0 && val < curLow)
                    {
                        curLow = val;
                    }
                }

                curDate = thisDate;
            }

            barGraph.Regions = (BarRegion[])regions.ToArray(typeof(BarRegion));

            return(barGraph);
        }