private void UpdateItem(int index)
        {
            VariableItem variable = Variables[index];

            Bitmap bmp  = null;
            string type = null;

            if (variable.Name != null && variable.Name != "")
            {
                var expression = m_debugger.GetExpression(variable.Name);
                if (expression.IsValidValue)
                {
                    // create bitmap
                    bmp = new Bitmap(100, 100);

                    Graphics graphics = Graphics.FromImage(bmp);
                    graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                    graphics.Clear(m_colors.ClearColor);

                    if (!ExpressionDrawer.Draw(graphics, m_debugger, variable.Name, m_colors))
                    {
                        bmp = null;
                    }

                    type = expression.Type;
                }
            }

            // set new row
            ResetAt(new VariableItem(variable.Name, bmp, type), index);
        }
Beispiel #2
0
        // https://softwaremechanik.wordpress.com/2013/10/02/how-to-make-all-wpf-datagrid-cells-have-a-single-click-to-edit/
        public static void DataGridSingleClickHack(DependencyObject originalSource)
        {
            // If the user clicked the TextBlock
            // use single click edit only for the last, empty row
            if (originalSource is TextBlock)
            {
                if (!(originalSource is FrameworkElement))
                {
                    return;
                }
                object item = (originalSource as FrameworkElement).DataContext;
                if (!(item is VariableItem))
                {
                    return;
                }
                VariableItem variable = item as VariableItem;
                if (variable.Name != null && variable.Name != "")
                {
                    return;
                }
            }

            // Find corresponding cell and row
            DataGridCell cell = null;
            DataGridRow  row  = null;

            {
                DependencyObject parent = originalSource;
                while (parent != null)
                {
                    if (parent is DataGridCell)
                    {
                        cell = parent as DataGridCell;
                    }
                    else if (parent is DataGridRow)
                    {
                        row = parent as DataGridRow;
                        break;
                    }
                    parent = VisualTreeHelper.GetParent(parent);
                }
            }

            // Do magic stuff
            if (cell != null && !cell.IsEditing && !cell.IsReadOnly)
            {
                if (!cell.IsFocused)
                {
                    cell.Focus();
                }

                // NOTE: assuming SelectionUnit == FullRow
                if (row != null && !row.IsSelected)
                {
                    row.IsSelected = true;
                }
            }
        }
 private void ResetAt(VariableItem item, int index)
 {
     ((System.ComponentModel.INotifyPropertyChanged)item).PropertyChanged += VariableItem_NameChanged;
     if (index < Variables.Count)
     {
         Variables.RemoveAt(index);
     }
     Variables.Insert(index, item);
 }
        private void DebuggerEvents_OnEnterBreakMode(dbgEventReason Reason, ref dbgExecutionAction ExecutionAction)
        {
            if (m_debugger.CurrentMode == dbgDebugMode.dbgBreakMode)
            {
                for (int index = 0 ; index < listView.Items.Count; ++index)
                {
                    VariableItem variable = (VariableItem)listView.Items[index];

                    Bitmap bmp = null;
                    string type = null;

                    if ( variable.Name != null && variable.Name != "" )
                    {
                        var expression = m_debugger.GetExpression(variable.Name);
                        if (expression.IsValidValue)
                        {
                            // create bitmap
                            bmp = new Bitmap(100, 100);

                            Graphics graphics = Graphics.FromImage(bmp);
                            graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                            graphics.Clear(System.Drawing.Color.White);

                            if (!ExpressionDrawer.Draw(graphics, m_debugger, variable.Name))
                                bmp = null;

                            type = expression.Type;
                        }
                    }

                    // set new row
                    VariableItem new_variable = new VariableItem(variable.Name, bmp, type);
                    ((System.ComponentModel.INotifyPropertyChanged)new_variable).PropertyChanged += VariableItem_NameChanged;
                    listView.Items.RemoveAt(index);
                    listView.Items.Insert(index, new_variable);
                }
            }
        }
        private void VariableItem_NameChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            //e.PropertyName == "Name"

            VariableItem variable = (VariableItem)sender;
            int          index    = Variables.IndexOf(variable);

            if (index < 0 || index >= dataGrid.Items.Count)
            {
                return;
            }

            if (variable.Name == null || variable.Name == "")
            {
                if (index < dataGrid.Items.Count - 1)
                {
                    Variables.RemoveAt(index);
                }
            }
            else
            {
                UpdateItem(index);

                // insert new empty row
                int next_index = index + 1;
                if (next_index == Variables.Count)
                {
                    ResetAt(new VariableItem(), Variables.Count);
                    SelectAt(index + 1, true);
                }
                else
                {
                    SelectAt(index + 1);
                }
            }
        }
 private void listView_Initialized(object sender, System.EventArgs e)
 {
     VariableItem var = new VariableItem();
     ((System.ComponentModel.INotifyPropertyChanged)var).PropertyChanged += VariableItem_NameChanged;
     listView.Items.Add(var);
 }
        private void VariableItem_NameChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            //e.PropertyName == "Name"

            VariableItem variable = (VariableItem)sender;
            int index = listView.Items.IndexOf(variable);

            if (variable.Name == null || variable.Name == "")
            {
                listView.Items.RemoveAt(index);
                return;
            }

            // insert new empty row
            if (index + 1 == listView.Items.Count)
            {
                VariableItem empty_variable = new VariableItem();
                ((System.ComponentModel.INotifyPropertyChanged)empty_variable).PropertyChanged += VariableItem_NameChanged;
                listView.Items.Add(empty_variable);
            }

            Bitmap bmp = null;
            string type = null;

            // debugging
            if (m_debugger.CurrentMode == dbgDebugMode.dbgBreakMode)
            {
                var expression = m_debugger.GetExpression(variable.Name);
                if (expression.IsValidValue)
                {
                    // create bitmap
                    bmp = new Bitmap(100, 100);
                    Graphics graphics = Graphics.FromImage(bmp);
                    graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                    graphics.Clear(System.Drawing.Color.White);

                    if (!ExpressionDrawer.Draw(graphics, m_debugger, variable.Name))
                        bmp = null;

                    type = expression.Type;
                }
            }

            // set new row
            VariableItem new_variable = new VariableItem(variable.Name, bmp, type);
            ((System.ComponentModel.INotifyPropertyChanged)new_variable).PropertyChanged += VariableItem_NameChanged;
            listView.Items.RemoveAt(index);
            listView.Items.Insert(index, new_variable);
        }
 private void ResetAt(VariableItem item, int index)
 {
     ((System.ComponentModel.INotifyPropertyChanged)item).PropertyChanged += VariableItem_NameChanged;
     if (index < Variables.Count)
         Variables.RemoveAt(index);
     Variables.Insert(index, item);
 }