GED ist ein Tool zum Visualisieren und Konstruieren
            von Graphen auf einer grafischen Oberfläche.
            Es handelt sich hierbei um Graphen aus der Graphentheorie,
            einem Teilgebiet der diskreten Mathematik, nicht um
            Funktionsgrafen.
            Rechts auf dem Bild sieht man einen solchen Graphen.
            Der Grapheneditor GED soll das werden, was ich mir während
            meiner Diplomarbeit, die im Bereich der Graphentheorie angesiedelt
            war, als Tool zur schönen Darstellung von Graphen gewünscht
            hätte.
            Ich wünsche mir, dass GED Mathematiklehrenden und
            -studierenden aus dem Bereich der Graphentheorie
            eine Hilfe sein wird, wenn die Entwicklung weiter
            fortgeschritten ist.
            Ich freue mich über Kommentare, Anregungen und Hinweise, wo
            GED eingesetzt wird. Ich bin auch prinzipiell offen für
            Vorschläge für weitere Features etc.
         
        
            Vorgängerversion in Perl:
            Es gibt eine Vorgängerversion des GED in Perl, die ich von
            2003 bis 2005 entwickelt hatte.
            
            Zum GED in Perl kommt man 
            auf meiner GED in Perl-Seite.
            
            Da ich später beruflich auf die Sprache Java wechselte und
            inzwischen in dieser heimisch bin und nicht mehr in Perl, habe ich
            im Jahr 2012 angefangen, den GED nach Java zu übertragen und dort
            weiter zu entwickeln. Die beiden Versionen sind nicht völlig
            deckungsgleich, die weitere Entwicklung wird aber in die hier
            zu sehende Java-Version fließen.
        
 
        
            Eigenschaften:
            GED bietet die Möglichkeit, Graphen mit der Maus auf einer
            grafischen Oberfläche zu erstellen, zu bearbeiten und zu
            speichern.
            
                - 
                    Ecken einfügen
                
- 
                    Kanten zwischen zwei Ecken ziehen (Mehrfachkanten und 
                    Schlingen werden noch nicht unterstützt).
                    Hierbei wird unterschieden, ob es sich um einen gerichteten
                    oder einen ungerichteten Graphen handelt (dies kann man 
                    unter dem Menüpunkt 
                        Bearbeiten, 
                        Metadaten des Graphen ändern, 
                        Gerichteter Graph
                    ändern.
                    
 Beim gerichteten Graphen hat man die Wahl zwischen zwei
                    Arten von Kanten:
                        - Pfeil hin
- Pfeil in beide Richtungen, die fügt zwei Kanten ein
                            und stellt nur eine Arbeitserleichterung dar.
 Beim ungerichteten Graphen gibt es nur eine einzige Art von
                    Kanten. Jede Kante verbindet zwei gleichberechtigte Ecken.
 In der Oberfläche hat man daher auch zwei beziehungsweise
                    einen Schalter zum Hinzufügen von Kanten.
- 
                    Ecken auf der Oberfläche verschieben.
                
- 
                    Ecken mit allen inzidierenden Kanten löschen.
                
- 
                    Kanten löschen. Klickt man hierbei in einen Bereich mit
                    mehreren Kanten, öffnet sich ein Dialog in dem man auswählen
                    kann, welche dieser Kanten man löschen möchte.
                    
 Außerdem gibt es noch einen Schalter, um gleich alle Kanten,
                    die der Mausklick trifft, zu löschen.
- 
                    Ecken "verschmelzen", darunter verstehe ich, dass die Ecke
                    entfernt wird und alle Nachbarn der Ecke untereinander
                    durch Kanten verbunden werden.
                
- 
                    Ecken inspizieren. Dieser Bearbeitungsmodus öffnet den Dialog
                    mit den Eigenschaften einer Ecke nun per Linksklick, in den
                    anderen Bearbeitungsmodi ist er per Rechtsklick verfügbar.
                
- 
                    Speichern des Graphen ins "ged4"- und aus
                    Kompatibilitätsgründen mit der Perl Version auch ins
                    "ged3"-Format, wobei dies nicht völlig kompatibel ist.
                    
 Unterstützung der alten Dateiformate ged und ged2 ist in
                    Vorbereitung.
- 
                    Laden von Graphen aus dem ged4- und ged3-Format.
                    
 Unterstützung der alten Dateiformate ged und ged2 ist in
                    Vorbereitung.
- 
                    Speichern eines Graphen unter einem anderen Namen.
                
- 
                    Einige Kreise und vollständige Graphen können
                    über das Menü in der Mitte des Zeichenbereiches
                    eingefügt werden.
                    
 Auch den Mittelpunkt kann man einfügen lassen.
- 
                    Man kann optional ein Gitternetz einblenden lassen,
                    dessen Rasterweite man wählen kann.
                
- 
                    Optional kann man die Ecken beim Einfügen und
                    Verschieben auf den Schnittpunkten des Gitters einrasten
                    lassen.
                
- 
                    Ecken können über den Eckendialog (erreichbar per
                    Rechtsklick auf eine Ecke) in Farbe, Radius, Beschriftung
                    und Gewicht verändert werden.
                    Dabei lassen sich Positionen und Farben individuell
                    festlegen.
                    Der Eckendialog enthält ein Vorschaufenster, das die
                    Positionierung vereinfacht.
                
- 
                    Kanten können über den Kantendialog (erreichbar per
                    eindeutigem Rechtsklick auf eine Kante) in Farbe, Dicke,
                    Stil, Beschriftung, Gewicht, Kapazität und Fluss verändert
                    werden.
                    Dabei lassen sich Positionen und Farben individuell
                    festlegen.
                    Der Kantendialog enthält ein Vorschaufenster, das die
                    Positionierung vereinfacht.
                
- 
                    Man kann sich die internen Daten in einem Extrafenster
                    unter dem Menüpunkt 
                        Extra, 
                        Graphen als Textausgabe ansehen
                    anzeigen lassen.
                
- 
                    Im Hilfemenü stehen die folgenden Informationen zur Verfügung:
                    
                        - Über GED, dies zeigt die Version an.
- Hilfe (Inhalt noch leer)
- Anzeige der Todoliste mit gesammelten Ideen für die
                            Weiterentwicklung in Stichworten
- Anzeige der Historie
 
- 
                    Historie: Man kann Änderungen am Graphen zurücknehmen
                    und wiederholen. Dies funktioniert wie gewohnt mit
                    Strg-Z und Strg-Y oder über die
                    Buttonleiste.
                
- 
                    Die aktuelle Ansicht des Graphen im Editore lässt sich als
                    png-Bild speichern.
                
 
        
            Geplant:
            Folgende Punkte sind momentan unter anderem für die
            Weiterentwicklung eingeplant:
            Bekannte Probleme
            
            
            Offene Punkte GED
            
                - Export:
                    
                        - Export in ein Vektorformat.
 Die Perl-Version konnte den Graphen als Postscript-Datei exportieren, etwas
                            vergleichbares ist für die Java Implementierung geplant: Export in ein
                            Vektorgrafikformat.
- Export des Graphen als LaTeX-Datei, dies konnte die Perlversion bereits und muss
                            nur adaptiert werden.
 
- Grafische Oberfläche:
                    
                        - Ecken-Bearbeitungsdialog ggf. auch zweispalttig.
- Kanten-Bearbeitungsdialog: Graph testweise nach rechts unten.
- Canvas:
                            
                                - Canvasgröße mit Speichern und beim Laden herstellen, wenn das Fenster
                                    zu klein ist. Oder generell?
- Größe der Canvas per Menüauswahl setzbar (für Präsentationen etc.).
- Im Menü Canvasgröße auf individuelles Maß setzen mit kleinem Dialog.
- Canvas mit Scrollbalken darstellen?
 
- Graph#maximizeGraphRespectingAspectRatio() auch direkt in der Oberfläche
                            verwenden, neues Icon!
- 
                            Ev. Graphen an die Größe der Canvas anpassen im Ecken- und Kanten-Dialog. Einmal
                            nach dem Pack, aber auch bei Änderungen an der Größe. Ev. per Listener?
                            Muss aber auch nicht, auch so macht es eine gute Figur.
                        
- Eigenschaften von mehreren Kanten mit dem Kantenauswahlmenü ändern:
                            Erst Kanten auswählen, dann Eigenschaften setzen.
- 
                            Menüs:
                            
                                - Alle Ecken Radius ändern - macht das Sinn? Auf Default und Radius
                                    ändern?
- Alle Ecken Farbe ändern - macht das Sinn? Auf Default und Farbe
                                    ändern?
- Laden GED 1 und 2
 
- Ecke in Kante hinein setzen (neue Ecke, zwei neue Kanten dazu mit,
                            gleichen Eigenschaften, alte Kante weg).
- Liniengraphen bilden
- Rahmen aufziehen und alle Ecken darin löschen / bearbeiten.
- Auswahl von Ecken mit gestrichelten Kreisen darum darstellen in
                            Radius * 1.25 Abstand oder so?
- Ecke ins Gitter einrasten ins Eckenmenü (mit snap in Grid kann man sie
                            einfach verschieben, aber kann ich trotzdem einbauen).
- Möglichkeit, die Beschriftung einer Ecke mit der Maus zu versetzen.
- Label, Gewicht, Kapazität und Fluss per Maus bewegbar machen.
- Bei Rechtsklick in freie Fläche dort Submenü zum Erzeugen von Graphen
                            mit diesem Mittelpunkt anbieten: Kreise, Kn, ... mit Radius um diesen
                            Punkt wählbar. Genau wie im Menü für den Mittelpunkt der Bildfläche.
- Bei Alle Ecken auf Gitter legen hinterher testen, ob zwei Ekcen die
                            gleichen Koordinaten haben und wenn ja, den Benutzer warnen.
- Graphen im Uhrzeigersinn und entgegengesetzt um den Mittelpunkt drehen.
                            Vielleicht auch in festen Winkeln. Oder eingebbar.
- Funktionalität, die Sinn macht aus dem GraphPanel in Graph verlegen,
                            analog zu vertexIntersctsWithOtherVertex()
- Schneller Zugriff auf die letzten 10 gespeicherten Dateien über das Menü.
                            Dazu ist dann allerdings ein SessionManager nötig, der sich dies über die
                            verschiedenen Starts von GED merkt.
 
- Unter der Haube:
                    
                        - Logging aller Aktionen einbauen, das ist in der Logik eingebaut, da passiert
                            aber nicht viel! GraphPanel etc. auch loggen...
- Geändertmarker richtig anzeigen (setChange, speichern, laden...)
 
- Noch fehlendes:
                    
                        - ged3-Form, alt Loader weiter refakturieren!
- Den Graphen in seinen Liniengraphen (oder Kantengraphen) wandeln lassen, dies
                            konnte die Perlversion bereits und muss nur adaptiert werden.
- Testabdeckung der Graphenklassen, also alles unterhalb von            
 de.duehl.math.graph.ged.graph
 mit Ausnahme von
 de.duehl.math.graph.ged.graph.io
 .
- Laden und Speichern .ged einbauen
- Laden und Speichern .ged2 einbauen
- Laden nach automatischer Endung Format erkennen.
- Fehlende Kanteneigenschaften einfügen (welche wären das?).
 
- Geplante Refakturierungen:
                    
                        - Generelles Refactoring, alle Klassen sichten.
- de.duehl.swing.ui.dialogs.ErrorDialog von ModalDialogBase erben lassen!
- Color aus Basics nutzen?
- Alle in Klassen enthaltenen Enums in eigene Klassen extrahieren!
- Funktionalität aus der Logik in den Graphen verlegbar?
- Alle Sourcedateien auf TODO absuchen.
 
- Grundlegende Überlegungen:
                    
                        - Graphen im Format des Dumps unter dem Menüpunkt Extra, Graphen als Textausgabe
                            ansehen auch einlesen.
- 
                            Eventuell könnte der Graph als solcher oder auch zu Teilen von allgemeineren
                            Klassen erben. Dann hätte man
                                GedVertex extends Vertex
                            und dergleichen.
                            Problem bei der jetzigen Darstellung, bei List<GedVertex> ist das nicht
                            kompatibel zu List<Vertex>.
                        
- Line durch neue PixelLine ersetzen. die Pixelklassen nach Swing...
                            Allerdings gibt es da schon eine...
- Decorator-Pattern für Graphen verwenden... ?
                            Dann ließe er sich elegant für alle Einsatzzwecke abwandeln und man könnte ihn
                            auch direkt im Algorithmus verwenden.
                            Allerdings hapert es bei Listen von Klassen...
- Layer? man könnte dann rechts verwalten welche angezeigt werden sollen
                            und hätte für jeden Layer einen Graphen.
- Zeichnen von Mehrfachkanten als Kreisbögen. Per Option in den Metadaten des
                            Graphen.
                            Im GraphPainter bei der Kantendarstellung dann erst alle Kanten
                            sammeln, die zwischen je zwei Ecken verlaufen, Radien und so selbst bestimmen.
                            
 Siehe ShortTestCodes.graphicalUserInterface.DrawArc.
 Achtung, dann muss natürlich auch sowas wie Rechtsklick angepasst werden.
- Schlingen erlauben? Darstellung an Eckenradius anpassen und ermitteln,
                            wo der größte freie Winkel durch die Kanten an dieser Ecke sind und
                            diesen mit der oder den Schlingen füllen.
                            Achtung, dann muss natürlich auch sowas wie Rechtsklick angepasst
                            werden.
- Wenn alles andere fertig ist, kann über Animation nachgedacht werden.
                            Das läuft dann als eigene Historie, in die bestimmt Graphen gespeichert werden.
                            
 Eine Animationsverwaltung mit kleinen Bildern der Graphen wie im Perlprogramm
                            sollte dann
                            folgen.
                            So ähnlich wie der EdgeDeleteDialog.
- Generelle Behandlung von Algorithmen überlegen, Schnittstelle Algorithm?
- Beispielagorithmus schreiben, der zu jedem Zwischenstand einen Graphen
                            speichert. Ggf. sogar als Animation.
                            DFS oder BFS oder so.
- Farbalgorithmen aus meiner Diplomarbeit von C++ nach Java übertragen
                            und auf Graphen anwendbar machen.
- Test auf plättbaren Graphen einbauen. (Muss K5 oder K3,3 als
                            Subgraphen finden. Ob es da schnelle Algorithmen gibt?)
- GED als Android-App?
 
- Dokumentation:
                    
                        - Hilfeseiten mit Texten und Bildern erstellen, die im Programm mit F1 angezeigt
                            werden kann, sobald GED weiter ist, so dass diese nicht dauernd
                            überarbeitet werden müssen.
                            
 Buttons im Text abbilden.
- Nach den ganzen Beispielgraphen auf der GED-Seite schauen.
                            Wenn ich die nicht mehr habe, nachbauen!
- Von Zeit zu Zeit Webseite und diese Texte synchron halten.
 
 
        
        
        
            Versionshistorie GED
            Version 0.2.33 vom 03.07.2019
            
                - Im Eckendialog werden die Graphen nun zentriert um die Ecke um die es geht
                    dargestellt werden. Das klappte vorher noch nicht so, dass die bearbeitete Ecke
                    dann im Zentrum zu sehen war.
- Behebung eines Fehlers, nach dem bestimmte Farben und Abstände beim laden von Ecke zu
                    Ecke übertragen wurden, da diese sich fälschlicher Weise das gleiche Objekt teilten.
Version 0.2.32 vom 02.07.2019
            
                - 
                    Weitere Modernisierungen an den Oberflächenklassen:
                    
                        - SizeChooser
- Auf den ShowTextDialog kann nun ganz verzichtet werden, statt dessen
                            wird der EditorDialog aus de.duehl.swing verwendet.
- Fehlerbehandlung verbessert.
- Es wird nun auf die neue GED-Seite in Java verwiesen.
 
- Vorhaben in todo.html aufgeräumt und sortiert.
Version 0.2.31 vom 19.06.2019
            
                - 
                    Vorbereitung für den Aufbau von Animationen in Algorithmen.
                
Version 0.2.30 vom 17.06.2019
            
                - 
                    Beim Speichern eines neuen Graphen wird nun auch das richtige Verzeichnis ausgewählt
                    und nicht das eine Stufe darüber.
                
Version 0.2.29 vom 17.06.2019
            
                - 
                    Ecken haben nun einen sinnvollen Default-Abstand für Beschriftung und Gewicht,
                    vorher war dieser (0, 0).
                
- 
                    Überarbeitung Laden und Speichern im ged4-Format. Nun werden nur alle
                    nicht-default-Werte abgespeichert.
                
Version 0.2.28 vom 14.06.2019
            
                - 
                    Einbau der Option, dass der Graph auch ungerichtet sein kann.
                    
                        - Anpassung des Graphen und des Speicherns und Ladens.
- Eintrag im Menü Bearbeiten / Metadaten.
- Anpassung der Darstellung für ungerichtete Graphen.
- Anpassung der Einfüge-Modi in der Gui und im GraphPanel.
 
- 
                    Nun wird auch der alte Name bei Speichern unter im Dialog zur Auswahl des neuen Namens
                    angezeigt.
                
Version 0.2.27 vom 14.06.2019
            
                - 
                    Umstellung auf Liste von Ecken im Graphen statt der komplizierteren Verwaltung mit
                    Adjazenzlisten. Diese sind zwar in Graphenalgorithmen die zu bevorzugende
                    Implementation eines Graphen, weil sie deutliche Geschwindigkeitsvorteile bieten,
                    hier geht es ja aber nur um die Darstellung und wenn wir später Ergebnisse aus
                    Algrithmen als Ged-Graphen darstellen wollen, reicht ein einfacher Konverter, der uns
                    die passenden Graphen erzeugt.
                
Version 0.2.26 vom 14.06.2019
            
                - 
                    Gesicherte letzte Version mit Adjazenzlisten.
                
Version 0.2.25 vom 27.05.2019
            
                - 
                    Nicht nur beim Speichern unter, auch beim normalen Speichern kam die Frage nach dem Namen
                    der Datei und dieser wurde auch nicht in der Titelzeile des Fensters angezeigt,. Beides ist
                    nun behoben.
                
Version 0.2.24 vom 27.05.2019
            
                - Beheben eniger Bugs rund um den Ecken-Bearbeitungsdialog..
Version 0.2.23 vom 27.05.2019
            
                - Im Eckendialog werden nun alle Informationen gleich im angezeigten Graphen aktualisiert.
                     Der Teilgraph wird nun hübscher zentriert dargestellt.
- Im Kantendialog werden nun alle Informationen gleich im angezeigten Graphen aktualisiert.
                
Version 0.2.22 vom 27.05.2019
            
                - Im Eckendialog wird nun auch ein Teilgraph angezeigt, leider ebenfalls noch nicht
                    automatisch aktualisiert.
Version 0.2.21 vom 27.05.2019
            
                - Im Kantendialog werden nun die Abstände wieder richtig initialisiert, so dass sich der
                    Dialog ordnungsgemäß beenden lässt.
- Im Kantendialog kann man nun auch wieder nicht-numerische Beeschriftungen eingeben.
- Das Löschen der Kante aus dem Kantendialog hinterlegt nun auch eine Änderung in der
                    Historie, so dass es zurückgenommen werden kann.
- Im Kantendialog werden nun die Default-Farben für die Beschriftung, das Gewicht, die
                    Kapazität und den Fluss richtig gesetzt, wenn der Benutzer die Farbe der Ecke ändert.
- Im Ecken- und Kantendialog werden nun die Default-Farben für die Beschriftung, das Gewicht,
                    die Kapazität und den Fluss richtig gesetzt, wenn der Benutzer die Farbe der Ecke ändert
                    und den Dialog erneut öffnet.
- 
                    Weitere Modernisierungen an der Oberflächenklassen:
                    
                        - EdgeDialog - Ausplagerung der Eingabeteile für die Dicke in eigene Klassen,
                            die sich zur Wahl des Radius im Eckendialog wiederverwenden lässt. Außerdem wurde
                            der EdgeStyleChooser ausgelagert, einfach nur um Dinge besser zu trennen.
- VertexDialog
 
Version 0.2.20 vom 24.05.2019
            
                - Todos aus Kommentaren in GedVersion in todo.html übernommen.
- 
                    Weitere Modernisierungen an der Oberflächenklassen:
                    
                    Neue Klassen und Interfaces
                    
                        - ColorSetter
- DefaultOrOwnColorChooser
- SwitchableValueDistanceAndColorChooser
- ValueDistanceAndColorChooser
 
- Neue Klasse SubgraphCreator und Verwendnung dieser im
                    EdgeDeleteDialog zur Anzeige der Kante.
Version 0.2.19 vom 22.05.2019
            
                - 
                    Ich habe damit begonnen, die Oberflächenklassen zu modernisieren.
                    
                        - 
                            Entfernung der individuellen Vordergrund- und Hintergrundfarbe.
                            Der GED soll sich an das Betriebsssytem anpassen.
                        
- EdgeDeleteDialog
- CreateGui
- GedGui
- Gui
- MenuCreation komplette Überarbeitung inklusive Aufteilung
- GedActionListener entfernt
 Neue Klassen und Interfaces
                        - ModusButtonMouseListener
- SubGraphToggleButton
 
- Änderungen, TODO und Hilfe mit eingebaut, wenn auch die Hilfe und TODO noch leer
                    sind.
Version 0.2.18 vom 21.05.2019
            
                - 
                    Verwendung von Konstanten beim Laden und Speichern im ged4-Format.
                
Version 0.2.17 vom 21.05.2019
            
                - 
                    Refakturierung des Ladens des ged3-Formates im Ged3FormatLoader.
                
- 
                    Reparatur des Speicherns des ged3-Formates im Ged3FormatSaver.
                    Noch ist keine hundertprozentige Kompatibilität zur Perlversion hergestellt.
                
Version 0.2.16 vom 21.05.2019
            
                - 
                    Auslagerung des Ladens aus Graph in den Formaten .ged, .ged2 und .ged4, nachdem zuvor
                    bereits .ged3 ausgelagert wurde.
                
- 
                    Auslagerung des Speichers aus Graph in den Formaten .ged, .ged2, .ged3 und .ged4.
                
- 
                    Einzeichnen des Hintergrundbildes funktioniert, es stimmten nur auf meinem neuen Rechner
                    die Pfade in den gespeicherten Dateien nicht mehr.
                
- 
                    Refakturierung des Ladens des ged3-Formates im Ged3FormatLoader.
                
- 
                    Umstellung einiger Werte wie Abstände des Grids und Koordinaten von
                    Ecken von double auf int.
                
- 
                    Berücksichtigigung der dicksten Ecke beim Maximieren von Graphen. Beschriftungen können
                    immer noch außerhalb des Sichtfelds liegen, aber das ist schonmal ein fortschritt.