Click here to Skip to main content
15,888,816 members
Articles / Desktop Programming / WPF

Visual Studio Tools for Office 2008 Ribbon Designer with XLINQ for Yahoo

Rate me:
Please Sign up or sign in to vote.
4.20/5 (6 votes)
5 Dec 2007CPOL6 min read 82K   1.7K   51  
See the new Ribbon Designer in Visual Studio 2008 allowing you to graphically create ribbons for your Office add-ins. Add images from the Yahoo Image Search API and analyse the content of your document
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml.Linq;

namespace WordAddIn1
{
    /// <summary>
    /// Interaction logic for UserControl2.xaml
    /// </summary>
    public partial class ImageSearchWpfUserControl : UserControl
    {
        int startVal = 1;

        public ImageSearchWpfUserControl()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            //Make url for search, with paging support
            string uri = "http://search.yahooapis.com/ImageSearchService/V1/imageSearch?appid=" + Properties.Settings.Default.AppId + "&results=20&query=" + textBox1.Text;
            if((sender as Control).Name.Equals("buttonForward"))
            {
                startVal += 20;
                uri += "&start=" + startVal;
            }
            else if ((sender as Control).Name.Equals("buttonBack"))
            {
                startVal -= 20;
                uri += "&start=" + startVal;
            }
            else
                startVal = 1;

            //Load the result as XDocument
            var xraw = XDocument.Load(uri);
            //Populate array
            var imageArray = from image in xraw.Elements().First().Elements()
                         select new YahooImage
                         {
                             Title = image.Element("{urn:yahoo:srchmi}Title").Value,
                             LargeUrl = image.Element("{urn:yahoo:srchmi}ClickUrl").Value,
                             Thumbnail = image.Element("{urn:yahoo:srchmi}Thumbnail").Element("{urn:yahoo:srchmi}Url").Value,
                             ThumbHeight = int.Parse(image.Element("{urn:yahoo:srchmi}Thumbnail").Element("{urn:yahoo:srchmi}Height").Value),
                             ThumbWidth = int.Parse(image.Element("{urn:yahoo:srchmi}Thumbnail").Element("{urn:yahoo:srchmi}Width").Value),
                             Summary = image.Element("{urn:yahoo:srchmi}Summary").Value
                         };
            //Clear old results
            stackPanel1.Children.Clear();
            foreach (var im in imageArray)
            {
                //Show image on button
                Image image = new Image();
                ImageSourceConverter isc = new ImageSourceConverter();
                image.Source = (ImageSource)isc.ConvertFromString(im.Thumbnail);

                Button b = new Button();
                b.Content = image;
                b.Width = im.ThumbWidth;
                b.Height = im.ThumbHeight;
                b.Tag = im.LargeUrl;
                b.ToolTip = im.Title + "\n\n" + im.Summary;

                b.Click += delegate(object clicked_button, RoutedEventArgs evt_args)
                    {
                        Object missing = System.Reflection.Missing.Value;
                        //On click, add image to word document
                        try
                        {
                            Globals.ThisAddIn.Application.Selection.InlineShapes.AddPicture(
                                (clicked_button as Button).Tag.ToString(), ref missing, ref missing, ref missing);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, ex.GetType().Name);
                            Globals.ThisAddIn.CustomTaskPanes.RemoveAt(0);
                        }
                    };
                stackPanel1.Children.Add(b);
            }
            //Choose paging buttons to display
            if (imageArray.Count() < 20)
                buttonForward.Visibility = Visibility.Collapsed;
            else
                buttonForward.Visibility = Visibility.Visible;
            if (startVal > 1)
                buttonBack.Visibility = Visibility.Visible;
            else
                buttonBack.Visibility = Visibility.Collapsed;

        }

    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
United Kingdom United Kingdom
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions