Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / DefaultCommandExtensionCallback.cs / 1305376 / DefaultCommandExtensionCallback.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation { using System.Activities.Presentation.View; using System.Activities.Presentation.Hosting; using System.Collections.Generic; using System.Linq; using System.Windows.Input; using System.Globalization; using System.Runtime; //DefaultCommandExtensionCallback - provides default key input gestures for most of the //WF commands. user can either implmeent his own class or override this one and provide special //handling for specific commands class DefaultCommandExtensionCallback : IWorkflowCommandExtensionCallback { Dictionary> defaultGestures = new Dictionary >(); public DefaultCommandExtensionCallback() { defaultGestures.Add(DesignerView.GoToParentCommand, new List { new ChordKeyGesture(Key.E, Key.P) }); defaultGestures.Add(DesignerView.ExpandInPlaceCommand, new List { new ChordKeyGesture(Key.E, Key.E) }); defaultGestures.Add(DesignerView.ExpandAllCommand, new List { new ChordKeyGesture(Key.E, Key.X) }); defaultGestures.Add(DesignerView.CollapseCommand, new List { new ChordKeyGesture(Key.E, Key.C) }); defaultGestures.Add(DesignerView.ZoomInCommand, new List { new KeyGesture(Key.OemPlus, ModifierKeys.Control, "Ctrl +"), new KeyGesture(Key.Add, ModifierKeys.Control)}); defaultGestures.Add(DesignerView.ZoomOutCommand, new List { new KeyGesture(Key.OemMinus, ModifierKeys.Control, "Ctrl -"), new KeyGesture(Key.Subtract, ModifierKeys.Control)}); defaultGestures.Add(DesignerView.ToggleArgumentDesignerCommand, new List { new ChordKeyGesture(Key.E, Key.A) }); defaultGestures.Add(DesignerView.ToggleVariableDesignerCommand, new List { new ChordKeyGesture(Key.E, Key.V) }); defaultGestures.Add(DesignerView.ToggleImportsDesignerCommand, new List { new ChordKeyGesture(Key.E, Key.I) }); defaultGestures.Add(DesignerView.ToggleMiniMapCommand, new List { new ChordKeyGesture(Key.E, Key.O) }); defaultGestures.Add(DesignerView.CreateVariableCommand, new List { new ChordKeyGesture(Key.E, Key.N) }); defaultGestures.Add(DesignerView.CycleThroughDesignerCommand, new List { new KeyGesture(Key.F6, ModifierKeys.Control | ModifierKeys.Alt, "Ctrl + Alt + F6") }); defaultGestures.Add(ExpressionTextBox.CompleteWordCommand, new List { new KeyGesture(Key.Right, ModifierKeys.Alt, "Alt + Right Arrow") }); defaultGestures.Add(ExpressionTextBox.GlobalIntellisenseCommand, new List { new KeyGesture(Key.J, ModifierKeys.Control, "Ctrl + J") }); defaultGestures.Add(ExpressionTextBox.ParameterInfoCommand, new List { new ChordKeyGesture(Key.K, Key.P)}); defaultGestures.Add(ExpressionTextBox.QuickInfoCommand, new List { new ChordKeyGesture(Key.K, Key.I)}); defaultGestures.Add(DesignerView.MoveFocusCommand, new List { new ChordKeyGesture(Key.E, Key.M) }); defaultGestures.Add(DesignerView.ToggleSelectionCommand, new List { new ChordKeyGesture(Key.E, Key.S) }); defaultGestures.Add(DesignerView.CutCommand, new List { new KeyGesture(Key.X, ModifierKeys.Control) }); defaultGestures.Add(DesignerView.CopyCommand, new List { new KeyGesture(Key.C, ModifierKeys.Control) }); defaultGestures.Add(DesignerView.PasteCommand, new List { new KeyGesture(Key.V, ModifierKeys.Control) }); defaultGestures.Add(DesignerView.SelectAllCommand, new List { new KeyGesture(Key.A, ModifierKeys.Control) }); defaultGestures.Add(DesignerView.UndoCommand, new List { new KeyGesture(Key.Z, ModifierKeys.Control) }); defaultGestures.Add(DesignerView.RedoCommand, new List { new KeyGesture(Key.Y, ModifierKeys.Control) }); defaultGestures.Add(ExpressionTextBox.IncreaseFilterLevelCommand, new List { new KeyGesture(Key.Decimal, ModifierKeys.Alt) }); defaultGestures.Add(ExpressionTextBox.DecreaseFilterLevelCommand, new List { new KeyGesture(Key.OemComma, ModifierKeys.Alt) }); } public void OnWorkflowCommandLoaded(CommandInfo commandInfo) { if (commandInfo == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("commandInfo")); } RoutedCommand cmd = commandInfo.Command as RoutedCommand; if (cmd != null) { List gestures = null; if (defaultGestures.TryGetValue(cmd, out gestures)) { gestures.ForEach((gesture) => { if (!this.ContainsGesture(cmd, gesture)) { cmd.InputGestures.Add(gesture); } }); } } } protected bool ContainsGesture(RoutedCommand cmd, KeyGesture gesture) { return cmd.InputGestures.OfType ().Any(p => string.Equals(p.DisplayString, gesture.DisplayString)); } //ChordKeyGesture - class derived from KeyGesture - provides simple state machine implementation //to handle chord keyboard navigation. Invoke when ChordKey or ChordKey + Ctrl is pressed after //entering chord mode internal sealed class ChordKeyGesture : KeyGesture { bool isInKeyChordMode = false; Key chordKey; public DesignerView Owner { get; set; } public ChordKeyGesture(Key key, Key chordKey) : base(key, ModifierKeys.Control, string.Format(CultureInfo.InvariantCulture, "Ctrl+{0}, {1}", key, chordKey)) { this.chordKey = chordKey; } public void ResetChordMode() { this.isInKeyChordMode = false; } public override bool Matches(object targetElement, InputEventArgs inputEventArgs) { bool result = false; KeyEventArgs keyArgs = inputEventArgs as KeyEventArgs; //lookup only for keyboard events if (null != keyArgs) { //by default - check if we are entering double key navigation if (!this.isInKeyChordMode) { //call base implementation to match Ctrl + actual key if (base.Matches(targetElement, keyArgs)) { this.isInKeyChordMode = true; } } //if we are waiting for chord key else if (keyArgs.Key == this.chordKey && (Keyboard.Modifiers == ModifierKeys.None || Keyboard.Modifiers == ModifierKeys.Control)) { //ok - we found a match, reset state to default System.Diagnostics.Debug.WriteLine(this.DisplayString); result = true; // reset all the chord key after this command if (this.Owner != null) { this.Owner.ResetAllChordKeyGesturesMode(); } } //no, second key didn't match the chord //if ctrl is pressed, just let it stay in chord mode else if(Keyboard.Modifiers != ModifierKeys.Control) { this.isInKeyChordMode = false; } } //any other input event resets state to default else { this.isInKeyChordMode = false; } return result; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation { using System.Activities.Presentation.View; using System.Activities.Presentation.Hosting; using System.Collections.Generic; using System.Linq; using System.Windows.Input; using System.Globalization; using System.Runtime; //DefaultCommandExtensionCallback - provides default key input gestures for most of the //WF commands. user can either implmeent his own class or override this one and provide special //handling for specific commands class DefaultCommandExtensionCallback : IWorkflowCommandExtensionCallback { Dictionary > defaultGestures = new Dictionary >(); public DefaultCommandExtensionCallback() { defaultGestures.Add(DesignerView.GoToParentCommand, new List { new ChordKeyGesture(Key.E, Key.P) }); defaultGestures.Add(DesignerView.ExpandInPlaceCommand, new List { new ChordKeyGesture(Key.E, Key.E) }); defaultGestures.Add(DesignerView.ExpandAllCommand, new List { new ChordKeyGesture(Key.E, Key.X) }); defaultGestures.Add(DesignerView.CollapseCommand, new List { new ChordKeyGesture(Key.E, Key.C) }); defaultGestures.Add(DesignerView.ZoomInCommand, new List { new KeyGesture(Key.OemPlus, ModifierKeys.Control, "Ctrl +"), new KeyGesture(Key.Add, ModifierKeys.Control)}); defaultGestures.Add(DesignerView.ZoomOutCommand, new List { new KeyGesture(Key.OemMinus, ModifierKeys.Control, "Ctrl -"), new KeyGesture(Key.Subtract, ModifierKeys.Control)}); defaultGestures.Add(DesignerView.ToggleArgumentDesignerCommand, new List { new ChordKeyGesture(Key.E, Key.A) }); defaultGestures.Add(DesignerView.ToggleVariableDesignerCommand, new List { new ChordKeyGesture(Key.E, Key.V) }); defaultGestures.Add(DesignerView.ToggleImportsDesignerCommand, new List { new ChordKeyGesture(Key.E, Key.I) }); defaultGestures.Add(DesignerView.ToggleMiniMapCommand, new List { new ChordKeyGesture(Key.E, Key.O) }); defaultGestures.Add(DesignerView.CreateVariableCommand, new List { new ChordKeyGesture(Key.E, Key.N) }); defaultGestures.Add(DesignerView.CycleThroughDesignerCommand, new List { new KeyGesture(Key.F6, ModifierKeys.Control | ModifierKeys.Alt, "Ctrl + Alt + F6") }); defaultGestures.Add(ExpressionTextBox.CompleteWordCommand, new List { new KeyGesture(Key.Right, ModifierKeys.Alt, "Alt + Right Arrow") }); defaultGestures.Add(ExpressionTextBox.GlobalIntellisenseCommand, new List { new KeyGesture(Key.J, ModifierKeys.Control, "Ctrl + J") }); defaultGestures.Add(ExpressionTextBox.ParameterInfoCommand, new List { new ChordKeyGesture(Key.K, Key.P)}); defaultGestures.Add(ExpressionTextBox.QuickInfoCommand, new List { new ChordKeyGesture(Key.K, Key.I)}); defaultGestures.Add(DesignerView.MoveFocusCommand, new List { new ChordKeyGesture(Key.E, Key.M) }); defaultGestures.Add(DesignerView.ToggleSelectionCommand, new List { new ChordKeyGesture(Key.E, Key.S) }); defaultGestures.Add(DesignerView.CutCommand, new List { new KeyGesture(Key.X, ModifierKeys.Control) }); defaultGestures.Add(DesignerView.CopyCommand, new List { new KeyGesture(Key.C, ModifierKeys.Control) }); defaultGestures.Add(DesignerView.PasteCommand, new List { new KeyGesture(Key.V, ModifierKeys.Control) }); defaultGestures.Add(DesignerView.SelectAllCommand, new List { new KeyGesture(Key.A, ModifierKeys.Control) }); defaultGestures.Add(DesignerView.UndoCommand, new List { new KeyGesture(Key.Z, ModifierKeys.Control) }); defaultGestures.Add(DesignerView.RedoCommand, new List { new KeyGesture(Key.Y, ModifierKeys.Control) }); defaultGestures.Add(ExpressionTextBox.IncreaseFilterLevelCommand, new List { new KeyGesture(Key.Decimal, ModifierKeys.Alt) }); defaultGestures.Add(ExpressionTextBox.DecreaseFilterLevelCommand, new List { new KeyGesture(Key.OemComma, ModifierKeys.Alt) }); } public void OnWorkflowCommandLoaded(CommandInfo commandInfo) { if (commandInfo == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("commandInfo")); } RoutedCommand cmd = commandInfo.Command as RoutedCommand; if (cmd != null) { List gestures = null; if (defaultGestures.TryGetValue(cmd, out gestures)) { gestures.ForEach((gesture) => { if (!this.ContainsGesture(cmd, gesture)) { cmd.InputGestures.Add(gesture); } }); } } } protected bool ContainsGesture(RoutedCommand cmd, KeyGesture gesture) { return cmd.InputGestures.OfType ().Any(p => string.Equals(p.DisplayString, gesture.DisplayString)); } //ChordKeyGesture - class derived from KeyGesture - provides simple state machine implementation //to handle chord keyboard navigation. Invoke when ChordKey or ChordKey + Ctrl is pressed after //entering chord mode internal sealed class ChordKeyGesture : KeyGesture { bool isInKeyChordMode = false; Key chordKey; public DesignerView Owner { get; set; } public ChordKeyGesture(Key key, Key chordKey) : base(key, ModifierKeys.Control, string.Format(CultureInfo.InvariantCulture, "Ctrl+{0}, {1}", key, chordKey)) { this.chordKey = chordKey; } public void ResetChordMode() { this.isInKeyChordMode = false; } public override bool Matches(object targetElement, InputEventArgs inputEventArgs) { bool result = false; KeyEventArgs keyArgs = inputEventArgs as KeyEventArgs; //lookup only for keyboard events if (null != keyArgs) { //by default - check if we are entering double key navigation if (!this.isInKeyChordMode) { //call base implementation to match Ctrl + actual key if (base.Matches(targetElement, keyArgs)) { this.isInKeyChordMode = true; } } //if we are waiting for chord key else if (keyArgs.Key == this.chordKey && (Keyboard.Modifiers == ModifierKeys.None || Keyboard.Modifiers == ModifierKeys.Control)) { //ok - we found a match, reset state to default System.Diagnostics.Debug.WriteLine(this.DisplayString); result = true; // reset all the chord key after this command if (this.Owner != null) { this.Owner.ResetAllChordKeyGesturesMode(); } } //no, second key didn't match the chord //if ctrl is pressed, just let it stay in chord mode else if(Keyboard.Modifiers != ModifierKeys.Control) { this.isInKeyChordMode = false; } } //any other input event resets state to default else { this.isInKeyChordMode = false; } return result; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- OpacityConverter.cs
- PrivacyNoticeBindingElement.cs
- DrawListViewSubItemEventArgs.cs
- PageRanges.cs
- ToolStripPanelRenderEventArgs.cs
- Form.cs
- Crc32.cs
- DiagnosticsConfiguration.cs
- CodeNamespace.cs
- PasswordRecovery.cs
- ErrorProvider.cs
- ListView.cs
- HtmlShim.cs
- Int32AnimationBase.cs
- SoapSchemaExporter.cs
- PropertyPath.cs
- Image.cs
- TypedReference.cs
- BamlBinaryWriter.cs
- XmlUTF8TextReader.cs
- DBDataPermissionAttribute.cs
- HashStream.cs
- XmlSignificantWhitespace.cs
- HtmlAnchor.cs
- ColumnMapTranslator.cs
- Char.cs
- AssemblyName.cs
- XmlSubtreeReader.cs
- SqlConnectionHelper.cs
- PseudoWebRequest.cs
- TypeForwardedToAttribute.cs
- InstancePersistenceException.cs
- XmlSchemaElement.cs
- FlowLayout.cs
- PenThread.cs
- WindowsListBox.cs
- RemotingServices.cs
- EmptyElement.cs
- LineGeometry.cs
- TdsParserSessionPool.cs
- TextViewBase.cs
- StringReader.cs
- GiveFeedbackEventArgs.cs
- FileDialogCustomPlace.cs
- SqlDataSourceRefreshSchemaForm.cs
- DataSourceXmlElementAttribute.cs
- InfoCardTraceRecord.cs
- MatrixTransform.cs
- CodeAttributeArgument.cs
- Cursor.cs
- XmlSchemaObjectTable.cs
- NativeWrapper.cs
- RegexRunnerFactory.cs
- ConnectionOrientedTransportManager.cs
- ParentQuery.cs
- DefaultDiscoveryServiceExtension.cs
- basenumberconverter.cs
- GetIndexBinder.cs
- XmlCustomFormatter.cs
- SqlDataSourceDesigner.cs
- DetailsViewRow.cs
- XmlSerializerObjectSerializer.cs
- SmtpCommands.cs
- XomlCompilerParameters.cs
- SqlTypeConverter.cs
- WindowsToolbarAsMenu.cs
- TextDecorationCollection.cs
- DataObjectPastingEventArgs.cs
- XPathMultyIterator.cs
- WpfWebRequestHelper.cs
- WhitespaceRuleReader.cs
- XamlReader.cs
- Resources.Designer.cs
- fixedPageContentExtractor.cs
- ClassHandlersStore.cs
- _ConnectOverlappedAsyncResult.cs
- TrackingLocation.cs
- ping.cs
- PartitionedDataSource.cs
- DataServiceHostWrapper.cs
- DispatcherEventArgs.cs
- DefaultBinder.cs
- BackgroundFormatInfo.cs
- WindowsContainer.cs
- MediaScriptCommandRoutedEventArgs.cs
- TextEditorSpelling.cs
- IsolatedStorageFilePermission.cs
- log.cs
- ImageListImageEditor.cs
- OleDbCommand.cs
- OverflowException.cs
- XmlSortKeyAccumulator.cs
- XmlWriterSettings.cs
- SecurityDocument.cs
- DateTime.cs
- UiaCoreProviderApi.cs
- DependencyPropertyValueSerializer.cs
- UrlParameterWriter.cs
- NullableLongAverageAggregationOperator.cs
- DataServiceRequestException.cs