/** * PopUp gets closed and the focus goes back to the editor. Linked mode stays active and can be reenabled, i.e. by * putting the caret back into a linked editing position. */ public void linkedModeLeft() { if (linkedModeModel != null) { linkedModeModel.exit(ILinkedModeListener.NONE); } if (popup != null) { popup.close(); } if (editor != null) { ISourceViewer viewer = editor.getInternalSourceViewer(); if (viewer instanceof IEditingSupportRegistry) { IEditingSupportRegistry registry = (IEditingSupportRegistry) viewer; registry.unregister(focusEditingSupport); } } }
public void documentAboutToBeChanged(DocumentEvent event) { // default behavior: any document change outside a linked position // causes us to exit int end = event.getOffset() + event.getLength(); for (int offset = event.getOffset(); offset <= end; offset++) { if (!fModel.anyPositionContains(offset)) { ITextViewer viewer = fCurrentTarget.getViewer(); if (fFramePosition != null && viewer instanceof IEditingSupportRegistry) { IEditingSupport[] helpers = ((IEditingSupportRegistry) viewer).getRegisteredSupports(); for (int i = 0; i < helpers.length; i++) { if (helpers[i].isOriginator(null, new Region(fFramePosition.getOffset(), fFramePosition.getLength()))) return; } } leave(ILinkedModeListener.EXTERNAL_MODIFICATION); return; } } // Make sure that any document change is done inside a compound // change beginCompoundChangeIfNeeded(); }
public boolean start(IRenameElementContext renameElementContext, IProgressMonitor monitor) { if (renameElementContext == null) throw new IllegalArgumentException("RenameElementContext is null"); this.linkedPositionGroup = linkedPositionGroupCalculator.getLinkedPositionGroup(renameElementContext, monitor); if (linkedPositionGroup == null || linkedPositionGroup.isEmpty()) return false; this.editor = (XtextEditor) renameElementContext.getTriggeringEditor(); this.focusEditingSupport = new FocusEditingSupport(); ISourceViewer viewer = editor.getInternalSourceViewer(); IDocument document = viewer.getDocument(); originalSelection = viewer.getSelectedRange(); currentPosition = linkedPositionGroup.getPositions()[0]; originalName = getCurrentName(); try { linkedModeModel = new LinkedModeModel(); linkedModeModel.addGroup(linkedPositionGroup); linkedModeModel.forceInstall(); linkedModeModel.addLinkingListener(new EditorSynchronizer()); LinkedModeUI ui = new EditorLinkedModeUI(linkedModeModel, viewer); ui.setExitPolicy(new ExitPolicy(document)); if (currentPosition.includes(originalSelection.x)) ui.setExitPosition(viewer, originalSelection.x, 0, Integer.MAX_VALUE); ui.enter(); if (currentPosition.includes(originalSelection.x) && currentPosition.includes(originalSelection.x + originalSelection.y)) viewer.setSelectedRange(originalSelection.x, originalSelection.y); if (viewer instanceof IEditingSupportRegistry) { IEditingSupportRegistry registry = (IEditingSupportRegistry) viewer; registry.register(focusEditingSupport); } openPopup(); return true; } catch (BadLocationException e) { throw new WrappedException(e); } }
/** * Hides this popup. */ public void hide() { bufferString = ""; selectedProposal = null; fLastKeyPressed = '\0'; unregister(); if (fViewer instanceof IEditingSupportRegistry) { IEditingSupportRegistry registry = (IEditingSupportRegistry) fViewer; registry.unregister(fFocusHelper); } if (Helper.okToUse(fProposalShell)) { fContentAssistant.removeContentAssistListener(this, ContentAssistant.PROPOSAL_SELECTOR); // TISTUD-913: moved the 'fPopupCloser.uninstall();' to disposePopup() if (fAdditionalInfoController != null) { fAdditionalInfoController.disposeInformationControl(); } if (Helper.okToUse(fProposalTable)) { fProposalTable.removeAll(); fProposalTable.update(); } // TISTUD-1550: Call to dispose, instead of fProposalShell.setVisible(false); fProposalShell.setVisible(false); } }
private void linkedModeLeft() { fgActiveLinkedMode= null; if (fInfoPopup != null) { fInfoPopup.close(); } ISourceViewer viewer= fEditor.getViewer(); if (viewer instanceof IEditingSupportRegistry) { IEditingSupportRegistry registry= (IEditingSupportRegistry) viewer; registry.unregister(fFocusEditingSupport); } }
private void registerHelper(IEditingSupport helper, JavaEditor editor) { ISourceViewer viewer= editor.getViewer(); if (viewer instanceof IEditingSupportRegistry) { IEditingSupportRegistry registry= (IEditingSupportRegistry) viewer; registry.register(helper); } }
private void deregisterHelper(IEditingSupport helper, JavaEditor editor) { ISourceViewer viewer= editor.getViewer(); if (viewer instanceof IEditingSupportRegistry) { IEditingSupportRegistry registry= (IEditingSupportRegistry) viewer; registry.unregister(helper); } }
private void registerHelper(IEditingSupport helper) { ISourceViewer viewer= fEditor.getViewer(); if (viewer instanceof IEditingSupportRegistry) { IEditingSupportRegistry registry= (IEditingSupportRegistry) viewer; registry.register(helper); } }
private void deregisterHelper(IEditingSupport helper) { ISourceViewer viewer= fEditor.getViewer(); if (viewer instanceof IEditingSupportRegistry) { IEditingSupportRegistry registry= (IEditingSupportRegistry) viewer; registry.unregister(helper); } }
public void shellDeactivated(ShellEvent e) { // TODO re-enable after debugging // if (true) return; // from LinkedPositionUI: // don't deactivate on focus lost, since the proposal popups may // take focus // plus: it doesn't hurt if you can check with another window // without losing linked mode // since there is no intrusive popup sticking out. // need to check first what happens on reentering based on an open // action // Seems to be no problem // Better: // Check with content assistant and only leave if its not the // proposal shell that took the // focus away. StyledText text; final ITextViewer viewer; Display display; if (fCurrentTarget == null || (text = fCurrentTarget.fWidget) == null || text.isDisposed() || (display = text.getDisplay()) == null || display.isDisposed() || (viewer = fCurrentTarget.getViewer()) == null) { leave(ILinkedModeListener.EXIT_ALL); } else { // Post in UI thread since the assistant popup will only get the // focus after we lose it. display.asyncExec(new Runnable() { public void run() { if (fIsActive && viewer instanceof IEditingSupportRegistry) { IEditingSupport[] helpers = ((IEditingSupportRegistry) viewer).getRegisteredSupports(); for (int i = 0; i < helpers.length; i++) { if (helpers[i].ownsFocusShell()) return; } } // else leave(ILinkedModeListener.EXIT_ALL); } }); } }
public void start() { if (getActiveLinkedMode() != null) { // for safety; should already be handled in RenameJavaElementAction fgActiveLinkedMode.startFullDialog(); return; } ISourceViewer viewer = fEditor.getViewer(); IDocument document = viewer.getDocument(); ITypeScriptFile tsFile = fEditor.getTypeScriptFile(); tsFile.setDisableChanged(true); fOriginalSelection = viewer.getSelectedRange(); int offset = fOriginalSelection.x; try { fLinkedPositionGroup = new LinkedPositionGroup(); if (viewer instanceof ITextViewerExtension6) { IUndoManager undoManager = ((ITextViewerExtension6) viewer).getUndoManager(); if (undoManager instanceof IUndoManagerExtension) { IUndoManagerExtension undoManagerExtension = (IUndoManagerExtension) undoManager; IUndoContext undoContext = undoManagerExtension.getUndoContext(); IOperationHistory operationHistory = OperationHistoryFactory.getOperationHistory(); fStartingUndoOperation = operationHistory.getUndoOperation(undoContext); } } // Find occurrences List<OccurrencesResponseItem> occurrences = tsFile.occurrences(offset).get(1000, TimeUnit.MILLISECONDS); // Create Eclipse linked position from the occurrences list. int start, length; for (int i = 0; i < occurrences.size(); i++) { OccurrencesResponseItem item = occurrences.get(i); start = tsFile.getPosition(item.getStart()); length = tsFile.getPosition(item.getEnd()) - start; LinkedPosition linkedPosition = new LinkedPosition(document, start, length, i); if (i == 0) { fOriginalName = document.get(start, length); fNamePosition = linkedPosition; } fLinkedPositionGroup.addPosition(linkedPosition); } fLinkedModeModel = new LinkedModeModel(); fLinkedModeModel.addGroup(fLinkedPositionGroup); fLinkedModeModel.forceInstall(); fLinkedModeModel.addLinkingListener(new EditorHighlightingSynchronizer(fEditor)); fLinkedModeModel.addLinkingListener(new EditorSynchronizer()); LinkedModeUI ui = new EditorLinkedModeUI(fLinkedModeModel, viewer); ui.setExitPosition(viewer, offset, 0, Integer.MAX_VALUE); ui.setExitPolicy(new ExitPolicy(document)); ui.enter(); viewer.setSelectedRange(fOriginalSelection.x, fOriginalSelection.y); // by // default, // full // word // is // selected; // restore // original // selection if (viewer instanceof IEditingSupportRegistry) { IEditingSupportRegistry registry = (IEditingSupportRegistry) viewer; registry.register(fFocusEditingSupport); } openSecondaryPopup(); // startAnimation(); fgActiveLinkedMode = this; } catch (Exception e) { JSDTTypeScriptUIPlugin.log(e); } }