/// <summary> /// On Key down, one of two things will happen: /// 1) This is the first key being held down and we store it /// 2) This is the second key being pressed, and we initiate /// adding a node to the graph /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void View_KeyDown(object sender, KeyEventArgs e) { if (lastChar == null) { char[] chars = e.Key.ToString().ToCharArray(); if (chars.Length == 1) { lastChar = chars[0]; } } else { WorkspaceView wsV = View.ChildOfType <WorkspaceView>(); WorkspaceViewModel wsVM = wsV.ViewModel as WorkspaceViewModel; var sel = wsVM.Model.CurrentSelection; var childrenNodeViews = View.ChildrenOfType <NodeView>(); char[] chars = e.Key.ToString().ToCharArray(); if (chars.Length == 1) { string key = lastChar.ToString() + chars[0].ToString(); TryAndPlaceNode(key); lastChar = null; } } }
private void TryAndPlaceNode(string key) { string nodeName = GetNodeNameFromKeysEntered(NodeShortcuts, key); if (nodeName != null) { DynamoViewModel vm = view.DataContext as DynamoViewModel; System.Windows.Point pnt; System.Windows.Point adjusted = new System.Windows.Point(0, 0); try { //todo playl with how to apply the scale and x/y values. x/y kind works WorkspaceView wsV = view.ChildOfType <WorkspaceView>(); pnt = Mouse.GetPosition(wsV); double scale = wsV.ViewModel.Zoom; double X = wsV.ViewModel.Model.X; double Y = wsV.ViewModel.Model.Y; adjusted = new System.Windows.Point(pnt.X / scale - X / scale, pnt.Y / scale - Y / scale); } catch (Exception) { pnt = new System.Windows.Point(0, 0); } try { vm.Model.ExecuteCommand(new CreateNodeCommand(Guid.NewGuid().ToString(), nodeName, adjusted.X, adjusted.Y, false, false)); } catch { } } }