private void Control_PreviewKeyDown(object sender, sw.Input.KeyEventArgs e) { if (e.Handled || swi.Keyboard.Modifiers != swi.ModifierKeys.None) { return; } // handle expanding/collapsing via the keyboard if (e.Key == swi.Key.Right) { var currentCell = Control.CurrentCell; if (currentCell.Column != null && Control.Columns.IndexOf(currentCell.Column) == 0 && currentCell.Item is ITreeGridItem item && item.Expandable && !item.Expanded) { var index = controller.IndexOf(item); if (index >= 0) { controller.ExpandRow(index); e.Handled = true; } } } else if (e.Key == swi.Key.Left) { var currentCell = Control.CurrentCell; if (currentCell.Column != null && Control.Columns.IndexOf(currentCell.Column) == 0 && currentCell.Item is ITreeGridItem item) { if (!item.Expandable || !item.Expanded) { // select parent if not the top node item = item.Parent; if (item != null && !ReferenceEquals(item, DataStore)) { Control.CurrentCell = new swc.DataGridCellInfo(item, currentCell.Column); SelectedItem = item; e.Handled = true; } } else { var index = controller.IndexOf(item); if (index >= 0) { controller.CollapseRow(index); e.Handled = true; } } } } }
public override bool CellMouseClick(GridColumnHandler column, swf.MouseEventArgs e, int rowIndex) { if (rowIndex >= 0 && object.ReferenceEquals(column.Widget, this.Widget.Columns[0])) { var offset = INDENT_WIDTH + controller.LevelAtRow(rowIndex) * INDENT_WIDTH; if (e.X < offset && e.X >= offset - INDENT_WIDTH) { if (controller.IsExpanded(rowIndex)) { controller.CollapseRow(rowIndex); } else { controller.ExpandRow(rowIndex); } return(true); } } return(false); }