parent
1972d81aa1
commit
ded77eeb66
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.0 KiB |
@ -0,0 +1,24 @@
|
|||||||
|
package fr.uca.iut.clfreville2.gui.image;
|
||||||
|
|
||||||
|
import fr.uca.iut.clfreville2.model.sensor.Sensor;
|
||||||
|
import fr.uca.iut.clfreville2.model.sensor.VirtualSensor;
|
||||||
|
import javafx.scene.image.Image;
|
||||||
|
|
||||||
|
public class SensorTypeImageSupplier implements ImageSupplier {
|
||||||
|
|
||||||
|
private final Image simpleIcon;
|
||||||
|
private final Image multiIcon;
|
||||||
|
|
||||||
|
public SensorTypeImageSupplier() {
|
||||||
|
simpleIcon = new Image("/images/captor_icon.png");
|
||||||
|
multiIcon = new Image("/images/multi_captor_icon.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Image apply(Sensor sensor) {
|
||||||
|
if (sensor instanceof VirtualSensor) {
|
||||||
|
return multiIcon;
|
||||||
|
}
|
||||||
|
return simpleIcon;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package fr.uca.iut.clfreville2.gui.tree;
|
||||||
|
|
||||||
|
import fr.uca.iut.clfreville2.gui.image.ImageSupplier;
|
||||||
|
import fr.uca.iut.clfreville2.model.sensor.Sensor;
|
||||||
|
import javafx.scene.control.TreeCell;
|
||||||
|
import javafx.scene.image.ImageView;
|
||||||
|
|
||||||
|
public class SensorTreeCell extends TreeCell<Sensor> {
|
||||||
|
|
||||||
|
private final ImageView imageView = new ImageView();
|
||||||
|
|
||||||
|
private final ImageSupplier imageSupplier;
|
||||||
|
|
||||||
|
public SensorTreeCell(ImageSupplier imageSupplier) {
|
||||||
|
this.imageSupplier = imageSupplier;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void updateItem(Sensor item, boolean empty) {
|
||||||
|
super.updateItem(item, empty);
|
||||||
|
if (empty || item == null) {
|
||||||
|
textProperty().unbind();
|
||||||
|
textProperty().setValue(null);
|
||||||
|
setGraphic(null);
|
||||||
|
} else {
|
||||||
|
imageView.setImage(imageSupplier.apply(item));
|
||||||
|
textProperty().bind(item.displayNameExpression());
|
||||||
|
setGraphic(imageView);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,82 @@
|
|||||||
|
package fr.uca.iut.clfreville2.gui.tree;
|
||||||
|
|
||||||
|
import fr.uca.iut.clfreville2.model.SensorRegistry;
|
||||||
|
import fr.uca.iut.clfreville2.model.sensor.Sensor;
|
||||||
|
import fr.uca.iut.clfreville2.model.sensor.VirtualSensor;
|
||||||
|
import javafx.collections.ListChangeListener;
|
||||||
|
import javafx.scene.control.TreeItem;
|
||||||
|
|
||||||
|
public final class SensorTreeItemBridge {
|
||||||
|
|
||||||
|
private SensorTreeItemBridge() {}
|
||||||
|
|
||||||
|
public static TreeItem<Sensor> create(Sensor sensor) {
|
||||||
|
TreeItem<Sensor> item = new TreeItem<>(sensor);
|
||||||
|
if (sensor instanceof VirtualSensor virtual) {
|
||||||
|
addChildren(virtual.sourcesProperty(), item);
|
||||||
|
virtual.sourcesProperty().addListener(new ListChangeListener<VirtualSensor.DataSource>() {
|
||||||
|
@Override
|
||||||
|
public void onChanged(Change<? extends VirtualSensor.DataSource> change) {
|
||||||
|
while (change.next()) {
|
||||||
|
if (change.wasPermutated()) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
} else if (change.wasUpdated()) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
} else {
|
||||||
|
addChildren(change.getAddedSubList(), item);
|
||||||
|
removeChildren(change.getRemoved(), item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TreeItem<Sensor> create(SensorRegistry registry) {
|
||||||
|
TreeItem<Sensor> root = new TreeItem<>();
|
||||||
|
for (Sensor sensor : registry) {
|
||||||
|
root.getChildren().add(create(sensor));
|
||||||
|
}
|
||||||
|
registry.sensorsProperty().addListener(new ListChangeListener<Sensor>() {
|
||||||
|
@Override
|
||||||
|
public void onChanged(Change<? extends Sensor> change) {
|
||||||
|
while (change.next()) {
|
||||||
|
if (change.wasPermutated()) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
} else if (change.wasUpdated()) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
} else {
|
||||||
|
addSensors(change.getAddedSubList(), root);
|
||||||
|
removeSensors(change.getRemoved(), root);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return root;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void addSensors(Iterable<? extends Sensor> sensors, TreeItem<Sensor> item) {
|
||||||
|
for (Sensor sensor : sensors) {
|
||||||
|
item.getChildren().add(create(sensor));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void addChildren(Iterable<? extends VirtualSensor.DataSource> sources, TreeItem<Sensor> item) {
|
||||||
|
for (VirtualSensor.DataSource source : sources) {
|
||||||
|
item.getChildren().add(create(source.sensor()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void removeChildren(Iterable<? extends VirtualSensor.DataSource> sources, TreeItem<Sensor> item) {
|
||||||
|
for (VirtualSensor.DataSource source : sources) {
|
||||||
|
item.getChildren().removeIf(child -> child.getValue().equals(source.sensor()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void removeSensors(Iterable<? extends Sensor> sensors, TreeItem<Sensor> item) {
|
||||||
|
for (Sensor sensor : sensors) {
|
||||||
|
item.getChildren().removeIf(child -> child.getValue().equals(sensor));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue