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

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

Presentation added!

File size: 9.6 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Windows;
6using System.Windows.Data;
7using System.Windows.Documents;
8using System.Windows.Input;
9using System.Windows.Media;
10using System.Windows.Media.Imaging;
11using System.Windows.Media.Animation;
12using System.Windows.Navigation;
13using System.Windows.Shapes;
14using System.Windows.Controls;
15using System.Windows.Threading;
16using System.Threading;
17
18namespace Transposition
19{
20    /// <summary>
21    /// Interaktionslogik für TranspositionPresentation.xaml
22    /// </summary>
23    public partial class TranspositionPresentation : UserControl
24    {
25        public TranspositionPresentation()
26        {
27            InitializeComponent();
28        }
29
30        public event EventHandler Completed;
31        private TextBlock[,] teba;
32        public int timeCounter = 0;
33        private int von;
34        private int nach;
35        private bool PaarSortiert;
36        private int schleife=0;
37        private int outcount;
38        private bool onlyOnce ;
39
40        public void main(char[,] read_in_matrix, char[,] permuted_matrix, int[] key, String keyword, String input, String output,int per, int rein,int reout)
41        {
42           
43            Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
44            {
45                if (per == 1 && rein == 0 && reout == 1)
46                {
47                    outcount = 0;
48                    onlyOnce = true;
49                    create(read_in_matrix, permuted_matrix, key, keyword, input, output);
50                    schleife = 0;
51                    sort(schleife);
52                }
53            }, null);
54        }
55
56       
57
58        public void readout(object sender, EventArgs e) 
59        {
60            DoubleAnimation myDoubleAnimation = new DoubleAnimation();
61            myDoubleAnimation.From = 1.0;
62            myDoubleAnimation.To = 0.0;
63            myDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(1000));
64
65            if (teba != null)
66               
67                for (int i = 0; i < teba.GetLength(1); i++)
68                {
69                   
70                   
71                    if (i == teba.GetLength(1) - 1 && outcount<teba.GetLength(0)-1)
72                    {
73                        myDoubleAnimation.Completed += new EventHandler(my_Help1);
74                    }
75                    teba[outcount, i].BeginAnimation(TextBlock.OpacityProperty, myDoubleAnimation);
76                    if (i > 1)
77                    {
78                        textBox2.Text += teba[outcount, i].Text.ToString();
79                    }
80                }
81        }
82
83        public void sort(int i)
84        {
85            if (teba != null)
86            {
87                if (i < teba.GetLength(0) - 1)
88                {
89                    if (Convert.ToInt32(teba[i, 0].Text) > Convert.ToInt32(teba[i + 1, 0].Text))
90                    {
91                        ani(this, EventArgs.Empty, i, i + 1);
92                        PaarSortiert = false;
93                    }
94                    else 
95                        {
96                            schleife++;
97                            sort(schleife); 
98                        }
99                }
100                else if (!PaarSortiert)
101                {
102                    schleife = 0;
103                    PaarSortiert = true;
104                    sort(0);
105                }
106
107                if (PaarSortiert && onlyOnce) { readout(this, EventArgs.Empty); onlyOnce = false; }
108            }
109           
110        }
111        private void my_Help1(object sender, EventArgs e) 
112        { 
113            outcount++;
114            readout(this, EventArgs.Empty);
115           
116        }
117        private void my_Help(object sender, EventArgs e)
118        {
119            schleife++;
120            sort(schleife);
121        }
122       
123        private void my_Completed(object sender, EventArgs e)
124        {
125            Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
126            {
127                if (teba != null)
128                {
129
130                    for (int i = 0; i < teba.GetLength(1); i++)
131                    {
132                        String help = teba[nach, i].Text.ToString();
133                        teba[nach, i].Text = teba[von, i].Text.ToString();
134                        teba[von, i].Text = help;
135                        textBox1.Text += i;
136                    }
137                }
138                textBox1.Text += "feuer";
139                DoubleAnimation myFadein = new DoubleAnimation();
140                myFadein.From = 0.0;
141                myFadein.To = 1.0;
142                myFadein.Duration = new Duration(TimeSpan.FromMilliseconds(1000));
143               
144
145                if (teba != null)
146                    for (int i = 0; i < teba.GetLength(1); i++)
147                    {
148                        teba[von, i].BeginAnimation(TextBlock.OpacityProperty, myFadein);
149                        if (i == teba.GetLength(1)-1)
150                        {
151                            myFadein.Completed += new EventHandler(my_Help);
152                        } 
153                       
154                        teba[nach, i].BeginAnimation(TextBlock.OpacityProperty, myFadein);
155                    }
156               
157            }, null);
158        }
159
160        public void ani(object sender, EventArgs e, int von, int nach)
161        {
162            DoubleAnimation myDoubleAnimation = new DoubleAnimation();
163            myDoubleAnimation.From = 1.0;
164            myDoubleAnimation.To = 0.0;
165            myDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(1000));
166
167            this.von = von;
168            this.nach = nach;
169           
170            if(teba!=null)
171            for (int i=0; i < teba.GetLength(1); i++)
172            {
173               
174                teba[von, i].BeginAnimation(TextBlock.OpacityProperty, myDoubleAnimation);
175                if (i == teba.GetLength(1)- 1)
176                {
177                    myDoubleAnimation.Completed += new EventHandler(my_Completed);
178                }
179                teba[nach, i].BeginAnimation(TextBlock.OpacityProperty, myDoubleAnimation);   
180            }
181        }
182
183        public void create(char[,] read_in_matrix, char[,] permuted_matrix, int[] key, String keyword, String input, String output)
184        {
185           
186            Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
187            {
188                if (read_in_matrix != null && key != null)
189                {
190                    myGrid.Children.Clear();
191                    myGrid.RowDefinitions.Clear();
192                    myGrid.ColumnDefinitions.Clear();
193                    textBox1.Clear();
194                    textBox2.Clear();
195                   
196                    myGrid.ShowGridLines = true;
197
198                    teba = new TextBlock[read_in_matrix.GetLength(0), read_in_matrix.GetLength(1)+2];
199                    myGrid.RowDefinitions.Add(new RowDefinition());
200
201                    for (int i = 0; i < key.Length; i++)
202                    {
203                        myGrid.ColumnDefinitions.Add(new ColumnDefinition());
204                        TextBlock txt = new TextBlock();
205                        String s = key[i].ToString();
206                        txt.VerticalAlignment = VerticalAlignment.Center;
207                        txt.Text = s;
208                        txt.FontSize = 12;
209                        txt.FontWeight = FontWeights.ExtraBold;
210                        txt.TextAlignment = TextAlignment.Center;
211                        Grid.SetRow(txt, 0);
212                        Grid.SetColumn(txt, i);
213                        myGrid.Children.Add(txt);
214                        teba[i, 0] = txt;
215                       
216                    }
217                    myGrid.RowDefinitions.Add(new RowDefinition());
218                    char[] ch = keyword.ToCharArray();
219
220                    for (int i = 0; i < key.Length; i++)
221                    {
222
223                        TextBlock txt = new TextBlock();
224                        txt.VerticalAlignment = VerticalAlignment.Center;
225                        txt.Text = ch[i].ToString();
226                        txt.FontSize = 12;
227                        txt.FontWeight = FontWeights.ExtraBold;
228                        txt.TextAlignment = TextAlignment.Center;
229                        Grid.SetRow(txt, 1);
230                        Grid.SetColumn(txt, i);
231                        myGrid.Children.Add(txt);
232                        teba[i, 1] = txt;
233                    }
234
235                    for (int i = 0; i < read_in_matrix.GetLength(1); i++)
236                    {
237                        myGrid.RowDefinitions.Add(new RowDefinition());
238                        for (int ix = 0; ix < read_in_matrix.GetLength(0); ix++)
239                        {
240                            TextBlock txt = new TextBlock();
241                            txt.VerticalAlignment = VerticalAlignment.Center;
242                            txt.Text = read_in_matrix[ix, i].ToString();
243                            txt.FontSize = 12;
244                            txt.FontWeight = FontWeights.ExtraBold;
245                            txt.TextAlignment = TextAlignment.Center;
246                            Grid.SetRow(txt, i + 2);
247                            Grid.SetColumn(txt, ix);
248                            myGrid.Children.Add(txt);
249                            teba[ix, i+2] = txt;
250                        }
251                    }
252                   
253                }
254             
255            }
256         , null);
257        }
258       
259    }
260
261}
Note: See TracBrowser for help on using the repository browser.