Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / MIT / System / Web / UI / MobileControls / Design / Converters / FormConverter.cs / 1305376 / FormConverter.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.UI.Design.MobileControls.Converters
{
using System.Diagnostics;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Web.UI;
using System.Web.UI.MobileControls;
using System.Web.UI.Design.MobileControls.Adapters;
///
///
/// Can filter and retrieve several types of values from Style controls.
///
///
[
System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand,
Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)
]
[Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")]
internal class FormConverter : StringConverter
{
private Form GetContainingForm(MobileControl mc)
{
return FindContainer(mc, typeof(Form)) as Form;
}
private StyleSheet GetContainingStyleSheet(MobileControl mc)
{
return FindContainer(mc, typeof(StyleSheet)) as StyleSheet;
}
private Control FindContainer(MobileControl mc, Type containerType)
{
for (Control control = mc; control != null; control = control.Parent)
{
if (containerType.IsAssignableFrom(control.GetType()))
{
return control;
}
}
return null;
}
protected virtual ArrayList GetControls(ITypeDescriptorContext context)
{
ArrayList controlList = new ArrayList();
MobileControl control = null;
IContainer container = context.Container;
if (context.Instance is Array)
{
Array list = (Array)context.Instance;
Debug.Assert(list.Length > 0);
foreach(Object obj in list)
{
Debug.Assert(obj is MobileControl);
Form form = GetContainingForm((MobileControl)obj);
// If the control is not within a Form control or a StyleSheet control,
// simply return the empty combobox.
// If the control is placed at UserControl top level, the ID of the
// containing Form is null.
if ((form == null || form.ID == null) &&
GetContainingStyleSheet((MobileControl)obj) == null)
{
return null;
}
}
control = list.GetValue(0) as MobileControl;
}
else
{
if (context.Instance is MobileControl)
{
control = (MobileControl) context.Instance;
}
else if (context.Instance is ChoicePropertyFilter)
{
ChoicePropertyFilter filter = (ChoicePropertyFilter)context.Instance;
IDeviceSpecificDesigner designer = filter.Designer;
control = designer.UnderlyingObject as MobileControl;
Debug.Assert(control != null, "Not a control");
}
else
{
Debug.Fail("Unrecognized object passed in");
return null;
}
Form form = GetContainingForm(control);
// All controls must be contained within Forms or StyleSheets
// Show empty combobox for the invalid control.
if (form == null)
{
if (GetContainingStyleSheet(control) == null)
{
return null;
}
}
// MobileUserControl has a default Form with null ID
else if (form.ID == null && (GetContainingStyleSheet(control) == null))
{
Debug.Assert(container is IDesignerHost &&
((IDesignerHost)container).RootComponent is MobileUserControl);
// Just return an empty array list, so that url picker still works.
return controlList;
}
}
// If container is null, try to get one from control's IContainer
if (container == null)
{
ISite site = control.Site;
Debug.Assert(site != null);
container = site.Container;
}
// Is this possible?
if (container == null)
{
Debug.Fail("container is null");
return null;
}
foreach(IComponent component in container.Components)
{
Form candidate = component as Form;
if (candidate != null &&
candidate.ID != null &&
candidate.ID.Length != 0)
{
controlList.Add(ProcessControlId(candidate.ID));
}
}
controlList.Sort();
return controlList;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
if (context == null)
{
return null;
}
ArrayList objValues = GetControls(context);
return (objValues != null? new StandardValuesCollection(objValues) : null);
}
///
///
/// Gets whether
/// or not the context specified contains exclusive standard values.
///
///
///
/// A type descriptor that indicates the context to convert from.
///
///
///
/// if the specified context contains exclusive standard
/// values, otherwise .
///
///
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return false;
}
///
///
/// Gets whether or not the specified context contains supported standard
/// values.
///
///
///
/// A type descriptor that indicates the context to convert from.
///
///
///
/// if the specified context conatins supported standard
/// values, otherwise .
///
///
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
///
/// Override to manipulate the control id as it is added to the list.
/// Do not return the original string, make sure a copy is made.
/// See NavigateUrlConverter.cs for an example.
///
protected virtual String ProcessControlId(String id)
{
return id;
}
}
}
// 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
- Codec.cs
- ToolStripPanel.cs
- PathFigureCollection.cs
- ToolboxComponentsCreatingEventArgs.cs
- ValueChangedEventManager.cs
- CroppedBitmap.cs
- AuthenticationServiceManager.cs
- COSERVERINFO.cs
- WebPartMovingEventArgs.cs
- OleDbError.cs
- AmbientValueAttribute.cs
- QueuePropertyVariants.cs
- HttpContext.cs
- SessionState.cs
- DataRowView.cs
- EnumerableValidator.cs
- UserControl.cs
- Util.cs
- TypedReference.cs
- FileDialogCustomPlacesCollection.cs
- PtsHost.cs
- XPathItem.cs
- RunInstallerAttribute.cs
- XmlSchemaParticle.cs
- SplineQuaternionKeyFrame.cs
- LongValidator.cs
- ScriptDescriptor.cs
- Environment.cs
- Brush.cs
- CreateRefExpr.cs
- VisualTarget.cs
- TextElement.cs
- ReadOnlyDataSource.cs
- Dictionary.cs
- LinkedList.cs
- FieldBuilder.cs
- RequestCacheManager.cs
- DataSourceCacheDurationConverter.cs
- ServiceOperationParameter.cs
- X509Utils.cs
- Message.cs
- PositiveTimeSpanValidator.cs
- AutomationElement.cs
- XmlSerializableServices.cs
- EventData.cs
- PlaceHolder.cs
- SystemIPv4InterfaceProperties.cs
- TraceLevelStore.cs
- WebScriptClientGenerator.cs
- InstanceHandleReference.cs
- CategoryAttribute.cs
- UnsignedPublishLicense.cs
- FontConverter.cs
- RangeValidator.cs
- AppDomainGrammarProxy.cs
- MatrixValueSerializer.cs
- TextSegment.cs
- ResourceIDHelper.cs
- VisualTreeUtils.cs
- AnimationStorage.cs
- Dynamic.cs
- ManagementEventArgs.cs
- ListViewItem.cs
- MonthChangedEventArgs.cs
- LoginDesignerUtil.cs
- PageCopyCount.cs
- ListDictionaryInternal.cs
- EntityClassGenerator.cs
- ConnectionStringsSection.cs
- SecureConversationServiceElement.cs
- TextSchema.cs
- Processor.cs
- WebEventCodes.cs
- MenuItemBindingCollection.cs
- IPPacketInformation.cs
- TableFieldsEditor.cs
- BitmapCodecInfoInternal.cs
- Drawing.cs
- FramingDecoders.cs
- DynamicResourceExtension.cs
- ModulesEntry.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- KeyNotFoundException.cs
- NumberFunctions.cs
- ApplicationActivator.cs
- FontSource.cs
- CodeTypeOfExpression.cs
- VectorValueSerializer.cs
- InputLanguageCollection.cs
- DefaultExpressionVisitor.cs
- HtmlProps.cs
- Mapping.cs
- WebPartConnectionsEventArgs.cs
- TimeStampChecker.cs
- TrackPointCollection.cs
- SqlDependency.cs
- TypeSystemProvider.cs
- DateTimeFormatInfoScanner.cs
- RecognizerBase.cs
- MouseGestureValueSerializer.cs