source: trunk/CrypPlugins/KeySearcher/KeySearcherSettings.cs @ 1682

Last change on this file since 1682 was 1682, checked in by Paul Lelgemann, 11 years ago

o Work on the distributed KeySearcher presentation

File size: 6.0 KB
Line 
1using System;
2using System.Numerics;
3using Cryptool.PluginBase;
4using System.ComponentModel;
5using System.Collections.ObjectModel;
6using KeySearcher.KeyPattern;
7
8namespace KeySearcher
9{
10    public class KeySearcherSettings : ISettings
11    {
12        private readonly KeySearcher keysearcher;
13        private int coresUsed;
14        private const string GroupPeerToPeer = "Peer-to-Peer network";
15
16        public KeySearcherSettings(KeySearcher ks)
17        {
18            keysearcher = ks;
19            CoresAvailable.Clear();
20            for (int i = 0; i < Environment.ProcessorCount; i++)
21                CoresAvailable.Add((i + 1).ToString());
22            CoresUsed = Environment.ProcessorCount - 1;
23
24            chunkSize = 21;
25        }
26
27        private string key;
28        [TaskPane("Key", "Key pattern used to bruteforce", null, 1, false, DisplayLevel.Beginner, ControlType.TextBox)]
29        public String Key
30        {
31            get
32            {
33                return key;
34            }
35            set
36            {
37                key = value;
38                OnPropertyChanged("Key");
39                if (!(keysearcher.Pattern != null && keysearcher.Pattern.testWildcardKey(value)))
40                    keysearcher.GuiLogMessage("Wrong key pattern!", NotificationLevel.Error);
41                HasChanges = true;
42                OnPropertyChanged("TotalAmountOfChunks");
43            }
44        }
45
46        [TaskPane("Reset", "Reset Key", null, 2, false, DisplayLevel.Beginner, ControlType.Button)]
47        public void Reset()
48        {
49            Key = keysearcher.Pattern.giveInputPattern();
50        }
51       
52        [TaskPane("CoresUsed", "Choose how many cores should be used", null, 3, false, DisplayLevel.Beginner, ControlType.DynamicComboBox, new string[] { "CoresAvailable" })]
53        public int CoresUsed
54        {
55            get { return this.coresUsed; }
56            set
57            {
58                if (value != this.coresUsed)
59                {
60                    this.coresUsed = value;
61                    OnPropertyChanged("CoresUsed");
62                    HasChanges = true;
63                }
64            }
65        }
66
67        private bool usePeerToPeer;
68        [TaskPane("Use Peer-to-Peer network", "Distributes the operation on available peers by using the built-in peer-to-peer network.", GroupPeerToPeer, 0, false, DisplayLevel.Beginner,
69            ControlType.CheckBox)]
70        public bool UsePeerToPeer
71        {
72            get { return usePeerToPeer; }
73            set
74            {
75                if (value != usePeerToPeer)
76                {
77                    usePeerToPeer = value;
78                    OnPropertyChanged("UsePeerToPeer");
79                    HasChanges = true;
80                }
81            }
82        }
83
84        private bool autoconnectPeerToPeer;
85        [TaskPane("Autoconnect network", "Establish a connection to the network if the workspace is started without the background connection being active.", GroupPeerToPeer, 1, false, DisplayLevel.Beginner,
86            ControlType.CheckBox)]
87        public bool AutoconnectPeerToPeer
88        {
89            get { return autoconnectPeerToPeer; }
90            set
91            {
92                if (value != autoconnectPeerToPeer)
93                {
94                    autoconnectPeerToPeer = value;
95                    OnPropertyChanged("AutoconnectPeerToPeer");
96                    HasChanges = true;
97                }
98            }
99        }
100
101        private bool verbosePeerToPeerDisplay;
102        [TaskPane("Display verbose information", "Display verbose information about network requests in the quick watch.", GroupPeerToPeer, 2, true, DisplayLevel.Beginner,
103            ControlType.CheckBox)]
104        public bool VerbosePeerToPeerDisplay
105        {
106            get { return verbosePeerToPeerDisplay; }
107            set
108            {
109                if (value != verbosePeerToPeerDisplay)
110                {
111                    verbosePeerToPeerDisplay = value;
112                    OnPropertyChanged("VerbosePeerToPeerDisplay");
113                    HasChanges = true;
114                }
115            }
116        }
117
118        private int chunkSize;
119        [TaskPane("Chunk size", "Amount of keys, that will be calculated by one peer at a time. This value is the exponent of the power of two used for the chunk size.", GroupPeerToPeer, 3, false, DisplayLevel.Professional,
120            ControlType.NumericUpDown, ValidationType.RangeInteger, 1, 1000)]
121        public int ChunkSize
122        {
123            get { return chunkSize; }
124            set
125            {
126                if (value != chunkSize)
127                {
128                    chunkSize = value;
129                    OnPropertyChanged("ChunkSize");
130                    OnPropertyChanged("TotalAmountOfChunks");
131                    HasChanges = true;
132                }
133            }
134        }
135
136        private ObservableCollection<string> coresAvailable = new ObservableCollection<string>();
137        public ObservableCollection<string> CoresAvailable
138        {
139            get { return coresAvailable; }
140            set
141            {
142                if (value != coresAvailable)
143                {
144                    coresAvailable = value;
145                }
146                OnPropertyChanged("CoresAvailable");
147            }
148        }
149
150        #region ISettings Members
151
152        private bool hasChanges;
153
154        public bool HasChanges
155        {
156            get
157            {
158                return hasChanges;
159            }
160            set
161            {
162                hasChanges = value;
163                OnPropertyChanged("HasChanges");
164            }
165        }
166
167        #endregion
168
169        #region INotifyPropertyChanged Members
170
171        public event PropertyChangedEventHandler PropertyChanged;
172
173        private void OnPropertyChanged(string p)
174        {
175            if (PropertyChanged != null)
176            {
177                PropertyChanged(this, new PropertyChangedEventArgs(p));
178            }
179        }
180
181        #endregion
182    }
183}
Note: See TracBrowser for help on using the repository browser.