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