コード例 #1
0
            public async Task ReturnsSegmentsJustOnceWhenChangingDateRange()
            {
                var segments = new ChartSegment[2] {
                    new ChartSegment("Project 1", "Client 1", 50f, 10, 0, "ff0000"),
                    new ChartSegment("Project 2", "Client 2", 50f, 10, 0, "00ff00")
                };
                var projectsNotSyncedCount = 0;

                var currentDate = new DateTimeOffset(2018, 5, 23, 0, 0, 0, TimeSpan.Zero);
                var start       = new DateTimeOffset(2018, 5, 1, 0, 0, 0, TimeSpan.Zero);
                var end         = new DateTimeOffset(2018, 5, 7, 0, 0, 0, TimeSpan.Zero);

                TimeService.CurrentDateTime.Returns(currentDate);

                var delayed = Observable
                              .Return(new ProjectSummaryReport(segments, projectsNotSyncedCount))
                              .Delay(TimeSpan.FromMilliseconds(100));

                var instant = Observable
                              .Return(new ProjectSummaryReport(segments, projectsNotSyncedCount));

                ReportsProvider.GetProjectSummary(Arg.Any <long>(), Arg.Any <DateTimeOffset>(), Arg.Any <DateTimeOffset>())
                .Returns(delayed, instant);

                await Initialize();

                ViewModel.ChangeDateRangeCommand.Execute(
                    ReportsDateRangeParameter.WithDates(start, end));

                await delayed;

                ViewModel.Segments.Count.Should().Be(segments.Length);
            }
コード例 #2
0
        public IActionResult AreaZone()
        {
            List <ChartSegment> segments = new List <ChartSegment>();
            ChartSegment        segment1 = new ChartSegment();

            segment1.Value = new DateTime(2016, 5, 1);
            segment1.Color = "url(#winter)";
            segments.Add(segment1);

            ChartSegment segment2 = new ChartSegment();

            segment2.Value = new DateTime(2016, 8, 1);
            segment2.Color = "url(#summer)";
            segments.Add(segment2);

            ChartSegment segment3 = new ChartSegment();

            segment3.Color = "url(#spring)";
            segments.Add(segment3);

            ViewBag.segment = segments;


            return(View());
        }
コード例 #3
0
        object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            ChartSegment    seg    = value as ChartSegment;
            double          val    = 0;
            double          angle  = 0;
            ChartPieSegment pieseg = seg as ChartPieSegment;

            // this happens during designer load.
            if (pieseg == null)
            {
                return(0);
            }

            angle = pieseg.AngleOfSliceRotation;

            Point pt = ChartSegment.GetCenterOfViewport((ChartSegment)value);

            if (mode == 0)
            {
                // OffsetX:
                val = Math.Cos(angle) * 200d;
            }
            else
            {
                // OffsetY:
                val = Math.Sin(angle) * 200d;
            }
            return(val);
        }
        void ObjSeries_MouseClick(object sender, ChartMouseEventArgs e)
        {
            FeatureTrackingManager.Instance.UseFeature(Features.Library_GenericExplorer_ChartItem);

            ChartSegment chart_segment = e.Segment;
            IList        data_source   = (IList)chart_segment.Series.DataSource;
            ChartItem    chart_item    = (ChartItem)data_source[chart_segment.CorrespondingPoints[0].Index];

            ToggleSelectItem(chart_item.Caption, KeyboardTools.IsCTRLDown() || KeyboardTools.IsShiftDown());
        }
コード例 #5
0
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null)
            {
                return(String.Empty);
            }

            ChartSegment seg = value as ChartSegment;

            return(seg.Interior);
        }
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (null == value)
            {
                return("");
            }

            ChartSegment chart_segment = value as ChartSegment;
            IList        data_source   = (IList)chart_segment.Series.DataSource;
            ChartItem    chart_item    = (ChartItem)data_source[chart_segment.CorrespondingPoints[0].Index];

            return(String.Format("{0} ({1})", chart_item.Caption, chart_item.Count));
        }
コード例 #7
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (null == value)
            {
                return("");
            }

            ChartSegment chart_segment = value as ChartSegment;
            IList        data_source   = (IList)chart_segment.Series.DataSource;
            ChartItem    chart_item    = (ChartItem)data_source[chart_segment.CorrespondingPoints[0].Index];

            return(String.Format("During the week starting {0} you {1} {2} paper(s)", DateFormatter.asDDMMMYYYY(chart_item.Timestamp), chart_segment.Series.Name.ToLower(), chart_item.Count));
        }
コード例 #8
0
        public override void SetDeffaults()
        {
            songName = "Testing";

            chart = new ChartSegment[2];

            for (int i = 0; i < chart.Length; i++)
            {
                chart[i].notes = new Note[]
                {
                    new Note(NoteDirection.up, 25, "Sounds/keybladeBlocking"),
                    new Note(NoteDirection.down, 50, "Sounds/keybladeBlocking"),
                    new Note(NoteDirection.down, 100, "Sounds/keybladeBlocking"),
                    new Note(NoteDirection.left, 150, "Sounds/keybladeBlocking"),
                    new Note(NoteDirection.right, 150, "Sounds/keybladeBlocking")
                };
            }
        }
コード例 #9
0
        // GET: AreaZone
        public ActionResult AreaZone()
        {
            ViewBag.Line = new
            {
                width = 0.001
            };
            List <ChartSegment> segments = new List <ChartSegment>();
            ChartSegment        segment1 = new ChartSegment();

            segment1.Value = new DateTime(2016, 5, 1);
            segment1.Color = "url(#winter)";
            segments.Add(segment1);

            ChartSegment segment2 = new ChartSegment();

            segment2.Value = new DateTime(2016, 8, 1);
            segment2.Color = "url(#summer)";
            segments.Add(segment2);

            ChartSegment segment3 = new ChartSegment();

            segment3.Color = "url(#spring)";
            segments.Add(segment3);

            ViewBag.segment = segments;
            ViewBag.content = "<div style='width:80px; padding: 5px;'> <table style='width: 100%'>" +
                              "<tr><td><div style='width: 10px; height: 10px;background:linear-gradient(#4ca1af, #c4e0e5);border-radius: 15px;'></div>" +
                              "</td><td style='padding-left: 5px;'>Winter</td></tr>" +
                              "<tr><td><div style='width: 10px; height: 10px; background:linear-gradient(#ffa751, #ffe259);border-radius: 15px;'></div>" +
                              "</td><td style='padding-left: 5px;'>Summer</td></tr><tr><td>" +
                              "<div style='width: 10px; height: 10px; background:linear-gradient(#1d976c, #93f9b9);border-radius: 15px;'></div>" +
                              "</td><td style='padding-left: 5px;'>Spring</td></tr></table></div>";

            ViewBag.chartBorder = new ChartBorder {
                Color = "transparent"
            };
            return(View());
        }
コード例 #10
0
        // GET: LineZone
        public ActionResult LineZone()
        {
            ViewBag.majorGridLines = new { width = 0.00001 };
            ViewBag.lineStyle      = new { width = 0.00001 };
            ViewBag.majorTickLines = new { width = 0.00001 };
            ViewBag.majorTickLines = new { width = 0.00001 };
            ViewBag.chartBorder    = new ChartBorder {
                Color = "transparent"
            };

            List <ChartSegment> segments = new List <ChartSegment>();
            ChartSegment        segment1 = new ChartSegment();

            segment1.Value = 450;
            segment1.Color = "red";
            segments.Add(segment1);

            ChartSegment segment2 = new ChartSegment();

            segment2.Value = 500;
            segment2.Color = "green";
            segments.Add(segment2);

            ChartSegment segment3 = new ChartSegment();

            segment3.Color = "blue";
            segments.Add(segment3);

            ViewBag.segment = segments;
            ViewBag.content = "<div style='width:80px; padding: 5px;'><table style='width: 100%'>" +
                              "<tr> <td><div style='width: 10px; height: 10px; background:blue;border-radius: 15px;'></div>" +
                              "</td> <td style='padding-left: 5px;'>High</td></tr><tr><td>" +
                              "<div style='width: 10px; height: 10px; background:green;;border-radius: 15px;'></div>" +
                              "</td><td style='padding-left: 5px;'>Medium </td></tr><tr><td>" +
                              "<div style='width: 10px; height: 10px; background:red;;border-radius: 15px;'></div>" +
                              "</td><td style='padding-left: 5px;'>Low</td></tr></table></div>";
            return(View());
        }
コード例 #11
0
        public IActionResult LineZone()
        {
            List <ChartSegment> segments = new List <ChartSegment>();
            ChartSegment        segment1 = new ChartSegment();

            segment1.Value = 450;
            segment1.Color = "red";
            segments.Add(segment1);

            ChartSegment segment2 = new ChartSegment();

            segment2.Value = 500;
            segment2.Color = "green";
            segments.Add(segment2);

            ChartSegment segment3 = new ChartSegment();

            segment3.Color = "blue";
            segments.Add(segment3);

            ViewBag.segment = segments;
            return(View());
        }
コード例 #12
0
        private IReadOnlyList <ChartSegment> groupSegments(IReadOnlyList <ChartSegment> segments, DurationFormat durationFormat)
        {
            var groupedData = segments.GroupBy(segment => segment.Percentage >= minimumSegmentPercentageToBeOnItsOwn).ToList();

            var aboveStandAloneThresholdSegments = groupedData
                                                   .Where(group => group.Key)
                                                   .Flatten()
                                                   .ToList();

            var otherProjectsCandidates = groupedData
                                          .Where(group => !group.Key)
                                          .Flatten()
                                          .ToList();

            var finalOtherProjects = otherProjectsCandidates
                                     .Where(segment => segment.Percentage < maximumSegmentPercentageToEndUpInOther)
                                     .ToList();

            var remainingOtherProjectCandidates = otherProjectsCandidates
                                                  .Except(finalOtherProjects)
                                                  .OrderBy(segment => segment.Percentage)
                                                  .ToList();

            foreach (var segment in remainingOtherProjectCandidates)
            {
                finalOtherProjects.Add(segment);

                if (percentageOf(finalOtherProjects) + segment.Percentage > maximumOtherProjectPercentageWithSegmentsBetweenOneAndFivePercent)
                {
                    break;
                }
            }

            if (!finalOtherProjects.Any())
            {
                return(segments);
            }

            var leftOutOfOther = remainingOtherProjectCandidates.Except(finalOtherProjects).ToList();

            aboveStandAloneThresholdSegments.AddRange(leftOutOfOther);
            var onTheirOwnSegments = aboveStandAloneThresholdSegments.OrderBy(segment => segment.Percentage).ToList();

            ChartSegment lastSegment;

            if (finalOtherProjects.Count == 1)
            {
                var singleSmallSegment = finalOtherProjects.First();
                lastSegment = new ChartSegment(
                    singleSmallSegment.ProjectName,
                    string.Empty,
                    singleSmallSegment.Percentage >= minimumOtherSegmentDisplayPercentage ? singleSmallSegment.Percentage : minimumOtherSegmentDisplayPercentage,
                    finalOtherProjects.Sum(segment => (float)segment.TrackedTime.TotalSeconds),
                    finalOtherProjects.Sum(segment => segment.BillableSeconds),
                    singleSmallSegment.Color,
                    durationFormat);
            }
            else
            {
                var otherPercentage = percentageOf(finalOtherProjects);
                lastSegment = new ChartSegment(
                    Resources.Other,
                    string.Empty,
                    otherPercentage >= minimumOtherSegmentDisplayPercentage ? otherPercentage : minimumOtherSegmentDisplayPercentage,
                    finalOtherProjects.Sum(segment => (float)segment.TrackedTime.TotalSeconds),
                    finalOtherProjects.Sum(segment => segment.BillableSeconds),
                    Colors.Reports.OtherProjectsSegmentBackground.ToHexString(),
                    durationFormat);
            }

            return(onTheirOwnSegments
                   .Append(lastSegment)
                   .ToList()
                   .AsReadOnly());
        }