Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Problems.GrammaticalOptimization/DynamicDataDisplay/Charts/Navigation/Navigation/KeyboardNavigation.cs @ 12503

Last change on this file since 12503 was 12503, checked in by aballeit, 9 years ago

#2283 added GUI and charts; fixed MCTS

File size: 7.3 KB
Line 
1using System.Windows;
2using System.Windows.Input;
3using System.Windows.Media;
4using Microsoft.Win32;
5
6namespace Microsoft.Research.DynamicDataDisplay.Navigation
7{
8  /// <summary>Provides keyboard navigation around viewport</summary>
9  public class KeyboardNavigation : NavigationBase
10  {
11
12    public KeyboardNavigation()
13    {
14      Focusable = true;
15      Loaded += KeyboardNavigation_Loaded;
16    }
17
18    private void KeyboardNavigation_Loaded(object sender, RoutedEventArgs e)
19    {
20      Keyboard.Focus(this);
21      InitCommands();
22    }
23
24    public void InitCommands()
25    {
26      var zoomWithParamCommandBinding = new CommandBinding(
27        ChartCommands.ZoomWithParameter,
28        ZoomWithParamExecute,
29        ZoomWithParamCanExecute);
30      Plotter2D.CommandBindings.Add(zoomWithParamCommandBinding);
31
32      var zoomInCommandBinding = new CommandBinding(
33        ChartCommands.ZoomIn,
34        ZoomInExecute,
35        ZoomInCanExecute);
36      Plotter2D.CommandBindings.Add(zoomInCommandBinding);
37
38      var zoomOutCommandBinding = new CommandBinding(
39        ChartCommands.ZoomOut,
40        ZoomOutExecute,
41        ZoomOutCanExecute);
42      Plotter2D.CommandBindings.Add(zoomOutCommandBinding);
43
44      var fitToViewCommandBinding = new CommandBinding(
45        ChartCommands.FitToView,
46        FitToViewExecute,
47        FitToViewCanExecute);
48      Plotter2D.CommandBindings.Add(fitToViewCommandBinding);
49
50      var ScrollLeftCommandBinding = new CommandBinding(
51          ChartCommands.ScrollLeft,
52          ScrollLeftExecute,
53          ScrollLeftCanExecute);
54      Plotter2D.CommandBindings.Add(ScrollLeftCommandBinding);
55
56      var ScrollRightCommandBinding = new CommandBinding(
57        ChartCommands.ScrollRight,
58        ScrollRightExecute,
59        ScrollRightCanExecute);
60      Plotter2D.CommandBindings.Add(ScrollRightCommandBinding);
61
62      var ScrollUpCommandBinding = new CommandBinding(
63        ChartCommands.ScrollUp,
64        ScrollUpExecute,
65        ScrollUpCanExecute);
66      Plotter2D.CommandBindings.Add(ScrollUpCommandBinding);
67
68      var ScrollDownCommandBinding = new CommandBinding(
69          ChartCommands.ScrollDown,
70          ScrollDownExecute,
71          ScrollDownCanExecute);
72      Plotter2D.CommandBindings.Add(ScrollDownCommandBinding);
73
74      var SaveScreenshotCommandBinding = new CommandBinding(
75        ChartCommands.SaveScreenshot,
76        SaveScreenshotExecute,
77        SaveScreenshotCanExecute);
78      Plotter2D.CommandBindings.Add(SaveScreenshotCommandBinding);
79
80      var CopyScreenshotCommandBinding = new CommandBinding(
81        ChartCommands.CopyScreenshot,
82        CopyScreenshotExecute,
83        CopyScreenshotCanExecute);
84      Plotter2D.CommandBindings.Add(CopyScreenshotCommandBinding);
85
86      var ShowHelpCommandBinding = new CommandBinding(
87        ChartCommands.ShowHelp,
88        ShowHelpExecute,
89        ShowHelpCanExecute);
90      Plotter2D.CommandBindings.Add(ShowHelpCommandBinding);
91    }
92
93    #region Zoom With param
94
95    private void ZoomWithParamExecute(object target, ExecutedRoutedEventArgs e)
96    {
97      // TODO: add working code
98      //double zoomParam = (double)e.Parameter;
99      //Plotter2d.ZoomVisible(zoomParam);
100      e.Handled = true;
101    }
102
103    private void ZoomWithParamCanExecute(object target, CanExecuteRoutedEventArgs e)
104    {
105      e.CanExecute = true;
106    }
107
108    #endregion
109
110    #region Zoom in
111
112    private void ZoomInExecute(object target, ExecutedRoutedEventArgs e)
113    {
114      Viewport.Zoom(0.9);
115      e.Handled = true;
116    }
117
118    private void ZoomInCanExecute(object target, CanExecuteRoutedEventArgs e)
119    {
120      e.CanExecute = true;
121    }
122
123    #endregion
124
125    #region Zoom out
126
127    private void ZoomOutExecute(object target, ExecutedRoutedEventArgs e)
128    {
129      Viewport.Zoom(1.1);
130      e.Handled = true;
131    }
132
133    private void ZoomOutCanExecute(object target, CanExecuteRoutedEventArgs e)
134    {
135      e.CanExecute = true;
136    }
137
138    #endregion
139
140    #region Fit to view
141
142    private void FitToViewExecute(object target, ExecutedRoutedEventArgs e)
143    {
144      Viewport.FitToView();
145      e.Handled = true;
146    }
147
148    private void FitToViewCanExecute(object target, CanExecuteRoutedEventArgs e)
149    {
150      e.CanExecute = true;
151    }
152
153    #endregion
154
155    #region Scroll
156
157    private double scrollCoeff = 0.05;
158    private void ScrollVisibleProportionally(double xShiftCoeff, double yShiftCoeff)
159    {
160      Rect visible = Viewport.Visible;
161      double width = visible.Width;
162      double height = visible.Height;
163
164      visible.Offset(xShiftCoeff * width, yShiftCoeff * height);
165
166      Viewport.Visible = visible;
167    }
168
169    #region ScrollLeft
170
171    private void ScrollLeftExecute(object target, ExecutedRoutedEventArgs e)
172    {
173      ScrollVisibleProportionally(scrollCoeff, 0);
174      e.Handled = true;
175    }
176
177    private void ScrollLeftCanExecute(object target, CanExecuteRoutedEventArgs e)
178    {
179      e.CanExecute = true;
180    }
181
182    #endregion
183
184    #region ScrollRight
185
186    private void ScrollRightExecute(object target, ExecutedRoutedEventArgs e)
187    {
188      ScrollVisibleProportionally(-scrollCoeff, 0);
189      e.Handled = true;
190    }
191
192    private void ScrollRightCanExecute(object target, CanExecuteRoutedEventArgs e)
193    {
194      e.CanExecute = true;
195    }
196
197    #endregion
198
199    #region ScrollUp
200
201    private void ScrollUpExecute(object target, ExecutedRoutedEventArgs e)
202    {
203      ScrollVisibleProportionally(0, -scrollCoeff);
204      e.Handled = true;
205    }
206
207    private void ScrollUpCanExecute(object target, CanExecuteRoutedEventArgs e)
208    {
209      e.CanExecute = true;
210    }
211
212    #endregion
213
214    #region ScrollDown
215
216    private void ScrollDownExecute(object target, ExecutedRoutedEventArgs e)
217    {
218      ScrollVisibleProportionally(0, scrollCoeff);
219      e.Handled = true;
220    }
221
222    private void ScrollDownCanExecute(object target, CanExecuteRoutedEventArgs e)
223    {
224      e.CanExecute = true;
225    }
226
227    #endregion
228
229    #endregion
230
231    #region SaveScreenshot
232
233    private void SaveScreenshotExecute(object target, ExecutedRoutedEventArgs e)
234    {
235      SaveFileDialog dlg = new SaveFileDialog();
236      dlg.Filter = "JPEG(*.jpg)|*.jpg|BMP(*.bmp)|*.bmp|GIF(*.gif)|.gif|All files (*.*)|*.*";
237      dlg.FilterIndex = 1;
238      if (dlg.ShowDialog().GetValueOrDefault(false))
239      {
240        string filePath = dlg.FileName;
241        Plotter2D.SaveScreenshot(filePath);
242        e.Handled = true;
243      }
244    }
245
246    private void SaveScreenshotCanExecute(object target, CanExecuteRoutedEventArgs e)
247    {
248      e.CanExecute = true;
249    }
250
251    #endregion
252
253    #region CopyScreenshot
254
255    private void CopyScreenshotExecute(object target, ExecutedRoutedEventArgs e)
256    {
257      Plotter2D.CopyScreenshotToClipboard();
258      e.Handled = true;
259    }
260
261    private void CopyScreenshotCanExecute(object target, CanExecuteRoutedEventArgs e)
262    {
263      e.CanExecute = true;
264    }
265
266    #endregion
267
268    #region ShowHelp
269
270    private void ShowHelpExecute(object target, ExecutedRoutedEventArgs e)
271    {
272      string helpText =
273@"Dynamic Data Display is in ""Auto Fit"" mode by default.
274By using the mouse you can manually select an area to display:
275
276Mouse wheel, '+' and '-' — Zoom in/Zoom out
277Mouse drag or arrow keys — Pan the display area
278Ctrl + Mouse drag — Select an area to zoom in
279Shift + Mouse drag — Select an area with fixed aspect ratio
280Home — Fit to view
281F11 — Copy chart to clipboard";
282
283      MessageBox.Show(helpText, "Quick Help", MessageBoxButton.OK, MessageBoxImage.Information);
284
285      e.Handled = true;
286    }
287
288    private void ShowHelpCanExecute(object target, CanExecuteRoutedEventArgs e)
289    {
290      e.CanExecute = true;
291    }
292
293    #endregion
294
295    protected override void OnRenderCore(DrawingContext dc, RenderState state)
296    {
297      // do nothing here
298    }
299  }
300}
Note: See TracBrowser for help on using the repository browser.