Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / WinForms / System / WinForms / Design / BaseContextMenu.cs / 1 / BaseContextMenu.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
*/
namespace System.Windows.Forms.Design
{
using System.Design;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Diagnostics;
using System;
using System.Security;
using System.Security.Permissions;
using System.Collections;
using System.ComponentModel.Design;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Design;
using System.Windows.Forms.Design;
using System.Windows.Forms.Design.Behavior;
///
/// This class is going to replace the shell contextMenu and uses the ContextMenuStrip.
/// The ContextMenuStrip contains groups and groupOrder which it uses to add items to itself.
/// ControlDesigners can add custom items to the contextMenu, using the new member to the
/// group and add the groupOrder to the ContextMenu.
///
internal class BaseContextMenuStrip : GroupedContextMenuStrip
{
private IServiceProvider serviceProvider;
private Component component;
private ToolStripMenuItem selectionMenuItem;
///
/// Constructor.
///
public BaseContextMenuStrip(IServiceProvider provider, Component component)
: base()
{
this.serviceProvider = provider;
this.component = component;
// Now initialiaze the contextMenu
InitializeContextMenu();
}
///
/// Helper function to add the "View Code" menuItem.
///
private void AddCodeMenuItem()
{
StandardCommandToolStripMenuItem codeMenuItem = new StandardCommandToolStripMenuItem(StandardCommands.ViewCode, SR.GetString(SR.ContextMenuViewCode), "viewcode", serviceProvider);
this.Groups[StandardGroups.Code].Items.Add(codeMenuItem);
}
///
/// Helper function to add the "SendToBack/BringToFront" menuItem.
///
private void AddZorderMenuItem()
{
StandardCommandToolStripMenuItem ZOrderMenuItem = new StandardCommandToolStripMenuItem(MenuCommands.BringToFront, SR.GetString(SR.ContextMenuBringToFront), "bringToFront", serviceProvider);
this.Groups[StandardGroups.ZORder].Items.Add(ZOrderMenuItem);
ZOrderMenuItem = new StandardCommandToolStripMenuItem(MenuCommands.SendToBack, SR.GetString(SR.ContextMenuSendToBack), "sendToBack", serviceProvider);
this.Groups[StandardGroups.ZORder].Items.Add(ZOrderMenuItem);
}
///
/// Helper function to add the "Alignment" menuItem.
///
private void AddGridMenuItem()
{
StandardCommandToolStripMenuItem gridMenuItem = new StandardCommandToolStripMenuItem(MenuCommands.AlignToGrid, SR.GetString(SR.ContextMenuAlignToGrid), "alignToGrid", serviceProvider);
this.Groups[StandardGroups.Grid].Items.Add(gridMenuItem);
}
///
/// Helper function to add the "Locked" menuItem.
///
private void AddLockMenuItem()
{
StandardCommandToolStripMenuItem lockMenuItem = new StandardCommandToolStripMenuItem(MenuCommands.LockControls, SR.GetString(SR.ContextMenuLockControls), "lockControls", serviceProvider);
this.Groups[StandardGroups.Lock].Items.Add(lockMenuItem);
}
///
/// Helper function to add the Select Parent menuItem.
///
private void RefreshSelectionMenuItem()
{
int index = -1;
if (selectionMenuItem != null)
{
index = this.Items.IndexOf(selectionMenuItem);
this.Groups[StandardGroups.Selection].Items.Remove(selectionMenuItem);
this.Items.Remove(selectionMenuItem);
}
ArrayList parentControls = new ArrayList();
int nParentControls = 0;
//
// Get the currently selected Control
ISelectionService selectionService = serviceProvider.GetService(typeof(ISelectionService)) as ISelectionService;
IDesignerHost host = serviceProvider.GetService(typeof(IDesignerHost)) as IDesignerHost;
if (selectionService != null && host != null)
{
IComponent root = host.RootComponent;
Debug.Assert(root != null, "Null root component. Will be unable to build selection menu");
Control selectedControl = selectionService.PrimarySelection as Control;
if (selectedControl != null && root != null && selectedControl != root)
{
Control parentControl = selectedControl.Parent;
while (parentControl != null)
{
if (parentControl.Site != null)
{
parentControls.Add(parentControl);
nParentControls++;
}
if (parentControl == root)
{
break;
}
parentControl = parentControl.Parent;
}
}
else if (selectionService.PrimarySelection is ToolStripItem)
{
ToolStripItem selectedItem = selectionService.PrimarySelection as ToolStripItem;
ToolStripItemDesigner itemDesigner = host.GetDesigner(selectedItem) as ToolStripItemDesigner;
if (itemDesigner != null)
{
parentControls = itemDesigner.AddParentTree();
nParentControls = parentControls.Count;
}
}
}
if (nParentControls > 0)
{
selectionMenuItem = new ToolStripMenuItem();
IUIService uis = serviceProvider.GetService(typeof(IUIService)) as IUIService;
if (uis != null) {
selectionMenuItem.DropDown.Renderer = (ToolStripProfessionalRenderer)uis.Styles["VsRenderer"];
//Set the right Font
selectionMenuItem.DropDown.Font = (Font)uis.Styles["DialogFont"];
}
selectionMenuItem.Text = SR.GetString(SR.ContextMenuSelect);
foreach (Component parent in parentControls)
{
ToolStripMenuItem selectListItem = new SelectToolStripMenuItem(parent, serviceProvider);
selectionMenuItem.DropDownItems.Add(selectListItem);
}
this.Groups[StandardGroups.Selection].Items.Add(selectionMenuItem);
// Re add the newly refreshed item..
if (index != -1)
{
this.Items.Insert(index, selectionMenuItem);
}
}
}
///
/// Helper function to add the Verbs.
///
private void AddVerbMenuItem()
{
//Add Designer Verbs..
IMenuCommandService menuCommandService = (IMenuCommandService)serviceProvider.GetService(typeof(IMenuCommandService));
if (menuCommandService != null)
{
DesignerVerbCollection verbCollection = menuCommandService.Verbs;
foreach (DesignerVerb verb in verbCollection)
{
DesignerVerbToolStripMenuItem verbItem = new DesignerVerbToolStripMenuItem(verb);
this.Groups[StandardGroups.Verbs].Items.Add(verbItem);
}
}
}
///
/// Helper function to add the "Cut/Copy/Paste/Delete" menuItem.
///
private void AddEditMenuItem()
{
StandardCommandToolStripMenuItem stdMenuItem = new StandardCommandToolStripMenuItem(StandardCommands.Cut, SR.GetString(SR.ContextMenuCut), "cut", serviceProvider);
this.Groups[StandardGroups.Edit].Items.Add(stdMenuItem);
stdMenuItem = new StandardCommandToolStripMenuItem(StandardCommands.Copy, SR.GetString(SR.ContextMenuCopy), "copy", serviceProvider);
this.Groups[StandardGroups.Edit].Items.Add(stdMenuItem);
stdMenuItem = new StandardCommandToolStripMenuItem(StandardCommands.Paste, SR.GetString(SR.ContextMenuPaste), "paste", serviceProvider);
this.Groups[StandardGroups.Edit].Items.Add(stdMenuItem);
stdMenuItem = new StandardCommandToolStripMenuItem(StandardCommands.Delete, SR.GetString(SR.ContextMenuDelete), "delete", serviceProvider);
this.Groups[StandardGroups.Edit].Items.Add(stdMenuItem);
}
///
/// Helper function to add the "Properties" menuItem.
///
private void AddPropertiesMenuItem()
{
StandardCommandToolStripMenuItem stdMenuItem = new StandardCommandToolStripMenuItem(StandardCommands.DocumentOutline, SR.GetString(SR.ContextMenuDocumentOutline), "", serviceProvider);
this.Groups[StandardGroups.Properties].Items.Add(stdMenuItem);
stdMenuItem = new StandardCommandToolStripMenuItem(MenuCommands.DesignerProperties, SR.GetString(SR.ContextMenuProperties), "properties", serviceProvider);
this.Groups[StandardGroups.Properties].Items.Add(stdMenuItem);
}
///
/// Basic Initialize method.
///
private void InitializeContextMenu()
{
//this.Opening += new CancelEventHandler(OnContextMenuOpening);
this.Name = "designerContextMenuStrip";
IUIService uis = serviceProvider.GetService(typeof(IUIService)) as IUIService;
if (uis != null) {
this.Renderer = (ToolStripProfessionalRenderer)uis.Styles["VsRenderer"];
}
GroupOrdering.AddRange(new string[] { StandardGroups.Code,
StandardGroups.ZORder,
StandardGroups.Grid,
StandardGroups.Lock,
StandardGroups.Verbs,
StandardGroups.Custom,
StandardGroups.Selection,
StandardGroups.Edit,
StandardGroups.Properties});
// ADD MENUITEMS
AddCodeMenuItem();
AddZorderMenuItem();
AddGridMenuItem();
AddLockMenuItem();
AddVerbMenuItem();
RefreshSelectionMenuItem();
AddEditMenuItem();
AddPropertiesMenuItem();
}
///
/// Public function that allows the individual MenuItems to get refreshed each time the ContextMenu is opened.
///
public override void RefreshItems()
{
//Set the right Font
IUIService uis = serviceProvider.GetService(typeof(IUIService)) as IUIService;
if (uis != null) {
this.Font = (Font)uis.Styles["DialogFont"];
}
foreach (ToolStripItem item in this.Items)
{
StandardCommandToolStripMenuItem stdItem = item as StandardCommandToolStripMenuItem;
if (stdItem != null)
{
stdItem.RefreshItem();
}
}
RefreshSelectionMenuItem();
}
///
/// A ToolStripMenuItem that gets added for the "Select" menuitem.
///
private class SelectToolStripMenuItem : ToolStripMenuItem
{
private Component comp;
private IServiceProvider serviceProvider;
private Type _itemType;
private bool _cachedImage = false;
private Image _image = null;
private static string systemWindowsFormsNamespace = typeof(System.Windows.Forms.ToolStripItem).Namespace;
public SelectToolStripMenuItem(Component c, IServiceProvider provider)
{
comp = c;
serviceProvider = provider;
// Get NestedSiteName...
string compName = null;
if (comp != null)
{
ISite site = comp.Site;
if (site != null)
{
INestedSite nestedSite = site as INestedSite;
if (nestedSite != null && !string.IsNullOrEmpty(nestedSite.FullName))
{
compName = nestedSite.FullName;
}
else if (!string.IsNullOrEmpty(site.Name))
{
compName = site.Name;
}
}
}
this.Text = SR.GetString(SR.ToolStripSelectMenuItem, compName);
this._itemType = c.GetType();
}
public override Image Image
{
get
{
// Defer loading the image until we're sure we need it
if (!_cachedImage)
{
_cachedImage = true;
// give the toolbox item attribute the first shot
ToolboxItem tbxItem = ToolboxService.GetToolboxItem(_itemType);
if (tbxItem != null)
{
_image = tbxItem.Bitmap;
}
else
{
// else attempt to get the resource from a known place in the manifest
// if and only if the namespace of the type is System.Windows.Forms.
// else attempt to get the resource from a known place in the manifest
if (_itemType.Namespace == systemWindowsFormsNamespace)
{
_image = ToolboxBitmapAttribute.GetImageFromResource(_itemType, null, false);
}
}
// if all else fails, throw up a default image.
if (_image == null)
{
_image = ToolboxBitmapAttribute.GetImageFromResource(comp.GetType(), null, false);
}
}
return _image;
}
set
{
_image = value;
_cachedImage = true;
}
}
///
/// Items OnClick event, to select the Parent Control.
///
protected override void OnClick(System.EventArgs e)
{
ISelectionService selectionService = serviceProvider.GetService(typeof(ISelectionService)) as ISelectionService;
if (selectionService != null)
{
selectionService.SetSelectedComponents(new object[] { comp }, SelectionTypes.Replace);
}
}
}
}
}
// 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
- UserControl.cs
- CodeTryCatchFinallyStatement.cs
- listitem.cs
- FixedTextBuilder.cs
- SoapReflectionImporter.cs
- CorrelationInitializer.cs
- DataGridViewRowConverter.cs
- MaskedTextProvider.cs
- Trace.cs
- IndexedGlyphRun.cs
- TraceSection.cs
- MD5.cs
- ClaimTypeRequirement.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- ToolStripContentPanel.cs
- MessageQueuePermissionEntryCollection.cs
- XmlCDATASection.cs
- BinaryConverter.cs
- SQLDecimal.cs
- TextHintingModeValidation.cs
- Vector3DValueSerializer.cs
- CompilerTypeWithParams.cs
- CollectionType.cs
- LambdaCompiler.Generated.cs
- CubicEase.cs
- SessionIDManager.cs
- BaseCollection.cs
- DataGridViewIntLinkedList.cs
- IsolatedStorageFilePermission.cs
- UnSafeCharBuffer.cs
- IIS7WorkerRequest.cs
- AttachmentCollection.cs
- Deserializer.cs
- DataTrigger.cs
- OperationFormatStyle.cs
- FileReader.cs
- SelectedCellsCollection.cs
- ToolboxComponentsCreatedEventArgs.cs
- BamlLocalizableResource.cs
- Pen.cs
- HtmlTableRowCollection.cs
- XmlIterators.cs
- DoubleLinkList.cs
- WizardForm.cs
- DocumentGrid.cs
- BounceEase.cs
- CompensationHandlingFilter.cs
- IdentityNotMappedException.cs
- TransactionBehavior.cs
- ReceiveActivityValidator.cs
- TreeNodeCollectionEditorDialog.cs
- SelectionHighlightInfo.cs
- ManualResetEvent.cs
- MetadataCache.cs
- TableLayoutSettings.cs
- TextRenderer.cs
- RemoteArgument.cs
- Focus.cs
- AutoResetEvent.cs
- IndexedString.cs
- CaseExpr.cs
- SlotInfo.cs
- TemplateBamlTreeBuilder.cs
- ListSortDescription.cs
- sqlcontext.cs
- RuleSettings.cs
- SqlConnectionStringBuilder.cs
- HwndAppCommandInputProvider.cs
- SchemaCollectionPreprocessor.cs
- TextSelection.cs
- InternalControlCollection.cs
- Drawing.cs
- PointCollectionValueSerializer.cs
- MetaForeignKeyColumn.cs
- TreeWalker.cs
- KernelTypeValidation.cs
- BuildResult.cs
- RadioButtonStandardAdapter.cs
- StringUtil.cs
- SubtreeProcessor.cs
- SecurityDescriptor.cs
- DbCommandTree.cs
- DataRelation.cs
- ScrollChangedEventArgs.cs
- XhtmlConformanceSection.cs
- PathSegment.cs
- X509SecurityTokenProvider.cs
- ListViewEditEventArgs.cs
- SharedStatics.cs
- DtcInterfaces.cs
- SamlSubjectStatement.cs
- JoinElimination.cs
- SequentialUshortCollection.cs
- FixedSOMPage.cs
- Helper.cs
- Type.cs
- COM2IPerPropertyBrowsingHandler.cs
- TagPrefixAttribute.cs
- SwitchElementsCollection.cs
- EncoderFallback.cs