Statistics
| Branch: | Revision:

root / trunk / Pithos.Client.WPF / Shell / PithosBalloon.xaml.cs @ b449fa49

History | View | Annotate | Download (4.1 kB)

1 fb9d6e00 Panagiotis Kanavos
using System;
2 fb9d6e00 Panagiotis Kanavos
using System.Collections.Generic;
3 fb9d6e00 Panagiotis Kanavos
using System.Linq;
4 fb9d6e00 Panagiotis Kanavos
using System.Text;
5 fb9d6e00 Panagiotis Kanavos
using System.Windows;
6 fb9d6e00 Panagiotis Kanavos
using System.Windows.Controls;
7 fb9d6e00 Panagiotis Kanavos
using System.Windows.Controls.Primitives;
8 fb9d6e00 Panagiotis Kanavos
using System.Windows.Data;
9 fb9d6e00 Panagiotis Kanavos
using System.Windows.Documents;
10 fb9d6e00 Panagiotis Kanavos
using System.Windows.Input;
11 fb9d6e00 Panagiotis Kanavos
using System.Windows.Media;
12 fb9d6e00 Panagiotis Kanavos
using System.Windows.Media.Imaging;
13 fb9d6e00 Panagiotis Kanavos
using System.Windows.Navigation;
14 fb9d6e00 Panagiotis Kanavos
using System.Windows.Shapes;
15 fb9d6e00 Panagiotis Kanavos
using Hardcodet.Wpf.TaskbarNotification;
16 fb9d6e00 Panagiotis Kanavos
17 fb9d6e00 Panagiotis Kanavos
namespace Pithos.Client.WPF.Shell
18 fb9d6e00 Panagiotis Kanavos
{
19 fb9d6e00 Panagiotis Kanavos
    /// <summary>
20 fb9d6e00 Panagiotis Kanavos
    /// Interaction logic for PithosBalloon.xaml
21 fb9d6e00 Panagiotis Kanavos
    /// </summary>
22 fb9d6e00 Panagiotis Kanavos
    public partial class PithosBalloon : UserControl
23 fb9d6e00 Panagiotis Kanavos
    {
24 fb9d6e00 Panagiotis Kanavos
        private bool isClosing = false;
25 fb9d6e00 Panagiotis Kanavos
  
26 2dc6f765 Panagiotis Kanavos
      #region Message dependency property
27 fb9d6e00 Panagiotis Kanavos
  
28 2dc6f765 Panagiotis Kanavos
      public static readonly DependencyProperty MessageProperty =
29 2dc6f765 Panagiotis Kanavos
          DependencyProperty.Register("Message",
30 2dc6f765 Panagiotis Kanavos
                                      typeof (string),
31 2dc6f765 Panagiotis Kanavos
                                      typeof (PithosBalloon),
32 2dc6f765 Panagiotis Kanavos
                                      new FrameworkPropertyMetadata(""));
33 2dc6f765 Panagiotis Kanavos
      public static readonly DependencyProperty TitleProperty =
34 2dc6f765 Panagiotis Kanavos
          DependencyProperty.Register("Title",
35 fb9d6e00 Panagiotis Kanavos
                                      typeof (string),
36 fb9d6e00 Panagiotis Kanavos
                                      typeof (PithosBalloon),
37 fb9d6e00 Panagiotis Kanavos
                                      new FrameworkPropertyMetadata(""));
38 2dc6f765 Panagiotis Kanavos
      public static readonly DependencyProperty IconProperty =
39 2dc6f765 Panagiotis Kanavos
          DependencyProperty.Register("Icon",
40 2dc6f765 Panagiotis Kanavos
                                      typeof (BalloonIcon),
41 2dc6f765 Panagiotis Kanavos
                                      typeof (PithosBalloon),
42 2dc6f765 Panagiotis Kanavos
                                      new FrameworkPropertyMetadata(BalloonIcon.None));
43 fb9d6e00 Panagiotis Kanavos
  
44 2dc6f765 Panagiotis Kanavos
      public string Message
45 fb9d6e00 Panagiotis Kanavos
      {
46 2dc6f765 Panagiotis Kanavos
        get { return (string) GetValue(MessageProperty); }
47 2dc6f765 Panagiotis Kanavos
        set { SetValue(MessageProperty, value); }
48 2dc6f765 Panagiotis Kanavos
      }
49 2dc6f765 Panagiotis Kanavos
50 2dc6f765 Panagiotis Kanavos
      public BalloonIcon Icon
51 2dc6f765 Panagiotis Kanavos
      {
52 2dc6f765 Panagiotis Kanavos
        get { return (BalloonIcon) GetValue(IconProperty); }
53 2dc6f765 Panagiotis Kanavos
        set { 
54 2dc6f765 Panagiotis Kanavos
            SetValue(IconProperty, value);            
55 2dc6f765 Panagiotis Kanavos
        }
56 2dc6f765 Panagiotis Kanavos
      }
57 2dc6f765 Panagiotis Kanavos
58 2dc6f765 Panagiotis Kanavos
        public string Title
59 2dc6f765 Panagiotis Kanavos
      {
60 2dc6f765 Panagiotis Kanavos
        get { return (string) GetValue(TitleProperty); }
61 2dc6f765 Panagiotis Kanavos
        set { SetValue(TitleProperty, value); }
62 fb9d6e00 Panagiotis Kanavos
      }
63 fb9d6e00 Panagiotis Kanavos
  
64 2dc6f765 Panagiotis Kanavos
65 2dc6f765 Panagiotis Kanavos
       
66 fb9d6e00 Panagiotis Kanavos
      #endregion
67 fb9d6e00 Panagiotis Kanavos
68 fb9d6e00 Panagiotis Kanavos
69 fb9d6e00 Panagiotis Kanavos
      public PithosBalloon()
70 fb9d6e00 Panagiotis Kanavos
      {
71 fb9d6e00 Panagiotis Kanavos
        InitializeComponent();
72 2dc6f765 Panagiotis Kanavos
          this.DataContext = this;
73 fb9d6e00 Panagiotis Kanavos
        TaskbarIcon.AddBalloonClosingHandler(this, OnBalloonClosing);
74 fb9d6e00 Panagiotis Kanavos
      }
75 fb9d6e00 Panagiotis Kanavos
  
76 fb9d6e00 Panagiotis Kanavos
  
77 fb9d6e00 Panagiotis Kanavos
      /// <summary>
78 fb9d6e00 Panagiotis Kanavos
      /// By subscribing to the <see cref="TaskbarIcon.BalloonClosingEvent"/>
79 fb9d6e00 Panagiotis Kanavos
      /// and setting the "Handled" property to true, we suppress the popup
80 fb9d6e00 Panagiotis Kanavos
      /// from being closed in order to display the fade-out animation.
81 fb9d6e00 Panagiotis Kanavos
      /// </summary>
82 fb9d6e00 Panagiotis Kanavos
      private void OnBalloonClosing(object sender, RoutedEventArgs e)
83 fb9d6e00 Panagiotis Kanavos
      {
84 fb9d6e00 Panagiotis Kanavos
        e.Handled = true;
85 fb9d6e00 Panagiotis Kanavos
        isClosing = true;
86 fb9d6e00 Panagiotis Kanavos
      }
87 fb9d6e00 Panagiotis Kanavos
  
88 fb9d6e00 Panagiotis Kanavos
  
89 fb9d6e00 Panagiotis Kanavos
      /// <summary>
90 fb9d6e00 Panagiotis Kanavos
      /// Resolves the <see cref="TaskbarIcon"/> that displayed
91 fb9d6e00 Panagiotis Kanavos
      /// the balloon and requests a close action.
92 fb9d6e00 Panagiotis Kanavos
      /// </summary>
93 fb9d6e00 Panagiotis Kanavos
      private void imgClose_MouseDown(object sender, MouseButtonEventArgs e)
94 fb9d6e00 Panagiotis Kanavos
      {
95 fb9d6e00 Panagiotis Kanavos
        //the tray icon assigned this attached property to simplify access
96 fb9d6e00 Panagiotis Kanavos
        TaskbarIcon taskbarIcon = TaskbarIcon.GetParentTaskbarIcon(this);
97 fb9d6e00 Panagiotis Kanavos
        taskbarIcon.CloseBalloon();
98 fb9d6e00 Panagiotis Kanavos
      }
99 fb9d6e00 Panagiotis Kanavos
  
100 fb9d6e00 Panagiotis Kanavos
      /// <summary>
101 fb9d6e00 Panagiotis Kanavos
      /// If the users hovers over the balloon, we don't close it.
102 fb9d6e00 Panagiotis Kanavos
      /// </summary>
103 fb9d6e00 Panagiotis Kanavos
      private void grid_MouseEnter(object sender, MouseEventArgs e)
104 fb9d6e00 Panagiotis Kanavos
      {
105 fb9d6e00 Panagiotis Kanavos
        //if we're already running the fade-out animation, do not interrupt anymore
106 fb9d6e00 Panagiotis Kanavos
        //(makes things too complicated for the sample)
107 fb9d6e00 Panagiotis Kanavos
        if (isClosing) return;
108 fb9d6e00 Panagiotis Kanavos
  
109 fb9d6e00 Panagiotis Kanavos
        //the tray icon assigned this attached property to simplify access
110 fb9d6e00 Panagiotis Kanavos
        TaskbarIcon taskbarIcon = TaskbarIcon.GetParentTaskbarIcon(this);
111 fb9d6e00 Panagiotis Kanavos
        taskbarIcon.ResetBalloonCloseTimer();
112 fb9d6e00 Panagiotis Kanavos
      }
113 fb9d6e00 Panagiotis Kanavos
  
114 fb9d6e00 Panagiotis Kanavos
  
115 fb9d6e00 Panagiotis Kanavos
      /// <summary>
116 fb9d6e00 Panagiotis Kanavos
      /// Closes the popup once the fade-out animation completed.
117 fb9d6e00 Panagiotis Kanavos
      /// The animation was triggered in XAML through the attached
118 fb9d6e00 Panagiotis Kanavos
      /// BalloonClosing event.
119 fb9d6e00 Panagiotis Kanavos
      /// </summary>
120 fb9d6e00 Panagiotis Kanavos
      private void OnFadeOutCompleted(object sender, EventArgs e)
121 fb9d6e00 Panagiotis Kanavos
      {
122 fb9d6e00 Panagiotis Kanavos
        Popup pp = (Popup)Parent;
123 fb9d6e00 Panagiotis Kanavos
        pp.IsOpen = false;
124 fb9d6e00 Panagiotis Kanavos
      }
125 fb9d6e00 Panagiotis Kanavos
   }
126 fb9d6e00 Panagiotis Kanavos
}