From a111d12969976bc427a36abcd495a0a3cca1b0b0 Mon Sep 17 00:00:00 2001
From: 0xb00bface <0xboobface@gmail.com>
Date: Mon, 20 Dec 2021 17:29:57 +0100
Subject: [PATCH] Improve input field of export file name

---
 .../ui/controls/AbstractFileSelectionBox.java |  2 +-
 .../ui/controls/SaveFileSelectionBox.java     | 28 +++++++++++++++++++
 .../recorded/AbstractRecordedModelsTab.java   |  4 +--
 .../ui/tabs/recorded/ModelExportDialog.java   | 15 ++++++----
 4 files changed, 40 insertions(+), 9 deletions(-)
 create mode 100644 client/src/main/java/ctbrec/ui/controls/SaveFileSelectionBox.java

diff --git a/client/src/main/java/ctbrec/ui/controls/AbstractFileSelectionBox.java b/client/src/main/java/ctbrec/ui/controls/AbstractFileSelectionBox.java
index 357031f9..b43daa62 100644
--- a/client/src/main/java/ctbrec/ui/controls/AbstractFileSelectionBox.java
+++ b/client/src/main/java/ctbrec/ui/controls/AbstractFileSelectionBox.java
@@ -70,7 +70,7 @@ public abstract class AbstractFileSelectionBox extends HBox {
         fileInput.setText(initialValue);
     }
 
-    private ChangeListener<? super String> textListener() {
+    protected ChangeListener<String> textListener() {
         return (obs, o, n) -> {
             var input = fileInput.getText();
             if (StringUtil.isBlank(input)) {
diff --git a/client/src/main/java/ctbrec/ui/controls/SaveFileSelectionBox.java b/client/src/main/java/ctbrec/ui/controls/SaveFileSelectionBox.java
new file mode 100644
index 00000000..402a75ce
--- /dev/null
+++ b/client/src/main/java/ctbrec/ui/controls/SaveFileSelectionBox.java
@@ -0,0 +1,28 @@
+package ctbrec.ui.controls;
+
+import javafx.beans.value.ChangeListener;
+
+import java.io.File;
+
+public class SaveFileSelectionBox extends FileSelectionBox {
+
+    public SaveFileSelectionBox() {
+        disableValidation();
+        useSaveDialog();
+    }
+
+    @Override
+    protected void setFile(File file) {
+        // nothing to do
+    }
+
+    @Override
+    protected ChangeListener<String> textListener() {
+        return (obs, o, n) -> {};
+    }
+
+    @Override
+    protected String validate(File file) {
+        return null;
+    }
+}
diff --git a/client/src/main/java/ctbrec/ui/tabs/recorded/AbstractRecordedModelsTab.java b/client/src/main/java/ctbrec/ui/tabs/recorded/AbstractRecordedModelsTab.java
index 94324e9b..df79896d 100644
--- a/client/src/main/java/ctbrec/ui/tabs/recorded/AbstractRecordedModelsTab.java
+++ b/client/src/main/java/ctbrec/ui/tabs/recorded/AbstractRecordedModelsTab.java
@@ -60,12 +60,9 @@ import java.time.Instant;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
-import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.ReentrantLock;
 
-import static ctbrec.ui.tabs.recorded.ModelImportExport.ExportIncludes.*;
-
 public abstract class AbstractRecordedModelsTab extends Tab implements TabSelectionListener {
     private static final Logger LOG = LoggerFactory.getLogger(AbstractRecordedModelsTab.class);
     private static final Image SILHOUETTE = new Image(AbstractRecordedModelsTab.class.getResourceAsStream("/silhouette_256.png"));
@@ -258,6 +255,7 @@ public abstract class AbstractRecordedModelsTab extends Tab implements TabSelect
             @Override
             protected void done() {
                 getContent().setCursor(Cursor.DEFAULT);
+                reload();
             }
         };
         GlobalThreadPool.submit(task);
diff --git a/client/src/main/java/ctbrec/ui/tabs/recorded/ModelExportDialog.java b/client/src/main/java/ctbrec/ui/tabs/recorded/ModelExportDialog.java
index 95e7463a..7bae7c1e 100644
--- a/client/src/main/java/ctbrec/ui/tabs/recorded/ModelExportDialog.java
+++ b/client/src/main/java/ctbrec/ui/tabs/recorded/ModelExportDialog.java
@@ -1,7 +1,7 @@
 package ctbrec.ui.tabs.recorded;
 
 import ctbrec.ui.controls.Dialogs;
-import ctbrec.ui.controls.FileSelectionBox;
+import ctbrec.ui.controls.SaveFileSelectionBox;
 import ctbrec.ui.tabs.recorded.ModelImportExport.ExportIncludes;
 import ctbrec.ui.tabs.recorded.ModelImportExport.ExportOptions;
 import javafx.geometry.Insets;
@@ -11,6 +11,7 @@ import javafx.scene.Node;
 import javafx.scene.control.CheckBox;
 import javafx.scene.control.Label;
 import javafx.scene.layout.GridPane;
+import javafx.scene.layout.Priority;
 import javafx.scene.layout.VBox;
 
 import java.io.File;
@@ -27,7 +28,7 @@ public class ModelExportDialog {
     private CheckBox notesButton;
     private CheckBox groupsButton;
     private CheckBox portraisButton;
-    private FileSelectionBox fileSelectionBox;
+    private SaveFileSelectionBox fileSelectionBox;
 
     public ModelExportDialog(Node source) {
         this.source = source;
@@ -41,11 +42,11 @@ public class ModelExportDialog {
         gridPane.setPadding(new Insets(20, 150, 10, 10));
         Label l = new Label("Export to file");
         gridPane.add(l, 0, 0);
-        fileSelectionBox = new FileSelectionBox();
-        fileSelectionBox.useSaveDialog();
-        fileSelectionBox.disableValidation();
+        fileSelectionBox = new SaveFileSelectionBox();
         gridPane.add(fileSelectionBox, 1, 0);
         GridPane.setValignment(l, VPos.TOP);
+        GridPane.setMargin(l, new Insets(5, 0, 0, 0));
+        GridPane.setHgrow(fileSelectionBox, Priority.ALWAYS);
         notesButton = new CheckBox("notes");
         notesButton.setSelected(true);
         groupsButton = new CheckBox("groups");
@@ -57,6 +58,10 @@ public class ModelExportDialog {
         VBox.setMargin(notesButton, new Insets(5));
         VBox.setMargin(groupsButton, new Insets(5));
         VBox.setMargin(portraisButton, new Insets(5));
+        l = new Label("Include");
+        GridPane.setMargin(l, new Insets(5, 0, 0, 0));
+        GridPane.setValignment(l, VPos.TOP);
+        gridPane.add(l, 0, 1);
         gridPane.add(row, 1, 1);
     }