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

Last change on this file since 2285 was 2285, checked in by matkovic, 11 years ago

-added sort for the statistics
-arranged position for the chunk display
-added ProgressBar color alternations
-fixed size
-added Chunk sum
-minor Design choices

By Viktor Matkovic, Dennis Nolte

File size: 4.6 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(string), typeof(Double))]
49    class ChunkSumConverter : 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                string key = (string) value;
58                var data = (StatisticsPresentation.Statistics)[key];
59                return data.Sum(i => i.Value.Count);
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(Int32), typeof(Double))]
74    class InformationToProgressConverter2 : 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                return (int)value / 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    /// <summary>
98    /// Interaction logic for StatisticsPresentation.xaml
99    /// </summary>
100    public partial class StatisticsPresentation : UserControl
101    {
102        public StatisticsPresentation()
103        {
104            InitializeComponent();
105            ((InformationToProgressConverter)Resources["InformationToProgressConverter"]).StatisticsPresentation = this;
106            ((InformationToProgressConverter2)Resources["InformationToProgressConverter2"]).StatisticsPresentation = this;
107            ((ChunkSumConverter)Resources["ChunkSumConverter"]).StatisticsPresentation = this;
108
109
110
111
112            //statisticsTree.Items.SortDescriptions.Add(new SortDescription("ItemTemplate.VisualTree.Children[0].Value", ListSortDirection.Ascending));
113        }
114
115        private Dictionary<string, Dictionary<long, Information>> statistics = null;
116        public Dictionary<string, Dictionary<long, Information>> Statistics
117        {
118            get { return statistics; }
119            set
120            {
121                statistics = value;
122                Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
123                                               {
124                                                   var orderedstats = statistics.OrderByDescending((x) => x.Value.Sum((z) => z.Value.Count));
125                                                   statisticsTree.DataContext = orderedstats;
126                                                   statisticsTree.Items.Refresh();
127                                                }, null);
128
129            }
130        }
131    }
132}
Note: See TracBrowser for help on using the repository browser.