diff --git a/Core/FormBrowser.cs b/Core/FormBrowser.cs index 5fd949bf..810cdc34 100644 --- a/Core/FormBrowser.cs +++ b/Core/FormBrowser.cs @@ -24,7 +24,7 @@ public FormBrowser(){ bridge = new TweetDeckBridge(this); - browser = new ChromiumWebBrowser("https://tweetdeck.twitter.com/"); + browser = new ChromiumWebBrowser("https://tweetdeck.twitter.com/"){ MenuHandler = new ContextMenuHandler(this) }; browser.LoadingStateChanged += Browser_LoadingStateChanged; browser.RegisterJsObject("$TD",bridge); @@ -78,5 +78,15 @@ private void FormBrowser_WindowStateChanged(object sender, EventArgs e){ Config.IsMaximized = WindowState != FormWindowState.Normal; FormBrowser_ResizeEnd(sender,e); } + + // callback handlers + + public void OpenSettings(){ + // TODO + } + + public void OpenAbout(){ + // TODO + } } } diff --git a/Core/Handling/ContextMenuHandler.cs b/Core/Handling/ContextMenuHandler.cs new file mode 100644 index 00000000..01e3fc4e --- /dev/null +++ b/Core/Handling/ContextMenuHandler.cs @@ -0,0 +1,51 @@ +using CefSharp; + +namespace TweetDick.Core.Handling{ + class ContextMenuHandler : IContextMenuHandler{ + private const int MenuSettings = 26500; + private const int MenuAbout = 26501; + + private readonly FormBrowser form; + + public ContextMenuHandler(FormBrowser form){ + this.form = form; + } + + public 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); + + if (model.Count > 0 && model.GetTypeAt(model.Count-1) == MenuItemType.Separator){ + model.RemoveAt(model.Count-1); + } + + model.AddItem(CefMenuCommand.Reload,"Reload"); + model.AddSeparator(); + model.AddItem((CefMenuCommand)MenuSettings,"Settings"); + model.AddSeparator(); + model.AddItem((CefMenuCommand)MenuAbout,"About TweetDick"); + } + + public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags){ + switch((int)commandId){ + case MenuSettings: + form.OpenSettings(); + return true; + + case MenuAbout: + form.OpenAbout(); + return true; + } + + return false; + } + + public void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame){} + + public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback){ + return false; + } + } +} diff --git a/Core/Handling/TweetDeckBridge.cs b/Core/Handling/TweetDeckBridge.cs index e7b56ce0..63303092 100644 --- a/Core/Handling/TweetDeckBridge.cs +++ b/Core/Handling/TweetDeckBridge.cs @@ -1,6 +1,4 @@ -using System.Windows.Forms; - -namespace TweetDick.Core.Handling{ +namespace TweetDick.Core.Handling{ class TweetDeckBridge{ private readonly FormBrowser form; @@ -9,7 +7,7 @@ public TweetDeckBridge(FormBrowser form){ } public void OpenSettingsMenu(){ - MessageBox.Show("Settings"); + form.OpenSettings(); } public void Log(string data){ diff --git a/Resources/code.js b/Resources/code.js index 59a9fb56..1ff621c3 100644 --- a/Resources/code.js +++ b/Resources/code.js @@ -8,6 +8,27 @@ // Function: Initializes TweetDick events. Called after the website app is loaded. // var initializeTweetDick = function(){ + $("[data-action='settings-menu']").click(function(){ + setTimeout(function(){ + var menu = $(".js-dropdown-content").children("ul").first(); + if (menu.length == 0)return; + + menu.children(".drp-h-divider").last().after('<li class="is-selectable" data-tweetdick><a href="#" data-action>TweetDick</a></li><li class="drp-h-divider"></li>'); + + var tweetDickBtn = menu.children("[data-tweetdick]"); + + tweetDickBtn.on("click","a",function(){ + $TD.openSettingsMenu(); + }); + + tweetDickBtn.hover(function(){ + $(this).addClass("is-selected"); + },function(){ + $(this).removeClass("is-selected"); + }); + },0); + }); + isInitialized = true; }; diff --git a/TweetDick.csproj b/TweetDick.csproj index 846b3508..8197786b 100644 --- a/TweetDick.csproj +++ b/TweetDick.csproj @@ -79,6 +79,7 @@ </ItemGroup> <ItemGroup> <Compile Include="Configuration\UserConfig.cs" /> + <Compile Include="Core\Handling\ContextMenuHandler.cs" /> <Compile Include="Core\FormBrowser.cs"> <SubType>Form</SubType> </Compile>