Changeset 2638


Ignore:
Timestamp:
Feb 9, 2011, 5:05:40 PM (11 years ago)
Author:
sauer
Message:

Wizard:

  • result output
  • history bug fixes
Location:
trunk/CrypPlugins
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/TextOutput/TextOutput.cs

    r2633 r2638  
    5454
    5555    private string _currentValue;
    56     private string CurrentValue
     56    public string CurrentValue
    5757    {
    5858        get
     
    6060            return _currentValue;
    6161        }
    62         set
     62        private set
    6363        {
    6464            _currentValue = value;
  • trunk/CrypPlugins/Wizard/Config/EnDeCrypt/wizard.config.classicEnDe.xml

    r2626 r2638  
    5050    </comboBox>
    5151
    52     <input>
     52    <sampleViewer file="WorkspaceManagerSamples\Caesar_Sample.cwm" title="W_Caesar_Sample">
    5353      <name lang="en">Summary</name>
    5454      <description lang="en" >
     
    5858      <headline lang="en" >Summary</headline>
    5959      <desc lang="en">Here is a summary of your choice.</desc>
    60 
    61       <history alignment="Center"/>
    6260     
    6361      <inputBox plugin="TextInput1" property="Text" alignment="Right" width="80%" visibleLines="5">
     
    8987      </comboBox>
    9088
    91       <outputBox plugin="CaesarResult" property="Text" alignment="Stretch" width="80%" visibleLines="2">
     89      <outputBox plugin="CaesarResult" property="CurrentValue" alignment="Stretch" width="80%" visibleLines="2">
    9290        <description lang="en">
    9391          Some output message:
     
    9593      </outputBox>
    9694     
    97       <loadSample file="WorkspaceManagerSamples\Caesar_Sample.cwm" title="W_Caesar_Sample"/>
    98     </input>
     95      <!--<loadSample file="WorkspaceManagerSamples\Caesar_Sample.cwm" title="W_Caesar_Sample"/>-->
     96    </sampleViewer>
    9997   
    10098  </input>
  • trunk/CrypPlugins/Wizard/Config/wizard.config.start.xml

    r2521 r2638  
    55<category>
    66
     7  <name lang="en">Main</name>
     8  <description lang="en">Main page</description>
     9 
    710  <!-- This is the step's headline. It should be short, but precise. -->
    811  <headline lang="en" >Task Selection</headline>
  • trunk/CrypPlugins/Wizard/WizardControl.xaml.cs

    r2627 r2638  
    11using System;
    22using System.Collections.Generic;
     3using System.Collections.ObjectModel;
     4using System.Collections.Specialized;
     5using System.ComponentModel;
    36using System.Linq;
    47using System.Text;
     
    4043        }
    4144
    42         List<PageInfo> currentHistory = new List<PageInfo>();
     45        ObservableCollection<PageInfo> currentHistory = new ObservableCollection<PageInfo>();
    4346        private Dictionary<string, bool> selectedCategories = new Dictionary<string, bool>();
    4447        private SolidColorBrush selectionBrush = new SolidColorBrush();
     
    4851        private Dictionary<string, PluginPropertyValue> propertyValueDict = new Dictionary<string, PluginPropertyValue>();
    4952        private HashSet<TextBox> boxesWithWrongContent = new HashSet<TextBox>();
     53        private HistoryTranslateTransformConverter historyTranslateTransformConverter = new HistoryTranslateTransformConverter();
     54        private List<TextBox> currentOutputBoxes = new List<TextBox>();
     55        private List<TextBox> currentInputBoxes = new List<TextBox>();
    5056
    5157        internal event OpenTabHandler OnOpenTab;
     
    7177            InitializeComponent();
    7278
     79            currentHistory.CollectionChanged += delegate
     80                                                    {
     81                                                        CreateHistory();
     82                                                    };
     83
    7384            selectionBrush.Color = Color.FromArgb(255, 200, 220, 245);
    7485            SetupPage(wizardConfigXML);
     86            AddToHistory(wizardConfigXML);
    7587        }
    7688
     
    141153        #endregion
    142154
     155        #region HistoryTranslateTransformConverter
     156
     157        [ValueConversion(typeof(double), typeof(double))]
     158        class HistoryTranslateTransformConverter : IValueConverter
     159        {
     160            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
     161            {
     162                return (double)value - 2;
     163            }
     164
     165            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
     166            {
     167                throw new NotImplementedException();
     168            }
     169        }
     170
     171        #endregion
     172
    143173        private void SetupPage(XElement element)
    144174        {
     175            nextButton.IsEnabled = true;
     176
     177            currentOutputBoxes.Clear();
     178            currentInputBoxes.Clear();
    145179            SaveContent();
    146180            boxesWithWrongContent.Clear();
     
    148182            if ((element.Name == "loadSample") && (element.Attribute("file") != null) && (element.Attribute("title") != null))
    149183            {
    150                 LoadSample(element.Attribute("file").Value, element.Attribute("title").Value);
     184                LoadSample(element.Attribute("file").Value, element.Attribute("title").Value, true);
    151185                abortButton_Click(null, null);
     186                return;
    152187            }
    153188
     
    177212
    178213
    179             if (element.Name == "input")
     214            if (element.Name == "input" || element.Name == "sampleViewer")
    180215            {
    181216                categoryGrid.Visibility = Visibility.Hidden;
     
    187222
    188223                inputStack.Children.Clear();
    189 
    190                 inputPanel.Tag = element.Element("input");
    191                 if (inputPanel.Tag == null)
    192                     inputPanel.Tag = element.Element("category");
    193                 if (inputPanel.Tag == null)
    194                 {
    195                     inputPanel.Tag = element.Element("loadSample");
    196                     if (inputPanel.Tag != null)
     224               
     225                var allNexts = (from el in element.Elements()
     226                                 where el.Name == "input" || el.Name == "category" || el.Name == "loadSample" || el.Name == "sampleViewer"
     227                                 select el);
     228                if (allNexts.Count() > 0)
     229                {
     230                    inputPanel.Tag = allNexts.First();
     231                    if (allNexts.First().Name == "loadSample")
    197232                        SwitchNextButtonContent();
    198233                }
    199 
    200                 FillInputStack(inputs, element.Name.ToString());
     234                else
     235                {
     236                    var dummy = new XElement("loadSample");
     237                    element.Add(dummy);
     238                    inputPanel.Tag = dummy;
     239                    SwitchNextButtonContent();
     240                }
     241
     242                FillInputStack(inputs, element.Name.ToString(), (element.Name == "input"));
     243
     244                if (element.Name == "sampleViewer" && (element.Attribute("file") != null) && (element.Attribute("title") != null))
     245                {
     246                    nextButton.IsEnabled = false;
     247                    LoadSample(element.Attribute("file").Value, element.Attribute("title").Value, false);
     248                }
    201249
    202250                string id = GetElementID((XElement)inputPanel.Tag);
     
    294342        }
    295343
    296         private void FillInputStack(IEnumerable<XElement> inputs, string type)
     344        private void FillInputStack(IEnumerable<XElement> inputs, string type, bool isInput)
    297345        {
    298346            var inputFieldStyle = (Style)FindResource("InputFieldStyle");
     
    308356                    inputStack.Children.Add(description);
    309357
    310                     Control inputElement = CreateInputElement(input, inputFieldStyle);
     358                    Control inputElement = CreateInputElement(input, inputFieldStyle, isInput);
    311359
    312360                    //Set width:
     
    365413        }
    366414
    367         private Control CreateInputElement(XElement input, Style inputFieldStyle)
     415        private Control CreateInputElement(XElement input, Style inputFieldStyle, bool isInput)
    368416        {
    369417            Control element = null;
     
    375423                case "inputBox":
    376424                    var inputBox = new TextBox();
     425                    inputBox.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
    377426                    inputBox.Tag = input;
    378427                    inputBox.AcceptsReturn = true;
     
    403452                    else if (input.Attribute("defaultValue") != null)
    404453                        inputBox.Text = input.Attribute("defaultValue").Value.Trim();
     454
     455                    if (!isInput)
     456                        currentInputBoxes.Add(inputBox);
    405457
    406458                    element = inputBox;
     
    477529
    478530                case "outputBox":
     531                    if (isInput)
     532                        break;
     533
    479534                    var outputBox = new TextBox();
     535                    outputBox.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
    480536                    outputBox.Tag = input;
    481537                    outputBox.AcceptsReturn = true;
     
    501557                        };
    502558                    }
    503 
    504                     //TODO: Refresh content from sample on runtime
     559                   
    505560                    outputBox.IsEnabled = false;
    506561
     562                    currentOutputBoxes.Add(outputBox);
    507563                    element = outputBox;
    508564                    break;
     
    535591                p.Content = sp;
    536592                p.Tag = page.tag;
    537                 p.MouseDoubleClick += new MouseButtonEventHandler(p_MouseDoubleClick);
     593                p.MouseDoubleClick += new MouseButtonEventHandler(page_MouseDoubleClick);
    538594
    539595                Polygon triangle = new Polygon();
     
    559615                Binding binding = new Binding("ActualWidth");
    560616                binding.Source = p;
     617                binding.Converter = historyTranslateTransformConverter;
    561618                BindingOperations.SetBinding(translateTranform, TranslateTransform.XProperty, binding);
    562619
     
    568625        }
    569626
    570         void p_MouseDoubleClick(object sender, MouseButtonEventArgs e)
     627        void page_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    571628        {
    572629            SwitchButtonWhenNecessary();
     
    582639            }
    583640
     641            CreateHistory();
     642
    584643            XElement parent = (XElement)cc.Tag;
    585644
     
    588647
    589648            SetupPage(parent);
    590 
    591             CreateHistory();
    592649        }
    593650
     
    621678        }
    622679
    623         private void LoadSample(string file, string title)
     680        private void LoadSample(string file, string title, bool openTab)
    624681        {
    625682            file = SamplesDir + "\\" + file;
     
    627684            var newEditor = new WorkspaceManager.WorkspaceManager();
    628685            var model = ModelPersistance.loadModel(file, newEditor);
     686
     687            //Fill in all data from wizard to sample:
    629688            foreach (var c in propertyValueDict)
    630689            {
     
    634693                    var plugin = model.AllPluginModels.Where(x => x.Name == ppv.PluginName).First().Plugin;
    635694                    var settings = plugin.Settings;
    636                     var property = settings.GetType().GetProperty(ppv.PropertyName);
    637                     if (ppv.Value is string)
    638                         property.SetValue(settings, (string)ppv.Value, null);
    639                     else if (ppv.Value is int)
    640                         property.SetValue(settings, (int)ppv.Value, null);
    641                     else if (ppv.Value is bool)
    642                         property.SetValue(settings, (bool)ppv.Value, null);
     695
     696                    var property = plugin.GetType().GetProperty(ppv.PropertyName) ?? settings.GetType().GetProperty(ppv.PropertyName);
     697
     698                    if (property != null)
     699                    {
     700                        if (ppv.Value is string)
     701                            property.SetValue(settings, (string) ppv.Value, null);
     702                        else if (ppv.Value is int)
     703                            property.SetValue(settings, (int) ppv.Value, null);
     704                        else if (ppv.Value is bool)
     705                            property.SetValue(settings, (bool) ppv.Value, null);
     706                    }
    643707                }
    644708                catch (Exception)
     
    648712            }
    649713
    650             OnOpenTab(newEditor, title, null);
     714            //Register events for output boxes:
     715            foreach (var outputBox in currentOutputBoxes)
     716            {
     717                XElement ele = (XElement) outputBox.Tag;
     718                var pluginName = ele.Attribute("plugin").Value;
     719                var propertyName = ele.Attribute("property").Value;
     720                if (pluginName != null && propertyName != null)
     721                {
     722                    var plugin = model.AllPluginModels.Where(x => x.Name == pluginName).First().Plugin;
     723                    var settings = plugin.Settings;
     724                    object theObject = null;
     725
     726                    var property = plugin.GetType().GetProperty(propertyName);
     727                    EventInfo propertyChangedEvent = null;
     728                    if (property != null)
     729                    {
     730                        propertyChangedEvent = plugin.GetType().GetEvent("PropertyChanged");
     731                        theObject = plugin;
     732                    }
     733                    else    //Use property from settings
     734                    {
     735                        property = settings.GetType().GetProperty(propertyName);
     736                        propertyChangedEvent = settings.GetType().GetEvent("PropertyChanged");
     737                        theObject = settings;
     738                    }
     739
     740                    if (property != null && propertyChangedEvent != null)
     741                    {
     742                        TextBox box = outputBox;
     743                        propertyChangedEvent.AddEventHandler(theObject, (PropertyChangedEventHandler)delegate(Object sender, PropertyChangedEventArgs e)
     744                                                                                                    {
     745                                                                                                        if (e.PropertyName == propertyName)
     746                                                                                                        {
     747                                                                                                            UpdateOutputBox(box, property, theObject);
     748                                                                                                        }
     749                                                                                                    });
     750                    }
     751                }
     752            }
     753
     754            //Register events for input boxes:
     755            foreach (var inputBox in currentInputBoxes)
     756            {
     757                XElement ele = (XElement)inputBox.Tag;
     758                var pluginName = ele.Attribute("plugin").Value;
     759                var propertyName = ele.Attribute("property").Value;
     760                if (pluginName != null && propertyName != null)
     761                {
     762                    var plugin = model.AllPluginModels.Where(x => x.Name == pluginName).First().Plugin;
     763                    var settings = plugin.Settings;
     764                    object theObject = null;
     765
     766                    var property = plugin.GetType().GetProperty(propertyName);
     767                    if (property != null)
     768                    {
     769                        theObject = plugin;
     770                    }
     771                    else    //Use property from settings
     772                    {
     773                        property = settings.GetType().GetProperty(propertyName);
     774                        theObject = settings;
     775                    }
     776
     777                    if (property != null)
     778                    {
     779                        inputBox.TextChanged += delegate
     780                                                    {
     781                                                        property.SetValue(settings, (string) inputBox.Text, null);
     782                                                        plugin.Initialize();
     783                                                    };
     784                    }
     785                }
     786            }
     787
     788            //load sample:
    651789            foreach (PluginModel pluginModel in model.AllPluginModels)
    652790            {
    653791                pluginModel.Plugin.Initialize();
    654792            }
    655             newEditor.Open(model);                   
     793            newEditor.Open(model);
     794
     795            if (openTab)
     796                OnOpenTab(newEditor, title, null);
     797            else
     798                newEditor.Execute();
     799        }
     800
     801        private void UpdateOutputBox(TextBox box, PropertyInfo property, object theObject)
     802        {
     803            Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
     804                                                             {
     805                                                                 box.Text = (string) property.GetValue(theObject, null);
     806                                                             }, null);
    656807        }
    657808
     
    741892            history.Content = null;
    742893            currentHistory.Clear();
     894            AddToHistory(wizardConfigXML);
    743895            propertyValueDict.Clear();
    744896            ResetSelectionDependencies();
     
    768920                    {
    769921                        var ele = (XElement) b.Tag;
     922                        AddToHistory(ele);
    770923                        SetupPage(ele);
    771                         AddToHistory(ele);
    772 
    773924                        break;
    774925                    }
     
    778929            {
    779930                var nextElement = (XElement) inputPanel.Tag;
     931                AddToHistory(nextElement);
    780932                SetupPage(nextElement);
    781                 AddToHistory(nextElement);
    782933            }
    783934
    784935            Storyboard mainGridStoryboardLeft = (Storyboard)FindResource("MainGridStoryboardNext2");
    785936            mainGridStoryboardLeft.Begin();
    786 
    787             CreateHistory();
    788937        }
    789938
     
    801950        private void AddToHistory(XElement ele)
    802951        {
    803             var page = new PageInfo()
    804                            {
    805                                name = FindElementsInElement(ele, "name").First().Value,
    806                                description = FindElementsInElement(ele, "description").First().Value,
    807                                tag = ele
    808                            };
    809 
    810             if (ele.Attribute("image") != null)
    811             {
    812                 page.image = ele.Attribute("image").Value;
    813             }
    814 
    815             currentHistory.Add(page);
     952            try
     953            {
     954                var page = new PageInfo()
     955                                   {
     956                                       name = FindElementsInElement(ele, "name").First().Value,
     957                                       description = FindElementsInElement(ele, "description").First().Value,
     958                                       tag = ele
     959                                   };
     960
     961                if (ele.Attribute("image") != null)
     962                {
     963                    page.image = ele.Attribute("image").Value;
     964                }
     965
     966                currentHistory.Add(page);
     967            }
     968            catch (Exception)
     969            {
     970                GuiLogMessage("Error adding page to history", NotificationLevel.Error);
     971            }
    816972        }
    817973
     
    9221078            Storyboard mainGridStoryboardLeft = (Storyboard)FindResource("MainGridStoryboardBack2");
    9231079            mainGridStoryboardLeft.Begin();
    924 
    925             CreateHistory();
    9261080        }
    9271081
Note: See TracChangeset for help on using the changeset viewer.