|
20 | 20 | import javafx.fxml.FXMLLoader; |
21 | 21 | import javafx.fxml.Initializable; |
22 | 22 | import javafx.scene.Node; |
23 | | -import javafx.scene.control.ChoiceBox; |
| 23 | +import javafx.scene.control.ComboBox; |
24 | 24 | import javafx.scene.control.ScrollPane; |
25 | 25 | import javafx.scene.control.Separator; |
26 | 26 | import javafx.scene.control.Tooltip; |
| 27 | +import javafx.scene.control.SingleSelectionModel; |
27 | 28 | import javafx.util.StringConverter; |
28 | 29 | import se.llbit.chunky.renderer.postprocessing.PostProcessingFilter; |
29 | 30 | import se.llbit.chunky.renderer.postprocessing.PostProcessingFilters; |
|
32 | 33 | import se.llbit.chunky.ui.DoubleAdjuster; |
33 | 34 | import se.llbit.chunky.ui.controller.RenderControlsFxController; |
34 | 35 | import se.llbit.chunky.ui.render.RenderControlsTab; |
| 36 | +import se.llbit.chunky.ui.RegisterableCellAdapter; |
| 37 | +import se.llbit.fxutil.CustomizedListCellFactory; |
35 | 38 | import se.llbit.util.ProgressListener; |
36 | 39 | import se.llbit.util.TaskTracker; |
| 40 | +import se.llbit.util.TaskTracker.Task; |
37 | 41 |
|
38 | 42 | import java.io.IOException; |
39 | 43 | import java.net.URL; |
40 | 44 | import java.util.ResourceBundle; |
41 | | -import se.llbit.util.TaskTracker.Task; |
42 | 45 |
|
43 | 46 | public class PostprocessingTab extends ScrollPane implements RenderControlsTab, Initializable { |
44 | 47 | private Scene scene; |
45 | 48 | private RenderControlsFxController controller; |
46 | 49 |
|
47 | 50 | @FXML private DoubleAdjuster exposure; |
48 | | - @FXML private ChoiceBox<PostProcessingFilter> postprocessingFilter; |
| 51 | + @FXML private ComboBox<PostProcessingFilter> postprocessingFilter; |
49 | 52 |
|
50 | 53 | public PostprocessingTab() throws IOException { |
51 | 54 | FXMLLoader loader = new FXMLLoader(getClass().getResource("PostprocessingTab.fxml")); |
@@ -84,21 +87,13 @@ public PostprocessingTab() throws IOException { |
84 | 87 | postprocessingFilter.getSelectionModel().select(Scene.DEFAULT_POSTPROCESSING_FILTER); |
85 | 88 | postprocessingFilter.getSelectionModel().selectedItemProperty().addListener( |
86 | 89 | (observable, oldValue, newValue) -> { |
87 | | - scene.setPostprocess(newValue); |
88 | | - scene.postProcessFrame(new TaskTracker(ProgressListener.NONE)); |
89 | | - controller.getCanvas().forceRepaint(); |
| 90 | + if (!(newValue instanceof Separator)) { |
| 91 | + scene.setPostprocess(newValue); |
| 92 | + scene.postProcessFrame(new TaskTracker(ProgressListener.NONE)); |
| 93 | + controller.getCanvas().forceRepaint(); |
| 94 | + } |
90 | 95 | }); |
91 | | - postprocessingFilter.setConverter(new StringConverter<PostProcessingFilter>() { |
92 | | - @Override |
93 | | - public String toString(PostProcessingFilter object) { |
94 | | - return object == null ? null : object.getName(); |
95 | | - } |
96 | | - |
97 | | - @Override |
98 | | - public PostProcessingFilter fromString(String string) { |
99 | | - return PostProcessingFilters.getPostProcessingFilterFromName(string).orElse(Scene.DEFAULT_POSTPROCESSING_FILTER); |
100 | | - } |
101 | | - }); |
| 96 | + CustomizedListCellFactory.install(postprocessingFilter, RegisterableCellAdapter.INSTANCE); |
102 | 97 | exposure.setName("Exposure"); |
103 | 98 | exposure.setTooltip("Linear exposure of the image."); |
104 | 99 | exposure.setRange(Scene.MIN_EXPOSURE, Scene.MAX_EXPOSURE); |
|
0 commit comments