source: trunk/CrypPlugins/Wizard/WizardControl.xaml.cs @ 2558

Last change on this file since 2558 was 2558, checked in by sauer, 11 years ago

Wizard summary page changes

File size: 36.5 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Text.RegularExpressions;
6using System.Windows;
7using System.Windows.Controls;
8using System.Windows.Data;
9using System.Windows.Documents;
10using System.Windows.Input;
11using System.Windows.Media;
12using System.Windows.Media.Animation;
13using System.Windows.Media.Imaging;
14using System.Windows.Navigation;
15using System.Windows.Shapes;
16using System.Xml.Linq;
17using System.IO;
18using System.Reflection;
19using System.Windows.Threading;
20using System.Threading;
21using System.Collections;
22using System.Globalization;
23using Cryptool.PluginBase;
24using WorkspaceManager.Model;
25
26namespace Wizard
27{
28    /// <summary>
29    /// Interaction logic for WizardControl.xaml
30    /// </summary>
31    [Cryptool.PluginBase.Attributes.Localization("Wizard.Properties.Resources")]
32    public partial class WizardControl : UserControl
33    {
34        private class PageInfo
35        {
36            public string name;
37            public string description;
38            public string image;
39        }
40
41        List<PageInfo> currentHistory = new List<PageInfo>();
42        private Dictionary<string, bool> selectedCategories = new Dictionary<string, bool>();
43        private SolidColorBrush selectionBrush = new SolidColorBrush();
44        private const string configXMLPath = "Wizard.Config.wizard.config.start.xml";
45        private const string defaultLang = "en";
46        private XElement wizardConfigXML;
47        private Dictionary<string, PluginPropertyValue> propertyValueDict = new Dictionary<string, PluginPropertyValue>();
48        private HashSet<TextBox> boxesWithWrongContent = new HashSet<TextBox>();
49
50        internal event OpenTabHandler OnOpenTab;
51        internal event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
52
53        internal string SamplesDir { set; private get; }
54
55        public WizardControl()
56        {
57            try
58            {
59                // DEBUG HELP string[] names = this.GetType().Assembly.GetManifestResourceNames();
60
61                Stream fileStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(configXMLPath);
62                XElement xml = XElement.Load(fileStream);
63                GenerateXML(xml);
64            }
65            catch (Exception)
66            {
67               
68            }
69
70            InitializeComponent();
71
72            selectionBrush.Color = Color.FromArgb(255, 200, 220, 245);
73            SetupPage(wizardConfigXML);
74        }
75
76        // generate the full XML tree for the wizard (recursive)
77        private void GenerateXML(XElement xml)
78        {
79            try
80            {
81                //find all nested subcategories and add them to the tree
82                IEnumerable<XElement> categories = xml.Elements("category");
83                if (categories.Any())
84                {
85                    foreach (XElement cat in categories)
86                    {
87                        IEnumerable<XElement> files = cat.Elements("file");
88                        if (files.Any())
89                        {
90                            foreach (XElement element in files)
91                            {
92                                XAttribute att = element.Attribute("resource");
93                                if (att != null)
94                                {
95                                    string path = att.Value;
96                                    Stream fileStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(path);
97                                    XElement sub = XElement.Load(fileStream);
98                                    GenerateXML(sub);
99                                    IEnumerable<XElement> elems = sub.Elements();
100                                    if (elems.Any())
101                                    {
102                                        foreach (XElement ele in elems)
103                                        {
104                                            cat.Add(ele);
105                                        }
106                                    }
107                                }
108                            }
109                        }
110                    }
111                }
112
113                wizardConfigXML = xml;
114
115            }
116            catch (Exception)
117            {
118               
119            }
120        }
121
122        #region WidthConverter
123
124        [ValueConversion(typeof(Double), typeof(Double))]
125        private class WidthConverter : IValueConverter
126        {
127            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
128            {
129                return (double)value * (double)parameter;
130            }
131
132            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
133            {
134                throw new NotImplementedException();
135            }
136        }
137
138        private WidthConverter widthConverter = new WidthConverter();
139
140        #endregion
141
142        private void SetupPage(XElement element)
143        {
144            if ((element.Name == "loadSample") && (element.Attribute("file") != null) && (element.Attribute("title") != null))
145            {
146                LoadSample(element.Attribute("file").Value, element.Attribute("title").Value);
147                abortButton_Click(null, null);
148            }
149
150            XElement parent = element.Parent;
151            if (parent == null)
152            {
153                backButton.IsEnabled = false;
154                abortButton.IsEnabled = false;
155            }
156            else
157            {
158                backButton.IsEnabled = true;
159                abortButton.IsEnabled = true;
160            }
161
162            //nextButton.IsEnabled = false;
163
164            //set headline
165            XElement headline = FindElementsInElement(element, "headline").First();
166            if (headline != null)
167                taskHeader.Content = headline.Value;
168
169            //set description label
170            XElement desc = FindElementsInElement(element, "desc").First();
171            if (desc != null)
172                descHeader.Content = desc.Value;
173
174
175            if (element.Name == "input" || element.Name == "output")
176            {
177                categoryGrid.Visibility = Visibility.Hidden;
178                inputPanel.Visibility = Visibility.Visible;
179
180                var inputs = from el in element.Elements()
181                             where el.Name == "inputBox" || el.Name == "comboBox" || el.Name == "checkBox" || el.Name == "history"
182                             select el;
183
184                inputStack.Children.Clear();
185
186                inputPanel.Tag = element.Element("input");
187                if (inputPanel.Tag == null)
188                    inputPanel.Tag = element.Element("category");
189                if (inputPanel.Tag == null)
190                {
191                    inputPanel.Tag = element.Element("loadSample");
192                    if (inputPanel.Tag != null)
193                        SwitchNextButtonContent();
194                }
195                if (inputPanel.Tag == null)
196                    inputPanel.Tag = element.Element("output");
197
198                FillInputStack(inputs, element.Name.ToString());
199
200                string id = GetElementID((XElement)inputPanel.Tag);
201
202            }
203            else if (element.Name == "category")
204            {
205                categoryGrid.Visibility = Visibility.Visible;
206                inputPanel.Visibility = Visibility.Hidden;
207               
208                radioButtonStackPanel.Children.Clear();
209
210                //generate radio buttons
211                var options = from el in element.Elements()
212                              where el.Name == "category" || el.Name == "input" || el.Name == "loadSample" || el.Name == "output"
213                              select el;
214
215                if (options.Any())
216                {
217                    bool isSelected = false;
218
219                    foreach (XElement ele in options)
220                    {
221                        Border border = new Border();
222                        Label l = new Label();
223                        Image i = new Image();
224                        StackPanel sp = new StackPanel();
225
226                        border.Child = sp;
227                        border.VerticalAlignment = VerticalAlignment.Stretch;
228                        border.CornerRadius = new CornerRadius(5, 0, 0, 5);
229                        border.BorderBrush = Brushes.LightSeaGreen;
230
231                        l.Height = 30;
232                        l.HorizontalAlignment = HorizontalAlignment.Stretch;
233                        XElement label = FindElementsInElement(ele, "name").First();
234                        if (label != null)
235                            l.Content = label.Value;
236
237                        i.Width = 26;
238                        string image = ele.Attribute("image").Value;
239                        if (image != null)
240                        {
241                            ImageSource ims = (ImageSource) TryFindResource(image);
242                            if (ims != null)
243                            {
244                                i.Source = ims;
245                                sp.Children.Add(i);
246                            }
247                        }
248
249                        sp.VerticalAlignment = VerticalAlignment.Stretch;
250                        sp.HorizontalAlignment = HorizontalAlignment.Stretch;
251                        sp.Orientation = Orientation.Horizontal;
252                        sp.Children.Add(l);
253
254                        RadioButton rb = new RadioButton();
255                        string id = GetElementID(ele);
256                        rb.Checked += rb_Checked;
257                        rb.HorizontalAlignment = HorizontalAlignment.Stretch;
258                        rb.VerticalAlignment = VerticalAlignment.Stretch;
259                        rb.HorizontalContentAlignment = HorizontalAlignment.Stretch;
260                        rb.Content = border;
261                        rb.Tag = ele;
262                        if (ele.Name == "loadSample")
263                        {
264                            RoutedEventHandler rbEvent = delegate
265                                              {
266                                                  SwitchNextButtonContent();
267                                              };
268                            rb.Checked += rbEvent;
269                            rb.Unchecked += rbEvent;
270                        }
271
272                        radioButtonStackPanel.Children.Add(rb);
273                        bool wasSelected;
274                        selectedCategories.TryGetValue(GetElementID(ele), out wasSelected);
275                        if (wasSelected != null && wasSelected)
276                        {
277                            rb.IsChecked = true;
278                            isSelected = true;
279                            //nextButton.IsEnabled = true;
280                        }
281                    }
282
283                    if (!isSelected)
284                    {
285                        RadioButton b = (RadioButton)radioButtonStackPanel.Children[0];
286                        b.IsChecked = true;
287                        selectedCategories.Remove(GetElementID((XElement)b.Tag));
288                        selectedCategories.Add(GetElementID((XElement)b.Tag), true);
289                    }
290
291                }
292            }
293
294        }
295
296        private void FillInputStack(IEnumerable<XElement> inputs, string type)
297        {
298            var inputFieldStyle = (Style)FindResource("InputFieldStyle");
299
300            foreach (var input in inputs)
301            {
302                try
303                {
304                    var description = new Label();
305                    description.Content = FindElementsInElement(input, "description").First().Value.Trim();
306                    description.HorizontalAlignment = HorizontalAlignment.Left;
307                    description.FontWeight = FontWeights.Bold;
308                    inputStack.Children.Add(description);
309
310                    bool isInput = (type == "input");
311
312                    Control inputElement = CreateInputElement(input, inputFieldStyle, isInput);
313
314                    //Set width:
315                    if (inputElement != null && input.Attribute("width") != null)
316                    {
317                        string width = input.Attribute("width").Value.Trim();
318                        if (width.EndsWith("%"))
319                        {
320                            double percentage;
321                            if (Double.TryParse(width.Substring(0, width.Length - 1), out percentage))
322                            {
323                                percentage /= 100;
324                                Binding binding = new Binding("ActualWidth");
325                                binding.Source = inputStack;
326                                binding.Converter = widthConverter;
327                                binding.ConverterParameter = percentage;
328                                inputElement.SetBinding(FrameworkElement.WidthProperty, binding);
329                            }
330                        }
331                        else
332                        {
333                            double widthValue;
334                            if (Double.TryParse(width, out widthValue))
335                            {
336                                inputElement.Width = widthValue;
337                            }
338                        }
339                    }
340
341                    //Set alignment
342                    if (inputElement != null && input.Attribute("alignment") != null)
343                    {
344                        switch (input.Attribute("alignment").Value.Trim().ToLower())
345                        {
346                            case "right":
347                                inputElement.HorizontalAlignment = HorizontalAlignment.Right;
348                                break;
349                            case "left":
350                                inputElement.HorizontalAlignment = HorizontalAlignment.Left;
351                                break;
352                            case "center":
353                                inputElement.HorizontalAlignment = HorizontalAlignment.Center;
354                                break;
355                            case "stretch":
356                                inputElement.HorizontalAlignment = HorizontalAlignment.Stretch;
357                                break;
358                        }
359                    }
360                }
361                catch (Exception e)
362                {
363                    GuiLogMessage(string.Format("Error while creating wizard element {0}: {1}", input, e.Message), NotificationLevel.Error);
364                }
365
366            }
367        }
368
369        private Control CreateInputElement(XElement input, Style inputFieldStyle, bool isInput)
370        {
371            Control element = null;
372
373            if (input.Name == "inputBox")
374            {
375                var textBox = new TextBox();
376                textBox.Tag = input;
377                textBox.AcceptsReturn = true;
378                if (input.Attribute("visibleLines") != null)
379                {
380                    int visibleLines;
381                    if (Int32.TryParse(input.Attribute("visibleLines").Value.Trim(), out visibleLines))
382                    {
383                        textBox.MinLines = visibleLines;
384                        textBox.MaxLines = visibleLines;
385                    }
386                }
387                textBox.Style = inputFieldStyle;
388                inputStack.Children.Add(textBox);
389
390                if (isInput)
391                {
392                    if (input.Attribute("regex") != null)
393                    {
394                        var regex = new Regex(input.Attribute("regex").Value, RegexOptions.Compiled);
395
396                        textBox.TextChanged += delegate
397                        {
398                            CheckRegex(textBox, regex);
399                        };
400                    }
401
402                    if (propertyValueDict.ContainsKey(GetElementID(input)))
403                        textBox.Text = (string) propertyValueDict[GetElementID(input)].Value;
404                    else if (input.Attribute("defaultValue") != null)
405                        textBox.Text = input.Attribute("defaultValue").Value.Trim();
406                }
407                else
408                {
409                    if (input.Attribute("plugin") != null && input.Attribute("property") != null)
410                    {
411                        var plugin = input.Attribute("plugin").Value;
412                        var property = input.Attribute("property").Value;
413                        foreach (var e in propertyValueDict.Values)
414                        {
415                            if (e.PluginName == plugin && e.PropertyName == property)
416                                textBox.Text = (String)e.Value;
417                        }
418                    }
419                }
420
421                element = textBox;
422            }
423            else if (input.Name == "comboBox")
424            {
425                ComboBox cb = new ComboBox();
426                cb.Style = inputFieldStyle;
427                cb.Tag = input;
428
429                var items = FindElementsInElement(input, "item");
430                foreach (var item in items)
431                {
432                    ComboBoxItem cbi = new ComboBoxItem();
433                    if (item.Attribute("content") != null)
434                        cbi.Content = item.Attribute("content").Value;
435                    cb.Items.Add(cbi);
436                }
437
438                if (isInput)
439                {
440                    if (propertyValueDict.ContainsKey(GetElementID(input)))
441                    {
442                        if (propertyValueDict[GetElementID(input)].Value is int)
443                        {
444                            ComboBoxItem cbi =
445                                (ComboBoxItem) cb.Items.GetItemAt((int) propertyValueDict[GetElementID(input)].Value);
446                            cbi.IsSelected = true;
447                        }
448                    }
449                    else if (input.Attribute("defaultValue") != null)
450                    {
451                        int i = 0;
452                        if (Int32.TryParse(input.Attribute("defaultValue").Value.Trim(), out i))
453                        {
454                            ComboBoxItem cbi = (ComboBoxItem) cb.Items.GetItemAt(i);
455                            cbi.IsSelected = true;
456                        }
457                    }
458                }
459                else
460                {
461                    if (input.Attribute("plugin") != null && input.Attribute("property") != null)
462                    {
463                        var plugin = input.Attribute("plugin").Value;
464                        var property = input.Attribute("property").Value;
465                        foreach (var e in propertyValueDict.Values)
466                        {
467                            if (e.PluginName == plugin && e.PropertyName == property)
468                                cb.SelectedIndex = (int) e.Value;
469                        }
470                    }
471                }
472
473                inputStack.Children.Add(cb);
474                element = cb;
475            }
476            else if (input.Name == "checkBox")
477            {
478                CheckBox cb = new CheckBox();
479                cb.Tag = input;
480                cb.Style = inputFieldStyle;
481
482                if (input.Attribute("content") != null)
483                    cb.Content = input.Attribute("content").Value;
484
485                if (isInput)
486                {
487                    if (propertyValueDict.ContainsKey(GetElementID(input)))
488                    {
489                        string value = (string) propertyValueDict[GetElementID(input)].Value;
490                        if (value.ToLower() == "true")
491                            cb.IsChecked = true;
492                        else
493                            cb.IsChecked = false;
494                    }
495                    else if (input.Attribute("defaultValue") != null)
496                    {
497                        string value = input.Attribute("defaultValue").Value;
498                        if (value.ToLower() == "true")
499                            cb.IsChecked = true;
500                        else
501                            cb.IsChecked = false;
502                    }
503                }
504                else
505                {
506                    if (input.Attribute("plugin") != null && input.Attribute("property") != null)
507                    {
508                        var plugin = input.Attribute("plugin").Value;
509                        var property = input.Attribute("property").Value;
510                        foreach (var e in propertyValueDict.Values)
511                        {
512                            if (e.PluginName == plugin && e.PropertyName == property)
513                                cb.IsChecked = (bool)e.Value;
514                        }
515                    }
516                }
517
518                inputStack.Children.Add(cb);
519                element = cb;
520            }
521            else if (input.Name == "history")
522            {
523                StackPanel historyStack = new StackPanel();
524                historyStack.Orientation = Orientation.Horizontal;
525               
526                foreach(var page in currentHistory)
527                {
528                    var p = new ContentControl();
529                    var bg = selectionBrush.Clone();
530                    bg.Opacity = 1 - (historyStack.Children.Count/(double) currentHistory.Count);
531                    var sp = new StackPanel { Orientation = Orientation.Horizontal, Background = bg };
532                    p.Content = sp;
533                   
534                    Polygon triangle = new Polygon();
535                    triangle.Points = new PointCollection();
536                    triangle.Points.Add(new Point(0, 0));
537                    triangle.Points.Add(new Point(0, 10));
538                    triangle.Points.Add(new Point(10, 5));
539                    triangle.Fill = bg;
540                    triangle.Stretch = Stretch.Uniform;
541                    triangle.Width = 32;
542                    sp.Children.Add(triangle);
543
544                    if (page.image != null && FindResource(page.image) != null)
545                    {
546                        var im = new Image {Source = (ImageSource) FindResource(page.image), Width = 32};
547                        sp.Children.Add(im);
548                    }
549                    var nameLabel = new Label {Content = page.name};
550                    sp.Children.Add(nameLabel);
551                    p.ToolTip = page.description;
552                    var translateTranform = new TranslateTransform();
553                    triangle.RenderTransform = translateTranform;
554                    Binding binding = new Binding("ActualWidth");
555                    binding.Source = p;
556                    BindingOperations.SetBinding(translateTranform, TranslateTransform.XProperty, binding);
557
558                    historyStack.Children.Add(p);
559                }
560
561                ContentControl container = new ContentControl();
562                container.Content = historyStack;
563                inputStack.Children.Add(container);
564                element = container;
565                isInput = true;
566            }
567
568            if (!isInput && element != null)
569                element.IsEnabled = false;
570
571            return element;
572        }
573
574        private void CheckRegex(TextBox textBox, Regex regex)
575        {
576            var match = regex.Match(textBox.Text);
577            if (!match.Success || match.Index != 0 || match.Length != textBox.Text.Length)
578            {
579                textBox.Style = (Style) FindResource("TextInputInvalid");
580                GuiLogMessage(string.Format("Content of textbox does not fit regular expression {0}.", regex.ToString()), NotificationLevel.Error);
581                boxesWithWrongContent.Add(textBox);
582                nextButton.IsEnabled = false;
583            }
584            else
585            {
586                textBox.Style = null;
587                boxesWithWrongContent.Remove(textBox);
588                if (boxesWithWrongContent.Count == 0)
589                    nextButton.IsEnabled = true;
590            }
591        }
592
593        private string GetElementID(XElement element)
594        {
595            if (element != null && element.Parent != null)
596            {
597                return GetElementID(element.Parent) + "[" + element.Parent.Nodes().ToList().IndexOf(element) + "]." + element.Name;
598            }
599            else
600                return "";
601        }
602
603        private void LoadSample(string file, string title)
604        {
605            file = SamplesDir + "\\" + file;
606
607            var newEditor = new WorkspaceManager.WorkspaceManager();
608            var model = ModelPersistance.loadModel(file, newEditor);
609            foreach (var c in propertyValueDict)
610            {
611                var ppv = c.Value;
612                try
613                {
614                    var plugin = model.AllPluginModels.Where(x => x.Name == ppv.PluginName).First().Plugin;
615                    var settings = plugin.Settings;
616                    var property = settings.GetType().GetProperty(ppv.PropertyName);
617                    if (ppv.Value is string)
618                        property.SetValue(settings, (string)ppv.Value, null);
619                    else if (ppv.Value is int)
620                        property.SetValue(settings, (int)ppv.Value, null);
621                    else if (ppv.Value is bool)
622                        property.SetValue(settings, (bool)ppv.Value, null);
623                }
624                catch (Exception)
625                {
626                    GuiLogMessage(string.Format("Failed settings plugin property {0}.{1} to \"{2}\"!", ppv.PluginName, ppv.PropertyName, ppv.Value), NotificationLevel.Error);
627                    return;
628                }
629            }
630
631            OnOpenTab(newEditor, title, null);
632            foreach (PluginModel pluginModel in model.AllPluginModels)
633            {
634                pluginModel.Plugin.Initialize();
635            }
636            newEditor.Open(model);                   
637        }
638
639        void rb_Checked(object sender, RoutedEventArgs e)
640        {
641            ResetSelectionDependencies();
642            RadioButton b = (RadioButton)sender;
643            b.Background = Brushes.LightSeaGreen;
644            Border c = (Border)b.Content;
645            c.BorderThickness = new Thickness(1, 1, 0, 1);
646            c.Background = selectionBrush;
647            XElement ele = (XElement)b.Tag;
648            selectedCategories.Remove(GetElementID(ele));
649            selectedCategories.Add(GetElementID(ele), true);
650            XElement desc = FindElementsInElement(ele, "description").First();
651            if (desc != null)
652                description.Text = desc.Value;
653            nextButton.IsEnabled = true;
654        }
655
656        private void ResetSelectionDependencies()
657        {
658            for (int i = 0; i < radioButtonStackPanel.Children.Count; i++)
659            {
660                RadioButton b = (RadioButton)radioButtonStackPanel.Children[i];
661                XElement ele = (XElement)b.Tag;
662                selectedCategories.Remove(GetElementID(ele));
663                selectedCategories.Add(GetElementID(ele), false);
664                b.Background = Brushes.Transparent;
665                Border c = (Border)b.Content;
666                c.BorderThickness = new Thickness(0);
667                c.Background = Brushes.Transparent;
668            }
669        }
670
671        //finds elements according to the current language
672        private IEnumerable<XElement> FindElementsInElement(XElement element, string xname)
673        {
674            CultureInfo currentLang = System.Globalization.CultureInfo.CurrentCulture;
675
676            IEnumerable<XElement> allElements = element.Elements(xname);
677            IEnumerable<XElement> foundElements = null;
678
679            if (allElements.Any())
680            {
681                foundElements = from descln in allElements where descln.Attribute("lang").Value == currentLang.TextInfo.CultureName select descln;
682                if (!foundElements.Any())
683                {
684                    foundElements = from descln in allElements where descln.Attribute("lang").Value == currentLang.TwoLetterISOLanguageName select descln;
685                    if (!foundElements.Any())
686                        foundElements = from descln in allElements where descln.Attribute("lang").Value == defaultLang select descln;
687                }
688            }
689
690            if (foundElements == null || !foundElements.Any() || !allElements.Any())
691            {
692                List<XElement> fe = new List<XElement>();
693                fe.Add(new XElement("dummy"));
694                return fe;
695            }
696
697            return foundElements;
698        }
699
700        private void nextButton_Click(object sender, RoutedEventArgs e)
701        {
702            Storyboard mainGridStoryboardLeft = (Storyboard)FindResource("MainGridStoryboardNext1");
703            mainGridStoryboardLeft.Begin();
704        }
705
706        private void backButton_Click(object sender, RoutedEventArgs e)
707        {
708            Storyboard mainGridStoryboardLeft = (Storyboard)FindResource("MainGridStoryboardBack1");
709            mainGridStoryboardLeft.Begin();
710        }
711
712        private void abortButton_Click(object sender, RoutedEventArgs e)
713        {
714            if (inputPanel.Visibility == Visibility.Visible)
715            {
716                if (((XElement)inputPanel.Tag).Name == "loadSample")
717                    SwitchNextButtonContent();
718            }
719
720            foreach (RadioButton rb in radioButtonStackPanel.Children)
721            {
722                if (rb.IsChecked != null && (bool)rb.IsChecked)
723                    rb.IsChecked = false;
724            }
725
726            propertyValueDict.Clear();
727            ResetSelectionDependencies();
728            radioButtonStackPanel.Children.Clear();
729            selectedCategories.Clear();
730            description.Text = "";
731            SetupPage(wizardConfigXML);
732        }
733
734        private void SetNextContent(object sender, EventArgs e)
735        {
736            if (categoryGrid.Visibility == Visibility.Visible)
737            {
738                for (int i = 0; i < radioButtonStackPanel.Children.Count; i++)
739                {
740                    RadioButton b = (RadioButton) radioButtonStackPanel.Children[i];
741                    if (b.IsChecked != null && (bool) b.IsChecked)
742                    {
743                        var ele = (XElement) b.Tag;
744                        SetupPage(ele);
745                        var page = new PageInfo()
746                                       {
747                                           name = FindElementsInElement(ele, "name").First().Value,
748                                           description = FindElementsInElement(ele, "description").First().Value
749                                       };
750
751                        if (ele.Attribute("image") != null)
752                        {
753                            page.image = ele.Attribute("image").Value;
754                        }
755
756                        currentHistory.Add(page);
757
758                        break;
759                    }
760                }
761            }
762            else if (inputPanel.Visibility == Visibility.Visible)
763            {
764                foreach (var child in inputStack.Children)
765                {
766                    SaveControlContent(child);
767                }
768                var nextElement = (XElement) inputPanel.Tag;
769                SetupPage(nextElement);
770            }
771
772            Storyboard mainGridStoryboardLeft = (Storyboard)FindResource("MainGridStoryboardNext2");
773            mainGridStoryboardLeft.Begin();
774        }
775
776        private void SaveControlContent(object o)
777        {
778            if (o is TextBox || o is ComboBox || o is CheckBox)
779            {
780                Control c = (Control)o;
781                XElement ele = (XElement)c.Tag;
782                var id = GetElementID(ele);
783                PluginPropertyValue newEntry = new PluginPropertyValue();
784                if (ele.Attribute("plugin") != null && ele.Attribute("property") != null)
785                {
786                    if (o is TextBox)
787                    {
788                        TextBox textBox = (TextBox)o;
789                        newEntry = new PluginPropertyValue()
790                                   {
791                                       PluginName = ele.Attribute("plugin").Value,
792                                       PropertyName = ele.Attribute("property").Value,
793                                       Value = textBox.Text
794                                   };
795                    }
796                    else if (o is ComboBox)
797                    {
798                        ComboBox comboBox = (ComboBox)o;
799                        newEntry = new PluginPropertyValue()
800                        {
801                            PluginName = ele.Attribute("plugin").Value,
802                            PropertyName = ele.Attribute("property").Value,
803                            Value = comboBox.SelectedIndex
804                        };
805                    }
806                    else if (o is CheckBox)
807                    {
808                        CheckBox checkBox = (CheckBox)o;
809                        if (checkBox.IsChecked != null)
810                        {
811                            newEntry = new PluginPropertyValue()
812                            {
813                                PluginName = ele.Attribute("plugin").Value,
814                                PropertyName = ele.Attribute("property").Value,
815                                Value = (bool)checkBox.IsChecked
816                            };
817                        }
818                    }
819
820                    if (!propertyValueDict.ContainsKey(id))
821                        propertyValueDict.Add(id, newEntry);
822                    else
823                        propertyValueDict[id] = newEntry;
824                } 
825            }
826        }
827
828        private void DeleteControlContent(object o)
829        {
830            if (o is TextBox || o is ComboBox || o is CheckBox)
831            {
832                Control control = (Control)o;
833                XElement ele = (XElement)control.Tag;
834                var id = GetElementID(ele);
835
836                if (propertyValueDict.ContainsKey(id))
837                    propertyValueDict.Remove(id);
838            }
839        }
840
841
842        private void SetLastContent(object sender, EventArgs e)
843        {
844            XElement ele = null;
845            if (categoryGrid.Visibility == Visibility.Visible && radioButtonStackPanel.Children.Count > 0)
846            {
847                RadioButton b = (RadioButton) radioButtonStackPanel.Children[0];
848                ele = (XElement) b.Tag;
849
850                foreach (RadioButton rb in radioButtonStackPanel.Children)
851                {
852                    if (rb.IsChecked != null && (bool)rb.IsChecked)
853                        rb.IsChecked = false;
854                }
855            }
856            else if (inputPanel.Visibility == Visibility.Visible)
857            {
858                //foreach (var child in inputStack.Children)
859                //{
860                //    DeleteControlContent(child);
861                //}
862                boxesWithWrongContent.Clear();
863
864                ele = (XElement) inputPanel.Tag;
865                if (((XElement)inputPanel.Tag).Name == "loadSample")
866                    SwitchNextButtonContent();
867            }
868
869            if (ele != null)
870            {
871                XElement grandParent = ele.Parent.Parent;
872                if (grandParent != null)
873                    SetupPage(grandParent);
874                else
875                    SetupPage(wizardConfigXML);
876            }
877
878            currentHistory.RemoveAt(currentHistory.Count - 1);
879
880            Storyboard mainGridStoryboardLeft = (Storyboard)FindResource("MainGridStoryboardBack2");
881            mainGridStoryboardLeft.Begin();
882        }
883
884        private void GuiLogMessage(string message, NotificationLevel loglevel)
885        {
886            if (OnGuiLogNotificationOccured != null)
887                OnGuiLogNotificationOccured(null, new GuiLogEventArgs(message, null, loglevel));
888        }
889
890        private void SwitchNextButtonContent()
891        {
892            var tmp = nextButton.Content;
893            nextButton.Content = nextButton.Tag;
894            nextButton.Tag = tmp;
895        }
896    }
897
898    internal struct PluginPropertyValue
899    {
900        public string PluginName;
901        public string PropertyName;
902        public object Value;
903    }
904}
Note: See TracBrowser for help on using the repository browser.