예제 #1
0
        private void PopupMenuAtLocation(NSObject sender)
        {
            var     button   = (NSButton)sender;
            CGPoint location = new CGPoint();

            location.X = button.Frame.GetMinX();
            location.Y = button.Frame.GetMidY();

            location = button.Superview.ConvertPointToView(location, null);

            NSWindow window       = Utility.GetMainWindowConroller().Window;
            nint     windowNumber = window.WindowNumber;

            if (TagMenu == null)
            {
                TagMenu = new NSMenu();
            }
            else
            {
                TagMenu.RemoveAllItems();
            }

            NSMenuItem menuItem = new NSMenuItem("All Tags");

            menuItem.Image  = Utility.ImageWithFilePath("/Images/Annotation/[email protected]");
            menuItem.Action = new ObjCRuntime.Selector("TagFilterMenuItemClick:");
            menuItem.Target = this;
            menuItem.Tag    = 0;
            TagMenu.InsertItem(menuItem, 0);

            menuItem        = new NSMenuItem("No Tag");
            menuItem.Image  = CreateImageWithColor(string.Empty);
            menuItem.Action = new ObjCRuntime.Selector("TagFilterMenuItemClick:");
            menuItem.Target = this;
            menuItem.Tag    = 1;
            TagMenu.InsertItem(menuItem, 1);

            TagMenu.AddItem(NSMenuItem.SeparatorItem);

            for (int i = 3; i < this.TagList.Count; i++)
            {
                menuItem        = new NSMenuItem(this.TagList[i].Title);
                menuItem.Image  = CreateImageWithColor(this.TagList[i].Color);
                menuItem.Action = new ObjCRuntime.Selector("TagFilterMenuItemClick:");
                menuItem.Target = this;
                menuItem.Tag    = i;
                menuItem.State  = NSCellStateValue.Off;
                TagMenu.InsertItem(menuItem, i);
            }

            var menuItems = TagMenu.ItemArray();

            for (int i = 0; i < this.TagList.Count; i++)
            {
                menuItems[i].State = this.TagList[i].CheckState;
            }

            NSEvent fakeMouseEvent =
                NSEvent.MouseEvent(NSEventType.LeftMouseUp,
                                   location,
                                   (NSEventModifierMask)NSEventMask.LeftMouseUp,
                                   0,
                                   windowNumber,
                                   window.GraphicsContext, 0, 1, 1);

            NSMenu.PopUpContextMenu(TagMenu, fakeMouseEvent, (NSView)sender);
        }