Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / CompMod / System / ComponentModel / Design / BinaryEditor.cs / 1 / BinaryEditor.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.ComponentModel.Design { using System.Design; using System; using System.Text; using System.IO; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Windows.Forms; using System.Drawing; using System.Drawing.Design; using Microsoft.Win32; using System.Windows.Forms.Design; using System.Windows.Forms.ComponentModel; ///internal class BinaryUI : System.Windows.Forms.Form { private BinaryEditor editor; object value; private RadioButton radioAuto = null; private Button buttonSave = null; private Button buttonOK = null; private ByteViewer byteViewer = null; private GroupBox groupBoxMode = null; private RadioButton radioHex = null; private RadioButton radioAnsi = null; private TableLayoutPanel radioButtonsTableLayoutPanel; private TableLayoutPanel okSaveTableLayoutPanel; private TableLayoutPanel overarchingTableLayoutPanel; private RadioButton radioUnicode = null; public BinaryUI(BinaryEditor editor) { this.editor = editor; InitializeComponent(); } public object Value { get { return value; } set { this.value = value; byte[] bytes = null; if (value != null) { bytes = editor.ConvertToBytes(value); } if (bytes != null) { byteViewer.SetBytes(bytes); byteViewer.Enabled = true; } else { byteViewer.SetBytes(new byte[0]); byteViewer.Enabled = false; } } } private void RadioAuto_checkedChanged(object source, EventArgs e) { if (radioAuto.Checked) byteViewer.SetDisplayMode(DisplayMode.Auto); } private void RadioHex_checkedChanged(object source, EventArgs e) { if (radioHex.Checked) byteViewer.SetDisplayMode(DisplayMode.Hexdump); } private void RadioAnsi_checkedChanged(object source, EventArgs e) { if (radioAnsi.Checked) byteViewer.SetDisplayMode(DisplayMode.Ansi); } private void RadioUnicode_checkedChanged(object source, EventArgs e) { if (radioUnicode.Checked) byteViewer.SetDisplayMode(DisplayMode.Unicode); } private void ButtonOK_click(object source, EventArgs e) { object localValue = value; editor.ConvertToValue(byteViewer.GetBytes(), ref localValue); value = localValue; } private void ButtonSave_click(object source, EventArgs e) { try { SaveFileDialog sfd = new SaveFileDialog(); sfd.FileName = SR.GetString(SR.BinaryEditorFileName); sfd.Title = SR.GetString(SR.BinaryEditorSaveFile); sfd.Filter = SR.GetString(SR.BinaryEditorAllFiles) + " (*.*)|*.*"; DialogResult result = sfd.ShowDialog(); if (result == DialogResult.OK) { byteViewer.SaveToFile(sfd.FileName); } } catch (IOException x) { RTLAwareMessageBox.Show(null, SR.GetString(SR.BinaryEditorFileError, x.Message), SR.GetString(SR.BinaryEditorTitle), MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, 0); } } private void Form_HelpRequested(object sender, HelpEventArgs e) { editor.ShowHelp(); } private void Form_HelpButtonClicked(object sender, CancelEventArgs e) { e.Cancel = true; editor.ShowHelp(); } private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BinaryEditor)); this.byteViewer = new ByteViewer(); this.buttonOK = new System.Windows.Forms.Button(); this.buttonSave = new System.Windows.Forms.Button(); this.groupBoxMode = new System.Windows.Forms.GroupBox(); this.radioButtonsTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); this.radioUnicode = new System.Windows.Forms.RadioButton(); this.radioAuto = new System.Windows.Forms.RadioButton(); this.radioAnsi = new System.Windows.Forms.RadioButton(); this.radioHex = new System.Windows.Forms.RadioButton(); this.okSaveTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); this.overarchingTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); this.byteViewer.SuspendLayout(); this.groupBoxMode.SuspendLayout(); this.radioButtonsTableLayoutPanel.SuspendLayout(); this.okSaveTableLayoutPanel.SuspendLayout(); this.overarchingTableLayoutPanel.SuspendLayout(); this.SuspendLayout(); // // byteViewer // resources.ApplyResources(this.byteViewer, "byteViewer"); this.byteViewer.SetDisplayMode(DisplayMode.Auto); this.byteViewer.Name = "byteViewer"; this.byteViewer.Margin = Padding.Empty; this.byteViewer.Dock = DockStyle.Fill; // // buttonOK // resources.ApplyResources(this.buttonOK, "buttonOK"); this.buttonOK.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.buttonOK.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0); this.buttonOK.MinimumSize = new System.Drawing.Size(75, 23); this.buttonOK.Name = "buttonOK"; this.buttonOK.Padding = new System.Windows.Forms.Padding(10, 0, 10, 0); this.buttonOK.Click += new System.EventHandler(this.ButtonOK_click); // // buttonSave // resources.ApplyResources(this.buttonSave, "buttonSave"); this.buttonSave.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.buttonSave.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0); this.buttonSave.MinimumSize = new System.Drawing.Size(75, 23); this.buttonSave.Name = "buttonSave"; this.buttonSave.Padding = new System.Windows.Forms.Padding(10, 0, 10, 0); this.buttonSave.Click += new System.EventHandler(this.ButtonSave_click); // // groupBoxMode // resources.ApplyResources(this.groupBoxMode, "groupBoxMode"); this.groupBoxMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.groupBoxMode.Controls.Add(this.radioButtonsTableLayoutPanel); this.groupBoxMode.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3); this.groupBoxMode.Name = "groupBoxMode"; this.groupBoxMode.Padding = new System.Windows.Forms.Padding(0); this.groupBoxMode.TabStop = false; // // radioButtonsTableLayoutPanel // resources.ApplyResources(this.radioButtonsTableLayoutPanel, "radioButtonsTableLayoutPanel"); this.radioButtonsTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); this.radioButtonsTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); this.radioButtonsTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); this.radioButtonsTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); this.radioButtonsTableLayoutPanel.Controls.Add(this.radioUnicode, 3, 0); this.radioButtonsTableLayoutPanel.Controls.Add(this.radioAuto, 0, 0); this.radioButtonsTableLayoutPanel.Controls.Add(this.radioAnsi, 2, 0); this.radioButtonsTableLayoutPanel.Controls.Add(this.radioHex, 1, 0); this.radioButtonsTableLayoutPanel.Margin = new System.Windows.Forms.Padding(9); this.radioButtonsTableLayoutPanel.Name = "radioButtonsTableLayoutPanel"; this.radioButtonsTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); // // radioUnicode // resources.ApplyResources(this.radioUnicode, "radioUnicode"); this.radioUnicode.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0); this.radioUnicode.Name = "radioUnicode"; this.radioUnicode.CheckedChanged += new System.EventHandler(this.RadioUnicode_checkedChanged); // // radioAuto // resources.ApplyResources(this.radioAuto, "radioAuto"); this.radioAuto.Checked = true; this.radioAuto.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0); this.radioAuto.Name = "radioAuto"; this.radioAuto.CheckedChanged += new System.EventHandler(this.RadioAuto_checkedChanged); // // radioAnsi // resources.ApplyResources(this.radioAnsi, "radioAnsi"); this.radioAnsi.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); this.radioAnsi.Name = "radioAnsi"; this.radioAnsi.CheckedChanged += new System.EventHandler(this.RadioAnsi_checkedChanged); // // radioHex // resources.ApplyResources(this.radioHex, "radioHex"); this.radioHex.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); this.radioHex.Name = "radioHex"; this.radioHex.CheckedChanged += new System.EventHandler(this.RadioHex_checkedChanged); // // okSaveTableLayoutPanel // resources.ApplyResources(this.okSaveTableLayoutPanel, "okSaveTableLayoutPanel"); this.okSaveTableLayoutPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.okSaveTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); this.okSaveTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); this.okSaveTableLayoutPanel.Controls.Add(this.buttonOK, 0, 0); this.okSaveTableLayoutPanel.Controls.Add(this.buttonSave, 1, 0); this.okSaveTableLayoutPanel.Margin = new System.Windows.Forms.Padding(0, 9, 0, 0); this.okSaveTableLayoutPanel.Name = "okSaveTableLayoutPanel"; this.okSaveTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); // // overarchingTableLayoutPanel // resources.ApplyResources(this.overarchingTableLayoutPanel, "overarchingTableLayoutPanel"); this.overarchingTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); this.overarchingTableLayoutPanel.Controls.Add(this.byteViewer, 0, 0); this.overarchingTableLayoutPanel.Controls.Add(this.groupBoxMode, 0, 1); this.overarchingTableLayoutPanel.Controls.Add(this.okSaveTableLayoutPanel, 0, 2); this.overarchingTableLayoutPanel.Name = "overarchingTableLayoutPanel"; this.overarchingTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.overarchingTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.overarchingTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); // // BinaryUI // this.AcceptButton = this.buttonOK; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.buttonOK; this.Controls.Add(this.overarchingTableLayoutPanel); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.HelpButton = true; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "BinaryUI"; this.ShowIcon = false; this.ShowInTaskbar = false; this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.Form_HelpRequested); this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.Form_HelpButtonClicked); this.byteViewer.ResumeLayout(false); this.byteViewer.PerformLayout(); this.groupBoxMode.ResumeLayout(false); this.groupBoxMode.PerformLayout(); this.radioButtonsTableLayoutPanel.ResumeLayout(false); this.radioButtonsTableLayoutPanel.PerformLayout(); this.okSaveTableLayoutPanel.ResumeLayout(false); this.okSaveTableLayoutPanel.PerformLayout(); this.overarchingTableLayoutPanel.ResumeLayout(false); this.overarchingTableLayoutPanel.PerformLayout(); this.ResumeLayout(false); } } /// /// /// Generic editor for editing binary data. This presents /// a hex editing window to the user. /// public sealed class BinaryEditor : UITypeEditor { private static readonly string HELP_KEYWORD = "System.ComponentModel.Design.BinaryEditor"; private ITypeDescriptorContext context; private BinaryUI binaryUI; internal object GetService(Type serviceType) { if (this.context != null) { IDesignerHost host = this.context.GetService(typeof(IDesignerHost)) as IDesignerHost; if (host == null) return this.context.GetService(serviceType); else return host.GetService(serviceType); } return null; } ////// /// Converts the given object to an array of bytes to be manipulated /// by the editor. The default implementation of this supports /// byte[] and stream objects. /// internal byte[] ConvertToBytes(object value) { if (value is Stream) { Stream s = (Stream)value; s.Position = 0; int byteCount = (int)(s.Length - s.Position); byte[] bytes = new byte[byteCount]; s.Read(bytes, 0, byteCount); return bytes; } if (value is byte[]) { return (byte[])value; } if (value is string) { int size = ((string)value).Length * 2; byte[] buffer = new byte[size]; Encoding.Unicode.GetBytes(((string)value).ToCharArray(), 0, size / 2, buffer, 0); return buffer; } Debug.Fail("No conversion from " + value == null ? "null" : value.GetType().FullName + " to byte[]"); return null; } ////// /// Converts the given byte array back into a native object. If /// the object itself needs to be replace (as is the case for arrays), /// then a new object may be assigned out through the parameter. /// internal void ConvertToValue(byte[] bytes, ref object value) { if (value is Stream) { Stream s = (Stream)value; s.Position = 0; s.Write(bytes, 0, bytes.Length); } else if (value is byte[]) { value = bytes; } else if (value is string) { value = BitConverter.ToString(bytes); } else { Debug.Fail("No conversion from byte[] to " + value == null ? "null" : value.GetType().FullName); } } ////// /// Edits the given object value using the editor style provided by /// GetEditorStyle. A service provider is provided so that any /// required editing services can be obtained. /// [SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")] // everything in this assembly is full trust. public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { if (provider != null) { this.context = context; IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); if (edSvc != null) { if (binaryUI == null) { binaryUI = new BinaryUI(this); } binaryUI.Value = value; if (edSvc.ShowDialog(binaryUI) == DialogResult.OK) { value = binaryUI.Value; } binaryUI.Value = null; } } return value; } ////// /// Retrieves the editing style of the Edit method. If the method /// is not supported, this will return None. /// [SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")] // everything in this assembly is full trust. public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) { return UITypeEditorEditStyle.Modal; } internal void ShowHelp() { IHelpService helpService = GetService(typeof(IHelpService)) as IHelpService; if (helpService != null) { helpService.ShowHelpFromKeyword(HELP_KEYWORD); } else { Debug.Fail("Unable to get IHelpService."); } } } } // 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
- ProviderSettingsCollection.cs
- UInt64.cs
- OdbcErrorCollection.cs
- CacheEntry.cs
- CompositeClientFormatter.cs
- PathFigureCollection.cs
- FilterElement.cs
- SerializationException.cs
- Int32Rect.cs
- StringUtil.cs
- DataGridViewImageColumn.cs
- TcpServerChannel.cs
- DataKeyArray.cs
- PermissionSetEnumerator.cs
- AssemblyInfo.cs
- DependencyPropertyKind.cs
- HandlerBase.cs
- CqlWriter.cs
- DefaultBindingPropertyAttribute.cs
- EncoderExceptionFallback.cs
- SmtpNetworkElement.cs
- SymbolDocumentInfo.cs
- Double.cs
- ComponentEvent.cs
- PersistenceTypeAttribute.cs
- ConfigurationLocation.cs
- Drawing.cs
- XmlAnyElementAttributes.cs
- InputLanguageProfileNotifySink.cs
- SafeFileMappingHandle.cs
- XamlToRtfParser.cs
- SafeNativeMethods.cs
- TextElementEditingBehaviorAttribute.cs
- FloatUtil.cs
- ValidationPropertyAttribute.cs
- EntityDataSourceWrapper.cs
- TraceContext.cs
- StateChangeEvent.cs
- DiagnosticsConfigurationHandler.cs
- RoleGroupCollection.cs
- EventProviderBase.cs
- Set.cs
- FontDialog.cs
- AttachInfo.cs
- CssTextWriter.cs
- TableLayout.cs
- Variable.cs
- SharedStatics.cs
- WorkflowApplicationTerminatedException.cs
- SQLCharsStorage.cs
- SqlDataSource.cs
- FormClosedEvent.cs
- DataServiceConfiguration.cs
- Pair.cs
- JoinCqlBlock.cs
- HttpApplication.cs
- LZCodec.cs
- ClientSettings.cs
- XmlCharCheckingWriter.cs
- TypeProvider.cs
- Sentence.cs
- _AutoWebProxyScriptWrapper.cs
- CodeTypeDelegate.cs
- CharacterBuffer.cs
- CuspData.cs
- DbParameterCollectionHelper.cs
- LinqDataSourceInsertEventArgs.cs
- CheckBoxPopupAdapter.cs
- ArraySubsetEnumerator.cs
- HybridDictionary.cs
- ResourceExpressionBuilder.cs
- ImageList.cs
- EventLogTraceListener.cs
- Queue.cs
- InputMethodStateTypeInfo.cs
- SiteMapNodeItem.cs
- DesignerObjectListAdapter.cs
- ThousandthOfEmRealPoints.cs
- EncoderNLS.cs
- ConstraintConverter.cs
- ObjectQueryProvider.cs
- NameHandler.cs
- CodeTypeReferenceExpression.cs
- RtfFormatStack.cs
- Stack.cs
- PreviewPrintController.cs
- PersonalizationStateInfoCollection.cs
- DrawingDrawingContext.cs
- DBAsyncResult.cs
- GridViewColumn.cs
- SoapReflector.cs
- FilteredAttributeCollection.cs
- IPAddressCollection.cs
- DataControlFieldCell.cs
- SwitchLevelAttribute.cs
- IImplicitResourceProvider.cs
- XmlWrappingReader.cs
- Link.cs
- EqualityComparer.cs
- SortedList.cs