Create new sensors directly in the application
This commit is contained in:
@@ -13,6 +13,7 @@
|
|||||||
<?import javafx.scene.control.TableView?>
|
<?import javafx.scene.control.TableView?>
|
||||||
<?import javafx.scene.control.TableColumn?>
|
<?import javafx.scene.control.TableColumn?>
|
||||||
<?import javafx.scene.control.TreeView?>
|
<?import javafx.scene.control.TreeView?>
|
||||||
|
<?import javafx.scene.control.ChoiceBox?>
|
||||||
<BorderPane xmlns:fx="http://javafx.com/fxml" prefHeight="400.0" prefWidth="600.0">
|
<BorderPane xmlns:fx="http://javafx.com/fxml" prefHeight="400.0" prefWidth="600.0">
|
||||||
<center>
|
<center>
|
||||||
<SplitPane>
|
<SplitPane>
|
||||||
@@ -38,6 +39,11 @@
|
|||||||
<TableColumn fx:id="sourceId" text="Id" />
|
<TableColumn fx:id="sourceId" text="Id" />
|
||||||
</columns>
|
</columns>
|
||||||
</TableView>
|
</TableView>
|
||||||
|
<FlowPane>
|
||||||
|
<TextField fx:id="newName" />
|
||||||
|
<ChoiceBox fx:id="createType" />
|
||||||
|
<Button onAction="#onCreateClick">Create</Button>
|
||||||
|
</FlowPane>
|
||||||
</VBox>
|
</VBox>
|
||||||
</SplitPane>
|
</SplitPane>
|
||||||
</center>
|
</center>
|
||||||
|
@@ -3,6 +3,7 @@ package fr.uca.iut.clfreville2.gui;
|
|||||||
import fr.uca.iut.clfreville2.gui.image.ImageSupplier;
|
import fr.uca.iut.clfreville2.gui.image.ImageSupplier;
|
||||||
import fr.uca.iut.clfreville2.gui.image.SensorTypeImageSupplier;
|
import fr.uca.iut.clfreville2.gui.image.SensorTypeImageSupplier;
|
||||||
import fr.uca.iut.clfreville2.gui.image.StandardImageSupplier;
|
import fr.uca.iut.clfreville2.gui.image.StandardImageSupplier;
|
||||||
|
import fr.uca.iut.clfreville2.gui.list.NameableStringConverter;
|
||||||
import fr.uca.iut.clfreville2.gui.table.WeightSpinnerTableCell;
|
import fr.uca.iut.clfreville2.gui.table.WeightSpinnerTableCell;
|
||||||
import fr.uca.iut.clfreville2.gui.thread.Ticker;
|
import fr.uca.iut.clfreville2.gui.thread.Ticker;
|
||||||
import fr.uca.iut.clfreville2.gui.tree.SensorTreeCell;
|
import fr.uca.iut.clfreville2.gui.tree.SensorTreeCell;
|
||||||
@@ -12,12 +13,17 @@ import fr.uca.iut.clfreville2.model.binding.ToBooleanBinding;
|
|||||||
import fr.uca.iut.clfreville2.model.sensor.ManualSensor;
|
import fr.uca.iut.clfreville2.model.sensor.ManualSensor;
|
||||||
import fr.uca.iut.clfreville2.model.sensor.Sensor;
|
import fr.uca.iut.clfreville2.model.sensor.Sensor;
|
||||||
import fr.uca.iut.clfreville2.model.sensor.VirtualSensor;
|
import fr.uca.iut.clfreville2.model.sensor.VirtualSensor;
|
||||||
|
import fr.uca.iut.clfreville2.model.sensor.provider.AutoSensorProvider;
|
||||||
|
import fr.uca.iut.clfreville2.model.sensor.provider.ManualSensorProvider;
|
||||||
|
import fr.uca.iut.clfreville2.model.sensor.provider.SensorProvider;
|
||||||
|
import fr.uca.iut.clfreville2.model.sensor.provider.VirtualSensorProvider;
|
||||||
import fr.uca.iut.clfreville2.persistence.StubSensorRegistryLoader;
|
import fr.uca.iut.clfreville2.persistence.StubSensorRegistryLoader;
|
||||||
import javafx.beans.property.SimpleObjectProperty;
|
import javafx.beans.property.SimpleObjectProperty;
|
||||||
import javafx.collections.FXCollections;
|
import javafx.collections.FXCollections;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.scene.control.Button;
|
import javafx.scene.control.Button;
|
||||||
import javafx.scene.control.CheckBox;
|
import javafx.scene.control.CheckBox;
|
||||||
|
import javafx.scene.control.ChoiceBox;
|
||||||
import javafx.scene.control.Slider;
|
import javafx.scene.control.Slider;
|
||||||
import javafx.scene.control.Spinner;
|
import javafx.scene.control.Spinner;
|
||||||
import javafx.scene.control.TableCell;
|
import javafx.scene.control.TableCell;
|
||||||
@@ -26,7 +32,6 @@ import javafx.scene.control.TableView;
|
|||||||
import javafx.scene.control.TextField;
|
import javafx.scene.control.TextField;
|
||||||
import javafx.scene.control.TreeItem;
|
import javafx.scene.control.TreeItem;
|
||||||
import javafx.scene.control.TreeView;
|
import javafx.scene.control.TreeView;
|
||||||
import javafx.scene.control.cell.PropertyValueFactory;
|
|
||||||
import javafx.scene.image.ImageView;
|
import javafx.scene.image.ImageView;
|
||||||
import javafx.scene.text.Text;
|
import javafx.scene.text.Text;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
@@ -66,6 +71,15 @@ public class MainWindows {
|
|||||||
@FXML
|
@FXML
|
||||||
private TableColumn<VirtualSensor.DataSource, String> sourceId;
|
private TableColumn<VirtualSensor.DataSource, String> sourceId;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private TextField newName;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private ChoiceBox<SensorProvider> createType;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Button createButton;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private Spinner<Integer> updateInterval;
|
private Spinner<Integer> updateInterval;
|
||||||
|
|
||||||
@@ -112,11 +126,17 @@ public class MainWindows {
|
|||||||
}).show();
|
}).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
public void onCreateClick() {
|
||||||
|
createType.getSelectionModel().getSelectedItem().create(registry, newName.getText());
|
||||||
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void initialize() {
|
private void initialize() {
|
||||||
bindSensorTree();
|
bindSensorTree();
|
||||||
bindActiveButtons();
|
bindActiveButtons();
|
||||||
bindSources();
|
bindSources();
|
||||||
|
bindProvidable();
|
||||||
bindUpdate();
|
bindUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,6 +191,16 @@ public class MainWindows {
|
|||||||
sourceId.setCellValueFactory(cell -> cell.getValue().sensor().idProperty().asString());
|
sourceId.setCellValueFactory(cell -> cell.getValue().sensor().idProperty().asString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void bindProvidable() {
|
||||||
|
createType.getItems().addAll(
|
||||||
|
new ManualSensorProvider(),
|
||||||
|
new AutoSensorProvider(),
|
||||||
|
new VirtualSensorProvider()
|
||||||
|
);
|
||||||
|
createType.setConverter(new NameableStringConverter<>(createType.getItems()));
|
||||||
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void bindUpdate() {
|
private void bindUpdate() {
|
||||||
updateInterval.getValueFactory().valueProperty().bindBidirectional(ticker.millisPerTickProperty().asObject());
|
updateInterval.getValueFactory().valueProperty().bindBidirectional(ticker.millisPerTickProperty().asObject());
|
||||||
|
@@ -0,0 +1,28 @@
|
|||||||
|
package fr.uca.iut.clfreville2.gui.list;
|
||||||
|
|
||||||
|
import fr.uca.iut.clfreville2.model.shared.Nameable;
|
||||||
|
import javafx.util.StringConverter;
|
||||||
|
|
||||||
|
public class NameableStringConverter<T extends Nameable> extends StringConverter<T> {
|
||||||
|
|
||||||
|
private final Iterable<T> items;
|
||||||
|
|
||||||
|
public NameableStringConverter(Iterable<T> items) {
|
||||||
|
this.items = items;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(T object) {
|
||||||
|
return object.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T fromString(String string) {
|
||||||
|
for (T item : items) {
|
||||||
|
if (item.getName().equals(string)) {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,18 @@
|
|||||||
|
package fr.uca.iut.clfreville2.model.sensor.provider;
|
||||||
|
|
||||||
|
import fr.uca.iut.clfreville2.model.SensorRegistry;
|
||||||
|
import fr.uca.iut.clfreville2.model.sensor.Sensor;
|
||||||
|
import fr.uca.iut.clfreville2.model.sensor.auto.RandomVariationStrategy;
|
||||||
|
|
||||||
|
public class AutoSensorProvider implements SensorProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Sensor create(SensorRegistry registry, String name) {
|
||||||
|
return registry.createAuto(name, new RandomVariationStrategy(5));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "Auto";
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,17 @@
|
|||||||
|
package fr.uca.iut.clfreville2.model.sensor.provider;
|
||||||
|
|
||||||
|
import fr.uca.iut.clfreville2.model.SensorRegistry;
|
||||||
|
import fr.uca.iut.clfreville2.model.sensor.Sensor;
|
||||||
|
|
||||||
|
public class ManualSensorProvider implements SensorProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Sensor create(SensorRegistry registry, String name) {
|
||||||
|
return registry.createManual(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "Manual";
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,10 @@
|
|||||||
|
package fr.uca.iut.clfreville2.model.sensor.provider;
|
||||||
|
|
||||||
|
import fr.uca.iut.clfreville2.model.SensorRegistry;
|
||||||
|
import fr.uca.iut.clfreville2.model.sensor.Sensor;
|
||||||
|
import fr.uca.iut.clfreville2.model.shared.Nameable;
|
||||||
|
|
||||||
|
public interface SensorProvider extends Nameable {
|
||||||
|
|
||||||
|
Sensor create(SensorRegistry registry, String name);
|
||||||
|
}
|
@@ -0,0 +1,17 @@
|
|||||||
|
package fr.uca.iut.clfreville2.model.sensor.provider;
|
||||||
|
|
||||||
|
import fr.uca.iut.clfreville2.model.SensorRegistry;
|
||||||
|
import fr.uca.iut.clfreville2.model.sensor.Sensor;
|
||||||
|
|
||||||
|
public class VirtualSensorProvider implements SensorProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Sensor create(SensorRegistry registry, String name) {
|
||||||
|
return registry.createVirtual(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "Virtual";
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user