コード例 #1
0
        private void CmdBrowserGoForwardHistoryItem(ICommand sender)
        {
            AppButtonToolCommand cmd = sender as AppButtonToolCommand;

            if (cmd != null)
            {
                RaiseNavigateForwardEvent((int)cmd.Tag);
            }
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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();
            }
        }
コード例 #5
0
        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;
        }
コード例 #6
0
        /// <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();
        }
コード例 #7
0
        /// <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();
        }