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; }
//[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); //} }); } }
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); } }
public void SyncData() { Console.WriteLine("SyncData"); NotifySyncing(); ReportRequestStatus status = ReportManager.FetchNewReport(); NotifySyncComplete(status.Success ? SyncSuccessLevel.Success : SyncSuccessLevel.FailedSevere); Console.WriteLine("SyncData done."); }
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; }
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; }
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(); }
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(); }); }); }
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); }
protected DateTime?GetCurrentSnapshotTime() { return(ChartHelper.ToCurrentTime(ReportManager.GetReportStartLocal(this.report), ReportManager.GetReportEndLocal(this.report), GetCurrentXPosition(), this.globalMap.CurrentRenderLevel)); }
protected void SetCurrentReport(MoodReport report) { this.CurrentReport = report; this.ReportStartLocal = ReportManager.GetReportStartLocal(report); this.ReportEndLocal = ReportManager.GetReportEndLocal(report); }