Changeset 8660


Ignore:
Timestamp:
Feb 22, 2020, 2:39:34 PM (2 years ago)
Author:
Sven Rech
Message:

Primes tutorial: Introduced new context menu function "Copy whole text to clipboard" on "Numberline" page. All info texts are copied.

Location:
trunk/CrypPlugins/Primes/Primes/WpfControls/PrimesDistribution/Numberline
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/Primes/Primes/WpfControls/PrimesDistribution/Numberline/NumberlineControl.xaml

    r8650 r8660  
    33    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    44    xmlns:lang="clr-namespace:Primes.Resources.lang.WpfControls.Distribution"
    5     xmlns:comps="clr-namespace:Primes.WpfControls.Components">
     5    xmlns:comps="clr-namespace:Primes.WpfControls.Components"
     6    xmlns:components="clr-namespace:Primes.Resources.lang.WpfControls.Components">
    67
    78    <UserControl.Resources>
     
    424425
    425426                        <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Name="pnlContent" MinWidth="500">
    426 
     427                            <StackPanel.ContextMenu>
     428                                <ContextMenu>
     429                                    <MenuItem Header="{x:Static components:Components.logcontextmenucopyall}" Click="CopyMenuItem_Click" />
     430                                </ContextMenu>
     431                            </StackPanel.ContextMenu>
    427432                            <Grid Margin="10,10,10,10">
    428433                                <Grid.RowDefinitions>
  • trunk/CrypPlugins/Primes/Primes/WpfControls/PrimesDistribution/Numberline/NumberlineControl.xaml.cs

    r8650 r8660  
    2222using System.Windows.Media;
    2323using System.Linq;
     24using System.Text;
    2425using System.Threading;
     26using System.Windows.Documents;
    2527using Cryptool.PluginBase.Miscellaneous;
    2628using Primes.WpfControls.Components;
     
    11041106            ControlHandler.SetButtonEnabled(btnCancelAll, enabled);
    11051107        }
     1108
     1109        private void CopyMenuItem_Click(object sender, RoutedEventArgs e)
     1110        {
     1111            var sb = new StringBuilder();
     1112            foreach (var child in GetVisibleChildren(pnlContent).OfType<TextBlock>())
     1113            {
     1114                if (child.Inlines.Any())
     1115                {
     1116                    var range = new TextRange(child.Inlines.FirstInline.ContentStart, child.Inlines.LastInline.ContentEnd);
     1117                    sb.AppendLine(range.Text);
     1118                }
     1119                else
     1120                {
     1121                    sb.AppendLine(child.Text);
     1122                }
     1123            }
     1124            Clipboard.SetText(sb.ToString());
     1125        }
     1126
     1127        private IEnumerable<DependencyObject> GetVisibleChildren(DependencyObject parent)
     1128        {
     1129            for (var i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
     1130            {
     1131                var child = VisualTreeHelper.GetChild(parent, i);
     1132                if ((child as UIElement)?.IsVisible ?? true)
     1133                {
     1134                    yield return child;
     1135                    foreach (var subChild in GetVisibleChildren(child))
     1136                    {
     1137                        yield return subChild;
     1138                    }
     1139                }
     1140            }
     1141        }
    11061142    }
    11071143}
Note: See TracChangeset for help on using the changeset viewer.