mirror of
https://codeberg.org/qg-info-unterricht/zpg-graphentester.git
synced 2026-03-24 20:48:26 +01:00
Sync with upstream
This commit is contained in:
parent
39a2f13410
commit
66e8fa72bf
135 changed files with 38902 additions and 37757 deletions
|
|
@ -3,6 +3,11 @@ package control;
|
|||
import imp.*;
|
||||
import graph.*;
|
||||
import algorithmen.*;
|
||||
import java.io.FileReader;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.FileWriter;
|
||||
|
||||
import javafx.fxml.*;
|
||||
import javafx.scene.control.*;
|
||||
|
|
@ -18,6 +23,7 @@ import java.io.File;
|
|||
import java.nio.file.*;
|
||||
import javafx.stage.FileChooser.ExtensionFilter;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.geometry.Rectangle2D;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -26,11 +32,14 @@ import javafx.collections.ObservableList;
|
|||
* Die Klasse Controller stellt den Controller des Hauptfensters / Menu dar.
|
||||
*
|
||||
* @author Thomas Schaller
|
||||
* @version v6.7 (9.12.2020)
|
||||
* @version 03.03.2023 (v7.1)
|
||||
* v7.0: Die aktuelle Bildschirmposition und der angezeigte Graph werden in config.csv abgelegt.
|
||||
* v7.1: Verzeichnisauswahl für Laden/Speichern verbessert
|
||||
*/
|
||||
|
||||
public class Controller {
|
||||
private String version = "6.8 (Februar 2021)";
|
||||
private String version = "7.0 (Februar 2023)";
|
||||
private String pfad; // Pfad der aktuell angezeigten Datei
|
||||
|
||||
@FXML
|
||||
private TabPane tpRekursionen;
|
||||
|
|
@ -74,8 +83,10 @@ public class Controller {
|
|||
private FileChooser dateidialog;
|
||||
private Graph graph;
|
||||
private GraphOptions options;
|
||||
private Stage stage;
|
||||
|
||||
public void initialize() {
|
||||
|
||||
dateidialog = new FileChooser();
|
||||
dateidialog.setInitialDirectory(new File("beispielgraphen"));
|
||||
|
||||
|
|
@ -85,6 +96,60 @@ public class Controller {
|
|||
tpRekursionen.getSelectionModel().selectedItemProperty().
|
||||
addListener((value, tabOld, tabNew) -> changeTab(tabOld, tabNew));
|
||||
|
||||
BufferedReader in =null;
|
||||
try{
|
||||
in = new BufferedReader(new FileReader("config.csv"));
|
||||
String fullScreen = in.readLine();
|
||||
String posSize = in.readLine();
|
||||
String[] ps = posSize.split(",");
|
||||
Rectangle2D ss = Screen.getPrimary().getBounds();
|
||||
|
||||
stage.setX(Double.parseDouble(ps[0]));
|
||||
stage.setY(Double.parseDouble(ps[1]));
|
||||
stage.setWidth(Math.min(Double.parseDouble(ps[2]), ss.getWidth()-Double.parseDouble(ps[0])));
|
||||
stage.setHeight(Math.min(Double.parseDouble(ps[3]), ss.getHeight()-Double.parseDouble(ps[1])));
|
||||
String[] fs = fullScreen.split(",");
|
||||
if(fs[0].equals("true")) stage.setFullScreen(true);
|
||||
if(fs[1].equals("true")) stage.setMaximized(true);
|
||||
pfad = in.readLine();
|
||||
File f = new File(pfad);
|
||||
f.getCanonicalPath();
|
||||
if(!pfad.isBlank() && f.exists()){
|
||||
graphLaden(pfad);
|
||||
dateidialog.setInitialDirectory((f.getAbsoluteFile()).getParentFile());
|
||||
} else {
|
||||
pfad = "";
|
||||
}
|
||||
}
|
||||
catch(Exception e) {
|
||||
pfad = "";
|
||||
dateidialog.setInitialDirectory(new File("beispielgraphen"));
|
||||
}
|
||||
finally{
|
||||
try{if(in != null) in.close();} catch(IOException e) {}
|
||||
showTitle();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void saveAktConfig() {
|
||||
PrintWriter pWriter = null;
|
||||
String s = "config.csv";
|
||||
try {
|
||||
pWriter = new PrintWriter(new FileWriter(s));
|
||||
pWriter.println(stage.isFullScreen()+","+stage.isMaximized());
|
||||
stage.setFullScreen(false);
|
||||
stage.setMaximized(false);
|
||||
pWriter.println(stage.getX()+","+stage.getY()+","+stage.getWidth()+","+ stage.getHeight());
|
||||
pWriter.println(pfad);
|
||||
} catch (IOException ioe) {
|
||||
ioe.printStackTrace();
|
||||
} finally {
|
||||
if (pWriter != null) {
|
||||
pWriter.flush();
|
||||
pWriter.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void changeTab(Tab tabOld, Tab tabNew) {
|
||||
|
|
@ -113,20 +178,26 @@ public class Controller {
|
|||
|
||||
}
|
||||
catch(Exception e) {
|
||||
System.out.println(e);
|
||||
// System.out.println(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void setStage(Stage s){
|
||||
stage = s;
|
||||
}
|
||||
|
||||
@FXML
|
||||
void mNeuerGraph(ActionEvent event) {
|
||||
while(tpRekursionen.getTabs().size()>1) tpRekursionen.getTabs().remove(1);
|
||||
|
||||
TabMitController tc = (TabMitController) (tpRekursionen.getTabs().get(0));
|
||||
options = new GraphOptions();
|
||||
|
||||
graph = new Graph();
|
||||
options = new GraphOptions(graph);
|
||||
tc.setGraph(graph, options);
|
||||
pfad = "";
|
||||
|
||||
showTitle();
|
||||
menuChangeAnsicht();
|
||||
}
|
||||
|
||||
|
|
@ -154,7 +225,7 @@ public class Controller {
|
|||
tpRekursionen.getSelectionModel().select(newtab);
|
||||
}
|
||||
catch(Exception e) {
|
||||
System.out.println(e);
|
||||
//System.out.println(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -173,7 +244,7 @@ public class Controller {
|
|||
tpRekursionen.getSelectionModel().select(newtab);
|
||||
}
|
||||
catch(Exception e) {
|
||||
System.out.println(e);
|
||||
// System.out.println(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -233,10 +304,11 @@ public class Controller {
|
|||
|
||||
@FXML
|
||||
public void mBeenden(ActionEvent event) {
|
||||
saveAktConfig();
|
||||
schliesseTabs();
|
||||
((Stage)tpRekursionen.getScene().getWindow()).close();
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
|
||||
void menuChangeAnsicht() {
|
||||
TabMitController tc = (TabMitController) (tpRekursionen.getSelectionModel().getSelectedItem());
|
||||
|
|
@ -322,43 +394,74 @@ public class Controller {
|
|||
|
||||
@FXML
|
||||
void mOeffnen(ActionEvent event) {
|
||||
dateidialog.getExtensionFilters().clear();
|
||||
dateidialog.getExtensionFilters().add(new ExtensionFilter("Graph-Datei (*.csv)", "*.csv"));
|
||||
|
||||
File file = dateidialog.showOpenDialog(null);
|
||||
if (file != null) {
|
||||
graphLaden(file.getAbsolutePath());
|
||||
dateidialog.setInitialDirectory(file.getAbsoluteFile().getParentFile());
|
||||
}
|
||||
}
|
||||
|
||||
void graphLaden(String dateiname) {
|
||||
void graphLaden(String p) {
|
||||
|
||||
while(tpRekursionen.getTabs().size()>2) tpRekursionen.getTabs().remove(1);
|
||||
|
||||
TabMitController tc = (TabMitController) (tpRekursionen.getTabs().get(0));
|
||||
options = new GraphOptions();
|
||||
|
||||
Table csvParser = new Table(dateiname,"",',','"');
|
||||
options.ladeGraph(csvParser);
|
||||
graph = new Graph();
|
||||
graph.ladeGraph(csvParser);
|
||||
File f = new File(p);
|
||||
if(f.exists() ){
|
||||
pfad = p;
|
||||
|
||||
Table csvParser = new Table(pfad,"",',','"');
|
||||
|
||||
graph = new Graph();
|
||||
graph.ladeGraph(csvParser);
|
||||
|
||||
options = new GraphOptions(graph);
|
||||
options.ladeGraph(csvParser);
|
||||
|
||||
tc.setGraph(graph, options);
|
||||
if(tpRekursionen.getTabs().size()>1){
|
||||
tc = (TabMitController) (tpRekursionen.getTabs().get(1));
|
||||
tc.setGraph(graph, options);
|
||||
}
|
||||
|
||||
if(tpRekursionen.getTabs().size()>1){
|
||||
tc = (TabMitController) (tpRekursionen.getTabs().get(1));
|
||||
tc.setGraph(graph, options);
|
||||
}
|
||||
}
|
||||
|
||||
menuChangeAnsicht();
|
||||
showTitle();
|
||||
|
||||
}
|
||||
|
||||
public void showTitle() {
|
||||
|
||||
if(stage!=null) {
|
||||
if(pfad == null || pfad.equals("")) {
|
||||
stage.setTitle("GraphTester by Thomas Schaller - Version "+version);
|
||||
} else {
|
||||
String[] arr = pfad.split("[/\\\\]");
|
||||
String dateiname = arr[arr.length-1];
|
||||
stage.setTitle("GraphTester by Thomas Schaller - Version "+version+" - "+dateiname);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@FXML
|
||||
void mSchliessen(ActionEvent event) {
|
||||
mNeuerGraph(event);
|
||||
mNeuerGraph(event);
|
||||
}
|
||||
|
||||
@FXML
|
||||
void mSpeichern(ActionEvent event) {
|
||||
dateidialog.getExtensionFilters().clear();
|
||||
dateidialog.getExtensionFilters().add(new ExtensionFilter("Graph-Datei (*.csv)", "*.csv"));
|
||||
dateidialog.getExtensionFilters().clear();
|
||||
dateidialog.getExtensionFilters().add(new ExtensionFilter("Graph-Datei (*.csv)", "*.csv"));
|
||||
if(!pfad.isBlank())
|
||||
dateidialog.setInitialFileName(new File(pfad).getName());
|
||||
else
|
||||
dateidialog.setInitialFileName("");
|
||||
|
||||
File file = dateidialog.showSaveDialog(null);
|
||||
if (file != null) {
|
||||
try{
|
||||
|
|
@ -371,7 +474,9 @@ public class Controller {
|
|||
String name = dateiName.substring(dateiName.lastIndexOf("\\")+1);
|
||||
if(name.contains(".")) dateiName = dateiName.substring(0, dateiName.lastIndexOf("."));
|
||||
Files.write(Paths.get(file.getAbsolutePath()), text.getBytes());
|
||||
|
||||
pfad = file.getAbsolutePath();
|
||||
dateidialog.setInitialDirectory(file.getAbsoluteFile().getParentFile());
|
||||
showTitle();
|
||||
} catch(Exception e) {
|
||||
|
||||
}
|
||||
|
|
@ -381,21 +486,22 @@ public class Controller {
|
|||
|
||||
@FXML
|
||||
void mBildExportieren(ActionEvent event) {
|
||||
dateidialog.getExtensionFilters().clear();
|
||||
dateidialog.getExtensionFilters().add(new ExtensionFilter("Bild des Graphen", "*.png","*.gif"));
|
||||
File file = dateidialog.showSaveDialog(null);
|
||||
dateidialog.getExtensionFilters().clear();
|
||||
dateidialog.getExtensionFilters().add(new ExtensionFilter("Bild des Graphen", "*.png","*.gif"));
|
||||
File file = dateidialog.showSaveDialog(null);
|
||||
if (file != null) {
|
||||
try{
|
||||
TabMitController tc = (TabMitController) (tpRekursionen.getSelectionModel().getSelectedItem());
|
||||
Picture p = tc.getViewer().updateImage();
|
||||
String dateiName = file.getAbsolutePath();
|
||||
p.save(dateiName);
|
||||
p.save(dateiName);
|
||||
|
||||
} catch(Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
void mUeber(ActionEvent event) {
|
||||
Alert alert = new Alert(AlertType.INFORMATION);
|
||||
|
|
|
|||
|
|
@ -25,13 +25,13 @@ import java.util.Optional;
|
|||
* zur Editierung eines Graphs dar.
|
||||
*
|
||||
* @author Thomas Schaller
|
||||
* @version v6.7 (9.12.2020)
|
||||
* @version 03.03.2023 (v7.1)
|
||||
* v7.1: Aktualisierung der Anzeige bei Wechsel gewichtet/ungewichtet angepasst
|
||||
* v6.9: Context-Menü schließt, wenn an andere Stelle geklickt wird
|
||||
*/
|
||||
|
||||
|
||||
public class EditTabMitController extends TabMitController {
|
||||
|
||||
|
||||
public EditTabMitController(Graph graph, GraphOptions options) {
|
||||
this.graph = graph;
|
||||
this.options = options;
|
||||
|
|
@ -127,6 +127,13 @@ public class EditTabMitController extends TabMitController {
|
|||
void setGewichtet(boolean gewichtet) {
|
||||
graph.setGewichtet(gewichtet);
|
||||
options.showEdgeWeights = gewichtet;
|
||||
if(graph.isGewichtet()) {
|
||||
options.kanteKurztext = new String[]{"Gewicht"};
|
||||
options.kanteLangtext = new String[]{"Gewicht","Markiert","Gelöscht"};
|
||||
} else {
|
||||
options.kanteKurztext = new String[]{};
|
||||
options.kanteLangtext = new String[]{"Markiert","Gelöscht"};
|
||||
}
|
||||
update();
|
||||
}
|
||||
|
||||
|
|
@ -179,7 +186,6 @@ public class EditTabMitController extends TabMitController {
|
|||
|
||||
@FXML
|
||||
void graphClicked(MouseEvent event) { // MousePressed-Event
|
||||
|
||||
viewer.mouseClicked(event);
|
||||
viewer.mouseDown(event);
|
||||
if((viewer.getSelectedKnoten() != null || viewer.getSelectedKante() != null) && event.isSecondaryButtonDown()) { // Contextmenu
|
||||
|
|
@ -200,11 +206,13 @@ public class EditTabMitController extends TabMitController {
|
|||
if (viewer.getSelectedKnoten() != null)
|
||||
contextMenu.getItems().add( item3 );
|
||||
|
||||
contextMenu.show(viewer, event.getScreenX(), event.getScreenY());
|
||||
getViewer().setContextMenu(contextMenu);
|
||||
//contextMenu.show(viewer, event.getScreenX(), event.getScreenY());
|
||||
}
|
||||
}
|
||||
|
||||
public void mLoesche() {
|
||||
viewer.setContextMenu(null);
|
||||
if(viewer.getSelectedKnoten() != null) {
|
||||
graph.entferneKnoten(viewer.getSelectedKnoten());
|
||||
update();
|
||||
|
|
@ -216,6 +224,8 @@ public class EditTabMitController extends TabMitController {
|
|||
}
|
||||
|
||||
public void mWertAendern() {
|
||||
viewer.setContextMenu(null);
|
||||
|
||||
Knoten k = viewer.getSelectedKnoten();
|
||||
Kante ka = viewer.getSelectedKante();
|
||||
if(k != null || ka !=null) {
|
||||
|
|
@ -242,6 +252,8 @@ public class EditTabMitController extends TabMitController {
|
|||
}
|
||||
|
||||
public void mInfotextAendern() {
|
||||
viewer.setContextMenu(null);
|
||||
|
||||
Knoten k = viewer.getSelectedKnoten();
|
||||
if(k != null ) {
|
||||
TextInputDialog dialog = new TextInputDialog(k.getInfotext());
|
||||
|
|
|
|||
|
|
@ -15,6 +15,9 @@ import javafx.scene.text.*;
|
|||
import javafx.geometry.Pos;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.stage.*; // Dateiöffnen / Speichern-Dialog
|
||||
import javafx.application.Platform;
|
||||
import javafx.scene.input.Clipboard;
|
||||
import javafx.scene.input.ClipboardContent;
|
||||
import java.io.File;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
|
|
@ -23,11 +26,11 @@ import java.nio.file.*;
|
|||
import java.util.Collections;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.Iterator;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.regex.Pattern;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
import javafx.collections.ObservableList;
|
||||
|
||||
|
|
@ -37,9 +40,13 @@ import javafx.collections.ObservableList;
|
|||
* durchgeführt werden.
|
||||
*
|
||||
* @author Thomas Schaller
|
||||
* @version v6.7 (9.12.2020)
|
||||
* @version 03.03.2023 (v7.0)
|
||||
* v7.1: Fehler bei Aktualisierung des Hilfefensters behoben, Splitpane statt HBox
|
||||
* v7.0: Mechanismus geändert, so dass die init-Methode des Algorithmus beim Wechesel eines Algorithmus
|
||||
* aufgerufen wird, um die für diesen Algorithmus passenden Anzeigeeinstellungen zu setzen.
|
||||
* v6.9: Hilfefenster ist in Simulationsfenster integriert
|
||||
*/
|
||||
public class SimulationTabMitController extends TabMitController {
|
||||
public class SimulationTabMitController extends TabMitController implements Hilfe {
|
||||
|
||||
@FXML
|
||||
private ComboBox<String> cbAlgorithmen;
|
||||
|
|
@ -61,22 +68,23 @@ public class SimulationTabMitController extends TabMitController {
|
|||
|
||||
private GraphAlgo aktAlgo = null;
|
||||
private ArrayList<String> algoNamen;
|
||||
private Hilfefenster hilfe;
|
||||
private Hilfe hilfe;
|
||||
|
||||
public SimulationTabMitController(Graph graph, GraphOptions options) {
|
||||
this.graph = graph;
|
||||
this.options = options;
|
||||
this.setOnClosed((ev)->afterClosing());
|
||||
|
||||
}
|
||||
|
||||
public void initialize() {
|
||||
this.algoNamen = new ArrayList<String>();
|
||||
try {
|
||||
File verzeichnis = new File("algorithmen");
|
||||
if(verzeichnis != null) {
|
||||
String[] entries = verzeichnis.list();
|
||||
for (String name : entries) {
|
||||
if (name.startsWith("GraphAlgo_") && name.endsWith(".class")){
|
||||
|
||||
File verzeichnis = new File("algorithmen");
|
||||
if(verzeichnis != null && verzeichnis.isDirectory()) {
|
||||
String[] entries = verzeichnis.list();
|
||||
for (String name : entries) {
|
||||
if (name.startsWith("GraphAlgo_") && name.endsWith(".class")){
|
||||
try{
|
||||
Class c = Class.forName("algorithmen."+name.split(Pattern.quote("."))[0]);
|
||||
GraphAlgo a = ((GraphAlgo)(c).getDeclaredConstructor().newInstance());
|
||||
int i = 0;
|
||||
|
|
@ -87,13 +95,23 @@ public class SimulationTabMitController extends TabMitController {
|
|||
|
||||
algoNamen.add(i, "algorithmen."+name.split(Pattern.quote("."))[0]);
|
||||
}
|
||||
} // end of for
|
||||
}
|
||||
verzeichnis = new File( "eigeneAlgorithmen" );
|
||||
if(verzeichnis != null) {
|
||||
String[] entries = verzeichnis.list();
|
||||
for (String name : entries) {
|
||||
if (name.startsWith("GraphAlgo_") && name.endsWith(".class")){
|
||||
catch(ExceptionInInitializerError e) {}
|
||||
catch(LinkageError e){}
|
||||
catch(ClassNotFoundException e) {}
|
||||
catch(NoSuchMethodException e) {}
|
||||
catch(InstantiationException e) {}
|
||||
catch(IllegalAccessException e) {}
|
||||
catch(InvocationTargetException e) {}
|
||||
|
||||
}
|
||||
} // end of for
|
||||
}
|
||||
verzeichnis = new File( "eigeneAlgorithmen" );
|
||||
if(verzeichnis != null && verzeichnis.isDirectory()) {
|
||||
String[] entries = verzeichnis.list();
|
||||
for (String name : entries) {
|
||||
if (name.startsWith("GraphAlgo_") && name.endsWith(".class")){
|
||||
try{
|
||||
Class c = Class.forName("eigeneAlgorithmen."+name.split(Pattern.quote("."))[0]);
|
||||
GraphAlgo a = ((GraphAlgo)(c).getDeclaredConstructor().newInstance());
|
||||
int i = 0;
|
||||
|
|
@ -104,12 +122,21 @@ public class SimulationTabMitController extends TabMitController {
|
|||
|
||||
algoNamen.add(i, "eigeneAlgorithmen."+name.split(Pattern.quote("."))[0]);
|
||||
}
|
||||
} // end of for
|
||||
}
|
||||
} catch(Exception e)
|
||||
{
|
||||
System.out.println("Exception " + e);
|
||||
}
|
||||
catch(ExceptionInInitializerError e) {}
|
||||
catch(LinkageError e){}
|
||||
catch(ClassNotFoundException e) {}
|
||||
catch(NoSuchMethodException e) {}
|
||||
catch(InstantiationException e) {}
|
||||
catch(IllegalAccessException e) {}
|
||||
catch(InvocationTargetException e) {}
|
||||
|
||||
}
|
||||
} // end of for
|
||||
}
|
||||
|
||||
cbAlgorithmen.getSelectionModel().selectedItemProperty().addListener((options, oldValue, newValue) -> {
|
||||
changeAlgorithm();
|
||||
});
|
||||
|
||||
viewer.setGraph(graph,options);
|
||||
this.hilfe = null;
|
||||
|
|
@ -120,44 +147,39 @@ public class SimulationTabMitController extends TabMitController {
|
|||
bStart.managedProperty().bind(bStart.visibleProperty());
|
||||
bBreak.managedProperty().bind(bBreak.visibleProperty());
|
||||
bBreak.setVisible(false);
|
||||
}
|
||||
|
||||
private void afterClosing() {
|
||||
if (hilfe != null) hilfe.close();
|
||||
}
|
||||
//------------- Hilfefunktion
|
||||
loescheAlles();
|
||||
zustaende = new ArrayList<List<String>>();
|
||||
aktuell = null;
|
||||
reviewAllowed = false;
|
||||
tvAblauf.getSelectionModel().selectedIndexProperty().addListener((obs,oldValue, newValue)->showState());
|
||||
|
||||
private void hilfefensterErzeugen() {
|
||||
try { // try-catch ist notwendig, um Fehler durch fehlende Dateien abzufangen.
|
||||
if(hilfe != null) hilfe.close();
|
||||
|
||||
hilfe = new Hilfefenster();
|
||||
FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/hilfefenster.fxml"));
|
||||
loader.setController(hilfe);
|
||||
Scene scene = new Scene((VBox) loader.load());
|
||||
Image icon = new Image("/view/icon.png");
|
||||
hilfe.getIcons().add(icon);
|
||||
hilfe.setTitle("Hilfefenster");
|
||||
hilfe.setScene(scene);
|
||||
hilfe.setX(0);
|
||||
hilfe.setY(0);
|
||||
}
|
||||
catch(Exception e) {
|
||||
System.out.println(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showHilfe(boolean b) {
|
||||
if(b) {
|
||||
hilfefensterErzeugen();
|
||||
hilfe.show();
|
||||
if(aktAlgo != null && aktAlgo.isAlive()) {
|
||||
lAblauf.setVisible(true);
|
||||
tvAblauf.setVisible(true);
|
||||
bClipboard.setVisible(true);
|
||||
|
||||
hilfe = this;
|
||||
if(aktAlgo != null ) {
|
||||
aktAlgo.setGUIElemente(viewer,hilfe);
|
||||
hilfe.append("Unvollständiger Ablauf");
|
||||
if(aktAlgo.isAlive())
|
||||
hilfe.append("Unvollständiger Ablauf");
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (hilfe != null) hilfe.close();
|
||||
lAblauf.setVisible(false);
|
||||
tvAblauf.setVisible(false);
|
||||
bClipboard.setVisible(false);
|
||||
if(aktAlgo != null && aktAlgo.isAlive()) aktAlgo.setGUIElemente(viewer, null);
|
||||
hilfe = null;
|
||||
loescheAlles();
|
||||
zustaende = new ArrayList<List<String>>();
|
||||
aktuell = null;
|
||||
reviewAllowed = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -166,48 +188,56 @@ public class SimulationTabMitController extends TabMitController {
|
|||
mReset(null);
|
||||
}
|
||||
|
||||
@FXML
|
||||
void mReset(ActionEvent event) {
|
||||
public void changeAlgorithm() {
|
||||
if(aktAlgo != null && aktAlgo.isAlive()) aktAlgo.stop();
|
||||
graph.initialisiereAlleKnoten();
|
||||
graph.initialisiereAlleKanten();
|
||||
update();
|
||||
//gp.setInfoText(gp.getGraph().toString());
|
||||
|
||||
bStep.setDisable(false);
|
||||
bStart.setDisable(false);
|
||||
bStart.setVisible(true);
|
||||
bBreak.setVisible(false);
|
||||
if (hilfe != null) hilfe.loescheAlles();
|
||||
this.aktAlgo = null;
|
||||
|
||||
if(cbAlgorithmen.getSelectionModel().getSelectedIndex() >= 0) {
|
||||
|
||||
try{
|
||||
ClassLoader parentClassLoader = MyClassLoader.class.getClassLoader();
|
||||
MyClassLoader classLoader = new MyClassLoader(parentClassLoader);
|
||||
Class c = classLoader.loadClass(algoNamen.get(cbAlgorithmen.getSelectionModel().getSelectedIndex()));
|
||||
|
||||
aktAlgo = ((GraphAlgo)(c).getDeclaredConstructor().newInstance());
|
||||
aktAlgo.setStartKnoten(viewer.getSelectedKnoten());
|
||||
aktAlgo.setGUIElemente(viewer, hilfe);
|
||||
aktAlgo.setSpeed(910-(int) (sSpeed.getValue()));
|
||||
aktAlgo.init();
|
||||
} catch( Exception e) {
|
||||
System.out.println(e);
|
||||
}
|
||||
}
|
||||
|
||||
update();
|
||||
|
||||
}
|
||||
|
||||
@FXML
|
||||
void mReset(ActionEvent event) {
|
||||
|
||||
changeAlgorithm();
|
||||
}
|
||||
|
||||
@FXML
|
||||
void mStep(ActionEvent event) {
|
||||
|
||||
if (aktAlgo == null ) {
|
||||
if(cbAlgorithmen.getSelectionModel().getSelectedIndex() >= 0) {
|
||||
try{
|
||||
ClassLoader parentClassLoader = MyClassLoader.class.getClassLoader();
|
||||
MyClassLoader classLoader = new MyClassLoader(parentClassLoader);
|
||||
Class c = classLoader.loadClass(algoNamen.get(cbAlgorithmen.getSelectionModel().getSelectedIndex()));
|
||||
|
||||
aktAlgo = ((GraphAlgo)(c).getDeclaredConstructor().newInstance());
|
||||
aktAlgo.setStartKnoten(viewer.getSelectedKnoten());
|
||||
aktAlgo.setGUIElemente(viewer, hilfe);
|
||||
aktAlgo.setSpeed(910-(int) (sSpeed.getValue()));
|
||||
} catch( Exception e) {
|
||||
System.out.println(e);
|
||||
}
|
||||
aktAlgo.start();
|
||||
}
|
||||
if (aktAlgo == null) return;
|
||||
if (aktAlgo.getState() == Thread.State.NEW ) {
|
||||
aktAlgo.setStartKnoten(viewer.getSelectedKnoten());
|
||||
aktAlgo.start();
|
||||
} else {
|
||||
if(aktAlgo.isAlive()) {
|
||||
aktAlgo.setSpeed(910-(int) (sSpeed.getValue()));
|
||||
aktAlgo.setWaitforclick(false);
|
||||
//gp.setInfoText(aktAlgo.getInfo());
|
||||
|
||||
} else {
|
||||
//gp.setInfoText("Algorithmus ist beendet. "+aktAlgo.getInfo());
|
||||
bStep.setDisable(true);
|
||||
bStart.setDisable(true);
|
||||
bBreak.setDisable(true);
|
||||
|
|
@ -218,7 +248,6 @@ public class SimulationTabMitController extends TabMitController {
|
|||
} catch(Exception e) {}
|
||||
|
||||
if (!aktAlgo.isAlive()) {
|
||||
//gp.setInfoText("Algorithmus ist beendet"+aktAlgo.getInfo());
|
||||
bStep.setDisable(true);
|
||||
bStart.setDisable(true);
|
||||
bBreak.setDisable(true);
|
||||
|
|
@ -227,41 +256,19 @@ public class SimulationTabMitController extends TabMitController {
|
|||
|
||||
@FXML
|
||||
void mStart(ActionEvent event) {
|
||||
|
||||
if (aktAlgo == null ) {
|
||||
if(cbAlgorithmen.getSelectionModel().getSelectedIndex() >= 0) {
|
||||
try{
|
||||
ClassLoader parentClassLoader = MyClassLoader.class.getClassLoader();
|
||||
MyClassLoader classLoader = new MyClassLoader(parentClassLoader);
|
||||
Class c = classLoader.loadClass(algoNamen.get(cbAlgorithmen.getSelectionModel().getSelectedIndex()));
|
||||
|
||||
aktAlgo = ((GraphAlgo)(c).getDeclaredConstructor().newInstance());
|
||||
|
||||
aktAlgo.setStartKnoten(viewer.getSelectedKnoten());
|
||||
aktAlgo.setGUIElemente(viewer,hilfe);
|
||||
aktAlgo.setSpeed(910-(int) (sSpeed.getValue()));
|
||||
|
||||
} catch( Exception e) {
|
||||
System.out.println(e);
|
||||
}
|
||||
|
||||
aktAlgo.setStepping(false);
|
||||
aktAlgo.start();
|
||||
}
|
||||
if (aktAlgo == null) return;
|
||||
if (aktAlgo.getState() == Thread.State.NEW ) {
|
||||
aktAlgo.setStartKnoten(viewer.getSelectedKnoten());
|
||||
aktAlgo.setStepping(false);
|
||||
aktAlgo.start();
|
||||
} else {
|
||||
if(aktAlgo.isAlive()) {
|
||||
aktAlgo.setSpeed(910-(int) (sSpeed.getValue()));
|
||||
aktAlgo.setStepping(false);
|
||||
aktAlgo.setWaitforclick(false);
|
||||
//gp.setInfoText(aktAlgo.getInfo());
|
||||
|
||||
} else {
|
||||
//gp.setInfoText("Algorithmus ist beendet. "+aktAlgo.getInfo());
|
||||
|
||||
} // end of if-else
|
||||
}
|
||||
} // end of if-else
|
||||
|
||||
// gp.setInfoText(aktAlgo.getInfo());
|
||||
bStep.setDisable(true);
|
||||
bStart.setVisible(false);
|
||||
bBreak.setVisible(true);
|
||||
|
|
@ -277,4 +284,151 @@ public class SimulationTabMitController extends TabMitController {
|
|||
bStep.setDisable(false);
|
||||
}
|
||||
}
|
||||
|
||||
// --------- Hilfefenster --------------------------------------------
|
||||
@FXML
|
||||
private TreeView<String> tvAblauf;
|
||||
|
||||
@FXML
|
||||
private Label lAblauf;
|
||||
|
||||
@FXML
|
||||
private Button bClipboard;
|
||||
|
||||
private List<TreeItem<String>> stufen;
|
||||
private List<List<String>> zustaende;
|
||||
private TreeItem<String> last;
|
||||
private GraphPlotter gp;
|
||||
private List<String> aktuell;
|
||||
private boolean reviewAllowed;
|
||||
|
||||
public void setGraphPlotter(GraphPlotter gp) {
|
||||
this.gp = gp;
|
||||
}
|
||||
|
||||
public void loescheAlles() {
|
||||
Platform.runLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
stufen = new ArrayList<TreeItem<String>>();
|
||||
zustaende = new ArrayList<List<String>>();
|
||||
TreeItem<String> root = new TreeItem<String>("Algorithmus");
|
||||
root.setExpanded(true);
|
||||
last = root;
|
||||
tvAblauf.setRoot(root);
|
||||
tvAblauf.setShowRoot(false);
|
||||
stufen.add(root);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public void append(String text) {
|
||||
List<String> status = gp.getGraph().getStatus();
|
||||
Platform.runLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
last = new TreeItem<String>(text);
|
||||
stufen.get(stufen.size()-1).getChildren().add(last);
|
||||
zustaende.add(status);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public void indentMore() {
|
||||
Platform.runLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if(stufen.size() == 1) { // Hauptknoten
|
||||
TreeItem parent = stufen.get(0);
|
||||
List<TreeItem> children = parent.getChildren();
|
||||
for(int i=children.size()-1; i >= 0; i--) {
|
||||
TreeItem t = children.get(i);
|
||||
if(t.isExpanded()) {
|
||||
t.setExpanded(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
stufen.add(last);
|
||||
last.setExpanded(true);
|
||||
last.expandedProperty().addListener((b, o, n) -> showState());
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public void indentLess() {
|
||||
Platform.runLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if(stufen.size() > 1) stufen.remove(stufen.size()-1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setReviewAllowed(boolean a) {
|
||||
this.reviewAllowed = a;
|
||||
if(!reviewAllowed) tvAblauf.getSelectionModel().clearSelection();
|
||||
}
|
||||
|
||||
public void showState() {
|
||||
Platform.runLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if(reviewAllowed && tvAblauf.getSelectionModel().getSelectedIndex()>=0) {
|
||||
TreeItem s = tvAblauf.getSelectionModel().getSelectedItem();
|
||||
if(!s.isExpanded()) { // suche das letzte Kind
|
||||
while(s.getChildren().size()>0){
|
||||
List<TreeItem> c = s.getChildren();
|
||||
s = c.get(c.size()-1);
|
||||
}
|
||||
}
|
||||
gp.getGraph().setStatus(zustaende.get(calculateIndex(tvAblauf.getRoot(), s ,0)-1));
|
||||
gp.updateImage();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private int calculateIndex(TreeItem t, TreeItem search, int nr) {
|
||||
if(t == search) return nr;
|
||||
nr++;
|
||||
List<TreeItem> children = t.getChildren();
|
||||
for(TreeItem c : children) {
|
||||
int i = calculateIndex(c, search, nr);
|
||||
if(i>0) return i;
|
||||
nr = -i;
|
||||
}
|
||||
return -nr;
|
||||
}
|
||||
|
||||
@FXML
|
||||
void bCopyClicked(ActionEvent event) {
|
||||
final Clipboard clipboard = Clipboard.getSystemClipboard();
|
||||
final ClipboardContent content = new ClipboardContent();
|
||||
String s = "";
|
||||
for(Object c : tvAblauf.getRoot().getChildren()) {
|
||||
if(c instanceof TreeItem) {
|
||||
s += generateClipboardContent((TreeItem) c, "");
|
||||
}
|
||||
}
|
||||
|
||||
content.putString(s);
|
||||
|
||||
clipboard.setContent(content);
|
||||
}
|
||||
|
||||
private String generateClipboardContent(TreeItem t, String tab) {
|
||||
String s = tab+t.getValue();
|
||||
for(Object c : t.getChildren()) {
|
||||
if(c instanceof TreeItem) {
|
||||
s += generateClipboardContent((TreeItem) c, tab+" ");
|
||||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,11 +7,13 @@ import javafx.fxml.*;
|
|||
import javafx.scene.control.*;
|
||||
import javafx.event.*;
|
||||
import javafx.scene.input.MouseEvent;
|
||||
import javafx.scene.input.ContextMenuEvent;
|
||||
import javafx.scene.layout.*;
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.text.*;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.scene.control.Alert.AlertType;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -25,7 +27,8 @@ import javafx.collections.ObservableList;
|
|||
* oder eine Kante fokussiert.
|
||||
*
|
||||
* @author Thomas Schaller
|
||||
* @version v6.7 (9.12.2020)
|
||||
* @version 24.06.2021 (v6.9)
|
||||
* v6.9: Context-Menü für die ToDo-Liste: Knoten löschen
|
||||
*/
|
||||
|
||||
public class UnterTabMitController extends TabMitController {
|
||||
|
|
@ -33,7 +36,6 @@ public class UnterTabMitController extends TabMitController {
|
|||
@FXML
|
||||
private VBox infoBox;
|
||||
|
||||
|
||||
@FXML
|
||||
private Button wertButton;
|
||||
|
||||
|
|
@ -58,19 +60,18 @@ public class UnterTabMitController extends TabMitController {
|
|||
@FXML
|
||||
Button bStatus;
|
||||
|
||||
|
||||
@FXML
|
||||
Button bGehezu;
|
||||
|
||||
|
||||
@FXML
|
||||
Button bAnfang;
|
||||
|
||||
|
||||
@FXML
|
||||
Button bEnde;
|
||||
|
||||
|
||||
@FXML
|
||||
Button bSortieren;
|
||||
|
||||
|
||||
@FXML
|
||||
private CheckBox cbFarbeAutomatisch;
|
||||
|
||||
|
|
@ -91,14 +92,12 @@ public class UnterTabMitController extends TabMitController {
|
|||
getTabPane().getTabs().remove(this);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
buildAuswahl();
|
||||
|
||||
|
||||
this.bAnfang.managedProperty().bind(bAnfang.visibleProperty());
|
||||
this.bEnde.managedProperty().bind(bEnde.visibleProperty());
|
||||
this.bSortieren.managedProperty().bind(bSortieren.visibleProperty());
|
||||
|
||||
|
||||
viewer.setGraph(graph,options);
|
||||
viewer.setHvalue(0.5);
|
||||
|
|
@ -138,11 +137,11 @@ public class UnterTabMitController extends TabMitController {
|
|||
|
||||
super.initialize();
|
||||
}
|
||||
|
||||
|
||||
public void setGraph(Graph graph, GraphOptions options) {
|
||||
if(graph.getAnzahlKnoten()==0) {
|
||||
getTabPane().getTabs().remove(this);
|
||||
return;
|
||||
getTabPane().getTabs().remove(this);
|
||||
return;
|
||||
}
|
||||
options.fokusArt = this.options.fokusArt;
|
||||
options.auswahl = this.options.auswahl;
|
||||
|
|
@ -154,12 +153,10 @@ public class UnterTabMitController extends TabMitController {
|
|||
viewer.setRestrictTo(null);
|
||||
buildAuswahl();
|
||||
super.setGraph(graph,options);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void buildAuswahl() {
|
||||
|
||||
auswahl = new ArrayList<GraphElement>();
|
||||
if(options.auswahl == 0) { // Alle Knoten/Kanten gewählt
|
||||
if(options.fokusArt == 0) // Knoten
|
||||
|
|
@ -192,10 +189,10 @@ public class UnterTabMitController extends TabMitController {
|
|||
Knoten k = (Knoten) ge;
|
||||
String beschreibung="";
|
||||
if(options.showVertexInfo && !k.getInfotext().isEmpty())
|
||||
beschreibung = k.getInfotext();
|
||||
beschreibung = k.getInfotext();
|
||||
else
|
||||
beschreibung = "Knoten"+ graph.getNummer(k);
|
||||
|
||||
beschreibung = "Knoten"+ graph.getNummer(k);
|
||||
|
||||
if(options.showVertexValue) {
|
||||
if(k.getDoubleWert() == k.getIntWert())
|
||||
beschreibung += " ("+k.getIntWert()+")";
|
||||
|
|
@ -318,7 +315,7 @@ public class UnterTabMitController extends TabMitController {
|
|||
public void updateInfofeld() {
|
||||
GraphElement f = viewer.getRestrictTo();
|
||||
if( f instanceof Knoten) {
|
||||
this.setText(viewer.getGraph().getKnoteninfo((Knoten) f, false));
|
||||
this.setText(viewer.getGraph().getKnoteninfo((Knoten) f, false));
|
||||
}
|
||||
Knoten k = viewer.getSelectedKnoten();
|
||||
Kante ka = viewer.getSelectedKante();
|
||||
|
|
@ -364,7 +361,7 @@ public class UnterTabMitController extends TabMitController {
|
|||
else
|
||||
infoBox.setVisible(false);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@FXML
|
||||
|
|
@ -441,6 +438,25 @@ public class UnterTabMitController extends TabMitController {
|
|||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
void toDoContextMenu(ContextMenuEvent event) {
|
||||
if(lvAuswahl.getSelectionModel().getSelectedIndex() >= 0) {
|
||||
|
||||
Alert alert =
|
||||
new Alert(AlertType.NONE,
|
||||
"Soll der Knoten aus der ToDo-Liste gelöscht werden?",
|
||||
ButtonType.OK,
|
||||
ButtonType.CANCEL);
|
||||
alert.setTitle("ToDo-Liste");
|
||||
Optional<ButtonType> result = alert.showAndWait();
|
||||
|
||||
if (result.get() == ButtonType.OK) {
|
||||
auswahl.remove(lvAuswahl.getSelectionModel().getSelectedIndex());
|
||||
fillLvAuswahl();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
void bNaechster(ActionEvent event) {
|
||||
|
||||
|
|
@ -453,18 +469,18 @@ public class UnterTabMitController extends TabMitController {
|
|||
|
||||
// @FXML
|
||||
// void bListeAnpassen(ActionEvent event) {
|
||||
// buildAuswahl();
|
||||
// fillLvAuswahl();
|
||||
// buildAuswahl();
|
||||
// fillLvAuswahl();
|
||||
|
||||
// }
|
||||
|
||||
// @FXML
|
||||
// void bNeuerTab(ActionEvent event) {
|
||||
// GraphOptions neu = options.copy();
|
||||
// neu.parent = viewer.getRestrictTo();
|
||||
// if(neu.parent == null) neu.parent = viewer.getSelectedKnoten();
|
||||
// neu.bildAnzeigen = false;
|
||||
// tabOeffnen(neu);
|
||||
// GraphOptions neu = options.copy();
|
||||
// neu.parent = viewer.getRestrictTo();
|
||||
// if(neu.parent == null) neu.parent = viewer.getSelectedKnoten();
|
||||
// neu.bildAnzeigen = false;
|
||||
// tabOeffnen(neu);
|
||||
// }
|
||||
|
||||
@FXML
|
||||
|
|
@ -497,7 +513,7 @@ public class UnterTabMitController extends TabMitController {
|
|||
double v = Double.parseDouble(result.get());
|
||||
k.setWert(v);
|
||||
this.fillLvAuswahl();
|
||||
|
||||
|
||||
viewer.updateImage();
|
||||
updateInfofeld();
|
||||
} catch (Exception e) {
|
||||
|
|
|
|||
|
|
@ -1,97 +1,94 @@
|
|||
#BlueJ package file
|
||||
dependency1.from=TabMitController
|
||||
dependency1.to=UnterTabMitController
|
||||
dependency1.type=UsesDependency
|
||||
dependency2.from=SimulationTabMitController
|
||||
dependency2.to=Hilfefenster
|
||||
dependency2.type=UsesDependency
|
||||
dependency3.from=SimulationTabMitController
|
||||
dependency3.to=MyClassLoader
|
||||
dependency3.type=UsesDependency
|
||||
dependency4.from=Controller
|
||||
dependency4.to=TabMitController
|
||||
dependency4.type=UsesDependency
|
||||
dependency5.from=Controller
|
||||
dependency5.to=HauptTabMitController
|
||||
dependency5.type=UsesDependency
|
||||
dependency6.from=Controller
|
||||
dependency6.to=SimulationTabMitController
|
||||
dependency6.type=UsesDependency
|
||||
dependency7.from=Controller
|
||||
dependency7.to=EditTabMitController
|
||||
dependency7.type=UsesDependency
|
||||
objectbench.height=93
|
||||
objectbench.width=776
|
||||
package.divider.horizontal=0.599476439790576
|
||||
package.divider.vertical=0.8003992015968064
|
||||
package.editor.height=394
|
||||
package.editor.width=645
|
||||
package.editor.x=1056
|
||||
package.editor.y=332
|
||||
package.frame.height=600
|
||||
package.frame.width=800
|
||||
package.numDependencies=7
|
||||
package.numTargets=8
|
||||
package.showExtends=true
|
||||
package.showUses=true
|
||||
readme.height=60
|
||||
readme.name=@README
|
||||
readme.width=49
|
||||
readme.x=10
|
||||
readme.y=10
|
||||
target1.height=50
|
||||
target1.name=Hilfefenster
|
||||
target1.showInterface=false
|
||||
target1.type=ClassTarget
|
||||
target1.width=100
|
||||
target1.x=500
|
||||
target1.y=60
|
||||
target2.height=50
|
||||
target2.name=HauptTabMitController
|
||||
target2.showInterface=false
|
||||
target2.type=ClassTarget
|
||||
target2.width=170
|
||||
target2.x=10
|
||||
target2.y=140
|
||||
target3.height=50
|
||||
target3.name=EditTabMitController
|
||||
target3.showInterface=false
|
||||
target3.type=ClassTarget
|
||||
target3.width=160
|
||||
target3.x=10
|
||||
target3.y=80
|
||||
target4.height=50
|
||||
target4.name=TabMitController
|
||||
target4.showInterface=false
|
||||
target4.type=ClassTarget
|
||||
target4.width=130
|
||||
target4.x=300
|
||||
target4.y=110
|
||||
target5.height=50
|
||||
target5.name=SimulationTabMitController
|
||||
target5.showInterface=false
|
||||
target5.type=ClassTarget
|
||||
target5.width=200
|
||||
target5.x=10
|
||||
target5.y=210
|
||||
target6.height=50
|
||||
target6.name=Controller
|
||||
target6.showInterface=false
|
||||
target6.type=ClassTarget
|
||||
target6.width=90
|
||||
target6.x=500
|
||||
target6.y=250
|
||||
target7.height=70
|
||||
target7.name=MyClassLoader
|
||||
target7.showInterface=false
|
||||
target7.type=ClassTarget
|
||||
target7.width=120
|
||||
target7.x=140
|
||||
target7.y=330
|
||||
target8.height=50
|
||||
target8.name=UnterTabMitController
|
||||
target8.showInterface=false
|
||||
target8.type=ClassTarget
|
||||
target8.width=170
|
||||
target8.x=10
|
||||
target8.y=270
|
||||
#BlueJ package file
|
||||
dependency1.from=TabMitController
|
||||
dependency1.to=UnterTabMitController
|
||||
dependency1.type=UsesDependency
|
||||
dependency2.from=SimulationTabMitController
|
||||
dependency2.to=MyClassLoader
|
||||
dependency2.type=UsesDependency
|
||||
dependency3.from=Controller
|
||||
dependency3.to=TabMitController
|
||||
dependency3.type=UsesDependency
|
||||
dependency4.from=Controller
|
||||
dependency4.to=HauptTabMitController
|
||||
dependency4.type=UsesDependency
|
||||
dependency5.from=Controller
|
||||
dependency5.to=SimulationTabMitController
|
||||
dependency5.type=UsesDependency
|
||||
dependency6.from=Controller
|
||||
dependency6.to=EditTabMitController
|
||||
dependency6.type=UsesDependency
|
||||
objectbench.height=172
|
||||
objectbench.width=451
|
||||
package.divider.horizontal=0.599476439790576
|
||||
package.divider.vertical=0.642
|
||||
package.editor.height=314
|
||||
package.editor.width=636
|
||||
package.editor.x=1113
|
||||
package.editor.y=290
|
||||
package.frame.height=600
|
||||
package.frame.width=800
|
||||
package.numDependencies=6
|
||||
package.numTargets=8
|
||||
package.showExtends=true
|
||||
package.showUses=true
|
||||
readme.height=60
|
||||
readme.name=@README
|
||||
readme.width=49
|
||||
readme.x=10
|
||||
readme.y=10
|
||||
target1.height=50
|
||||
target1.name=EditTabMitController
|
||||
target1.showInterface=false
|
||||
target1.type=ClassTarget
|
||||
target1.width=180
|
||||
target1.x=10
|
||||
target1.y=80
|
||||
target2.height=50
|
||||
target2.name=HauptTabMitController
|
||||
target2.showInterface=false
|
||||
target2.type=ClassTarget
|
||||
target2.width=200
|
||||
target2.x=10
|
||||
target2.y=140
|
||||
target3.height=70
|
||||
target3.name=Hilfefenster
|
||||
target3.showInterface=false
|
||||
target3.type=ClassTarget
|
||||
target3.width=120
|
||||
target3.x=10
|
||||
target3.y=210
|
||||
target4.height=50
|
||||
target4.name=TabMitController
|
||||
target4.showInterface=false
|
||||
target4.type=ClassTarget
|
||||
target4.width=130
|
||||
target4.x=300
|
||||
target4.y=110
|
||||
target5.height=50
|
||||
target5.name=SimulationTabMitController
|
||||
target5.showInterface=false
|
||||
target5.type=ClassTarget
|
||||
target5.width=200
|
||||
target5.x=210
|
||||
target5.y=210
|
||||
target6.height=50
|
||||
target6.name=Controller
|
||||
target6.showInterface=false
|
||||
target6.type=ClassTarget
|
||||
target6.width=90
|
||||
target6.x=500
|
||||
target6.y=250
|
||||
target7.height=70
|
||||
target7.name=MyClassLoader
|
||||
target7.showInterface=false
|
||||
target7.type=ClassTarget
|
||||
target7.width=120
|
||||
target7.x=140
|
||||
target7.y=330
|
||||
target8.height=50
|
||||
target8.name=UnterTabMitController
|
||||
target8.showInterface=false
|
||||
target8.type=ClassTarget
|
||||
target8.width=170
|
||||
target8.x=220
|
||||
target8.y=270
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue