2010-03-19 5 views
4

J'ai besoin pour 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() .. .
Toute personne 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).Déterminer si un décalage est entre les numéros de ligne?

+0

Quand vous dites « fenêtre », vous voulez dire la fenêtre de sortie de l'éclipse? –

+0

avec « fenêtre » Je veux dire les lignes visibles de la fenêtre de l'éditeur actuellement ouvert pour l'utilisateur local. – Gnark

+0

aucune des 2 réponses données ne s'applique? –

Répondre

1

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 que je bien compris votre question, mais j'espère que cette information est utile.)

1

peut-être que vous pouvez vérifier si cette org.eclipse.linuxtools.dataviewers.annotatedsourceeditor.STOverviewRuler class 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); 
Questions connexes