Ejemplo n.º 1
0
        static void name_Click(object sender, RoutedEventArgs e)
        {
            // The event handler in the main application can handle the click event in a custom
            // fashion (i.e., show the tweets in Witty or launch a URL, etc).  That behavior is
            // not implemented here.
            try
            {
                if (e.OriginalSource is Hyperlink)
                {
                    Hyperlink h = e.OriginalSource as Hyperlink;
                    if (h.Parent is TweetTextBlock)
                    {
                        TweetTextBlock p = h.Parent as TweetTextBlock;
                        p.RaiseEvent(new RoutedEventArgs(NameClickEvent, h));
                        return;
                    }
                }

                // As a fallback (i.e., if the event is not handled), we launch the hyperlink's
                // URL in a web browser

                System.Diagnostics.Process.Start(((Hyperlink)sender).NavigateUri.ToString());
            }
            catch
            {
                //TODO: Log specific URL that caused error
                MessageBox.Show("There was a problem launching the specified URL.", "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            }
        }
Ejemplo n.º 2
0
        static void hashtag_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (e.OriginalSource is Hyperlink)
                {
                    Hyperlink h = e.OriginalSource as Hyperlink;
                    if (h.Parent is TweetTextBlock)
                    {
                        TweetTextBlock p = h.Parent as TweetTextBlock;
                        p.RaiseEvent(new RoutedEventArgs(HashtagClickEvent, h));
                        return;
                    }
                }

                // As a fallback (i.e., if the event is not handled), we launch the hyperlink's
                // URL in a web browser

                System.Diagnostics.Process.Start(((Hyperlink)sender).NavigateUri.ToString());
            }
            catch
            {
                //TODO: Log specific URL that caused error
                MessageBox.Show("There was a problem launching the specified URL.", "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            }
        }
Ejemplo n.º 3
0
        public static TweetTextBlock FormatName(TweetTextBlock textblock, string word)
        {
            string userName    = String.Empty;
            string firstLetter = word.Substring(0, 1);

            Match foundUsername = Regex.Match(word, @"@(\w+)(?<suffix>.*)");



            if (foundUsername.Success)
            {
                userName = foundUsername.Groups[1].Captures[0].Value;
                Hyperlink name = new Hyperlink();
                name.Inlines.Add(userName);
                name.NavigateUri = new Uri("http://twitter.com/" + userName);
                name.ToolTip     = "View @" + userName + "'s recent tweets";
                name.Tag         = userName;

                name.Click += new RoutedEventHandler(name_Click);

                if (firstLetter != "@")
                {
                    textblock.Inlines.Add(firstLetter);
                }

                textblock.Inlines.Add("@");
                textblock.Inlines.Add(name);
                textblock.Inlines.Add(foundUsername.Groups["suffix"].Captures[0].Value);
            }
            return(textblock);
        }
Ejemplo n.º 4
0
        private static void OnTweetTextChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
        {
            string text = args.NewValue as string;

            if (!string.IsNullOrEmpty(text))
            {
                TweetTextBlock textblock = (TweetTextBlock)obj;
                textblock.Inlines.Clear();
                textblock.Inlines.Add(" ");

                string[] words = Regex.Split(text, @"([ \(\)\{\}\[\]])");

                string possibleUserName = words[0].ToString();

                if ((possibleUserName.Length > 1) && (possibleUserName.Substring(1, 1) == "@"))
                {
                    textblock = FormatName(textblock, possibleUserName);
                    words.SetValue("", 0);
                }

                foreach (string word in words)
                {
                    // clickable hyperlinks
                    if (UrlShorteningService.IsUrl(word))
                    {
                        try
                        {
                            Hyperlink link = new Hyperlink();
                            link.NavigateUri = new Uri(word);
                            link.Inlines.Add(word);
                            link.Click  += new RoutedEventHandler(link_Click);
                            link.ToolTip = "Open link in the default browser";
                            textblock.Inlines.Add(link);
                        }
                        catch
                        {
                            //TODO:What are we catching here? Why? Log it?
                            textblock.Inlines.Add(word);
                        }
                    }
                    // clickable @name
                    else if (word.StartsWith("@"))
                    {
                        textblock = FormatName(textblock, word);
                    }

                    // clickable #hashtag
                    else if (word.StartsWith("#"))
                    {
                        string hashtag      = String.Empty;
                        Match  foundHashtag = Regex.Match(word, @"#(\w+)(?<suffix>.*)");
                        if (foundHashtag.Success)
                        {
                            hashtag = foundHashtag.Groups[1].Captures[0].Value;
                            Hyperlink tag = new Hyperlink();
                            tag.Inlines.Add(hashtag);

                            string hashtagUrl = "http://search.twitter.com/search?q=%23{0}";

                            // The main application has access to the Settings class, where a
                            // user-defined hashtagUrl can be stored.  This hardcoded one that
                            // is used to set the NavigateUri is just a default behavior that
                            // will be used if the click event is not handled for some reason.

                            tag.NavigateUri = new Uri(String.Format(hashtagUrl, hashtag));
                            tag.ToolTip     = "Show statuses that include this hashtag";
                            tag.Tag         = hashtag;

                            tag.Click += new RoutedEventHandler(hashtag_Click);

                            textblock.Inlines.Add("#");
                            textblock.Inlines.Add(tag);
                            textblock.Inlines.Add(foundHashtag.Groups["suffix"].Captures[0].Value);
                        }
                    }
                    else
                    {
                        textblock.Inlines.Add(word);
                    }
                }

                textblock.Inlines.Add(" ");
            }
        }
Ejemplo n.º 5
0
        public static TweetTextBlock FormatName(TweetTextBlock textblock, string word)
        {
            string userName = String.Empty;
            string firstLetter = word.Substring(0, 1);

            Match foundUsername = Regex.Match(word, @"@(\w+)(?<suffix>.*)");
          
              

            if (foundUsername.Success)
            {
                userName = foundUsername.Groups[1].Captures[0].Value;
                Hyperlink name = new Hyperlink();
                name.Inlines.Add(userName);
                name.NavigateUri = new Uri("http://twitter.com/" + userName);
                name.ToolTip = "View @" + userName + "'s recent tweets";
                name.Tag = userName;

                name.Click += new RoutedEventHandler(name_Click);

                if (firstLetter != "@")
                    textblock.Inlines.Add(firstLetter);

                textblock.Inlines.Add("@");
                textblock.Inlines.Add(name);
                textblock.Inlines.Add(foundUsername.Groups["suffix"].Captures[0].Value);
            }
            return textblock;
        }