private void handleMouseUp(Event e) { if (e.button == 1) { RevisionRange upRegion= fFocusRange; RevisionRange downRegion= fMouseDownRegion; fMouseDownRegion= null; if (upRegion == downRegion) { Revision revision= upRegion == null ? null : upRegion.getRevision(); if (revision == fSelectedRevision) revision= null; // deselect already selected revision handleRevisionSelected(revision); } } }
@Override public String toString() { return "RevisionRange [" + fRevision.toString() + ", [" + getStartLine() + "+" + getNumberOfLines() + ")]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ } }
/** * Returns the contained {@link RevisionRange}s adapted to the current diff state. The returned * information is only valid at the moment it is returned, and may change as the annotated * document is modified. * * @return an unmodifiable view of the contained ranges */ public final List<RevisionRange> getRegions() { if (fRanges == null) { List<RevisionRange> ranges= new ArrayList<>(fChangeRegions.size()); for (ChangeRegion region : fChangeRegions) { for (ILineRange range : region.getAdjustedRanges()) { ranges.add(new RevisionRange(this, range)); } } fRanges= Collections.unmodifiableList(ranges); } return fRanges; }
/** * Returns the line ranges of this revision information. The returned information is only valid * at the moment it is returned, and may change as the annotated document is modified. See * {@link IRevisionListener} for a way to be informed when the revision information changes. The * returned list is sorted by document offset. * * @return an unmodifiable view of the line ranges * @see IRevisionListener * @since 3.3 */ public List<RevisionRange> getRanges() { if (fRanges == null) { List<RevisionRange> ranges= new ArrayList<>(fRevisions.size() * 2); // wild size guess for (Revision revision : fRevisions) { ranges.addAll(revision.getRegions()); } // sort by start line Collections.sort(ranges, (r1, r2) -> r1.getStartLine() - r2.getStartLine()); fRanges= Collections.unmodifiableList(ranges); } return fRanges; }
/** * Returns the line ranges of this revision information. The returned information is only valid * at the moment it is returned, and may change as the annotated document is modified. See * {@link IRevisionListener} for a way to be informed when the revision information changes. The * returned list is sorted by document offset. * * @return an unmodifiable view of the line ranges * @see IRevisionListener * @since 3.3 */ public List<RevisionRange> getRanges() { if (fRanges == null) { List<RevisionRange> ranges= new ArrayList<>(fRevisions.size() * 2); // wild size guess for (Iterator<Revision> it= fRevisions.iterator(); it.hasNext();) { Revision revision= it.next(); ranges.addAll(revision.getRegions()); } // sort by start line Collections.sort(ranges, (r1, r2) -> r1.getStartLine() - r2.getStartLine()); fRanges= Collections.unmodifiableList(ranges); } return fRanges; }
private void handleMouseUp(Event e) { if (e.button == 1) { RevisionRange upRegion= fFocusRange; RevisionRange downRegion= fMouseDownRegion; fMouseDownRegion= null; if (upRegion == downRegion) { Revision revision= upRegion == null ? null : upRegion.getRevision(); if (revision == fSelectedRevision) revision= null; // deselect already selected revision handleRevisionSelected(revision); } } }
@Override public String toString() { return "RevisionRange [" + fRevision.toString() + ", [" + getStartLine() + "+" + getNumberOfLines() + ")]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ } }
/** * Returns the sublist of all <code>RevisionRange</code>s that intersect with the given lines. * * @param lines the model based lines of interest * @return elementType: RevisionRange */ public List<RevisionRange> getRanges(ILineRange lines) { List<RevisionRange> ranges= getRangeCache(); // return the interesting subset int end= end(lines); int first= -1, last= -1; for (int i= 0; i < ranges.size(); i++) { RevisionRange range= ranges.get(i); int rangeStart = range.getStartLine(); int rangeEnd= end(range); if (first == -1 && (rangeEnd > lines.getStartLine() && rangeStart <= lines.getStartLine())) first= i; if (first != -1 && rangeEnd > end) { last= i; break; } } if (first == -1) return Collections.emptyList(); if (last == -1) last= ranges.size() - 1; // bottom index may be one too much //return Collections.emptyList(); return ranges.subList(first, last + 1); }
/** * Returns the contained {@link RevisionRange}s adapted to the current diff state. The returned * information is only valid at the moment it is returned, and may change as the annotated * document is modified. * * @return an unmodifiable view of the contained ranges */ public final List<RevisionRange> getRegions() { if (fRanges == null) { List<RevisionRange> ranges= new ArrayList<>(fChangeRegions.size()); for (Iterator<ChangeRegion> it= fChangeRegions.iterator(); it.hasNext();) { ChangeRegion region= it.next(); for (Iterator<Range> inner= region.getAdjustedRanges().iterator(); inner.hasNext();) { ILineRange range= inner.next(); ranges.add(new RevisionRange(this, range)); } } fRanges= Collections.unmodifiableList(ranges); } return fRanges; }
/** * Handles a changing focus range. * * @param previousRange the old focus range (<code>null</code> for no focus) * @param nextRange the new focus range (<code>null</code> for no focus) */ private void onFocusRangeChanged(RevisionRange previousRange, RevisionRange nextRange) { if (DEBUG) System.out.println("range: " + previousRange + " > " + nextRange); //$NON-NLS-1$ //$NON-NLS-2$ fFocusRange= nextRange; Revision revision= nextRange == null ? null : nextRange.getRevision(); updateFocusRevision(revision); }
/** * Handles a changing focus range. * * @param previousRange the old focus range (<code>null</code> for no focus) * @param nextRange the new focus range (<code>null</code> for no focus) */ private void onFocusRangeChanged(RevisionRange previousRange, RevisionRange nextRange) { if (DEBUG) System.out.println("range: " + previousRange + " > " + nextRange); //$NON-NLS-1$ //$NON-NLS-2$ fFocusRange= nextRange; Revision revision= nextRange == null ? null : nextRange.getRevision(); updateFocusRevision(revision); }
@Override public Object getHoverInfo(ISourceViewer sourceViewer, ILineRange lineRange, int visibleNumberOfLines) { RevisionRange range= getRange(lineRange.getStartLine()); Object info= range == null ? null : range.getRevision().getHoverInfo(); return info; }
@Override public Object getHoverInfo(ISourceViewer sourceViewer, ILineRange lineRange, int visibleNumberOfLines) { RevisionRange range= getRange(lineRange.getStartLine()); Object info= range == null ? null : range.getRevision().getHoverInfo(); return info; }
private void updateLabel() { List<RevisionRange> ranges = rangeProvider.getRanges(lineRange); if (ranges != null && ranges.size() > 0) { long count = ranges.stream().map(r -> r.getRevision().getAuthor()).distinct().count(); StringBuilder label = new StringBuilder(); label.append(count); label.append(" "); if (count == 1) { label.append("author"); } else { label.append("authors"); } label.append(" ("); label.append(ranges.get(0).getRevision().getAuthor()); if (count > 1) { label.append(" and others"); } label.append(")"); super.setLabel(label.toString()); } else { super.setLabel(""); } }
/** * Returns the revision at a certain document offset, or <code>null</code> for none. * * @param offset the document offset * @return the revision at offset, or <code>null</code> for none */ Revision getRevision(int offset) { IDocument document= fViewer.getDocument(); int line; try { line= document.getLineOfOffset(offset); } catch (BadLocationException x) { return null; } if (line != -1) { RevisionRange range= getRange(line); if (range != null) return range.getRevision(); } return null; }
/** * Returns the revision at a certain document offset, or <code>null</code> for none. * * @param offset the document offset * @return the revision at offset, or <code>null</code> for none */ Revision getRevision(int offset) { IDocument document= fViewer.getDocument(); int line; try { line= document.getLineOfOffset(offset); } catch (BadLocationException x) { return null; } if (line != -1) { RevisionRange range= getRange(line); if (range != null) return range.getRevision(); } return null; }
private void updateLabel() { try { List<RevisionRange> ranges = rangeProvider.getRanges(lineRange); if (ranges != null && ranges.size() > 0) { Revision revision = ranges.stream().map(r -> r.getRevision()) .max(Comparator.comparing(Revision::getDate)).get(); if (showDate && (revision instanceof IRevisionRangeExtension)) { super.setLabel( revision.getAuthor() + ", " + ((IRevisionRangeExtension) revision).getFormattedTime()); } else { super.setLabel(revision.getAuthor()); } if (showAvatar) { if (revision instanceof IRevisionRangeExtension) { String email = ((IRevisionRangeExtension) revision).getAuthorEmail(); if (email != null) { avatar = AvatarRepository.getInstance().getAvatarByEmail(email); } } } } } catch (Exception e) { super.setLabel(e.getMessage()); e.printStackTrace(); } }
return; Revision revision= range.getRevision(); boolean drawArmedFocus= range == fMouseHandler.fMouseDownRegion; boolean drawSelection= !drawArmedFocus && revision == fSelectedRevision;
return; Revision revision= range.getRevision(); boolean drawArmedFocus= range == fMouseHandler.fMouseDownRegion; boolean drawSelection= !drawArmedFocus && revision == fSelectedRevision;