Skip to content

Commit 5da86a4

Browse files
committed
Added D&D audio file from an asset tree to audio data control.
1 parent 98f197d commit 5da86a4

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

src/com/ss/editor/ui/control/model/property/control/AudioKeyModelPropertyEditor.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static com.ss.editor.util.EditorUtil.getAssetFile;
44
import static com.ss.editor.util.EditorUtil.getRealFile;
55
import static com.ss.editor.util.EditorUtil.toAssetPath;
6+
import static rlib.util.ClassUtils.unsafeCast;
67

78
import com.jme3.audio.AudioData;
89
import com.jme3.audio.AudioKey;
@@ -27,18 +28,26 @@
2728
import org.jetbrains.annotations.NotNull;
2829
import org.jetbrains.annotations.Nullable;
2930

31+
import java.io.File;
3032
import java.nio.file.Files;
3133
import java.nio.file.Path;
3234
import java.nio.file.Paths;
35+
import java.util.List;
3336
import java.util.Objects;
37+
import java.util.Set;
3438
import java.util.function.Predicate;
3539

3640
import javafx.geometry.Insets;
3741
import javafx.scene.control.Button;
3842
import javafx.scene.control.Label;
3943
import javafx.scene.image.ImageView;
44+
import javafx.scene.input.DataFormat;
45+
import javafx.scene.input.DragEvent;
46+
import javafx.scene.input.Dragboard;
47+
import javafx.scene.input.TransferMode;
4048
import javafx.scene.layout.HBox;
4149
import rlib.ui.util.FXUtils;
50+
import rlib.util.FileUtils;
4251
import rlib.util.StringUtils;
4352
import rlib.util.array.Array;
4453
import rlib.util.array.ArrayFactory;
@@ -77,6 +86,64 @@ public class AudioKeyModelPropertyEditor extends ModelPropertyControl<AudioNode,
7786
public AudioKeyModelPropertyEditor(@Nullable final AudioKey element, @NotNull final String paramName,
7887
@NotNull final ModelChangeConsumer changeConsumer) {
7988
super(element, paramName, changeConsumer);
89+
setOnDragOver(this::dragOver);
90+
setOnDragDropped(this::dragDropped);
91+
setOnDragExited(this::dragExited);
92+
}
93+
94+
/**
95+
* Handle grad exiting.
96+
*/
97+
private void dragExited(@NotNull final DragEvent dragEvent) {
98+
99+
}
100+
101+
/**
102+
* Handle dropped files to editor.
103+
*/
104+
private void dragDropped(@NotNull final DragEvent dragEvent) {
105+
106+
final Dragboard dragboard = dragEvent.getDragboard();
107+
final List<File> files = unsafeCast(dragboard.getContent(DataFormat.FILES));
108+
109+
if (files == null || files.size() != 1) {
110+
return;
111+
}
112+
113+
final File file = files.get(0);
114+
final String extension = FileUtils.getExtension(file.getName());
115+
116+
if (!AUDIO_EXTENSIONS.contains(extension)) {
117+
return;
118+
}
119+
120+
addAudioData(file.toPath());
121+
}
122+
123+
/**
124+
* Handle drag over.
125+
*/
126+
private void dragOver(@NotNull final DragEvent dragEvent) {
127+
128+
final Dragboard dragboard = dragEvent.getDragboard();
129+
final List<File> files = unsafeCast(dragboard.getContent(DataFormat.FILES));
130+
131+
if (files == null || files.size() != 1) {
132+
return;
133+
}
134+
135+
final File file = files.get(0);
136+
final String extension = FileUtils.getExtension(file.getName());
137+
138+
if (!AUDIO_EXTENSIONS.contains(extension)) {
139+
return;
140+
}
141+
142+
final Set<TransferMode> transferModes = dragboard.getTransferModes();
143+
final boolean isCopy = transferModes.contains(TransferMode.COPY);
144+
145+
dragEvent.acceptTransferModes(isCopy ? TransferMode.COPY : TransferMode.MOVE);
146+
dragEvent.consume();
80147
}
81148

82149
@Override

0 commit comments

Comments
 (0)