aber Undo / Redo ist immer noch einer der Knackpunkte.
Da hast du recht, undo war nicht leicht. Aber ich denke das ich das richtig eingebaut habe.
Ich würde fast sagen es läuft ca zu 95% zuverlässig.
Allerdings ist mein Projekt auch nicht mit deinem zu vergleichen. Wenn wir schonmal dabei sind:
Habe ich reundo richtig verstanden ?
Reundo stellt doch das wieder her, was Undo Rückgängig gemacht habe, beispiel:
Ich füge bei mir alles in eine TOBjectList ein. Es gibt verschiedene Typen. Wenn ich jetzt undo auslöse, wird in allen Fällen ein Item aus der Liste gelöscht. Das Letzte. Um reundo hinzubekommen, müsste ich doch nur bevor das letzte Item gelöscht wird, speichern in eine Reundo List.
Hier habe ich mir auch etwas an Synedit Orientiert !
Nur aus diesen Differenzdaten auch wieder ein Redo zu machen, bereitet mir noch Kopfschmerzen.
Warum ? Wenn meine anmahne richtig ist, dürfte das ganze leicht sein. Beispiel:
Wenn ich ein Wort eintippe, muss ich bei Undo ja einzeln diese Buchstaben löschen. OOP löscht zwar dann das word, ich lösche aber einzeln die Buchstaben.
Bei Reundo brauchst du doch nur das gegenteil zu machen. Also den Buchstaben wieder anfügen. Ich speichere auch noch die Cursor Position, damit müsste es dann möglich sein auch genau da das Zeichen einzufügen wo es hinsollen.
Ich habe mir bei Undo folgende Gründe überlegt:
- Beim Tippen(Buchstabenweise)
- Beim Löschen(Buchstabenweise, kleiner untschied zwischen Delete(8) und Entf)
- Bei einer neuen Zeile*
- Wenn eine Zeile gelöscht wird*
- Wenn ein markierter bereich gelöscht wird.
- Ausschneiden/Einfügen
* Hier gibt es sich das Problem, das ich praktisch die Zeile teilen müsste wenn ich z.b. mitten in einem String eine neue Zeile anfügen möchte.
Später kommen dann noch ein oder zwei hinzu, aufjedenfall kommt noch die Möglichkeit hinzu das ich mit der Maus einen Markierten Bereich verschieben kann.
Aus den vorhandenen Undo Daten lässt sich so kein Redo machen
Das sehe ich anders. Genau habe ich mich damit noch nicht befasst. Aber ich meine, es müsste gehen, aus den gleichen Daten ein zu reundo machen. Du musst "nur" eine eigene Methode dafür erstellen.
Wenn wir uns nur auf den Text Konzentrieren. Du wirst auch noch andere "Objekte" haben z.b. Tabellen, und Grafiken und sowas.
Ich würde diese Liste auch noch gerne anzeigen lassen. Das habe ich einmal in den frühern Borland IDE's unter Dos gesehen oder war das ein der MS Editor von DOS? aufjedenfall habe ich das mal unter Dos gesehen.
Aber ich weiß da noch nicht so genau wie ich das machen könnte. Weil bisher arbeite ich die liste ja von Oben nach Unten ab.
Ich weiß jetzt nicht genau was passieren würde, wenn da aufeinmal was fehlen würde.... Ich glaube es müsste gehen.
Ich finde das Projekt recht intressant. Meins und deins.
Mein Nachfolger soll so ähnliche werden, wie deines. Da habe ich auch schon angefangen.
Diese Komponenten soll ja mehr in richtig SynEdit gehen.
PS: Wie weit bist du eigentlich mit deinem Projekt ?
kannst du das OpenOffice Format schon komplett laden und da stellen ?