public override NSMenu MenuForEvent (NSEvent theEvent) { CGPoint pt = this.ConvertPointFromView (theEvent.LocationInWindow, null); _selectedRow = this.GetRow (pt); NSTableViewDataSource ds = (NSTableViewDataSource)this.DataSource; NSMenu menu = new NSMenu (); if (_selectedRow >= (nint)0) { if (ds is NodesListView) { string data = (ds as NodesListView).Entries [(int)_selectedRow].DisplayName; switch (data) { case "Private Entities": NSMenuItem addPrivateEntity = new NSMenuItem ("Add Private Entity", ((ds as NodesListView).Entries [(int)_selectedRow] as VecsPrivateKeysNode).AddPrivateKeyHandler); menu.AddItem (addPrivateEntity); break; case "Secret Keys": NSMenuItem createCertificate = new NSMenuItem ("Add Secret Key", ((ds as NodesListView).Entries [(int)_selectedRow] as VecsSecretKeysNode).AddSecretKey); menu.AddItem (createCertificate); break; case "Trusted Certs": NSMenuItem createSigningRequest = new NSMenuItem ("Create Certificate", ((ds as NodesListView).Entries [(int)_selectedRow] as VecsTrustedCertsNode).AddCertificate); menu.AddItem (createSigningRequest); break; default: break; } } else if (ds is CertificateDetailsListView) { CertificateDetailsListView lw = ds as CertificateDetailsListView; CertDTO cert = lw.Entries [(int)_selectedRow]; NSMenuItem showCert = new NSMenuItem ("Show Certificate", (object sender, EventArgs e) => CertificateService.DisplayX509Certificate2 (this, cert.Cert)); menu.AddItem (showCert); NSMenuItem deleteEntry = new NSMenuItem ("Delete", (object sender, EventArgs e) => { UIErrorHelper.CheckedExec (delegate() { if (UIErrorHelper.ConfirmDeleteOperation ("Are you sure?") == true) { using (var session = new VecsStoreSession (lw.ServerDto.VecsClient, lw.Store, "")) { session.DeleteCertificate (cert.Alias); } lw.Entries.Remove (cert); UIErrorHelper.ShowAlert ("", "Successfully deleted the entry."); NSNotificationCenter.DefaultCenter.PostNotificationName ("ReloadServerData", this); } }); }); menu.AddItem (deleteEntry); } NSMenu.PopUpContextMenu (menu, theEvent, theEvent.Window.ContentView); } return base.MenuForEvent (theEvent); }