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

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

Keysearcher-Statistic view update.

File size: 7.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            ((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                statistics = value;
45                Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
46                                               {
47                                                   var orderedstats = statistics.OrderByDescending((x) => x.Value.Sum((z) => z.Value.Count));
48                                                   statisticsTree.DataContext = orderedstats;
49                                                   statisticsTree.Items.Refresh();
50                                                }, null);
51
52            }
53        }
54
55        private Dictionary<long, Maschinfo> machineHierarchy = null;
56        public Dictionary<long, Maschinfo> MachineHierarchy
57        {
58            get { return machineHierarchy; }
59            set
60            { 
61                machineHierarchy = value;
62                Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
63                                                {
64                                                    //var orderedstats = machineHierarchy.OrderByDescending((x) => x.Value.Sum);
65                                                    machineTree.DataContext = machineHierarchy;
66                                                    machineTree.Items.Refresh();
67                                                }, null);
68            }
69        }
70    }
71
72    #region Converters
73    [ValueConversion(typeof(Dictionary<long, Information>), typeof(Double))]
74    class InformationToProgressConverter : 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                double allCount = (StatisticsPresentation.Statistics).Sum(i => i.Value.Sum(j => j.Value.Count));
83                double vCount = ((Dictionary<long, Information>)value).Sum(i => i.Value.Count);
84                return vCount / allCount;
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(Dictionary<long, Information>), typeof(Double))]
99    class MachineSumToProgressConverter : 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.MachineHierarchy).Sum(i => i.Value.Sum);
108                double vCount = (int)value;
109                return vCount / allCount;
110            }
111            else
112            {
113                return 0;
114            }
115        }
116
117        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
118        {
119            throw new NotImplementedException();
120        }
121    }
122
123    [ValueConversion(typeof(string), typeof(Double))]
124    class ChunkSumConverter : IValueConverter
125    {
126        public StatisticsPresentation StatisticsPresentation { get; set; }
127
128        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
129        {
130            if (StatisticsPresentation != null)
131            {
132                string key = (string)value;
133                var data = (StatisticsPresentation.Statistics)[key];
134                return data.Sum(i => i.Value.Count);
135            }
136            else
137            {
138                return 0;
139            }
140        }
141
142        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
143        {
144            throw new NotImplementedException();
145        }
146    }
147
148    [ValueConversion(typeof(string), typeof(string))]
149    class StringLengthConverter : IValueConverter
150    {
151        public StatisticsPresentation StatisticsPresentation { get; set; }
152
153        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
154        {
155            if (StatisticsPresentation != null)
156            {
157                string name = (string)value;
158               
159                if(name.Length < 13)
160                {
161                    return name;
162                }
163                else
164                {
165                    return string.Format("{0}...", name.Substring(0, 9));
166                }
167            }
168            else
169            {
170                return "";
171            }
172        }
173
174        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
175        {
176            throw new NotImplementedException();
177        }
178    }
179
180    [ValueConversion(typeof(Int32), typeof(Double))]
181    class InformationToProgressConverter2 : IValueConverter
182    {
183        public StatisticsPresentation StatisticsPresentation { get; set; }
184
185        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
186        {
187            if (StatisticsPresentation != null)
188            {
189                double allCount = (StatisticsPresentation.Statistics).Sum(i => i.Value.Sum(j => j.Value.Count));
190                return (int)value / allCount;
191            }
192            else
193            {
194                return 0;
195            }
196        }
197
198        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
199        {
200            throw new NotImplementedException();
201        }
202    }
203    #endregion
204
205}
Note: See TracBrowser for help on using the repository browser.