source: trunk/CrypPlugins/KeySearcher/KeySearcherSettings.cs

Last change on this file was 8983, checked in by kopal, 9 months ago

Complete CrypTool 2 project

  • renamed "Cryptool" namespace to "CrypTool" namespace
File size: 16.7 KB
RevLine 
[409]1using System;
[2194]2using System.Collections.Generic;
[1727]3using System.Windows;
[8983]4using CrypTool.PluginBase;
[409]5using System.ComponentModel;
[6518]6using System.Collections.ObjectModel; 
[2295]7using KeySearcher.Properties;
[4614]8using KeyTextBox;
[2040]9using OpenCLNet;
[409]10
11namespace KeySearcher
12{
[676]13    public class KeySearcherSettings : ISettings
14    {
[1674]15        private readonly KeySearcher keysearcher;
[754]16        private int coresUsed;
[2282]17        private string csvPath = "";
[409]18
[2194]19        public class OpenCLDeviceSettings
20        {
[2886]21            private KeySearcherSettings _settings;
22            internal string name;
23            internal int index;
24            internal int mode;
25            internal bool useDevice;
26
27            public bool UseDevice
28            {
29                get { return useDevice; }
30                set
31                {
32                    if (_settings.OpenCLDevice == index)
33                        _settings.UseOpenCL = value;
34                    useDevice = value;
35                }
36            }
37
38            public OpenCLDeviceSettings(KeySearcherSettings settings)
39            {
40                _settings = settings;
41            }
[2194]42        }
43
44        private List<OpenCLDeviceSettings> deviceSettings = new List<OpenCLDeviceSettings>();
45        public List<OpenCLDeviceSettings> DeviceSettings
46        {
47            get
48            {
49                return deviceSettings;
50            }
51        }
52
[2040]53        public event TaskPaneAttributeChangedHandler TaskPaneAttributeChanged;
54
55        public KeySearcherSettings(KeySearcher ks, OpenCLManager oclManager)
[676]56        {
57            keysearcher = ks;
[2744]58            RefreshDevicesList(oclManager);
59
60            CoresAvailable.Clear();
61            for (int i = -1; i < Environment.ProcessorCount; i++)
62                CoresAvailable.Add((i + 1).ToString());
63            CoresUsed = Environment.ProcessorCount - 1;
[4614]64            KeyManager = new SimpleKeyManager("");
[2744]65        }
66
67        private void RefreshDevicesList(OpenCLManager oclManager)
68        {
[2040]69            devicesAvailable.Clear();
[2194]70            int c = 0;
[2040]71            if (oclManager != null)
[2744]72            {
[8528]73                for (var id = 0; id < OpenCL.GetPlatforms().Length; id++)
[2194]74                {
[8528]75                    oclManager.CreateDefaultContext(id, DeviceType.ALL);
76                    foreach (var device in oclManager.Context.Devices)
77                    {
78                        string deviceName = device.Vendor + ":" + device.Name;
79                        deviceSettings.Add(new OpenCLDeviceSettings(this) { name = deviceName, index = c, mode = 1, UseDevice = false });
80                        devicesAvailable.Add(deviceName);
81                        c++;
82                    }
[2194]83                }
[2744]84            }
85            DevicesAvailable = devicesAvailable;    //refresh list
86            if (devicesAvailable.Count > 0)
87                OpenCLDevice = 0;
[3018]88            else
89                this.openCLDevice = -1;
[676]90        }
[409]91
[2040]92        public void Initialize()
[3721]93        {           
[2040]94            OpenCLGroupVisiblity();
[8983]95            CrypTool.PluginBase.Properties.Settings.Default.PropertyChanged += delegate
[2516]96                                                    {
97                                                        OpenCLGroupVisiblity();
[6752]98                                                    };
99                       
[2040]100        }
101
[4614]102        [TaskPane("KeyCaption", "KeyTooltip", null, 1, false, ControlType.KeyTextBox, true, "KeyManager")]
[676]103        public String Key
104        {
105            get
106            {
[4614]107                return KeyManager.GetKey();
[676]108            }
109            set
[754]110            {
[4614]111                KeyManager.SetKey(value);
[682]112                OnPropertyChanged("Key");
[4614]113                //if (!(keysearcher.Pattern != null && keysearcher.Pattern.testWildcardKey(value)))
114                //    keysearcher.GuiLogMessage(Resources.Wrong_key_pattern_, NotificationLevel.Error);
[676]115            }
116        }
[409]117
[4614]118        public KeyTextBox.SimpleKeyManager KeyManager { get; private set; }
119
[3194]120        [TaskPane( "ResetCaption", "ResetTooltip", null, 2, false, ControlType.Button)]
[676]121        public void Reset()
122        {
[4460]123            if (keysearcher != null && keysearcher.Pattern != null)
124            {
125                Key = keysearcher.Pattern.giveInputPattern();
126            }
[676]127        }
[754]128       
[3194]129        [TaskPane( "CoresUsedCaption", "CoresUsedTooltip", null, 3, false, ControlType.DynamicComboBox, new string[] { "CoresAvailable" })]
[754]130        public int CoresUsed
131        {
132            get { return this.coresUsed; }
133            set
134            {
135                if (value != this.coresUsed)
136                {
137                    this.coresUsed = value;
138                    OnPropertyChanged("CoresUsed");
139                }
140            }
141        }
[409]142
[6518]143        #region crypcloud
144
[1634]145        private bool usePeerToPeer;
[6622]146        [TaskPane("settings__caption_useNetwork", "settings__tooltip_useNetwork", "GroupPeerToPeer", 0, false, ControlType.CheckBox)]
[1634]147        public bool UsePeerToPeer
148        {
[6509]149            get { return usePeerToPeer; }
[1634]150            set
151            {
152                if (value != usePeerToPeer)
153                {
154                    usePeerToPeer = value;
155                    OnPropertyChanged("UsePeerToPeer");
156                }
157            }
158        }
159
[6509]160        private int numberOfBlocks;
[6622]161        [TaskPane("settings__caption_numberOfBlocks", "settings__tooltip_numberOfBlocks", "GroupPeerToPeer", 3, false, ControlType.NumericUpDown, ValidationType.RangeInteger, 1, 128)]
[6509]162        public int NumberOfBlocks
[1634]163        {
[6509]164            get { return numberOfBlocks; }
[1634]165            set
166            {
[6509]167                if (value != numberOfBlocks)
[1634]168                {
[6509]169                    numberOfBlocks = value;
170                    OnPropertyChanged("NumberOfBlocks"); 
[1634]171                }
172            }
173        }
174
[6518]175        #endregion
176
[1751]177        private string evaluationHost;
[6752]178        //[TaskPane( "EvaluationHostCaption", "EvaluationHostTooltip", "GroupEvaluation", 0, false, ControlType.TextBox)]
[1751]179        public String EvaluationHost
180        {
181            get
182            {
183                return evaluationHost;
184            }
185            set
186            {
187                if (value != evaluationHost)
188                {
189                    evaluationHost = value;
190                    OnPropertyChanged("EvaluationHost");
191                }
192            }
193        }
194
195        private string evaluationUser;
[6752]196        //[TaskPane( "EvaluationUserCaption", "EvaluationUserTooltip", "GroupEvaluation", 1, false, ControlType.TextBox)]
[1751]197        public String EvaluationUser
198        {
199            get
200            {
201                return evaluationUser;
202            }
203            set
204            {
205                if (value != evaluationUser)
206                {
207                    evaluationUser = value;
208                    OnPropertyChanged("EvaluationUser");
209                }
210            }
211        }
212
213        private string evaluationPassword;
[6752]214        //[TaskPane( "EvaluationPasswordCaption", "EvaluationPasswordTooltip", "GroupEvaluation", 2, false, ControlType.TextBox)]
[1751]215        public String EvaluationPassword
216        {
217            get
218            {
219                return evaluationPassword;
220            }
221            set
222            {
223                if (value != evaluationPassword)
224                {
225                    evaluationPassword = value;
226                    OnPropertyChanged("EvaluationPassword");
227                }
228            }
229        }
230
231        private string evaluationDatabase;
[6752]232        //[TaskPane( "EvaluationDatabaseCaption", "EvaluationDatabaseTooltip", "GroupEvaluation", 3, false, ControlType.TextBox)]
[1751]233        public String EvaluationDatabase
234        {
235            get
236            {
237                return evaluationDatabase;
238            }
239            set
240            {
241                if (value != evaluationDatabase)
242                {
243                    evaluationDatabase = value;
244                    OnPropertyChanged("EvaluationDatabase");
245                }
246            }
247        }
248
[2040]249        #region OpenCL
250
[3194]251        [TaskPane( "NoOpenCLCaption", "NoOpenCLTooltip", "GroupOpenCL", 1, false, ControlType.TextBoxReadOnly)]
[6599]252        [DontSave]
[2043]253        public string NoOpenCL
254        {
[2295]255            get { return Resources.No_OpenCL_Device_available_; }
[2043]256            set {}
257        }
258
[2040]259        private void OpenCLGroupVisiblity()
260        {
261            if (TaskPaneAttributeChanged == null)
262                return;
263
[8983]264            if (!CrypTool.PluginBase.Properties.Settings.Default.KeySearcher_UseOpenCL)
[2040]265            {
266                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("OpenCLDevice", Visibility.Collapsed)));
[2183]267                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("OpenCLMode", Visibility.Collapsed)));
[2040]268                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("UseOpenCL", Visibility.Collapsed)));
[2516]269                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("NoOpenCL", Visibility.Collapsed)));
[2040]270            }
271            else
272            {
[2516]273                if (DevicesAvailable.Count == 0)
274                {
275                    TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("OpenCLDevice", Visibility.Collapsed)));
276                    TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("OpenCLMode", Visibility.Collapsed)));
277                    TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("UseOpenCL", Visibility.Collapsed)));
278                    TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("NoOpenCL", Visibility.Visible)));
279                }
280                else
281                {
282                    TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("OpenCLDevice", Visibility.Visible)));
283                    TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("OpenCLMode", Visibility.Visible)));
284                    TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("UseOpenCL", Visibility.Visible)));
285                    TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("NoOpenCL", Visibility.Collapsed)));
286                }
[2040]287            }
288        }
289
290        private int openCLDevice;
[3194]291        [TaskPane( "OpenCLDeviceCaption", "OpenCLDeviceTooltip", "GroupOpenCL", 1, false, ControlType.DynamicComboBox, new string[] { "DevicesAvailable" })]
[2744]292        [DontSave]
[2040]293        public int OpenCLDevice
294        {
295            get { return this.openCLDevice; }
296            set
297            {
298                if (value != this.openCLDevice)
299                {
300                    this.openCLDevice = value;
[2886]301                    UseOpenCL = deviceSettings[value].UseDevice;
[2194]302                    OpenCLMode = deviceSettings[value].mode;
[2040]303                    OnPropertyChanged("OpenCLDevice");
304                }
305            }
306        }
307
[3194]308        [TaskPane( "UseOpenCLCaption", "UseOpenCLTooltip", "GroupOpenCL", 2, false, ControlType.CheckBox)]
[2744]309        [DontSave]
[2194]310        public bool UseOpenCL
311        {
[2200]312            get
313            {
[3022]314                if (OpenCLDevice != -1 && deviceSettings.Count > OpenCLDevice)
[2886]315                    return deviceSettings[OpenCLDevice].UseDevice;
[2200]316                else
317                    return false;
318            }
[2194]319            set
320            {
[3022]321                if (OpenCLDevice != -1 && (deviceSettings.Count > OpenCLDevice) && (value != deviceSettings[OpenCLDevice].UseDevice))
[2194]322                {
323                    deviceSettings[OpenCLDevice].useDevice = value;
324                    OnPropertyChanged("UseOpenCL");
325                }
326            }
327        }
328
[4390]329        [TaskPane("OpenCLModeCaption", "OpenCLModeTooltip", "GroupOpenCL", 3, false, ControlType.RadioButton, new string[] { "OpenCLModeList1", "OpenCLModeList2", "OpenCLModeList3" })]
[2744]330        [DontSave]
[2161]331        public int OpenCLMode
332        {
[2200]333            get
334            {
[3022]335                if (OpenCLDevice != -1 && deviceSettings.Count > OpenCLDevice)
[2200]336                    return deviceSettings[OpenCLDevice].mode;
337                else
338                    return 0;
339            }
[2161]340            set
341            {
[3022]342                if (OpenCLDevice != -1 && (deviceSettings.Count > OpenCLDevice) && (value != deviceSettings[OpenCLDevice].mode))
[2161]343                {
[8983]344                    if (CrypTool.PluginBase.Properties.Settings.Default.KeySearcher_EnableHighLoad || value != 2)
[2516]345                        deviceSettings[OpenCLDevice].mode = value;
346                    else
347                        keysearcher.GuiLogMessage(
[6431]348                            "Using \"High Load\" is disabled. Please check your CrypTool 2 settings.", NotificationLevel.Error);
[2516]349
[2161]350                    OnPropertyChanged("OpenCLMode");
351                }
352            }
353        }
[2744]354       
[2040]355        private ObservableCollection<string> devicesAvailable = new ObservableCollection<string>();
[2744]356        [DontSave]
[2040]357        public ObservableCollection<string> DevicesAvailable
358        {
359            get { return devicesAvailable; }
360            set
361            {
362                if (value != devicesAvailable)
363                {
364                    devicesAvailable = value;
365                }
366                OnPropertyChanged("DevicesAvailable");
367            }
368        }
369
370        #endregion
371
[2705]372        #region Statistic
[2263]373        /// <summary>
[2705]374        /// Getter/Setter for the time interval (minutes)
375        /// </summary>
376        private int updatetime = 30;
[6752]377        //[TaskPane( "UpdateTimeCaption", "UpdateTimeTooltip", "GroupStatisticPath", 1, false, ControlType.TextBox)]
[2705]378        public int UpdateTime
379        {
380            get { return updatetime; }
381            set
382            {
383                if (value != updatetime)
384                {
385                    updatetime = value;
386                    OnPropertyChanged("UpdateTime");
387                }
388            }
389        }
390
391        /// <summary>
392        /// Able/Disable for the update time interval
393        /// </summary>
394        private bool disableupdate = false;
[6752]395        //[TaskPane( "DisableUpdateCaption", "DisableUpdateTooltip", "GroupStatisticPath", 2, false, ControlType.CheckBox)]
[2705]396        public bool DisableUpdate
397        {
398            get { return disableupdate; }
399            set
400            {
401                if (value != disableupdate)
402                {
403                    disableupdate = value;
404                    OnPropertyChanged("DisableUpdate");
405                }
406            }
407        }
408         
409        /// <summary>
[2263]410        /// Getter/Setter for the csv file
411        /// </summary>
[6752]412        //[TaskPane( "CsvPathCaption", "CsvPathTooltip", "GroupStatisticPath", 3, false, ControlType.SaveFileDialog, FileExtension = "Comma Seperated Values (*.csv)|*.csv")]
[2263]413        public string CsvPath
414        {
415            get { return csvPath; }
416            set
417            {
418                if (value != csvPath)
419                {
420                    csvPath = value;
421                    OnPropertyChanged("CsvPath");
422                }
423            }
424        }
425
426        /// <summary>
427        /// Button to "reset" the csv file. That means it will not appear any more in the text field
428        /// </summary>
[6752]429        //[TaskPane( "DefaultPathCaption", "DefaultPathTooltip", "GroupStatisticPath", 4, false, ControlType.Button)]
[2263]430        public void DefaultPath()
431        {
[2282]432            csvPath = "";
[2263]433            OnPropertyChanged("CsvPath");
[2705]434        }       
[2263]435        #endregion
436
[754]437        private ObservableCollection<string> coresAvailable = new ObservableCollection<string>();
[2744]438        [DontSave]
[754]439        public ObservableCollection<string> CoresAvailable
440        {
441            get { return coresAvailable; }
442            set
443            {
444                if (value != coresAvailable)
445                {
446                    coresAvailable = value;
[4165]447                    OnPropertyChanged("CoresAvailable");
[754]448                }
449            }
450        }
[1634]451
[676]452        #region INotifyPropertyChanged Members
453
454        public event PropertyChangedEventHandler PropertyChanged;
455
456        private void OnPropertyChanged(string p)
457        {
458            if (PropertyChanged != null)
459            {
460                PropertyChanged(this, new PropertyChangedEventArgs(p));
461            }
462        }
463
464        #endregion
[409]465    }
466}
Note: See TracBrowser for help on using the repository browser.