Ignore:
Timestamp:
Jan 28, 2011, 10:24:34 PM (11 years ago)
Author:
sauer
Message:

Wizard: added other input types (ComboBoxes, CheckBoxes)

File:
1 edited

Legend:

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

    r2496 r2521  
    3535        private SolidColorBrush selectionBrush = new SolidColorBrush();
    3636        private const string configXMLPath = "Wizard.Config.wizard.config.start.xml";
    37         private const string defaultLang = "en-US";
     37        private const string defaultLang = "en";
    3838        private XElement wizardConfigXML;
    3939        private Dictionary<string, PluginPropertyValue> propertyValueDict = new Dictionary<string, PluginPropertyValue>();
     
    133133
    134134            //set headline
    135             XElement headline = FindElementInElement(element, "headline");
     135            XElement headline = FindElementsInElement(element, "headline").First();
    136136            if (headline != null)
    137137                taskHeader.Content = headline.Value;
    138138
    139139            //set description label
    140             XElement desc = FindElementInElement(element, "desc");
     140            XElement desc = FindElementsInElement(element, "desc").First();
    141141            if (desc != null)
    142142                descHeader.Content = desc.Value;
     
    148148                inputPanel.Visibility = Visibility.Visible;
    149149
    150                 var inputBoxes = element.Elements("inputBox");
     150                var inputs = element.Elements("inputBox");
     151                inputs = inputs.Union(element.Elements("comboBox"));
     152                inputs = inputs.Union(element.Elements("checkBox"));
    151153                inputStack.Children.Clear();
    152154               
    153                 foreach (var box in inputBoxes)
     155                foreach (var input in inputs)
    154156                {
    155157                    var description = new Label();
    156                     description.Content = FindElementInElement(box, "description").Value;
     158                    description.Content = FindElementsInElement(input, "description").First().Value;
    157159                    inputStack.Children.Add(description);
    158160
    159                     var textBox = new TextBox();
    160                     textBox.Tag = box;
    161                     textBox.MinLines = 4;
    162                     inputStack.Children.Add(textBox);
    163                     if (propertyValueDict.ContainsKey(GetElementID(box)))
    164                         textBox.Text = propertyValueDict[GetElementID(box)].Value;
    165                     else if (box.Attribute("defaultValue") != null)
    166                         textBox.Text = box.Attribute("defaultValue").Value;
     161                    if (input.Name == "inputBox")
     162                    {
     163                        var textBox = new TextBox();
     164                        textBox.Tag = input;
     165                        textBox.MinLines = 4;
     166                        inputStack.Children.Add(textBox);
     167                        if (propertyValueDict.ContainsKey(GetElementID(input)))
     168                            textBox.Text = (string)propertyValueDict[GetElementID(input)].Value;
     169                        else if (input.Attribute("defaultValue") != null)
     170                            textBox.Text = input.Attribute("defaultValue").Value;
     171                    }
     172                    else if (input.Name == "comboBox")
     173                    {
     174                        ComboBox cb = new ComboBox();
     175                        cb.Tag = input;
     176
     177                        var items = FindElementsInElement(input, "item");
     178                        foreach (var item in items)
     179                        {
     180                            ComboBoxItem cbi = new ComboBoxItem();
     181                            if (item.Attribute("content") != null)
     182                                cbi.Content = item.Attribute("content").Value;
     183                            cb.Items.Add(cbi);
     184                        }
     185
     186                       
     187                        if (propertyValueDict.ContainsKey(GetElementID(input)))
     188                        {
     189                            if (propertyValueDict[GetElementID(input)].Value is int)
     190                            {
     191                                ComboBoxItem cbi = (ComboBoxItem)cb.Items.GetItemAt((int)propertyValueDict[GetElementID(input)].Value);
     192                                cbi.IsSelected = true;
     193                            }
     194                        }
     195                        else if (input.Attribute("defaultValue") != null)
     196                        {
     197                            int i = 0;
     198                            if (Int32.TryParse(input.Attribute("defaultValue").Value, out i))
     199                            {
     200                                ComboBoxItem cbi = (ComboBoxItem)cb.Items.GetItemAt(i);
     201                                cbi.IsSelected = true;
     202                            }
     203                        }
     204
     205                        inputStack.Children.Add(cb);
     206                    }
     207                    else if (input.Name == "checkBox")
     208                    {
     209                        CheckBox cb = new CheckBox();
     210                        cb.Tag = input;
     211
     212                        if (input.Attribute("content") != null)
     213                            cb.Content = input.Attribute("content").Value;
     214                        if (propertyValueDict.ContainsKey(GetElementID(input)))
     215                        {
     216                            string value = (string)propertyValueDict[GetElementID(input)].Value;
     217                            if (value.ToLower() == "true")
     218                                cb.IsChecked = true;
     219                            else
     220                                cb.IsChecked = false;
     221                        }
     222                        else if (input.Attribute("defaultValue") != null)
     223                        {
     224                            string value = input.Attribute("defaultValue").Value;
     225                            if (value.ToLower() == "true")
     226                                cb.IsChecked = true;
     227                            else
     228                                cb.IsChecked = false;
     229                        }
     230
     231                        inputStack.Children.Add(cb);
     232                    }
    167233                }
    168234
     
    220286                        l.Height = 30;
    221287                        l.HorizontalAlignment = HorizontalAlignment.Stretch;
    222                         XElement label = FindElementInElement(ele, "name");
     288                        XElement label = FindElementsInElement(ele, "name").First();
    223289                        if (label != null)
    224290                            l.Content = label.Value;
     
    295361                    var settings = plugin.Settings;
    296362                    var property = settings.GetType().GetProperty(ppv.PropertyName);
    297                     property.SetValue(settings, ppv.Value, null);
     363                    if (ppv.Value is string)
     364                        property.SetValue(settings, (string)ppv.Value, null);
     365                    else if (ppv.Value is int)
     366                        property.SetValue(settings, (int)ppv.Value, null);
     367                    else if (ppv.Value is bool)
     368                        property.SetValue(settings, (bool)ppv.Value, null);
    298369                }
    299370                catch (Exception)
     
    317388            c.Background = selectionBrush;
    318389            XElement ele = (XElement)b.Tag;
    319             XElement desc = FindElementInElement(ele, "description");
     390            XElement desc = FindElementsInElement(ele, "description").First();
    320391            if (desc != null)
    321392                description.Text = desc.Value;
     
    336407
    337408        //finds elements according to the current language
    338         private XElement FindElementInElement(XElement element, string xname)
     409        private IEnumerable<XElement> FindElementsInElement(XElement element, string xname)
    339410        {
    340411            CultureInfo currentLang = System.Globalization.CultureInfo.CurrentCulture;
    341             XElement foundElement = null;
    342 
    343             IEnumerable<XElement> descriptions = element.Elements(xname);
    344             if (descriptions.Any())
    345             {
    346                 var description = from descln in descriptions where descln.Attribute("lang").Value == currentLang.TextInfo.CultureName select descln;
    347                 if (!description.Any())
    348                 {
    349                     description = from descln in descriptions where descln.Attribute("lang").Value == currentLang.TwoLetterISOLanguageName select descln;
    350                     if (description.Any())
    351                         foundElement = description.First();
    352                     else
    353                     {
    354                         description = from descln in descriptions where descln.Attribute("lang").Value == defaultLang select descln;
    355                         if (description.Any())
    356                             foundElement = description.First();
    357                     }
    358                 }
    359                 else
    360                     foundElement = description.First();
    361             }
    362 
    363             return foundElement;
     412
     413            IEnumerable<XElement> allElements = element.Elements(xname);
     414            IEnumerable<XElement> foundElements = null;
     415
     416            if (allElements.Any())
     417            {
     418                foundElements = from descln in allElements where descln.Attribute("lang").Value == currentLang.TextInfo.CultureName select descln;
     419                if (!foundElements.Any())
     420                {
     421                    foundElements = from descln in allElements where descln.Attribute("lang").Value == currentLang.TwoLetterISOLanguageName select descln;
     422                    if (!foundElements.Any())
     423                        foundElements = from descln in allElements where descln.Attribute("lang").Value == defaultLang select descln;
     424                }
     425            }
     426
     427            if (foundElements == null || !foundElements.Any() || !allElements.Any())
     428            {
     429                List<XElement> fe = new List<XElement>();
     430                fe.Add(new XElement("dummy"));
     431                return fe;
     432            }
     433
     434            return foundElements;
    364435        }
    365436
     
    405476                foreach (var child in inputStack.Children)
    406477                {
    407                     if (child is TextBox)
    408                     {
    409                         SaveTextboxContent((TextBox)child);
    410                     }
     478                    SaveControlContent(child);
    411479                }
    412480                var nextElement = (XElement) inputPanel.Tag;
     
    419487        }
    420488
    421         private void SaveTextboxContent(TextBox textBox)
    422         {
    423             XElement ele = (XElement) textBox.Tag;
    424             if (ele.Attribute("plugin") != null && ele.Attribute("property") != null)
    425             {
     489        private void SaveControlContent(object o)
     490        {
     491            if (o is TextBox || o is ComboBox || o is CheckBox)
     492            {
     493                Control c = (Control)o;
     494                XElement ele = (XElement)c.Tag;
    426495                var id = GetElementID(ele);
    427                 var newEntry = new PluginPropertyValue()
     496                PluginPropertyValue newEntry = new PluginPropertyValue();
     497                if (ele.Attribute("plugin") != null && ele.Attribute("property") != null)
     498                {
     499                    if (o is TextBox)
     500                    {
     501                        TextBox textBox = (TextBox)o;
     502                        newEntry = new PluginPropertyValue()
    428503                                   {
    429504                                       PluginName = ele.Attribute("plugin").Value,
     
    431506                                       Value = textBox.Text
    432507                                   };
    433 
    434                 if (!propertyValueDict.ContainsKey(id))
    435                     propertyValueDict.Add(id, newEntry);
    436                 else
    437                     propertyValueDict[id] = newEntry;
    438             }
    439         }
    440 
    441         private void DeleteTextboxContent(TextBox textBox)
    442         {
    443             XElement ele = (XElement)textBox.Tag;
    444             var id = GetElementID(ele);
    445 
    446             if (propertyValueDict.ContainsKey(id))
    447                 propertyValueDict.Remove(id);
     508                    }
     509                    else if (o is ComboBox)
     510                    {
     511                        ComboBox comboBox = (ComboBox)o;
     512                        newEntry = new PluginPropertyValue()
     513                        {
     514                            PluginName = ele.Attribute("plugin").Value,
     515                            PropertyName = ele.Attribute("property").Value,
     516                            Value = comboBox.SelectedIndex
     517                        };
     518                    }
     519                    else if (o is CheckBox)
     520                    {
     521                        CheckBox checkBox = (CheckBox)o;
     522                        if (checkBox.IsChecked != null)
     523                        {
     524                            newEntry = new PluginPropertyValue()
     525                            {
     526                                PluginName = ele.Attribute("plugin").Value,
     527                                PropertyName = ele.Attribute("property").Value,
     528                                Value = (bool)checkBox.IsChecked
     529                            };
     530                        }
     531                    }
     532
     533                    if (!propertyValueDict.ContainsKey(id))
     534                        propertyValueDict.Add(id, newEntry);
     535                    else
     536                        propertyValueDict[id] = newEntry;
     537                }
     538            }
     539        }
     540
     541        private void DeleteControlContent(object o)
     542        {
     543            if (o is TextBox || o is ComboBox || o is CheckBox)
     544            {
     545                Control control = (Control)o;
     546                XElement ele = (XElement)control.Tag;
     547                var id = GetElementID(ele);
     548
     549                if (propertyValueDict.ContainsKey(id))
     550                    propertyValueDict.Remove(id);
     551            }
    448552        }
    449553
     
    461565                foreach (var child in inputStack.Children)
    462566                {
    463                     if (child is TextBox)
    464                     {
    465                         DeleteTextboxContent((TextBox)child);
    466                     }
     567                    DeleteControlContent(child);
    467568                }
    468569
     
    494595        public string PluginName;
    495596        public string PropertyName;
    496         public string Value;
     597        public object Value;
    497598    }
    498599}
Note: See TracChangeset for help on using the changeset viewer.