Add basic station selection
This commit is contained in:
parent
47e0ad7393
commit
3dcd3adf03
@ -1,23 +1,26 @@
|
|||||||
package name.nathanmcrae;
|
package name.nathanmcrae;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.fxml.FXMLLoader;
|
import javafx.fxml.FXMLLoader;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
|
import javafx.scene.control.TextArea;
|
||||||
import javafx.scene.input.KeyEvent;
|
import javafx.scene.input.KeyEvent;
|
||||||
import javafx.scene.input.KeyCode;
|
import javafx.scene.input.KeyCode;
|
||||||
import javafx.scene.Parent;
|
import javafx.scene.Parent;
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
|
import javafx.stage.Modality;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import javafx.scene.control.Label;
|
|
||||||
import javafx.scene.control.TextArea;
|
|
||||||
|
|
||||||
import java.net.URL;
|
|
||||||
import java.util.ResourceBundle;
|
|
||||||
|
|
||||||
public class NumbersStationController implements Initializable {
|
public class NumbersStationController implements Initializable {
|
||||||
private Stage settingsStage;
|
private Stage settingsStage;
|
||||||
|
|
||||||
private Stage selectStationStage;
|
private Stage selectStationStage;
|
||||||
|
private NumbersStationSettings settings;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private Label lastRetrievedLabel;
|
private Label lastRetrievedLabel;
|
||||||
@ -52,10 +55,29 @@ public class NumbersStationController implements Initializable {
|
|||||||
try {
|
try {
|
||||||
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("NumbersStationSelection.fxml"));
|
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("NumbersStationSelection.fxml"));
|
||||||
Parent root = fxmlLoader.load();
|
Parent root = fxmlLoader.load();
|
||||||
|
|
||||||
|
// Pass settings to the controller
|
||||||
|
NumbersStationSelectionController controller = fxmlLoader.getController();
|
||||||
|
controller.setSettings(settings);
|
||||||
|
|
||||||
selectStationStage = new Stage();
|
selectStationStage = new Stage();
|
||||||
|
selectStationStage.initModality(Modality.APPLICATION_MODAL);
|
||||||
|
selectStationStage.setUserData("test");
|
||||||
selectStationStage.setTitle("Numbers Station Selection");
|
selectStationStage.setTitle("Numbers Station Selection");
|
||||||
selectStationStage.setScene(new Scene(root));
|
selectStationStage.setScene(new Scene(root));
|
||||||
selectStationStage.show();
|
selectStationStage.show();
|
||||||
|
selectStationStage.setOnHiding(event -> {
|
||||||
|
String selectedStation = (String) selectStationStage.getUserData();
|
||||||
|
if (selectedStation != null) {
|
||||||
|
StationSettings stationSettings = settings.getStations().stream()
|
||||||
|
.filter(station -> station.getName().equals(selectedStation))
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
if (stationSettings != null) {
|
||||||
|
System.out.println("Selected Station Settings: " + stationSettings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@ -64,8 +86,20 @@ public class NumbersStationController implements Initializable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void loadSettings() throws IOException {
|
||||||
|
File file = new File("setting-test.xml");
|
||||||
|
XmlMapper xmlMapper = new XmlMapper();
|
||||||
|
settings = xmlMapper.readValue(file, NumbersStationSettings.class);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL location, ResourceBundle resources) {
|
public void initialize(URL location, ResourceBundle resources) {
|
||||||
|
try {
|
||||||
|
loadSettings();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
messageTextArea.addEventFilter(KeyEvent.ANY, event -> {
|
messageTextArea.addEventFilter(KeyEvent.ANY, event -> {
|
||||||
int cursorPosition = messageTextArea.getCaretPosition();
|
int cursorPosition = messageTextArea.getCaretPosition();
|
||||||
|
|
||||||
|
@ -6,18 +6,17 @@
|
|||||||
<?import javafx.scene.layout.AnchorPane?>
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
<?import javafx.scene.text.Font?>
|
<?import javafx.scene.text.Font?>
|
||||||
|
|
||||||
|
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="437.0" xmlns="http://javafx.com/javafx/23.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="name.nathanmcrae.NumbersStationSelectionController">
|
||||||
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="437.0" xmlns="http://javafx.com/javafx/23.0.1" xmlns:fx="http://javafx.com/fxml/1">
|
|
||||||
<children>
|
<children>
|
||||||
<Label layoutX="14.0" layoutY="14.0" text="Numbers Stations">
|
<Label layoutX="14.0" layoutY="14.0" text="Numbers Stations">
|
||||||
<font>
|
<font>
|
||||||
<Font size="20.0" />
|
<Font size="20.0" />
|
||||||
</font>
|
</font>
|
||||||
</Label>
|
</Label>
|
||||||
<Button layoutX="358.0" layoutY="17.0" mnemonicParsing="false" text="+" AnchorPane.rightAnchor="54.5" AnchorPane.topAnchor="17.0" />
|
<Button layoutX="358.0" layoutY="17.0" mnemonicParsing="false" text="+" AnchorPane.rightAnchor="54.5" AnchorPane.topAnchor="17.0" onAction="#handleAddButtonPress"/>
|
||||||
<Button layoutX="391.0" layoutY="17.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="25.0" text="-" AnchorPane.rightAnchor="21.0" AnchorPane.topAnchor="17.0" />
|
<Button layoutX="391.0" layoutY="17.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="25.0" text="-" AnchorPane.rightAnchor="21.0" AnchorPane.topAnchor="17.0" onAction="#handleRemoveButtonPress"/>
|
||||||
<ListView layoutX="14.0" layoutY="57.0" prefHeight="301.0" prefWidth="409.0" AnchorPane.bottomAnchor="42.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0" AnchorPane.topAnchor="57.0" />
|
<ListView fx:id="stationListView" layoutX="14.0" layoutY="57.0" prefHeight="301.0" prefWidth="409.0" AnchorPane.bottomAnchor="42.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0" AnchorPane.topAnchor="57.0" />
|
||||||
<Button layoutX="313.0" layoutY="365.0" mnemonicParsing="false" text="Select" AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="76.5" />
|
<Button layoutX="313.0" layoutY="365.0" mnemonicParsing="false" onMousePressed="#handleSelectButtonPress" text="Select" AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="76.5" />
|
||||||
<Button layoutX="370.0" layoutY="365.0" mnemonicParsing="false" text="Cancel" AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="15.5" />
|
<Button layoutX="370.0" layoutY="365.0" mnemonicParsing="false" text="Cancel" AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="15.5" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
|
@ -0,0 +1,77 @@
|
|||||||
|
package name.nathanmcrae;
|
||||||
|
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.collections.ObservableList;
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.scene.control.ListView;
|
||||||
|
import javafx.scene.control.TextInputDialog;
|
||||||
|
import javafx.event.ActionEvent;
|
||||||
|
import javafx.event.Event;
|
||||||
|
import javafx.scene.Node;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public class NumbersStationSelectionController {
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private ListView<String> stationListView;
|
||||||
|
|
||||||
|
private ObservableList<String> stationList;
|
||||||
|
|
||||||
|
public NumbersStationSelectionController() {
|
||||||
|
// Initialize the list with an empty list
|
||||||
|
stationList = FXCollections.observableArrayList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void initialize() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSettings(NumbersStationSettings settings) {
|
||||||
|
// Populate the list with stations from settings
|
||||||
|
for (StationSettings station : settings.getStations()) {
|
||||||
|
System.out.println("Adding station: " + station.getName());
|
||||||
|
stationList.add(station.getName());
|
||||||
|
stationListView.setItems(stationList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void handleAddButtonPress(ActionEvent event) {
|
||||||
|
// Create a TextInputDialog
|
||||||
|
TextInputDialog dialog = new TextInputDialog();
|
||||||
|
dialog.setTitle("New Station");
|
||||||
|
dialog.setHeaderText("Add a New Station");
|
||||||
|
dialog.setContentText("Please enter the station name:");
|
||||||
|
|
||||||
|
// Show the dialog and capture the result
|
||||||
|
Optional<String> result = dialog.showAndWait();
|
||||||
|
result.ifPresent(stationName -> {
|
||||||
|
// Add the new station to the list
|
||||||
|
stationList.add(stationName);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void handleRemoveButtonPress(ActionEvent event) {
|
||||||
|
// Remove the selected item from the list
|
||||||
|
int selectedIndex = stationListView.getSelectionModel().getSelectedIndex();
|
||||||
|
if (selectedIndex >= 0) {
|
||||||
|
stationList.remove(selectedIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void handleSelectButtonPress(Event e) {
|
||||||
|
Node node = (Node) e.getSource();
|
||||||
|
Stage stage = (Stage) node.getScene().getWindow();
|
||||||
|
String selectedStation = stationListView.getSelectionModel().getSelectedItem();
|
||||||
|
|
||||||
|
if (selectedStation != null) {
|
||||||
|
stage.setUserData(selectedStation);
|
||||||
|
System.out.println("Selected Station: " + selectedStation);
|
||||||
|
}
|
||||||
|
stage.close();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user