source: trunk/CrypPlugins/CostFunction/CostFunctionSettings.cs @ 1731

Last change on this file since 1731 was 1731, checked in by malischewski, 12 years ago

Added simple CSV parser, fitness weight tables are now being loaded from csv files residing in the data directory.
User can choose which fitness weight table the costfunction uses (custom fitness weight table possible, too).

File size: 8.4 KB
Line 
1/*                             
2   Copyright 2009 Team CrypTool (Sven Rech,Dennis Nolte,Raoul Falk,Nils Kopal), Uni Duisburg-Essen
3
4   Licensed under the Apache License, Version 2.0 (the "License");
5   you may not use this file except in compliance with the License.
6   You may obtain a copy of the License at
7
8       http://www.apache.org/licenses/LICENSE-2.0
9
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15*/
16
17using System;
18using System.Collections.Generic;
19using System.Linq;
20using System.Text;
21using System.ComponentModel;
22using Cryptool.PluginBase;
23using System.Collections.ObjectModel;
24using System.Windows;
25using Cryptool.PluginBase.Miscellaneous;
26
27using System.Windows.Forms;
28
29namespace Cryptool.Plugins.CostFunction
30{
31    class CostFunctionSettings : ISettings
32    {
33        #region private variables
34        private bool hasChanges = false;
35        private int functionType;
36        private String bytesToUse = "256";
37        private int bytesToUseInteger = 256;
38
39        private static DataManager dataMgr = new DataManager();
40        private const string DATATYPE = "transposition";
41        private static IDictionary<String, DataFileMetaInfo> txtList;
42        private static string[] files;
43        #endregion
44       
45        [TaskPane("FunctionType", "Select the type of function", null, 1, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Index of coincidence", "Entropy", "Bigrams: log 2", "Bigrams: Sinkov", "Bigrams: Percentaged", "Regular Expression", "Weighted Bigrams/Trigrams"})]
46        public int FunctionType
47        {
48            get { return this.functionType; }
49            set
50            {
51                this.functionType = (int)value;
52                UpdateTaskPaneVisibility();
53                OnPropertyChanged("FunctionType");
54            }
55        }
56
57        [TaskPane("Bytes to use", "Which amount of bytes should be used for calculating?", null, 4, false, DisplayLevel.Beginner, ControlType.TextBox)]
58        public String BytesToUse
59        {
60            get
61            {
62                return bytesToUse;
63            }
64            set
65            {
66                bytesToUse = value;
67                bytesToUseInteger = int.Parse(value);
68                OnPropertyChanged("BytesToUse");
69            }
70        }
71
72        public int BytesToUseInteger
73        {
74            get { return bytesToUseInteger; }
75        }
76
77
78        public string customFilePath;
79        public int statisticscorpus = 0;
80        [TaskPane("Text Corpus File to use", "Select a text corpus file (Default is (DE))", null, 7, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Text corpus (DE)", "Text corpus (EN)", "Custom (...)" })]
81        public int StatisticsCorpus
82        {
83            get
84            {
85              return statisticscorpus;
86            }
87            set
88            {
89                statisticscorpus = value;
90                if (statisticscorpus == 2)
91                {
92                   
93
94                    OpenFileDialog openCorpusFile = new OpenFileDialog();
95                    openCorpusFile.Title = "Select text corpus file";
96                    openCorpusFile.CheckFileExists = true;
97                    openCorpusFile.CheckPathExists = true;
98                    openCorpusFile.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
99                    if (openCorpusFile.ShowDialog() == DialogResult.OK)
100                    {
101                        customFilePath = openCorpusFile.FileName;
102                    }
103                    else
104                    {
105                        statisticscorpus = 0; // Fall back to default
106                    }
107                }
108                UpdateTaskPaneVisibility();
109                OnPropertyChanged("StatisticsCorpus");
110            }
111        }
112        public string customfwtpath;
113        public int fwt = 0; //fwt = fitness weight table
114        [TaskPane("Fitness Weight Table to use", "Select a fitness weight table", null, 8, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Matthews", "Toemeh-Arumugam", "Custom Weight table (*.csv)" })]
115        public int weighttable
116        {
117            get
118            {
119                return fwt;
120            }
121            set
122            {
123                fwt = value;
124                if (fwt == 2)
125                {
126                    OpenFileDialog openfwt = new OpenFileDialog();
127                    openfwt.Title = "Select fitness weight table";
128                    openfwt.CheckFileExists = true;
129                    openfwt.CheckPathExists = true;
130                    openfwt.Filter = "csv files (*.csv)|*.csv|All files (*.*)|*.*";
131                    if (openfwt.ShowDialog() == DialogResult.OK)
132                    {
133                        customfwtpath = openfwt.FileName;
134                    }
135                    else
136                    {
137                        fwt = 0; // Fall back to default
138                    }
139                }
140                OnPropertyChanged("weighttable");
141            }
142        }
143       
144
145        public event TaskPaneAttributeChangedHandler TaskPaneAttributeChanged;
146
147        internal void UpdateTaskPaneVisibility()
148        {
149            if (TaskPaneAttributeChanged == null)
150            {
151                return;
152            }
153
154            if (functionType.Equals(5))
155            {
156                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("BytesToUse", Visibility.Visible)));
157                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("RegEx", Visibility.Visible)));
158            }
159            else
160            {
161                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("BytesToUse", Visibility.Visible)));
162                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("RegEx", Visibility.Collapsed)));
163            }
164
165            if (functionType.Equals(4) || functionType.Equals(2) || functionType.Equals(3) || functionType.Equals(6))
166            {
167                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("StatisticsCorpus", Visibility.Visible)));
168               
169            }
170            else
171            {
172                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("StatisticsCorpus", Visibility.Collapsed)));
173               
174               
175            }
176            if (functionType.Equals(6))
177            {
178                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("weighttable", Visibility.Visible)));
179
180            }
181            else
182            {
183                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("weighttable", Visibility.Collapsed)));
184
185            }
186           
187
188        }
189
190
191        private string regEx;
192        [TaskPane("Regular Expression:", "Regular Expression match", null, 5, false, DisplayLevel.Beginner, ControlType.TextBox)]
193        public String RegEx
194        {
195            get
196            {
197                return regEx;
198            }
199            set
200            {
201                regEx = value;
202                OnPropertyChanged("RegEx");
203            }
204        }
205
206        #region ISettings Members
207
208        public bool HasChanges
209        {
210            get
211            {
212                return hasChanges;
213            }
214            set
215            {
216                hasChanges = value;
217            }
218        }
219
220        #endregion
221
222        #region INotifyPropertyChanged Members
223
224        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
225
226        private void OnPropertyChanged(string p)
227        {
228            if (PropertyChanged != null)
229            {
230                PropertyChanged(this, new PropertyChangedEventArgs(p));
231            }
232        }
233
234        #endregion
235    }
236   
237   
238}
Note: See TracBrowser for help on using the repository browser.