PageRenderTime 31ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 1ms

/Main/src/DynamicDataDisplay/DependentPlotter.cs

#
C# | 97 lines | 73 code | 15 blank | 9 comment | 10 complexity | 4086b4633dcdde2a4f8c20a9edcf6ef3 MD5 | raw file
Possible License(s): CC-BY-SA-3.0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Diagnostics;
  6. namespace Microsoft.Research.DynamicDataDisplay
  7. {
  8. /// <summary>
  9. /// Represents a special embedded kind of plotter.
  10. /// Follows an outer's plotter Visible change when this is general panning or zooming via MouseNavigation.
  11. /// Does not reacts on panning or zooming only in one direction (via AxisNavigation or KeyboardNavigation.
  12. /// </summary>
  13. public class DependentPlotter : InjectedPlotterBase
  14. {
  15. /// <summary>
  16. /// Initializes a new instance of the <see cref="DependentPlotter"/> class.
  17. /// </summary>
  18. public DependentPlotter() : base() { }
  19. protected override DataRect CoerceVisible(DataRect newVisible, DataRect baseVisible)
  20. {
  21. return baseVisible;
  22. }
  23. private bool IsHandledChangeType(ChangeType changeType)
  24. {
  25. bool handled = false;
  26. switch (changeType)
  27. {
  28. case ChangeType.Pan:
  29. case ChangeType.Zoom:
  30. handled = true;
  31. break;
  32. case ChangeType.PanX:
  33. case ChangeType.ZoomX:
  34. handled = (ConjunctionMode == ViewportConjunctionMode.X) || (ConjunctionMode == ViewportConjunctionMode.XY);
  35. break;
  36. case ChangeType.PanY:
  37. case ChangeType.ZoomY:
  38. handled = (ConjunctionMode == ViewportConjunctionMode.Y) || (ConjunctionMode == ViewportConjunctionMode.XY);
  39. break;
  40. }
  41. return handled;
  42. }
  43. protected override void OuterViewport_PropertyChanged(ExtendedPropertyChangedEventArgs e)
  44. {
  45. if(e.PropertyName != Viewport2D.VisiblePropertyName)
  46. return;
  47. if (IsHandledChangeType(e.ChangeType))
  48. {
  49. DataRect newRect = (DataRect)e.NewValue;
  50. DataRect oldRect = (DataRect)e.OldValue;
  51. double ratioX = newRect.Width / oldRect.Width;
  52. double ratioY = newRect.Height / oldRect.Height;
  53. double shiftX = (newRect.XMin - oldRect.XMin) / oldRect.Width;
  54. double shiftY = (newRect.YMin - oldRect.YMin) / oldRect.Height;
  55. DataRect visible = Viewport.Visible;
  56. visible.XMin += shiftX * visible.Width;
  57. visible.YMin += shiftY * visible.Height;
  58. visible.Width *= ratioX;
  59. visible.Height *= ratioY;
  60. Viewport.Visible = visible;
  61. }
  62. }
  63. public override void OnPlotterAttached(Plotter plotter)
  64. {
  65. base.OnPlotterAttached(plotter);
  66. Plotter.Viewport.FittedToView += Viewport_FittedToView;
  67. }
  68. public override void OnPlotterDetaching(Plotter plotter)
  69. {
  70. Plotter.Viewport.FittedToView -= Viewport_FittedToView;
  71. base.OnPlotterDetaching(plotter);
  72. }
  73. private void Viewport_FittedToView(object sender, EventArgs e)
  74. {
  75. FitToView();
  76. }
  77. protected override void OnConjunctionModeChanged()
  78. {
  79. // do nothing
  80. }
  81. }
  82. }