@Override public void execute(final jetbrains.mps.openapi.editor.EditorContext context) { EditorComponent editorComponent = ((EditorComponent) context.getEditorComponent()); SelectionManager selectionManager = editorComponent.getSelectionManager(); Selection selection = selectionManager.getSelection(); if (selection instanceof SingularSelection) { EditorCell selectedCell = ((SingularSelection) selection).getEditorCell(); SNode selectedNode = selectedCell.getSNode(); SNode topMostNodeInSingularContainment = findTopMostNodeWithSingularContainment(selectedNode); if (topMostNodeInSingularContainment != selectedNode) { EditorCell nodeCell = editorComponent.findNodeCell(topMostNodeInSingularContainment); if (nodeCell != null) { editorComponent.pushSelection(nodeCell); editorComponent.scrollToCell(nodeCell); } } else { Selection newSelection = selectionManager.createRangeSelection(selectedNode, selectedNode); if (newSelection instanceof NodeRangeSelection && selectedCell.isBigCell()) { newSelection = ((NodeRangeSelection) newSelection).enlargeSelection(myUp); } if (newSelection != null) { selectionManager.pushSelection(newSelection); newSelection.ensureVisible(); } } } else if (selection instanceof NodeRangeSelection) { Selection newSelection = ((NodeRangeSelection) selection).enlargeSelection(myUp); if (newSelection != null) { selectionManager.pushSelection(newSelection); newSelection.ensureVisible(); } } }
private EditorCell findTarget(SelectionManager selectionManager) { Selection selection = selectionManager.getSelection(); if (selection == null) { return null; } jetbrains.mps.openapi.editor.cells.EditorCell cell = selection.getSelectedCells().get(0); if (cell instanceof EditorCell_Label && !((EditorCell_Label) cell).isEverythingSelected()) { return (EditorCell) cell; } if (cell.getParent() == null) { return null; } while (cell.getParent() != null && cell.getParent().isTransparentCollection()) { cell = cell.getParent(); } jetbrains.mps.openapi.editor.cells.EditorCell_Collection parent = cell.getParent(); while (parent != null) { if (parent.isSelectable()) { while (parent.getParent() != null && parent.getParent().isTransparentCollection() && parent.getParent().isSelectable()) { parent = parent.getParent(); } return (EditorCell) parent; } parent = parent.getParent(); } return null; }
private EditorCell findTarget(EditorComponent editorComponent) { Selection selection = editorComponent.getSelectionManager().getSelection(); if (selection == null) { return null; } List<EditorCell> selectedCells = selection.getSelectedCells(); EditorCell cell = selectedCells.get(selectedCells.size() - 1); return cell.getEndCell(CellConditions.SELECTABLE); }
private EditorCell findTarget(SelectionManager selectionManager) { Selection selection = selectionManager.getSelection(); if (selection == null) { return null; } EditorCell cell = selection.getSelectedCells().get(0); while (cell.getParent() != null) { cell = (EditorCell) cell.getParent(); } if (cell instanceof EditorCell_Collection) { return cell.findChild( myHome ? CellFinders.FIRST_SELECTABLE_LEAF : CellFinders.LAST_SELECTABLE_LEAF); } return cell; }
@Override public boolean isSame(Selection another) { if (this == another) { return true; } if (another == null || getClass() != another.getClass()) { return false; } EditorCellLabelSelection that = (EditorCellLabelSelection) another; if (!getEditorCell().equals(that.getEditorCell())) { return false; } if (getCaretX() != that.getCaretX()) { return false; } if (hasNonTrivialSelection() != that.hasNonTrivialSelection()) { return false; } if (hasNonTrivialSelection()) { if (getSelectionEnd() != that.getSelectionEnd()) { return false; } if (getSelectionStart() != that.getSelectionStart()) { return false; } } return true; }
private EditorCell findTarget(SelectionManager selectionManager) { Selection selection = selectionManager.getSelection(); if (selection == null) { return null; } List<EditorCell> selectedCells = selection.getSelectedCells(); EditorCell cell = myHome ? selectedCells.get(0) : selectedCells.get(selectedCells.size() - 1); EditorCell leaf = myHome ? cell.getLeafToLeft(CellConditions.SELECTABLE) : cell.getLeafToRight(CellConditions.SELECTABLE); if (leaf != null) { return leaf; } return myHome ? cell.getPrevLeaf(CellConditions.SELECTABLE) : cell.getNextLeaf(CellConditions.SELECTABLE); }