//---------------------------------------------------------------------------
        #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);
 }
Пример #3
0
        /// <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
            }
        }
Пример #5
0
        /// <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
            }
        }
Пример #6
0
        // 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);
        }
Пример #7
0
 /// <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;
 }
Пример #8
0
        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;
                    }
                }
            });
        }
Пример #9
0
        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);
                }
            });
        }