Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / WinForms / Managed / System / WinForms / ToolStripRendererSwitcher.cs / 1305376 / ToolStripRendererSwitcher.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms {
using System;
using System.Drawing;
using System.Collections.Specialized;
using System.ComponentModel;
// this class encapsulates the logic for Renderer and RenderMode so it can
// be shared across classes.
internal class ToolStripRendererSwitcher {
private static readonly int stateUseDefaultRenderer = BitVector32.CreateMask();
private static readonly int stateAttachedRendererChanged = BitVector32.CreateMask(stateUseDefaultRenderer);
private ToolStripRenderer renderer = null;
private Type currentRendererType = typeof(System.Type);
private BitVector32 state = new BitVector32();
private ToolStripRenderMode defaultRenderMode = ToolStripRenderMode.ManagerRenderMode;
public ToolStripRendererSwitcher(Control owner, ToolStripRenderMode defaultRenderMode) : this(owner) {
this.defaultRenderMode = defaultRenderMode;
this.RenderMode = defaultRenderMode;
}
public ToolStripRendererSwitcher(Control owner) {
state[stateUseDefaultRenderer] = true;
state[stateAttachedRendererChanged] = false;
owner.Disposed += new EventHandler(OnControlDisposed);
owner.VisibleChanged += new EventHandler(OnControlVisibleChanged);
if (owner.Visible) {
OnControlVisibleChanged(owner, EventArgs.Empty);
}
}
public ToolStripRenderer Renderer {
get {
if (RenderMode == ToolStripRenderMode.ManagerRenderMode) {
return ToolStripManager.Renderer;
}
// always return a valid renderer so our paint code
// doesn't have to be bogged down by checks for null.
state[stateUseDefaultRenderer] = false;
if (renderer == null) {
Renderer = ToolStripManager.CreateRenderer(RenderMode);
}
return renderer;
}
set {
// if the value happens to be null, the next get
// will autogenerate a new ToolStripRenderer.
if (renderer != value) {
state[stateUseDefaultRenderer] = (value == null);
renderer = value;
currentRendererType = (renderer != null) ? renderer.GetType() : typeof(System.Type);
OnRendererChanged(EventArgs.Empty);
}
}
}
public ToolStripRenderMode RenderMode {
get {
if (state[stateUseDefaultRenderer]) {
return ToolStripRenderMode.ManagerRenderMode;
}
if (renderer != null && !renderer.IsAutoGenerated) {
return ToolStripRenderMode.Custom;
}
// check the type of the currently set renderer.
// types are cached as this may be called frequently.
if (currentRendererType == ToolStripManager.ProfessionalRendererType) {
return ToolStripRenderMode.Professional;
}
if (currentRendererType == ToolStripManager.SystemRendererType) {
return ToolStripRenderMode.System;
}
return ToolStripRenderMode.Custom;
}
set {
//valid values are 0x0 to 0x3
if (!ClientUtils.IsEnumValid(value, (int)value, (int)ToolStripRenderMode.Custom, (int)ToolStripRenderMode.ManagerRenderMode))
{
throw new InvalidEnumArgumentException("value", (int)value, typeof(ToolStripRenderMode));
}
if (value == ToolStripRenderMode.Custom) {
throw new NotSupportedException(SR.GetString(SR.ToolStripRenderModeUseRendererPropertyInstead));
}
if (value == ToolStripRenderMode.ManagerRenderMode) {
if (!state[stateUseDefaultRenderer] ) {
state[stateUseDefaultRenderer] = true;
OnRendererChanged(EventArgs.Empty);
}
}
else {
state[stateUseDefaultRenderer] = false;
Renderer = ToolStripManager.CreateRenderer(value);
}
}
}
public event EventHandler RendererChanged;
private void OnRendererChanged(EventArgs e) {
if (this.RendererChanged != null) {
this.RendererChanged(this, e);
}
}
private void OnDefaultRendererChanged(object sender, EventArgs e) {
if (state[stateUseDefaultRenderer]) {
OnRendererChanged(e);
}
}
private void OnControlDisposed(object sender, EventArgs e) {
if (state[stateAttachedRendererChanged]) {
ToolStripManager.RendererChanged -= new EventHandler(OnDefaultRendererChanged);
state[stateAttachedRendererChanged] = false;
}
}
private void OnControlVisibleChanged(object sender, EventArgs e) {
Control control = sender as Control;
if (control != null) {
if (control.Visible) {
if (!state[stateAttachedRendererChanged]) {
ToolStripManager.RendererChanged += new EventHandler(OnDefaultRendererChanged);
state[stateAttachedRendererChanged] = true;
}
}
else {
if (state[stateAttachedRendererChanged]) {
ToolStripManager.RendererChanged -= new EventHandler(OnDefaultRendererChanged);
state[stateAttachedRendererChanged] = false;
}
}
}
}
public bool ShouldSerializeRenderMode() {
// We should NEVER serialize custom.
return (RenderMode != defaultRenderMode && RenderMode != ToolStripRenderMode.Custom);
}
public void ResetRenderMode() {
this.RenderMode = defaultRenderMode;
}
}
}
// 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
- XmlSchemaInferenceException.cs
- EntityDataSourceEntityTypeFilterItem.cs
- TypedElement.cs
- SuppressIldasmAttribute.cs
- MemberAccessException.cs
- FieldNameLookup.cs
- TreeBuilder.cs
- SelfSignedCertificate.cs
- PointHitTestParameters.cs
- TextAdaptor.cs
- ArraySet.cs
- Double.cs
- ControlAdapter.cs
- SqlCrossApplyToCrossJoin.cs
- KoreanCalendar.cs
- QuaternionRotation3D.cs
- SkinBuilder.cs
- assertwrapper.cs
- WebControlsSection.cs
- InertiaTranslationBehavior.cs
- ErrorFormatterPage.cs
- XmlQueryType.cs
- References.cs
- PageContent.cs
- CodeGeneratorOptions.cs
- MenuItemStyle.cs
- XmlToDatasetMap.cs
- TransactionFlowElement.cs
- ToolStripControlHost.cs
- AutomationPatternInfo.cs
- RtfToXamlLexer.cs
- FileDialog.cs
- Int32AnimationUsingKeyFrames.cs
- FileChangesMonitor.cs
- WeakReadOnlyCollection.cs
- SoapAttributeAttribute.cs
- Util.cs
- TransformationRules.cs
- ControlDesignerState.cs
- HttpModulesInstallComponent.cs
- OAVariantLib.cs
- _IPv4Address.cs
- DeclarativeCatalogPart.cs
- Authorization.cs
- DataGridViewComboBoxColumn.cs
- HyperLinkDesigner.cs
- CqlIdentifiers.cs
- WebPartMinimizeVerb.cs
- QueryResponse.cs
- DesignerHost.cs
- CompileLiteralTextParser.cs
- ApplicationInterop.cs
- ForeignKeyConstraint.cs
- DBProviderConfigurationHandler.cs
- XmlSigningNodeWriter.cs
- Mapping.cs
- SplineQuaternionKeyFrame.cs
- XmlText.cs
- MergeFailedEvent.cs
- DSASignatureDeformatter.cs
- DataGridViewDataConnection.cs
- BevelBitmapEffect.cs
- InternalConfigRoot.cs
- SortDescriptionCollection.cs
- AppearanceEditorPart.cs
- Border.cs
- LocationChangedEventArgs.cs
- ListBox.cs
- DataList.cs
- XmlUtilWriter.cs
- BitmapDownload.cs
- PeerApplicationLaunchInfo.cs
- BitmapEffectDrawingContent.cs
- MessageQueueCriteria.cs
- AlphabeticalEnumConverter.cs
- ProfileGroupSettings.cs
- PolicyStatement.cs
- XmlSchemaCollection.cs
- StringUtil.cs
- TabletDevice.cs
- DiscoveryReferences.cs
- SmiEventSink_DeferedProcessing.cs
- Grid.cs
- StylusButtonEventArgs.cs
- BitmapMetadataBlob.cs
- HtmlInputSubmit.cs
- DBCommandBuilder.cs
- AssertFilter.cs
- ThreadInterruptedException.cs
- QueryContinueDragEventArgs.cs
- WindowsTokenRoleProvider.cs
- _ListenerResponseStream.cs
- HandlerFactoryWrapper.cs
- ExpressionBindings.cs
- ToolStripItemEventArgs.cs
- ThrowHelper.cs
- pingexception.cs
- XmlSchemaParticle.cs
- TreeViewItemAutomationPeer.cs
- PropertySegmentSerializer.cs