private void buttonHistory_Click(object sender, RoutedEventArgs e)
        {
            ShumbiDiscover.Controls.Dialogs.History dialog = new ShumbiDiscover.Controls.Dialogs.History();

            dialog.SearchHistory = _coreLogic.History;

            dialog.HistoryOpenItem += delegate(SearchDescription searchDescription)
            {
                DialogPanel.Close(dialog, DialogResult.Close);

                if (!searchVisualisationTab.SelectSearchVisualisation(searchDescription.Id))
                {
                    SearchVisualisation searchVisualisation = new SearchVisualisation();
                    searchVisualisation.Visualisation = visualisationSelector.Visualisation;
                    searchVisualisation.Localise();
                    searchVisualisation.ItemActivated += new SearchVisualisation.ItemActivatedEventHandler(SearchVisualisation_ItemActivated);
                    searchVisualisation.ItemSelected += new SearchVisualisation.ItemSelectedEventHandler(SearchVisualisation_ItemSelected);

                    searchVisualisation.SearchResultSet = new SearchResultSet();
                    searchVisualisation.SearchResultSet.SearchDescription = searchDescription;

                    textQuery.Text = searchDescription.Query;
                    DisplayNewVisualisation(searchVisualisation);
                    UpdateGoState();

                    _currentSearchVisualisation = searchVisualisation;

                    searchVisualisationTab.AddSearchVisualisation(_currentSearchVisualisation);

                    ShowSearchResultProgressDialog(CultureHelper.GetString(Properties.Resources.ResourceManager, "LOADING") + "...");

                    _coreLogic.SearchResultSetLoad(searchDescription,
                        delegate(SearchResultSet searchResultSet)
                        {
                            Action a = delegate()
                            {
                                if (searchResultSet != null && _currentSearchVisualisation != null)
                                {
                                    _currentSearchVisualisation.SearchResultSet = searchResultSet;
                                    _currentSearchVisualisation.PopulateVisualisation();
                                    DialogPanel.Close(_progressControl, DialogResult.Ok);
                                }
                                else
                                {
                                    DialogPanel.Close(_progressControl, DialogResult.Cancel);
                                }
                            };
            #if SILVERLIGHT
                            Dispatcher.BeginInvoke(a);
            #else
                            Dispatcher.Invoke(a);
            #endif
                        }
                     );

                }
            };

            dialog.HistoryDeleteItem += delegate(SearchDescription searchDescription)
            {
                _coreLogic.HistoryDelete(searchDescription);
            };

            dialog.HistoryClearItems += delegate()
            {
                _coreLogic.HistoryClear();
            };

            DialogPanel.ShowDialog(Properties.Resources.ResourceManager, "HISTORY", dialog, "buttonClose", DialogButtons.Close, null);
        }
        private void SearchVisualise(string query)
        {
            documentViewer.Visibility = Visibility.Collapsed;
            documentViewer.Cleanup();
            annotationCanvas.ClearContent();
            DisplayNewVisualisation(null);

            ShowSearchResultProgressDialog(CultureHelper.GetString(Properties.Resources.ResourceManager, "SEARCHING") + "...");

            foreach (string searchProviderName in searchSelector.SearchProviders)
            {
                _progressControl.AddItem(searchProviderName, _coreLogic.NumberItemsToRetrieve);
            }

            SearchResultSet searchResultSet = new SearchResultSet();
            searchResultSet.SearchDescription = new SearchDescription();
            searchResultSet.SearchDescription.Query = query;
            searchResultSet.SearchDescription.QueryDate = DateTime.Now;
            searchResultSet.SearchDescription.SearchProviders = searchSelector.SearchProviders;

            _currentSearchVisualisation = new SearchVisualisation();
            _currentSearchVisualisation.Visualisation = visualisationSelector.Visualisation;
            _currentSearchVisualisation.Localise();
            _currentSearchVisualisation.ItemActivated += new SearchVisualisation.ItemActivatedEventHandler(SearchVisualisation_ItemActivated);
            _currentSearchVisualisation.ItemSelected += new SearchVisualisation.ItemSelectedEventHandler(SearchVisualisation_ItemSelected);
            _currentSearchVisualisation.SearchResultSet = searchResultSet;

            searchVisualisationTab.AddSearchVisualisation(_currentSearchVisualisation);

            InformationPanelRefresh();
            ActionButtonsRefresh();

            _gettingProgress = false;
            _progressTimer = new DispatcherTimer();
            _progressTimer.Interval = TimeSpan.FromMilliseconds(200);
            _progressTimer.Tick += new EventHandler(_progressTimer_Tick);
            _progressTimer.Start();

            _coreLogic.SearchStartSession(searchResultSet.SearchDescription.SearchProviders, query,
                delegate(SearchResultSet searchResultSet2)
                {
                    Action a = delegate()
                    {
                        if (_progressTimer != null)
                        {
                            _progressTimer.Stop();
                            _gettingProgress = false;
                        }

                        if (searchResultSet2 != null && _currentSearchVisualisation != null)
                        {
                            _currentSearchVisualisation.SearchResultSet = searchResultSet2;
                            _currentSearchVisualisation.PopulateVisualisation();
                            DialogPanel.Close(_progressControl, DialogResult.Ok);
                        }
                        else
                        {
                            DialogPanel.Close(_progressControl, DialogResult.Cancel);
                        }
                    };
            #if SILVERLIGHT
                    Dispatcher.BeginInvoke(a);
            #else
                    Dispatcher.Invoke(a);
            #endif
                }
             );
        }
        private void AddToFavourites(SearchVisualisation searchVisualisation)
        {
            if (searchVisualisation != null)
            {
                Favourite favourite = new Favourite();
                favourite.Name = searchVisualisation.SearchResultSet.SearchDescription.Query;
                favourite.Query = searchVisualisation.SearchResultSet.SearchDescription.Query;
                favourite.SearchProviders = searchVisualisation.SearchResultSet.SearchDescription.SearchProviders;
                favourite.Visualisation = searchVisualisation.Visualisation;

                _coreLogic.FavouritesAdd(favourite);
            }
        }
 void searchVisualisationTab_AddToFavourites(SearchVisualisation searchVisualisation)
 {
     AddToFavourites(searchVisualisation);
 }
        void searchVisualisationTab_ItemSelected(SearchVisualisation searchVisualisation)
        {
            bool showDocumentViewer = false;

            DisplayNewVisualisation(searchVisualisation);

            _currentSearchVisualisation = searchVisualisation;

            if (_currentSearchVisualisation != null)
            {
                textQuery.Text = _currentSearchVisualisation.SearchResultSet.SearchDescription.Query;
                showDocumentViewer = _currentSearchVisualisation.IsClusterOpen;
            }

            if (showDocumentViewer)
            {
                OpenDocumentViewer();
            }
            else
            {
                CloseDocumentViewer();
            }

            InformationPanelRefresh();
            ActionButtonsRefresh();
            UpdateGoState();
        }
 private void DisplayNewVisualisation(SearchVisualisation searchVisualisation)
 {
     if (_currentSearchVisualisation != null)
     {
         _currentSearchVisualisation.VisualisationStateChanged(false);
     }
     if (searchVisualisation != null)
     {
         contentPresenterVisualisation.Content = searchVisualisation.VisualisationControl;
         searchVisualisation.VisualisationStateChanged(true);
     }
     else
     {
         contentPresenterVisualisation.Content = null;
     }
 }
        private ToggleButton CreateTabButton(SearchVisualisation searchVisualisation)
        {
            ToggleButton button = new ToggleButton();

            Grid g = new Grid();

            ColumnDefinition cd0 = new ColumnDefinition();
            cd0.Width = new GridLength(6);

            ColumnDefinition cd1 = new ColumnDefinition();
            cd1.Width = new GridLength(20);

            ColumnDefinition cd2 = new ColumnDefinition();
            cd2.Width = new GridLength(6);

            ColumnDefinition cd3 = new ColumnDefinition();
            cd3.Width = new GridLength(80);

            ColumnDefinition cd4 = new ColumnDefinition();
            cd4.Width = new GridLength(6);

            ColumnDefinition cd5 = new ColumnDefinition();
            cd5.Width = new GridLength(20);

            ColumnDefinition cd6 = new ColumnDefinition();
            cd6.Width = new GridLength(20);

            ColumnDefinition cd7 = new ColumnDefinition();
            cd7.Width = new GridLength(6);

            g.ColumnDefinitions.Add(cd0);
            g.ColumnDefinitions.Add(cd1);
            g.ColumnDefinitions.Add(cd2);
            g.ColumnDefinitions.Add(cd3);
            g.ColumnDefinitions.Add(cd4);
            g.ColumnDefinitions.Add(cd5);
            g.ColumnDefinitions.Add(cd6);
            g.ColumnDefinitions.Add(cd7);

            Image image = new Image();
            image.Width = 20;
            image.Height = 20;
            image.Source = new System.Windows.Media.Imaging.BitmapImage(VisualisationFactory.GetSmallImage(searchVisualisation.Visualisation));
            Grid.SetColumn(image, 1);
            g.Children.Add(image);

            TextBlock tb = new TextBlock();
            tb.Text = searchVisualisation.SearchResultSet.SearchDescription.Query;
            tb.TextWrapping = TextWrapping.NoWrap;
            #if !SILVERLIGHT
            tb.TextTrimming = TextTrimming.CharacterEllipsis;
            #endif
            tb.TextAlignment = TextAlignment.Left;
            tb.VerticalAlignment = VerticalAlignment.Center;
            tb.HorizontalAlignment = HorizontalAlignment.Left;
            Grid.SetColumn(tb, 3);
            g.Children.Add(tb);

            Button favouritesAddButton = new Button();
            favouritesAddButton.Click += new RoutedEventHandler(favouritesAddButton_Click);
            favouritesAddButton.Width = 20;
            favouritesAddButton.Height = 20;
            favouritesAddButton.Tag = searchVisualisation;

            Image imageFavouritesAdd = new Image();
            imageFavouritesAdd.Source = new BitmapImage(new Uri("Resources/FavouritesAdd16.png", UriKind.Relative));
            imageFavouritesAdd.Stretch = Stretch.None;

            favouritesAddButton.Content = imageFavouritesAdd;

            Grid.SetColumn(favouritesAddButton, 5);
            g.Children.Add(favouritesAddButton);

            TextBlock tbClose = new TextBlock();
            tbClose.Text = "X";
            tbClose.VerticalAlignment = VerticalAlignment.Top;

            Button closeButton = new Button();
            closeButton.Margin = new Thickness(0, 0, 0, 0);
            closeButton.Click += new RoutedEventHandler(closeButton_Click);
            closeButton.Content = tbClose;
            closeButton.Tag = searchVisualisation;
            closeButton.Width = 20;
            closeButton.Height = 20;

            Grid.SetColumn(closeButton, 6);
            g.Children.Add(closeButton);

            g.Tag = searchVisualisation;
            g.Width = 164;
            g.Height = 32;

            button.Content = g;
            button.Tag = searchVisualisation;
            button.Height = 32;
            button.Width = 164;

            button.Click += new RoutedEventHandler(button_Click);

            return(button);
        }
        /// <summary>
        /// Remove a search visualisation from the list
        /// </summary>
        /// <param name="searchVisualisation">The search visualisation to remove</param>
        public void RemoveSearchVisualisation(SearchVisualisation searchVisualisation)
        {
            int found = -1;
            for (int i = 0; i < _items.Children.Count && found == -1; i++)
            {
                ToggleButton button = _items.Children[i] as ToggleButton;

                if (button.Tag == searchVisualisation)
                {
                    found = i;
                    _items.Children.RemoveAt(i);
                    if (i <= _currentIndex)
                    {
                        _currentIndex--;
                    }
                }
            }

            if (found != -1)
            {
                int newIndex = _currentIndex;

                if (newIndex < 0)
                {
                    newIndex = 0;
                }

                if (ItemSelected != null)
                {
                    if (newIndex < _items.Children.Count)
                    {
                        ToggleButton b = _items.Children[newIndex] as ToggleButton;

                        SelectNewItem(b);
                    }
                    else
                    {
                        ItemSelected(null);
                    }
                }
            }

            CalculateButtonVisibility(true);
        }
        /// <summary>
        /// Refresh the search visualisation
        /// </summary>
        /// <param name="refreshSearchVisualisation">The search visualisation to refresh</param>
        public void RefreshSearchVisualisation(SearchVisualisation refreshSearchVisualisation)
        {
            bool found = false;
            for (int i = 0; i < _items.Children.Count && !found; i++)
            {
                ToggleButton b = _items.Children[i] as ToggleButton;

                SearchVisualisation searchVisualisation = b.Tag as SearchVisualisation;

                if (searchVisualisation != null)
                {
                    if (searchVisualisation.SearchResultSet.SearchDescription.Id == refreshSearchVisualisation.SearchResultSet.SearchDescription.Id)
                    {
                        found = true;

                        Grid g = b.Content as Grid;

                        if (g != null)
                        {
                            Image image = g.Children[0] as Image;

                            if (image != null)
                            {
                                image.Source = new System.Windows.Media.Imaging.BitmapImage(VisualisationFactory.GetSmallImage(searchVisualisation.Visualisation));
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Add a new search visualisation
        /// </summary>
        /// <param name="searchVisualisation">The search visualisation to add</param>
        public void AddSearchVisualisation(SearchVisualisation searchVisualisation)
        {
            ToggleButton button = CreateTabButton(searchVisualisation);

            _items.Children.Add(button);

            SelectNewItem(button);

            _currentIndex = _items.Children.IndexOf(button);

            CalculateButtonVisibility(true);
        }