/// <summary> /// Processes the selection when the mouse point is double tapped on the particular cell in SfTreeGrid. /// </summary> /// <param name="currentRowColumnIndex"> /// The corresponding rowColumnIndex of the mouse point. /// </param> /// <remarks> /// This method invoked to process selection and begin edit the cell when <see cref="Syncfusion.UI.Xaml.Grid.EditTrigger"/> is <see cref="Syncfusion.UI.Xaml.Grid.EditTrigger.OnDoubleTap"/>. /// </remarks> protected override void ProcessOnDoubleTapped(RowColumnIndex currentRowColumnIndex) { if (IsSuspended || this.TreeGrid.SelectionMode == GridSelectionMode.None || this.CurrentCellManager.CurrentRowColumnIndex != currentRowColumnIndex || this.TreeGrid.NavigationMode == NavigationMode.Row) { return; } if (this.TreeGrid.EditTrigger == EditTrigger.OnDoubleTap) { if (this.TreeGrid.SelectionMode != GridSelectionMode.Single) { if (!SelectedRows.Any(r => r.RowIndex == currentRowColumnIndex.RowIndex)) { var rowInfo = GetTreeGridSelectedRow(currentRowColumnIndex.RowIndex); this.AddSelection(new List <object>() { rowInfo }); if (TreeGrid.EnableRecursiveChecking) { SelectRowsOnRecursiveCheck(rowInfo.Node, needToRemoveItems: false); } } } CurrentCellManager.ProcessOnDoubleTapped(); } }
/// <summary> /// Update selection and current cell based on added items and removed items. /// </summary> /// <param name="addedItems">items to be seletced.</param> /// <param name="removedItems">items to be removed from selected items.</param> /// <param name="currentRowIndex">row index which needs to be set as current cell.</param> /// <param name="needToResetCurrentCell">indicates whether need to reset current cell</param> internal void UpdateSelection(List <object> addedItems, List <object> removedItems, int currentRowIndex = -1, bool needToResetCurrentCell = true) { if (removedItems.Count > 0) { bool needToSetCurrentCell = false; var needToRemoveCurrentCell = false; foreach (var row in removedItems) { if ((row as TreeGridRowInfo).RowIndex == CurrentCellManager.CurrentRowColumnIndex.RowIndex) { needToRemoveCurrentCell = true; break; } } if (TreeGrid.NavigationMode == NavigationMode.Cell && needToRemoveCurrentCell) { CurrentCellManager.RemoveCurrentCell(CurrentCellManager.CurrentRowColumnIndex); if (addedItems.Count == 0) { if (SelectedRows.Count > removedItems.Count) { needToSetCurrentCell = true; } } } this.RemoveSelection(removedItems, needToSetCurrentCell); } AddSelection(addedItems); if (needToResetCurrentCell) { if (addedItems.Count > 0) { this.CurrentCellManager.RemoveCurrentCell(this.CurrentCellManager.CurrentRowColumnIndex); int columnIndex = this.CurrentCellManager.CurrentRowColumnIndex.ColumnIndex < this.CurrentCellManager.GetFirstCellIndex() ? this.CurrentCellManager.GetFirstCellIndex() : this.CurrentCellManager.CurrentRowColumnIndex.ColumnIndex; if (currentRowIndex == -1) { this.CurrentCellManager.SelectCurrentCell(new RowColumnIndex(((TreeGridRowInfo)addedItems.LastOrDefault()).RowIndex, columnIndex), false); } else { this.CurrentCellManager.SelectCurrentCell(new RowColumnIndex(currentRowIndex, columnIndex), false); } } else { if (!SelectedRows.Any()) { this.CurrentCellManager.RemoveCurrentCell(this.CurrentCellManager.CurrentRowColumnIndex); this.CurrentCellManager.UpdateGridProperties(new RowColumnIndex(-1, -1)); } } } this.RefreshSelectedIndexAndItem(); }
internal void SetCurrentCellAndCurrentRowColumnIndex(RowColumnIndex rowColumnIndex, RowColumnIndex previousCurrentRowColumnIndex) { if (TreeGrid.NavigationMode == NavigationMode.Cell) { var currentColumnIndex = previousCurrentRowColumnIndex.ColumnIndex < CurrentCellManager.GetFirstCellIndex() ? CurrentCellManager.GetFirstCellIndex() : previousCurrentRowColumnIndex.ColumnIndex; rowColumnIndex.ColumnIndex = currentColumnIndex; CurrentCellManager.UpdateCurrentCell(rowColumnIndex, previousCurrentRowColumnIndex, ActivationTrigger.Program); } else { CurrentCellManager.UpdateGridProperties(rowColumnIndex); } }
internal void UpdateCurrentRowColumnIndexOnNodeExpandAndCollapse() { if (!SelectedRows.Any(r => r.RowIndex != -1) || this.CurrentCellManager.CurrentRowColumnIndex.RowIndex != -1) { return; } var columnIndex = this.CurrentCellManager.CurrentRowColumnIndex.ColumnIndex < CurrentCellManager.GetFirstCellIndex() ? CurrentCellManager.GetFirstCellIndex() : this.CurrentCellManager.CurrentRowColumnIndex.ColumnIndex; var currentRowColumnIndex = new RowColumnIndex(SelectedRows.LastOrDefault(r => r.RowIndex != -1).RowIndex, columnIndex); SetCurrentCellAndCurrentRowColumnIndex(currentRowColumnIndex, CurrentCellManager.CurrentRowColumnIndex); }
/// <summary> /// Process the selection while changing IsChecked state of the particular tree node. /// </summary> /// <param name="treeNode">treeNode - its IsChecked state is changed.</param> internal override void ProcessSelectionOnCheckedStateChange(TreeNode treeNode) { if (TreeGrid.SelectionMode == GridSelectionMode.None) { return; } var addedItems = new List <object>(); var removedItems = new List <object>(); var isChecked = treeNode.IsChecked; var rowIndex = TreeGrid.ResolveToRowIndex(treeNode); var currentRowColumnIndex = CurrentCellManager.CurrentRowColumnIndex; var rowColumnIndex = new RowColumnIndex(rowIndex, CurrentCellManager.CurrentRowColumnIndex.ColumnIndex); if (TreeGrid.SelectionMode == GridSelectionMode.Single) { if (isChecked == true) { if (SelectedRows.Any()) { removedItems.Add(SelectedRows[0]); } addedItems.Add(GetTreeGridSelectedRow(rowIndex)); if (RaiseSelectionChanging(addedItems, removedItems)) { return; } SetCurrentCellAndCurrentRowColumnIndex(rowColumnIndex, currentRowColumnIndex); RemoveSelection(removedItems); if (removedItems.Any()) { UpdateCheckedStateForSelectionRemovedRow(removedItems[0] as TreeGridRowInfo); } AddSelection(addedItems); RaiseSelectionChanged(addedItems, removedItems); } else { if (!SelectedRows.Any()) { return; } if (SelectedRows[0].RowIndex != rowIndex) { return; } removedItems.Add(SelectedRows[0]); if (RaiseSelectionChanging(addedItems, removedItems)) { return; } if (TreeGrid.NavigationMode == NavigationMode.Cell) { CurrentCellManager.RemoveCurrentCell(currentRowColumnIndex); } CurrentCellManager.ResetCurrentRowColumnIndex(); RemoveSelection(removedItems); UpdateCheckedStateForSelectionRemovedRow(removedItems[0] as TreeGridRowInfo); this.SuspendUpdates(); RefreshSelectedIndexAndItem(); this.ResumeUpdates(); RaiseSelectionChanged(addedItems, removedItems); } } // Multiple and Extended Cases else { if (TreeGrid.EnableRecursiveChecking) { SelectRowsOnRecursiveCheck(treeNode, rowIndex); return; } if (isChecked == true) { addedItems.Add(GetTreeGridSelectedRow(rowIndex)); if (RaiseSelectionChanging(addedItems, removedItems)) { return; } SetCurrentCellAndCurrentRowColumnIndex(rowColumnIndex, currentRowColumnIndex); AddSelection(addedItems); RaiseSelectionChanged(addedItems, removedItems); } else { if (!SelectedRows.Any()) { return; } var selectedRow = SelectedRows.FirstOrDefault(r => r.RowIndex == rowIndex); if (selectedRow == null) { return; } removedItems.Add(selectedRow); if (RaiseSelectionChanging(addedItems, removedItems)) { return; } var needToSetCurrentCell = false; if (TreeGrid.NavigationMode == NavigationMode.Cell && selectedRow.RowIndex == currentRowColumnIndex.RowIndex) { CurrentCellManager.RemoveCurrentCell(currentRowColumnIndex); needToSetCurrentCell = (SelectedRows.Count > 1); } RemoveSelection(removedItems, needToSetCurrentCell); if (!SelectedRows.Any() || TreeGrid.NavigationMode == NavigationMode.Row) { CurrentCellManager.ResetCurrentRowColumnIndex(); } UpdateCheckedStateForSelectionRemovedRow(removedItems[0] as TreeGridRowInfo); this.SuspendUpdates(); RefreshSelectedIndexAndItem(); this.ResumeUpdates(); RaiseSelectionChanged(addedItems, removedItems); } } }