/** * Initialize foreground, background color, current line highlight from the * current theme if needed. * */ private void applyThemeEditorIfNeeded() { if (!initializeViewerColors) { StyledText styledText = viewer.getTextWidget(); ((ITheme) tokenProvider).initializeViewerColors(styledText); initializeViewerColors = true; } if (!updateTextDecorations) { try { // Ugly code to update "current line highlight" : // - get the PaintManager from the ITextViewer with reflection. // - get the list of IPainter of PaintManager with reflection // - loop for IPainter to retrieve CursorLinePainter which manages "current line // highlight". PaintManager paintManager = ClassHelper.getFieldValue(viewer, "fPaintManager", TextViewer.class); if (paintManager != null) { List<IPainter> painters = ClassHelper.getFieldValue(paintManager, "fPainters", PaintManager.class); if (painters != null) { for (IPainter painter : painters) { if (painter instanceof CursorLinePainter) { // Update current line highlight Color background = tokenProvider.getEditorCurrentLineHighlight(); if (background != null) { ((CursorLinePainter) painter).setHighlightColor(background); } updateTextDecorations = true; } } } } } catch (Exception e) { e.printStackTrace(); } } }
/** * Sets the sentence translation. * * @param sentence the new sentence translation */ private AnnotationModelEvent setSentenceTranslation(BTSSenctence sentence, boolean postSelection) { // TODO: allow for multiple sentence translations to be highlighted simultaneously // i.e. create method setSentenceTranslation(List<BTSSentence>) which gets passed // a Collection containing all sentences detected within a BTSTextSelectionEvent final AnnotationModelEvent ev = new AnnotationModelEvent(annotationModel); if (sentence != null && !sentence.equals(selectedSentence)) { selectedSentence = sentence; if (selectedSentence.getTranslation() == null) { Command command = AddCommand.create(editingDomain, selectedSentence, BtsCorpusModelPackage.BTS_SENCTENCE__TRANSLATION, BtsmodelFactory.eINSTANCE .createBTSTranslations()); editingDomain.getCommandStack().execute(command); } sentenceTranslate_Editor.setEnabled(userMayEdit); sentenceTranslate_Editor.load(selectedSentence.getTranslation(), editingDomain, false); BTSModelAnnotation am = modelAnnotationMap.get(sentence.get_id()); if (am != null) { if (!am.equals(highlightedSentenceAnnotation) || !am.getType().endsWith(".highlighted")) { // highlight current translation am.setHighlighted(true); ev.annotationChanged(am); // remove previous highlight if (highlightedSentenceAnnotation != null) { highlightedSentenceAnnotation.setHighlighted(false); ev.annotationChanged(highlightedSentenceAnnotation); } highlightedSentenceAnnotation = am; } if (!postSelection) { // make sure annotation is visible in text editor Position pos = annotationModel.getPosition(am); if (pos != null) embeddedEditor.getViewer().revealRange(pos.getOffset(), pos.length); // In order to limit workload, only repaint text editor (including highlight of line(s) // containing this sentence) if method call seems to come from selection listener // in EgyTextTranslationPart. This is indicated by postSelection being false. // (if postSelection is true, repaint has most likely already been invoked in processSelection) sync.asyncExec(new Runnable() { public void run() { // TODO this can be improved in order to reduce work load repainting large texts if (painter == null || embeddedEditor.getViewer().getTextWidget().isDisposed()) return; painter.modelChanged(ev); painter.paint(IPainter.INTERNAL); ruler.update(); ruler.relayout(); oruler.update(); embeddedEditor.getViewer().getTextWidget().redraw(); } }); return null; } } if (postSelection) selectionService.setSelection(sentence); return ev; } return null; }
@Inject @Optional void eventReceivedRelatedObjectsFilterSet( @UIEventTopic("event_anno_filters/*") final BTSRelatingObjectsFilterEvent event) { if (event != null) { Map<String, Boolean> filters = event.getFilters(); //painter.removeAllAnnotationTypes(); for (Entry<String, Boolean> e : filters.entrySet()) { String typeId = e.getKey(); String strategyId = null; if (getAnnotationStrategySet().contains(typeId)) { strategyId = typeId; } else{ if (typeId.startsWith(BTSConstants.COMMENT)) { strategyId = BTSConstants.COMMENT; }else if (typeId.startsWith(CorpusUtils.SUBTEXT_TYPE)) { strategyId = CorpusUtils.SUBTEXT_TYPE; }else if (typeId.startsWith(BTSConstants.ANNOTATION + "." +CorpusUtils.ANNOTATION_RUBRUM_TYPE)) { strategyId = BTSConstants.ANNOTATION + "." +CorpusUtils.ANNOTATION_RUBRUM_TYPE; }else if (typeId.startsWith(BTSConstants.ANNOTATION)) { strategyId = BTSConstants.ANNOTATION; } else { strategyId = BTSConstants.ANNOTATION; } } // update editor painter and ruler annotation types for (String suffix : ANNO_TYPES_SUFFIXES) { if (e.getValue()) { painter.addAnnotationType(typeId+suffix, strategyId+suffix); painter.setAnnotationTypeColor(typeId +suffix, getBackgroundColorTypePath(strategyId)); oruler.addAnnotationType(typeId+suffix); } else { painter.removeAnnotationType(typeId+suffix); oruler.removeAnnotationType(typeId+suffix); } } painter.paint(IPainter.INTERNAL); } } }
public void addPainter(IPainter painter) { viewer.addPainter(painter); }
public void removePainter(IPainter painter) { viewer.removePainter(painter); }