source: trunk/CrypPlugins/Transposition/TranspositionPresentation.xaml.cs @ 833

Last change on this file since 833 was 833, checked in by weyers, 12 years ago

Transposition Presentation updated!

File size: 15.3 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Windows;
6using System.Windows.Data;
7using System.Windows.Documents;
8using System.Windows.Input;
9using System.Windows.Media;
10using System.Windows.Media.Imaging;
11using System.Windows.Media.Animation;
12using System.Windows.Navigation;
13using System.Windows.Shapes;
14using System.Windows.Controls;
15using System.Windows.Threading;
16using System.Threading;
17
18namespace Transposition
19{
20    /// <summary>
21    /// Interaktionslogik für TranspositionPresentation.xaml
22    /// </summary>
23    public partial class TranspositionPresentation : UserControl
24    {
25        public TranspositionPresentation()
26        {
27            InitializeComponent();
28        }
29
30        public event EventHandler Completed;
31        private TextBlock[,] teba;
32        public int timeCounter = 0;
33        private int von;
34        private int nach;
35        private bool PaarSortiert;
36        private int schleife = 0;
37        private int outcount;
38        private int outcount1;
39        private bool onlyOnce;
40        private bool Stop = false;
41        private int rein;
42        private int reout;
43
44        public void main(char[,] read_in_matrix, char[,] permuted_matrix, int[] key, String keyword, String input, String output, int per, int rein, int reout)
45        {
46
47            Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
48            {
49                if (per == 1  )
50                {
51                   
52                    this.rein = rein;
53                    this.reout = reout;
54                    textBox2.Clear();
55                    if (reout == 1)
56                        outcount = 0;
57                    if (reout == 0)
58                        outcount = 2;
59                   
60                    if(rein == 1)
61                        outcount1 = 0;
62                    if(rein == 0)
63                        outcount1 = 2;
64                    onlyOnce = true;
65                    Stop = false;
66                    if (keyword == null)
67                        Stop = true;
68                    create(read_in_matrix, permuted_matrix, key, keyword, input, output);
69
70                    schleife = 0;
71                    textBox1.Text = input;
72                    readIn(rein);
73                    //sort(schleife);
74                }
75            }, null);
76        }
77
78
79
80        public void readout(object sender, EventArgs e)
81        {
82            DoubleAnimation myDoubleAnimation = new DoubleAnimation();
83            myDoubleAnimation.From = 1.0;
84            myDoubleAnimation.To = 0.0;
85            myDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(1001-slider1.Value));
86
87            if (teba != null)
88            {
89                if (reout == 1)
90                    for (int i = 2; i < teba.GetLength(1); i++)
91                    {
92
93
94                        if (i == teba.GetLength(1) - 1 && outcount < teba.GetLength(0) - 1 && !Stop)
95                        {
96                            myDoubleAnimation.Completed += new EventHandler(my_Help1);
97                        }
98                        teba[outcount, i].BeginAnimation(TextBlock.OpacityProperty, myDoubleAnimation);
99                        if (i > 1)
100                        {
101                            textBox2.Text += teba[outcount, i].Text.ToString();
102                        }
103                    }
104
105
106                else
107                {
108                    for (int i = 0; i < teba.GetLength(0); i++)
109                    {
110
111
112                        if (i == teba.GetLength(0) - 1 && outcount < teba.GetLength(1) - 1 && !Stop)
113                        {
114                            myDoubleAnimation.Completed += new EventHandler(my_Help1);
115                        }
116                        teba[i,outcount].BeginAnimation(TextBlock.OpacityProperty, myDoubleAnimation);
117                        if (outcount > 1)
118                        {
119                            textBox2.Text += teba[i,outcount].Text.ToString();
120                        }
121                    }
122                }
123            }
124        }
125
126        public void sort(int i)
127        {
128            if (teba != null)
129            {
130                if (i < teba.GetLength(0) - 1)
131                {
132                    if (Convert.ToInt32(teba[i, 0].Text) > Convert.ToInt32(teba[i + 1, 0].Text))
133                    {
134                        ani(this, EventArgs.Empty, i, i + 1);
135                        PaarSortiert = false;
136                    }
137                    else
138                    {
139                        schleife++;
140                        sort(schleife);
141                    }
142                }
143                else if (!PaarSortiert)
144                {
145                    schleife = 0;
146                    PaarSortiert = true;
147                    sort(0);
148                }
149
150                if (PaarSortiert && onlyOnce && !Stop) { readout(this, EventArgs.Empty); onlyOnce = false; }
151            }
152
153        }
154
155        public void my_Stop(object sender, EventArgs e)
156        {
157            myGrid.Children.Clear();
158            myGrid.ColumnDefinitions.Clear();
159            myGrid.RowDefinitions.Clear();
160            outcount = 0;
161            onlyOnce = true;
162            schleife = 0;
163            textBox1.Clear();
164            textBox2.Clear();
165            Stop = true;
166        }
167
168        private void my_Help1(object sender, EventArgs e)
169        {
170            outcount++;
171            if (!Stop)
172                readout(this, EventArgs.Empty);
173
174        }
175
176        private void my_Help2(object sender, EventArgs e)
177        {
178            outcount1++;
179            if (!Stop)
180                readIn(rein);
181
182        }
183
184        private void my_Help(object sender, EventArgs e)
185        {
186            schleife++;
187            if (!Stop)
188                sort(schleife);
189        }
190
191        private void my_Completed(object sender, EventArgs e)
192        {
193            Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
194            {
195                if (teba != null)
196                {
197
198                    for (int i = 0; i < teba.GetLength(1); i++)
199                    {
200                        String help = teba[nach, i].Text.ToString();
201                        teba[nach, i].Text = teba[von, i].Text.ToString();
202                        teba[von, i].Text = help;
203
204                        TextBlock help1 = new TextBlock();
205                        help1.Background = teba[nach, i].Background;
206                        teba[nach, i].Background = teba[von, i].Background;
207                        teba[von, i].Background = help1.Background;
208
209                        // textBox1.Text += i;
210                    }
211                }
212                // textBox1.Text += "feuer";
213                DoubleAnimation myFadein = new DoubleAnimation();
214                myFadein.From = 0.0;
215                myFadein.To = 1.0;
216                myFadein.Duration = new Duration(TimeSpan.FromMilliseconds(1001-slider1.Value));
217
218
219                if (teba != null)
220                    for (int i = 0; i < teba.GetLength(1); i++)
221                    {
222                        teba[von, i].BeginAnimation(TextBlock.OpacityProperty, myFadein);
223                        if (i == teba.GetLength(1) - 1 && !Stop)
224                        {
225                            myFadein.Completed += new EventHandler(my_Help);
226                        }
227
228                        teba[nach, i].BeginAnimation(TextBlock.OpacityProperty, myFadein);
229                    }
230
231            }, null);
232        }
233
234        public void ani(object sender, EventArgs e, int von, int nach)
235        {
236            DoubleAnimation myDoubleAnimation = new DoubleAnimation();
237            myDoubleAnimation.From = 1.0;
238            myDoubleAnimation.To = 0.0;
239            myDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(1001-slider1.Value));
240
241            this.von = von;
242            this.nach = nach;
243
244            if (teba != null)
245                for (int i = 0; i < teba.GetLength(1); i++)
246                {
247
248                    teba[von, i].BeginAnimation(TextBlock.OpacityProperty, myDoubleAnimation);
249                    if (i == teba.GetLength(1) - 1 && !Stop)
250                    {
251                        myDoubleAnimation.Completed += new EventHandler(my_Completed);
252                    }
253                    teba[nach, i].BeginAnimation(TextBlock.OpacityProperty, myDoubleAnimation);
254                }
255        }
256
257        public void readIn(int rein)
258        {
259
260
261
262            DoubleAnimation myDoubleAnimation = new DoubleAnimation();
263            myDoubleAnimation.From = 0.0;
264            myDoubleAnimation.To = 1.0;
265            myDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(1001-slider1.Value));
266
267            if (teba != null)
268            {
269                if (rein == 0)
270                {
271                    for (int i = 0; i < teba.GetLength(0); i++)
272                    {
273
274
275                        if (i == teba.GetLength(0) - 1 && outcount1 < teba.GetLength(1) - 1 && !Stop)
276                        {
277                            myDoubleAnimation.Completed += new EventHandler(my_Help2);
278                        }
279                        teba[i, outcount1].BeginAnimation(TextBlock.OpacityProperty, myDoubleAnimation);
280
281                        try
282                        {
283                            textBox1.Text = textBox1.Text.Remove(0, 1);
284                        }
285
286                        catch (ArgumentOutOfRangeException) { }
287
288                        if (i == teba.GetLength(0) - 1 && outcount1 == teba.GetLength(1) - 1 && !Stop)
289                        { sort(schleife); }
290
291                    }
292                }
293
294                else
295                {
296                    for (int i = 2; i < teba.GetLength(1); i++)
297                    {
298
299
300                        if (i == teba.GetLength(1) - 1 && outcount1 < teba.GetLength(0) - 1 && !Stop)
301                        {
302                            myDoubleAnimation.Completed += new EventHandler(my_Help2);
303                        }
304                        teba[outcount1,i].BeginAnimation(TextBlock.OpacityProperty, myDoubleAnimation);
305
306                        try
307                        {
308                            textBox1.Text = textBox1.Text.Remove(0, 1);
309                        }
310
311                        catch (ArgumentOutOfRangeException) { }
312
313                        if (i == teba.GetLength(1) - 1 && outcount1 == teba.GetLength(0) - 1 && !Stop)
314                        { sort(schleife); }
315
316                    }
317                }
318            }
319        }
320
321        public void create(char[,] read_in_matrix, char[,] permuted_matrix, int[] key, String keyword, String input, String output)
322        {
323
324            Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
325            {
326                if (read_in_matrix != null && key != null)
327                {
328                    myGrid.Children.Clear();
329                    myGrid.RowDefinitions.Clear();
330                    myGrid.ColumnDefinitions.Clear();
331                    textBox1.Clear();
332                    textBox2.Clear();
333
334                   
335
336                    mainGrid.Height = 100;
337                    mainGrid.Width = 420;
338
339                    myGrid.Width = 50;
340                    myGrid.Height = 100;
341                    myGrid.ShowGridLines = false;
342
343                    teba = new TextBlock[read_in_matrix.GetLength(0), read_in_matrix.GetLength(1) + 2];
344                   
345                    myGrid.RowDefinitions.Add(new RowDefinition());
346                    for (int i = 0; i < key.Length; i++)
347                    {
348                        if (mainGrid.Width < 800)
349                        {
350                            myGrid.Width += 12;
351                            mainGrid.Width += 12;
352                        }
353                        myGrid.ColumnDefinitions.Add(new ColumnDefinition());
354                        TextBlock txt = new TextBlock();
355                        String s = key[i].ToString();
356                        txt.VerticalAlignment = VerticalAlignment.Center;
357                        txt.Text = s;
358                        txt.FontSize = 12;
359                        txt.FontWeight = FontWeights.ExtraBold;
360                        txt.TextAlignment = TextAlignment.Center;
361                        Grid.SetRow(txt, 0);
362                        Grid.SetColumn(txt, i);
363                        myGrid.Children.Add(txt);
364                        teba[i, 0] = txt;
365
366                    }
367
368                    myGrid.RowDefinitions.Add(new RowDefinition());
369                    if (keyword != null)
370                    {
371                       
372                        char[] ch = keyword.ToCharArray();
373
374                        for (int i = 0; i < key.Length; i++)
375                        {
376
377                            TextBlock txt = new TextBlock();
378                            txt.VerticalAlignment = VerticalAlignment.Center;
379                            txt.Text = ch[i].ToString();
380                            txt.FontSize = 12;
381                            txt.FontWeight = FontWeights.ExtraBold;
382                            txt.TextAlignment = TextAlignment.Center;
383                            Grid.SetRow(txt, 1);
384                            Grid.SetColumn(txt, i);
385                            myGrid.Children.Add(txt);
386                            teba[i, 1] = txt;
387                        }
388                    }
389
390                    for (int i = 0; i < read_in_matrix.GetLength(1); i++)
391                    {
392                        if (mainGrid.Height < 280)
393                        {
394                            mainGrid.Height += 12;
395                            myGrid.Height += 12;
396                        }
397
398
399                        int x = 0;
400                        myGrid.RowDefinitions.Add(new RowDefinition());
401                        if (i % 2 == 0)
402                            x = 1;
403                        for (int ix = 0; ix < read_in_matrix.GetLength(0); ix++)
404                        {
405
406                            TextBlock txt = new TextBlock();
407                            txt.VerticalAlignment = VerticalAlignment.Center;
408                            if (char.GetUnicodeCategory(read_in_matrix[ix, i]).ToString() != "Control")
409                                txt.Text = read_in_matrix[ix, i].ToString();
410                            else
411                                txt.Text = "";
412                            if (ix % 2 == x)
413                                txt.Background = Brushes.AliceBlue;
414                            else
415                                txt.Background = Brushes.LawnGreen;
416                            txt.FontSize = 12;
417                            txt.Opacity = 0.0;
418                            txt.FontWeight = FontWeights.ExtraBold;
419                            txt.TextAlignment = TextAlignment.Center;
420                            Grid.SetRow(txt, i + 2);
421                            Grid.SetColumn(txt, ix);
422                            myGrid.Children.Add(txt);
423                            teba[ix, i + 2] = txt;
424                        }
425                    }
426
427                }
428
429            }
430         , null);
431        }
432
433    }
434
435}
Note: See TracBrowser for help on using the repository browser.