Frage

Ich bin ein Texteditor mit Scintilla Schreiben (eigentlich ScintillaNet, aber Informationen über Vanille Scintilla könnte nützlich sein, als auch). In diesem Editor wollen, sind wir Änderungsinformationen in einer Marge (zum Beispiel, wenn ich eine Textzeile ändern, dass Zeile meines Namen am Rande angezeigt werden würde) angezeigt werden soll. Ich habe es geschafft, auf Modifizieren einer Linie, die die Marge Veränderung haben, aber ich kann nicht eine gute Art und Weise zu Figur scheinen die Marge Änderung rückgängig zu machen, wenn jemand ihre Änderung rückgängig macht.

Ich habe versucht, BeginUndoAction im BeforeTextInsert Ereignisse und EndUndoAction am Ende des TextInserted Ereignisses nennen, aber das scheint nicht die Marge Änderungen rückgängig gemacht werden, zu behandeln. Gibt es eine anständige Art und Weise rückgängig zu machen Marge Änderungen? Ich denke, ich brauche kann meine eigenen kleine Marge Undo-Stack zu implementieren (oder Scintilla der Rückgängig-Stapel ändern) und es nur so handhaben, aber wenn es in etwas gebaut, würde ich eher mit, dass gehen.

War es hilfreich?

Lösung

Ich habe ging einfach weiter und meine eigenen Undo-Stack-Marge Änderungen zu speichern. Wenn der Text wird geändert und es ist kein undo, füge ich modifizierten Text, Startposition, Zeilenzahl und eine Liste von Strings (der Randtext für jede Zeile geändert). Wenn es eine Änderung gibt, und es ist ein undo, spähen ich den ersten Punkt auf dem Stapel und wenn die Position und modifizierten Text die gleiche ist, gehe ich voran und ändern sich die Margen auf die alten Werte zurück.

scheint zu funktionieren ok, obwohl es ein bisschen hässlicher ist als Ich mag würde. Ich mache Sorgen um die Stapel irgendwie mit dem Stapel undo Scintilla synchron raus, aber ich will nicht wirklich die Scintilla Quelle ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top