Déterminer si un décalage est entre les numéros de ligne?
Question
Je dois déterminer si une sélection donnée est entre une ligne de départ et une ligne d'extrémité.
J'ai un ILineRange
et un décalage donné dans la fenêtre d'éclipse. (Je dois savoir, si la sélection (d'une partie à distance) a été faite dans la fenêtre actuelle de l'utilisateur local. Malheureusement, je ne peux pas obtenir un ILineRange
de la sélection. Je dois compter sur getOffset () et getLength () .. .
Tout le monde a une idée?
Je pense qu'il n'y a pas une solution propre pour cela, comme le décalage (ou les caractères par ligne varient (nouvelles lignes de ligne ou un gros bloc de commentaire).
La solution
La conversion entre les positions et les compensations peut être fait avec l'API de IDocument (méthodes autour getLine * ()). (Je ne suis pas sûr d'avoir compris votre question, mais j'espère que cette information est utile.)
Autres conseils
Peut-être que vous pouvez vérifier si cette classe org.eclipse.linuxtools.dataviewers.annotatedsourceeditor.STOverviewRuler
traite le même genre de problème que vous avez.
Quelque chose le long des lignes de:
if (ANNOTATION_HEIGHT_SCALABLE) {
int numbersOfLines= document.getNumberOfLines(annotationOffset, annotationLength);
// don't count empty trailing lines
IRegion lastLine= document.getLineInformationOfOffset(annotationOffset + annotationLength);
if (lastLine.getOffset() == annotationOffset + annotationLength) {
numbersOfLines -= 2;
hh= (numbersOfLines * size.y) / maxLines + ANNOTATION_HEIGHT;
if (hh < ANNOTATION_HEIGHT)
hh= ANNOTATION_HEIGHT;
} else
hh= ANNOTATION_HEIGHT;
}
fAnnotationHeight= hh;
int startLine= textWidget.getLineAtOffset(annotationOffset - visible.getOffset());
yy= Math.min((startLine * size.y) / maxLines, size.y - hh);