private void UpdateSearchHistoryDropDown()
        {
            string txt = cmbSearch.Text;

            try
            {
                cmbSearch.TextChanged -= new EventHandler(OnSearchTextChanged);

                MediaBrowserPage selectedPage = GetSelectedPage();
                if (selectedPage != null)
                {
                    cmbSearch.Items.Clear();
                    List <string> history = selectedPage.SearchHistory;
                    if (history != null && history.Count > 0)
                    {
                        history.ForEach((s) =>
                        {
                            // Don't add "LookupMyPlaylists" in the drop down history
                            // even when it comes from the persistence service
                            if (string.Compare(s, "LookupMyPlaylists", true) != 0)
                            {
                                cmbSearch.Items.Add(s);
                            }
                        });
                    }

                    cmbSearch.SelectedIndex = -1;
                }
            }
            finally
            {
                cmbSearch.Text         = txt;
                cmbSearch.TextChanged += new EventHandler(OnSearchTextChanged);
            }
        }
        private MediaBrowserPage GetSelectedPage()
        {
            MediaBrowserPage selectedPage = null;

            if (tabContentBrowser.SelectedTab != null &&
                tabContentBrowser.SelectedTab.Controls != null &&
                tabContentBrowser.SelectedTab.Controls.Count > 0)
            {
                selectedPage = tabContentBrowser.SelectedTab.Controls[0] as MediaBrowserPage;
            }

            return(selectedPage);
        }
        void OnSearchTextChanged(object sender, EventArgs e)
        {
            bool validText = false;

            MediaBrowserPage selectedPage = GetSelectedPage();

            if (selectedPage != null)
            {
                _tt.SetSimpleToolTip(cmbSearch, selectedPage.GetSearchBoxTip());
                validText = selectedPage.PreValidateSearch(cmbSearch.Text);
            }

            btnSearch.Enabled   = validText;
            cmbSearch.BackColor = validText ? ThemeManager.WndValidColor : ThemeManager.ColorValidationFailed;
        }
        private void btnSearch_Click(object sender, EventArgs e)
        {
            MediaBrowserPage selectedPage = GetSelectedPage();

            if (selectedPage != null)
            {
                string search = cmbSearch.Text;

                if (selectedPage.PreValidateSearch(search))
                {
                    selectedPage.SearchCompleted -= SelectedPage_SearchCompleted;
                    selectedPage.SearchCompleted += SelectedPage_SearchCompleted;

                    _searchCancelled.Reset();

                    selectedPage.StartCancellableSearch(cmbSearch.Text, _searchCancelled);

                    ShowWaitDialog("Please wait for the search task to finish. You can press ESC to cancel the search.");
                }
            }
        }
        private void SelectedPage_SearchCompleted(object sender, EventArgs e)
        {
            MediaBrowserPage senderPage   = sender as MediaBrowserPage;
            MediaBrowserPage selectedPage = GetSelectedPage();

            if (senderPage != null && senderPage == selectedPage)
            {
                senderPage.DisplaySearchResults();

                string s = cmbSearch.Text;

                // Don't add "LookupMyPlaylists" in the search history
                if (string.Compare(s, "LookupMyPlaylists", true) != 0)
                {
                    if (senderPage.UpdateSearchHistory(s))
                    {
                        UpdateSearchHistoryDropDown();
                    }
                }
            }

            CloseWaitDialog();
        }