public override void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model) { if (!TwitterUrls.IsTweetDeck(frame.Url) || browser.IsLoading) { extraContext.Reset(); } base.OnBeforeContextMenu(browserControl, browser, frame, parameters, model); bool isSelecting = parameters.TypeFlags.HasFlag(ContextMenuType.Selection); bool isEditing = parameters.TypeFlags.HasFlag(ContextMenuType.Editable); if (!isSelecting && !isEditing) { AddSeparator(model); IMenuModel globalMenu = model.Count == 0 ? model : model.AddSubMenu(MenuGlobal, Program.BrandName); globalMenu.AddItem(CefMenuCommand.Reload, TitleReloadBrowser); globalMenu.AddCheckItem(MenuMute, TitleMuteNotifications); globalMenu.SetChecked(MenuMute, Config.MuteNotifications); globalMenu.AddSeparator(); globalMenu.AddItem(MenuSettings, TitleSettings); globalMenu.AddItem(MenuPlugins, TitlePlugins); globalMenu.AddItem(MenuAbout, TitleAboutProgram); AddDebugMenuItems(globalMenu); } }
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) { if (form.CanViewDetail) { model.AddItem(MenuViewDetail, "View detail"); } model.AddItem(MenuSkipTweet, "Skip tweet"); model.AddCheckItem(MenuFreeze, "Freeze"); model.SetChecked(MenuFreeze, form.FreezeTimer); if (!string.IsNullOrEmpty(form.CurrentTweetUrl)) { model.AddSeparator(); model.AddItem(MenuCopyTweetUrl, "Copy tweet address"); if (!string.IsNullOrEmpty(form.CurrentQuoteUrl)) { model.AddItem(MenuCopyQuotedTweetUrl, "Copy quoted tweet address"); } } } if (HasDevTools) { AddSeparator(model); AddDebugMenuItems(model); } RemoveSeparatorIfLast(model); form.InvokeAsyncSafe(() => { form.ContextMenuOpen = true; form.TriggerAnalyticsEvent(AnalyticsFile.Event.NotificationContextMenu); }); }
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.CurrentUrl)) { model.AddItem((CefMenuCommand)MenuCopyTweetUrl, "Copy tweet address"); if (!string.IsNullOrEmpty(form.CurrentQuotedTweetUrl)) { model.AddItem((CefMenuCommand)MenuCopyQuotedTweetUrl, "Copy quoted tweet address"); } model.AddSeparator(); } } #if DEBUG AddDebugMenuItems(model); #endif RemoveSeparatorIfLast(model); form.InvokeSafe(() => form.ContextMenuOpen = true); }
public override void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model) { bool isSelecting = parameters.TypeFlags.HasFlag(ContextMenuType.Selection); bool isEditing = parameters.TypeFlags.HasFlag(ContextMenuType.Editable); model.Remove(CefMenuCommand.Back); model.Remove(CefMenuCommand.Forward); model.Remove(CefMenuCommand.Print); model.Remove(CefMenuCommand.ViewSource); RemoveSeparatorIfLast(model); if (isSelecting) { if (isEditing) { model.AddSeparator(); model.AddItem(MenuWriteApplyROT13, "Apply ROT13"); } model.AddSeparator(); } base.OnBeforeContextMenu(browserControl, browser, frame, parameters, model); if (isSelecting && !isEditing && TwitterUrls.IsTweetDeck(frame.Url)) { InsertSelectionSearchItem(model, MenuSearchInColumn, "Search in a column"); } if (Context.Types.HasFlag(ContextInfo.ContextType.Chirp) && !isSelecting && !isEditing) { model.AddItem(MenuOpenTweetUrl, "Open tweet in browser"); model.AddItem(MenuCopyTweetUrl, "Copy tweet address"); model.AddItem(MenuScreenshotTweet, "Screenshot tweet to clipboard"); if (!string.IsNullOrEmpty(Context.Chirp.QuoteUrl)) { model.AddSeparator(); model.AddItem(MenuOpenQuotedTweetUrl, "Open quoted tweet in browser"); model.AddItem(MenuCopyQuotedTweetUrl, "Copy quoted tweet address"); } model.AddSeparator(); } if (!isSelecting && !isEditing) { AddSeparator(model); IMenuModel globalMenu = model.Count == 0 ? model : model.AddSubMenu(MenuGlobal, Program.BrandName); globalMenu.AddItem(CefMenuCommand.Reload, TitleReloadBrowser); globalMenu.AddCheckItem(MenuMute, TitleMuteNotifications); globalMenu.SetChecked(MenuMute, Config.MuteNotifications); globalMenu.AddSeparator(); globalMenu.AddItem(MenuSettings, TitleSettings); globalMenu.AddItem(MenuPlugins, TitlePlugins); globalMenu.AddItem(MenuAbout, TitleAboutProgram); AddDebugMenuItems(globalMenu); } RemoveSeparatorIfLast(model); form.InvokeAsyncSafe(form.AnalyticsFile.BrowserContextMenus.Trigger); }
public override void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model) { model.Remove(CefMenuCommand.Back); model.Remove(CefMenuCommand.Forward); model.Remove(CefMenuCommand.Print); model.Remove(CefMenuCommand.ViewSource); RemoveSeparatorIfLast(model); if (parameters.TypeFlags.HasFlag(ContextMenuType.Selection)) { model.AddSeparator(); } base.OnBeforeContextMenu(browserControl, browser, frame, parameters, model); lastHighlightedTweet = TweetDeckBridge.LastHighlightedTweet; lastHighlightedQuotedTweet = TweetDeckBridge.LastHighlightedQuotedTweet; if (!BrowserUtils.IsTweetDeckWebsite(frame) || browser.IsLoading) { lastHighlightedTweet = string.Empty; lastHighlightedQuotedTweet = string.Empty; } if (!string.IsNullOrEmpty(lastHighlightedTweet) && (parameters.TypeFlags & (ContextMenuType.Editable | ContextMenuType.Selection)) == 0) { model.AddItem((CefMenuCommand)MenuOpenTweetUrl, "Open tweet in browser"); model.AddItem((CefMenuCommand)MenuCopyTweetUrl, "Copy tweet address"); model.AddItem((CefMenuCommand)MenuScreenshotTweet, "Screenshot tweet to clipboard"); if (!string.IsNullOrEmpty(lastHighlightedQuotedTweet)) { model.AddSeparator(); model.AddItem((CefMenuCommand)MenuOpenQuotedTweetUrl, "Open quoted tweet in browser"); model.AddItem((CefMenuCommand)MenuCopyQuotedTweetUrl, "Copy quoted tweet address"); } model.AddSeparator(); } if ((parameters.TypeFlags & (ContextMenuType.Editable | ContextMenuType.Selection)) == 0) { AddSeparator(model); IMenuModel globalMenu = model.Count == 0 ? model : model.AddSubMenu((CefMenuCommand)MenuGlobal, Program.BrandName); globalMenu.AddItem(CefMenuCommand.Reload, "Reload browser"); globalMenu.AddCheckItem((CefMenuCommand)MenuMute, "Mute notifications"); globalMenu.SetChecked((CefMenuCommand)MenuMute, Program.UserConfig.MuteNotifications); globalMenu.AddSeparator(); globalMenu.AddItem((CefMenuCommand)MenuSettings, "Settings"); globalMenu.AddItem((CefMenuCommand)MenuPlugins, "Plugins"); globalMenu.AddItem((CefMenuCommand)MenuAbout, "About " + Program.BrandName); #if DEBUG globalMenu.AddSeparator(); AddDebugMenuItems(globalMenu); #endif } RemoveSeparatorIfLast(model); }
/// <summary> /// Applies the JSON formatted result of an on-before-contextmenu script and fails silently (Error only visible in debug log). /// </summary> /// <param name="model"></param> /// <param name="result"></param> /// <param name="parameterName"></param> private void applyResultToModel(ref IMenuModel model, JObject result, string parameterName) { if (result.ContainsKey("clear") && result["clear"].ToObject <bool>()) { model.Clear(); } if (!result.ContainsKey("entries") || result["entries"] == null) { return; } JArray entries = result["entries"] as JArray; if (entries == null) { Tools.Logger.Log("Error while getting entries of result from parameter " + parameterName, Tools.Logger.LogLevel.error); return; } foreach (var entry in entries) { int id = 0; string text = "missing text"; if (entry["id"] != null) { try { id = entry["id"].ToObject <int>(); } catch (Exception) { Tools.Logger.Log("Invalid 'id' for entry of result from parameter " + parameterName, Tools.Logger.LogLevel.error); } if (id > 1998) { Tools.Logger.Log("id for entry of result is too high, only 1998 ids allowd from parameter " + parameterName, Tools.Logger.LogLevel.error); id = 0; } } id = ((int)CefMenuCommand.UserFirst) + id; if (entry["text"] != null) { try { text = entry["text"].ToObject <string>(); } catch (Exception) { Tools.Logger.Log("Invalid 'text' for entry of result from parameter " + parameterName, Tools.Logger.LogLevel.error); } } string type = "label"; if (entry["type"] != null) { try { type = entry["type"].ToObject <string>(); } catch (Exception) { Tools.Logger.Log("Invalid 'type' for entry of result from parameter " + parameterName, Tools.Logger.LogLevel.error); } } switch (type) { case "separator": model.AddSeparator(); break; case "checkbox": model.AddCheckItem((CefMenuCommand)id, text); bool isChecked = false; if (entry["checked"] != null) { try { isChecked = entry["checked"].ToObject <bool>(); } catch (Exception) { Tools.Logger.Log("Invalid value for 'checked' for entry of result from parameter " + parameterName, Tools.Logger.LogLevel.error); } model.SetCheckedAt(model.Count - 1, isChecked); } break; default: model.AddItem((CefMenuCommand)id, text); break; } } }
public override void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model) { model.Remove(CefMenuCommand.Back); model.Remove(CefMenuCommand.Forward); model.Remove(CefMenuCommand.Print); model.Remove(CefMenuCommand.ViewSource); RemoveSeparatorIfLast(model); if (parameters.TypeFlags.HasFlag(ContextMenuType.Selection)) { if (parameters.TypeFlags.HasFlag(ContextMenuType.Editable)) { model.AddSeparator(); model.AddItem(MenuInputApplyROT13, "Apply ROT13"); } model.AddSeparator(); } base.OnBeforeContextMenu(browserControl, browser, frame, parameters, model); lastHighlightedTweetUrl = TweetDeckBridge.LastHighlightedTweetUrl; lastHighlightedQuoteUrl = TweetDeckBridge.LastHighlightedQuoteUrl; if (!TwitterUtils.IsTweetDeckWebsite(frame) || browser.IsLoading) { lastHighlightedTweetUrl = string.Empty; lastHighlightedQuoteUrl = string.Empty; } if (!string.IsNullOrEmpty(lastHighlightedTweetUrl) && (parameters.TypeFlags & (ContextMenuType.Editable | ContextMenuType.Selection)) == 0) { model.AddItem(MenuOpenTweetUrl, "Open tweet in browser"); model.AddItem(MenuCopyTweetUrl, "Copy tweet address"); model.AddItem(MenuScreenshotTweet, "Screenshot tweet to clipboard"); if (!string.IsNullOrEmpty(lastHighlightedQuoteUrl)) { model.AddSeparator(); model.AddItem(MenuOpenQuotedTweetUrl, "Open quoted tweet in browser"); model.AddItem(MenuCopyQuotedTweetUrl, "Copy quoted tweet address"); } model.AddSeparator(); } if ((parameters.TypeFlags & (ContextMenuType.Editable | ContextMenuType.Selection)) == 0) { AddSeparator(model); IMenuModel globalMenu = model.Count == 0 ? model : model.AddSubMenu(MenuGlobal, Program.BrandName); globalMenu.AddItem(CefMenuCommand.Reload, TitleReloadBrowser); globalMenu.AddCheckItem(MenuMute, TitleMuteNotifications); globalMenu.SetChecked(MenuMute, Program.UserConfig.MuteNotifications); globalMenu.AddSeparator(); globalMenu.AddItem(MenuSettings, TitleSettings); globalMenu.AddItem(MenuPlugins, TitlePlugins); globalMenu.AddItem(MenuAbout, TitleAboutProgram); if (HasDevTools) { globalMenu.AddSeparator(); AddDebugMenuItems(globalMenu); } } RemoveSeparatorIfLast(model); form.InvokeAsyncSafe(() => form.TriggerAnalyticsEvent(AnalyticsFile.Event.BrowserContextMenu)); }