@Override protected void doSetValue(Object value) { if (value instanceof CellEditorPartialValue) { CellEditorPartialValue partialValue = (CellEditorPartialValue) value; xtextAdapter.getXtextDocument().set(partialValue.getWholeText()); xtextAdapter.sourceviewer.setDocument( xtextAdapter.getXtextDocument(), xtextAdapter.sourceviewer.getAnnotationModel(), partialValue.getOffset(), partialValue.getLength()); } else { super.doSetValue(value); } // Reset the undo manager to prevend deletion of complete text if the // user hits ctrl+z after cell editor opens xtextAdapter.sourceviewer.getUndoManager().reset(); }
/** * Creates an {@link SourceViewer} and returns the {@link StyledText} widget of the viewer as the * cell editors control. Some code is copied from {@link XtextEditor}. */ @Override protected Control createControl(Composite parent) { StyledText styledText = (StyledText) super.createControl(parent); styledText.addFocusListener( new FocusAdapter() { public void focusLost(FocusEvent e) { XtextStyledTextCellEditor.this.focusLost(); } }); // adapt to xtext xtextAdapter = new StyledTextXtextAdapter( injector, contextFakeResourceProvider == null ? IXtextFakeContextResourcesProvider.NULL_CONTEXT_PROVIDER : contextFakeResourceProvider, project); xtextAdapter.adapt(styledText); if (provider != null) { xtextAdapter .getFakeResourceContext() .getFakeResource() .eAdapters() .add(new ContextElementAdapter(provider)); } // configure content assist final IContentAssistant contentAssistant = xtextAdapter.getContentAssistant(); completionProposalAdapter = new CompletionProposalAdapter( styledText, contentAssistant, KeyStroke.getInstance(SWT.CTRL, SWT.SPACE), null); // This listener notifies the modification, when text is selected via // proposal. A ModifyEvent is not thrown by the StyledText in this case. xtextAdapter .getXtextSourceviewer() .addTextListener( new ITextListener() { public void textChanged(TextEvent event) { editOccured(null); } }); if ((styledText.getStyle() & SWT.SINGLE) != 0) { // The regular key down event is too late (after popup is closed // again). // when using the StyledText.VerifyKey event (3005), we get the // event early enough! styledText.addListener( 3005, new Listener() { public void handleEvent(Event event) { if (event.character == SWT.CR && !completionProposalAdapter.isProposalPopupOpen()) { focusLost(); } } }); } styledText.addListener( 3005, new Listener() { public void handleEvent(Event event) { if (event.character == '\u001b' // ESC && !completionProposalAdapter.isProposalPopupOpen()) { XtextStyledTextCellEditor.this.fireCancelEditor(); } } }); initContextMenu(styledText); return styledText; }
public void setVisibleRegion(int start, int length) { xtextAdapter.setVisibleRegion(start, length); }
@Override public void dispose() { xtextAdapter.dispose(); super.dispose(); }