Statistics
| Branch: | Revision:

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

History | View | Annotate | Download (6.4 kB)

1 255f5f86 Panagiotis Kanavos
#region
2 255f5f86 Panagiotis Kanavos
/* -----------------------------------------------------------------------
3 255f5f86 Panagiotis Kanavos
 * <copyright file="PithosBalloon.xaml.cs" company="GRNet">
4 255f5f86 Panagiotis Kanavos
 * 
5 255f5f86 Panagiotis Kanavos
 * Copyright 2011-2012 GRNET S.A. All rights reserved.
6 255f5f86 Panagiotis Kanavos
 *
7 255f5f86 Panagiotis Kanavos
 * Redistribution and use in source and binary forms, with or
8 255f5f86 Panagiotis Kanavos
 * without modification, are permitted provided that the following
9 255f5f86 Panagiotis Kanavos
 * conditions are met:
10 255f5f86 Panagiotis Kanavos
 *
11 255f5f86 Panagiotis Kanavos
 *   1. Redistributions of source code must retain the above
12 255f5f86 Panagiotis Kanavos
 *      copyright notice, this list of conditions and the following
13 255f5f86 Panagiotis Kanavos
 *      disclaimer.
14 255f5f86 Panagiotis Kanavos
 *
15 255f5f86 Panagiotis Kanavos
 *   2. Redistributions in binary form must reproduce the above
16 255f5f86 Panagiotis Kanavos
 *      copyright notice, this list of conditions and the following
17 255f5f86 Panagiotis Kanavos
 *      disclaimer in the documentation and/or other materials
18 255f5f86 Panagiotis Kanavos
 *      provided with the distribution.
19 255f5f86 Panagiotis Kanavos
 *
20 255f5f86 Panagiotis Kanavos
 *
21 255f5f86 Panagiotis Kanavos
 * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
22 255f5f86 Panagiotis Kanavos
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23 255f5f86 Panagiotis Kanavos
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 255f5f86 Panagiotis Kanavos
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
25 255f5f86 Panagiotis Kanavos
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 255f5f86 Panagiotis Kanavos
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 255f5f86 Panagiotis Kanavos
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
28 255f5f86 Panagiotis Kanavos
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29 255f5f86 Panagiotis Kanavos
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 255f5f86 Panagiotis Kanavos
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 255f5f86 Panagiotis Kanavos
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 255f5f86 Panagiotis Kanavos
 * POSSIBILITY OF SUCH DAMAGE.
33 255f5f86 Panagiotis Kanavos
 *
34 255f5f86 Panagiotis Kanavos
 * The views and conclusions contained in the software and
35 255f5f86 Panagiotis Kanavos
 * documentation are those of the authors and should not be
36 255f5f86 Panagiotis Kanavos
 * interpreted as representing official policies, either expressed
37 255f5f86 Panagiotis Kanavos
 * or implied, of GRNET S.A.
38 255f5f86 Panagiotis Kanavos
 * </copyright>
39 255f5f86 Panagiotis Kanavos
 * -----------------------------------------------------------------------
40 255f5f86 Panagiotis Kanavos
 */
41 255f5f86 Panagiotis Kanavos
#endregion
42 255f5f86 Panagiotis Kanavos
using System;
43 fb9d6e00 Panagiotis Kanavos
using System.Collections.Generic;
44 fb9d6e00 Panagiotis Kanavos
using System.Linq;
45 fb9d6e00 Panagiotis Kanavos
using System.Text;
46 fb9d6e00 Panagiotis Kanavos
using System.Windows;
47 fb9d6e00 Panagiotis Kanavos
using System.Windows.Controls;
48 fb9d6e00 Panagiotis Kanavos
using System.Windows.Controls.Primitives;
49 fb9d6e00 Panagiotis Kanavos
using System.Windows.Data;
50 fb9d6e00 Panagiotis Kanavos
using System.Windows.Documents;
51 fb9d6e00 Panagiotis Kanavos
using System.Windows.Input;
52 fb9d6e00 Panagiotis Kanavos
using System.Windows.Media;
53 fb9d6e00 Panagiotis Kanavos
using System.Windows.Media.Imaging;
54 fb9d6e00 Panagiotis Kanavos
using System.Windows.Navigation;
55 fb9d6e00 Panagiotis Kanavos
using System.Windows.Shapes;
56 fb9d6e00 Panagiotis Kanavos
using Hardcodet.Wpf.TaskbarNotification;
57 fb9d6e00 Panagiotis Kanavos
58 fb9d6e00 Panagiotis Kanavos
namespace Pithos.Client.WPF.Shell
59 fb9d6e00 Panagiotis Kanavos
{
60 fb9d6e00 Panagiotis Kanavos
    /// <summary>
61 fb9d6e00 Panagiotis Kanavos
    /// Interaction logic for PithosBalloon.xaml
62 fb9d6e00 Panagiotis Kanavos
    /// </summary>
63 fb9d6e00 Panagiotis Kanavos
    public partial class PithosBalloon : UserControl
64 fb9d6e00 Panagiotis Kanavos
    {
65 fb9d6e00 Panagiotis Kanavos
        private bool isClosing = false;
66 fb9d6e00 Panagiotis Kanavos
  
67 2dc6f765 Panagiotis Kanavos
      #region Message dependency property
68 fb9d6e00 Panagiotis Kanavos
  
69 2dc6f765 Panagiotis Kanavos
      public static readonly DependencyProperty MessageProperty =
70 2dc6f765 Panagiotis Kanavos
          DependencyProperty.Register("Message",
71 2dc6f765 Panagiotis Kanavos
                                      typeof (string),
72 2dc6f765 Panagiotis Kanavos
                                      typeof (PithosBalloon),
73 2dc6f765 Panagiotis Kanavos
                                      new FrameworkPropertyMetadata(""));
74 2dc6f765 Panagiotis Kanavos
      public static readonly DependencyProperty TitleProperty =
75 2dc6f765 Panagiotis Kanavos
          DependencyProperty.Register("Title",
76 fb9d6e00 Panagiotis Kanavos
                                      typeof (string),
77 fb9d6e00 Panagiotis Kanavos
                                      typeof (PithosBalloon),
78 fb9d6e00 Panagiotis Kanavos
                                      new FrameworkPropertyMetadata(""));
79 2dc6f765 Panagiotis Kanavos
      public static readonly DependencyProperty IconProperty =
80 2dc6f765 Panagiotis Kanavos
          DependencyProperty.Register("Icon",
81 2dc6f765 Panagiotis Kanavos
                                      typeof (BalloonIcon),
82 2dc6f765 Panagiotis Kanavos
                                      typeof (PithosBalloon),
83 2dc6f765 Panagiotis Kanavos
                                      new FrameworkPropertyMetadata(BalloonIcon.None));
84 fb9d6e00 Panagiotis Kanavos
  
85 2dc6f765 Panagiotis Kanavos
      public string Message
86 fb9d6e00 Panagiotis Kanavos
      {
87 2dc6f765 Panagiotis Kanavos
        get { return (string) GetValue(MessageProperty); }
88 2dc6f765 Panagiotis Kanavos
        set { SetValue(MessageProperty, value); }
89 2dc6f765 Panagiotis Kanavos
      }
90 2dc6f765 Panagiotis Kanavos
91 2dc6f765 Panagiotis Kanavos
      public BalloonIcon Icon
92 2dc6f765 Panagiotis Kanavos
      {
93 2dc6f765 Panagiotis Kanavos
        get { return (BalloonIcon) GetValue(IconProperty); }
94 2dc6f765 Panagiotis Kanavos
        set { 
95 2dc6f765 Panagiotis Kanavos
            SetValue(IconProperty, value);            
96 2dc6f765 Panagiotis Kanavos
        }
97 2dc6f765 Panagiotis Kanavos
      }
98 2dc6f765 Panagiotis Kanavos
99 2dc6f765 Panagiotis Kanavos
        public string Title
100 2dc6f765 Panagiotis Kanavos
      {
101 2dc6f765 Panagiotis Kanavos
        get { return (string) GetValue(TitleProperty); }
102 2dc6f765 Panagiotis Kanavos
        set { SetValue(TitleProperty, value); }
103 fb9d6e00 Panagiotis Kanavos
      }
104 fb9d6e00 Panagiotis Kanavos
  
105 2dc6f765 Panagiotis Kanavos
106 2dc6f765 Panagiotis Kanavos
       
107 fb9d6e00 Panagiotis Kanavos
      #endregion
108 fb9d6e00 Panagiotis Kanavos
109 fb9d6e00 Panagiotis Kanavos
110 fb9d6e00 Panagiotis Kanavos
      public PithosBalloon()
111 fb9d6e00 Panagiotis Kanavos
      {
112 fb9d6e00 Panagiotis Kanavos
        InitializeComponent();
113 2dc6f765 Panagiotis Kanavos
          this.DataContext = this;
114 fb9d6e00 Panagiotis Kanavos
        TaskbarIcon.AddBalloonClosingHandler(this, OnBalloonClosing);
115 fb9d6e00 Panagiotis Kanavos
      }
116 fb9d6e00 Panagiotis Kanavos
  
117 fb9d6e00 Panagiotis Kanavos
  
118 fb9d6e00 Panagiotis Kanavos
      /// <summary>
119 fb9d6e00 Panagiotis Kanavos
      /// By subscribing to the <see cref="TaskbarIcon.BalloonClosingEvent"/>
120 fb9d6e00 Panagiotis Kanavos
      /// and setting the "Handled" property to true, we suppress the popup
121 fb9d6e00 Panagiotis Kanavos
      /// from being closed in order to display the fade-out animation.
122 fb9d6e00 Panagiotis Kanavos
      /// </summary>
123 fb9d6e00 Panagiotis Kanavos
      private void OnBalloonClosing(object sender, RoutedEventArgs e)
124 fb9d6e00 Panagiotis Kanavos
      {
125 fb9d6e00 Panagiotis Kanavos
        e.Handled = true;
126 fb9d6e00 Panagiotis Kanavos
        isClosing = true;
127 fb9d6e00 Panagiotis Kanavos
      }
128 fb9d6e00 Panagiotis Kanavos
  
129 fb9d6e00 Panagiotis Kanavos
  
130 fb9d6e00 Panagiotis Kanavos
      /// <summary>
131 fb9d6e00 Panagiotis Kanavos
      /// Resolves the <see cref="TaskbarIcon"/> that displayed
132 fb9d6e00 Panagiotis Kanavos
      /// the balloon and requests a close action.
133 fb9d6e00 Panagiotis Kanavos
      /// </summary>
134 fb9d6e00 Panagiotis Kanavos
      private void imgClose_MouseDown(object sender, MouseButtonEventArgs e)
135 fb9d6e00 Panagiotis Kanavos
      {
136 f2d88248 Panagiotis Kanavos
          //the tray icon assigned this attached property to simplify access
137 f2d88248 Panagiotis Kanavos
          CloseBalloon();
138 fb9d6e00 Panagiotis Kanavos
      }
139 f2d88248 Panagiotis Kanavos
140 f2d88248 Panagiotis Kanavos
        private void CloseBalloon()
141 f2d88248 Panagiotis Kanavos
        {
142 f2d88248 Panagiotis Kanavos
            TaskbarIcon taskbarIcon = TaskbarIcon.GetParentTaskbarIcon(this);
143 f2d88248 Panagiotis Kanavos
            taskbarIcon.CloseBalloon();
144 f2d88248 Panagiotis Kanavos
        }
145 f2d88248 Panagiotis Kanavos
146 f2d88248 Panagiotis Kanavos
        /// <summary>
147 fb9d6e00 Panagiotis Kanavos
      /// If the users hovers over the balloon, we don't close it.
148 fb9d6e00 Panagiotis Kanavos
      /// </summary>
149 fb9d6e00 Panagiotis Kanavos
      private void grid_MouseEnter(object sender, MouseEventArgs e)
150 fb9d6e00 Panagiotis Kanavos
      {
151 fb9d6e00 Panagiotis Kanavos
        //if we're already running the fade-out animation, do not interrupt anymore
152 fb9d6e00 Panagiotis Kanavos
        //(makes things too complicated for the sample)
153 fb9d6e00 Panagiotis Kanavos
        if (isClosing) return;
154 fb9d6e00 Panagiotis Kanavos
  
155 fb9d6e00 Panagiotis Kanavos
        //the tray icon assigned this attached property to simplify access
156 fb9d6e00 Panagiotis Kanavos
        TaskbarIcon taskbarIcon = TaskbarIcon.GetParentTaskbarIcon(this);
157 fb9d6e00 Panagiotis Kanavos
        taskbarIcon.ResetBalloonCloseTimer();
158 fb9d6e00 Panagiotis Kanavos
      }
159 fb9d6e00 Panagiotis Kanavos
  
160 fb9d6e00 Panagiotis Kanavos
  
161 fb9d6e00 Panagiotis Kanavos
      /// <summary>
162 fb9d6e00 Panagiotis Kanavos
      /// Closes the popup once the fade-out animation completed.
163 fb9d6e00 Panagiotis Kanavos
      /// The animation was triggered in XAML through the attached
164 fb9d6e00 Panagiotis Kanavos
      /// BalloonClosing event.
165 fb9d6e00 Panagiotis Kanavos
      /// </summary>
166 fb9d6e00 Panagiotis Kanavos
      private void OnFadeOutCompleted(object sender, EventArgs e)
167 fb9d6e00 Panagiotis Kanavos
      {
168 fb9d6e00 Panagiotis Kanavos
        Popup pp = (Popup)Parent;
169 fb9d6e00 Panagiotis Kanavos
        pp.IsOpen = false;
170 fb9d6e00 Panagiotis Kanavos
      }
171 f2d88248 Panagiotis Kanavos
172 f2d88248 Panagiotis Kanavos
      private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
173 f2d88248 Panagiotis Kanavos
      {
174 f2d88248 Panagiotis Kanavos
          CloseBalloon();
175 f2d88248 Panagiotis Kanavos
          if (ClickAction!= null)
176 f2d88248 Panagiotis Kanavos
          {
177 f2d88248 Panagiotis Kanavos
              ClickAction();
178 f2d88248 Panagiotis Kanavos
          }          
179 f2d88248 Panagiotis Kanavos
          
180 f2d88248 Panagiotis Kanavos
      }
181 f2d88248 Panagiotis Kanavos
182 f2d88248 Panagiotis Kanavos
      public Action ClickAction { get; set; }
183 fb9d6e00 Panagiotis Kanavos
   }
184 fb9d6e00 Panagiotis Kanavos
}