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 | } |