//--------------------------------------------------------------------------- #region ** implementation // create a menu item void CreateMenuItem(string hdr, ContextMenuCommands cmd) { // create item, attach event handler var mi = new MenuItem(); mi.Header = hdr; mi.Tag = cmd; mi.Click += menuItem_Click; // create image for this item var resName = string.Format("{0}_small.png", cmd.ToString()); var stream = GetResourceStream(resName); if (stream != null) { var bmp = new BitmapImage(); bmp.StreamSource = stream; var img = new Image(); img.Source = bmp; img.Stretch = Stretch.None; img.Margin = new Thickness(4, 0, 0, 0); mi.Icon = img; } // done Items.Add(mi); }
/// <summary> /// Get a <see cref="MenuItem"/> based on a command code. /// </summary> /// <param name="cmd"><see cref="ContextMenuCommands"/> that determines the item to be retrieved.</param> /// <returns><see cref="MenuItem"/> that matches the given <paramref name="cmd"/>.</returns> public MenuItem GetMenuItem(ContextMenuCommands cmd) { foreach (var item in this.Items) { var mi = item as MenuItem; if (mi != null && object.Equals(mi.Tag, cmd)) { return(mi); } } return(null); }
/// <summary> /// Initialization of the package; this method is called right after the package is sited, so this is the place /// where you can put all the initialization code that rely on services provided by VisualStudio. /// </summary> protected override void Initialize() { base.Initialize(); commandService = GetService(typeof(IMenuCommandService)) as OleMenuCommandService; ConfigCommand.Initialize(this); initializeCreatePackageCommand(); initializeClearCacheCommand(); initializePushPackageCommand(); initializeCreateNuspecCommand(); NuGetCommandLineCommand.Initialize(this); ContextMenuCommands.Initialize(this); ExtensionPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); }
/// <summary> /// Executes a context menu command. /// </summary> /// <param name="cmd"><see cref="ContextMenuCommands"/> that specifies which /// command should be executed.</param> public void ExecuteCommand(ContextMenuCommands cmd) { // save selection var sel = _grid.Selection; // execute command IUndoableAction action; switch (cmd) { case ContextMenuCommands.Cut: _grid.Copy(); _grid.ClearSelection(); break; case ContextMenuCommands.Copy: _grid.Copy(); break; case ContextMenuCommands.Paste: _grid.Paste(); break; case ContextMenuCommands.Clear: _grid.ClearSelection(); break; case ContextMenuCommands.InsertRows: if (sel.IsValid) { // to clone styles from row above (like Excel) var index = sel.TopRow > 0 ? sel.TopRow - 1 : sel.TopRow; var styleRow = _grid.Rows[index] as ExcelRow; action = new InsertDeleteRowAction(_grid); for (int i = 0; i < sel.RowSpan; i++) { _grid.Rows.Insert(sel.TopRow, new ExcelRow(styleRow)); } if (action.SaveNewState()) { _grid.UndoStack.AddAction(action); } } else { action = new InsertDeleteRowAction(_grid); _grid.Rows.Add(new ExcelRow()); if (action.SaveNewState()) { _grid.UndoStack.AddAction(action); } } break; case ContextMenuCommands.DeleteRows: if (sel.IsValid) { action = new InsertDeleteRowAction(_grid); for (int i = 0; i < sel.RowSpan; i++) { _grid.Rows.RemoveAt(sel.TopRow); } if (action.SaveNewState()) { _grid.UndoStack.AddAction(action); } } break; case ContextMenuCommands.InsertColumns: if (sel.IsValid) { action = new InsertDeleteColumnAction(_grid); for (int i = 0; i < sel.ColumnSpan; i++) { _grid.Columns.Insert(sel.LeftColumn, new Column()); } if (action.SaveNewState()) { _grid.UndoStack.AddAction(action); } } else { action = new InsertDeleteColumnAction(_grid); _grid.Columns.Add(new Column()); if (action.SaveNewState()) { _grid.UndoStack.AddAction(action); } } break; case ContextMenuCommands.DeleteColumns: if (sel.IsValid) { action = new InsertDeleteColumnAction(_grid); for (int i = 0; i < sel.ColumnSpan; i++) { _grid.Columns.RemoveAt(sel.LeftColumn); } if (action.SaveNewState()) { _grid.UndoStack.AddAction(action); } } break; } // restore selection try { _grid.Focus(); _grid.Selection = sel; } catch { // old selection became invalid after deleting rows/columns } }
// create a menu item void CreateMenuItem(string hdr, ContextMenuCommands cmd) { // create item, attach event handler var mi = new MenuItem(); mi.Header = hdr; mi.Tag = cmd; mi.Click += menuItem_Click; // create image for this item var resName = string.Format("{0}_small.png", cmd.ToString()); var stream = GetResourceStream(resName); if (stream != null) { var bmp = new BitmapImage(); bmp.StreamSource = stream; var img = new Image(); img.Source = bmp; img.Stretch = Stretch.None; img.Margin = new Thickness(4, 0, 0, 0); mi.Icon = img; } // done Items.Add(mi); }
/// <summary> /// Get a <see cref="MenuItem"/> based on a command code. /// </summary> /// <param name="cmd"><see cref="ContextMenuCommands"/> that determines the item to be retrieved.</param> /// <returns><see cref="MenuItem"/> that matches the given <paramref name="cmd"/>.</returns> public MenuItem GetMenuItem(ContextMenuCommands cmd) { foreach (var item in this.Items) { var mi = item as MenuItem; if (mi != null && object.Equals(mi.Tag, cmd)) { return mi; } } return null; }
internal static ContextMenu FolderItemsContextMenu(FolderItems folderItems, ListItem listItem, Action delete) { ContextMenuCommands commands = folderItems.ParentFolder.ParentList.BaseType == BaseType.DocumentLibrary ? libraryCommands : listCommands; ContextMenuCommand[] menuItems = commands.None; if (listItem != null) { menuItems = listItem.FileSystemObjectType == FileSystemObjectType.Folder ? commands.Folder : commands.Item; } return(new ContextMenu() { List = new ObservableList <ContextMenuCommand>(menuItems), Execute = delegate(IHierarchyLevel menuLevel, long menuIndex) { ContextMenuCommand command = (ContextMenuCommand)menuLevel.List[menuIndex]; switch (command.EditMode) { case EditMode.Refresh: folderItems.Refresh(); break; case EditMode.Edit: ListItemEditor.Show(new EditAction() { EditMode = command.EditMode, ListItem = listItem, TargetList = listItem.ParentList }); break; case EditMode.Open: HtmlWindow.Current.Open(listItem.AbsoluteUrl); break; case EditMode.Upload: Uploader.Upload(folderItems.ParentFolder); break; case EditMode.AddItem: case EditMode.AddFolder: ListItemEditor.Show(new EditAction() { EditMode = command.EditMode, TargetFolder = folderItems.ParentFolder, TargetList = folderItems.ParentFolder.ParentList }); break; case EditMode.Copy: ListItemEditor.Show(new EditAction() { EditMode = command.EditMode, ListItem = listItem, TargetFolder = folderItems.ParentFolder, TargetList = folderItems.ParentFolder.ParentList }); break; default: delete(); break; } }, Renderer = delegate(IMenuItem menuItem, IHierarchyLevel menuLevel, long menuIndex) { ContextMenuCommand command = (ContextMenuCommand)menuLevel.List[menuIndex]; menuItem.Text = command.Name; menuItem.ImageClass = command.Image + "Icon"; menuItem.SeparatorBefore = (command.EditMode == EditMode.Refresh || command.EditMode == EditMode.Delete || command.EditMode == EditMode.Copy); switch (command.EditMode) { case EditMode.AddFolder: menuItem.Enabled = folderItems.ParentFolder.IsRootFolder || (folderItems.ParentFolder.Item.EffectiveBasePermissions & BasePermissions.AddListItems) == BasePermissions.AddListItems; break; case EditMode.AddItem: case EditMode.Copy: menuItem.Enabled = folderItems.ParentFolder.ParentList.BaseType != BaseType.DocumentLibrary && (folderItems.ParentFolder.IsRootFolder || (folderItems.ParentFolder.Item.EffectiveBasePermissions & BasePermissions.AddListItems) == BasePermissions.AddListItems); break; case EditMode.Delete: menuItem.Enabled = (listItem.EffectiveBasePermissions & BasePermissions.DeleteListItems) == BasePermissions.DeleteListItems; break; case EditMode.Edit: menuItem.Enabled = BasePermissions.EditListItems == (BasePermissions.EditListItems & listItem.EffectiveBasePermissions); break; case EditMode.Refresh: menuItem.Enabled = folderItems.CanRefresh; break; } } }); }
internal static ContextMenu FolderContextMenu(FolderNode folder) { ContextMenuCommands commands = folder.ParentList.BaseType == BaseType.DocumentLibrary ? libraryCommands : listCommands; return(new ContextMenu() { List = new ObservableList <ContextMenuCommand>(folder.IsRootFolder ? commands.List : commands.Folder), Execute = delegate(IHierarchyLevel menuLevel, long menuIndex) { ContextMenuCommand command = (ContextMenuCommand)menuLevel.List[menuIndex]; switch (command.EditMode) { case EditMode.Refresh: if (!folder.IsRootFolder) { folder.Refresh(); } else { ((ListNode)folder.ParentList).Refresh(); } break; case EditMode.Edit: ListItemEditor.Show(new EditAction() { EditMode = command.EditMode, ListItem = folder.Item, TargetList = folder.ParentList }); break; case EditMode.AddItem: ListItemEditor.Show(new EditAction() { EditMode = command.EditMode, TargetFolder = folder, TargetList = folder.ParentList }); break; case EditMode.Upload: Uploader.Upload(folder); break; case EditMode.AddFolder: ListItemEditor.Show(new EditAction() { EditMode = command.EditMode, TargetFolder = folder, TargetList = folder.ParentList }); break; default: if (folder.IsRootFolder) { throw new NotImplementedException("List deletion is not implemented yet."); } DeleteFolder(folder); break; } }, Renderer = delegate(IMenuItem menuItem, IHierarchyLevel menuLevel, long menuIndex) { ContextMenuCommand command = (ContextMenuCommand)menuLevel.List[menuIndex]; switch (command.EditMode) { case EditMode.AddFolder: case EditMode.AddItem: menuItem.Enabled = folder.IsRootFolder || (folder.Item.EffectiveBasePermissions & BasePermissions.AddListItems) == BasePermissions.AddListItems; break; case EditMode.Delete: menuItem.Enabled = folder.IsRootFolder || (folder.Item.EffectiveBasePermissions & BasePermissions.DeleteListItems) == BasePermissions.DeleteListItems; break; case EditMode.Edit: menuItem.Enabled = !folder.IsRootFolder || BasePermissions.EditListItems == (BasePermissions.EditListItems & folder.Item.EffectiveBasePermissions); break; case EditMode.Refresh: menuItem.Enabled = true; break; } menuItem.Text = command.Name; menuItem.ImageClass = command.Image + "Icon"; menuItem.SeparatorBefore = (command.EditMode == EditMode.Refresh || command.EditMode == EditMode.Delete || command.EditMode == EditMode.AddItem); } }); }