/// <summary>
        /// Default Constructor
        /// </summary>
        public VisualisationSelector()
        {
            InitializeComponent();

            panelButtons             = new WrapPanel();
            panelButtons.Orientation = Orientation.Horizontal;
            borderMain.Content       = panelButtons;

            List <string> allVisualisations = VisualisationFactory.GetNames();

            for (int i = 0; i < allVisualisations.Count; i++)
            {
                ToggleButton button = new ToggleButton();
                button.Name = "button" + allVisualisations[i];
                button.Tag  = allVisualisations[i];

                button.Width  = 80;
                button.Height = 80;
                button.Click += new RoutedEventHandler(button_Click);

                StackPanel sp    = new StackPanel();
                Image      image = new Image();
                image.Stretch = System.Windows.Media.Stretch.Fill;
                image.Width   = 48;
                image.Height  = 48;
                image.Source  = new BitmapImage(VisualisationFactory.GetLargeImage(allVisualisations[i]));

                TextBlock tb = new TextBlock();
                tb.Text = allVisualisations[i];
                tb.HorizontalAlignment = HorizontalAlignment.Center;

                sp.Children.Add(image);
                sp.Children.Add(tb);

                button.Content = sp;

                if (i == 0)
                {
                    button.IsChecked = true;
                }

                panelButtons.Children.Add(button);
            }

            int numItems = allVisualisations.Count;
            int columns  = Math.Min(3, numItems);

            this.Width  = (80 * columns) + 20;
            this.Height = (Math.Ceiling((double)numItems / (double)columns) * 80) + 20;

            this.MouseMove  += new MouseEventHandler(VisualisationSelector_MouseMove);
            this.MouseLeave += new MouseEventHandler(VisualisationSelector_MouseLeave);
        }
        /// <summary>
        /// Convert the value
        /// </summary>
        /// <param name="value"></param>
        /// <param name="targetType"></param>
        /// <param name="parameter"></param>
        /// <param name="culture"></param>
        /// <returns></returns>
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string icon = "";

            if (value is Data.Favourite)
            {
                icon = VisualisationFactory.GetLargeImage((value as Data.Favourite).Visualisation).ToString();
            }
            else if (value is Data.FavouriteFolder)
            {
                icon = "../Resources/FavouriteFolder32.png";
            }

            return(icon);
        }
        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>
        /// 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));
                            }
                        }
                    }
                }
            }
        }