Ignore:
Timestamp:
Jan 5, 2011, 6:49:17 PM (11 years ago)
Author:
sauer
Message:

Wizard:

  • added functionality to click through the first categories (not fully configured yet)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/Wizard/WizardControl.xaml.cs

    r2288 r2290  
    1515using System.IO;
    1616using System.Reflection;
     17using System.Windows.Threading;
     18using System.Threading;
    1719
    1820namespace Wizard
     
    2426    {
    2527
    26         private string culture = System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageName;
    2728        private const string configXMLPath = "Wizard.Config.wizard.config.start.xml";
    2829        private const string defaultLang = "en";
     
    4445            }
    4546            InitializeComponent();
     47            SetupPage(wizardConfigXML);
    4648        }
    4749
     
    9294        }
    9395
    94         private void GetCategoryList()
    95         {
    96 
     96        private void SetupPage(XElement element)
     97        {
     98            XElement parent = element.Parent;
     99            if (parent == null)
     100            {
     101                backButton.IsEnabled = false;
     102                abortButton.IsEnabled = false;
     103            }
     104            else
     105            {
     106                backButton.IsEnabled = true;
     107                abortButton.IsEnabled = true;
     108            }
     109
     110            nextButton.IsEnabled = false;
     111
     112            string currentLang = System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageName;
     113
     114            //set headline
     115            XElement headline = FindElementInElement(element, "headline");
     116            if (headline != null)
     117                taskHeader.Content = headline.Value;
     118
     119            //set description label
     120            XElement desc = FindElementInElement(element, "desc");
     121            if (desc != null)
     122                descHeader.Content = desc.Value;
     123
     124            //generate radio buttons
     125            IEnumerable<XElement> categories = element.Elements("category");
     126            IEnumerable<XElement> items = element.Elements("item");
     127
     128            if (items.Any())
     129                categories.Union(items);
     130
     131            if (categories.Any())
     132            {
     133                foreach (XElement ele in categories)
     134                {
     135                    Label l = new Label();
     136                    l.Height = 30;
     137                    XElement label = FindElementInElement(ele, "name");
     138                    if (label != null)
     139                        l.Content = label.Value;
     140
     141                    //Image i = new Image(); TODO
     142
     143                    StackPanel sp = new StackPanel();
     144                    sp.VerticalAlignment = VerticalAlignment.Stretch;
     145                    sp.HorizontalAlignment = HorizontalAlignment.Stretch;
     146                    sp.Orientation = Orientation.Horizontal;
     147                    //add image
     148                    sp.Children.Add(l);
     149
     150                    RadioButton rb = new RadioButton();
     151                    rb.HorizontalAlignment = HorizontalAlignment.Stretch;
     152                    rb.HorizontalContentAlignment = HorizontalAlignment.Left;
     153                    rb.Checked += rb_Checked;
     154                    rb.Content = sp;
     155                    rb.Tag = ele;
     156
     157                    radioButtonStackPanel.Children.Add(rb);
     158                }
     159            }
     160
     161        }
     162
     163        void rb_Checked(object sender, RoutedEventArgs e)
     164        {
     165            RadioButton b = (RadioButton)sender;
     166            XElement ele = (XElement)b.Tag;
     167            XElement desc = FindElementInElement(ele, "description");
     168            if (desc != null)
     169                description.Text = desc.Value;
     170            nextButton.IsEnabled = true;
     171        }
     172
     173        //finds elements according to the current language
     174        private XElement FindElementInElement(XElement element, string xname)
     175        {
     176            string currentLang = System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageName;
     177            XElement foundElement = null;
     178
     179            IEnumerable<XElement> descriptions = element.Elements(xname);
     180            if (descriptions.Any())
     181            {
     182                var description = from descln in descriptions where descln.Attribute("lang").Value == currentLang select descln;
     183                if (!description.Any())
     184                {
     185                    description = from descln in descriptions where descln.Attribute("lang").Value == defaultLang select descln;
     186                    if (description.Any())
     187                        foundElement = description.First();
     188                }
     189                else
     190                    foundElement = description.First();
     191            }
     192
     193            return foundElement;
     194        }
     195
     196        private void nextButton_Click(object sender, RoutedEventArgs e)
     197        {
     198            UIElement[] uiea = new UIElement[radioButtonStackPanel.Children.Count];
     199            radioButtonStackPanel.Children.CopyTo(uiea, 0);
     200            foreach (UIElement uie in uiea)
     201            {
     202                RadioButton b = (RadioButton)uie;
     203                if (b.IsChecked != null && (bool)b.IsChecked)
     204                {
     205                    radioButtonStackPanel.Children.Clear();
     206                    description.Text = "";
     207                    SetupPage((XElement)b.Tag);
     208                    break;
     209                }
     210            }
     211        }
     212
     213        private void backButton_Click(object sender, RoutedEventArgs e)
     214        {
     215            UIElement[] uiea = new UIElement[radioButtonStackPanel.Children.Count];
     216            radioButtonStackPanel.Children.CopyTo(uiea, 0);
     217            if (uiea.Length > 0)
     218            {
     219                RadioButton b = (RadioButton)uiea[0];
     220                XElement ele = (XElement)b.Tag;
     221                radioButtonStackPanel.Children.Clear();
     222                description.Text = "";
     223                XElement grandParent = ele.Parent.Parent;
     224                if (grandParent != null)
     225                    SetupPage(grandParent);
     226                else
     227                    SetupPage(wizardConfigXML);
     228            }
     229        }
     230
     231        private void abortButton_Click(object sender, RoutedEventArgs e)
     232        {
     233            radioButtonStackPanel.Children.Clear();
     234            description.Text = "";
     235            SetupPage(wizardConfigXML);
    97236        }
    98237
Note: See TracChangeset for help on using the changeset viewer.