Ich habe meinem Grapheneditor um eine
Historienfunktion
erweitert. Diese Funktionalität ist in einer extra
Klasse (Historie.pm, Graph::GED::Historie) enthalten,
die Klasse kann alle möglichen von Graph::GED::Basis
abgeleiteten Objekte speichern und verwalten.
Somit ist sie später universell einsetzbar, wenn alle
Fehler behoben sind. Die Ableitung von Graph::GED::Basis
ist deshalb nötig, weil die verwalteten Objekte eine clone-
und eine clear-Methode haben müssen, beides wird u.a. von
Graph::GED::Basis zur Verfügung gestellt.
Diese beiden Methoden kümmern sich um das saubere ko-
pieren bzw. Löschen der verwalteten Objekte. Dies wird
dann wichtig, wenn die Objekte nicht nur "flache Daten"
enthalten, sondern anonyme Arrays oder Hashes.
(Genaugenommen prüfe ich auch nicht auf die Ableitung von
Graph::GED::Basis, sondern nur, ob die übergebenen
Objekte die Methoden clone und clear beherrschen (mit can).)
Die Historie ist eine State-Machine (wem das nichts sagt:
es gibt verschiedene Zustände und definierte Übergänge
von Zustand zu Zustand und die Maschine "weiß", was sie
in welchem Zustand bei welcher Anforderung machen soll).
Ich unterscheide folgende Zustände:
NORMAL
NORMAL_ENDE
NACH_RUECK
NACH_RUECK_ANFANG
NACH_WIEDER
NACH_WIEDER_ENDE
Folgende "Anforderungen" bzw. von außen zugängliche
Methoden gibt es (neben
new,
clone und
max):
objekt_eintragen()
rueckgaengig()
wiederholung()
Zum Testen gibt es im Moment nur drei Speicherplätze in der
Historie, das werde ich natürlich später auch hochsetzen.
Die Kommentarbeschreibung der Aktionen in den verschiedenen
Stati stimmt noch nicht, das werde ich nachbessern, wenn alle
Fehler behoben sind.
Das Historienobjekt in ged.pl selbst ist in
%Konfig
unter dem Schlüssel
historie enthalten.
Es wird am Anfang mit
new Graph::GED::Historie angelegt.
Das meiste funktioniert schon, aber mir ist noch ein Fehler
aufgefallen, den ich aber nicht genau lokalisieren und auch
nicht wiederholen konnte.
Deshalb
meine Bitte an Euch: Wenn Ihr mir bei der Fehlersuche
helfen wollt, holt Euch die aktuelle Beta-Version 0.0.31.beta
von meiner
GED-Seite, sie ist dort nicht offiziell aufgeführt,
aber unter
diesem Link könnt an sie herankommen.
In der Betaversion ist in Graph/GED/Historie.pm der Debug-Level
auf 2, es gibt eine Extraausgabe in
historie_schalter_aktualisieren()
in ged.pl und die Fehlerausgaben in Tk-Fenster sind momentan
ausgeschaltet. Das wird später geändert.
Wenn Ihr testet, so ruft
ged.pl bitte so auf:
perl ged.pl > error.log
Wenn Ihr reproduzierbare Fehler findet, sagt mir bitte was ihr
gemacht habt und schickt das Fehlerprotokoll mit.
Oder sagt mir genau, bei dem Übergang von welchem Zustand
in welchen anderen Zustand was schiefgeht, aber das geht von außen
eingestiegen wohl nicht so einfach.
Vielen Dank im Voraus an alle Tester :-)\n\n
<!--EDIT|Crian|1077532166-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite