diff --git a/src/main/java/projekt/enigma/GuiController.java b/src/main/java/projekt/enigma/GuiController.java index db53ffb1d1c99a67017a778c047acacb17e4f737..a38c97965f3ac1c9ac04978775ca735bef21fb30 100644 --- a/src/main/java/projekt/enigma/GuiController.java +++ b/src/main/java/projekt/enigma/GuiController.java @@ -12,703 +12,428 @@ import java.util.ArrayList; public class GuiController { - private final static String[] walzenNr = {"I", "II", "III", "IV", "V"}; - private final static String[] ringNr = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26"}; - private final static String[] position = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}; - private ArrayList<MenuItem> mItem; - private String textEingabe; - private String textCodiert; - private boolean resetDisplay; - private Codierer codierer; - - @FXML - private TextField tfStecker1; - - @FXML - private TextField tfStecker2; - - @FXML - private TextField tfStecker3; - - @FXML - private TextField tfStecker4; - - @FXML - private TextField tfStecker5; - - @FXML - private TextField tfStecker6; - - @FXML - private TextField tfStecker7; - - @FXML - private TextField tfStecker8; - - @FXML - private TextField tfStecker9; - - @FXML - private TextField tfStecker10; - - @FXML - private Button btnM; - - @FXML - private Button btnN; - - @FXML - private Button btnB; - - @FXML - private Button btnV; - - @FXML - private Button btnC; - - @FXML - private Button btnX; - - @FXML - private Button btnY; - - @FXML - private Button btnP; - - @FXML - private Button btnL; - - @FXML - private Button btnK; - - @FXML - private Button btnJ; - - @FXML - private Button btnH; - - @FXML - private Button btnG; - - @FXML - private Button btnF; - - @FXML - private Button btnD; - - @FXML - private Button btnS; - - @FXML - private Button btnA; - - @FXML - private Button btnO; - - @FXML - private Button btnI; - - @FXML - private Button btnU; - - @FXML - private Button btnZ; - - @FXML - private Button btnT; - - @FXML - private Button btnR; - - @FXML - private Button btnE; - - @FXML - private Button btnW; - - @FXML - private Button btnQ; - - @FXML - private Circle circL; - - @FXML - private Circle circM; - - @FXML - private Circle circN; - - @FXML - private Circle circB; - - @FXML - private Circle circV; - - @FXML - private Circle circC; - - @FXML - private Circle circX; - - @FXML - private Circle circY; - - @FXML - private Circle circP; - - @FXML - private Circle circK; - - @FXML - private Circle circJ; - - @FXML - private Circle circH; - - @FXML - private Circle circG; - - @FXML - private Circle circF; - - @FXML - private Circle circD; - - @FXML - private Circle circS; - - @FXML - private Circle circA; - - @FXML - private Circle circO; - - @FXML - private Circle circI; - - @FXML - private Circle circU; - - @FXML - private Circle circZ; - - @FXML - private Circle circT; - - @FXML - private Circle circR; - - @FXML - private Circle circE; - - @FXML - private Circle circW; - - @FXML - private Circle circQ; - - @FXML - private Label lblL; - - @FXML - private Label lblM; - - @FXML - private Label lblN; - - @FXML - private Label lblB; - - @FXML - private Label lblV; - - @FXML - private Label lblC; - - @FXML - private Label lblX; - - @FXML - private Label lblY; - - @FXML - private Label lblP; - - @FXML - private Label lblK; - - @FXML - private Label lblJ; - - @FXML - private Label lblH; - - @FXML - private Label lblG; - - @FXML - private Label lblF; - - @FXML - private Label lblD; - - @FXML - private Label lblS; - - @FXML - private Label lblA; - - @FXML - private Label lblQ; - - @FXML - private Label lblW; - - @FXML - private Label lblE; - - @FXML - private Label lblR; - - @FXML - private Label lblT; - - @FXML - private Label lblZ; - - @FXML - private Label lblU; - - @FXML - private Label lblI; - - @FXML - private Label lblO; - - @FXML - private TextField tfCodiert; - - @FXML - private TextField tfKlartext; - - @FXML - private ProgressBar pbLadeNachricht; - - @FXML - private MenuButton mBtnWalzPos1; - - @FXML - private MenuButton mBtnWalzPos2; - - @FXML - private MenuButton mBtnWalzPos3; - - @FXML - private MenuButton mBtnNotchPos1; - - @FXML - private MenuButton mBtnNotchPos2; - - @FXML - private MenuButton mBtnNotchPos3; - - @FXML - private MenuButton mBtnStartPos1; - - @FXML - private MenuButton mBtnStartPos2; - - @FXML - private MenuButton mBtnStartPos3; - - @FXML - private Label lblLadeNachricht; - - @FXML - private Label lblTagesschluessel; - - @FXML - private Label lblSpruchschluessel; - - @FXML - void initialize() { - - // Variablen setzen - textEingabe = ""; - textCodiert = ""; - resetDisplay = true; - - //Einträge für Walzen - menu(mBtnWalzPos1, walzenNr); - menu(mBtnWalzPos2, walzenNr); - menu(mBtnWalzPos3, walzenNr); - - //Einträge für die Ringe - menu(mBtnNotchPos1, ringNr); - menu(mBtnNotchPos2, ringNr); - menu(mBtnNotchPos3, ringNr); - - //Einträge für die Startpositionen - menu(mBtnStartPos1, position); - menu(mBtnStartPos3, position); - menu(mBtnStartPos2, position); - - //Setze Leucht Event bei Tastendruck - leuchten(btnA, circA); - leuchten(btnB, circB); - leuchten(btnC, circC); - leuchten(btnD, circD); - leuchten(btnE, circE); - leuchten(btnF, circF); - leuchten(btnG, circG); - leuchten(btnH, circH); - leuchten(btnI, circI); - leuchten(btnJ, circJ); - leuchten(btnK, circK); - leuchten(btnL, circL); - leuchten(btnM, circM); - leuchten(btnN, circN); - leuchten(btnO, circO); - leuchten(btnP, circP); - leuchten(btnQ, circQ); - leuchten(btnR, circR); - leuchten(btnS, circS); - leuchten(btnT, circT); - leuchten(btnU, circU); - leuchten(btnV, circV); - leuchten(btnW, circW); - leuchten(btnX, circX); - leuchten(btnY, circY); - leuchten(btnZ, circZ); - - // Initialisieren des Codierers und setzen der Kenngruppe - this.codierer = new Codierer(); - this.codierer.setKenngruppe("enigma"); - - // Beim nächsten Tastendruck erstmal das Display löschen damit falschen Nachrichten geschickt werden. - this.resetDisplay = true; - - // Einstellungen aus dem Logbuch auslesen und setzen - this.setzeTagesSchluessel(); - this.setzeSteckverbindungen(); - } - - /** - * Hier werden die TextFelder, welche die Steckverbindungen darstellen, - * mit dem Werten die die Klasse Codierer zur Verfügung stellt gefüllt. - */ - private void setzeSteckverbindungen() { - tfStecker1.setText(codierer.getSteckverbindungen()[0][0]+""+codierer.getSteckverbindungen()[0][1]); - tfStecker2.setText(codierer.getSteckverbindungen()[1][0]+""+codierer.getSteckverbindungen()[1][1]); - tfStecker3.setText(codierer.getSteckverbindungen()[2][0]+""+codierer.getSteckverbindungen()[2][1]); - tfStecker4.setText(codierer.getSteckverbindungen()[3][0]+""+codierer.getSteckverbindungen()[3][1]); - tfStecker5.setText(codierer.getSteckverbindungen()[4][0]+""+codierer.getSteckverbindungen()[4][1]); - tfStecker6.setText(codierer.getSteckverbindungen()[5][0]+""+codierer.getSteckverbindungen()[5][1]); - tfStecker7.setText(codierer.getSteckverbindungen()[6][0]+""+codierer.getSteckverbindungen()[6][1]); - tfStecker8.setText(codierer.getSteckverbindungen()[7][0]+""+codierer.getSteckverbindungen()[7][1]); - tfStecker9.setText(codierer.getSteckverbindungen()[8][0]+""+codierer.getSteckverbindungen()[8][1]); - tfStecker10.setText(codierer.getSteckverbindungen()[9][0]+""+codierer.getSteckverbindungen()[9][1]); - } - - /** - * Die Löschen Funktion löscht das letzte Zeichen im Klartext sowie im Codiert Feld, - * der Codierer wird aufgerufen um ebenfalls das letzte Zeichen zu löschen - */ - @FXML - private void loeschen() { - if (textEingabe.length() == 0) { - tfKlartext.setText(""); - tfCodiert.setText(""); - } else { - textEingabe = textEingabe.substring(0, textEingabe.length() - 1); - textCodiert = textCodiert.substring(0, textCodiert.length()-1); - tfKlartext.setText(textEingabe); - tfCodiert.setText(textCodiert); - codierer.letztesZeichenLoeschen(); - mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0])); - mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1])); - mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2])); - } - } - - @FXML - void btnempfangen() { - String[] empfangeneNachricht = this.codierer.empfangeNachricht(); - if (empfangeneNachricht[0] != null) { - this.tfKlartext.setText(empfangeneNachricht[2]); - this.tfCodiert.setText(empfangeneNachricht[1]); - this.resetDisplay = true; - - // Spruchschluessel in das Feld lblSpruchschluessel schreiben - lblSpruchschluessel.setText(this.codierer.empfangenerSpruchschluessel(empfangeneNachricht[2])); - - this.setzeTagesSchluessel(); - } - } - - @FXML - void btnsenden() { - this.tfKlartext.setText(""); - this.tfCodiert.setText(""); - - try { - this.codierer.sendeNachricht(); - } catch (HttpException | IOException e) { - e.printStackTrace(); - } - - } - - /** - * Methode zum setzen des menuButton Textes auf das ausgewählte MenuItem - * - * @param mb : MenuButton der Walze - * @param mi : MenuItem - */ - private void listener(MenuButton mb, MenuItem mi) { - // mb.setText(mi.getText()); - - if (mb.getId().equals(mBtnStartPos1.getId())) setzePosition(1, mi.getText().charAt(0)); - if (mb.getId().equals(mBtnStartPos2.getId())) setzePosition(2, mi.getText().charAt(0)); - if (mb.getId().equals(mBtnStartPos3.getId())) setzePosition(3, mi.getText().charAt(0)); - if (mb.getId().equals(mBtnWalzPos1.getId())) setzeWalze(1, mi.getText()); - if (mb.getId().equals(mBtnWalzPos2.getId())) setzeWalze(2, mi.getText()); - if (mb.getId().equals(mBtnWalzPos3.getId())) setzeWalze(3, mi.getText()); - if (mb.getId().equals(mBtnNotchPos1.getId())) - setzeRing(1, Integer.parseInt(mi.getText()) - 1); - if (mb.getId().equals(mBtnNotchPos2.getId())) - setzeRing(2, Integer.parseInt(mi.getText()) - 1); - if (mb.getId().equals(mBtnNotchPos3.getId())) - setzeRing(3, Integer.parseInt(mi.getText()) - 1); - } - - /** - * Methode zur Erstellung der Einträge und Action Listener für die einzelnen Menüs - * - * @param button : Button für die die Einträge erstellt werden sollen - */ - private void menu(MenuButton button, String[] str) { - mItem = new ArrayList<>(); - for (int i = 0; i < str.length; i++) { - //Eintrag aus str der Arraylist mi hinzufügen - mItem.add(new MenuItem(str[i])); - //MenuItem mi dem Button button hinzufügen - button.getItems().add(mItem.get(i)); - int finalI = i; - //Listener für die einzelnen Einträge - ArrayList<MenuItem> finalMi = mItem; - mItem.get(i).setOnAction(e -> listener(button, finalMi.get(finalI))); - } - } - - /** - * Auswertung welcher Button gedrückt wurde - * - * @param e => ActionEvent des auslösenden Button - */ - @FXML - private void gedrueckteTaste(ActionEvent e) { - - //TODO Anbindung an Klasse Hardware - if (e.getSource() == btnA) setText(btnA); - if (e.getSource() == btnB) setText(btnB); - if (e.getSource() == btnC) setText(btnC); - if (e.getSource() == btnD) setText(btnD); - if (e.getSource() == btnE) setText(btnE); - if (e.getSource() == btnF) setText(btnF); - if (e.getSource() == btnG) setText(btnG); - if (e.getSource() == btnH) setText(btnH); - if (e.getSource() == btnI) setText(btnI); - if (e.getSource() == btnJ) setText(btnJ); - if (e.getSource() == btnK) setText(btnK); - if (e.getSource() == btnL) setText(btnL); - if (e.getSource() == btnM) setText(btnM); - if (e.getSource() == btnN) setText(btnN); - if (e.getSource() == btnO) setText(btnO); - if (e.getSource() == btnP) setText(btnP); - if (e.getSource() == btnQ) setText(btnQ); - if (e.getSource() == btnR) setText(btnR); - if (e.getSource() == btnS) setText(btnS); - if (e.getSource() == btnT) setText(btnT); - if (e.getSource() == btnU) setText(btnU); - if (e.getSource() == btnV) setText(btnV); - if (e.getSource() == btnW) setText(btnW); - if (e.getSource() == btnX) setText(btnX); - if (e.getSource() == btnY) setText(btnY); - if (e.getSource() == btnZ) setText(btnZ); - } - - /** - * schreibt Buchstaben des gedrückten Knopfes in Textfeld tfrein - * - * @param b : gedrückter Knopf - */ - private void setText(Button b) { - if (textEingabe.length() < 250) { - if (this.resetDisplay) { - this.tfCodiert.setText(""); - this.tfKlartext.setText(""); - this.resetDisplay = false; - this.codierer.resetHardware(); - textCodiert = ""; - textEingabe = ""; - // Spruchschlüssel generieren und codieren - this.codierer.generateSpruchschluessel(); - // Spruchschluessel in das Feld lblSpruchschluessel schreiben - lblSpruchschluessel.setText(this.codierer.getSpruchschluessel()); - } - textEingabe += b.getText(); - textCodiert += this.codierer.codiere(b.getText().charAt(0), true); - - tfKlartext.setText(textEingabe); - tfCodiert.setText(textCodiert); - - // Position der Walzen aktuallisieren - mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0])); - mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1])); - mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2])); - } - } - - private void leuchten(Button taste, Circle leuchte) { - - taste.setOnMousePressed(mouseEvent -> leuchte.setStyle("-fx-fill: #FFA500")); - taste.setOnMouseReleased(mouseEvent -> { - leuchte.setStyle("-fx-background-color: " + taste.getBackground()); - leuchte.setStyle("-fx-border-color: #000000"); - }); - } - - /** - * Setzt die Anzeige des entsprechende Gui-Element auf die entsprechende Walze - * ->d.h. welche Walze sitzt auf welcher Position - * - * @param walzeRoemischNr => gibt die Walzennummer an - * @param walzenPosition => gibt die Position der Walze - */ - private void setzeWalze(int walzenPosition, String walzeRoemischNr) { - int walzeNr = 0; - switch (walzeRoemischNr) { - case "I": - walzeNr = 0; - break; - case "II": - walzeNr = 1; - break; - case "III": - walzeNr = 2; - break; - case "IV": - walzeNr = 4; - break; - case "V": - walzeNr = 4; - break; - default: - break; - } - - switch (walzenPosition) { - case 1: - mBtnWalzPos1.setText(walzenNr[walzeNr]); - //codierer.setWalze(walzeNr, walzenPosition) - break; - case 2: - mBtnWalzPos2.setText(walzenNr[walzeNr]); - - break; - case 3: - mBtnWalzPos3.setText(walzenNr[walzeNr]); - break; - default: - break; - } - } - - /** - * Setzt den Notch (position)=> die Mitnahmeposition der Walze (walze) fest - * Mitnahmeposition meint => die nächste Walze wird bei erreichen dieser Position (notch) - * um eine Stelle versetzt - * - * @param ringStellung => gibt die walze an - * @param walzenPosition => gibt den notch der Walze (walze) an - */ - private void setzeRing(int walzenPosition, int ringStellung) { - switch (walzenPosition) { - case 1: - mBtnNotchPos1.setText(ringNr[ringStellung]); - break; - case 2: - mBtnNotchPos2.setText(ringNr[ringStellung]); - break; - case 3: - mBtnNotchPos3.setText(ringNr[ringStellung]); - break; - default: - break; - } - } - - /** - * Setzt die Startposition/ aktuelle Position der Walze - * - * @param walze => gibt die walze an - * @param buchstabe gibt den Startwert bzw die aktuelle Position der Walze (walze) an - */ - private void setzePosition(int walze, char buchstabe) { - switch (walze) { - case 1: - mBtnStartPos1.setText(String.valueOf(buchstabe)); - break; - case 2: - mBtnStartPos2.setText(buchstabe + ""); - break; - case 3: - mBtnStartPos3.setText(buchstabe + ""); - break; - default: - break; - } - } - - /** - * Setzt den aktuellen TagesSchluessel - */ - public void setzeTagesSchluessel() { - - // Umsprungpunkte anzeigen - mBtnNotchPos1.setText(String.valueOf(this.codierer.fetchRingstellung()[0])); - mBtnNotchPos2.setText(String.valueOf(this.codierer.fetchRingstellung()[1])); - mBtnNotchPos3.setText(String.valueOf(this.codierer.fetchRingstellung()[2])); - // Walzennummern anzeigen - mBtnWalzPos1.setText(String.valueOf(this.codierer.getchWalzenNr()[0])); - mBtnWalzPos2.setText(String.valueOf(this.codierer.getchWalzenNr()[1])); - mBtnWalzPos3.setText(String.valueOf(this.codierer.getchWalzenNr()[2])); - // Position der Walzen anzeigen - mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0])); - mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1])); - mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2])); - // Steckbrett Felder setzen - tfStecker1.setText(this.codierer.getSteckverbindungen()[0][0] + "" + - this.codierer.getSteckverbindungen()[0][1]); - tfStecker2.setText(this.codierer.getSteckverbindungen()[1][0] + "" + - this.codierer.getSteckverbindungen()[1][1]); - tfStecker3.setText(this.codierer.getSteckverbindungen()[2][0] + "" + - this.codierer.getSteckverbindungen()[2][1]); - tfStecker4.setText(this.codierer.getSteckverbindungen()[3][0] + "" + - this.codierer.getSteckverbindungen()[3][1]); - tfStecker5.setText(this.codierer.getSteckverbindungen()[4][0] + "" + - this.codierer.getSteckverbindungen()[4][1]); - tfStecker6.setText(this.codierer.getSteckverbindungen()[5][0] + "" + - this.codierer.getSteckverbindungen()[5][1]); - tfStecker7.setText(this.codierer.getSteckverbindungen()[6][0] + "" + - this.codierer.getSteckverbindungen()[6][1]); - tfStecker8.setText(this.codierer.getSteckverbindungen()[7][0] + "" + - this.codierer.getSteckverbindungen()[7][1]); - tfStecker9.setText(this.codierer.getSteckverbindungen()[8][0] + "" + - this.codierer.getSteckverbindungen()[8][1]); - tfStecker10.setText(this.codierer.getSteckverbindungen()[9][0] + "" + - this.codierer.getSteckverbindungen()[9][1]); - - } + private final static String[] walzenNr = {"I", "II", "III", "IV", "V"}; + private final static String[] ringNr = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26"}; + private final static String[] position = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}; + private ArrayList<MenuItem> mItem; + private String textEingabe; + private String textCodiert; + private boolean resetDisplay; + private Codierer codierer; + + + //region GUI-Elemente + @FXML + private TextField tfStecker1, tfStecker2, tfStecker3, tfStecker4, tfStecker5, tfStecker6, tfStecker7, tfStecker8, + tfStecker9, tfStecker10, tfCodiert, tfKlartext; + + @FXML + private Button btnA, btnB, btnC, btnD, btnE, btnF, btnG, btnH, btnI, btnJ, btnK, btnL, btnM, btnN, btnO, btnP, btnQ, + btnR, btnS, btnT, btnU, btnV, btnW, btnX, btnY, btnZ, btnSenden, btnEmpfangen, btnDelete; + + @FXML + private Circle circA, circB, circC, circD, circE, circF, circG, circH, circI, circJ, circK, circL, circM, circN, + circO, circP, circQ, circR, circS, circT, circU, circV, circW, circX, circY, circZ; + + @FXML + private Label lblA, lblB, lblC, lblD, lblE, lblF, lblG, lblH, lblI, lblJ, lblK, lblL, lblM, lblN, lblO, lblP, lblQ, + lblR, lblS, lblT, lblU, lblV, lblW, lblX, lblY, lblZ, lblLadeNachricht, lblTagesschluessel, + lblSpruchschluessel; + + @FXML + private ProgressBar pbLadeNachricht; + + @FXML + private MenuButton mBtnWalzPos1, mBtnWalzPos2, mBtnWalzPos3, mBtnNotchPos1, mBtnNotchPos2, mBtnNotchPos3, + mBtnStartPos1, mBtnStartPos2, mBtnStartPos3; + //endregion + + + + @FXML + void initialize() { + + // Variablen setzen + textEingabe = ""; + textCodiert = ""; + resetDisplay = true; + + //Einträge für Walzen + menu(mBtnWalzPos1, walzenNr); + menu(mBtnWalzPos2, walzenNr); + menu(mBtnWalzPos3, walzenNr); + + //Einträge für die Ringe + menu(mBtnNotchPos1, ringNr); + menu(mBtnNotchPos2, ringNr); + menu(mBtnNotchPos3, ringNr); + + //Einträge für die Startpositionen + menu(mBtnStartPos1, position); + menu(mBtnStartPos3, position); + menu(mBtnStartPos2, position); + + //Setze Leucht Event bei Tastendruck + leuchten(btnA, circA); + leuchten(btnB, circB); + leuchten(btnC, circC); + leuchten(btnD, circD); + leuchten(btnE, circE); + leuchten(btnF, circF); + leuchten(btnG, circG); + leuchten(btnH, circH); + leuchten(btnI, circI); + leuchten(btnJ, circJ); + leuchten(btnK, circK); + leuchten(btnL, circL); + leuchten(btnM, circM); + leuchten(btnN, circN); + leuchten(btnO, circO); + leuchten(btnP, circP); + leuchten(btnQ, circQ); + leuchten(btnR, circR); + leuchten(btnS, circS); + leuchten(btnT, circT); + leuchten(btnU, circU); + leuchten(btnV, circV); + leuchten(btnW, circW); + leuchten(btnX, circX); + leuchten(btnY, circY); + leuchten(btnZ, circZ); + + // Initialisieren des Codierers und setzen der Kenngruppe + this.codierer = new Codierer(); + this.codierer.setKenngruppe("enigma"); + + // Beim nächsten Tastendruck erstmal das Display löschen damit falschen Nachrichten geschickt werden. + this.resetDisplay = true; + + // Einstellungen aus dem Logbuch auslesen und setzen + this.setzeTagesSchluessel(); + this.setzeSteckverbindungen(); + } + + /** + * Hier werden die TextFelder, welche die Steckverbindungen darstellen, + * mit dem Werten die die Klasse Codierer zur Verfügung stellt gefüllt. + */ + private void setzeSteckverbindungen() { + tfStecker1.setText(codierer.getSteckverbindungen()[0][0] + "" + codierer.getSteckverbindungen()[0][1]); + tfStecker2.setText(codierer.getSteckverbindungen()[1][0] + "" + codierer.getSteckverbindungen()[1][1]); + tfStecker3.setText(codierer.getSteckverbindungen()[2][0] + "" + codierer.getSteckverbindungen()[2][1]); + tfStecker4.setText(codierer.getSteckverbindungen()[3][0] + "" + codierer.getSteckverbindungen()[3][1]); + tfStecker5.setText(codierer.getSteckverbindungen()[4][0] + "" + codierer.getSteckverbindungen()[4][1]); + tfStecker6.setText(codierer.getSteckverbindungen()[5][0] + "" + codierer.getSteckverbindungen()[5][1]); + tfStecker7.setText(codierer.getSteckverbindungen()[6][0] + "" + codierer.getSteckverbindungen()[6][1]); + tfStecker8.setText(codierer.getSteckverbindungen()[7][0] + "" + codierer.getSteckverbindungen()[7][1]); + tfStecker9.setText(codierer.getSteckverbindungen()[8][0] + "" + codierer.getSteckverbindungen()[8][1]); + tfStecker10.setText(codierer.getSteckverbindungen()[9][0] + "" + codierer.getSteckverbindungen()[9][1]); + } + + /** + * Die Löschen Funktion löscht das letzte Zeichen im Klartext sowie im Codiert Feld, + * der Codierer wird aufgerufen um ebenfalls das letzte Zeichen zu löschen + */ + @FXML + private void loeschen() { + if (textEingabe.length() == 0) { + tfKlartext.setText(""); + tfCodiert.setText(""); + } else { + textEingabe = textEingabe.substring(0, textEingabe.length() - 1); + textCodiert = textCodiert.substring(0, textCodiert.length() - 1); + tfKlartext.setText(textEingabe); + tfCodiert.setText(textCodiert); + codierer.letztesZeichenLoeschen(); + mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0])); + mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1])); + mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2])); + } + } + + @FXML + void empfangeFunkspruch() { + String[] empfangeneNachricht = this.codierer.empfangeNachricht(); + if (empfangeneNachricht[0] != null) { + this.tfKlartext.setText(empfangeneNachricht[2]); + this.tfCodiert.setText(empfangeneNachricht[1]); + this.resetDisplay = true; + + // Spruchschluessel in das Feld lblSpruchschluessel schreiben + lblSpruchschluessel.setText(this.codierer.empfangenerSpruchschluessel(empfangeneNachricht[2])); + + this.setzeTagesSchluessel(); + } + } + + @FXML + private void sendeFunkspruch() { + this.tfKlartext.setText(""); + this.tfCodiert.setText(""); + + try { + this.codierer.sendeNachricht(); + } catch (HttpException | IOException e) { + e.printStackTrace(); + } + + } + + /** + * Methode zum setzen des menuButton Textes auf das ausgewählte MenuItem + * + * @param mb : MenuButton der Walze + * @param mi : MenuItem + */ + private void listener(MenuButton mb, MenuItem mi) { + // mb.setText(mi.getText()); + + if (mb.getId().equals(mBtnStartPos1.getId())) setzePosition(1, mi.getText().charAt(0)); + if (mb.getId().equals(mBtnStartPos2.getId())) setzePosition(2, mi.getText().charAt(0)); + if (mb.getId().equals(mBtnStartPos3.getId())) setzePosition(3, mi.getText().charAt(0)); + if (mb.getId().equals(mBtnWalzPos1.getId())) setzeWalze(1, mi.getText()); + if (mb.getId().equals(mBtnWalzPos2.getId())) setzeWalze(2, mi.getText()); + if (mb.getId().equals(mBtnWalzPos3.getId())) setzeWalze(3, mi.getText()); + if (mb.getId().equals(mBtnNotchPos1.getId())) + setzeRing(1, Integer.parseInt(mi.getText()) - 1); + if (mb.getId().equals(mBtnNotchPos2.getId())) + setzeRing(2, Integer.parseInt(mi.getText()) - 1); + if (mb.getId().equals(mBtnNotchPos3.getId())) + setzeRing(3, Integer.parseInt(mi.getText()) - 1); + } + + /** + * Methode zur Erstellung der Einträge und Action Listener für die einzelnen Menüs + * + * @param button : Button für die die Einträge erstellt werden sollen + */ + private void menu(MenuButton button, String[] str) { + mItem = new ArrayList<>(); + for (int i = 0; i < str.length; i++) { + //Eintrag aus str der Arraylist mi hinzufügen + mItem.add(new MenuItem(str[i])); + //MenuItem mi dem Button button hinzufügen + button.getItems().add(mItem.get(i)); + int finalI = i; + //Listener für die einzelnen Einträge + ArrayList<MenuItem> finalMi = mItem; + mItem.get(i).setOnAction(e -> listener(button, finalMi.get(finalI))); + } + } + + /** + * Auswertung welcher Button gedrückt wurde + * + * @param e => ActionEvent des auslösenden Button + */ + @FXML + private void gedrueckteTaste(ActionEvent e) { + + //TODO Anbindung an Klasse Hardware + if (e.getSource() == btnA){ + setText(btnA); + //leuchten(); + } + if (e.getSource() == btnB) setText(btnB); + if (e.getSource() == btnC) setText(btnC); + if (e.getSource() == btnD) setText(btnD); + if (e.getSource() == btnE) setText(btnE); + if (e.getSource() == btnF) setText(btnF); + if (e.getSource() == btnG) setText(btnG); + if (e.getSource() == btnH) setText(btnH); + if (e.getSource() == btnI) setText(btnI); + if (e.getSource() == btnJ) setText(btnJ); + if (e.getSource() == btnK) setText(btnK); + if (e.getSource() == btnL) setText(btnL); + if (e.getSource() == btnM) setText(btnM); + if (e.getSource() == btnN) setText(btnN); + if (e.getSource() == btnO) setText(btnO); + if (e.getSource() == btnP) setText(btnP); + if (e.getSource() == btnQ) setText(btnQ); + if (e.getSource() == btnR) setText(btnR); + if (e.getSource() == btnS) setText(btnS); + if (e.getSource() == btnT) setText(btnT); + if (e.getSource() == btnU) setText(btnU); + if (e.getSource() == btnV) setText(btnV); + if (e.getSource() == btnW) setText(btnW); + if (e.getSource() == btnX) setText(btnX); + if (e.getSource() == btnY) setText(btnY); + if (e.getSource() == btnZ) setText(btnZ); + if (e.getSource() == btnSenden) sendeFunkspruch(); + if (e.getSource() == btnEmpfangen) empfangeFunkspruch(); + if (e.getSource() == btnDelete) loeschen(); + } + + /** + * schreibt Buchstaben des gedrückten Knopfes in Textfeld tfrein + * + * @param b : gedrückter Knopf + */ + private void setText(Button b) { + if (textEingabe.length() < 250) { + if (this.resetDisplay) { + this.tfCodiert.setText(""); + this.tfKlartext.setText(""); + this.resetDisplay = false; + this.codierer.resetHardware(); + textCodiert = ""; + textEingabe = ""; + // Spruchschlüssel generieren und codieren + this.codierer.generateSpruchschluessel(); + // Spruchschluessel in das Feld lblSpruchschluessel schreiben + lblSpruchschluessel.setText(this.codierer.getSpruchschluessel()); + } + textEingabe += b.getText(); + textCodiert += this.codierer.codiere(b.getText().charAt(0), true); + + tfKlartext.setText(textEingabe); + tfCodiert.setText(textCodiert); + + // Position der Walzen aktuallisieren + mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0])); + mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1])); + mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2])); + } + } + + private void leuchten(Button taste, Circle leuchte) { + + taste.setOnMousePressed(mouseEvent -> leuchte.setStyle("-fx-fill: #FFA500")); + taste.setOnMouseReleased(mouseEvent -> { + leuchte.setStyle("-fx-background-color: " + taste.getBackground()); + leuchte.setStyle("-fx-border-color: #000000"); + }); + } + + /** + * Setzt die Anzeige des entsprechende Gui-Element auf die entsprechende Walze + * ->d.h. welche Walze sitzt auf welcher Position + * + * @param walzeRoemischNr => gibt die Walzennummer an + * @param walzenPosition => gibt die Position der Walze + */ + private void setzeWalze(int walzenPosition, String walzeRoemischNr) { + int walzeNr = 0; + switch (walzeRoemischNr) { + case "I": + walzeNr = 0; + break; + case "II": + walzeNr = 1; + break; + case "III": + walzeNr = 2; + break; + case "IV": + walzeNr = 4; + break; + case "V": + walzeNr = 4; + break; + default: + break; + } + + switch (walzenPosition) { + case 1: + mBtnWalzPos1.setText(walzenNr[walzeNr]); + //codierer.setWalze(walzeNr, walzenPosition) + break; + case 2: + mBtnWalzPos2.setText(walzenNr[walzeNr]); + + break; + case 3: + mBtnWalzPos3.setText(walzenNr[walzeNr]); + break; + default: + break; + } + } + + /** + * Setzt den Notch (position)=> die Mitnahmeposition der Walze (walze) fest + * Mitnahmeposition meint => die nächste Walze wird bei erreichen dieser Position (notch) + * um eine Stelle versetzt + * + * @param ringStellung => gibt die walze an + * @param walzenPosition => gibt den notch der Walze (walze) an + */ + private void setzeRing(int walzenPosition, int ringStellung) { + switch (walzenPosition) { + case 1: + mBtnNotchPos1.setText(ringNr[ringStellung]); + break; + case 2: + mBtnNotchPos2.setText(ringNr[ringStellung]); + break; + case 3: + mBtnNotchPos3.setText(ringNr[ringStellung]); + break; + default: + break; + } + } + + /** + * Setzt die Startposition/ aktuelle Position der Walze + * + * @param walze => gibt die walze an + * @param buchstabe gibt den Startwert bzw die aktuelle Position der Walze (walze) an + */ + private void setzePosition(int walze, char buchstabe) { + switch (walze) { + case 1: + mBtnStartPos1.setText(String.valueOf(buchstabe)); + break; + case 2: + mBtnStartPos2.setText(buchstabe + ""); + break; + case 3: + mBtnStartPos3.setText(buchstabe + ""); + break; + default: + break; + } + } + + /** + * Setzt den aktuellen TagesSchluessel + */ + public void setzeTagesSchluessel() { + + // Umsprungpunkte anzeigen + mBtnNotchPos1.setText(String.valueOf(this.codierer.fetchRingstellung()[0])); + mBtnNotchPos2.setText(String.valueOf(this.codierer.fetchRingstellung()[1])); + mBtnNotchPos3.setText(String.valueOf(this.codierer.fetchRingstellung()[2])); + // Walzennummern anzeigen + mBtnWalzPos1.setText(String.valueOf(this.codierer.getchWalzenNr()[0])); + mBtnWalzPos2.setText(String.valueOf(this.codierer.getchWalzenNr()[1])); + mBtnWalzPos3.setText(String.valueOf(this.codierer.getchWalzenNr()[2])); + // Position der Walzen anzeigen + mBtnStartPos1.setText(String.valueOf(this.codierer.getWalzen()[0])); + mBtnStartPos2.setText(String.valueOf(this.codierer.getWalzen()[1])); + mBtnStartPos3.setText(String.valueOf(this.codierer.getWalzen()[2])); + // Steckbrett Felder setzen + tfStecker1.setText(this.codierer.getSteckverbindungen()[0][0] + "" + + this.codierer.getSteckverbindungen()[0][1]); + tfStecker2.setText(this.codierer.getSteckverbindungen()[1][0] + "" + + this.codierer.getSteckverbindungen()[1][1]); + tfStecker3.setText(this.codierer.getSteckverbindungen()[2][0] + "" + + this.codierer.getSteckverbindungen()[2][1]); + tfStecker4.setText(this.codierer.getSteckverbindungen()[3][0] + "" + + this.codierer.getSteckverbindungen()[3][1]); + tfStecker5.setText(this.codierer.getSteckverbindungen()[4][0] + "" + + this.codierer.getSteckverbindungen()[4][1]); + tfStecker6.setText(this.codierer.getSteckverbindungen()[5][0] + "" + + this.codierer.getSteckverbindungen()[5][1]); + tfStecker7.setText(this.codierer.getSteckverbindungen()[6][0] + "" + + this.codierer.getSteckverbindungen()[6][1]); + tfStecker8.setText(this.codierer.getSteckverbindungen()[7][0] + "" + + this.codierer.getSteckverbindungen()[7][1]); + tfStecker9.setText(this.codierer.getSteckverbindungen()[8][0] + "" + + this.codierer.getSteckverbindungen()[8][1]); + tfStecker10.setText(this.codierer.getSteckverbindungen()[9][0] + "" + + this.codierer.getSteckverbindungen()[9][1]); + } } diff --git a/src/main/resources/projekt/enigma/gui.fxml b/src/main/resources/projekt/enigma/gui.fxml index afcbb00cf3d4e6dacede96f74d58b64c61443626..fbe012fff419ac1fb406d65f1a618760c8021f68 100644 --- a/src/main/resources/projekt/enigma/gui.fxml +++ b/src/main/resources/projekt/enigma/gui.fxml @@ -10,14 +10,13 @@ <?import javafx.scene.layout.ColumnConstraints?> <?import javafx.scene.layout.FlowPane?> <?import javafx.scene.layout.GridPane?> -<?import javafx.scene.layout.Pane?> <?import javafx.scene.layout.RowConstraints?> <?import javafx.scene.layout.TilePane?> <?import javafx.scene.layout.VBox?> <?import javafx.scene.shape.Circle?> <?import javafx.scene.text.Font?> -<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="677.0" prefWidth="967.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt.enigma.GuiController"> +<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="677.0" prefWidth="967.0" xmlns="http://javafx.com/javafx/8.0.999-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt.enigma.GuiController"> <children> <GridPane layoutY="313.0" prefHeight="393.0" prefWidth="968.0" AnchorPane.bottomAnchor="-7.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="313.0"> <columnConstraints> @@ -242,7 +241,7 @@ <Font name="System Bold" size="18.0" /> </font> </Button> - <Button minHeight="44.0" mnemonicParsing="false" onAction="#loeschen" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="<" textFill="#fffdfd" GridPane.columnIndex="10" GridPane.rowIndex="5"> + <Button fx:id="btnDelete" minHeight="44.0" mnemonicParsing="false" onAction="#loeschen" prefHeight="48.0" prefWidth="51.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="<" textFill="#fffdfd" GridPane.columnIndex="10" GridPane.rowIndex="5"> <font> <Font size="18.0" /> </font> @@ -605,9 +604,9 @@ </GridPane> <FlowPane layoutX="736.0" layoutY="51.0" prefHeight="173.0" prefWidth="195.0" AnchorPane.rightAnchor="36.0" AnchorPane.topAnchor="51.0"> <children> - <Button mnemonicParsing="false" onAction="#btnempfangen" prefHeight="80.0" prefWidth="195.0" text="Funkspruch empfangen" /> + <Button fx:id="btnEmpfangen" mnemonicParsing="false" onAction="#empfangeFunkspruch" prefHeight="80.0" prefWidth="195.0" text="Funkspruch empfangen" /> <Label prefHeight="17.0" prefWidth="195.0" /> - <Button mnemonicParsing="false" onAction="#btnsenden" prefHeight="80.0" prefWidth="195.0" text="An Funker senden" /> + <Button fx:id="btnSenden" mnemonicParsing="false" onAction="#sendeFunkspruch" prefHeight="80.0" prefWidth="195.0" text="An Funker senden" /> </children> </FlowPane> <GridPane layoutX="23.0" layoutY="222.0" prefHeight="60.0" prefWidth="270.0" AnchorPane.leftAnchor="23.0" AnchorPane.topAnchor="222.0">