private void disconnect() { Assert.isNotNull(fCurrentTarget); ITextViewer viewer= fCurrentTarget.getViewer(); Assert.isNotNull(viewer); viewer.getDocument().removeDocumentListener(fDocumentListener); fAssistant.uninstall(); fAssistant.removeProposalListener(fProposalListener); fCurrentTarget.fWidget= null; Shell shell= fCurrentTarget.fShell; fCurrentTarget.fShell= null; if (shell != null && !shell.isDisposed()) shell.removeShellListener(fCloser); // this one is asymmetric: we don't install the model in // connect, but leave it to its callers to ensure they // have the model installed if they need it uninstallAnnotationModel(fCurrentTarget); unregisterAutoEditVetoer(viewer); // don't remove the verify key listener to let it keep its position // in the listener queue if (fCurrentTarget.fKeyListener != null) fCurrentTarget.fKeyListener.setEnabled(false); ((IPostSelectionProvider) viewer).removePostSelectionChangedListener(fSelectionListener); redraw(); }
private void connect() { Assert.isNotNull(fCurrentTarget); ITextViewer viewer= fCurrentTarget.getViewer(); Assert.isNotNull(viewer); fCurrentTarget.fWidget= viewer.getTextWidget(); if (fCurrentTarget.fWidget == null) leave(ILinkedModeListener.EXIT_ALL); if (fCurrentTarget.fKeyListener == null) { fCurrentTarget.fKeyListener= new KeyListener(); ((ITextViewerExtension) viewer).prependVerifyKeyListener(fCurrentTarget.fKeyListener); } else fCurrentTarget.fKeyListener.setEnabled(true); registerAutoEditVetoer(viewer); ((IPostSelectionProvider) viewer).addPostSelectionChangedListener(fSelectionListener); createAnnotationModel(); showSelection(); fCurrentTarget.fShell= fCurrentTarget.fWidget.getShell(); if (fCurrentTarget.fShell == null) leave(ILinkedModeListener.EXIT_ALL); fCurrentTarget.fShell.addShellListener(fCloser); fAssistant.install(viewer); viewer.addTextInputListener(fCloser); viewer.getDocument().addDocumentListener(fDocumentListener); }
private void switchViewer(IDocument oldDoc, IDocument newDoc, LinkedPosition pos) { if (oldDoc != newDoc) { // redraw current document with new position before switching viewer if (fCurrentTarget.fAnnotationModel != null) fCurrentTarget.fAnnotationModel.switchToPosition(fModel, pos); LinkedModeUITarget target= null; for (int i= 0; i < fTargets.length; i++) { if (fTargets[i].getViewer().getDocument() == newDoc) { target= fTargets[i]; break; } } if (target != fCurrentTarget) { disconnect(); fCurrentTarget= target; target.linkingFocusLost(fFramePosition, target); connect(); ensureAnnotationModelInstalled(); if (fCurrentTarget != null) fCurrentTarget.linkingFocusGained(pos, fCurrentTarget); } } }
@Override 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 (IEditingSupport helper : helpers) { if (helper.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(); }
@Override 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(); }
private void switchViewer(IDocument oldDoc, IDocument newDoc, LinkedPosition pos) { if (oldDoc != newDoc) { // redraw current document with new position before switching viewer if (fCurrentTarget.fAnnotationModel != null) fCurrentTarget.fAnnotationModel.switchToPosition(fModel, pos); LinkedModeUITarget target= null; for (LinkedModeUITarget fTarget : fTargets) { if (fTarget.getViewer().getDocument() == newDoc) { target= fTarget; break; } } if (target != fCurrentTarget) { disconnect(); fCurrentTarget= target; target.linkingFocusLost(fFramePosition, target); connect(); ensureAnnotationModelInstalled(); if (fCurrentTarget != null) fCurrentTarget.linkingFocusGained(pos, fCurrentTarget); } } }
private void ensureAnnotationModelInstalled() { LinkedPositionAnnotations lpa= fCurrentTarget.fAnnotationModel; if (lpa != null) { ITextViewer viewer= fCurrentTarget.getViewer(); if (viewer instanceof ISourceViewer) { ISourceViewer sv= (ISourceViewer) viewer; IAnnotationModel model= sv.getAnnotationModel(); if (model instanceof IAnnotationModelExtension) { IAnnotationModelExtension ext= (IAnnotationModelExtension) model; IAnnotationModel ourModel= ext.getAnnotationModel(getUniqueKey()); if (ourModel == null) { ext.addAnnotationModel(getUniqueKey(), lpa); } } } } }
private void ensureAnnotationModelInstalled() { LinkedPositionAnnotations lpa= fCurrentTarget.fAnnotationModel; if (lpa != null) { ITextViewer viewer= fCurrentTarget.getViewer(); if (viewer instanceof ISourceViewer) { ISourceViewer sv= (ISourceViewer) viewer; IAnnotationModel model= sv.getAnnotationModel(); if (model instanceof IAnnotationModelExtension) { IAnnotationModelExtension ext= (IAnnotationModelExtension) model; IAnnotationModel ourModel= ext.getAnnotationModel(getUniqueKey()); if (ourModel == null) { ext.addAnnotationModel(getUniqueKey(), lpa); } } } } }
private void createAnnotationModel() { if (fCurrentTarget.fAnnotationModel == null) { LinkedPositionAnnotations lpa= new LinkedPositionAnnotations(); if (fSimple) { lpa.markExitTarget(true); lpa.markFocus(false); lpa.markSlaves(false); lpa.markTargets(false); } lpa.setTargets(fIterator.getPositions()); lpa.setExitTarget(fExitPosition); lpa.connect(fCurrentTarget.getViewer().getDocument()); fCurrentTarget.fAnnotationModel= lpa; } }
private void createAnnotationModel() { if (fCurrentTarget.fAnnotationModel == null) { LinkedPositionAnnotations lpa= new LinkedPositionAnnotations(); if (fSimple) { lpa.markExitTarget(true); lpa.markFocus(false); lpa.markSlaves(false); lpa.markTargets(false); } lpa.setTargets(fIterator.getPositions()); lpa.setExitTarget(fExitPosition); lpa.connect(fCurrentTarget.getViewer().getDocument()); fCurrentTarget.fAnnotationModel= lpa; } }
private void beginCompoundChangeIfNeeded() { if (!fHasOpenCompoundChange) { ITextViewerExtension extension= (ITextViewerExtension) fCurrentTarget.getViewer(); IRewriteTarget target= extension.getRewriteTarget(); target.beginCompoundChange(); fHasOpenCompoundChange= true; } }
private void endCompoundChangeIfNeeded() { if (fHasOpenCompoundChange) { ITextViewerExtension extension= (ITextViewerExtension) fCurrentTarget.getViewer(); IRewriteTarget target= extension.getRewriteTarget(); target.endCompoundChange(); fHasOpenCompoundChange= false; } }
private void uninstallAnnotationModel(LinkedModeUITarget target) { ITextViewer viewer= target.getViewer(); if (viewer instanceof ISourceViewer) { ISourceViewer sv= (ISourceViewer) viewer; IAnnotationModel model= sv.getAnnotationModel(); if (model instanceof IAnnotationModelExtension) { IAnnotationModelExtension ext= (IAnnotationModelExtension) model; ext.removeAnnotationModel(getUniqueKey()); } } }
private void select() { ITextViewer viewer= fCurrentTarget.getViewer(); if (viewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension5= (ITextViewerExtension5) viewer; extension5.exposeModelRange(new Region(fFramePosition.offset, fFramePosition.length)); } else if (!viewer.overlapsWithVisibleRegion(fFramePosition.offset, fFramePosition.length)) { viewer.resetVisibleRegion(); } viewer.revealRange(fFramePosition.offset, fFramePosition.length); viewer.setSelectedRange(fFramePosition.offset, fFramePosition.length); }
private boolean controlUndoBehavior(int offset, int length) { LinkedPosition position= fModel.findPosition(new LinkedPosition(fCurrentTarget.getViewer().getDocument(), offset, length, LinkedPositionGroup.NO_STOP)); if (position != null) { // if the last position is not the same and there is an open change: close it. if (!position.equals(fPreviousPosition)) endCompoundChangeIfNeeded(); beginCompoundChangeIfNeeded(); } fPreviousPosition= position; return fPreviousPosition != null; }
private void uninstallAnnotationModel(LinkedModeUITarget target) { ITextViewer viewer= target.getViewer(); if (viewer instanceof ISourceViewer) { ISourceViewer sv= (ISourceViewer) viewer; IAnnotationModel model= sv.getAnnotationModel(); if (model instanceof IAnnotationModelExtension) { IAnnotationModelExtension ext= (IAnnotationModelExtension) model; ext.removeAnnotationModel(getUniqueKey()); } } }
private void beginCompoundChangeIfNeeded() { if (!fHasOpenCompoundChange) { ITextViewerExtension extension= (ITextViewerExtension) fCurrentTarget.getViewer(); IRewriteTarget target= extension.getRewriteTarget(); target.beginCompoundChange(); fHasOpenCompoundChange= true; } }
private void endCompoundChangeIfNeeded() { if (fHasOpenCompoundChange) { ITextViewerExtension extension= (ITextViewerExtension) fCurrentTarget.getViewer(); IRewriteTarget target= extension.getRewriteTarget(); target.endCompoundChange(); fHasOpenCompoundChange= false; } }
private boolean controlUndoBehavior(int offset, int length) { LinkedPosition position= fModel.findPosition(new LinkedPosition(fCurrentTarget.getViewer().getDocument(), offset, length, LinkedPositionGroup.NO_STOP)); if (position != null) { // if the last position is not the same and there is an open change: close it. if (!position.equals(fPreviousPosition)) endCompoundChangeIfNeeded(); beginCompoundChangeIfNeeded(); } fPreviousPosition= position; return fPreviousPosition != null; }
private void select() { ITextViewer viewer= fCurrentTarget.getViewer(); if (viewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension5= (ITextViewerExtension5) viewer; extension5.exposeModelRange(new Region(fFramePosition.offset, fFramePosition.length)); } else if (!viewer.overlapsWithVisibleRegion(fFramePosition.offset, fFramePosition.length)) { viewer.resetVisibleRegion(); } viewer.revealRange(fFramePosition.offset, fFramePosition.length); viewer.setSelectedRange(fFramePosition.offset, fFramePosition.length); }