Changeset 6563


Ignore:
Timestamp:
Oct 3, 2015, 4:38:37 PM (6 years ago)
Author:
kopal
Message:

TextOutput is now able to show changes between two execution runs (with setting to enable/disable the feature)

Location:
trunk/CrypPlugins/TextOutput
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/TextOutput/Properties/Resources.Designer.cs

    r6456 r6563  
    22// <auto-generated>
    33//     Dieser Code wurde von einem Tool generiert.
    4 //     Laufzeitversion:4.0.30319.34209
     4//     Laufzeitversion:4.0.30319.34014
    55//
    66//     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
     
    251251       
    252252        /// <summary>
     253        ///   Sucht eine lokalisierte Zeichenfolge, die Show Changes ähnelt.
     254        /// </summary>
     255        internal static string ShowChangesCaption {
     256            get {
     257                return ResourceManager.GetString("ShowChangesCaption", resourceCulture);
     258            }
     259        }
     260       
     261        /// <summary>
     262        ///   Sucht eine lokalisierte Zeichenfolge, die Show Changes ähnelt.
     263        /// </summary>
     264        internal static string ShowChangesGroup {
     265            get {
     266                return ResourceManager.GetString("ShowChangesGroup", resourceCulture);
     267            }
     268        }
     269       
     270        /// <summary>
     271        ///   Sucht eine lokalisierte Zeichenfolge, die Shows the changes of the Textoutput between two executions. ähnelt.
     272        /// </summary>
     273        internal static string ShowChangesTooltip {
     274            get {
     275                return ResourceManager.GetString("ShowChangesTooltip", resourceCulture);
     276            }
     277        }
     278       
     279        /// <summary>
    253280        ///   Sucht eine lokalisierte Zeichenfolge, die Number of characters ähnelt.
    254281        /// </summary>
  • trunk/CrypPlugins/TextOutput/Properties/Resources.de.resx

    r6456 r6563  
    199199    <value>Wenn dieses Kontrollkästchen aktiviert ist, wird die Anzahl der Ziffern und Bits der Eingabe in der Statuszeile der Komponente angezeigt, falls die Eingabe nur aus Ziffern besteht.</value>
    200200  </data>
     201  <data name="ShowChangesCaption" xml:space="preserve">
     202    <value>Zeige Änderungen</value>
     203  </data>
     204  <data name="ShowChangesGroup" xml:space="preserve">
     205    <value>Zeige Änderungen</value>
     206  </data>
     207  <data name="ShowChangesTooltip" xml:space="preserve">
     208    <value>Zeigt die Änderungen der Textausgabe zwischen zwei Ausführungen.</value>
     209  </data>
    201210</root>
  • trunk/CrypPlugins/TextOutput/Properties/Resources.resx

    r6456 r6563  
    202202    <value>With this checkbox enabled, the number of decimal digits and bits of the input is displayed in the status line of the component, provided the input consists only of digits.</value>
    203203  </data>
     204  <data name="ShowChangesCaption" xml:space="preserve">
     205    <value>Show Changes</value>
     206  </data>
     207  <data name="ShowChangesGroup" xml:space="preserve">
     208    <value>Show Changes</value>
     209  </data>
     210  <data name="ShowChangesTooltip" xml:space="preserve">
     211    <value>Shows the changes of the Textoutput between two executions.</value>
     212  </data>
    204213</root>
  • trunk/CrypPlugins/TextOutput/TextOutput.cs

    r6456 r6563  
    3232using Cryptool.PluginBase.Miscellaneous;
    3333using System.Numerics;
     34using System.Windows.Documents;
     35using DiffMatchPatch;
     36using System.Windows.Media;
    3437
    3538namespace TextOutput
     
    244247                    s.Add((obj == null ? "null" : obj.ToString()));
    245248
    246                 fillValue = String.Join("\n",s);
     249                fillValue = String.Join("\r",s);
    247250            }
    248251            else if (value is BigInteger)
     
    260263                AddMessage("WARNING - String is too large (" + (fillValue.Length / 1024).ToString("0.00") + " kB), output will be truncated to " + (settings.MaxLength / 1024).ToString("0.00") + "kB", NotificationLevel.Warning);
    261264                fillValue = fillValue.Substring(0, settings.MaxLength);
    262             }
     265            }           
    263266           
    264267            Presentation.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
    265             {
     268            {               
     269                string oldtext = String.Empty;
     270                string newtext = String.Empty;
    266271                if (settings.Append)
    267272                {
     273                    oldtext = new TextRange(textOutputPresentation.textBox.Document.ContentStart, textOutputPresentation.textBox.Document.ContentEnd).Text;
    268274                    // append line breaks only if not first line
    269                     if (!string.IsNullOrEmpty(textOutputPresentation.textBox.Text))
     275                    if (!string.IsNullOrEmpty(oldtext))
    270276                    {
    271277                        for (int i = 0; i < settings.AppendBreaks; i++)
    272                             textOutputPresentation.textBox.AppendText("\n");
     278                            textOutputPresentation.textBox.AppendText("\r");
     279                    }                   
     280                    textOutputPresentation.textBox.AppendText(fillValue);
     281                    textOutputPresentation.textBox.ScrollToEnd();
     282                    newtext = new TextRange(textOutputPresentation.textBox.Document.ContentStart, textOutputPresentation.textBox.Document.ContentEnd).Text;                   
     283                }
     284                else
     285                {
     286                    oldtext = new TextRange(textOutputPresentation.textBox.Document.ContentStart, textOutputPresentation.textBox.Document.ContentEnd).Text;
     287                    textOutputPresentation.textBox.Document = new FlowDocument();
     288                    fillValue = fillValue.Replace("\n", "");
     289                    textOutputPresentation.textBox.AppendText(fillValue);
     290                    newtext = new TextRange(textOutputPresentation.textBox.Document.ContentStart, textOutputPresentation.textBox.Document.ContentEnd).Text;                   
     291                }
     292
     293                if (settings.ShowChanges)
     294                {
     295                    var diff = new diff_match_patch();
     296                    var diffs = diff.diff_main(oldtext, newtext, true);
     297                    diff.diff_cleanupSemanticLossless(diffs);
     298
     299                    textOutputPresentation.textBox.Document = new FlowDocument();
     300                    var para = new Paragraph();
     301                    foreach (var d in diffs)
     302                    {
     303                        switch (d.operation)
     304                        {
     305                            case Operation.EQUAL:
     306                                para.Inlines.Add(new Run(d.text));
     307                                break;
     308                            case Operation.INSERT:
     309                                Run run = new Run(d.text);
     310                                run.Background = new SolidColorBrush(Colors.LightBlue);
     311                                para.Inlines.Add(run);
     312                                break;
     313                        }
    273314                    }
    274                     textOutputPresentation.textBox.AppendText(fillValue);
    275 
    276                     textOutputPresentation.textBox.ScrollToEnd();
    277                 }
    278                 else
    279                 {
    280                     textOutputPresentation.textBox.Text = fillValue;
    281                 }
    282 
    283                 if (textOutputPresentation.textBox.Text.Length > settings.MaxLength)
    284                 {
    285                     GuiLogMessage("Text exceeds size limit. Truncating text...", NotificationLevel.Warning);
    286                     textOutputPresentation.textBox.Text = textOutputPresentation.textBox.Text.Substring(0, settings.MaxLength);
    287                 }
    288 
    289                 CurrentValue = textOutputPresentation.textBox.Text;
     315                    textOutputPresentation.textBox.Document.Blocks.Add(para);
     316                }
     317
     318                CurrentValue = newtext;
    290319                setStatusBar();
    291320
     
    316345            textOutputPresentation.labelBytes.Content = "...";
    317346
    318             string s = textOutputPresentation.textBox.Text;
     347            string currentText = new TextRange(textOutputPresentation.textBox.Document.ContentStart, textOutputPresentation.textBox.Document.ContentEnd).Text;
    319348            string label = "";
    320349
     
    360389                            //digits = BigInteger.Abs(number).ToString().Length;
    361390                        }
    362                         digits = s.Length;
     391                        digits = currentText.Length;
    363392                        if (number < 0) digits--;
    364393                    }
     
    378407            if (settings.ShowChars)
    379408            {
    380                 int chars = (s == null) ? 0 : s.Length;
     409                currentText = currentText.Replace("\r", "\r\n");
     410                int chars = (currentText == null) ? 0 : currentText.Length - 3;
    381411                string entity = (chars == 1) ? Properties.Resources.Char : Properties.Resources.Chars;
    382412                label += string.Format(" {0:#,0} " + entity, chars);
     
    386416            {
    387417                int lines = 0;
    388                 if (s != null && s.Length > 0)
    389                 {
    390                     lines = new Regex("\n", RegexOptions.Multiline).Matches(s).Count;
    391                     if (s[s.Length - 1] != '\n') lines++;
     418                if (currentText != null && currentText.Length > 0)
     419                {
     420                    lines = new Regex(System.Environment.NewLine, RegexOptions.Multiline).Matches(currentText).Count;
     421                    if (currentText[currentText.Length - 1] != '\n') lines++;
    392422                }
    393423                string entity = (lines == 1) ? Properties.Resources.Line : Properties.Resources.Lines;
     
    432462            textOutputPresentation.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
    433463            {
    434                 textOutputPresentation.textBox.Text = null;
     464                textOutputPresentation.textBox.Document = new FlowDocument();
    435465                //input = null;
    436466                clearStatusBar();
  • trunk/CrypPlugins/TextOutput/TextOutput.csproj

    r6054 r6563  
    9090  </ItemGroup>
    9191  <ItemGroup>
     92    <Compile Include="DiffMatchPatch.cs" />
    9293    <Compile Include="Properties\AssemblyInfo.cs">
    9394      <SubType>Code</SubType>
  • trunk/CrypPlugins/TextOutput/TextOutputPresentation.xaml

    r5376 r6563  
    1111    </Grid.RowDefinitions>
    1212    <!--<Label Padding="0" Grid.Row="0" Name="labelString" VerticalAlignment="Top" Background="#DFDFDF">Input</Label>-->
    13     <TextBox Name="textBox" Grid.Row="1" Margin="0" IsEnabled="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" IsReadOnly="True"
     13    <RichTextBox Name="textBox" Grid.Row="1" Margin="0" IsEnabled="True" VerticalScrollBarVisibility="Auto" IsReadOnly="True"
    1414             FontFamily="{Binding Source={x:Static Properties:Settings.Default}, Path=FontFamily, Mode=OneWay}"
    1515             FontSize="{Binding Source={x:Static Properties:Settings.Default}, Path=FontSize, Mode=OneWay}" />   
     16       
    1617    <Label Padding="0" Grid.Row="2" Name="labelBytes" VerticalAlignment="Top" Background="#DFDFDF">0 Bytes</Label>
    1718    </Grid>
  • trunk/CrypPlugins/TextOutput/TextOutputSettings.cs

    r6456 r6563  
    136136    }
    137137
     138    private bool showChanges = false;
     139    [TaskPane("ShowChangesCaption", "ShowChangesTooltip", "ShowChangesGroup", 6, true, ControlType.CheckBox, "", null)]
     140    public bool ShowChanges
     141    {
     142        get { return showChanges; }
     143        set
     144        {
     145            if (value != showChanges)
     146            {
     147                showChanges = value;
     148                OnPropertyChanged("ShowChanges");
     149            }
     150        }
     151    }
     152
    138153    # endregion settings
    139154
Note: See TracChangeset for help on using the changeset viewer.