source: trunk/CrypPlugins/Enigma/Rotor2.cs

Last change on this file was 8983, checked in by kopal, 8 months ago

Complete CrypTool 2 project

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