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); }
// 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); }