source: trunk/CrypPlugins/Alphabets/AlphabetPresentation.xaml.cs @ 1785

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

shortened license text to boilerplate notice in all source files

File size: 7.2 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 System.Windows;
22using System.Windows.Controls;
23using System.Windows.Data;
24using System.Windows.Documents;
25using System.Windows.Input;
26using System.Windows.Media;
27using System.Windows.Media.Imaging;
28using System.Windows.Navigation;
29using System.Windows.Shapes;
30using Microsoft.Win32;
31using System.IO;
32using System.Data;
33using System.ComponentModel;
34using Cryptool.PluginBase;
35
36namespace Cryptool.Alphabets
37{
38    /// <summary>
39    /// Interaction logic for AlphabetPresentation.xaml
40    /// </summary>
41    public partial class AlphabetPresentation : UserControl
42    {
43        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
44
45        private Alphabet alphabet;
46        private DataTable tbl;
47        private ContextMenu contextMenu;
48
49        public AlphabetPresentation(Alphabet Alphabet)
50        {
51            InitializeComponent();
52            this.alphabet = Alphabet;
53            Binding bindingDefaultAlphabet = new Binding();
54            bindingDefaultAlphabet.Mode = BindingMode.OneWay;
55            bindingDefaultAlphabet.Path = new PropertyPath("DefaultAlphabet");
56            bindingDefaultAlphabet.Source = this.alphabet.Settings;
57            textBoxCurrentAlphabet.SetBinding(TextBox.TextProperty, bindingDefaultAlphabet);
58
59            Binding bindingAlphabet = new Binding();
60            bindingAlphabet.Mode = BindingMode.TwoWay;
61            bindingAlphabet.Path = new PropertyPath("Alphabet");
62            bindingAlphabet.Source = this.alphabet.Settings;
63            textBoxAlphabet.SetBinding(TextBox.TextProperty, bindingAlphabet);
64
65            listViewAlphabets.DataContext = createAlphabetTable();
66
67            contextMenu = new ContextMenu();
68            MenuItem item = new MenuItem();
69            item.Header = "Delete";
70            item.Click += new RoutedEventHandler(item_Click);
71            contextMenu.Items.Add(item);
72
73            listViewAlphabets.ContextMenu = contextMenu;
74
75            //add default alphabet
76            this.tbl.Rows.Add("X", "Default", ((AlphabetSettings)this.alphabet.Settings).Alphabet);
77
78            controlStatus();
79            Alphabet.Settings.PropertyChanged += Settings_PropertyChanged;
80        }
81
82        void Settings_PropertyChanged(object sender, PropertyChangedEventArgs e)
83        {
84          if (e.PropertyName == "OpenFilename")
85          {
86            this.load(((AlphabetSettings)this.alphabet.Settings).OpenFilename);
87          }
88          if (e.PropertyName == "TargetFilename")
89          {
90            this.save(((AlphabetSettings)this.alphabet.Settings).TargetFilename);
91          }
92        }
93
94        private void item_Click(object sender, RoutedEventArgs e)
95        {
96            this.tbl.Rows[listViewAlphabets.SelectedIndex].Delete();
97        }
98
99        private DataTable createAlphabetTable()
100        {
101            tbl = new DataTable();
102            tbl.Columns.Add("Default", typeof(string));
103            tbl.Columns.Add("Name", typeof(string));
104            tbl.Columns.Add("Alphabet", typeof(string));
105
106            return tbl;
107        }
108
109        private void controlStatus()
110        {
111            buttonAddAlphabet.IsEnabled = (textBoxAlphabet.Text.Length != 0 && textBoxAlphabetName.Text.Length != 0);
112        }
113
114        private void save(string fileName)
115        {
116          try
117          {
118            if (fileName != null && fileName != string.Empty)
119            {
120              StreamWriter writer = new StreamWriter(fileName);
121              foreach (DataRow row in this.tbl.Rows)
122              {
123                writer.WriteLine(row["Name"] + ";" + row["Alphabet"]);
124              }
125              writer.Close();
126              GuiLogMessage("Alphabets saved to file: " + fileName, NotificationLevel.Info);
127            }           
128          }
129          catch (Exception exception)
130          {
131            GuiLogMessage(exception.Message, NotificationLevel.Error);
132          }
133        }
134
135        private void buttonAddAlphabet_Click(object sender, RoutedEventArgs e)
136        {
137            string alphName = textBoxAlphabetName.Text;
138            foreach (DataRow row in this.tbl.Rows)
139            {
140                if ((string)row["Name"] == alphName)
141                {
142                    alphName += "_1";
143                    break;
144                }
145            }
146
147            this.tbl.Rows.Add(string.Empty, alphName, textBoxAlphabet.Text);
148            textBoxAlphabetName.Clear();
149            controlStatus();
150        }
151
152        private void textBoxAlphabet_TextChanged(object sender, TextChangedEventArgs e)
153        {
154            controlStatus();
155        }
156
157        private void load(string fileName)
158        {
159          try
160          {
161            if (File.Exists(fileName))
162            {
163              this.tbl.Clear();
164              StreamReader reader = new StreamReader(fileName);
165              string sLine;
166              while ((sLine = reader.ReadLine()) != null)
167              {
168                string[] items = sLine.Split(';');
169                this.tbl.Rows.Add(null, items[0], items[1]);
170              }
171              reader.Close();
172              controlStatus();
173              if (tbl.Rows.Count > 0)
174              {
175                tbl.Rows[0]["Default"] = "X";
176                ((AlphabetSettings)this.alphabet.Settings).DefaultAlphabet = (string)tbl.Rows[0]["Alphabet"];
177              }
178
179              GuiLogMessage("Alphabets loaded from file: " + fileName + ".", NotificationLevel.Info);
180            }
181
182          }
183          catch (Exception exception)
184          {
185            GuiLogMessage(exception.Message, NotificationLevel.Error);
186          }
187        }
188
189        private void listViewAlphabets_SelectionChanged(object sender, SelectionChangedEventArgs e)
190        {
191            if (this.tbl.Rows.Count > 0 && listViewAlphabets.SelectedIndex != -1)
192            {
193                ((AlphabetSettings)this.alphabet.Settings).DefaultAlphabet = (string)tbl.Rows[listViewAlphabets.SelectedIndex]["Alphabet"];
194                for (int i = 0; i < tbl.Rows.Count; i++)
195                {
196                    tbl.Rows[i]["Default"] = string.Empty;
197                }
198                tbl.Rows[listViewAlphabets.SelectedIndex]["Default"] = "X";
199            }
200        }
201
202        private void GuiLogMessage(string message, NotificationLevel logLevel)
203        {
204          if (OnGuiLogNotificationOccured != null)
205          {
206            OnGuiLogNotificationOccured(null, new GuiLogEventArgs(message, null, logLevel));
207          }
208        }
209    }
210}
Note: See TracBrowser for help on using the repository browser.