source: trunk/CrypPlugins/Alphabets/AlphabetSettings.cs @ 1778

Last change on this file since 1778 was 1259, checked in by Matthäus Wander, 12 years ago

shortened license text to boilerplate notice in all source files

File size: 8.1 KB
Line 
1/*
2   Copyright 2008 Sebastian Przybylski, University of Siegen
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 Cryptool.PluginBase;
22using System.ComponentModel;
23
24namespace Cryptool.Alphabets
25{
26    public class AlphabetSettings : ISettings
27    {
28        public enum UpperLowerCase {UpperCase, LowerCase, Both};
29        public enum YesNo {Yes, No};
30       
31        private string selectedAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
32        private string defaultAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
33        private UpperLowerCase upperLowerCaseLetter = UpperLowerCase.UpperCase;
34        private YesNo spaceSensitivity = YesNo.No;
35        private YesNo numerals = YesNo.No;
36        private YesNo punctuation = YesNo.No;
37
38        public string DefaultAlphabet
39        {
40            get { return this.defaultAlphabet; }
41            set
42            {
43                this.defaultAlphabet = value;
44                Alphabet = value; //set new default alphabet
45                OnPropertyChanged("DefaultAlphabet");
46            }
47        }
48       
49        public string Alphabet
50        {
51            get { return this.selectedAlphabet; }
52            set 
53            { 
54                this.selectedAlphabet = value;
55                OnPropertyChanged("Alphabet");
56            }
57        }
58
59        [ContextMenu("Uppercase/Lowercase", "Use uppercase, lowercase letters", 0, DisplayLevel.Beginner, ContextMenuControlType.ComboBox, null, new string[] { "Uppercase", "Lowercase", "Both" })]
60        [TaskPane("Uppercase/Lowercase", "Use uppercase, lowercase letters", null, 2, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Uppercase", "Lowercase", "Both" })]
61        public int UpperLowerCaseLetters
62        {
63            get { return (int)this.upperLowerCaseLetter; }
64            set
65            {
66                this.upperLowerCaseLetter = (UpperLowerCase)value;
67                setCaseSensitivity();
68                OnPropertyChanged("UpperLowerCaseLetters");
69            }
70        }
71
72        [ContextMenu("Space", "Use space", 1, DisplayLevel.Beginner, ContextMenuControlType.ComboBox, null, new string[] { "Yes", "No" })]
73        [TaskPane("Space", "Use space", null, 3, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Yes", "No" })]
74        public int SpaceSensitivity
75        {
76            get { return (int)this.spaceSensitivity; }
77            set
78            {
79                this.spaceSensitivity = (YesNo)value;
80                setSpaceSensitivity();
81                OnPropertyChanged("SpaceSensitivity");
82            }
83        }
84
85        [ContextMenu("Numerals", "Use numerals", 2, DisplayLevel.Beginner, ContextMenuControlType.ComboBox, null, new string[] { "Yes", "No" })]
86        [TaskPane("Numerals", "Use numerals", null, 4, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Yes", "No" })]
87        public int Numerals
88        {
89            get { return (int)this.numerals; }
90            set
91            {
92                this.numerals = (YesNo)value;
93                setNumerals();
94                OnPropertyChanged("Numerals");
95            }
96        }
97
98        [ContextMenu("Punctuation", "Use punctations", 3, DisplayLevel.Beginner, ContextMenuControlType.ComboBox, null, new string[] { "Yes", "No" })]
99        [TaskPane("Punctuation", "Use punctations", null, 5, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Yes", "No" })]
100        public int Punctuation
101        {
102            get { return (int)this.punctuation; }
103            set
104            {
105                this.punctuation = (YesNo)value;
106                setPunctuation();
107                OnPropertyChanged("Punctuation");
108            }
109        }
110
111        private string openFilename;
112        [TaskPane("Filename", "Select a file with an alphabet.", null, 1, false, DisplayLevel.Beginner, ControlType.OpenFileDialog, FileExtension = "Cryptool Alphabet (*.cta)|*.cta")]
113        public string OpenFilename
114        {
115          get { return openFilename; }
116          set
117          {
118            if (value != openFilename)
119            {
120              openFilename = value;
121              HasChanges = true;
122              OnPropertyChanged("OpenFilename");
123            }
124          }
125        }
126
127        public string TargetFilenameSuggestion { get; set; }
128        private string targetFilename;
129        [TaskPane("Target FileName", "File to write alphabet into.", null, 1, false, DisplayLevel.Beginner, ControlType.SaveFileDialog, FileExtension = "Cryptool Alphabet (*.cta)|*.cta")]
130        public string TargetFilename
131        {
132          get { return targetFilename; }
133          set
134          {
135            targetFilename = value;
136            OnPropertyChanged("TargetFilename");
137          }
138        }
139
140        private void setCaseSensitivity()
141        {
142            Alphabet = Alphabet.Trim(defaultAlphabet.ToLower().ToCharArray());
143            Alphabet = Alphabet.Trim(defaultAlphabet.ToUpper().ToCharArray());
144            switch (upperLowerCaseLetter)
145            {
146                case UpperLowerCase.UpperCase:
147                    Alphabet = Alphabet + defaultAlphabet.ToUpper();
148                    break;
149                case UpperLowerCase.LowerCase:
150                    Alphabet = Alphabet + defaultAlphabet.ToLower();
151                    break;
152                case UpperLowerCase.Both:
153                    Alphabet = Alphabet + DefaultAlphabet.ToUpper() + DefaultAlphabet.ToLower();
154                    break;
155                default:
156                    break;
157            }
158        }
159
160        private void setSpaceSensitivity()
161        {
162            switch (spaceSensitivity)
163            {
164                case YesNo.Yes:
165                    Alphabet = Alphabet + " ";
166                    break;
167                case YesNo.No:
168                    Alphabet = Alphabet.Trim();
169                    break;
170                default:
171                    break;
172            }
173        }
174
175        private void setNumerals()
176        {
177            switch (numerals)
178            {
179                case YesNo.Yes:
180                    Alphabet = Alphabet + "0123456789";
181                    break;
182                case YesNo.No:
183                    char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
184                    Alphabet = Alphabet.Trim(digits);
185                    break;
186                default:
187                    break;
188            }
189        }
190
191        private void setPunctuation()
192        {
193            switch (punctuation)
194            {
195                case YesNo.Yes:
196                    Alphabet = Alphabet + ".,:;!?()";
197                    break;
198                case YesNo.No:
199                    char[] punct = { '.', ',', ':', ';', '!', '?', '(', ')' };
200                    Alphabet = Alphabet.Trim(punct);
201                    break;
202                default:
203                    break;
204            }
205
206        }
207
208        private bool hasChanges;
209        public bool HasChanges
210        {
211            get { return hasChanges; }
212            set { hasChanges = value; }
213        }
214
215        #region INotifyPropertyChanged Members
216
217        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
218        protected void OnPropertyChanged(string name)
219        {
220            if (PropertyChanged != null)
221            {
222                PropertyChanged(this, new PropertyChangedEventArgs(name));
223            }
224        }
225        #endregion
226    }
227}
Note: See TracBrowser for help on using the repository browser.