Skip to content

Commit ceab1b6

Browse files
committed
Implemented D&D from an asset folder to material texture param
1 parent fbdc7e9 commit ceab1b6

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

src/com/ss/editor/ui/control/material/Texture2DMaterialParamControl.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import static com.ss.editor.util.EditorUtil.getAssetFile;
88
import static com.ss.editor.util.EditorUtil.toAssetPath;
99
import static java.util.Objects.requireNonNull;
10+
import static rlib.util.ClassUtils.unsafeCast;
1011

1112
import com.jme3.asset.AssetManager;
1213
import com.jme3.asset.TextureKey;
@@ -35,7 +36,10 @@
3536

3637
import org.jetbrains.annotations.NotNull;
3738

39+
import java.io.File;
3840
import java.nio.file.Path;
41+
import java.util.List;
42+
import java.util.Set;
3943
import java.util.function.Consumer;
4044
import java.util.function.Predicate;
4145

@@ -44,8 +48,13 @@
4448
import javafx.scene.control.CheckBox;
4549
import javafx.scene.control.Tooltip;
4650
import javafx.scene.image.ImageView;
51+
import javafx.scene.input.DataFormat;
52+
import javafx.scene.input.DragEvent;
53+
import javafx.scene.input.Dragboard;
54+
import javafx.scene.input.TransferMode;
4755
import javafx.scene.layout.VBox;
4856
import rlib.ui.util.FXUtils;
57+
import rlib.util.FileUtils;
4958
import rlib.util.array.Array;
5059
import rlib.util.array.ArrayFactory;
5160

@@ -97,6 +106,9 @@ public class Texture2DMaterialParamControl extends MaterialParamControl {
97106
public Texture2DMaterialParamControl(@NotNull final Consumer<EditorOperation> changeHandler,
98107
@NotNull final Material material, @NotNull final String parameterName) {
99108
super(changeHandler, material, parameterName);
109+
setOnDragOver(this::dragOver);
110+
setOnDragDropped(this::dragDropped);
111+
setOnDragExited(this::dragExited);
100112
}
101113

102114
@Override
@@ -153,6 +165,61 @@ protected void createComponents() {
153165
flipButton.disableProperty().bind(texturePreview.imageProperty().isNull());
154166
}
155167

168+
/**
169+
* Handle grad exiting.
170+
*/
171+
private void dragExited(@NotNull final DragEvent dragEvent) {
172+
173+
}
174+
175+
/**
176+
* Handle dropped files to editor.
177+
*/
178+
private void dragDropped(@NotNull final DragEvent dragEvent) {
179+
180+
final Dragboard dragboard = dragEvent.getDragboard();
181+
final List<File> files = unsafeCast(dragboard.getContent(DataFormat.FILES));
182+
183+
if (files == null || files.size() != 1) {
184+
return;
185+
}
186+
187+
final File file = files.get(0);
188+
final String extension = FileUtils.getExtension(file.getName());
189+
190+
if (!TEXTURE_EXTENSIONS.contains(extension)) {
191+
return;
192+
}
193+
194+
addTexture(file.toPath());
195+
}
196+
197+
/**
198+
* Handle drag over.
199+
*/
200+
private void dragOver(@NotNull final DragEvent dragEvent) {
201+
202+
final Dragboard dragboard = dragEvent.getDragboard();
203+
final List<File> files = unsafeCast(dragboard.getContent(DataFormat.FILES));
204+
205+
if (files == null || files.size() != 1) {
206+
return;
207+
}
208+
209+
final File file = files.get(0);
210+
final String extension = FileUtils.getExtension(file.getName());
211+
212+
if (!TEXTURE_EXTENSIONS.contains(extension)) {
213+
return;
214+
}
215+
216+
final Set<TransferMode> transferModes = dragboard.getTransferModes();
217+
final boolean isCopy = transferModes.contains(TransferMode.COPY);
218+
219+
dragEvent.acceptTransferModes(isCopy ? TransferMode.COPY : TransferMode.MOVE);
220+
dragEvent.consume();
221+
}
222+
156223
@Override
157224
protected double getLabelPercentWidth() {
158225
return 0.9;

0 commit comments

Comments
 (0)