コード例 #1
0
        protected void RefreshChart(DateTime?snapshotTime)
        {
            Console.WriteLine("Refresh chart in chart view");
            var             moods = ReportManager.GetMoodBreakdownForSnapshot(this.currentSnapshot).ToList();
            SnapshotBarView last  = null;
            var             w     = labelW;

            for (int i = 0; i < moods.Count(); i++)
            {
                var bar = this.bars [i];
                var m   = moods [i];
                bar.Update(m.Name, (float)m.ResponsePercentage, m.ResponseCount);
                last = bar;
                if (bar.Frame.Width > w)
                {
                    w = bar.Frame.Width;
                }
            }
            this.totalLabel.Text  = string.Format("Total responders = {0}", moods.Sum(m => m.ResponseCount));
            this.Frame            = new RectangleF(this.Frame.Location, new SizeF(this.Frame.Width, totalLabel.Frame.Y + totalLabel.Frame.Height + margin * 2));
            this.background.Frame = new RectangleF(this.background.Frame.Location, this.Frame.Size);
//			this.title.Frame = new RectangleF(this.title.Frame.Location, new SizeF(this.Frame.Width, this.title.Frame.Height));

            this.Center       = new PointF(this.Center.X, this.Superview.Bounds.Height / 2);
            this.chart.Center = new PointF(this.Frame.Width / 2, this.chart.Center.Y);
            this.chart.Hidden = false;
            this.Hidden       = false;
        }
コード例 #2
0
        //[Export("ReportImagesGenerated:")]
        protected void ReportImagesGenerated()
        {
            if (this.NavigationController.TopViewController.Handle == this.Handle)
            {
                Console.WriteLine("Images ready in loading screen");

                var report = MoodReport.LatestGeneratedReport;

                ReportManager.DeleteAllOldReports(report);

                Console.WriteLine("Old reports deleted");

                InvokeOnMainThread(delegate {
//				if(this.NavigationController.TopViewController.View.Handle == this.View.Handle){
//					Console.WriteLine("Reloading map controller");
//				if(this.moodMapController != null){
//					this.moodMapController.Dispose();
//					this.moodMapController = null;
//				}
//					this.moodMapController = new OurMoodViewController();
//					this.NavigationController.PushViewController(moodMapController, true);

                    if (this.moodMapController == null || this.moodMapController.NeedsDisposing)
                    {
                        this.moodMapController = new OurMoodViewController();
                    }
                    else
                    {
                        this.moodMapController.Refresh();
                    }
                    this.NavigationController.PushViewController(moodMapController, true);
                    //}
                });
            }
        }
コード例 #3
0
        protected void LoadImages()
        {
            if (this.globalMoodMap != null)
            {
                this.globalMoodMap.RemoveFromSuperview();
                this.globalMoodMap = null;
            }

            globalMoodMap = new GlobalMoodMapContainerView(this.OriginalFrame);
            globalMoodMap.BackgroundColor = UIColor.Black;

            var images = ReportManager.GetReportImages(this.MoodReport, this.CurrentRenderLevel);

            var xPos = 0f;

            foreach (var img in images)
            {
                xPos += this.CurrentZoomLevel.RenderLevel.DayMarkerWidth;

                var         imageFrame = new RectangleF(xPos, 0f, this.CurrentRenderLevel.DayImageWidth, this.CurrentRenderLevel.DayImageHeight);
                UIImageView imgView    = new UIImageView(imageFrame);
                imgView.Image           = img;
                imgView.BackgroundColor = UIColor.LightGray;
                this.globalMoodMap.Add(imgView);
                xPos += imageFrame.Width;
            }

            this.globalMoodMap.Frame = new RectangleF(this.globalMoodMap.Frame.Location,
                                                      new SizeF(xPos,
                                                                this.globalMoodMap.Frame.Height));
            this.ContentSize = globalMoodMap.Frame.Size;

            this.Add(this.globalMoodMap);

            //add mask for future data
            if (this.futureMaskView != null)
            {
                this.futureMaskView.RemoveFromSuperview();
                this.futureMaskView = null;
            }

            var eventNow = DateTime.UtcNow.ToLocalTime(ApplicationState.Current.EventTimeOffset);

            if (eventNow < this.MoodReport.EndsOnLocal)
            {
                var nowX = ChartHelper.ToXPos(this.MoodReport.StartsOnLocal,
                                              this.MoodReport.EndsOnLocal,
                                              eventNow,
                                              this.CurrentRenderLevel.DayImageWidth,
                                              ReportManager.DayStartTime,
                                              ReportManager.DayEndTime,
                                              this.CurrentRenderLevel.DayMarkerWidth);
                this.futureMaskView = new UIView(new RectangleF(nowX, 0, this.globalMoodMap.Bounds.Width - nowX, this.globalMoodMap.Bounds.Height));
                this.futureMaskView.BackgroundColor = new UIColor(0, 0, 0, 0.5f);
                this.globalMoodMap.Add(this.futureMaskView);
            }
        }
コード例 #4
0
ファイル: ReportManager.cs プロジェクト: ruscal/myMood
        public void SyncData()
        {
            Console.WriteLine("SyncData");
            NotifySyncing();
            ReportRequestStatus status = ReportManager.FetchNewReport();

            NotifySyncComplete(status.Success ? SyncSuccessLevel.Success : SyncSuccessLevel.FailedSevere);
            Console.WriteLine("SyncData done.");
        }
コード例 #5
0
        protected void BuildChart(DateTime?snapshotTime)
        {
            Console.WriteLine("Build chart in chart view");
            if (chart != null)
            {
                chart.RemoveFromSuperview();
                chart = null;
            }
            chart             = new UIView(this.Bounds);
            chart.ContentMode = UIViewContentMode.Left;
            var snapshot = this.currentSnapshot;

            if (title == null)
            {
                BuildTitle(snapshotTime);
            }

            var moods = ReportManager.GetMoodBreakdownForSnapshot(snapshot);
            var y     = labelH + title.Frame.Y + margin;
            var w     = labelW;

            bars = new List <SnapshotBarView> ();

            foreach (var m in moods)
            {
                var bar = new SnapshotBarView(new RectangleF(0f, y, labelW, labelH), m.Name, (float)m.ResponsePercentage, m.ResponseCount, m.DisplayColor);
                chart.Add(bar);
                this.bars.Add(bar);
                if (bar.Frame.Width > w)
                {
                    w = bar.Frame.Width;
                }
                y += labelH + margin;
            }

            this.totalLabel                 = new UILabel(new RectangleF(5f, y + 10f, this.chart.Bounds.Width, labelH));
            this.totalLabel.Text            = string.Format("Total responders = {0}", moods.Sum(m => m.ResponseCount));
            this.totalLabel.Font            = UIFont.FromName("HelveticaNeue-CondensedBold", 12.0f);
            this.totalLabel.TextColor       = UIColor.Gray;
            this.totalLabel.TextAlignment   = UITextAlignment.Center;
            this.totalLabel.BackgroundColor = UIColor.Clear;
            this.chart.Add(this.totalLabel);
            y += labelH + margin;

            this.Add(chart);

            this.Frame            = new RectangleF(this.Frame.Location, new SizeF(this.Frame.Width, y + margin * 2));
            this.background.Frame = new RectangleF(this.background.Frame.Location, this.Frame.Size);
//			this.title.Frame = new RectangleF(this.title.Frame.Location, new SizeF(this.Frame.Width, this.title.Frame.Height));

            this.chart.Center = new PointF(this.Frame.Width / 2, this.chart.Center.Y);
            this.Center       = new PointF(this.Center.X, this.Superview.Bounds.Height / 2);
            this.chart.Hidden = false;
            this.Hidden       = false;
        }
コード例 #6
0
        public void ShowSnapshot(DateTime?snapshotTime)
        {
            Console.WriteLine("Show snapshot in chart view");
            if (snapshotTime != null)
            {
                this.ShowPosition(snapshotTime);
                Console.WriteLine("showed position");
                var eventNow = MoodResponse.GetRoundedResponseTime(DateTime.UtcNow.ToLocalTime(this.eventTimeOffset));
                Console.WriteLine("got event now");
                var roundedSnapshotTime = MoodResponse.GetRoundedResponseTime(snapshotTime.Value);
                Console.WriteLine("got roundedSnapshotTime");
                if (snapshotTime.Value <= eventNow)
                {
                    var sameSnapshot = IsCurrentSnapshotValid(roundedSnapshotTime);
                    Console.WriteLine("got iscurrentsnapshot");
                    var snapshot = sameSnapshot ? this.currentSnapshot : ReportManager.GetClosestSnapshot(report, roundedSnapshotTime);
                    Console.WriteLine("got closest snapshot : {0}", sameSnapshot);
                    this.lastRefresh = DateTime.Now;
                    if (snapshot != null)
                    {
                        Console.WriteLine("got snapshot");
                        if (this.currentSnapshot == null || snapshot.Id != this.currentSnapshot.Id)
                        {
                            Console.WriteLine("new snapshot");
                            this.currentSnapshot = snapshot;
                            if (this.chart == null)
                            {
                                Console.WriteLine("lets build chart");
                                this.BuildChart(snapshotTime);
                            }
                            else
                            {
                                Console.WriteLine("lets refresh chart");
                                this.RefreshChart(snapshotTime);
                            }
                            this.lastSnapshotTime = roundedSnapshotTime;
                        }
                        this.chart.Hidden = false;
                        this.Hidden       = false;

                        return;
                    }
                    this.currentSnapshot  = null;
                    this.lastSnapshotTime = null;
                }
                else
                {
                    return;
                }
            }
            this.Hidden = true;
        }
コード例 #7
0
        public void Refresh(MoodReport report, ZoomLevel zoomLevel)
        {
            Console.WriteLine("Refresh data  - {0}", zoomLevel.Name);
            this.MoodReport       = report;
            this.ReportStartLocal = ReportManager.GetReportStartLocal(report);
            this.ReportEndLocal   = ReportManager.GetReportEndLocal(report);
            this.DefaultZoomLevel = zoomLevel;
            this.SetZoomLevel(zoomLevel);
            this.LoadImages();

            if (this.eventMarkersVisible)
            {
                BuildEventMarkers();
            }
            else
            {
                this.ClearEventMarkers();
            }
            if (this.promptMarkersVisible)
            {
                BuildPromptMarkers();
            }
            else
            {
                this.ClearPromptMarkers();
            }

            var eventNow = DateTime.UtcNow.ToLocalTime(ApplicationState.Current.EventTimeOffset);

            var offset = eventNow < this.ReportEndLocal ? ChartHelper.ToXPos(this.ReportStartLocal,
                                                                             this.ReportEndLocal,
                                                                             eventNow,
                                                                             this.CurrentRenderLevel.DayImageWidth,
                                                                             ReportManager.DayStartTime,
                                                                             ReportManager.DayEndTime,
                                                                             this.CurrentRenderLevel.DayMarkerWidth)
                         - this.Bounds.Size.Width / 2

                                :this.ContentSize.Width - this.Bounds.Size.Width;

            if (offset > 0)
            {
                this.SetContentOffset(new PointF(offset, 0), true);
            }

            ZoomToDefault();
        }
コード例 #8
0
 protected void GenerateReportImages(MoodReport report)
 {
     loadingTitle.Text = "Downloading data ...";
     System.Threading.Tasks.Task.Factory.StartNew(() => {
         if (ReportManager.FetchReportDays(report).Success)
         {
             InvokeOnMainThread(delegate {
                 loadingTitle.Text = "Generating images ...";
             });
             ReportManager.GenerateReportImagesForAllLevels(report);
         }
         else
         {
             InvokeOnMainThread(delegate {
                 loadingTitle.Text = "Download failed.";
             });
             //todo:pause
         }
         InvokeOnMainThread(delegate {
             ReportImagesGenerated();
         });
     });
 }
コード例 #9
0
        protected void SetZoomLevel(ZoomLevel zoomLevel)
        {
            this.CurrentZoomLevel = zoomLevel;
            this.MinimumZoomScale = ZoomLevel.MinimumZoomLevel.MaxHoursPerWindow == null
                                ? ChartHelper.CalculateScaleOfChart(zoomLevel.RenderLevel, (float)ReportManager.GetReportHours(this.MoodReport), this.Bounds.Width)
                                        : ChartHelper.CalculateScaleOfChart(zoomLevel.RenderLevel, ZoomLevel.MinimumZoomLevel.MaxHoursPerWindow.Value, this.Bounds.Width);

            this.MaximumZoomScale = ZoomLevel.MaximumZoomLevel.MinHoursPerWindow == null
                                ? 2f
                                        : ChartHelper.CalculateScaleOfChart(zoomLevel.RenderLevel, ZoomLevel.MaximumZoomLevel.MinHoursPerWindow.Value, this.Bounds.Width);
        }
コード例 #10
0
ファイル: SnapshotToolView.cs プロジェクト: ruscal/myMood
 protected DateTime?GetCurrentSnapshotTime()
 {
     return(ChartHelper.ToCurrentTime(ReportManager.GetReportStartLocal(this.report), ReportManager.GetReportEndLocal(this.report), GetCurrentXPosition(), this.globalMap.CurrentRenderLevel));
 }
コード例 #11
0
ファイル: GlobalMoodMapView.cs プロジェクト: ruscal/myMood
 protected void SetCurrentReport(MoodReport report)
 {
     this.CurrentReport    = report;
     this.ReportStartLocal = ReportManager.GetReportStartLocal(report);
     this.ReportEndLocal   = ReportManager.GetReportEndLocal(report);
 }