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

Last change on this file since 2304 was 2304, checked in by nolte, 11 years ago

Added Tooltips to the Keysearcher Statistics view:
Users -> Subtreebar-Tooltip shows last Date
Machines -> Bar-Tooltip shows Usernames working with this Maschine

Reorganised some code.

File size: 6.4 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            ((MachineSumToProgressConverter)Resources["MachineSumToProgressConverter"]).StatisticsPresentation = this;
35        }
36
37        private Dictionary<string, Dictionary<long, Information>> statistics = null;
38        public Dictionary<string, Dictionary<long, Information>> Statistics
39        {
40            get { return statistics; }
41            set
42            {
43                statistics = value;
44                Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
45                                               {
46                                                   var orderedstats = statistics.OrderByDescending((x) => x.Value.Sum((z) => z.Value.Count));
47                                                   statisticsTree.DataContext = orderedstats;
48                                                   statisticsTree.Items.Refresh();
49                                                }, null);
50
51            }
52        }
53
54        private Dictionary<long, Maschinfo> machineHierarchy = null;
55        public Dictionary<long, Maschinfo> MachineHierarchy
56        {
57            get { return machineHierarchy; }
58            set
59            { 
60                machineHierarchy = value;
61                Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
62                                                {
63                                                    //var orderedstats = machineHierarchy.OrderByDescending((x) => x.Value.Sum);
64                                                    machineTree.DataContext = machineHierarchy;
65                                                    machineTree.Items.Refresh();
66                                                }, null);
67            }
68        }
69    }
70
71    #region Converters
72    [ValueConversion(typeof(Dictionary<long, Information>), typeof(Double))]
73    class InformationToProgressConverter : IValueConverter
74    {
75        public StatisticsPresentation StatisticsPresentation { get; set; }
76
77        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
78        {
79            if (StatisticsPresentation != null)
80            {
81                double allCount = (StatisticsPresentation.Statistics).Sum(i => i.Value.Sum(j => j.Value.Count));
82                double vCount = ((Dictionary<long, Information>)value).Sum(i => i.Value.Count);
83                return vCount / allCount;
84            }
85            else
86            {
87                return 0;
88            }
89        }
90
91        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
92        {
93            throw new NotImplementedException();
94        }
95    }
96
97    [ValueConversion(typeof(Dictionary<long, Information>), typeof(Double))]
98    class MachineSumToProgressConverter : IValueConverter
99    {
100        public StatisticsPresentation StatisticsPresentation { get; set; }
101
102        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
103        {
104            if (StatisticsPresentation != null)
105            {
106                double allCount = (StatisticsPresentation.MachineHierarchy).Sum(i => i.Value.Sum);
107                double vCount = (int)value;
108                return vCount / allCount;
109            }
110            else
111            {
112                return 0;
113            }
114        }
115
116        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
117        {
118            throw new NotImplementedException();
119        }
120    }
121
122    [ValueConversion(typeof(string), typeof(Double))]
123    class ChunkSumConverter : IValueConverter
124    {
125        public StatisticsPresentation StatisticsPresentation { get; set; }
126
127        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
128        {
129            if (StatisticsPresentation != null)
130            {
131                string key = (string)value;
132                var data = (StatisticsPresentation.Statistics)[key];
133                return data.Sum(i => i.Value.Count);
134            }
135            else
136            {
137                return 0;
138            }
139        }
140
141        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
142        {
143            throw new NotImplementedException();
144        }
145    }
146
147    [ValueConversion(typeof(Int32), typeof(Double))]
148    class InformationToProgressConverter2 : IValueConverter
149    {
150        public StatisticsPresentation StatisticsPresentation { get; set; }
151
152        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
153        {
154            if (StatisticsPresentation != null)
155            {
156                double allCount = (StatisticsPresentation.Statistics).Sum(i => i.Value.Sum(j => j.Value.Count));
157                return (int)value / allCount;
158            }
159            else
160            {
161                return 0;
162            }
163        }
164
165        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
166        {
167            throw new NotImplementedException();
168        }
169    }
170    #endregion
171
172}
Note: See TracBrowser for help on using the repository browser.