From 1d183447efab33847859c8b3a0dd189522193d65 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Uli=20B=C3=A4hr?= <eude365sup@outlook.com>
Date: Wed, 4 Dec 2019 20:50:39 +0100
Subject: [PATCH] GuiController Steckbrett ToggleButtonGroup

---
 .../java/projekt/enigma/GuiController.java    | 177 +++++++++++-------
 src/main/resources/projekt/enigma/gui.fxml    |  82 +-------
 2 files changed, 107 insertions(+), 152 deletions(-)

diff --git a/src/main/java/projekt/enigma/GuiController.java b/src/main/java/projekt/enigma/GuiController.java
index 798e731..3783b56 100644
--- a/src/main/java/projekt/enigma/GuiController.java
+++ b/src/main/java/projekt/enigma/GuiController.java
@@ -1,22 +1,17 @@
 package projekt.enigma;
 
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableList;
 import javafx.concurrent.Task;
 import javafx.event.ActionEvent;
 import javafx.fxml.FXML;
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
 import javafx.scene.control.*;
-import javafx.scene.control.Button;
-import javafx.scene.control.Label;
-import javafx.scene.control.MenuItem;
-import javafx.scene.control.TextField;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.layout.GridPane;
 import javafx.scene.layout.Pane;
 import javafx.scene.shape.Circle;
 import javafx.stage.StageStyle;
 import org.apache.http.HttpException;
-import org.controlsfx.control.CheckComboBox;
 import org.controlsfx.dialog.ProgressDialog;
 import projekt.enigma.model.Codierer;
 import projekt.enigma.model.Fehler;
@@ -26,53 +21,55 @@ import java.util.ArrayList;
 import java.util.Arrays;
 
 public class GuiController {
-
     //region Klassenvariablen
+
     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[] empfangeneNachricht;
+    private static final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     private String textEingabe;
     private String textCodiert;
+    private char chiffrierterBuchstabe;
+    private ArrayList<MenuItem> mItem;
     private boolean resetDisplay;
     private Codierer codierer;
-    private char chiffrierterBuchstabe;
-    private String[] empfangeneNachricht;
-    private static final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+    private enum BUCHSTABE_LEUCHTET {AN, AUS}
+
+    @FXML
+    private static ToggleButton[] tBtnPort;
 
 //endregion
 
     //region GUI-Elemente
-
     //deklariert die benötigten Buttons
     @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, btnReset,
-            btnPort0, btnPort1, btnPort2, btnPort3, btnPort4, btnPort5, btnPort6, btnPort7, btnPort8, btnPort9;
+    btnR, btnS, btnT, btnU, btnV, btnW, btnX, btnY, btnZ, btnSenden, btnEmpfangen, btnDelete, btnReset,
+    btnPort0, btnPort1, btnPort2, btnPort3, btnPort4, btnPort5, btnPort6, btnPort7, btnPort8, btnPort9;
     //deklariert die benötigten Kreise
     @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;
+    circO, circP, circQ, circR, circS, circT, circU, circV, circW, circX, circY, circZ;
     //deklariert die benötigten Label
     @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;
+    lblR, lblS, lblT, lblU, lblV, lblW, lblX, lblY, lblZ, lblLadeNachricht, lblTagesschluessel,
+    lblSpruchschluessel;
     //deklariert die ProgressBar
     @FXML
     private ProgressBar pbLadeNachricht;
     //deklariert die MenueButtons
     @FXML
     private MenuButton mBtnWalzPos1, mBtnWalzPos2, mBtnWalzPos3, mBtnNotchPos1, mBtnNotchPos2, mBtnNotchPos3,
-            mBtnStartPos1, mBtnStartPos2, mBtnStartPos3;
+    mBtnStartPos1, mBtnStartPos2, mBtnStartPos3;
     //deklariert die benötigten Textfelder
     @FXML
     private TextField tfStecker1, tfStecker2, tfStecker3, tfStecker4, tfStecker5, tfStecker6, tfStecker7, tfStecker8,
-            tfStecker9, tfStecker10, tfCodiert, tfKlartext;
-    //deklariert benötigte panes
+    tfStecker9, tfStecker10, tfCodiert, tfKlartext;
+    //deklariert benötigtes pane
     @FXML
-    private Pane port0;
-
+    private Pane portPane;
     //deklariert benötigtes GridPane
     @FXML
     private GridPane mainGrid;
@@ -108,33 +105,31 @@ public class GuiController {
         menu(mBtnStartPos3, position);
         menu(mBtnStartPos2, position);
 
-    }
 
+        myToggleButtons(10);
+     }
 
 
     /**
      * Für das Steckbrett müssen zehn CheckComboBoxen erstellt werden.
      * Hier wird die Funktion zum erstellen und Befüllen der Boxen, die Funktion zehn mal aufgerufen.
-     *//*
+     */
     private void generateSteckbrett() {
 
         for (int i = 0; i <= 9; i++) {
             this.createSteckbrettPort(i);
         }
-    }*/
+    }
 
-     /**
+    /**
      * Die Funktion createSteckbrettPort erstellt zehn CheckComboBoxen, holt sich die verfügbaren Buchstaben,
      * die bereits gesteckten Kabel und weißt sie zu.
      * Im Anschluss werden die CheckComboBoxen auf dem GridPane positioniert.
      *
      * @param port : int : Kabel Nummer (0-9)
-     *//*
+     */
     private void createSteckbrettPort(int port) {
 
-        // Item Liste anlegen
-        ObservableList<Character> items = FXCollections.observableArrayList();
-
         // Holt die verfügbaren Buchstaben für diesen Port ab und erstellt ein char Array daraus
         char[] verfuegbareBuchstaben = this.codierer.fetchVerfuegbareBuchstaben(port).toCharArray();
 
@@ -143,25 +138,24 @@ public class GuiController {
 
         StringBuilder sb = new StringBuilder();
 
-        /**
+        /*
          * Die Buchstaben in die CheckComboBox laden und zusätzlich in einen String um später den
          * Index des Buchstaben auslesen zu können
-         *//*
+         */
         for (char c : verfuegbareBuchstaben) {
-            items.add(c);
             sb.append(c);
         }
 
-        // Eine CheckComboBox erstellen
-        CheckComboBox<Character> ccb = new CheckComboBox<Character>(items);
-
-        // Die CheckComboBox dem GridPane in der Oberfläche zuordnen
-        mainGrid.add(ccb, 1 + port, 8);
+/*        // ToggleButton erstellen
+        tBtnPort[port] = new ToggleButton();
+        // Den ToggleButton dem GridPane in der Oberfläche zuordnen
+        mainGrid.add(tBtnPort[port], port + 1, 8);
+        mainGrid.setMargin(tBtnPort[port], new Insets(0, 15, 0, 15));*/
 
         // Die Gesteckten Buchstaben in der CheckComboBox selektieren
-        ccb.getCheckModel().check(sb.toString().indexOf(this.codierer.fetchSteckverbindungen()[port][0]));
-        ccb.getCheckModel().check(sb.toString().indexOf(this.codierer.fetchSteckverbindungen()[port][1]));
-    }*/
+        //ccb.getCheckModel().check(sb.toString().indexOf(this.codierer.fetchSteckverbindungen()[port][0]));
+        //ccb.getCheckModel().check(sb.toString().indexOf(this.codierer.fetchSteckverbindungen()[port][1]));
+    }
 
     /**
      * init Methode zur Erstellung der Einträge und Action Listener für die einzelnen Menüs
@@ -169,7 +163,9 @@ public class GuiController {
      * @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]));
@@ -181,6 +177,27 @@ public class GuiController {
             mItem.get(i).setOnAction(e -> setMenuBtnText(button, finalMi.get(finalI)));
         }
     }
+
+    /**
+     * TODO
+     * @param countOfBtn
+     */
+    private void myToggleButtons(int countOfBtn) {
+
+        final ToggleGroup cabelConnect = new ToggleGroup();
+
+        tBtnPort = new ToggleButton[countOfBtn];
+        for (int i = 0; i < countOfBtn; i++) {
+            tBtnPort[i]=new ToggleButton(i+"Port");
+            tBtnPort[i].setAlignment(Pos.CENTER_RIGHT);
+            tBtnPort[i].setToggleGroup(cabelConnect);
+            if (i==0)tBtnPort[0].setSelected(true);
+
+            mainGrid.setMargin(tBtnPort[i], new Insets(0, 15, 0, 15));
+            mainGrid.add(tBtnPort[i], i + 1, 8);
+        }
+    }
+
     //endregion
 
     //region EventHandler/Listener
@@ -338,7 +355,6 @@ public class GuiController {
             leuchten(chiffCircle(chiffrierterBuchstabe), BUCHSTABE_LEUCHTET.AN);
         }
     }
-
     /**
      * Auswertung welcher Button (senden, empfangen oder löschen) gedrückt wurde.
      * Funktionsaufruf entsprechend des gedrückten Button
@@ -362,18 +378,31 @@ public class GuiController {
             this.resetDisplay = true;
             this.setzeTagesSchluessel();
         }
-        if (e.getSource()==btnPort0){ }//TODO pane0 anzeigen
-        if (e.getSource()==btnPort1){ }//TODO pane0 anzeigen
-        if (e.getSource()==btnPort2){ }//TODO pane0 anzeigen
-        if (e.getSource()==btnPort3){ }//TODO pane0 anzeigen
-        if (e.getSource()==btnPort4){ }//TODO pane0 anzeigen
-        if (e.getSource()==btnPort5){ }//TODO pane0 anzeigen
-        if (e.getSource()==btnPort6){ }//TODO pane0 anzeigen
-        if (e.getSource()==btnPort7){ }//TODO pane0 anzeigen
-        if (e.getSource()==btnPort8){ }//TODO pane0 anzeigen
-        if (e.getSource()==btnPort9){ }//TODO pane0 anzeigen
+     /*   if (e.getSource() == btnPort0) {
+            //TODO
+            //VBox vbox = new VBox();
+        }
+        if (e.getSource() == btnPort1) {
+        }//TODO pane0 anzeigen
+        if (e.getSource() == btnPort2) {
+        }//TODO pane0 anzeigen
+        if (e.getSource() == btnPort3) {
+        }//TODO pane0 anzeigen
+        if (e.getSource() == btnPort4) {
+        }//TODO pane0 anzeigen
+        if (e.getSource() == btnPort5) {
+        }//TODO pane0 anzeigen
+        if (e.getSource() == btnPort6) {
+        }//TODO pane0 anzeigen
+        if (e.getSource() == btnPort7) {
+        }//TODO pane0 anzeigen
+        if (e.getSource() == btnPort8) {
+        }//TODO pane0 anzeigen
+        if (e.getSource() == btnPort9) {
+        }//TODO pane0 anzeigen*/
 
     }
+
     //endregion
 
     //region Methoden
@@ -481,20 +510,15 @@ public class GuiController {
     }
 
     /**
-     * Hier werden die TextFelder, welche die Steckverbindungen darstellen,
-     * mit dem Werten die die Klasse Codierer zur Verfügung stellt gefüllt.
+     * Hier werden die TextFelder der ToggelButtons gesetzt, welche die Steckverbindungen darstellen,
+     * mit den Werten die von der Klasse Codierer zur Verfügung gestellt werden.
      */
     private void setzeSteckverbindungen() {
-        btnPort0.setText(codierer.fetchSteckverbindungen()[0][0] + "" + codierer.fetchSteckverbindungen()[0][1]);
-        btnPort1.setText(codierer.fetchSteckverbindungen()[1][0] + "" + codierer.fetchSteckverbindungen()[1][1]);
-        btnPort2.setText(codierer.fetchSteckverbindungen()[2][0] + "" + codierer.fetchSteckverbindungen()[2][1]);
-        btnPort3.setText(codierer.fetchSteckverbindungen()[3][0] + "" + codierer.fetchSteckverbindungen()[3][1]);
-        btnPort4.setText(codierer.fetchSteckverbindungen()[4][0] + "" + codierer.fetchSteckverbindungen()[4][1]);
-        btnPort5.setText(codierer.fetchSteckverbindungen()[5][0] + "" + codierer.fetchSteckverbindungen()[5][1]);
-        btnPort6.setText(codierer.fetchSteckverbindungen()[6][0] + "" + codierer.fetchSteckverbindungen()[6][1]);
-        btnPort7.setText(codierer.fetchSteckverbindungen()[7][0] + "" + codierer.fetchSteckverbindungen()[7][1]);
-        btnPort8.setText(codierer.fetchSteckverbindungen()[8][0] + "" + codierer.fetchSteckverbindungen()[8][1]);
-        btnPort9.setText(codierer.fetchSteckverbindungen()[9][0] + "" + codierer.fetchSteckverbindungen()[9][1]);
+
+        for (int i = 0; i <= 9; i++) {
+            tBtnPort[i].setText(codierer.fetchSteckverbindungen()[i][0] + ""
+                    + codierer.fetchSteckverbindungen()[i][1]);
+        }
     }
 
     /**
@@ -555,6 +579,10 @@ public class GuiController {
         progressDialogue("tx");
     }
 
+    /**
+     * TODO
+     * @param strRxTx
+     */
     private void progressDialogue(String strRxTx) {
 
         Task copyWorker = createWorker(strRxTx);
@@ -576,6 +604,11 @@ public class GuiController {
         dialog.showAndWait();
     }
 
+    /**
+     * TODO
+     * @param strRxTx
+     * @return
+     */
     public Task createWorker(String strRxTx) {
         return new Task() {
             @Override
@@ -788,11 +821,11 @@ public class GuiController {
         mBtnStartPos3.setText(String.valueOf(codierer.fetchWalzen()[2]));
 
         // Steckbrett Felder setzen
-
+        setzeSteckverbindungen();
         // Setzt das Steckbrett
-        //generateSteckbrett();
+        generateSteckbrett();
 
-        btnPort0.setText(codierer.fetchSteckverbindungen()[0][0] + "" +
+/*        btnPort0.setText(codierer.fetchSteckverbindungen()[0][0] + "" +
                 codierer.fetchSteckverbindungen()[0][1]);
         btnPort1.setText(codierer.fetchSteckverbindungen()[1][0] + "" +
                 codierer.fetchSteckverbindungen()[1][1]);
@@ -811,15 +844,17 @@ public class GuiController {
         btnPort8.setText(codierer.fetchSteckverbindungen()[8][0] + "" +
                 codierer.fetchSteckverbindungen()[8][1]);
         btnPort9.setText(codierer.fetchSteckverbindungen()[9][0] + "" +
-                codierer.fetchSteckverbindungen()[9][1]);
+                codierer.fetchSteckverbindungen()[9][1]);*/
         this.textCodiert = "";
         this.textEingabe = "";
         this.tfKlartext.setText("");
         this.tfCodiert.setText("");
     }
 
-    private enum BUCHSTABE_LEUCHTET {AN, AUS}
-
+    /**
+     * TODO
+     * @param kenngruppe
+     */
     public void setKenngruppe(String kenngruppe) {
 
         // Initialisieren des Codierers und setzen der Kenngruppe
diff --git a/src/main/resources/projekt/enigma/gui.fxml b/src/main/resources/projekt/enigma/gui.fxml
index 880cf98..a0aa286 100644
--- a/src/main/resources/projekt/enigma/gui.fxml
+++ b/src/main/resources/projekt/enigma/gui.fxml
@@ -621,89 +621,9 @@
             </Label>
             <Pane prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="7">
                <children>
-                  <Pane fx:id="port0" disable="true" layoutX="-3.0" layoutY="-303.0" prefHeight="346.0" prefWidth="86.0" visible="false" />
+                  <Pane fx:id="portPane" disable="true" layoutX="-3.0" layoutY="-303.0" prefHeight="346.0" prefWidth="86.0" visible="false" />
                </children>
             </Pane>
-            <Button fx:id="btnPort0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="1" GridPane.rowIndex="8">
-               <padding>
-                  <Insets left="10.0" right="10.0" />
-               </padding>
-               <GridPane.margin>
-                  <Insets left="10.0" right="10.0" />
-               </GridPane.margin>
-            </Button>
-            <Button fx:id="btnPort9" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="10" GridPane.rowIndex="8">
-               <padding>
-                  <Insets left="10.0" right="10.0" />
-               </padding>
-               <GridPane.margin>
-                  <Insets left="10.0" right="10.0" />
-               </GridPane.margin>
-            </Button>
-            <Button fx:id="btnPort8" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="9" GridPane.rowIndex="8">
-               <padding>
-                  <Insets left="10.0" right="10.0" />
-               </padding>
-               <GridPane.margin>
-                  <Insets left="10.0" right="10.0" />
-               </GridPane.margin>
-            </Button>
-            <Button fx:id="btnPort7" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="8" GridPane.rowIndex="8">
-               <padding>
-                  <Insets left="10.0" right="10.0" />
-               </padding>
-               <GridPane.margin>
-                  <Insets left="10.0" right="10.0" />
-               </GridPane.margin>
-            </Button>
-            <Button fx:id="btnPort6" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="7" GridPane.rowIndex="8">
-               <padding>
-                  <Insets left="10.0" right="10.0" />
-               </padding>
-               <GridPane.margin>
-                  <Insets left="10.0" right="10.0" />
-               </GridPane.margin>
-            </Button>
-            <Button fx:id="btnPort5" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="6" GridPane.rowIndex="8">
-               <padding>
-                  <Insets left="10.0" right="10.0" />
-               </padding>
-               <GridPane.margin>
-                  <Insets left="10.0" right="10.0" />
-               </GridPane.margin>
-            </Button>
-            <Button fx:id="btnPort4" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="5" GridPane.rowIndex="8">
-               <padding>
-                  <Insets left="10.0" right="10.0" />
-               </padding>
-               <GridPane.margin>
-                  <Insets left="10.0" right="10.0" />
-               </GridPane.margin>
-            </Button>
-            <Button fx:id="btnPort3" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="4" GridPane.rowIndex="8">
-               <padding>
-                  <Insets left="10.0" right="10.0" />
-               </padding>
-               <GridPane.margin>
-                  <Insets left="10.0" right="10.0" />
-               </GridPane.margin>
-            </Button>
-            <Button fx:id="btnPort2" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="3" GridPane.rowIndex="8">
-               <padding>
-                  <Insets left="10.0" right="10.0" />
-               </padding>
-               <GridPane.margin>
-                  <Insets left="10.0" right="10.0" />
-               </GridPane.margin>
-            </Button>
-            <Button fx:id="btnPort1" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="25.0" prefWidth="79.0" GridPane.columnIndex="2" GridPane.rowIndex="8">
-               <padding>
-                  <Insets left="10.0" right="10.0" />
-               </padding>
-               <GridPane.margin>
-                  <Insets left="10.0" right="10.0" />
-               </GridPane.margin>
-            </Button>
          </children>
       </GridPane>
       <GridPane layoutX="297.0" layoutY="64.0" prefHeight="168.0" prefWidth="585.0">
-- 
GitLab