Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / System / Windows / Input / ModifierKeysConverter.cs / 1305600 / ModifierKeysConverter.cs
//---------------------------------------------------------------------------- // // File: ModifierKeysConverter.cs // // Description: // // ModifierKeysConverter : Converts a Modifier string to the *Type* that the string represents and vice-versa. // // Features: // // History: // 05/28/2003 created: Chandrasekhar Rentachintala // // Copyright (C) 2003 by Microsoft Corporation. All rights reserved. // //--------------------------------------------------------------------------- using System; using System.ComponentModel; // for TypeConverter using System.Globalization; // for CultureInfo using System.Reflection; using MS.Internal; using System.Windows; using System.Windows.Input; using System.Windows.Markup; using MS.Utility; using MS.Internal.WindowsBase; namespace System.Windows.Input { ////// Key Converter class for converting between a string and the Type of a Modifiers /// ///public class ModifierKeysConverter : TypeConverter { /// /// CanConvertFrom() /// /// /// ////// public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { // We can only handle string. if (sourceType == typeof(string)) { return true; } else { return false; } } /// /// TypeConverter method override. /// /// ITypeDescriptorContext /// Type to convert to ///true if conversion is possible public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { // We can convert to a string. if (destinationType == typeof(string)) { // When invoked by the serialization engine we can convert to string only for known type if (context != null && context.Instance != null && context.Instance is ModifierKeys) { return (IsDefinedModifierKeys((ModifierKeys)context.Instance)); } } return false; } ////// ConvertFrom() /// /// /// /// ////// public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object source) { if (source is string) { string modifiersToken = ((string)source).Trim(); ModifierKeys modifiers = GetModifierKeys(modifiersToken, CultureInfo.InvariantCulture); return modifiers; } throw GetConvertFromException(source); } /// /// ConvertTo() /// /// /// /// /// ////// public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == null) throw new ArgumentNullException("destinationType"); if (destinationType == typeof(string)) { ModifierKeys modifiers = (ModifierKeys)value; if (!IsDefinedModifierKeys(modifiers)) throw new InvalidEnumArgumentException("value", (int)modifiers, typeof(ModifierKeys)); else { string strModifiers = ""; if ((modifiers & ModifierKeys.Control) == ModifierKeys.Control) { strModifiers += MatchModifiers(ModifierKeys.Control); } if ((modifiers & ModifierKeys.Alt) == ModifierKeys.Alt) { if (strModifiers.Length > 0) strModifiers += Modifier_Delimiter; strModifiers += MatchModifiers(ModifierKeys.Alt); } if ((modifiers & ModifierKeys.Windows) == ModifierKeys.Windows) { if (strModifiers.Length > 0) strModifiers += Modifier_Delimiter; strModifiers += MatchModifiers(ModifierKeys.Windows); ; } if ((modifiers & ModifierKeys.Shift) == ModifierKeys.Shift) { if (strModifiers.Length > 0) strModifiers += Modifier_Delimiter; strModifiers += MatchModifiers(ModifierKeys.Shift); ; } return strModifiers; } } throw GetConvertToException(value,destinationType); } private ModifierKeys GetModifierKeys(string modifiersToken, CultureInfo culture) { ModifierKeys modifiers = ModifierKeys.None; if (modifiersToken.Length != 0) { int offset = 0; do { offset = modifiersToken.IndexOf(Modifier_Delimiter); string token = (offset < 0) ? modifiersToken : modifiersToken.Substring(0, offset); token = token.Trim(); token = token.ToUpper(culture); if (token == String.Empty) break; switch (token) { case "CONTROL" : case "CTRL" : modifiers |= ModifierKeys.Control; break; case "SHIFT" : modifiers |= ModifierKeys.Shift; break; case "ALT": modifiers |= ModifierKeys.Alt; break; case "WINDOWS": case "WIN": modifiers |= ModifierKeys.Windows; break; default: throw new NotSupportedException(SR.Get(SRID.Unsupported_Modifier, token)); } modifiersToken = modifiersToken.Substring(offset + 1); } while (offset != -1); } return modifiers; } /// /// Check for Valid enum, as any int can be casted to the enum. /// public static bool IsDefinedModifierKeys(ModifierKeys modifierKeys) { return (modifierKeys == ModifierKeys.None || (((int)modifierKeys & ~((int)ModifierKeysFlag)) == 0)); } private const char Modifier_Delimiter = '+'; private static ModifierKeys ModifierKeysFlag = ModifierKeys.Windows | ModifierKeys.Shift | ModifierKeys.Alt | ModifierKeys.Control ; internal static string MatchModifiers(ModifierKeys modifierKeys) { string modifiers = String.Empty; switch (modifierKeys) { case ModifierKeys.Control: modifiers="Ctrl";break; case ModifierKeys.Shift : modifiers="Shift";break; case ModifierKeys.Alt : modifiers="Alt";break; case ModifierKeys.Windows: modifiers="Windows";break; } return modifiers; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // // File: ModifierKeysConverter.cs // // Description: // // ModifierKeysConverter : Converts a Modifier string to the *Type* that the string represents and vice-versa. // // Features: // // History: // 05/28/2003 created: Chandrasekhar Rentachintala // // Copyright (C) 2003 by Microsoft Corporation. All rights reserved. // //--------------------------------------------------------------------------- using System; using System.ComponentModel; // for TypeConverter using System.Globalization; // for CultureInfo using System.Reflection; using MS.Internal; using System.Windows; using System.Windows.Input; using System.Windows.Markup; using MS.Utility; using MS.Internal.WindowsBase; namespace System.Windows.Input { ////// Key Converter class for converting between a string and the Type of a Modifiers /// ///public class ModifierKeysConverter : TypeConverter { /// /// CanConvertFrom() /// /// /// ////// public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { // We can only handle string. if (sourceType == typeof(string)) { return true; } else { return false; } } /// /// TypeConverter method override. /// /// ITypeDescriptorContext /// Type to convert to ///true if conversion is possible public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { // We can convert to a string. if (destinationType == typeof(string)) { // When invoked by the serialization engine we can convert to string only for known type if (context != null && context.Instance != null && context.Instance is ModifierKeys) { return (IsDefinedModifierKeys((ModifierKeys)context.Instance)); } } return false; } ////// ConvertFrom() /// /// /// /// ////// public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object source) { if (source is string) { string modifiersToken = ((string)source).Trim(); ModifierKeys modifiers = GetModifierKeys(modifiersToken, CultureInfo.InvariantCulture); return modifiers; } throw GetConvertFromException(source); } /// /// ConvertTo() /// /// /// /// /// ////// public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == null) throw new ArgumentNullException("destinationType"); if (destinationType == typeof(string)) { ModifierKeys modifiers = (ModifierKeys)value; if (!IsDefinedModifierKeys(modifiers)) throw new InvalidEnumArgumentException("value", (int)modifiers, typeof(ModifierKeys)); else { string strModifiers = ""; if ((modifiers & ModifierKeys.Control) == ModifierKeys.Control) { strModifiers += MatchModifiers(ModifierKeys.Control); } if ((modifiers & ModifierKeys.Alt) == ModifierKeys.Alt) { if (strModifiers.Length > 0) strModifiers += Modifier_Delimiter; strModifiers += MatchModifiers(ModifierKeys.Alt); } if ((modifiers & ModifierKeys.Windows) == ModifierKeys.Windows) { if (strModifiers.Length > 0) strModifiers += Modifier_Delimiter; strModifiers += MatchModifiers(ModifierKeys.Windows); ; } if ((modifiers & ModifierKeys.Shift) == ModifierKeys.Shift) { if (strModifiers.Length > 0) strModifiers += Modifier_Delimiter; strModifiers += MatchModifiers(ModifierKeys.Shift); ; } return strModifiers; } } throw GetConvertToException(value,destinationType); } private ModifierKeys GetModifierKeys(string modifiersToken, CultureInfo culture) { ModifierKeys modifiers = ModifierKeys.None; if (modifiersToken.Length != 0) { int offset = 0; do { offset = modifiersToken.IndexOf(Modifier_Delimiter); string token = (offset < 0) ? modifiersToken : modifiersToken.Substring(0, offset); token = token.Trim(); token = token.ToUpper(culture); if (token == String.Empty) break; switch (token) { case "CONTROL" : case "CTRL" : modifiers |= ModifierKeys.Control; break; case "SHIFT" : modifiers |= ModifierKeys.Shift; break; case "ALT": modifiers |= ModifierKeys.Alt; break; case "WINDOWS": case "WIN": modifiers |= ModifierKeys.Windows; break; default: throw new NotSupportedException(SR.Get(SRID.Unsupported_Modifier, token)); } modifiersToken = modifiersToken.Substring(offset + 1); } while (offset != -1); } return modifiers; } /// /// Check for Valid enum, as any int can be casted to the enum. /// public static bool IsDefinedModifierKeys(ModifierKeys modifierKeys) { return (modifierKeys == ModifierKeys.None || (((int)modifierKeys & ~((int)ModifierKeysFlag)) == 0)); } private const char Modifier_Delimiter = '+'; private static ModifierKeys ModifierKeysFlag = ModifierKeys.Windows | ModifierKeys.Shift | ModifierKeys.Alt | ModifierKeys.Control ; internal static string MatchModifiers(ModifierKeys modifierKeys) { string modifiers = String.Empty; switch (modifierKeys) { case ModifierKeys.Control: modifiers="Ctrl";break; case ModifierKeys.Shift : modifiers="Shift";break; case ModifierKeys.Alt : modifiers="Alt";break; case ModifierKeys.Windows: modifiers="Windows";break; } return modifiers; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataGridView.cs
- SurrogateEncoder.cs
- XMLSchema.cs
- WindowsListViewGroup.cs
- HtmlSelectionListAdapter.cs
- MailBnfHelper.cs
- StringDictionaryWithComparer.cs
- XComponentModel.cs
- DesignerActionMethodItem.cs
- ProcessProtocolHandler.cs
- CaretElement.cs
- WebMessageEncodingBindingElement.cs
- SqlDependency.cs
- EdmComplexPropertyAttribute.cs
- GridViewDeleteEventArgs.cs
- DataControlFieldHeaderCell.cs
- GenericArgumentsUpdater.cs
- ResourceDefaultValueAttribute.cs
- NumberSubstitution.cs
- RewritingValidator.cs
- DesignerForm.cs
- OleDbDataReader.cs
- ContentDesigner.cs
- SocketSettings.cs
- SoapDocumentServiceAttribute.cs
- TimeStampChecker.cs
- DataGridViewImageCell.cs
- WebServiceTypeData.cs
- FormsAuthenticationConfiguration.cs
- HtmlLink.cs
- SatelliteContractVersionAttribute.cs
- TiffBitmapDecoder.cs
- BindingFormattingDialog.cs
- ConstraintEnumerator.cs
- MetadataAssemblyHelper.cs
- SystemPens.cs
- RelationshipNavigation.cs
- MultiBindingExpression.cs
- ManifestSignatureInformation.cs
- DBCommandBuilder.cs
- RenderingEventArgs.cs
- LocalizationParserHooks.cs
- ListControl.cs
- RemoteCryptoRsaServiceProvider.cs
- ManagedWndProcTracker.cs
- RichTextBoxDesigner.cs
- OutputCacheEntry.cs
- ComponentChangingEvent.cs
- UnsafePeerToPeerMethods.cs
- SQLInt16.cs
- ListItemCollection.cs
- AlignmentXValidation.cs
- CngAlgorithm.cs
- FactoryMaker.cs
- PngBitmapDecoder.cs
- XXXOnTypeBuilderInstantiation.cs
- WebPartRestoreVerb.cs
- PlatformNotSupportedException.cs
- SmtpMail.cs
- TextEndOfSegment.cs
- CanonicalFontFamilyReference.cs
- View.cs
- PartEditor.cs
- MimeObjectFactory.cs
- ToolStripArrowRenderEventArgs.cs
- ReliableDuplexSessionChannel.cs
- ContentPlaceHolderDesigner.cs
- DataGridViewCellValidatingEventArgs.cs
- SqlDataSourceTableQuery.cs
- DeviceContext.cs
- HelpInfo.cs
- DirectoryInfo.cs
- DoubleConverter.cs
- DataSet.cs
- BamlTreeNode.cs
- InvokeHandlers.cs
- EdmValidator.cs
- DbConnectionPoolOptions.cs
- OrderingExpression.cs
- PathData.cs
- DiscoveryServerProtocol.cs
- PropertySegmentSerializationProvider.cs
- WindowsTooltip.cs
- ProfessionalColors.cs
- PolicyManager.cs
- NotCondition.cs
- FilteredReadOnlyMetadataCollection.cs
- dataprotectionpermissionattribute.cs
- WinEventWrap.cs
- ColorPalette.cs
- DesignerAutoFormatStyle.cs
- ContextQuery.cs
- ListenerAdapter.cs
- ToolStripLabel.cs
- Trustee.cs
- NumberAction.cs
- AccessDataSource.cs
- AsymmetricKeyExchangeDeformatter.cs
- IncomingWebRequestContext.cs
- DocumentApplication.cs