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

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

machine statistics

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