Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / Drawing / System / Drawing / Design / IconEditor.cs / 1 / IconEditor.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Drawing.Design {
using System;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Windows.Forms.ComponentModel;
using System.Windows.Forms.Design;
///
///
///
/// Provides an editor for visually picking an icon.
///
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)]
public class IconEditor : UITypeEditor {
// NOTE: this class should be almost identical to ImageEditor. The main exception is PaintValue,
// which has logic that should probably be copied into ImageEditor.
internal static Type[] imageExtenders = new Type[] { };
internal FileDialog fileDialog;
///
///
/// [To be supplied.]
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1818:DoNotConcatenateStringsInsideLoops")]
protected static string CreateExtensionsString(string[] extensions, string sep) {
if (extensions == null || extensions.Length == 0)
return null;
string text = null;
for (int i = 0; i < extensions.Length - 1; i++)
text = text + "*." + extensions[i] + sep;
text = text + "*." + extensions[extensions.Length-1];
return text;
}
///
///
/// [To be supplied.]
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly")] // previously shipped this way. Would be a breaking change.
protected static string CreateFilterEntry(IconEditor e)
{
string desc = e.GetFileDialogDescription();
string exts = CreateExtensionsString(e.GetExtensions(),",");
string extsSemis = CreateExtensionsString(e.GetExtensions(),";");
return desc + "(" + exts + ")|" + extsSemis;
}
///
///
/// 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) {
IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
if (edSvc != null) {
if (fileDialog == null) {
fileDialog = new OpenFileDialog();
string filter = CreateFilterEntry(this);
for (int i = 0; i < imageExtenders.Length; i++) {
Debug.Fail("Why does IconEditor have subclasses if Icon doesn't?");
}
fileDialog.Filter = filter;
}
IntPtr hwndFocus = UnsafeNativeMethods.GetFocus();
try {
if (fileDialog.ShowDialog() == DialogResult.OK) {
FileStream file = new FileStream(fileDialog.FileName, FileMode.Open, FileAccess.Read, FileShare.Read);
value = LoadFromStream(file);
}
}
finally {
if (hwndFocus != IntPtr.Zero) {
UnsafeNativeMethods.SetFocus(new HandleRef(null, hwndFocus));
}
}
}
}
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;
}
///
///
/// [To be supplied.]
///
protected virtual string GetFileDialogDescription() {
return SR.GetString(SR.iconFileDescription);
}
///
///
/// [To be supplied.]
///
[SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")] // everything in this assembly is full trust.
protected virtual string[] GetExtensions() {
return new string[] { "ico"};
}
///
///
/// Determines if this editor supports the painting of a representation
/// of an object's value.
///
[SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")] // everything in this assembly is full trust.
public override bool GetPaintValueSupported(ITypeDescriptorContext context) {
return true;
}
///
///
/// [To be supplied.]
///
protected virtual Icon LoadFromStream(Stream stream) {
return new Icon(stream);
}
///
///
///
/// Paints a representative value of the given object to the provided
/// canvas. Painting should be done within the boundaries of the
/// provided rectangle.
///
///
[SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] //Benign code
[SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")] // everything in this assembly is full trust.
public override void PaintValue(PaintValueEventArgs e) {
Icon icon = e.Value as Icon;
if (icon != null) {
// If icon is smaller than rectangle, just center it unscaled in the rectangle
Size iconSize = icon.Size;
Rectangle rectangle = e.Bounds;
if (icon.Width < rectangle.Width) {
rectangle.X = (rectangle.Width - icon.Width) / 2;
rectangle.Width = icon.Width;
}
if (icon.Height < rectangle.Height) {
rectangle.X = (rectangle.Height - icon.Height) / 2;
rectangle.Height = icon.Height;
}
e.Graphics.DrawIcon(icon, rectangle);
}
}
}
}
// 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
- UnsafeNativeMethods.cs
- ListViewDeleteEventArgs.cs
- KeysConverter.cs
- RightsManagementPermission.cs
- HeaderedContentControl.cs
- RunClient.cs
- ReferenceConverter.cs
- AbsoluteQuery.cs
- WebServiceData.cs
- NetworkAddressChange.cs
- SqlCacheDependencySection.cs
- DataRowChangeEvent.cs
- AuthorizationContext.cs
- Size.cs
- OleDbParameter.cs
- XNodeNavigator.cs
- SQLDateTimeStorage.cs
- ConstructorBuilder.cs
- SafeHandle.cs
- StringStorage.cs
- XmlSerializationReader.cs
- RtType.cs
- localization.cs
- ConnectionOrientedTransportBindingElement.cs
- LineVisual.cs
- UniqueConstraint.cs
- SignatureHelper.cs
- ToolStripSeparator.cs
- HttpBrowserCapabilitiesWrapper.cs
- TableSectionStyle.cs
- EDesignUtil.cs
- FormatterServices.cs
- ViewKeyConstraint.cs
- XmlSchemaInclude.cs
- ILGenerator.cs
- FeatureSupport.cs
- DateTimeUtil.cs
- ThreadStateException.cs
- ListViewAutomationPeer.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- OptimalTextSource.cs
- EventToken.cs
- MultiAsyncResult.cs
- TextServicesPropertyRanges.cs
- ResourcesBuildProvider.cs
- ValidationResult.cs
- GraphicsContext.cs
- InputLanguageSource.cs
- ProcessProtocolHandler.cs
- TypeInitializationException.cs
- DataGridTablesFactory.cs
- CursorEditor.cs
- IndexedString.cs
- ProfileGroupSettings.cs
- EdmSchemaAttribute.cs
- XamlFigureLengthSerializer.cs
- SQlBooleanStorage.cs
- _ConnectionGroup.cs
- EncodingNLS.cs
- bidPrivateBase.cs
- UrlPropertyAttribute.cs
- TreeIterator.cs
- SecurityTokenSerializer.cs
- FolderLevelBuildProviderAppliesToAttribute.cs
- AssemblyBuilder.cs
- bidPrivateBase.cs
- SingleConverter.cs
- TableLayoutSettingsTypeConverter.cs
- DataAdapter.cs
- StructureChangedEventArgs.cs
- SharedDp.cs
- ChannelManagerBase.cs
- SHA1.cs
- HuffModule.cs
- DbConnectionFactory.cs
- WindowsListViewScroll.cs
- FilterQueryOptionExpression.cs
- XmlStreamStore.cs
- CodeTypeDelegate.cs
- MarkerProperties.cs
- ProfileService.cs
- SamlAuthorizationDecisionClaimResource.cs
- StrongNameMembershipCondition.cs
- DbgCompiler.cs
- DoubleUtil.cs
- EventNotify.cs
- AsyncCompletedEventArgs.cs
- CaseInsensitiveOrdinalStringComparer.cs
- UnsafeNativeMethods.cs
- TaskHelper.cs
- SqlDataSourceAdvancedOptionsForm.cs
- DataServiceQuery.cs
- Gdiplus.cs
- SqlErrorCollection.cs
- CollectionDataContract.cs
- RelatedEnd.cs
- CompositeDuplexElement.cs
- MasterPage.cs
- FullTextBreakpoint.cs
- WsatConfiguration.cs