Changeset 8652


Ignore:
Timestamp:
Feb 21, 2020, 3:58:41 PM (2 years ago)
Author:
Sven Rech
Message:

Primes tutorial:

  • Use selectable text on factorization pages instead of labels which switch to text boxes on mouse over
  • Made text table entries in group boxes of "Numberline" page markable
Location:
trunk/CrypPlugins/Primes/Primes/WpfControls
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/Primes/Primes/WpfControls/Components/LogControl2.xaml.cs

    r8109 r8652  
    4343
    4444        private TextBox m_Edit;
    45         private TextBlock m_TextBlock;
     45        private SelectableTextBlock m_SelectableTextBlock;
    4646        TextStyle m_TextStyle;
    4747        private int m_CurrentRow;
     
    4949
    5050        private Style m_InfoStyle;
    51         private IList<TextBlock> m_Selected;
     51        private IList<SelectableTextBlock> m_Selected;
    5252
    5353        public Style InfoStyle
     
    149149                foreach (UIElement e in this.gridMessages.Children)
    150150                {
    151                     if (e.GetType() == typeof(TextBlock))
    152                         (e as TextBlock).Width = value - 50;
     151                    if (e.GetType() == typeof(SelectableTextBlock))
     152                        (e as SelectableTextBlock).Width = value - 50;
    153153                    else if (e.GetType() == typeof(Rectangle))
    154154                        (e as Rectangle).Width = value - 50;
     
    171171            m_CurrentRow = -1;
    172172            m_FormerRow = -1;
    173             m_Selected = new List<TextBlock>();
     173            m_Selected = new List<SelectableTextBlock>();
    174174            counter = 1;
    175175            m_Initialized = false;
     
    221221        }
    222222
    223         private TextBlock Get(int colum, int row)
     223        private SelectableTextBlock Get(int colum, int row)
    224224        {
    225225            UIElementCollection childs = ControlHandler.GetPropertyValue(gridMessages, "Children") as UIElementCollection;
     
    232232
    233233                    UIElement element = ControlHandler.GetPropertyValue(_enum, "Current") as UIElement;
    234                     if (element.GetType() == typeof(TextBlock))
     234                    if (element.GetType() == typeof(SelectableTextBlock))
    235235                    {
    236236                        int _row = (int)ControlHandler.ExecuteMethod(gridMessages, "GetRow", new object[] { element });
     
    238238                        if (_row == row && _col == colum)
    239239                        {
    240                             return element as TextBlock;
     240                            return element as SelectableTextBlock;
    241241                        }
    242242                    }
     
    255255                    UIElementCollection childs = ControlHandler.GetPropertyValue(gridMessages, "Children") as UIElementCollection;
    256256                    column++;
    257                     TextBlock tb = null;
     257                    SelectableTextBlock tb = null;
    258258                    if (m_OverrideText)
    259259                    {
    260                         TextBlock _tb = this.Get(column, row);
     260                        SelectableTextBlock _tb = this.Get(column, row);
    261261                        if (_tb != null)
    262262                        {
     
    266266                        else
    267267                        {
    268                             tb = ControlHandler.CreateObject(typeof(TextBlock)) as TextBlock;
     268                            tb = ControlHandler.CreateObject(typeof(SelectableTextBlock)) as SelectableTextBlock;
    269269                        }
    270270                    }
    271271                    else
    272272                    {
    273                         tb = ControlHandler.CreateObject(typeof(TextBlock)) as TextBlock;
     273                        tb = ControlHandler.CreateObject(typeof(SelectableTextBlock)) as SelectableTextBlock;
    274274                    }
    275275                    ControlHandler.SetPropertyValue(tb, "TextWrapping", TextWrapping.Wrap);
     
    283283                    if (!string.IsNullOrEmpty(message.Trim()))
    284284                    {
    285                         tb.MouseLeftButtonDown += new MouseButtonEventHandler(tb_MouseLeftButtonDown);
     285                        //tb.MouseLeftButtonDown += new MouseButtonEventHandler(tb_MouseLeftButtonDown);
    286286                        tb.MouseMove += new MouseEventHandler(tb_MouseMove);
    287287                        tb.MouseLeave += new MouseEventHandler(tb_MouseLeave);
     
    299299                        if (m_ShowCounter)
    300300                        {
    301                             TextBlock tb1 = ControlHandler.CreateObject(typeof(TextBlock)) as TextBlock;
     301                            SelectableTextBlock tb1 = ControlHandler.CreateObject(typeof(SelectableTextBlock)) as SelectableTextBlock;
    302302                            ControlHandler.SetPropertyValue(tb1, "TextWrapping", TextWrapping.Wrap);
    303303                            ControlHandler.SetPropertyValue(tb1, "Text", counter.ToString() + ". ");
     
    347347            //  if (m_TextStyle != null)
    348348            //  {
    349             //    MarkRow(sender as TextBlock, m_TextStyle.Background, m_TextStyle.Foreground);
     349            //    MarkRow(sender as SelectableTextBlock, m_TextStyle.Background, m_TextStyle.Foreground);
    350350            //  }
    351351            //  else
    352352            //  {
    353             //    MarkRow(sender as TextBlock, Brushes.White, Brushes.Black);
     353            //    MarkRow(sender as SelectableTextBlock, Brushes.White, Brushes.Black);
    354354            //  }
    355355        }
    356356
    357         private void MarkRow(TextBlock sender, Brush background, Brush foreground)
     357        private void MarkRow(SelectableTextBlock sender, Brush background, Brush foreground)
    358358        {
    359359            if (!gridMessages.ContextMenu.IsOpen)
    360360            {
    361                 foreach (TextBlock tb in m_Selected)
     361                foreach (SelectableTextBlock tb in m_Selected)
    362362                {
    363363                    if (m_TextStyle != null)
     
    375375        }
    376376
    377         private IList<TextBlock> DoMarkRow(TextBlock sender, Brush background, Brush foreground)
    378         {
    379             IList<TextBlock> result = new List<TextBlock>();
     377        private IList<SelectableTextBlock> DoMarkRow(SelectableTextBlock sender, Brush background, Brush foreground)
     378        {
     379            IList<SelectableTextBlock> result = new List<SelectableTextBlock>();
    380380
    381381            if (!gridMessages.ContextMenu.IsOpen)
     
    389389                    for (int i = start; i <= end; i++)
    390390                    {
    391                         if (gridMessages.Children[i].GetType() == typeof(TextBlock))
    392                         {
    393                             TextBlock tb = gridMessages.Children[i] as TextBlock;
     391                        if (gridMessages.Children[i].GetType() == typeof(SelectableTextBlock))
     392                        {
     393                            SelectableTextBlock tb = gridMessages.Children[i] as SelectableTextBlock;
    394394                            if (Grid.GetRow(tb) == row)
    395395                            {
     
    408408        void tb_MouseMove(object sender, MouseEventArgs e)
    409409        {
    410             TextStyle textstyle = new TextStyle((sender as TextBlock).Foreground, (sender as TextBlock).Background);
     410            TextStyle textstyle = new TextStyle((sender as SelectableTextBlock).Foreground, (sender as SelectableTextBlock).Background);
    411411            if (textstyle.Equals(TextStyle.InfoStyle) || textstyle.Equals(TextStyle.ErrorStyle))
    412412                m_TextStyle = textstyle;
    413             MarkRow(sender as TextBlock, Brushes.Blue, Brushes.WhiteSmoke);
     413            MarkRow(sender as SelectableTextBlock, Brushes.Blue, Brushes.WhiteSmoke);
    414414            if (sender != null)
    415415            {
     
    428428                int col = Grid.GetColumn(m_Edit);
    429429                gridMessages.Children.Remove(m_Edit);
    430                 Grid.SetRow(m_TextBlock, row);
    431                 Grid.SetColumn(m_TextBlock, col);
    432                 gridMessages.Children.Insert((int)m_TextBlock.Tag, m_TextBlock);
     430                Grid.SetRow(m_SelectableTextBlock, row);
     431                Grid.SetColumn(m_SelectableTextBlock, col);
     432                gridMessages.Children.Insert((int)m_SelectableTextBlock.Tag, m_SelectableTextBlock);
    433433                m_Edit = null;
    434434            }
     
    437437        void tb_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    438438        {
    439             if (sender != null && sender.GetType() == typeof(TextBlock))
     439            if (sender != null && sender.GetType() == typeof(SelectableTextBlock))
    440440            {
    441441                RemoveEdit();
    442                 m_TextBlock = sender as TextBlock;
    443                 int row = Grid.GetRow(m_TextBlock);
    444                 int col = Grid.GetColumn(m_TextBlock);
     442                m_SelectableTextBlock = sender as SelectableTextBlock;
     443                int row = Grid.GetRow(m_SelectableTextBlock);
     444                int col = Grid.GetColumn(m_SelectableTextBlock);
    445445                m_Edit = new TextBox();
    446446                m_Edit.MouseLeave += new MouseEventHandler(m_Edit_MouseLeave);
     
    448448                m_Edit.KeyUp += new KeyEventHandler(m_Edit_KeyDown);
    449449
    450                 m_Edit.Text = m_TextBlock.Text;
    451                 m_TextBlock.Tag = gridMessages.Children.IndexOf(m_TextBlock);
    452                 gridMessages.Children.Remove(m_TextBlock);
     450                m_Edit.Text = m_SelectableTextBlock.Text;
     451                m_SelectableTextBlock.Tag = gridMessages.Children.IndexOf(m_SelectableTextBlock);
     452                gridMessages.Children.Remove(m_SelectableTextBlock);
    453453                Grid.SetColumn(m_Edit, col);
    454454                Grid.SetRow(m_Edit, row);
     
    463463            if (e.Key == Key.Escape)
    464464            {
    465                 MarkRow(m_TextBlock, m_TextStyle.Background, m_TextStyle.Foreground);
     465                MarkRow(m_SelectableTextBlock, m_TextStyle.Background, m_TextStyle.Foreground);
    466466                RemoveEdit();
    467467            }
     
    471471        {
    472472            RemoveEdit();
    473             MarkRow(m_TextBlock, m_TextStyle.Background, m_TextStyle.Foreground);
     473            MarkRow(m_SelectableTextBlock, m_TextStyle.Background, m_TextStyle.Foreground);
    474474        }
    475475
     
    522522                        StringBuilder result = new StringBuilder();
    523523                        string[] msg = new string[m_Columns];
    524                         foreach (TextBlock tb in this.m_Selected)
     524                        foreach (SelectableTextBlock tb in this.m_Selected)
    525525                        {
    526526                            int column = Grid.GetColumn(tb);
     
    546546                        foreach (UIElement element in gridMessages.Children)
    547547                        {
    548                             if (element.GetType() == typeof(TextBlock))
     548                            if (element.GetType() == typeof(SelectableTextBlock))
    549549                            {
    550550                                if (row != Grid.GetRow(element))
     
    567567                                int column = Grid.GetColumn(element);
    568568                                if (column > -1 && column < msg.Length)
    569                                     msg[column] = (element as TextBlock).Text;
     569                                    msg[column] = (element as SelectableTextBlock).Text;
    570570                            }
    571571                        }
  • trunk/CrypPlugins/Primes/Primes/WpfControls/Factorization/FactorizationControl.xaml

    r8491 r8652  
    4545                <GroupBox Grid.Row="1" Header="{x:Static lang:Factorization.fac_result}" Name="gbFactorizationInfo" Margin="0,0,0,20">
    4646                    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
    47                         <StackPanel Name="pnInfo" Orientation="Horizontal" MouseLeave="pnInfo_MouseLeave" Height="30">
    48                             <DockPanel MouseEnter="DockPanelFactors_MouseEnter" Name="dpInfo">
    49                                 <Label Name="lblInput" Foreground="Blue">
    50                                     <Label.ContextMenu>
    51                                         <ContextMenu BorderBrush="LightGray" Background="WhiteSmoke">
    52                                             <MenuItem Header="{x:Static lang:Factorization.fac_copytoclipboard}" Click="MenuItemCopyInputClick">
    53                                                 <MenuItem.Icon>
    54                                                     <Image Source="../../Resources/icons/page_copy.png" />
    55                                                 </MenuItem.Icon>
    56                                             </MenuItem>
    57                                         </ContextMenu>
    58                                     </Label.ContextMenu>
    59                                 </Label>
    60                                 <Label Name="lblFactors">
    61                                     <Label.ContextMenu>
    62                                         <ContextMenu>
    63                                             <MenuItem Header="{x:Static lang:Factorization.fac_copytoclipboard}" Click="MenuItem_Click">
    64                                                 <MenuItem.Icon>
    65                                                     <Image Source="../../Resources/icons/page_copy.png" />
    66                                                 </MenuItem.Icon>
    67                                             </MenuItem>
    68                                         </ContextMenu>
    69                                     </Label.ContextMenu>
    70                                 </Label>
    71                             </DockPanel>
     47                        <StackPanel Name="pnInfo" Orientation="Horizontal" Height="30">
     48                            <comps:SelectableTextBlock VerticalAlignment="Center" Margin="5,0,5,0">
     49                                <Run Foreground="Blue" x:Name="lblInput" />
     50                                <Run x:Name="lblFactors" />
     51                            </comps:SelectableTextBlock>
    7252                        </StackPanel>
    7353                    </ScrollViewer>
  • trunk/CrypPlugins/Primes/Primes/WpfControls/Factorization/FactorizationControl.xaml.cs

    r8484 r8652  
    4242        private IFactorizer _bruteforce;
    4343        private IFactorizer _qs;
    44         private TextBox m_TbFactorizationCopy;
    4544
    4645        struct InputValues
     
    119118
    120119            SetInputValidators();
    121             m_TbFactorizationCopy = new TextBox();
    122             m_TbFactorizationCopy.IsReadOnly = true;
    123             m_TbFactorizationCopy.MouseLeave += new MouseEventHandler(m_TbFactorizationCopy_MouseLeave);
    124             m_TbFactorizationCopy.MouseMove += new MouseEventHandler(m_TbFactorizationCopy_MouseMove);
    125             ContextMenu tbFactorizationCopyContextMenu = new ContextMenu();
    126             MenuItem tbFactorizationCopyContextMenuCopy = new MenuItem();
    127             tbFactorizationCopyContextMenuCopy.Click += new RoutedEventHandler(tbFactorizationCopyContextMenuCopy_Click);
    128             tbFactorizationCopyContextMenuCopy.Header = Primes.Resources.lang.WpfControls.Factorization.Factorization.qs_copytoclipboard;
    129             tbFactorizationCopyContextMenu.Items.Add(tbFactorizationCopyContextMenuCopy);
    130             m_TbFactorizationCopy.ContextMenu = tbFactorizationCopyContextMenu;
    131120
    132121            UpdateMessages();
     
    468457                case KOF.BruteForce:
    469458                    ControlHandler.SetPropertyValue(gbFactorizationInfo, "Header", BF.FactorizationInfo);
    470                     ControlHandler.SetElementContent(lblFactors, BF.factors);
    471                     ControlHandler.SetElementContent(lblInput, BF.lblInput);
     459                    ControlHandler.SetPropertyValue(lblFactors, "Text", BF.factors);
     460                    ControlHandler.SetPropertyValue(lblInput, "Text", BF.lblInput);
    472461                    ControlHandler.SetPropertyValue(inputnumbermanager.tbVertFree, "Text", BF.FreeText);
    473462                    ControlHandler.SetPropertyValue(inputnumbermanager.tbVertCalcFactor, "Text", BF.CalcFactorText);
     
    479468                case KOF.QS:
    480469                    ControlHandler.SetPropertyValue(gbFactorizationInfo, "Header", QS.FactorizationInfo);
    481                     ControlHandler.SetElementContent(lblFactors, QS.factors);
    482                     ControlHandler.SetElementContent(lblInput, QS.lblInput);
     470                    ControlHandler.SetPropertyValue(lblFactors, "Text", QS.factors);
     471                    ControlHandler.SetPropertyValue(lblInput, "Text", QS.lblInput);
    483472                    ControlHandler.SetPropertyValue(inputnumbermanager.tbVertFree, "Text", QS.FreeText);
    484473                    ControlHandler.SetPropertyValue(inputnumbermanager.tbVertCalcFactor, "Text", QS.CalcFactorText);
     
    563552        }
    564553
    565         private void MenuItem_Click(object sender, RoutedEventArgs e)
    566         {
    567             try
    568             {
    569                 Clipboard.SetText(lblFactors.Content.ToString());
    570             }
    571             catch (Exception ex)
    572             {
    573             }
    574         }
    575 
    576         void tbFactorizationCopyContextMenuCopy_Click(object sender, RoutedEventArgs e)
    577         {
    578             if (!string.IsNullOrEmpty(m_TbFactorizationCopy.Text))
    579             {
    580                 Clipboard.SetText(m_TbFactorizationCopy.Text);
    581             }
    582         }
    583 
    584         private void DockPanelFactors_MouseEnter(object sender, MouseEventArgs e)
    585         {
    586             if (lblFactors.Content != null && lblInput.Content != null)
    587             {
    588                 m_TbFactorizationCopy.Text = lblInput.Content.ToString() + lblFactors.Content.ToString();
    589                 pnInfo.Children.Clear();
    590                 pnInfo.Children.Add(m_TbFactorizationCopy);
    591             }
    592         }
    593 
    594         void m_TbFactorizationCopy_MouseLeave(object sender, MouseEventArgs e)
    595         {
    596             ResetInfoPanel();
    597         }
    598 
    599         void m_TbFactorizationCopy_MouseMove(object sender, MouseEventArgs e)
    600         {
    601             m_TbFactorizationCopy.SelectAll();
    602         }
    603 
    604         private void pnInfo_MouseLeave(object sender, MouseEventArgs e)
    605         {
    606             ResetInfoPanel();
    607         }
    608 
    609         private void ResetInfoPanel()
    610         {
    611             if (!m_TbFactorizationCopy.ContextMenu.IsOpen)
    612             {
    613                 pnInfo.Children.Clear();
    614                 pnInfo.Children.Add(dpInfo);
    615             }
    616         }
    617 
    618554        private void ClearInfoPanel()
    619555        {
    620             ResetInfoPanel();
    621             lblInput.Content = "";
    622             lblFactors.Content = "";
     556            lblInput.Text = "";
     557            lblFactors.Text = "";
    623558        }
    624559
Note: See TracChangeset for help on using the changeset viewer.