Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / WinForms / System / WinForms / Design / Behavior / ToolStripPanelSelectionGlyph.cs / 1 / ToolStripPanelSelectionGlyph.cs
namespace System.Windows.Forms.Design.Behavior {
using System;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Design;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms.Design;
using System.Windows.Forms;
///
///
///
internal sealed class ToolStripPanelSelectionGlyph : ControlBodyGlyph {
private ToolStripPanel relatedPanel;
private Rectangle glyphBounds;
private IServiceProvider provider;
private ToolStripPanelSelectionBehavior relatedBehavior;
private Image image = null;
private Control baseParent = null;
private BehaviorService behaviorService;
private bool isExpanded = false;
private const int imageWidth = 50;
private const int imageHeight = 6;
///
///
///
internal ToolStripPanelSelectionGlyph(Rectangle bounds, Cursor cursor, IComponent relatedComponent, IServiceProvider provider, ToolStripPanelSelectionBehavior behavior) : base(bounds, cursor, relatedComponent, behavior) {
relatedBehavior = behavior;
this.provider = provider;
this.relatedPanel = relatedComponent as ToolStripPanel;
this.behaviorService = (BehaviorService)provider.GetService(typeof(BehaviorService));
if (behaviorService == null) {
Debug.Fail("Could not get the BehaviorService");
return;
}
IDesignerHost host = (IDesignerHost)provider.GetService(typeof(IDesignerHost));
if (host == null) {
Debug.Fail("Could not get the DesignerHost");
return;
}
UpdateGlyph();
}
public bool IsExpanded
{
get
{
return isExpanded;
}
set
{
if (value != isExpanded)
{
isExpanded = value;
UpdateGlyph();
}
}
}
public void UpdateGlyph()
{
if (behaviorService != null)
{
Rectangle translatedBounds = behaviorService.ControlRectInAdornerWindow(relatedPanel);
//Reset the glyph.
this.glyphBounds = Rectangle.Empty;
// Refresh the parent
ToolStripContainer parent = relatedPanel.Parent as ToolStripContainer;
if (parent != null)
{
this.baseParent = parent.Parent; // get the control to which ToolStripContainer is added...
}
if (!isExpanded)
{
CollapseGlyph(translatedBounds);
}
else
{
ExpandGlyph(translatedBounds);
}
}
}
private void CollapseGlyph(Rectangle bounds)
{
DockStyle dock = relatedPanel.Dock;
int x = 0;
int y = 0;
switch(dock)
{
case DockStyle.Top :
this.image = new Bitmap(typeof(ToolStripPanelSelectionGlyph), "topopen.bmp");
x = (bounds.Width - imageWidth) /2;
if (x > 0)
{
this.glyphBounds = new Rectangle(bounds.X + x, bounds.Y + bounds.Height, imageWidth, imageHeight);
}
break;
case DockStyle.Bottom :
this.image = new Bitmap(typeof(ToolStripPanelSelectionGlyph), "bottomopen.bmp");
x = (bounds.Width - imageWidth) /2;
if (x > 0)
{
this.glyphBounds = new Rectangle(bounds.X + x, bounds.Y - imageHeight, imageWidth, imageHeight);
}
break;
case DockStyle.Left :
this.image = new Bitmap(typeof(ToolStripPanelSelectionGlyph), "leftopen.bmp");
y = (bounds.Height - imageWidth) /2;
if (y > 0)
{
this.glyphBounds = new Rectangle(bounds.X + bounds.Width, bounds.Y + y, imageHeight, imageWidth);
}
break;
case DockStyle.Right :
this.image = new Bitmap(typeof(ToolStripPanelSelectionGlyph), "rightopen.bmp");
y = (bounds.Height - imageWidth) /2;
if (y > 0)
{
this.glyphBounds = new Rectangle(bounds.X - imageHeight , bounds.Y + y, imageHeight, imageWidth);
}
break;
default:
throw new Exception(SR.GetString(SR.ToolStripPanelGlyphUnsupportedDock));
}
}
private void ExpandGlyph(Rectangle bounds)
{
DockStyle dock = relatedPanel.Dock;
int x = 0;
int y = 0;
switch(dock)
{
case DockStyle.Top :
this.image = new Bitmap(typeof(ToolStripPanelSelectionGlyph), "topclose.bmp");
x = (bounds.Width - imageWidth) /2;
if (x > 0)
{
this.glyphBounds = new Rectangle(bounds.X + x, bounds.Y + bounds.Height, imageWidth, imageHeight);
}
break;
case DockStyle.Bottom :
this.image = new Bitmap(typeof(ToolStripPanelSelectionGlyph), "bottomclose.bmp");
x = (bounds.Width - imageWidth) /2;
if (x > 0)
{
this.glyphBounds = new Rectangle(bounds.X + x, bounds.Y -imageHeight, imageWidth, imageHeight);
}
break;
case DockStyle.Left :
this.image = new Bitmap(typeof(ToolStripPanelSelectionGlyph), "leftclose.bmp");
y = (bounds.Height - imageWidth) /2;
if (y > 0)
{
this.glyphBounds = new Rectangle(bounds.X + bounds.Width, bounds.Y + y, imageHeight, imageWidth);
}
break;
case DockStyle.Right :
this.image = new Bitmap(typeof(ToolStripPanelSelectionGlyph), "rightclose.bmp");
y = (bounds.Height - imageWidth) /2;
if (y > 0)
{
this.glyphBounds = new Rectangle(bounds.X - imageHeight, bounds.Y + y, imageHeight, imageWidth);
}
break;
default:
throw new Exception(SR.GetString(SR.ToolStripPanelGlyphUnsupportedDock));
}
}
///
///
/// The bounds of this Glyph.
///
public override Rectangle Bounds {
get {
return glyphBounds;
}
}
///
///
/// Simple hit test rule: if the point is contained within the bounds
/// - then it is a positive hit test.
///
public override Cursor GetHitTest(Point p) {
if (behaviorService != null && baseParent != null)
{
Rectangle baseParentBounds = behaviorService.ControlRectInAdornerWindow(baseParent);
if (glyphBounds != Rectangle.Empty && baseParentBounds.Contains(glyphBounds) && glyphBounds.Contains(p)) {
return Cursors.Hand;
}
}
return null;
}
///
///
/// Very simple paint logic.
///
public override void Paint(PaintEventArgs pe) {
if (behaviorService != null && baseParent != null)
{
Rectangle baseParentBounds = behaviorService.ControlRectInAdornerWindow(baseParent);
if (relatedPanel.Visible && image != null && glyphBounds != Rectangle.Empty && baseParentBounds.Contains(glyphBounds)) {
pe.Graphics.DrawImage(image, glyphBounds.Left, glyphBounds.Top);
}
}
}
}
}
// 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
- CodePageUtils.cs
- HwndStylusInputProvider.cs
- ThreadExceptionEvent.cs
- HtmlProps.cs
- Tracking.cs
- FormsAuthenticationTicket.cs
- ScrollChrome.cs
- RecognizeCompletedEventArgs.cs
- ArithmeticException.cs
- CoTaskMemHandle.cs
- SystemIPv6InterfaceProperties.cs
- MediaElement.cs
- PersonalizationState.cs
- DeploymentSection.cs
- WindowsListViewItemStartMenu.cs
- Label.cs
- Timer.cs
- ProxyManager.cs
- MethodBuilder.cs
- cache.cs
- Flattener.cs
- PrivateFontCollection.cs
- CodeAccessPermission.cs
- DbBuffer.cs
- CalloutQueueItem.cs
- ResolveNameEventArgs.cs
- ClassHandlersStore.cs
- CompletionProxy.cs
- TypeSystemProvider.cs
- StatusBarDesigner.cs
- XPathPatternBuilder.cs
- MasterPageParser.cs
- RadioButton.cs
- FontDialog.cs
- formatter.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- DeploymentExceptionMapper.cs
- EventEntry.cs
- XmlDocument.cs
- CompressionTransform.cs
- RSACryptoServiceProvider.cs
- SectionXmlInfo.cs
- Attributes.cs
- DataGridViewColumnConverter.cs
- MessageHeaderException.cs
- TextBox.cs
- xmlglyphRunInfo.cs
- SqlGatherConsumedAliases.cs
- hresults.cs
- XmlEnumAttribute.cs
- InputProviderSite.cs
- MonthChangedEventArgs.cs
- CodeDomConfigurationHandler.cs
- ProxyAttribute.cs
- HttpListenerPrefixCollection.cs
- StackOverflowException.cs
- PingOptions.cs
- URLIdentityPermission.cs
- NonSerializedAttribute.cs
- DataGridParentRows.cs
- ComplexTypeEmitter.cs
- Positioning.cs
- AuthorizationSection.cs
- KeysConverter.cs
- DataGridViewRowPrePaintEventArgs.cs
- RequestCachePolicyConverter.cs
- FileBasedResourceGroveler.cs
- CustomWebEventKey.cs
- SqlNodeTypeOperators.cs
- FormViewUpdateEventArgs.cs
- HttpWriter.cs
- EdmItemError.cs
- ProtectedConfigurationSection.cs
- GotoExpression.cs
- HttpClientCertificate.cs
- DataGridViewColumnTypePicker.cs
- PersonalizationDictionary.cs
- Roles.cs
- SafeFindHandle.cs
- TypeDescriptor.cs
- SqlUdtInfo.cs
- DependencyPropertyAttribute.cs
- BindingUtils.cs
- PathGeometry.cs
- SchemaCollectionPreprocessor.cs
- ScriptManagerProxy.cs
- TableCellCollection.cs
- DesignerForm.cs
- EntityModelSchemaGenerator.cs
- ServiceModelSecurityTokenRequirement.cs
- IPEndPoint.cs
- TextEffect.cs
- FormatterServices.cs
- TransformGroup.cs
- RijndaelManagedTransform.cs
- MarkupExtensionReturnTypeAttribute.cs
- GenericArgumentsUpdater.cs
- StreamWithDictionary.cs
- CodeParameterDeclarationExpressionCollection.cs
- TextDecorationCollection.cs