下面列出了怎么用org.eclipse.jface.text.source.projection.ProjectionViewer的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
protected void handlePreferenceStoreChanged(PropertyChangeEvent event) {
super.handlePreferenceStoreChanged(event);
String property = event.getProperty();
if (property.equals(org.eclipse.jdt.ui.PreferenceConstants.EDITOR_FOLDING_ENABLED)) {
ProjectionViewer projectionViewer = (ProjectionViewer) getSourceViewer();
if (event.getNewValue() != null && Boolean.valueOf(event.getNewValue().toString())) {
if (!projectionViewer.isProjectionMode()) {
installFoldingSupport(projectionViewer);
}
} else {
if (projectionViewer.isProjectionMode()) {
uninstallFoldingSupport();
projectionViewer.disableProjection();
}
}
}
}
public void createPartControl(Composite parent) {
super.createPartControl(parent);
ProjectionViewer projectionViewer = (ProjectionViewer) getSourceViewer();
fProjectionSupport = new ProjectionSupport(projectionViewer,
getAnnotationAccess(), getSharedColors());
fProjectionSupport
.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.error");
fProjectionSupport
.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.warning");
fProjectionSupport.install();
if (TexlipsePlugin.getDefault().getPreferenceStore().getBoolean(TexlipseProperties.BIB_CODE_FOLDING)) {
projectionViewer.doOperation(ProjectionViewer.TOGGLE);
}
this.documentModel.update();
}
/**
* Install everything necessary to get document folding working and enable
* document folding
*
* @param sourceViewer
*/
private void installProjectionSupport() {
ProjectionViewer projectionViewer = (ProjectionViewer) getSourceViewer();
fProjectionSupport = new ProjectionSupport(projectionViewer, getAnnotationAccess(), getSharedColors());
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.error"); //$NON-NLS-1$
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.warning"); //$NON-NLS-1$
fProjectionSupport.setHoverControlCreator(new IInformationControlCreator() {
public IInformationControl createInformationControl(Shell parent) {
return new DefaultInformationControl(parent);
}
});
fProjectionSupport.install();
if (isFoldingEnabled()) {
projectionViewer.doOperation(ProjectionViewer.TOGGLE);
}
}
/**
* Constructs a new FoldingActionsGroup with a given text editor.
*
* @param textEditor
*/
public FoldingActionsGroup(ITextEditor textEditor)
{
// Initialize the actions.
collapseAction = new TextOperationAction(Messages.getResourceBundle(),
"Folding.Collapse.", textEditor, ProjectionViewer.COLLAPSE, true); //$NON-NLS-1$
collapseAction.setActionDefinitionId(IFoldingCommandIds.FOLDING_COLLAPSE);
textEditor.setAction(IFoldingCommandIds.FOLDING_COLLAPSE, collapseAction);
expandAction = new TextOperationAction(Messages.getResourceBundle(),
"Folding.Expand.", textEditor, ProjectionViewer.EXPAND, true); //$NON-NLS-1$
expandAction.setActionDefinitionId(IFoldingCommandIds.FOLDING_EXPAND);
textEditor.setAction(IFoldingCommandIds.FOLDING_EXPAND, expandAction);
collapseAllAction = new TextOperationAction(Messages.getResourceBundle(),
"Folding.CollapseAll.", textEditor, ProjectionViewer.COLLAPSE_ALL, true); //$NON-NLS-1$
collapseAllAction.setActionDefinitionId(IFoldingCommandIds.FOLDING_COLLAPSE_ALL);
textEditor.setAction(IFoldingCommandIds.FOLDING_COLLAPSE_ALL, collapseAllAction);
expandAllAction = new TextOperationAction(Messages.getResourceBundle(),
"Folding.ExpandAll.", textEditor, ProjectionViewer.EXPAND_ALL, true); //$NON-NLS-1$
expandAllAction.setActionDefinitionId(IFoldingCommandIds.FOLDING_EXPAND_ALL);
textEditor.setAction(IFoldingCommandIds.FOLDING_EXPAND_ALL, expandAllAction);
}
@Override
protected void performRevert() {
ProjectionViewer projectionViewer= (ProjectionViewer) getSourceViewer();
projectionViewer.setRedraw(false);
try {
boolean projectionMode= projectionViewer.isProjectionMode();
if (projectionMode) {
projectionViewer.disableProjection();
if (fProjectionModelUpdater != null)
fProjectionModelUpdater.uninstall();
}
super.performRevert();
if (projectionMode) {
if (fProjectionModelUpdater != null)
fProjectionModelUpdater.install(this, projectionViewer);
projectionViewer.enableProjection();
}
} finally {
projectionViewer.setRedraw(true);
}
}
public void createPartControl( Composite parent )
{
if ( input != null )
{
setInput( input );
}
super.createPartControl( parent );
ISourceViewer viewer = getViewer( );
if ( viewer instanceof ProjectionViewer )
{
// Turn projection mode on.
( (ProjectionViewer) viewer ).doOperation( ProjectionViewer.TOGGLE );
}
// bidi_hcg: Force LTR orientation of the StyledText widget
getSourceViewer( ).getTextWidget( ).setOrientation( SWT.LEFT_TO_RIGHT );
}
protected ISourceViewer createSourceViewer( Composite parent,
IVerticalRuler ruler, int styles )
{
fAnnotationAccess = getAnnotationAccess( );
fOverviewRuler = createOverviewRuler( getSharedColors( ) );
ProjectionViewer viewer = new ProjectionViewer( parent,
ruler,
getOverviewRuler( ),
isOverviewRulerVisible( ),
styles );
ProjectionSupport fProjectionSupport = new ProjectionSupport( viewer,
getAnnotationAccess( ),
getSharedColors( ) );
fProjectionSupport.addSummarizableAnnotationType( "org.eclipse.ui.workbench.texteditor.error" ); //$NON-NLS-1$
fProjectionSupport.addSummarizableAnnotationType( "org.eclipse.ui.workbench.texteditor.warning" ); //$NON-NLS-1$
fProjectionSupport.install( );
// Ensures source viewer decoration support has been created and
// configured.
getSourceViewerDecorationSupport( viewer );
return viewer;
}
/**
* A semi-hack... This uses stuff that may change at any time in Eclipse.
* In the java editor, the projection annotation model contains the collapsible regions which correspond to methods (and other areas
* such as import groups).
*
* This may work in other editor types as well... TBD
*/
protected int transform(ITextEditor editor, IDocument document, ITextSelection currentSelection,
ExecutionEvent event) throws BadLocationException {
ITextViewerExtension viewer = MarkUtils.getITextViewer(editor);
if (viewer instanceof ProjectionViewer) {
ProjectionAnnotationModel projection = ((ProjectionViewer)viewer).getProjectionAnnotationModel();
Iterator<Annotation> pit = projection.getAnnotationIterator();
while (pit.hasNext()) {
Position p = projection.getPosition(pit.next());
if (p.includes(currentSelection.getOffset())) {
if (isUniversalPresent()) {
// Do this here to prevent subsequent scrolling once range is revealed
MarkUtils.setSelection(editor, new TextSelection(document, p.offset, 0));
}
// the viewer is pretty much guaranteed to be a TextViewer
if (viewer instanceof TextViewer) {
((TextViewer)viewer).revealRange(p.offset, p.length);
}
break;
}
}
}
return NO_OFFSET;
}
@Override
public void createPartControl(Composite parent) {
super.createPartControl(parent);
try {
ProjectionViewer projectionViewer = (ProjectionViewer) getSourceViewer();
fProjectionSupport = new ProjectionSupport(projectionViewer, getAnnotationAccess(), getSharedColors());
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.error");
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.warning");
fProjectionSupport.setHoverControlCreator(new IInformationControlCreator() {
@Override
public IInformationControl createInformationControl(Shell shell) {
return new DefaultInformationControl(shell);
}
});
fProjectionSupport.install();
if (isFoldingEnabled()) {
projectionViewer.doOperation(ProjectionViewer.TOGGLE);
}
} catch (Exception e) {
Log.log(e);
}
}
@Override
public void createPartControl(Composite parent) {
super.createPartControl(parent);
ProjectionViewer projectionViewer = (ProjectionViewer) getSourceViewer();
projectionSupport = installProjectionSupport(projectionViewer);
installFoldingSupport(projectionViewer);
installHighlightingHelper();
installSelectionChangedListener();
initializeDirtyStateSupport();
callback.afterCreatePartControl(this);
}
protected ProjectionSupport installProjectionSupport(ProjectionViewer projectionViewer) {
ProjectionSupport projectionSupport = new ProjectionSupport(projectionViewer, getAnnotationAccess(),
getSharedColors());
projectionSupport.addSummarizableAnnotationType(INFO_ANNOTATION_TYPE);
projectionSupport.addSummarizableAnnotationType(WARNING_ANNOTATION_TYPE);
projectionSupport.addSummarizableAnnotationType(ERROR_ANNOTATION_TYPE);
projectionSupport.setAnnotationPainterDrawingStrategy(projectionAnnotationDrawingStrategy);
projectionSupport.install();
return projectionSupport;
}
@Override
public void install(XtextEditor editor, ProjectionViewer viewer) {
Assert.isNotNull(editor);
Assert.isNotNull(viewer);
uninstall();
this.editor = editor;
this.viewer = viewer;
projectionListener = new ProjectionChangeListener(viewer);
}
@Override
public void contributeActions(XtextEditor xtextEditor) {
foldingActionGroup = new FoldingActionGroup(xtextEditor, xtextEditor.getInternalSourceViewer()) {
@Override
protected TextEditorAction createToggleFoldingAction(ITextEditor editor) {
TextEditorAction toggle = new ResourceActionExtension(FoldingMessages.getResourceBundle(),
"Projection.Toggle.", editor, ProjectionViewer.TOGGLE);
toggle.setChecked(true);
toggle.setActionDefinitionId(IFoldingCommandIds.FOLDING_TOGGLE);
return toggle;
}
};
}
private XtextEditor getXtextEditor(IEditorPart openEditor) throws NoSuchFieldException, IllegalAccessException {
XtextEditor xtextEditor = EditorUtils.getXtextEditor(openEditor);
if (xtextEditor != null) {
ISourceViewer sourceViewer = xtextEditor.getInternalSourceViewer();
((ProjectionViewer) sourceViewer).doOperation(ProjectionViewer.EXPAND_ALL);
return xtextEditor;
} else if (openEditor instanceof ErrorEditorPart) {
Field field = openEditor.getClass().getDeclaredField("error");
field.setAccessible(true);
throw new IllegalStateException("Couldn't open the editor.", ((Status) field.get(openEditor)).getException());
} else {
fail("Opened Editor with id:" + getEditorId() + ", is not an XtextEditor");
}
return null;
}
protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler ruler, int styles) {
fOverviewRuler = createOverviewRuler(getSharedColors());
ISourceViewer viewer = new ProjectionViewer(parent,
ruler, getOverviewRuler(), isOverviewRulerVisible(), styles);
// ensure decoration support has been created and configured.
getSourceViewerDecorationSupport(viewer);
return viewer;
}
/**
* Create the part control.
*
* @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
*/
public void createPartControl(Composite parent) {
super.createPartControl(parent);
// enable projection support (for code folder)
ProjectionViewer projectionViewer = (ProjectionViewer) getSourceViewer();
fProjectionSupport = new ProjectionSupport(projectionViewer,
getAnnotationAccess(), getSharedColors());
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.error");
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.warning");
fProjectionSupport.install();
if (TexlipsePlugin.getDefault().getPreferenceStore().getBoolean(TexlipseProperties.CODE_FOLDING)) {
projectionViewer.doOperation(ProjectionViewer.TOGGLE);
}
fAnnotationUpdater = new TexlipseAnnotationUpdater(this);
((IPostSelectionProvider) getSelectionProvider()).addPostSelectionChangedListener(
new ISelectionChangedListener(){
public void selectionChanged(SelectionChangedEvent event) {
//Delete all StatuslineErrors after selection changes
documentModel.removeStatusLineErrorMessage();
}
});
// register documentModel as documentListener
// in initializeEditor this would cause NPE
this.getDocumentProvider().getDocument(getEditorInput()).addDocumentListener(this.documentModel);
this.documentModel.initializeModel();
this.documentModel.updateNow();
ISourceViewer sourceViewer = getSourceViewer();
if (sourceViewer instanceof ITextViewerExtension) {
if (fBracketInserter == null)
fBracketInserter = new BracketInserter(getSourceViewer(), this);
((ITextViewerExtension) sourceViewer).prependVerifyKeyListener(fBracketInserter);
}
}
protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler ruler, int styles)
{
ProjectionViewer viewer = new ProjectionViewer(parent, ruler, getOverviewRuler(), isOverviewRulerVisible(),
styles);
// ensure decoration support has been created and configured.
// @see org.eclipse.ui.texteditor.ExtendedTextEditor#createSourceViewer
getSourceViewerDecorationSupport(viewer);
return viewer;
}
@Override
public void createPartControl(final Composite parent)
{
super.createPartControl(parent);
/*
* Add projection support (i.e. for folding)
*/
final ProjectionViewer viewer = (ProjectionViewer) getSourceViewer();
projectionSupport = new ProjectionSupport(viewer, getAnnotationAccess(), getSharedColors());
projectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.error"); //$NON-NLS-1$
projectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.warning"); //$NON-NLS-1$
projectionSupport.install();
if (viewer.canDoOperation(ProjectionViewer.TOGGLE)) {
viewer.doOperation(ProjectionViewer.TOGGLE);
}
// model for adding projections (folds)
annotationModel = viewer.getProjectionAnnotationModel();
// this must be instantiated after annotationModel so that it does
// not call methods that use annotation model when the model is still null
proofStructureProvider = new TLAProofFoldingStructureProvider(this);
// refresh the editor in case it should be
// read only
refresh();
// tlapmColoring = new TLAPMColoringOutputListener(this);
service = this.getSite().getService(IEventBroker.class);
}
/**
*
*/
@Override
public IReconciler getReconciler(final ISourceViewer sourceViewer) {
final TLAReconcilingStrategy strategy = new TLAReconcilingStrategy();
strategy.setEditor(editor);
if (sourceViewer instanceof ProjectionViewer) {
strategy.setProjectionViewer((ProjectionViewer)sourceViewer);
}
return new MonoReconciler(strategy, false);
}
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
final TLAEditor editor = EditorUtil.getTLAEditorWithFocus();
if (editor != null) {
final TextOperationAction action = new TextOperationAction(RESOURCE_BUNDLE, "Projection.CollapseAll.", editor,
ProjectionViewer.COLLAPSE_ALL, true);
action.setActionDefinitionId(IFoldingCommandIds.FOLDING_COLLAPSE_ALL);
action.run();
}
return null;
}
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
final TLAEditor editor = EditorUtil.getTLAEditorWithFocus();
if (editor != null) {
final TextOperationAction action = new TextOperationAction(RESOURCE_BUNDLE, "Projection.ExpandAll.", editor,
ProjectionViewer.EXPAND_ALL, true);
action.setActionDefinitionId(IFoldingCommandIds.FOLDING_EXPAND_ALL);
action.run();
}
return null;
}
/**
* The folding strategy must be associated with a viewer for it to function
*
* @param viewer
* the viewer to associate this folding strategy with
*/
public void setViewer(ProjectionViewer viewer) {
if (viewer != null) {
viewer.removeProjectionListener(this);
}
this.viewer = viewer;
viewer.addProjectionListener(this);
this.projectionAnnotationModel = viewer.getProjectionAnnotationModel();
}
protected IReconcilingStrategy getTypeScriptFoldingStrategy() {
if ("org.eclipse.wst.jsdt.core.jsSource".equals(contentType)) {
return super.getFoldingStrategy();
}
if (foldingStrategy == null) {
ITextViewer viewer = getTextViewer();
if (viewer instanceof ProjectionViewer) {
foldingStrategy = new TypeScriptFoldingStrategy();
foldingStrategy.setViewer((ProjectionViewer) viewer);
foldingStrategy.setDocument(getDocument());
}
}
return foldingStrategy;
}
/**
* Set the private fHandleProjectionChanges field value.
*
* @param value
* the new value.
*/
protected void setPrivateHandleProjectionChangesField(boolean value) {
try {
Field declaredField = ProjectionViewer.class
.getDeclaredField("fHandleProjectionChanges");
declaredField.setAccessible(true);
declaredField.set(this, value);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void createPartControl(Composite parent) {
super.createPartControl(parent);
ProjectionViewer viewer = getProjectionViewer();
projectionSupport = new ProjectionSupport(viewer, getAnnotationAccess(), getSharedColors());
projectionSupport.install();
// turn projection mode on
viewer.doOperation(ProjectionViewer.TOGGLE);
annotationModel = viewer.getProjectionAnnotationModel();
getPreferenceStore().addPropertyChangeListener(preferenceChangeListener);
}
@Override
protected void installFoldingSupport(final ProjectionViewer projectionViewer) {
super.installFoldingSupport(projectionViewer);
if (!isRangeIndicatorEnabled()) {
projectionViewer.doOperation(ProjectionViewer.TOGGLE);
}
}
GamaFoldingActionGroup(final ITextEditor editor, final ITextViewer viewer) {
super(editor, viewer);
if (!(viewer instanceof ProjectionViewer)) { return; }
this.pViewer = (ProjectionViewer) viewer;
collapseStrings = new FoldingAction() { // $NON-NLS-1$
// private final EClass type = GamlPackage.
@Override
public void run() {
final ProjectionAnnotationModel model = pViewer.getProjectionAnnotationModel();
final Iterator<?> iterator = model.getAnnotationIterator();
final List<Annotation> toCollapse = new ArrayList<>();
while (iterator.hasNext()) {
final Object next = iterator.next();
if (next instanceof ProjectionAnnotation) {
final ProjectionAnnotation pa = (ProjectionAnnotation) next;
final Position position = model.getPosition(pa);
if (position instanceof TypedFoldedPosition) {
if (((TypedFoldedPosition) position).getType().equals("__comment")) {
pa.markCollapsed();
toCollapse.add(pa);
}
}
}
}
model.modifyAnnotations(null, null, toCollapse.toArray(new Annotation[0]));
}
};
collapseStrings.setActionDefinitionId("org.xtext.example.folding.ui.folding.collapseStrings");
editor.setAction("FoldingCollapseStrings", collapseStrings); //$NON-NLS-1$
}
public void createPartControl(Composite parent)
{
super.createPartControl(parent);
ProjectionViewer viewer = (ProjectionViewer) getSourceViewer();
ProjectionSupport projectionSupport = new ProjectionSupport(viewer, getAnnotationAccess(), getSharedColors());
projectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.error"); //$NON-NLS-1$
projectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.warning"); //$NON-NLS-1$
projectionSupport.install();
viewer.doOperation(ProjectionViewer.TOGGLE);
}
protected ProjectionAnnotationModel getAnnotationModel()
{
ISourceViewer viewer = getSourceViewer();
if (viewer instanceof ProjectionViewer)
{
return ((ProjectionViewer) viewer).getProjectionAnnotationModel();
}
return null;
}
/**
* {@inheritDoc}
* <p>
* Subclasses may extend.
* </p>
*
* @param editor {@inheritDoc}
* @param viewer {@inheritDoc}
*/
public void install(ITextEditor editor, ProjectionViewer viewer) {
Assert.isLegal(editor != null);
Assert.isLegal(viewer != null);
internalUninstall();
if (editor instanceof JavaEditor) {
fProjectionListener= new ProjectionListener(viewer);
fEditor= (JavaEditor)editor;
}
}