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
- CultureSpecificCharacterBufferRange.cs
- PrintPreviewDialog.cs
- LockCookie.cs
- XmlEnumAttribute.cs
- StickyNoteHelper.cs
- FunctionNode.cs
- WebBrowserEvent.cs
- XmlNodeChangedEventArgs.cs
- RowSpanVector.cs
- EventLogReader.cs
- DrawingVisualDrawingContext.cs
- ByteStack.cs
- XmlAutoDetectWriter.cs
- documentation.cs
- Rectangle.cs
- QilTargetType.cs
- BamlCollectionHolder.cs
- ProtocolsConfigurationEntry.cs
- EventLogEntry.cs
- Odbc32.cs
- LinkUtilities.cs
- CommandDevice.cs
- SectionXmlInfo.cs
- Thumb.cs
- KeyToListMap.cs
- _HeaderInfoTable.cs
- DesignerLoader.cs
- SettingsAttributeDictionary.cs
- CodeSnippetCompileUnit.cs
- sqlpipe.cs
- PropertyEmitter.cs
- BaseTreeIterator.cs
- GifBitmapDecoder.cs
- ConditionalExpression.cs
- DataGridViewSelectedRowCollection.cs
- CryptoApi.cs
- TransactionChannel.cs
- SerializationHelper.cs
- TextEndOfLine.cs
- DNS.cs
- Util.cs
- TableRow.cs
- EntryPointNotFoundException.cs
- CfgParser.cs
- LayoutTable.cs
- ApplicationException.cs
- SafeEventLogWriteHandle.cs
- BrowserDefinition.cs
- Msmq.cs
- TraceHandlerErrorFormatter.cs
- TraceContextRecord.cs
- Bezier.cs
- OracleConnectionString.cs
- EntityDataSourceSelectedEventArgs.cs
- EventProviderTraceListener.cs
- IgnoreDataMemberAttribute.cs
- PathSegment.cs
- FaultFormatter.cs
- EntityDataSourceContainerNameItem.cs
- HandledEventArgs.cs
- HttpRuntime.cs
- ScrollChangedEventArgs.cs
- HttpStreamMessage.cs
- ActiveDocumentEvent.cs
- DescendantQuery.cs
- RegisteredHiddenField.cs
- RIPEMD160Managed.cs
- ButtonFlatAdapter.cs
- TextTrailingCharacterEllipsis.cs
- ChangeNode.cs
- RegexWriter.cs
- DesignerProperties.cs
- VirtualPathData.cs
- VerbConverter.cs
- DbConnectionStringCommon.cs
- QilPatternVisitor.cs
- MaterialGroup.cs
- FormViewAutoFormat.cs
- SerializableAttribute.cs
- TextAdaptor.cs
- AttachmentService.cs
- TableHeaderCell.cs
- HtmlLabelAdapter.cs
- RenderDataDrawingContext.cs
- WorkingDirectoryEditor.cs
- ConversionContext.cs
- SynthesizerStateChangedEventArgs.cs
- MarkupExtensionParser.cs
- Rect3D.cs
- _Rfc2616CacheValidators.cs
- DistributedTransactionPermission.cs
- Triplet.cs
- ScrollViewer.cs
- LogicalCallContext.cs
- VersionedStream.cs
- NullableFloatMinMaxAggregationOperator.cs
- ErrorFormatterPage.cs
- Span.cs
- TraceSection.cs
- Component.cs