using CefSharp; using TweetDuck.Core.Controls; using TweetDuck.Core.Notification; namespace TweetDuck.Core.Handling{ class ContextMenuNotification : ContextMenuBase{ private const int MenuSkipTweet = 26600; private const int MenuFreeze = 26601; private const int MenuCopyTweetUrl = 26602; private const int MenuCopyQuotedTweetUrl = 26603; private readonly FormNotificationBase form; private readonly bool enableCustomMenu; public ContextMenuNotification(FormNotificationBase form, bool enableCustomMenu) : base(form){ this.form = form; this.enableCustomMenu = enableCustomMenu; } public override void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model){ model.Clear(); if (parameters.TypeFlags.HasFlag(ContextMenuType.Selection)){ model.AddItem(CefMenuCommand.Copy, "Copy"); model.AddSeparator(); } base.OnBeforeContextMenu(browserControl, browser, frame, parameters, model); if (enableCustomMenu){ model.AddItem((CefMenuCommand)MenuSkipTweet, "Skip tweet"); model.AddCheckItem((CefMenuCommand)MenuFreeze, "Freeze"); model.SetChecked((CefMenuCommand)MenuFreeze, form.FreezeTimer); model.AddSeparator(); if (!string.IsNullOrEmpty(form.CurrentTweetUrl)){ model.AddItem((CefMenuCommand)MenuCopyTweetUrl, "Copy tweet address"); if (!string.IsNullOrEmpty(form.CurrentQuoteUrl)){ model.AddItem((CefMenuCommand)MenuCopyQuotedTweetUrl, "Copy quoted tweet address"); } model.AddSeparator(); } } if (HasDevTools){ AddDebugMenuItems(model); } RemoveSeparatorIfLast(model); form.InvokeAsyncSafe(() => form.ContextMenuOpen = true); } public override bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags){ if (base.OnContextMenuCommand(browserControl, browser, frame, parameters, commandId, eventFlags)){ return true; } switch((int)commandId){ case MenuSkipTweet: form.InvokeAsyncSafe(form.FinishCurrentNotification); return true; case MenuFreeze: form.InvokeAsyncSafe(() => form.FreezeTimer = !form.FreezeTimer); return true; case MenuCopyTweetUrl: SetClipboardText(form.CurrentTweetUrl); return true; case MenuCopyQuotedTweetUrl: SetClipboardText(form.CurrentQuoteUrl); return true; } return false; } public override void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame){ base.OnContextMenuDismissed(browserControl, browser, frame); form.InvokeAsyncSafe(() => form.ContextMenuOpen = false); } } }