Changeset 8658


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

Prime tutorial: In all list presentations: Smaller padding between rows and removed "mouse over" color effect (instead, these entries can be marked and copied now).

Location:
trunk/CrypPlugins/Primes/Primes/WpfControls/Components
Files:
2 edited

Legend:

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

    r5231 r8658  
    1717                <Grid.ContextMenu>
    1818                    <ContextMenu>
    19                         <MenuItem Header="{x:Static lang:Components.logcontextmenucopyselection}" Click="MenuItem_Click" Name="miCopySelection" />
    2019                        <MenuItem Header="{x:Static lang:Components.logcontextmenucopyall}" Click="MenuItem_Click" Name="miCopyAll" />
    2120                    </ContextMenu>
  • trunk/CrypPlugins/Primes/Primes/WpfControls/Components/LogControl.xaml.cs

    r8656 r8658  
    4343        #region Properties
    4444
    45         private TextBox m_Edit;
    46         private TextBlock m_TextBlock;
     45        private SelectableTextBlock m_TextBlock;
    4746        TextStyle m_TextStyle;
    4847        private int m_CurrentRow;
    4948        private int m_FormerRow;
    50 
    51         private Style m_InfoStyle;
    52         private IList<TextBlock> m_Selected;
    53 
    54         public Style InfoStyle
    55         {
    56             get { return m_InfoStyle; }
    57             set { m_InfoStyle = value; }
    58         }
    59 
    60         private Style m_ErrorStyle;
    61 
    62         public Style ErrorStyle
    63         {
    64             get { return m_ErrorStyle; }
    65             set { m_ErrorStyle = value; }
    66         }
    6749
    6850        public object Title
     
    138120                foreach (UIElement e in this.gridMessages.Children)
    139121                {
    140                     if (e.GetType() == typeof(TextBlock))
    141                         (e as TextBlock).Width = value - 50;
     122                    if (e.GetType() == typeof(SelectableTextBlock))
     123                        (e as SelectableTextBlock).Width = value - 50;
    142124                    else if (e.GetType() == typeof(Rectangle))
    143125                        (e as Rectangle).Width = value - 50;
     
    160142            m_CurrentRow = -1;
    161143            m_FormerRow = -1;
    162             m_Selected = new List<TextBlock>();
    163144            counter = 1;
    164145            m_Initialized = false;
     
    209190        }
    210191
    211         private TextBlock Get(int colum, int row)
     192        private SelectableTextBlock Get(int colum, int row)
    212193        {
    213194            UIElementCollection childs = ControlHandler.GetPropertyValue(gridMessages, "Children") as UIElementCollection;
     
    219200                {
    220201                    UIElement element = ControlHandler.GetPropertyValue(_enum, "Current") as UIElement;
    221                     if (element.GetType() == typeof(TextBlock))
     202                    if (element.GetType() == typeof(SelectableTextBlock))
    222203                    {
    223204                        int _row = (int)ControlHandler.ExecuteMethod(gridMessages, "GetRow", new object[] { element });
     
    225206                        if (_row == row && _col == colum)
    226207                        {
    227                             return element as TextBlock;
     208                            return element as SelectableTextBlock;
    228209                        }
    229210                    }
     
    242223                    UIElementCollection childs = ControlHandler.GetPropertyValue(gridMessages, "Children") as UIElementCollection;
    243224                    column++;
    244                     TextBlock tb = null;
     225                    SelectableTextBlock tb = null;
    245226                    if (m_OverrideText)
    246227                    {
    247                         TextBlock _tb = this.Get(column, row);
     228                        var _tb = this.Get(column, row);
    248229                        if (_tb != null)
    249230                        {
     
    253234                        else
    254235                        {
    255                             tb = ControlHandler.CreateObject(typeof(TextBlock)) as TextBlock;
     236                            tb = ControlHandler.CreateObject(typeof(SelectableTextBlock)) as SelectableTextBlock;
    256237                        }
    257238                    }
    258239                    else
    259240                    {
    260                         tb = ControlHandler.CreateObject(typeof(TextBlock)) as TextBlock;
     241                        tb = ControlHandler.CreateObject(typeof(SelectableTextBlock)) as SelectableTextBlock;
    261242                    }
    262243                    ControlHandler.SetPropertyValue(tb, "TextWrapping", TextWrapping.Wrap);
     
    267248                    ControlHandler.SetPropertyValue(tb, "HorizontalAlignment", HorizontalAlignment.Left);
    268249                    //ControlHandler.SetPropertyValue(tb, "IsReadOnly", true);
    269                     tb.Padding = new Thickness(10, 5, 10, 5);
    270 
    271                     if (!string.IsNullOrEmpty(message.Trim()))
    272                     {
    273                         //tb.MouseLeftButtonDown += new MouseButtonEventHandler(tb_MouseLeftButtonDown);
    274                         tb.MouseMove += new MouseEventHandler(tb_MouseMove);
    275                         tb.MouseLeave += new MouseEventHandler(tb_MouseLeave);
    276                     }
     250                    tb.Padding = new Thickness(10, 1, 10, 1);
     251
    277252                    Grid.SetColumn(tb, column);
    278253                    Grid.SetRow(tb, row);
     
    287262                        if (m_ShowCounter)
    288263                        {
    289                             TextBlock tb1 = ControlHandler.CreateObject(typeof(TextBlock)) as TextBlock;
     264                            var tb1 = ControlHandler.CreateObject(typeof(SelectableTextBlock)) as SelectableTextBlock;
    290265                            ControlHandler.SetPropertyValue(tb1, "TextWrapping", TextWrapping.Wrap);
    291266                            ControlHandler.SetPropertyValue(tb1, "Text", counter.ToString() + ". ");
     
    331306        }
    332307
    333         void tb_MouseLeave(object sender, MouseEventArgs e)
    334         {
    335             if (m_TextStyle != null)
    336             {
    337                 MarkRow(sender as TextBlock, m_TextStyle.Background, m_TextStyle.Foreground);
    338             }
    339             else
    340             {
    341                 MarkRow(sender as TextBlock, Brushes.White, Brushes.Black);
    342             }
    343         }
    344 
    345         private void MarkRow(TextBlock sender, Brush background, Brush foreground)
    346         {
    347             if (!gridMessages.ContextMenu.IsOpen)
    348             {
    349                 foreach (TextBlock tb in m_Selected)
    350                 {
    351                     if (m_TextStyle != null)
    352                     {
    353                         DoMarkRow(tb, m_TextStyle.Background, m_TextStyle.Foreground);
    354                     }
    355                     else
    356                     {
    357                         DoMarkRow(tb, Brushes.White, Brushes.Black);
    358                     }
    359                 }
    360                 m_Selected.Clear();
    361                 m_Selected = DoMarkRow(sender, background, foreground);
    362             }
    363         }
    364 
    365         private IList<TextBlock> DoMarkRow(TextBlock sender, Brush background, Brush foreground)
    366         {
    367             IList<TextBlock> result = new List<TextBlock>();
    368 
    369             if (!gridMessages.ContextMenu.IsOpen)
    370             {
    371                 int index = gridMessages.Children.IndexOf(sender);
    372                 int row = Grid.GetRow(sender as UIElement);
    373                 if (index >= 0 && row >= 0)
    374                 {
    375                     int start = Math.Max(index - m_Columns, 0);
    376                     int end = Math.Min(index + m_Columns, gridMessages.Children.Count - 1);
    377                     for (int i = start; i <= end; i++)
    378                     {
    379                         if (gridMessages.Children[i].GetType() == typeof(TextBlock))
    380                         {
    381                             TextBlock tb = gridMessages.Children[i] as TextBlock;
    382                             if (Grid.GetRow(tb) == row)
    383                             {
    384                                 tb.Background = background;
    385                                 tb.Foreground = foreground;
    386                                 result.Add(tb);
    387                             }
    388                         }
    389                     }
    390                 }
    391             }
    392 
    393             return result;
    394         }
    395 
    396         void tb_MouseMove(object sender, MouseEventArgs e)
    397         {
    398             TextStyle textstyle = new TextStyle((sender as TextBlock).Foreground, (sender as TextBlock).Background);
    399             if (textstyle.Equals(TextStyle.InfoStyle) || textstyle.Equals(TextStyle.ErrorStyle))
    400                 m_TextStyle = textstyle;
    401             MarkRow(sender as TextBlock, Brushes.Blue, Brushes.WhiteSmoke);
    402             if (sender != null)
    403             {
    404                 int row = Grid.GetRow(sender as UIElement);
    405                 FireRowMouseOverEvent(row);
    406             }
    407         }
    408 
    409         #region Handles KeysDown and MouseClicks
    410 
    411         private void RemoveEdit()
    412         {
    413             if (m_Edit != null)
    414             {
    415                 int row = Grid.GetRow(m_Edit);
    416                 int col = Grid.GetColumn(m_Edit);
    417                 gridMessages.Children.Remove(m_Edit);
    418                 Grid.SetRow(m_TextBlock, row);
    419                 Grid.SetColumn(m_TextBlock, col);
    420                 gridMessages.Children.Insert((int)m_TextBlock.Tag, m_TextBlock);
    421                 m_Edit = null;
    422             }
    423         }
    424 
    425         void tb_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    426         {
    427             if (sender != null && sender.GetType() == typeof(TextBlock))
    428             {
    429                 RemoveEdit();
    430                 m_TextBlock = sender as TextBlock;
    431                 int row = Grid.GetRow(m_TextBlock);
    432                 int col = Grid.GetColumn(m_TextBlock);
    433                 m_Edit = new TextBox();
    434                 m_Edit.MouseLeave += new MouseEventHandler(m_Edit_MouseLeave);
    435                 m_Edit.KeyDown += new KeyEventHandler(m_Edit_KeyDown);
    436                 m_Edit.KeyUp += new KeyEventHandler(m_Edit_KeyDown);
    437 
    438                 m_Edit.Text = m_TextBlock.Text;
    439                 m_TextBlock.Tag = gridMessages.Children.IndexOf(m_TextBlock);
    440                 gridMessages.Children.Remove(m_TextBlock);
    441                 Grid.SetColumn(m_Edit, col);
    442                 Grid.SetRow(m_Edit, row);
    443                 gridMessages.Children.Add(m_Edit);
    444                 m_Edit.SelectAll();
    445             }
    446         }
    447 
    448         void m_Edit_KeyDown(object sender, KeyEventArgs e)
    449         {
    450             e.Handled = true;
    451             if (e.Key == Key.Escape)
    452             {
    453                 MarkRow(m_TextBlock, m_TextStyle.Background, m_TextStyle.Foreground);
    454                 RemoveEdit();
    455             }
    456         }
    457 
    458         void m_Edit_MouseLeave(object sender, MouseEventArgs e)
    459         {
    460             RemoveEdit();
    461             MarkRow(m_TextBlock, m_TextStyle.Background, m_TextStyle.Foreground);
    462         }
    463 
    464         #endregion
    465 
    466308        public void Clear()
    467309        {
     
    506348                {
    507349                    MenuItem mi = sender as MenuItem;
    508                     if (mi == miCopySelection)
    509                     {
    510                         StringBuilder result = new StringBuilder();
    511                         string[] msg = new string[m_Columns];
    512                         foreach (TextBlock tb in this.m_Selected)
    513                         {
    514                             int column = Grid.GetColumn(tb);
    515                             if (column > -1) msg[column] = tb.Text;
    516                             //result.Append(tb.Text);
    517                             //result.Append("\t");
    518                         }
    519                         foreach (string s in msg)
    520                         {
    521                             if (!string.IsNullOrEmpty(s))
    522                             {
    523                                 result.Append(s);
    524                                 result.Append("\t");
    525                             }
    526                         }
    527                         Clipboard.SetText(result.ToString(), TextDataFormat.Text);
    528                     }
    529                     else if (mi == miCopyAll)
     350                    if (mi == miCopyAll)
    530351                    {
    531352                        int row = -1;
     
    541362                        foreach (UIElement element in gridMessages.Children)
    542363                        {
    543                             if (element.GetType() == typeof(TextBlock))
     364                            if (element.GetType() == typeof(SelectableTextBlock))
    544365                            {
    545366                                if (row != Grid.GetRow(element))
     
    553374                                int column = Grid.GetColumn(element);
    554375                                if (column > -1 && column < msg.Length)
    555                                     msg[column] = (element as TextBlock)?.Text;
     376                                    msg[column] = (element as SelectableTextBlock)?.Text;
    556377                            }
    557378                        }
     
    562383                }
    563384                gridMessages.ContextMenu.IsOpen = false;
    564                 if (m_Selected.Count > 0 && m_TextStyle != null)
    565                 {
    566                     RemoveEdit();
    567                     MarkRow(m_Selected[0], m_TextStyle.Background, m_TextStyle.Foreground);
    568                 }
    569385            }
    570386            catch (Exception ex)
Note: See TracChangeset for help on using the changeset viewer.