Eclipse: Markierungen in einem Editor setzen

Crai

Mitglied
Hallo,

zur Zeit kommen mal wieder mehr Fragen als Lösungen bei mir auf.

Ich schreibe zur Zeit an einem PlugIn für Eclipse. Dabei hab ich folgendes Problem:
Der User klickt doppelt auf ein Objekt in meiner View. Darauf wird eine von mir
bestimmte cpp-Datei mit dem dafür zugeordneten Editor geöffnet.
Nun ist es so, dass in diesem Editor nun von mir bestimmte Textstellen markiert werden müssen. Nur hab ich keine Ahnung wie ich da vorgehen soll?
Geht es irgendwie über setSelection() ? Aber wie markiere ich dann Text an verschiedenen Positionen? Wie bekomme ich erstmal die Instanz dieses Editors? :confused:

Ich hoffe ihr habt vielleicht ein paar Tipps für mich,

vielen Dank schonmal,

CU
Crai
 
Hallo!

Eine Moeglichkeit waere das ganze ueber Todo Tasks zu handeln ( Zeile markieren -> Add Task). Weiterhin gibts glaub ich noch sowas wie Marker... ich schau mir das heute Abend mal an...

Gruss Tom
 
Hi,

ja das mit den Markern ist ne gute Idee!
Hab mich mal damit ausführlich beschäftigt und ich denke die sind dafür gut zu gebrauchen! :)

Danke dir, für deinen Tipp!

Gruß,
Crai
 
Hi!

Dank deiner Idee Thomas, funktioniert das mit den Markern ganz gut.
Es werden einzelne Textbereiche markiert, Marker dazu definiert und der Benutzer
hat die Möglichkeit diese Textstellen entsprechend der vorgschlagenen Lösungen zu bearbeiten.
Leider hat sich da noch ein kleiner Fahler eingeschlichen:
Wenn er zum Beispiel eine Textstelle durch einen längeren oder kürzeren von der Lösung vorgeschlagenen Text ersetzen lässt, verschieben sich die dieser Stelle nachfolgenden Marker nicht richtig. D.h. vor der Änerung haben alle Marker auf die jeweilig korrekten Textstellen gezeigt, nach der Änderung zeigen die der Stelle nachfolgenden Marker auf leicht verschobene Textstellen.

Liegts an meinem Vorgehen?:
Die angebotene Ersetzen-Lösung eines Markers holt sich das Dokument des entsprechenden Editors und ersetzt den entsprechenden Abschnitt mit der Methode IDocument.replace(...).
Ist das der Grund, warum die Positionen der Marker nicht angepasst werden?
Wenn ja, welche anderen Möglichkeiten gibt es?

Gruß,
Crai
 
Ich konnte das Problem ein bißchen eingrenzen:
Ich habe einen Text der das Wort 'add' an Stelle 10 enthält. Nun will ich das durch das Wort 'Addition' ersetzen lassen.

Folgender Aufruf:

doc.replace(10, 3, "Addition");

Dies bewirkt nun, dass die drei Buchstaben von "add" mit dem neuen Wort überschrieben werden. es wird auch ein DocumentChangeEvent ausgelöst. Nur bekommt der leider nur mit, dass sich der Text um die Länge 3 verändert hat. Wie lang nun das eingefügte Wort wirklich war, ist ihm ziemlich egal.
Doch wie kann ich ihm das mitteilen?

Ich hätte da ne andere Möglichkeit gefunden:
org.eclipse.text.edits.TextEdit
http://help.eclipse.org/help30/inde...ence/api/org/eclipse/text/edits/TextEdit.html

Diese Klasse könnte meine Probleme lösen. Ich kann das alte Wort erst löschen und dann das neue an gleicher Position hinzufügen, das würde diese Probleme beheben.

Obwohl zwar in der API "Since 3.0" steht, hab ich diese in meinem Eclipse v3.1 nicht gefunden.
Weiß jemand, woher ich dieses Package "org.eclipse.text.edits" bekommen kann?

Gruß,
Crai
 
Ok, hat sich alles lösen lassen.

Das das genannte Package nicht gefunden wurde, lag an mir.
Und mit diesen Klassen war es nun möglich, mein Problem zu beheben.

Im Prinzip:
Das doc.replace() durch ein DeleteEdit und ein darauf folgendes InsertEdit ersetzt.

Ich vergleich die Stringlängen des alten und neuen Strings, merke mir den Längenunterschied und übergebe diesen einer Methode, die die Marker updated,
die nach der Position des aktuellen kommen. Deren Attribute CharStart und CharEnd bekommen den übergebenen Längenunterschied hinzugerechnet.

Gruß,
Crai
 
Zurück