source: trunk/CrypPlugins/Enigma/Rotor2.cs @ 2801

Last change on this file since 2801 was 2801, checked in by weyers, 11 years ago

EnigmaPresentation - EnigmaSettings synchronisation, EnigmaPresentation input management updated

File size: 52.6 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Windows;
6using System.Windows.Controls;
7using System.Windows.Data;
8using System.Windows.Documents;
9using System.Windows.Input;
10using System.Windows.Media;
11using System.Windows.Media.Imaging;
12using System.Windows.Navigation;
13using System.Windows.Shapes;
14using System.Windows.Media.Animation;
15using System.Threading;
16using System.Xaml;
17
18namespace Cryptool.Enigma
19{
20
21
22    class Rotor2 : Canvas
23    {
24        double width;
25        double height;
26        public readonly int map;
27        List<TextBlock> tebo = new List<TextBlock>();
28        List<TextBlock> tebo2 = new List<TextBlock>();
29        Line[] lines = new Line[26];
30        public TextBlock custom = new TextBlock();
31        public TextBlock custom2 = new TextBlock();
32        Canvas lineCanvas = new Canvas();
33        Line lineToAnimat = new Line();
34        Line lineToAnimat2 = new Line();
35        List<Line> lineTrash = new List<Line>();
36        TextBlock[] textBlockToAnimat = new TextBlock[2];
37        TextBlock[] textBlockToAnimat2 = new TextBlock[2];
38
39        StackPanel stack = new StackPanel();
40        StackPanel stack1 = new StackPanel();
41        StackPanel stack2 = new StackPanel();
42
43        public Button up;
44        public Button up1;
45
46        public Button down;
47        public Button down1;
48
49        public TextBlock iAm = new TextBlock();
50
51        public Boolean anomalie = false;
52
53        private Canvas content;
54
55        public double fast = 400;
56
57        public Boolean stop = false;
58
59        public Boolean next = false;
60        Boolean rotated = false;
61        int nextint = 0;
62
63        public int[,] maparray = new int[26, 2];
64
65        int einsnext = 16;
66        int zweinext = 4;
67        int dreinext = 21;
68        int viernext = 9;
69        int fuenfnext = 25;
70
71        int[] eins = new int[] { 4, 10, 12, 5, 11, 6, 3, 16, 21, 25, 13, 19, 14, 22, 24, 7, 23, 20, 18, 15, 0, 8, 1, 17, 2, 9 };
72        int[] zwei = new int[] { 0, 9, 3, 10, 18, 8, 17, 20, 23, 1, 11, 7, 22, 19, 12, 2, 16, 6, 25, 13, 15, 24, 5, 21, 14, 4 };
73        int[] drei = new int[] { 1, 3, 5, 7, 9, 11, 2, 15, 17, 19, 23, 21, 25, 13, 24, 4, 8, 22, 6, 0, 10, 12, 20, 18, 16, 14 };
74        int[] vier = new int[] { 4, 18, 14, 21, 15, 25, 9, 0, 24, 16, 20, 8, 17, 7, 23, 11, 13, 5, 19, 6, 10, 3, 2, 12, 22, 1 };
75        int[] fuenf = new int[] { 21, 25, 1, 17, 6, 8, 19, 24, 20, 15, 18, 3, 13, 7, 11, 23, 0, 22, 12, 9, 16, 14, 5, 4, 2, 10 };
76
77        public void changeoffset(int offset,int ringoffset)
78        {
79            tebo = new List<TextBlock>();
80            tebo2 = new List<TextBlock>();
81            lines = new Line[26];
82            custom = new TextBlock();
83            custom2 = new TextBlock();
84            lineCanvas = new Canvas();
85            lineToAnimat = new Line();
86            lineToAnimat2 = new Line();
87            lineTrash = new List<Line>();
88            stack = new StackPanel();
89            stack1 = new StackPanel();
90            stack2 = new StackPanel();
91            iAm = new TextBlock();
92
93
94            this.Children.Remove(content);
95            this.content = alpha(offset, ringoffset - 1);
96            this.Children.Add(content);
97
98        }
99
100       
101
102        public int returnMap()
103        {
104            return map;
105        }
106
107        public Rotor2(int map, double width, double height, int offset, int ringoffset)
108        {
109
110
111            StackPanel s = new StackPanel();
112            s.Orientation = Orientation.Vertical;
113
114            this.width = width;
115            this.height = height;
116            this.map = map;
117
118            this.content = alpha(offset, ringoffset - 1);
119            this.Children.Add(content);
120        }
121
122        public int mapto(int x, Boolean off)
123        {
124
125
126            int help = 0;
127
128
129            lineToAnimat = lines[maparray[x, 0]];
130            textBlockToAnimat[0] = tebo[maparray[x, 0]];
131            textBlockToAnimat[1] = tebo2[maparray[x, 1]];
132            rotated = false;
133
134            if (off)
135            {
136                tebo[x].Background = Brushes.Green;
137                tebo2[maparray[x, 1]].Background = Brushes.Green;
138                //tebo[x].Text = "ä";
139                lines[x].Stroke = Brushes.Green;
140                lines[x].Opacity = 1.0;
141            }
142            return maparray[x, 1];
143        }
144
145        public int maptoreverse(int y, Boolean off)
146        {
147            int help = 0;
148            for (int x = 0; x < maparray.GetLength(0); x++)
149            {
150                if (maparray[x, 1] == y)
151                    help = x;
152
153            }
154
155            // tebo[help].Background = Brushes.Red;
156            //lines[help].Stroke = Brushes.Red;
157            //lines[help].Opacity = 1.0;
158
159            textBlockToAnimat2[1] = tebo2[maparray[y, 0]];
160            textBlockToAnimat2[0] = tebo[help];
161
162            lineToAnimat2 = lines[help];
163            if (off)
164            {
165                tebo2[y].Background = Brushes.Red;
166                tebo[help].Background = Brushes.Red;
167                //tebo[x].Text = "ä";
168                lines[help].Stroke = Brushes.Red;
169                lines[help].Opacity = 1.0;
170            }
171            return help;
172        }
173
174        public void startAnimation()
175        {
176            if (!stop)
177            animateThisTebo(textBlockToAnimat[0], true);
178
179        }
180
181        public void startAnimationReverse()
182        {
183            if(!stop)
184            animateThisTebo2(textBlockToAnimat2[1], true);
185        }
186
187        private void helpNextAnimationMethod13(object sender, EventArgs e)
188        {
189            if (!stop)
190            animateThisLine2(lineToAnimat2);
191        }
192
193        private void helpNextAnimationMethod14(object sender, EventArgs e)
194        {
195            if (!stop)
196            helpNextAnimation2(this, EventArgs.Empty);
197        }
198
199        private void helpNextAnimationMethod1(object sender, EventArgs e)
200        {
201            if (!stop)
202            animateThisLine(lineToAnimat);
203        }
204
205        private void helpNextAnimationMethod12(object sender, EventArgs e)
206        {
207            if (!stop)
208            helpNextAnimation(this, EventArgs.Empty);
209        }
210
211        private void helpNextAnimationMethod2(object sender, EventArgs e)
212        {
213            if (!stop)
214            animateThisTebo2(textBlockToAnimat2[0], false);
215        }
216
217        private void helpNextAnimationMethod(object sender, EventArgs e)
218        {
219            if (!stop)
220            animateThisTebo(textBlockToAnimat[1], false);
221        }
222
223        public event EventHandler helpNextAnimation;
224        public event EventHandler helpNextAnimation2;
225
226        public event EventHandler updone;
227        public event EventHandler downdone;
228        public event EventHandler up1done;
229        public event EventHandler down1done;
230
231
232
233        private void animateThisTebo(TextBlock tebo, Boolean b)
234        {
235            SolidColorBrush brush = new SolidColorBrush();
236            brush.Color = Colors.Transparent;
237
238            ColorAnimation colorAni = new ColorAnimation();
239            string s = tebo.Text;
240            colorAni.From = Colors.Gainsboro;
241            if (tebo.Background == Brushes.Silver)
242                colorAni.From = Colors.Silver;
243            colorAni.To = Colors.YellowGreen;
244            colorAni.Duration = new Duration(TimeSpan.FromMilliseconds(fast));
245            if (b)
246                colorAni.Completed += helpNextAnimationMethod1;
247            else
248                colorAni.Completed += helpNextAnimationMethod12;
249
250            tebo.Background = brush;
251            //  tebo.Background = Brushes.HotPink;
252            brush.BeginAnimation(SolidColorBrush.ColorProperty, colorAni);
253        }
254
255        private void animateThisTebo2(TextBlock tebo, Boolean b)
256        {
257            SolidColorBrush brush = new SolidColorBrush();
258            brush.Color = Colors.Transparent;
259
260            ColorAnimation colorAni = new ColorAnimation();
261            string s = tebo.Text;
262            colorAni.From = Colors.Gainsboro;
263            if (tebo.Background == Brushes.Silver)
264                colorAni.From = Colors.Silver;
265            colorAni.To = Colors.Tomato;
266            colorAni.Duration = new Duration(TimeSpan.FromMilliseconds(fast));
267
268            if (b)
269                colorAni.Completed += helpNextAnimationMethod13;
270            else
271                colorAni.Completed += helpNextAnimationMethod14;
272
273            tebo.Background = brush;
274
275            brush.BeginAnimation(SolidColorBrush.ColorProperty, colorAni);
276        }
277
278        private void animateThisLine2(Line l)
279        {
280
281
282
283            Line l1 = new Line();
284
285            Canvas.SetLeft(l, Canvas.GetLeft(l));
286
287            Canvas.SetTop(l, Canvas.GetTop(l));
288
289            l1.StrokeThickness = 5.0;
290            l1.Stroke = Brushes.Tomato;
291
292
293            l1.X1 = l.X2;
294            l1.X2 = l.X2;
295            DoubleAnimation mydouble1 = new DoubleAnimation();
296            if (rotated)
297            {
298                l1.Y1 = l.Y2 - 30;
299                l1.Y2 = l.Y2 - 30;
300
301
302                mydouble1.From = l.Y2 - 30;
303                mydouble1.To = l.Y1 - 30;
304                double abst = Math.Sqrt(Math.Pow(l.X2 - l.X1, 2) + Math.Pow(l.Y2 - l.Y1, 2));
305                if (abst == 0)
306                    abst = 1;
307
308                mydouble1.Duration = new Duration(TimeSpan.FromMilliseconds((abst * fast)));
309
310            }
311            else
312            {
313                l1.Y1 = l.Y2;
314                l1.Y2 = l.Y2;
315
316
317                mydouble1.From = l.Y2;
318                mydouble1.To = l.Y1;
319                mydouble1.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
320
321            }
322
323            DoubleAnimation mydouble = new DoubleAnimation();
324            mydouble.From = l.X2;
325            mydouble.To = l.X1;
326            mydouble.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
327            mydouble.Completed += helpNextAnimationMethod2;
328
329
330            lineCanvas.Children.Add(l1);
331
332            l1.BeginAnimation(Line.X2Property, mydouble);
333            l1.BeginAnimation(Line.Y2Property, mydouble1);
334
335            lineTrash.Add(l1);
336        }
337
338        private void animateThisLine(Line l)
339        {
340
341            //resetColors();
342
343            Line l1 = new Line();
344
345            Canvas.SetLeft(l, Canvas.GetLeft(l));
346
347            Canvas.SetTop(l, Canvas.GetTop(l));
348
349            l1.StrokeThickness = 5.0;
350            l1.Stroke = Brushes.LawnGreen;
351
352
353            l1.X1 = l.X1;
354            l1.X2 = l.X1;
355            DoubleAnimation mydouble1 = new DoubleAnimation();
356            if (rotated)
357            {
358                l1.Y1 = l.Y1 - 30;
359                l1.Y2 = l.Y1 - 30;
360
361
362                mydouble1.From = l.Y1 - 30;
363                mydouble1.To = l.Y2 - 30;
364
365                double abst = Math.Sqrt(Math.Pow(l.X2 - l.X1, 2) + Math.Pow(l.Y2 - l.Y1, 2));
366                if (abst == 0)
367                    abst = 1;
368                mydouble1.Duration = new Duration(TimeSpan.FromMilliseconds((abst * fast)));
369
370            }
371            else
372            {
373                l1.Y1 = l.Y1;
374                l1.Y2 = l.Y1;
375
376
377                mydouble1.From = l.Y1;
378                mydouble1.To = l.Y2;
379                mydouble1.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
380
381            }
382
383            DoubleAnimation mydouble = new DoubleAnimation();
384            mydouble.From = l.X1;
385            mydouble.To = l.X2;
386            mydouble.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
387            mydouble.Completed += helpNextAnimationMethod;
388
389
390            lineCanvas.Children.Add(l1);
391
392            l1.BeginAnimation(Line.X2Property, mydouble);
393            l1.BeginAnimation(Line.Y2Property, mydouble1);
394
395            lineTrash.Add(l1);
396        }
397
398        public void coloring(Brush brush, int x)
399        {
400
401        }
402
403
404
405        private void helpdownererclick(object sender, EventArgs e)
406        {
407
408            DoubleAnimation mydouble = new DoubleAnimation();
409            mydouble.From = 30.0;
410            mydouble.To = 60.0;
411            mydouble.Duration = new Duration(TimeSpan.FromMilliseconds((0)));
412            //mydouble.RepeatBehavior = RepeatBehavior.Forever;
413
414            DoubleAnimation mydouble1 = new DoubleAnimation();
415            mydouble1.From = -30.0;
416            mydouble1.To = 0.0;
417            mydouble1.Duration = new Duration(TimeSpan.FromMilliseconds((0)));
418            //mydouble1.RepeatBehavior = RepeatBehavior.Forever;
419            DoubleAnimation mydouble3 = new DoubleAnimation();
420            mydouble3.From = 0.0;
421            mydouble3.To = 1.0;
422            mydouble3.Duration = new Duration(TimeSpan.FromMilliseconds((0)));
423
424            DoubleAnimation mydouble4 = new DoubleAnimation();
425            mydouble4.From = 0.0;
426            mydouble4.To = 1.0;
427            mydouble4.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
428
429            custom.BeginAnimation(OpacityProperty, mydouble4);
430
431            tebo[25].BeginAnimation(OpacityProperty, mydouble3);
432            tebo2[25].BeginAnimation(OpacityProperty, mydouble3);
433
434            stack.Children.RemoveAt(0);
435            stack1.Children.RemoveAt(0);
436
437
438            stack.BeginAnimation(Canvas.TopProperty, mydouble);
439            stack1.BeginAnimation(Canvas.TopProperty, mydouble);
440            lineCanvas.BeginAnimation(Canvas.TopProperty, mydouble1);
441
442
443            char c = custom.Text[0];
444            int ix = (int)c - 65;
445            if (ix > 0)
446                ix = ix - 1;
447            else
448                ix = 25;
449
450
451            custom.Text = Convert.ToChar(ix + 65) + "";
452
453            TextBlock dummy = tebo[25];
454            tebo.RemoveAt(25);
455            tebo.Insert(0, dummy);
456
457            TextBlock dummy2 = tebo2[25];
458            tebo2.RemoveAt(25);
459            tebo2.Insert(0, dummy2);
460
461            stack.Children.RemoveAt(25);
462            stack.Children.Insert(0, dummy);
463
464
465            stack1.Children.RemoveAt(25);
466            stack1.Children.Insert(0, dummy2);
467
468            derotate();
469            downdone(down, EventArgs.Empty);
470            b = true;
471        }
472
473        private void downerclick(object sender, EventArgs e)
474        {
475            if (b)
476            {
477                resetColors();
478                b = false;
479                DoubleAnimation mydouble = new DoubleAnimation();
480                mydouble.From = 31.0;
481                mydouble.To = 60.0;
482                mydouble.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
483                //mydouble.RepeatBehavior = RepeatBehavior.Forever;
484
485                DoubleAnimation mydouble1 = new DoubleAnimation();
486                mydouble1.From = 0.0;
487                mydouble1.To = 30.0;
488                mydouble1.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
489                //mydouble1.RepeatBehavior = RepeatBehavior.Forever;
490
491                DoubleAnimation mydouble2 = new DoubleAnimation();
492                mydouble2.From = 0.0;
493                mydouble2.To = 1.0;
494                mydouble2.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
495
496
497
498                DoubleAnimation mydouble3 = new DoubleAnimation();
499                mydouble3.From = 1.0;
500                mydouble3.To = 0.0;
501                mydouble3.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
502
503                DoubleAnimation mydouble4 = new DoubleAnimation();
504                mydouble4.From = 850.0;
505                mydouble4.To = 50.0;
506                mydouble4.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
507
508                mydouble1.Completed += helpdownererclick;
509                TextBlock dummy = cloneTextBlock(tebo[25]);
510
511                TextBlock dummy2 = cloneTextBlock(tebo2[25]);
512
513
514                Line l = new Line();
515                l = this.cloneLine(lines[0]);
516
517                //stack.Children.Add(dummy);
518                stack.Children.Insert(0, dummy);
519                //stack1.Children.Add(dummy2);
520                stack1.Children.Insert(0, dummy2);
521                tebo[25].BeginAnimation(OpacityProperty, mydouble3);
522                tebo2[25].BeginAnimation(OpacityProperty, mydouble3);
523                custom.BeginAnimation(OpacityProperty, mydouble3);
524
525                dummy.BeginAnimation(OpacityProperty, mydouble2);
526                dummy2.BeginAnimation(OpacityProperty, mydouble2);
527
528                lines[25].BeginAnimation(Line.Y1Property, mydouble4);
529
530                for (int i = 0; i < maparray.GetLength(0); i++)
531                    if (maparray[i, 1] == 25)
532                        lines[i].BeginAnimation(Line.Y2Property, mydouble4);
533
534                stack.BeginAnimation(Canvas.TopProperty, mydouble);
535
536                stack1.BeginAnimation(Canvas.TopProperty, mydouble);
537
538                lineCanvas.BeginAnimation(Canvas.TopProperty, mydouble1);
539            }
540        }
541
542
543        private void helpdownererclick1(object sender, EventArgs e)
544        {
545
546            DoubleAnimation mydouble = new DoubleAnimation();
547            mydouble.From = 30.0;
548            mydouble.To = 60.0;
549            mydouble.Duration = new Duration(TimeSpan.FromMilliseconds((0)));
550            //mydouble.RepeatBehavior = RepeatBehavior.Forever;
551
552            DoubleAnimation mydouble1 = new DoubleAnimation();
553            mydouble1.From = -30.0;
554            mydouble1.To = 0.0;
555            mydouble1.Duration = new Duration(TimeSpan.FromMilliseconds((0)));
556            //mydouble1.RepeatBehavior = RepeatBehavior.Forever;
557            DoubleAnimation mydouble3 = new DoubleAnimation();
558            mydouble3.From = 0.0;
559            mydouble3.To = 1.0;
560            mydouble3.Duration = new Duration(TimeSpan.FromMilliseconds((0)));
561
562            DoubleAnimation mydouble4 = new DoubleAnimation();
563            mydouble4.From = 0.0;
564            mydouble4.To = 1.0;
565            mydouble4.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
566
567            custom2.BeginAnimation(OpacityProperty, mydouble4);
568
569            tebo[25].BeginAnimation(OpacityProperty, mydouble3);
570            //tebo2[25].BeginAnimation(OpacityProperty, mydouble3);
571
572            stack.Children.RemoveAt(0);
573            //stack1.Children.RemoveAt(0);
574
575
576            stack.BeginAnimation(Canvas.TopProperty, mydouble);
577            //stack1.BeginAnimation(Canvas.TopProperty, mydouble);
578            lineCanvas.BeginAnimation(Canvas.TopProperty, mydouble1);
579
580            TextBlock dummy = tebo[25];
581            tebo.RemoveAt(25);
582            tebo.Insert(0, dummy);
583
584            stack.Children.RemoveAt(25);
585            stack.Children.Insert(0, dummy);
586
587
588            int x = Int32.Parse(custom2.Text);
589            if (x != 26)
590                custom2.Text = "" + (x + 1);
591            else
592                custom2.Text = 1 + "";
593
594
595            derotate();
596            for (int i = 0; i < tebo.Count; i++)
597            {
598                if (tebo[i].FontWeight == FontWeights.UltraBold)
599                {
600                    if (i == 0)
601                    {
602                        tebo[25].Foreground = Brushes.Red;
603                        tebo[25].FontWeight = FontWeights.UltraBold;
604                        tebo[0].FontWeight = FontWeights.Normal;
605                        tebo[0].Foreground = Brushes.Black;
606                        break;
607                    }
608                    else if (i <= 25 && i > 0)
609                    {
610                        tebo[i - 1].Foreground = Brushes.Red;
611                        tebo[i - 1].FontWeight = FontWeights.UltraBold;
612                        tebo[i].FontWeight = FontWeights.Normal;
613                        tebo[i].Foreground = Brushes.Black;
614                    }
615
616                }
617            }
618            down1done(down1, EventArgs.Empty);
619            b = true;
620        }
621
622        public void downerclick1(object sender, EventArgs e)
623        {
624            if (b)
625            {
626                resetColors();
627                b = false;
628                DoubleAnimation mydouble = new DoubleAnimation();
629                mydouble.From = 31.0;
630                mydouble.To = 60.0;
631                mydouble.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
632                //mydouble.RepeatBehavior = RepeatBehavior.Forever;
633
634                DoubleAnimation mydouble1 = new DoubleAnimation();
635                mydouble1.From = 0.0;
636                mydouble1.To = 30.0;
637                mydouble1.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
638                //mydouble1.RepeatBehavior = RepeatBehavior.Forever;
639
640                DoubleAnimation mydouble2 = new DoubleAnimation();
641                mydouble2.From = 0.0;
642                mydouble2.To = 1.0;
643                mydouble2.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
644
645
646
647                DoubleAnimation mydouble3 = new DoubleAnimation();
648                mydouble3.From = 1.0;
649                mydouble3.To = 0.0;
650                mydouble3.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
651
652                DoubleAnimation mydouble4 = new DoubleAnimation();
653                mydouble4.From = 850.0;
654                mydouble4.To = 50.0;
655                mydouble4.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
656
657                mydouble1.Completed += helpdownererclick1;
658                TextBlock dummy = cloneTextBlock(tebo[25]);
659
660                TextBlock dummy2 = cloneTextBlock(tebo2[25]);
661
662
663
664                Line l = new Line();
665                l = this.cloneLine(lines[0]);
666
667                //stack.Children.Add(dummy);
668                stack.Children.Insert(0, dummy);
669                //stack1.Children.Add(dummy2);
670                //stack1.Children.Insert(0, dummy2);
671                tebo[25].BeginAnimation(OpacityProperty, mydouble3);
672                //tebo2[25].BeginAnimation(OpacityProperty, mydouble3);
673                custom2.BeginAnimation(OpacityProperty, mydouble3);
674
675                dummy.BeginAnimation(OpacityProperty, mydouble2);
676                //dummy2.BeginAnimation(OpacityProperty, mydouble2);
677
678                lines[25].BeginAnimation(Line.Y1Property, mydouble4);
679
680                for (int i = 0; i < maparray.GetLength(0); i++)
681                    if (maparray[i, 1] == 25)
682                        lines[i].BeginAnimation(Line.Y2Property, mydouble4);
683
684                stack.BeginAnimation(Canvas.TopProperty, mydouble);
685
686                //stack1.BeginAnimation(Canvas.TopProperty, mydouble);
687
688                lineCanvas.BeginAnimation(Canvas.TopProperty, mydouble1);
689            }
690
691        }
692
693
694        public void derotate()
695        {
696
697
698
699            next = false;
700            if (tebo2[0].Text[0] == Convert.ToChar(nextint + 65))
701            {
702                next = true;
703            }
704            //int dummy = maparray[0,0];
705            int dummy1 = maparray[25, 1];
706
707            for (int i = 25; i > 0; i--)
708            {
709                //  maparray[i,0] = maparray[i + 1, 0];
710                if (maparray[i - 1, 1] == 25)
711                    maparray[i, 1] = 0;
712                else
713                    maparray[i, 1] = maparray[i - 1, 1] + 1;
714            }
715
716            //maparray[maparray.GetLength(0) - 1, 0] = dummy;
717            if (dummy1 == 25)
718                maparray[0, 1] = 0;
719            else
720                maparray[0, 1] = dummy1 + 1;
721
722
723
724
725
726            foreach (Line l in lines)
727            {
728                lineCanvas.Children.Remove(l);
729            }
730            for (int i = 0; i < 26; i++)
731            {
732                Line t1 = new Line();
733                t1.X1 = 170;
734                t1.Y1 = 29.4 * i + 75;
735                t1.Opacity = 0.5;
736                t1.X2 = 30;
737                t1.Y2 = 0;
738
739                t1.Stroke = Brushes.Black;
740
741                t1.Y2 = 29.4 * maparray[i, 1] + 75;
742
743                lines[i] = t1;
744                lineCanvas.Children.Add(t1);
745            }
746        }
747
748        private void helpupperclick(object sender, EventArgs e)
749        {
750
751            DoubleAnimation mydouble = new DoubleAnimation();
752            mydouble.From = 30.0;
753            mydouble.To = 60.0;
754            mydouble.Duration = new Duration(TimeSpan.FromMilliseconds((0)));
755            //mydouble.RepeatBehavior = RepeatBehavior.Forever;
756
757            DoubleAnimation mydouble1 = new DoubleAnimation();
758            mydouble1.From = -30.0;
759            mydouble1.To = 0.0;
760            mydouble1.Duration = new Duration(TimeSpan.FromMilliseconds((0)));
761            //mydouble1.RepeatBehavior = RepeatBehavior.Forever;
762
763            DoubleAnimation mydouble3 = new DoubleAnimation();
764            mydouble3.From = 0.0;
765            mydouble3.To = 1.0;
766            mydouble3.Duration = new Duration(TimeSpan.FromMilliseconds((0)));
767            tebo[0].BeginAnimation(OpacityProperty, mydouble3);
768            tebo2[0].BeginAnimation(OpacityProperty, mydouble3);
769
770            DoubleAnimation mydouble4 = new DoubleAnimation();
771            mydouble4.From = 0.0;
772            mydouble4.To = 1.0;
773            mydouble4.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
774
775            custom.BeginAnimation(OpacityProperty, mydouble4);
776
777            //stack.Children.RemoveAt(26);
778            //stack1.Children.RemoveAt(26);
779
780
781            stack.BeginAnimation(Canvas.TopProperty, mydouble);
782            stack1.BeginAnimation(Canvas.TopProperty, mydouble);
783            lineCanvas.BeginAnimation(Canvas.TopProperty, mydouble1);
784
785
786            char c = custom.Text[0];
787            int ix = (int)c - 65;
788            ix = (ix + 1) % 26;
789
790            custom.Text = Convert.ToChar(ix + 65) + "";
791
792            TextBlock dummy = cloneTextBlock(tebo[0]);
793            tebo.RemoveAt(0);
794            tebo.Add((TextBlock)stack.Children[26]);
795            //tebo.Insert(25, dummy);
796
797            TextBlock dummy2 = cloneTextBlock(tebo2[0]);
798            tebo2.RemoveAt(0);
799            tebo2.Add((TextBlock)stack1.Children[26]);
800            //tebo2.Insert(25,dummy2);
801
802            stack.Children.RemoveAt(0);
803            //stack.Children.Add(dummy);
804
805            stack1.Children.RemoveAt(0);
806            //stack1.Children.Add(dummy2);
807
808
809
810            rotate();
811            EventArgs test = new EventArgs();
812           
813            updone(up, EventArgs.Empty);
814            b = true;
815
816        }
817        Boolean b = true;
818        public void upperclick(object sender, EventArgs e)
819        {
820            //int dummy = maparray[0,0];
821
822            if (b)
823            {
824                int dummy1 = maparray[0, 1];
825
826
827                for (int i = 0; i < maparray.GetLength(0) - 1; i++)
828                {
829                    //  maparray[i,0] = maparray[i + 1, 0];
830                    if (maparray[i + 1, 1] == 0)
831                        maparray[i, 1] = 25;
832                    else
833                        maparray[i, 1] = maparray[i + 1, 1] - 1;
834                }
835
836                //maparray[maparray.GetLength(0) - 1, 0] = dummy;
837                if (dummy1 == 0)
838                    maparray[maparray.GetLength(0) - 1, 1] = 25;
839                else
840                    maparray[maparray.GetLength(0) - 1, 1] = dummy1 - 1;
841
842
843                resetColors();
844                b = false;
845                DoubleAnimation mydouble = new DoubleAnimation();
846                mydouble.From = 60.0;
847                mydouble.To = 31.0;
848                mydouble.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
849                //mydouble.RepeatBehavior = RepeatBehavior.Forever;
850
851                DoubleAnimation mydouble1 = new DoubleAnimation();
852                mydouble1.From = 0.0;
853                mydouble1.To = -30.0;
854                mydouble1.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
855                //mydouble1.RepeatBehavior = RepeatBehavior.Forever;
856
857                DoubleAnimation mydouble2 = new DoubleAnimation();
858                mydouble2.From = 0.0;
859                mydouble2.To = 1.0;
860                mydouble2.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
861
862                DoubleAnimation mydouble3 = new DoubleAnimation();
863                mydouble3.From = 1.0;
864                mydouble3.To = 0.0;
865                mydouble3.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
866
867                DoubleAnimation mydouble4 = new DoubleAnimation();
868                mydouble4.From = 75;
869                mydouble4.To = 850.0;
870                mydouble4.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
871
872                mydouble1.Completed += helpupperclick;
873                TextBlock dummy = cloneTextBlock(tebo[0]);
874
875                TextBlock dummy2 = cloneTextBlock(tebo2[0]);
876
877
878
879
880                Line l = new Line();
881                l = this.cloneLine(lines[0]);
882
883                stack.Children.Add(dummy);
884                stack1.Children.Add(dummy2);
885                tebo[0].BeginAnimation(OpacityProperty, mydouble3);
886                tebo2[0].BeginAnimation(OpacityProperty, mydouble3);
887                custom.BeginAnimation(OpacityProperty, mydouble3);
888
889                dummy.BeginAnimation(OpacityProperty, mydouble2);
890                dummy2.BeginAnimation(OpacityProperty, mydouble2);
891
892                lines[0].BeginAnimation(Line.Y1Property, mydouble4);
893
894                for (int i = 0; i < maparray.GetLength(0); i++)
895                    if (maparray[i, 1] == 25)
896                        if (i + 1 != 26)
897                            lines[i + 1].BeginAnimation(Line.Y2Property, mydouble4);
898                        else
899                            lines[0].BeginAnimation(Line.Y2Property, mydouble4);
900
901
902                stack.BeginAnimation(Canvas.TopProperty, mydouble);
903
904                stack1.BeginAnimation(Canvas.TopProperty, mydouble);
905
906                lineCanvas.BeginAnimation(Canvas.TopProperty, mydouble1);
907
908               
909            }
910        }
911
912        private Line cloneLine(Line l)
913        {
914            Line l1 = new Line();
915            l1.Stroke = l.Stroke;
916            l1.X1 = l.X1;
917            l1.X2 = l.X2;
918            l1.Y1 = l.Y1;
919            l1.Y2 = l.Y2;
920            return l1;
921        }
922
923        private TextBlock cloneTextBlock(TextBlock t)
924        {
925            TextBlock dummy = new TextBlock();
926            dummy.Text = t.Text;
927            dummy.Background = t.Background;
928            dummy.Height = t.Height;
929            dummy.Width = t.Width;
930            dummy.FontSize = t.FontSize;
931            dummy.TextAlignment = t.TextAlignment;
932            dummy.Foreground = t.Foreground;
933            dummy.FontWeight = t.FontWeight;
934            return dummy;
935        }
936        private void helpupperclick1(object sender, EventArgs e)
937        {
938            DoubleAnimation mydouble = new DoubleAnimation();
939            mydouble.From = 30.0;
940            mydouble.To = 60.0;
941            mydouble.Duration = new Duration(TimeSpan.FromMilliseconds((0)));
942            //mydouble.RepeatBehavior = RepeatBehavior.Forever;
943
944            DoubleAnimation mydouble1 = new DoubleAnimation();
945            mydouble1.From = -30.0;
946            mydouble1.To = 0.0;
947            mydouble1.Duration = new Duration(TimeSpan.FromMilliseconds((0)));
948            //mydouble1.RepeatBehavior = RepeatBehavior.Forever;
949
950            DoubleAnimation mydouble3 = new DoubleAnimation();
951            mydouble3.From = 0.0;
952            mydouble3.To = 1.0;
953            mydouble3.Duration = new Duration(TimeSpan.FromMilliseconds((0)));
954            tebo[0].BeginAnimation(OpacityProperty, mydouble3);
955            tebo2[0].BeginAnimation(OpacityProperty, mydouble3);
956
957            DoubleAnimation mydouble4 = new DoubleAnimation();
958            mydouble4.From = 0.0;
959            mydouble4.To = 1.0;
960            mydouble4.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
961
962            custom2.BeginAnimation(OpacityProperty, mydouble4);
963
964            stack.Children.RemoveAt(26);
965            //stack1.Children.RemoveAt(26);
966
967
968            stack.BeginAnimation(Canvas.TopProperty, mydouble);
969            stack1.BeginAnimation(Canvas.TopProperty, mydouble);
970            lineCanvas.BeginAnimation(Canvas.TopProperty, mydouble1);
971
972            TextBlock dummy = tebo[0];
973            tebo.RemoveAt(0);
974            tebo.Add(dummy);
975
976            stack.Children.RemoveAt(0);
977            stack.Children.Add(dummy);
978
979
980            int x = Int32.Parse(custom2.Text);
981            if (x != 1)
982                custom2.Text = "" + (x - 1);
983            else
984                custom2.Text = 26 + "";
985
986
987            //int dummy = maparray[0,0];
988            int dummy1 = maparray[0, 1];
989
990
991            for (int i = 0; i < maparray.GetLength(0) - 1; i++)
992            {
993                //  maparray[i,0] = maparray[i + 1, 0];
994                if (maparray[i + 1, 1] == 0)
995                    maparray[i, 1] = 25;
996                else
997                    maparray[i, 1] = maparray[i + 1, 1] - 1;
998            }
999
1000            //maparray[maparray.GetLength(0) - 1, 0] = dummy;
1001            if (dummy1 == 0)
1002                maparray[maparray.GetLength(0) - 1, 1] = 25;
1003            else
1004                maparray[maparray.GetLength(0) - 1, 1] = dummy1 - 1;
1005
1006            rotate();
1007
1008            for (int i = tebo.Count - 1; i > -1; i--)
1009            {
1010                if (tebo[i].FontWeight == FontWeights.UltraBold)
1011                {
1012                    if (i == 0)
1013                    {
1014                        tebo[0].Foreground = Brushes.Red;
1015                        tebo[0].FontWeight = FontWeights.UltraBold;
1016                        tebo[1].FontWeight = FontWeights.Normal;
1017                        tebo[1].Foreground = Brushes.Black;
1018                    }
1019                    else if (i != 25)
1020                    {
1021                        tebo[i + 1].Foreground = Brushes.Red;
1022                        tebo[i + 1].FontWeight = FontWeights.UltraBold;
1023                        tebo[i].FontWeight = FontWeights.Normal;
1024                        tebo[i].Foreground = Brushes.Black;
1025                    }
1026
1027                    else
1028                    {
1029                        tebo[0].Foreground = Brushes.Red;
1030                        tebo[0].FontWeight = FontWeights.UltraBold;
1031                        tebo[25].FontWeight = FontWeights.Normal;
1032                        tebo[25].Foreground = Brushes.Black;
1033
1034                    }
1035                }
1036            }
1037            up1done(up1, EventArgs.Empty);
1038            b = true;
1039        }
1040
1041        public void upperclick1(object sender, EventArgs e)
1042        {
1043
1044            if (b)
1045            {
1046
1047                resetColors();
1048                b = false;
1049                DoubleAnimation mydouble = new DoubleAnimation();
1050                mydouble.From = 60.0;
1051                mydouble.To = 31.0;
1052                mydouble.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
1053                //mydouble.RepeatBehavior = RepeatBehavior.Forever;
1054
1055                DoubleAnimation mydouble1 = new DoubleAnimation();
1056                mydouble1.From = 0.0;
1057                mydouble1.To = -30.0;
1058                mydouble1.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
1059                //mydouble1.RepeatBehavior = RepeatBehavior.Forever;
1060
1061                DoubleAnimation mydouble2 = new DoubleAnimation();
1062                mydouble2.From = 0.0;
1063                mydouble2.To = 1.0;
1064                mydouble2.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
1065
1066                DoubleAnimation mydouble3 = new DoubleAnimation();
1067                mydouble3.From = 1.0;
1068                mydouble3.To = 0.0;
1069                mydouble3.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
1070
1071                DoubleAnimation mydouble4 = new DoubleAnimation();
1072                mydouble4.From = 100.0;
1073                mydouble4.To = 850.0;
1074                mydouble4.Duration = new Duration(TimeSpan.FromMilliseconds((fast)));
1075
1076                mydouble1.Completed += helpupperclick1;
1077                TextBlock dummy = cloneTextBlock(tebo[0]);
1078
1079                TextBlock dummy2 = cloneTextBlock(tebo2[0]);
1080
1081
1082
1083
1084                Line l = new Line();
1085                l = this.cloneLine(lines[0]);
1086
1087                stack.Children.Add(dummy);
1088                //stack1.Children.Add(dummy2);
1089                tebo[0].BeginAnimation(OpacityProperty, mydouble3);
1090                //tebo2[0].BeginAnimation(OpacityProperty, mydouble3);
1091                custom2.BeginAnimation(OpacityProperty, mydouble3);
1092
1093                dummy.BeginAnimation(OpacityProperty, mydouble2);
1094                //dummy2.BeginAnimation(OpacityProperty, mydouble2);
1095
1096                lines[0].BeginAnimation(Line.Y1Property, mydouble4);
1097
1098                for (int i = 0; i < maparray.GetLength(0); i++)
1099                    if (maparray[i, 1] == 0)
1100                        lines[i].BeginAnimation(Line.Y2Property, mydouble4);
1101
1102                stack.BeginAnimation(Canvas.TopProperty, mydouble);
1103
1104                //stack1.BeginAnimation(Canvas.TopProperty, mydouble);
1105
1106                lineCanvas.BeginAnimation(Canvas.TopProperty, mydouble1);
1107
1108            }
1109           
1110        }
1111
1112        public void rotate()
1113        {
1114
1115            next = false;
1116            rotated = true;
1117            if (tebo2[0].Text[0] == Convert.ToChar(nextint + 65))
1118            {
1119                next = true;
1120            }
1121
1122            foreach (Line l in lines)
1123            {
1124                lineCanvas.Children.Remove(l);
1125            }
1126
1127            for (int i = 0; i < 26; i++)
1128            {
1129                Line t1 = new Line();
1130                t1.X1 = 170;
1131                t1.Y1 = 29.4 * i + 75;
1132                t1.Opacity = 0.5;
1133                t1.X2 = 30;
1134                t1.Y2 = 0;
1135
1136                t1.Stroke = Brushes.Black;
1137
1138                t1.Y2 = 29.4 * maparray[i, 1] + 75;
1139
1140                lines[i] = t1;
1141                lineCanvas.Children.Add(t1);
1142            }
1143
1144        }
1145
1146        public void resetColors()
1147        {
1148            foreach (Line l in lineTrash)
1149                lineCanvas.Children.Remove(l);
1150
1151            lineTrash.Clear();
1152
1153
1154            if (Int32.Parse(tebo[0].Text) % 2 == 0)
1155                for (int i = 0; i < tebo.Count; i++)
1156                {
1157                    tebo[i].Background = Brushes.Silver;
1158
1159                    if (i % 2 == 0)
1160                        tebo[i].Background = Brushes.Gainsboro;
1161
1162
1163                }
1164            else
1165                for (int i = 0; i < tebo.Count; i++)
1166                {
1167                    tebo[i].Background = Brushes.Gainsboro;
1168
1169                    if (i % 2 == 0)
1170                        tebo[i].Background = Brushes.Silver;
1171                }
1172
1173            if ((int)tebo2[0].Text[0] % 2 == 0)
1174                for (int i = 0; i < tebo2.Count; i++)
1175                {
1176                    tebo2[i].Background = Brushes.Silver;
1177
1178                    if (i % 2 == 0)
1179                        tebo2[i].Background = Brushes.Gainsboro;
1180
1181
1182                }
1183            else
1184                for (int i = 0; i < tebo.Count; i++)
1185                {
1186                    tebo2[i].Background = Brushes.Gainsboro;
1187
1188                    if (i % 2 == 0)
1189                        tebo2[i].Background = Brushes.Silver;
1190                }
1191
1192
1193
1194            for (int i = 0; i < lines.GetLength(0); i++)
1195            {
1196                lines[i].Stroke = Brushes.Black;
1197                lines[i].Opacity = 0.5;
1198                if (i % 2 == 0)
1199                    lines[i].Stroke = Brushes.Black;
1200            }
1201
1202            //System.GC.Collect();
1203        }
1204
1205
1206
1207        private Canvas alpha(int offset, int ringoffset)
1208        {
1209
1210            Rectangle myRectangle = new Rectangle();
1211            myRectangle.Width = 200;
1212            myRectangle.Height = 890;
1213
1214            myRectangle.RadiusX = 15;
1215            myRectangle.RadiusY = 15;
1216
1217            myRectangle.Fill = Brushes.LightSteelBlue;
1218            myRectangle.Stroke = Brushes.Silver;
1219            myRectangle.StrokeThickness = 30;
1220
1221            Rectangle walzeDisplay = new Rectangle();
1222            walzeDisplay.Width = 50;
1223            walzeDisplay.Height = 50;
1224
1225            walzeDisplay.RadiusX = 5;
1226            walzeDisplay.RadiusY = 5;
1227
1228            walzeDisplay.Fill = Brushes.Silver;
1229            walzeDisplay.Stroke = Brushes.Silver;
1230            walzeDisplay.StrokeThickness = 30;
1231
1232
1233            stack.Orientation = Orientation.Vertical;
1234
1235
1236            stack1.Orientation = Orientation.Vertical;
1237
1238
1239            stack2.Orientation = Orientation.Horizontal;
1240
1241            Canvas.SetTop(stack1, 60);
1242            Canvas.SetLeft(stack1, 0);
1243
1244
1245            Canvas.SetTop(stack, 60);
1246            Canvas.SetLeft(stack, 170);
1247
1248            Canvas temp = new Canvas();
1249
1250            temp.Children.Add(walzeDisplay);
1251
1252            temp.Children.Add(myRectangle);
1253            temp.Children.Add(lineCanvas);
1254
1255            int max = 26;
1256            int rest = 26 - offset;
1257
1258            for (int i = offset; i < max; i++)
1259            {
1260               
1261                int inew = (i-offset +ringoffset)%26;
1262                TextBlock t = new TextBlock();
1263                t.Text = "" + ((26-i+ringoffset)%26+1);
1264                t.Width = 29.4;
1265                t.Height = 29.4;
1266
1267
1268                t.FontSize = 20;
1269                t.Background = Brushes.Gainsboro;
1270                t.TextAlignment = TextAlignment.Center;
1271                if ((i+offset) % 2 == 0)
1272                    t.Background = Brushes.Silver;
1273                if (i == 0)
1274                {
1275                    t.FontWeight = FontWeights.UltraBold;
1276                    t.Foreground = Brushes.OrangeRed;
1277                    t.FontSize = 22;
1278
1279                }
1280
1281
1282                stack.Children.Add(t);
1283
1284                tebo.Add(t);
1285
1286                TextBlock t2 = new TextBlock();
1287                t2.Text = "" + Convert.ToChar(i + 65);
1288                t2.Width = 29.4;
1289                t2.Height = 29.4;
1290
1291
1292                t2.FontSize = 20;
1293                t2.Background = Brushes.Gainsboro;
1294                t2.TextAlignment = TextAlignment.Center;
1295                if (inew % 2 == 0)
1296                    t2.Background = Brushes.Silver;
1297
1298
1299
1300                stack1.Children.Add(t2);
1301
1302                tebo2.Add(t2);
1303
1304                Line t1 = new Line();
1305                t1.X1 = 170;
1306                t1.Y1 = 29.4 * inew + 75;
1307                t1.Opacity = 0.5;
1308                t1.X2 = 30;
1309                t1.Y2 = 0;
1310
1311                t1.Stroke = Brushes.Black;
1312
1313
1314
1315                maparray[inew, 0] = inew;
1316                switch (map)
1317                {
1318                    case 1:
1319                        maparray[inew, 1] = ((eins[i] + rest + ringoffset) % 26);
1320                        t1.Y2 = 29.4 * ((eins[i] + rest +ringoffset) % 26) + 75;
1321                        iAm.Text = "I";
1322                        nextint = einsnext;
1323                        if (offset == nextint)
1324                            next = true;
1325                        break;
1326
1327                    case 2:
1328                        maparray[inew, 1] = (zwei[i] + rest + ringoffset) % 26;
1329                        t1.Y2 = 29.4 * ((zwei[i] + rest + ringoffset) % 26) + 75;
1330                        nextint = zweinext;
1331                        iAm.Text = "II";
1332                        if (offset == nextint)
1333                            next = true;
1334                        break;
1335                    case 3:
1336                        maparray[inew, 1] = (drei[i] + rest + ringoffset) % 26;
1337                        t1.Y2 = 29.4 * ((drei[i] + rest + ringoffset) % 26) + 75;
1338                        nextint = dreinext;
1339                        iAm.Text = "III";
1340                        if (offset == nextint)
1341                            next = true;
1342                        break;
1343                    case 4:
1344                        maparray[inew, 1] = (vier[i] + rest + ringoffset) % 26;
1345                        t1.Y2 = 29.4 * ((vier[i] + rest + ringoffset) % 26) + 75;
1346                        nextint = viernext;
1347                        iAm.Text = "IV";
1348                        if (offset == nextint)
1349                            next = true;
1350                        break;
1351                    case 5:
1352                        maparray[inew, 1] = (fuenf[i] + rest + ringoffset) % 26;
1353                        t1.Y2 = 29.4 * ((fuenf[i] + rest + ringoffset) % 26) + 75;
1354                        nextint = fuenfnext;
1355                        iAm.Text = "V";
1356                        if (offset == nextint)
1357                            next = true;
1358                        if (i == 0)
1359                        {
1360                            t2.Foreground = Brushes.OrangeRed;
1361                            t2.FontWeight = FontWeights.UltraBold;
1362                            t2.FontSize = 22;
1363                        }
1364                        break;
1365
1366                }
1367
1368                lines[inew] = t1;
1369
1370
1371
1372                if (i == nextint + 1)
1373                {
1374                    t2.FontWeight = FontWeights.UltraBold;
1375                    t2.Foreground = Brushes.OrangeRed;
1376                    t2.FontSize = 22;
1377                }
1378
1379
1380                lineCanvas.Children.Add(t1);
1381
1382            }
1383
1384            for (int i = 0; i < offset; i++)
1385            {
1386                int inew = (i + rest+ringoffset)%26;
1387
1388                TextBlock t = new TextBlock();
1389                t.Text = "" + ((26 - i +ringoffset) % 26 + 1);
1390                t.Width = 29.4;
1391                t.Height = 29.4;
1392
1393
1394                t.FontSize = 20;
1395                t.Background = Brushes.Gainsboro;
1396                t.TextAlignment = TextAlignment.Center;
1397                if ((i+offset) % 2 == 0)
1398                    t.Background = Brushes.Silver;
1399                if (i == 0)
1400                {
1401                    t.FontWeight = FontWeights.UltraBold;
1402                    t.Foreground = Brushes.OrangeRed;
1403                    t.FontSize = 22;
1404
1405                }
1406
1407
1408                stack.Children.Add(t);
1409
1410                tebo.Add(t);
1411
1412                TextBlock t2 = new TextBlock();
1413                t2.Text = "" + Convert.ToChar(i + 65);
1414                t2.Width = 29.4;
1415                t2.Height = 29.4;
1416
1417
1418                t2.FontSize = 20;
1419                t2.Background = Brushes.Gainsboro;
1420                t2.TextAlignment = TextAlignment.Center;
1421                if (inew % 2 == 0)
1422                    t2.Background = Brushes.Silver;
1423
1424
1425
1426                stack1.Children.Add(t2);
1427
1428                tebo2.Add(t2);
1429
1430                Line t1 = new Line();
1431                t1.X1 = 170;
1432                t1.Y1 = 29.4 * ((i - offset + 26 +ringoffset )%26) + 75;
1433                t1.Opacity = 0.5;
1434                t1.X2 = 30;
1435                t1.Y2 = 0;
1436
1437                t1.Stroke = Brushes.Black;
1438
1439
1440
1441                maparray[inew , 0] = inew ;
1442                switch (map)
1443                {
1444                    case 1:
1445                        maparray[inew, 1] = ((eins[i] + rest + ringoffset) % 26);
1446                        t1.Y2 = 29.4 * ((eins[i] + rest+ringoffset) % 26) + 75;
1447                        iAm.Text = "I";
1448                        nextint = einsnext;
1449                        break;
1450
1451                    case 2:
1452                        maparray[inew, 1] = ((zwei[i] + rest + ringoffset) % 26);
1453                        t1.Y2 = 29.4 * ((zwei[i] + rest + ringoffset) % 26) + 75;
1454                        nextint = zweinext;
1455                        iAm.Text = "II";
1456                        break;
1457                    case 3:
1458                        maparray[inew, 1] = (drei[i] + rest + ringoffset) % 26;
1459                        t1.Y2 = 29.4 * ((drei[i] + rest + ringoffset) % 26) + 75;
1460                        nextint = dreinext;
1461                        iAm.Text = "III";
1462                        break;
1463                    case 4:
1464                        maparray[inew, 1] = (vier[i] + rest + ringoffset) % 26;
1465                        t1.Y2 = 29.4 * ((vier[i] + rest + ringoffset) % 26) + 75;
1466                        nextint = viernext;
1467                        iAm.Text = "IV";
1468                        break;
1469                    case 5:
1470                        maparray[inew, 1] = (fuenf[i] + rest + ringoffset) % 26;
1471                        t1.Y2 = 29.4 * ((fuenf[i] + rest + ringoffset) % 26) + 75;
1472                        nextint = fuenfnext;
1473                        iAm.Text = "V";
1474                        if (i == 0)
1475                        {
1476                            t2.Foreground = Brushes.OrangeRed;
1477                            t2.FontWeight = FontWeights.UltraBold;
1478                            t2.FontSize = 22;
1479                        }
1480                        break;
1481
1482                }
1483                lines[inew] = t1;
1484
1485
1486
1487                if (i == nextint + 1)
1488                {
1489                    t2.FontWeight = FontWeights.UltraBold;
1490                    t2.Foreground = Brushes.OrangeRed;
1491                    t2.FontSize = 22;
1492                }
1493
1494
1495                lineCanvas.Children.Add(t1);
1496
1497            }
1498
1499            temp.Children.Add(stack1);
1500            temp.Children.Add(stack);
1501
1502             up = new Button();
1503            up.Click += upperclick;
1504            up.Height = 50;
1505            up.Width = 50;
1506            up.Content = "UP";
1507            Canvas.SetLeft(up, 25);
1508            Canvas.SetTop(up, 5);
1509
1510             down = new Button();
1511            down.Click += downerclick;
1512            down.Height = 50;
1513            down.Width = 50;
1514            down.Content = "Down";
1515            Canvas.SetLeft(down, 125);
1516            Canvas.SetTop(down, 5);
1517
1518            custom.Text = "" + Convert.ToChar(offset+65) ;
1519
1520            custom.Height = 50;
1521            custom.Width = 50;
1522            custom.FontSize = 40;
1523            custom.TextAlignment = TextAlignment.Center;
1524            Canvas.SetLeft(custom, 75);
1525            Canvas.SetTop(custom, 5);
1526
1527
1528
1529            Rectangle k = new Rectangle();
1530            k.RadiusX = 5;
1531            k.RadiusY = 5;
1532            k.Height = 40;
1533            k.Width = 40;
1534            k.Opacity = 1.0;
1535            k.StrokeThickness = 3.0;
1536            k.Stroke = Brushes.RoyalBlue;
1537            k.Fill = Brushes.Silver;
1538            Canvas.SetTop(k, 13);
1539            Canvas.SetLeft(k, 80);
1540
1541            temp.Children.Add(k);
1542
1543            Rectangle k1 = new Rectangle();
1544            k1.RadiusX = 5;
1545            k1.RadiusY = 5;
1546            k1.Height = 30;
1547            k1.Width = 30;
1548            k1.Opacity = 1.0;
1549            k1.StrokeThickness = 3.0;
1550            k1.Stroke = Brushes.RoyalBlue;
1551            //k.Fill = Brushes.DimGray;
1552            Canvas.SetTop(k1, 60);
1553            Canvas.SetLeft(k1, 0);
1554
1555            temp.Children.Add(k1);
1556
1557
1558
1559
1560
1561            Line lx = new Line();
1562            lx.X1 = 100;
1563            lx.Y1 = 54;
1564            lx.Opacity = 1;
1565            lx.X2 = 100;
1566            lx.Y2 = 70;
1567            lx.StrokeThickness = 3.0;
1568            lx.Stroke = Brushes.RoyalBlue;
1569
1570            temp.Children.Add(lx);
1571
1572            Line lx1 = new Line();
1573            lx1.X1 = 100;
1574            lx1.Y1 = 70;
1575            lx1.Opacity = 1;
1576            lx1.X2 = 30;
1577            lx1.Y2 = 70;
1578            lx1.StrokeThickness = 3.0;
1579            lx1.Stroke = Brushes.RoyalBlue;
1580
1581            temp.Children.Add(lx1);
1582
1583            temp.Children.Add(custom);
1584            temp.Children.Add(up);
1585            temp.Children.Add(down);
1586
1587             up1 = new Button();
1588            up1.Click += upperclick1;
1589            up1.Height = 50;
1590            up1.Width = 50;
1591            up1.Content = "UP";
1592            Canvas.SetLeft(up1, 25);
1593            Canvas.SetTop(up1, 830);
1594
1595             down1 = new Button();
1596            down1.Click += downerclick1;
1597            down1.Height = 50;
1598            down1.Width = 50;
1599            down1.Content = "Down";
1600            Canvas.SetTop(down1, 830);
1601            Canvas.SetLeft(down1, 125);
1602
1603            custom2.Text = ""+(ringoffset+1);
1604
1605            custom2.Height = 50;
1606            custom2.Width = 50;
1607            custom2.FontSize = 40;
1608            custom2.TextAlignment = TextAlignment.Center;
1609
1610            Canvas.SetLeft(custom2, 75);
1611            Canvas.SetTop(custom2, 830);
1612
1613            temp.Children.Add(custom2);
1614            temp.Children.Add(up1);
1615            temp.Children.Add(down1);
1616
1617
1618            iAm.Height = 50;
1619            iAm.Width = 50;
1620            iAm.FontSize = 30;
1621            iAm.TextAlignment = TextAlignment.Center;
1622            Canvas.SetLeft(iAm, -30);
1623            Canvas.SetTop(iAm, 5);
1624            iAm.Background = Brushes.Orange;
1625            iAm.Uid = "" + map;
1626            temp.Children.Add(iAm);
1627
1628            return temp;
1629        }
1630    }
1631}
Note: See TracBrowser for help on using the repository browser.