mirror of
				https://athene2.informatik.unibw-muenchen.de/progproj/gruppen-ht24/Gruppe-02.git
				synced 2025-10-31 10:31:51 +01:00 
			
		
		
		
	added groundwork for selection listeners
This commit is contained in:
		| @@ -1,5 +1,7 @@ | |||||||
| package pp.monopoly.client.gui; | package pp.monopoly.client.gui; | ||||||
|  |  | ||||||
|  | import com.jme3.app.Application; | ||||||
|  | import com.jme3.app.state.BaseAppState; | ||||||
| import com.jme3.material.Material; | import com.jme3.material.Material; | ||||||
| import com.jme3.math.ColorRGBA; | import com.jme3.math.ColorRGBA; | ||||||
| import com.jme3.math.Vector3f; | import com.jme3.math.Vector3f; | ||||||
| @@ -10,11 +12,15 @@ import com.simsilica.lemur.*; | |||||||
| import com.simsilica.lemur.component.QuadBackgroundComponent; | import com.simsilica.lemur.component.QuadBackgroundComponent; | ||||||
| import com.simsilica.lemur.component.SpringGridLayout; | import com.simsilica.lemur.component.SpringGridLayout; | ||||||
| import com.simsilica.lemur.core.VersionedList; | import com.simsilica.lemur.core.VersionedList; | ||||||
|  | import com.simsilica.lemur.core.VersionedReference; | ||||||
| import com.simsilica.lemur.style.ElementId; | import com.simsilica.lemur.style.ElementId; | ||||||
|  | import com.simsilica.lemur.text.DocumentModel; | ||||||
| import pp.dialog.Dialog; | import pp.dialog.Dialog; | ||||||
| import pp.monopoly.client.MonopolyApp; | import pp.monopoly.client.MonopolyApp; | ||||||
| import pp.monopoly.notification.Sound; | import pp.monopoly.notification.Sound; | ||||||
|  |  | ||||||
|  | import java.util.Set; | ||||||
|  |  | ||||||
| public class TradeMenu extends Dialog { | public class TradeMenu extends Dialog { | ||||||
|     private final MonopolyApp app; |     private final MonopolyApp app; | ||||||
|     private final Container mainContainer; |     private final Container mainContainer; | ||||||
| @@ -23,6 +29,7 @@ public class TradeMenu extends Dialog { | |||||||
|     private final Button cancelButton = new Button("Abbrechen"); |     private final Button cancelButton = new Button("Abbrechen"); | ||||||
|     private final Button tradeButton = new Button("Handeln"); |     private final Button tradeButton = new Button("Handeln"); | ||||||
|     private Container lowerLeftMenu, lowerRightMenu; |     private Container lowerLeftMenu, lowerRightMenu; | ||||||
|  |     private TextField leftSelectionsField; | ||||||
|     QuadBackgroundComponent translucentWhiteBackground = |     QuadBackgroundComponent translucentWhiteBackground = | ||||||
|             new QuadBackgroundComponent(new ColorRGBA(ColorRGBA.White)); |             new QuadBackgroundComponent(new ColorRGBA(ColorRGBA.White)); | ||||||
|  |  | ||||||
| @@ -57,9 +64,6 @@ public class TradeMenu extends Dialog { | |||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|     //TODO Logik |     //TODO Logik | ||||||
|     //TODO Ebenen prüfen und eine Ebene Hochsetzen |  | ||||||
|     //TODO Farben der Label anpassen |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Creates a container for the header with a fixed size. |      * Creates a container for the header with a fixed size. | ||||||
| @@ -73,7 +77,7 @@ public class TradeMenu extends Dialog { | |||||||
|  |  | ||||||
|         // Add the header label |         // Add the header label | ||||||
|         Label headerLabel = headerContainer.addChild(new Label("Handelsmenü", new ElementId("label-Bold"))); |         Label headerLabel = headerContainer.addChild(new Label("Handelsmenü", new ElementId("label-Bold"))); | ||||||
|         headerLabel.setFontSize(32); // Adjust font size as needed |         headerLabel.setFontSize(50); // Adjust font size as needed | ||||||
|         headerLabel.setInsets(new Insets3f(10, 10, 10, 10)); // Add padding around the label |         headerLabel.setInsets(new Insets3f(10, 10, 10, 10)); // Add padding around the label | ||||||
|         headerLabel.setBackground(new QuadBackgroundComponent(new ColorRGBA(1.0f, 1.0f, 1.0f, 0.5f))); // Optional background |         headerLabel.setBackground(new QuadBackgroundComponent(new ColorRGBA(1.0f, 1.0f, 1.0f, 0.5f))); // Optional background | ||||||
|  |  | ||||||
| @@ -96,12 +100,32 @@ public class TradeMenu extends Dialog { | |||||||
|         Container middleSection = mainContent.addChild(new Container(new SpringGridLayout(Axis.Y, Axis.X))); |         Container middleSection = mainContent.addChild(new Container(new SpringGridLayout(Axis.Y, Axis.X))); | ||||||
|         middleSection.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8f, 0.8f, 0.8f, 1.0f))); |         middleSection.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8f, 0.8f, 0.8f, 1.0f))); | ||||||
|  |  | ||||||
|         TextField leftSelectionsField = middleSection.addChild(new TextField("Quellobjekte...")); |         // Add combined label | ||||||
|  |         Label middleLabel = middleSection.addChild(new Label("Gebäude:        Währung:        Sonderkarten:")); | ||||||
|  |         middleLabel.setFontSize(24); // Adjust font size as needed | ||||||
|  |         middleLabel.setInsets(new Insets3f(5, 5, 5, 5)); // Add padding around the label | ||||||
|  |  | ||||||
|  |         // Add the Quellobjekte TextField | ||||||
|  |         leftSelectionsField = middleSection.addChild(new TextField("")); | ||||||
|  |         leftSelectionsField.setPreferredSize(new Vector3f(600, 50, 0)); // Larger width to fit the split sections | ||||||
|  |  | ||||||
|  |         // Add listeners to update the TextField dynamically | ||||||
|  |         addCustomSelectionListener(leftBuildingSelector, newSelection -> updateLeftSelectionsField(leftSelectionsField)); | ||||||
|  |         addCustomSelectionListener(leftSpecialCardSelector, newSelection -> updateLeftSelectionsField(leftSelectionsField)); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|         Label arrows = middleSection.addChild(new Label("⇅")); |         Label arrows = middleSection.addChild(new Label("⇅")); | ||||||
|         arrows.setFontSize(40); |         arrows.setFontSize(40); | ||||||
|  |  | ||||||
|  |         // Add combined label | ||||||
|  |         middleLabel = middleSection.addChild(new Label("Gebäude:        Währung:        Sonderkarten:")); | ||||||
|  |         middleLabel.setFontSize(24); // Adjust font size as needed | ||||||
|  |         middleLabel.setInsets(new Insets3f(5, 5, 5, 5)); // Add padding around the label | ||||||
|  |  | ||||||
|         TextField rightSelectionsField = middleSection.addChild(new TextField("Zielobjekte...")); |         TextField rightSelectionsField = middleSection.addChild(new TextField("Zielobjekte...")); | ||||||
|         // "Bestätigen" button |         // "Bestätigen" button | ||||||
|         lowerRightMenu = new Container(); |         lowerRightMenu = new Container(); | ||||||
| @@ -147,22 +171,29 @@ public class TradeMenu extends Dialog { | |||||||
|         // Add dropdowns |         // Add dropdowns | ||||||
|         column.addChild(new Label("Gebäude:")); |         column.addChild(new Label("Gebäude:")); | ||||||
|         Selector<String> buildingSelector = column.addChild(new Selector<>(getSampleItems(),"glass")); |         Selector<String> buildingSelector = column.addChild(new Selector<>(getSampleItems(),"glass")); | ||||||
|  |         buildingSelector.setInsets(new Insets3f(5, 10, 5, 10)); | ||||||
|         buildingSelector.setBackground(new QuadBackgroundComponent(new ColorRGBA(ColorRGBA.Black))); |         buildingSelector.setBackground(new QuadBackgroundComponent(new ColorRGBA(ColorRGBA.Black))); | ||||||
|  |  | ||||||
|         column.addChild(new Label("Währung:")); |         column.addChild(new Label("Währung:")); | ||||||
|         Selector<String> currencySelector = column.addChild(new Selector<>(getSampleItems(),"glass")); |         TextField currencyInput = column.addChild(new TextField("")); | ||||||
|         currencySelector.setBackground(new QuadBackgroundComponent(new ColorRGBA(ColorRGBA.Black))); |         currencyInput.setInsets(new Insets3f(5, 10, 5, 10)); | ||||||
|  |         currencyInput.setBackground(new QuadBackgroundComponent(new ColorRGBA(ColorRGBA.Black))); | ||||||
|  |  | ||||||
|         column.addChild(new Label("Sonderkarten:")); |         column.addChild(new Label("Sonderkarten:")); | ||||||
|         Selector<String> specialCardSelector = column.addChild(new Selector<>(getSampleItems(),"glass")); |         Selector<String> specialCardSelector = column.addChild(new Selector<>(getSampleItems(),"glass")); | ||||||
|  |         specialCardSelector.setInsets(new Insets3f(5, 10, 5, 10)); | ||||||
|         specialCardSelector.setBackground(new QuadBackgroundComponent(new ColorRGBA(ColorRGBA.Black))); |         specialCardSelector.setBackground(new QuadBackgroundComponent(new ColorRGBA(ColorRGBA.Black))); | ||||||
|  |  | ||||||
|  |  | ||||||
|         // Assign selectors to corresponding fields |         // Assign selectors to corresponding fields | ||||||
|         if (isLeft) { |         if (isLeft) { | ||||||
|             leftBuildingSelector = buildingSelector; |             leftBuildingSelector = buildingSelector; | ||||||
|             leftCurrencySelector = currencySelector; |  | ||||||
|             leftSpecialCardSelector = specialCardSelector; |             leftSpecialCardSelector = specialCardSelector; | ||||||
|  |  | ||||||
|  |             // Add listeners for left selectors to update the middle text field | ||||||
|  |             addCustomSelectionListener(buildingSelector, newSelection -> updateLeftSelectionsField(leftSelectionsField)); | ||||||
|  |             addCustomSelectionListener(specialCardSelector, newSelection -> updateLeftSelectionsField(leftSelectionsField)); | ||||||
|  |  | ||||||
|             // "Abbrechen" button |             // "Abbrechen" button | ||||||
|             lowerLeftMenu = new Container(); |             lowerLeftMenu = new Container(); | ||||||
|             cancelButton.setPreferredSize(new Vector3f(200, 60, 0)); |             cancelButton.setPreferredSize(new Vector3f(200, 60, 0)); | ||||||
| @@ -182,7 +213,6 @@ public class TradeMenu extends Dialog { | |||||||
|  |  | ||||||
|                } else { |                } else { | ||||||
|             rightBuildingSelector = buildingSelector; |             rightBuildingSelector = buildingSelector; | ||||||
|             rightCurrencySelector = currencySelector; |  | ||||||
|             rightSpecialCardSelector = specialCardSelector; |             rightSpecialCardSelector = specialCardSelector; | ||||||
|  |  | ||||||
|             Label spacer = column.addChild(new Label("")); // Spacer |             Label spacer = column.addChild(new Label("")); // Spacer | ||||||
| @@ -217,6 +247,26 @@ public class TradeMenu extends Dialog { | |||||||
|         app.getGuiNode().attachChild(background); |         app.getGuiNode().attachChild(background); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private void updateLeftSelectionsField(TextField leftSelectionsField) { | ||||||
|  |         // Get all selections from the leftBuildingSelector and leftSpecialCardSelector | ||||||
|  |         String buildingSelections = leftBuildingSelector.getSelectedItem() != null | ||||||
|  |                 ? leftBuildingSelector.getSelectedItem() | ||||||
|  |                 : ""; | ||||||
|  |         String specialCardSelections = leftSpecialCardSelector.getSelectedItem() != null | ||||||
|  |                 ? leftSpecialCardSelector.getSelectedItem() | ||||||
|  |                 : ""; | ||||||
|  |  | ||||||
|  |         // Get the direct input from the middle part of the TextField | ||||||
|  |         String manualInput = leftSelectionsField.getText(); | ||||||
|  |  | ||||||
|  |         // Combine all parts into one formatted string | ||||||
|  |         String combinedText = String.format("%-30s %-30s %-30s", buildingSelections, manualInput, specialCardSelections); | ||||||
|  |  | ||||||
|  |         // Update the content of the TextField | ||||||
|  |         leftSelectionsField.setText(combinedText); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Handles the escape action for the dialog. |      * Handles the escape action for the dialog. | ||||||
|      */ |      */ | ||||||
| @@ -234,4 +284,41 @@ public class TradeMenu extends Dialog { | |||||||
|     public void update(float delta) { |     public void update(float delta) { | ||||||
|         // Periodic updates (if needed) can be implemented here |         // Periodic updates (if needed) can be implemented here | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Functional interface for a selection action listener. | ||||||
|  |      */ | ||||||
|  |     @FunctionalInterface | ||||||
|  |     private interface SelectionActionListener<T> { | ||||||
|  |         void onSelectionChanged(T selection); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds a custom action listener to the Selector. | ||||||
|  |      */ | ||||||
|  |     private void addCustomSelectionListener(Selector<String> selector, SelectionActionListener<String> listener) { | ||||||
|  |         VersionedReference<Set<Integer>> selectionRef = selector.getSelectionModel().createReference(); | ||||||
|  |  | ||||||
|  |         app.getStateManager().attach(new BaseAppState() { | ||||||
|  |             @Override | ||||||
|  |             public void update(float tpf) { | ||||||
|  |                 if (selectionRef.update()) { | ||||||
|  |                     String selected = selector.getSelectedItem(); | ||||||
|  |                     listener.onSelectionChanged(selected); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             @Override | ||||||
|  |             protected void initialize(Application app) {} | ||||||
|  |  | ||||||
|  |             @Override | ||||||
|  |             protected void cleanup(Application app) {} | ||||||
|  |  | ||||||
|  |             @Override | ||||||
|  |             protected void onEnable() {} | ||||||
|  |  | ||||||
|  |             @Override | ||||||
|  |             protected void onDisable() {} | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user