private void CmdBrowserGoForwardHistoryItem(ICommand sender) { AppButtonToolCommand cmd = sender as AppButtonToolCommand; if (cmd != null) { RaiseNavigateForwardEvent((int)cmd.Tag); } }
internal void ReBuildBrowserGoForwardHistoryCommandItems(ITextImageItem[] items) { _browserGoForwardCommand.Tools.Clear(); for (int i = 0; items != null && i < items.Length; i++) { ITextImageItem item = items[i]; string toolKey = "cmdBrowserGoForward_" + i.ToString(); AppButtonToolCommand cmd = null; if (this._browserGoForwardCommand.ToolbarsManager.Tools.Exists(toolKey)) { cmd = (AppButtonToolCommand)this._browserGoForwardCommand.ToolbarsManager.Tools[toolKey]; } if (cmd == null) { cmd = new AppButtonToolCommand(toolKey, this.mediator, this.CmdBrowserGoForwardHistoryItem, item.Text, String.Empty); this._browserGoForwardCommand.ToolbarsManager.Tools.Add(cmd); } if (cmd.Mediator == null) { cmd.Mediator = this.mediator; cmd.OnExecute += this.CmdBrowserGoForwardHistoryItem; this.mediator.RegisterCommand(toolKey, cmd); } else if (cmd.Mediator != this.mediator) { this.mediator.ReRegisterCommand(cmd); } cmd.SharedProps.ShowInCustomizer = false; cmd.SharedProps.AppearancesSmall.Appearance.Image = item.Image; cmd.SharedProps.Caption = item.Text; cmd.Tag = i; this._browserGoForwardCommand.Tools.Add(cmd); } //end foreach if (this._browserGoForwardCommand.Tools.Count == 0) { this._browserGoForwardCommand.DropDownArrowStyle = DropDownArrowStyle.None; } else { this._browserGoForwardCommand.DropDownArrowStyle = DropDownArrowStyle.Segmented; } }
private AppButtonToolCommand FindYetDiscoveredFeedMenuItem(DiscoveredFeedsInfo info) { if (info == null) { return(null); } AppButtonToolCommand foundItem = null; lock (SyncRoot) { foreach (AppButtonToolCommand item in discoveredFeeds.Keys) { DiscoveredFeedsInfo itemInfo; if (!discoveredFeeds.TryGetValue(item, out itemInfo)) { continue; } if (0 == String.Compare(itemInfo.SiteBaseUrl, info.SiteBaseUrl, true)) { foundItem = item; } else { List <string> knownFeeds = itemInfo.FeedLinks; foreach (string feedLink in knownFeeds) { if (info.FeedLinks.Contains(feedLink)) { foundItem = item; break; } } } if (null != foundItem) { break; } } } return(foundItem); }
internal void OnDiscoveredItemClick(ICommand sender) { AppButtonToolCommand itemClicked = sender as AppButtonToolCommand; Debug.Assert(itemClicked != null, "sender is not a AppButtonToolCommand"); DiscoveredFeedsInfo info; lock (SyncRoot) discoveredFeeds.TryGetValue(itemClicked, out info); Debug.Assert(info != null, "discoveredFeeds has no matching key"); bool cancel = this.RaiseDiscoveredFeedsSubscribe(info); if (!cancel) { //remove divider foreach (AppButtonToolCommand item in discoveredFeeds.Keys) { if (item.InstanceProps != null) { item.InstanceProps.IsFirstInGroup = false; } } //remove entry lock (SyncRoot) discoveredFeeds.Remove(itemClicked); lock (SyncItemDropdownTools) { itemDropdown.Tools.Remove(itemClicked); if (itemDropdown.Tools.Count > 1) { itemDropdown.Tools[1].InstanceProps.IsFirstInGroup = true; } } RefreshDiscoveredItemContainer(); } }
public void SetControls(AppPopupMenuCommand dropDown, AppButtonToolCommand clearList) { this.itemDropdown = dropDown; this.clearListButton = clearList; this.discoveredAppearance = new Appearance[4]; // index 0 and 1: non-discovered small (0) and large (1) this.discoveredAppearance[0] = new Appearance(); this.discoveredAppearance[0].Image = Properties.Resources.no_feed_discovered_16; this.discoveredAppearance[1] = new Appearance(); this.discoveredAppearance[1].Image = Properties.Resources.no_feed_discovered_32; // index 2 and 3: discovered small (2) and large (3) this.discoveredAppearance[2] = new Appearance(); this.discoveredAppearance[2].Image = Properties.Resources.feed_discovered_16; this.discoveredAppearance[3] = new Appearance(); this.discoveredAppearance[3].Image = Properties.Resources.feed_discovered_32; // init: Reset(); this.itemDropdown.ToolbarsManager.ToolClick -= OnToolbarsManager_ToolClick; this.itemDropdown.ToolbarsManager.ToolClick += OnToolbarsManager_ToolClick; }
/// <summary> /// Thread worker procedure. /// </summary> /// <param name="htmlContent"></param> /// <param name="pageUrl"></param> /// <param name="pageTitle"></param> private void AsyncDiscoverFeedsInContent(string htmlContent, string pageUrl, string pageTitle) { if (string.IsNullOrEmpty(pageUrl)) { return; } string baseUrl = GetBaseUrlOf(pageUrl); AppButtonToolCommand foundItem = null; lock (SyncRoot) { // simple search for baseUrl, so we may prevent lookup of the content foreach (AppButtonToolCommand item in discoveredFeeds.Keys) { DiscoveredFeedsInfo info; if (discoveredFeeds.TryGetValue(item, out info)) { string url = info.SiteBaseUrl; if (String.Equals(baseUrl, url, StringComparison.OrdinalIgnoreCase)) { foundItem = item; } } } } if (foundItem != null) { foundItem.SharedProps.Caption = StripAndShorten(pageTitle); } else { NewsComponents.Feed.RssLocater locator = new NewsComponents.Feed.RssLocater(Proxy, RssBanditApplication.UserAgent); //we did not really need the proxy. Content is allready loaded List <string> feeds = null; try { // You can use this to simplify debugging IEControl HTML output. // That is slightly different than the HTML we would get from a direct request! // using(System.IO.StreamWriter writer = System.IO.File.CreateText(System.IO.Path.Combine(System.IO.Path.GetTempPath(), "IEContent.htm"))) { // writer.Write(htmlContent); // writer.Flush(); // } feeds = locator.GetRssFeedsForUrlContent(pageUrl, htmlContent, false); } catch (Exception) { //catch up all, if it fails, it returns an empty list } if (feeds != null && feeds.Count > 0) { feeds = this.CheckAndRemoveSubscribedFeeds(feeds, baseUrl); } if (feeds != null && feeds.Count > 0) { DiscoveredFeedsInfo info = new DiscoveredFeedsInfo(feeds, pageTitle, baseUrl); this.Add(info); return; } } RefreshDiscoveredItemContainer(); }
/// <summary> /// Will add a DiscoveredFeedsInfo entry to the managed tool dropdown. /// </summary> /// <param name="info">DiscoveredFeedsInfo instance</param> public void Add(DiscoveredFeedsInfo info) { if (info == null) { return; } // detect duplicates: AppButtonToolCommand duplicateItem = FindYetDiscoveredFeedMenuItem(info); if (duplicateItem != null) { // update title/desc: duplicateItem.SharedProps.Caption = StripAndShorten(info.Title); duplicateItem.SharedProps.StatusText = info.FeedLinks[0]; lock (SyncRoot) { // refresh the existing info item to the new one discoveredFeeds.Remove(duplicateItem); discoveredFeeds.Add(duplicateItem, info); } } else { // new entry: WinGuiMain guiMain = (WinGuiMain)app.MainForm; GuiInvoker.InvokeAsync(guiMain, delegate { //guiMain.AddAutoDiscoveredUrl(info); AppButtonToolCommand newItem = new AppButtonToolCommand( String.Concat("cmdDiscoveredFeed_", ++(cmdKeyPostfix)), mediator, OnDiscoveredItemClick, StripAndShorten(info.Title), info.FeedLinks[0]); if (itemDropdown.ToolbarsManager.Tools.Exists(newItem.Key)) { itemDropdown.ToolbarsManager.Tools.Remove(newItem); } itemDropdown.ToolbarsManager.Tools.Add(newItem); newItem.SharedProps.StatusText = info.SiteBaseUrl; newItem.SharedProps.ShowInCustomizer = false; lock (SyncRoot) { // add a fresh version of info discoveredFeeds.Add(newItem, info); } lock (newDiscoveredFeeds.SyncRoot) { // re-order to top of list, in RefreshItemContainer() newDiscoveredFeeds.Enqueue(newItem); } RaiseNewFeedsDiscovered(info); }); } RefreshDiscoveredItemContainer(); }