source: trunk/CrypPlugins/KeySearcher/Presentation/Controls/StatisticsPresentation.xaml.cs @ 2498

Last change on this file since 2498 was 2498, checked in by Sven Rech, 11 years ago

hopefully fixes #194

File size: 11.5 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Globalization;
5using System.Linq;
6using System.Text;
7using System.Threading;
8using System.Windows;
9using System.Windows.Controls;
10using System.Windows.Data;
11using System.Windows.Documents;
12using System.Windows.Input;
13using System.Windows.Media;
14using System.Windows.Media.Imaging;
15using System.Windows.Navigation;
16using System.Windows.Shapes;
17using System.Windows.Threading;
18using KeySearcher;
19
20namespace KeySearcherPresentation.Controls
21{
22    /// <summary>
23    /// Interaction logic for StatisticsPresentation.xaml
24    /// </summary>
25    [Cryptool.PluginBase.Attributes.Localization("KeySearcher.Properties.Resources")]
26    public partial class StatisticsPresentation : UserControl
27    {
28        public StatisticsPresentation()
29        {
30            InitializeComponent();
31            ((InformationToProgressConverter)Resources["InformationToProgressConverter"]).StatisticsPresentation = this;
32            ((InformationToProgressConverter2)Resources["InformationToProgressConverter2"]).StatisticsPresentation = this;
33            ((ChunkSumConverter)Resources["ChunkSumConverter"]).StatisticsPresentation = this;
34            ((StringLengthConverter)Resources["StringLengthConverter"]).StatisticsPresentation = this;
35            ((MachineSumToProgressConverter)Resources["MachineSumToProgressConverter"]).StatisticsPresentation = this;
36        }
37
38        private Dictionary<string, Dictionary<long, Information>> statistics = null;
39        public Dictionary<string, Dictionary<long, Information>> Statistics
40        {
41            get { return statistics; }
42            set
43            {
44                lock (this)
45                {
46                    statistics = value;
47                }
48                if (statistics != null)
49                    Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
50                                               {
51                                                   if (statistics != null)
52                                                   {
53                                                       var orderedstats = statistics.OrderByDescending((x) => x.Value.Sum((z) => z.Value.Count));
54                                                       statisticsTree.DataContext = orderedstats;
55                                                       statisticsTree.Items.Refresh();
56                                                   }
57                                               }, null);
58
59            }
60        }
61
62        private Dictionary<long, Maschinfo> machineHierarchy = null;
63        public Dictionary<long, Maschinfo> MachineHierarchy
64        {
65            get { return machineHierarchy; }
66            set
67            {
68                lock (this)
69                {
70                    machineHierarchy = value;
71                }
72                Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
73                                                {
74                                                    machineTree.DataContext = machineHierarchy;
75                                                    machineTree.Items.Refresh();
76                                                }, null);
77            }
78        }
79
80        private void Button_Click(object sender, RoutedEventArgs e)
81        {
82            Button b = sender as Button;
83
84            if(statisticsTree.ItemContainerStyle == null)
85            {
86                b.Content = "Expand";
87                statisticsTree.ItemContainerStyle = this.Resources["ItemStyle2"] as Style;
88            }
89
90            if (statisticsTree.ItemContainerStyle.Equals(this.Resources["ItemStyle"] as Style))
91            {
92                b.Content = "Expand";
93                statisticsTree.ItemContainerStyle = this.Resources["ItemStyle2"] as Style;
94                return;
95            }
96
97            if (statisticsTree.ItemContainerStyle.Equals(this.Resources["ItemStyle2"] as Style))
98            {
99                b.Content = "Collapse";
100                statisticsTree.ItemContainerStyle = this.Resources["ItemStyle"] as Style;
101                return;
102            }
103        }
104    }
105
106    #region Converters
107    [ValueConversion(typeof(Dictionary<long, Information>), typeof(Double))]
108    class InformationToProgressConverter : IValueConverter
109    {
110        public StatisticsPresentation StatisticsPresentation { get; set; }
111
112        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
113        {
114            if (StatisticsPresentation != null && StatisticsPresentation.Statistics != null)
115            {
116                lock (StatisticsPresentation)
117                {
118                    double allCount = (StatisticsPresentation.Statistics).Sum(i => i.Value.Sum(j => j.Value.Count));
119                    double vCount = ((Dictionary<long, Information>) value).Sum(i => i.Value.Count);
120                    return vCount/allCount;
121                }
122            }
123            else
124            {
125                return 0;
126            }
127        }
128
129        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
130        {
131            throw new NotImplementedException();
132        }
133    }
134
135    [ValueConversion(typeof(Dictionary<long, Information>), typeof(Double))]
136    class MachineSumToProgressConverter : IValueConverter
137    {
138        public StatisticsPresentation StatisticsPresentation { get; set; }
139
140        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
141        {
142            if (StatisticsPresentation != null && StatisticsPresentation.MachineHierarchy != null)
143            {
144                lock (StatisticsPresentation)
145                {
146                    double allCount = (StatisticsPresentation.MachineHierarchy).Sum(i => i.Value.Sum);
147                    double vCount = (int) value;
148                    return vCount/allCount;
149                }
150            }
151            else
152            {
153                return 0;
154            }
155        }
156
157        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
158        {
159            throw new NotImplementedException();
160        }
161    }
162
163    [ValueConversion(typeof(string), typeof(Double))]
164    class ChunkSumConverter : IValueConverter
165    {
166        public StatisticsPresentation StatisticsPresentation { get; set; }
167
168        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
169        {
170            if (StatisticsPresentation != null && StatisticsPresentation.Statistics != null)
171            {
172                lock (StatisticsPresentation)
173                {
174                    string key = (string) value;
175                    var data = (StatisticsPresentation.Statistics)[key];
176                    return data.Sum(i => i.Value.Count);
177                }
178            }
179            else
180            {
181                return 0;
182            }
183        }
184
185        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
186        {
187            throw new NotImplementedException();
188        }
189    }
190
191    [ValueConversion(typeof(string), typeof(string))]
192    class StringLengthConverter : IValueConverter
193    {
194        public StatisticsPresentation StatisticsPresentation { get; set; }
195
196        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
197        {
198            if (StatisticsPresentation != null)
199            {
200                string name = (string)value;
201               
202                if(name.Length < 13)
203                {
204                    return name;
205                }
206                else
207                {
208                    return string.Format("{0}...", name.Substring(0, 9));
209                }
210            }
211            else
212            {
213                return "";
214            }
215        }
216
217        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
218        {
219            throw new NotImplementedException();
220        }
221    }
222
223    [ValueConversion(typeof(Int32), typeof(Double))]
224    class InformationToProgressConverter2 : IValueConverter
225    {
226        public StatisticsPresentation StatisticsPresentation { get; set; }
227
228        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
229        {
230            if (StatisticsPresentation != null && StatisticsPresentation.Statistics != null)
231            {
232                lock (StatisticsPresentation)
233                {
234                    double allCount = (StatisticsPresentation.Statistics).Sum(i => i.Value.Sum(j => j.Value.Count));
235                    return (int) value/allCount;
236                }
237            }
238            else
239            {
240                return 0;
241            }
242        }
243
244        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
245        {
246            throw new NotImplementedException();
247        }
248    }
249
250    public class ColorToDateConverter : IMultiValueConverter
251    {
252        public static SolidColorBrush[] AlternationColors = {Brushes.LimeGreen, Brushes.Red, Brushes.Blue};
253
254        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
255        {
256            DateTime date = (DateTime) values[0];
257            SolidColorBrush brush = ColorToDateConverter.AlternationColors[(int) values[1]].Clone();
258            TimeSpan diff = DateTime.UtcNow.Subtract(date);
259
260            Color color;
261            if (diff >= TimeSpan.FromDays(4))
262            {
263                color = Color.FromArgb(
264                    (byte)50,
265                    brush.Color.R, 
266                    brush.Color.G, 
267                    brush.Color.B);
268
269                brush.Color = color;
270                return brush;
271            }
272
273            if (diff >= TimeSpan.FromDays(3))
274            {
275                 color = Color.FromArgb(
276                    (byte)100,
277                    brush.Color.R, 
278                    brush.Color.G, 
279                    brush.Color.B);
280
281                brush.Color = color;
282                return brush;
283            }
284
285            if (diff >= TimeSpan.FromDays(2))
286            {
287                 color = Color.FromArgb(
288                    (byte)150,
289                    brush.Color.R, 
290                    brush.Color.G, 
291                    brush.Color.B);
292
293                brush.Color = color;
294                return brush;
295            }
296
297            if (diff >= TimeSpan.FromDays(1))
298            {
299                color = Color.FromArgb(
300                    (byte)200,
301                    brush.Color.R, 
302                    brush.Color.G, 
303                    brush.Color.B);
304
305                brush.Color = color;
306                return brush;
307            }
308
309            if (diff >= TimeSpan.FromDays(0))
310            {
311
312                color = Color.FromArgb(
313                    (byte)255,
314                    brush.Color.R,
315                    brush.Color.G,
316                    brush.Color.B);
317
318                brush.Color = color;
319                return brush;
320            }
321            return Brushes.AntiqueWhite;
322        }
323
324        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
325        {
326            throw new NotImplementedException();
327        }
328    }
329    #endregion
330
331}
Note: See TracBrowser for help on using the repository browser.