Changeset 13762


Ignore:
Timestamp:
04/14/16 14:13:57 (6 years ago)
Author:
jkarder
Message:

#1265: worked on visualization

  • added shortcut handling prototype
Location:
branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartControl.cs

    r13716 r13762  
    3434    protected bool RenderingRequired;
    3535    protected Dictionary<Type, ChartMode> Modes = new Dictionary<Type, ChartMode>();
     36    protected Stack<ChartMode> ModeStack = new Stack<ChartMode>();
     37    protected List<ChartMode.Shortcut> Shortcuts = new List<ChartMode.Shortcut>();
     38    protected ChartMode.Shortcut ActiveShortcut;
    3639
    3740    protected bool SuppressEvents { get; set; }
     
    8891
    8992    public void AddChartModes(params ChartMode[] chartModes) {
    90       foreach (var chartMode in chartModes)
     93      foreach (var chartMode in chartModes) {
    9194        Modes.Add(chartMode.GetType(), chartMode);
     95        foreach (var shortcut in chartMode.Shortcuts)
     96          Shortcuts.Add(shortcut);
     97      }
    9298
    9399      ReloadModeToolBar();
    94100      ReloadModeContextMenu();
     101    }
     102
     103    public void SetTempChartMode(ChartMode chartMode) {
     104      if (Mode == chartMode) return;
     105
     106      ModeStack.Push(mode);
     107      Mode = chartMode;
     108    }
     109
     110    public void ResetTempChartMode() {
     111      if (ModeStack.Any())
     112        Mode = ModeStack.Pop();
    95113    }
    96114
     
    203221
    204222    protected virtual void OnKeyDown(object sender, KeyEventArgs e) {
    205       if (mode != null)
     223      if (mode != null) {
    206224        mode.HandleOnKeyDown(sender, e);
     225
     226        if (e.Handled || ActiveShortcut != null) return;
     227
     228        foreach (var shortcut in Shortcuts) {
     229          if (e.KeyCode == shortcut.Key && e.Modifiers == shortcut.Modifiers) {
     230            ActiveShortcut = shortcut;
     231            shortcut.DownAction();
     232            break;
     233          }
     234        }
     235      }
    207236    }
    208237
    209238    protected virtual void OnKeyUp(object sender, KeyEventArgs e) {
    210       if (mode != null)
     239      if (mode != null) {
    211240        mode.HandleOnKeyUp(sender, e);
     241
     242        if (e.Handled || ActiveShortcut == null) return;
     243
     244        var modifiers = new List<Keys>(from key in Enum.GetValues(typeof(Keys)).Cast<Keys>()
     245                                       where e.Modifiers.HasFlag(key)
     246                                       select key);
     247
     248        if (ActiveShortcut.Key == e.KeyCode || ActiveShortcut.GetModifiers().Except(modifiers).Any()) {
     249          ActiveShortcut.UpAction();
     250          ActiveShortcut = null;
     251        }
     252      }
    212253    }
    213254
  • branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartMode.cs

    r13717 r13762  
    2121
    2222using System;
     23using System.Collections.Generic;
    2324using System.Drawing;
     25using System.Linq;
    2426using System.Windows.Forms;
    2527
     
    2729  public abstract class ChartMode {
    2830    protected readonly ChartControl chartControl;
     31    protected readonly IList<Shortcut> globalShortcuts = new List<Shortcut>();
     32    protected readonly IList<Shortcut> localShortcuts;
     33    protected Shortcut activeShortcut = null;
    2934    protected Cursor cursor;
    3035    protected Point buttonDownPoint;
     
    5964    }
    6065
     66    public IEnumerable<Shortcut> Shortcuts { get { return globalShortcuts; } }
     67
    6168    protected ChartMode(ChartControl control) {
    6269      chartControl = control;
    6370      chartControl.ModeChanged += (sender, args) => Selected = chartControl.Mode == this;
     71      localShortcuts = new List<Shortcut> {
     72        new Shortcut(Keys.Escape) { DownAction = Deselect }
     73      };
    6474    }
    6575
     
    7181
    7282    public virtual void HandleOnKeyDown(object sender, KeyEventArgs e) {
    73       switch (e.KeyCode) {
    74         case Keys.Escape:
    75           Deselect();
     83      if (activeShortcut != null) return;
     84
     85      foreach (var shortcut in localShortcuts) {
     86        if (e.KeyCode == shortcut.Key && e.Modifiers == shortcut.Modifiers) {
     87          activeShortcut = shortcut;
     88          shortcut.DownAction();
    7689          break;
     90        }
    7791      }
    7892    }
    7993
    80     public virtual void HandleOnKeyUp(object sender, KeyEventArgs e) { }
     94    public virtual void HandleOnKeyUp(object sender, KeyEventArgs e) {
     95      if (activeShortcut == null) return;
     96
     97      var modifiers = new List<Keys>(from key in Enum.GetValues(typeof(Keys)).Cast<Keys>()
     98                                     where e.Modifiers.HasFlag(key)
     99                                     select key);
     100
     101      if (activeShortcut.Key == e.KeyCode || activeShortcut.GetModifiers().Except(modifiers).Any()) {
     102        activeShortcut.UpAction();
     103        activeShortcut = null;
     104      }
     105    }
     106
    81107    public virtual void HandleOnMouseClick(object sender, MouseEventArgs e) { }
    82108    public virtual void HandleOnMouseDoubleClick(object sender, MouseEventArgs e) { }
     
    103129      if (handler != null) handler(this, EventArgs.Empty);
    104130    }
     131
     132    public class Shortcut {
     133      public Keys Key { get; private set; }
     134      public Keys Modifiers { get; private set; }
     135      public Action DownAction { get; set; }
     136      public Action UpAction { get; set; }
     137
     138      public Shortcut(Keys key, Keys modifiers = Keys.None) {
     139        Key = key;
     140        Modifiers = modifiers;
     141      }
     142
     143      public IEnumerable<Keys> GetModifiers() {
     144        var keys = new List<Keys>(from key in Enum.GetValues(typeof(Keys)).Cast<Keys>()
     145                                  where Modifiers.HasFlag(key)
     146                                  select key);
     147        return keys;
     148      }
     149    }
    105150  }
    106151}
  • branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/PanChartMode.cs

    r13717 r13762  
    3333    }
    3434
    35     public PanChartMode(ChartControl control) : base(control) { }
     35    public PanChartMode(ChartControl control) : base(control) {
     36      globalShortcuts.Add(new Shortcut(Keys.Space) {
     37        DownAction = () => chartControl.SetTempChartMode(this),
     38        UpAction = () => chartControl.ResetTempChartMode()
     39      });
     40    }
    3641
    3742    public override void HandleOnMouseMove(object sender, MouseEventArgs e) {
  • branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/SelectChartMode.cs

    r13717 r13762  
    3131    public override string ToolTipText { get { return "Select"; } }
    3232
    33     public SelectChartMode(ChartControl control) : base(control) { }
     33    public SelectChartMode(ChartControl control) : base(control) {
     34      localShortcuts.Add(new Shortcut(Keys.Delete) { DownAction = DeleteSelectedPrimitives });
     35    }
    3436
    3537    protected override void OnDeselected() {
     
    4143        chartControl.ResumeRendering();
    4244        base.OnDeselected();
    43       }
    44     }
    45 
    46     public override void HandleOnKeyDown(object sender, KeyEventArgs e) {
    47       try {
    48         switch (e.KeyCode) {
    49           case Keys.Delete:
    50             try {
    51               chartControl.SuspendRendering();
    52               foreach (var p in chartControl.Chart.Group.SelectedPrimitives)
    53                 chartControl.Chart.Group.Remove(p);
    54             } finally { chartControl.ResumeRendering(); }
    55             break;
    56         }
    57       } finally {
    58         base.HandleOnKeyDown(sender, e);
    5945      }
    6046    }
     
    10086      }
    10187    }
     88
     89    protected virtual void DeleteSelectedPrimitives() {
     90      try {
     91        chartControl.SuspendRendering();
     92        foreach (var p in chartControl.Chart.Group.SelectedPrimitives)
     93          chartControl.Chart.Group.Remove(p);
     94      } finally { chartControl.ResumeRendering(); }
     95    }
    10296  }
    10397}
  • branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/ZoomInChartMode.cs

    r13717 r13762  
    3535    }
    3636
    37     public ZoomInChartMode(ChartControl control) : base(control) { }
     37    public ZoomInChartMode(ChartControl control) : base(control) {
     38      globalShortcuts.Add(new Shortcut(Keys.Z, Keys.Control) {
     39        DownAction = () => chartControl.SetTempChartMode(this),
     40        UpAction = () => chartControl.ResetTempChartMode()
     41      });
     42    }
    3843
    3944    public override void HandleOnMouseUp(object sender, MouseEventArgs e) {
  • branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/ZoomOutChartMode.cs

    r13717 r13762  
    3333    }
    3434
    35     public ZoomOutChartMode(ChartControl control) : base(control) { }
     35    public ZoomOutChartMode(ChartControl control) : base(control) {
     36      globalShortcuts.Add(new Shortcut(Keys.Z, Keys.Control | Keys.Shift) {
     37        DownAction = () => chartControl.SetTempChartMode(this),
     38        UpAction = () => chartControl.ResetTempChartMode()
     39      });
     40    }
    3641
    3742    public override void HandleOnMouseUp(object sender, MouseEventArgs e) {
Note: See TracChangeset for help on using the changeset viewer.