Skip to content

Commit 646a46f

Browse files
committed
fixed copying files from SS editor to GNOME systems.
1 parent 603a97d commit 646a46f

4 files changed

Lines changed: 62 additions & 17 deletions

File tree

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ dependencies {
9191
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'
9292

9393
// extensions
94-
compile ('com.github.JavaSaBr:jme3-spaceshift-extension:master-SNAPSHOT') {
94+
compile ('com.github.JavaSaBr:jme3-spaceshift-extension:1.3.0') {
9595
exclude group: 'org.jmonkeyengine'
9696
}
9797
compile ('com.github.JavaSaBr:tonegodemitter:2.2.4') {
@@ -107,7 +107,7 @@ dependencies {
107107
task copyToLib(type: Copy) {
108108

109109
doFirst {
110-
println("delete " + "$buildDir/dependences");
110+
println("delete " + "$buildDir/dependences")
111111
GFileUtils.deleteDirectory(new File("$buildDir/dependences"))
112112
}
113113

src/main/java/com/ss/editor/ui/component/asset/tree/context/menu/action/CopyFileAction.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.ss.editor.ui.component.asset.tree.context.menu.action;
22

3-
import static java.util.Collections.singletonList;
43
import com.ss.editor.Messages;
54
import com.ss.editor.ui.Icons;
65
import com.ss.editor.ui.component.asset.tree.resource.ResourceElement;
76
import com.ss.editor.util.EditorUtil;
7+
import com.ss.rlib.util.array.ArrayFactory;
88
import javafx.scene.control.MenuItem;
99
import javafx.scene.image.ImageView;
1010
import javafx.scene.input.Clipboard;
@@ -46,8 +46,8 @@ private void processCopy() {
4646
final Path file = element.getFile();
4747

4848
final ClipboardContent content = new ClipboardContent();
49-
content.putFiles(singletonList(file.toFile()));
50-
content.put(EditorUtil.JAVA_PARAM, "copy");
49+
50+
EditorUtil.addCopiedFile(ArrayFactory.asArray(file), content);
5151

5252
final Clipboard clipboard = Clipboard.getSystemClipboard();
5353
clipboard.setContent(content);

src/main/java/com/ss/editor/ui/component/asset/tree/context/menu/action/PasteFileAction.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
package com.ss.editor.ui.component.asset.tree.context.menu.action;
22

33
import static com.ss.rlib.util.ClassUtils.unsafeCast;
4-
54
import com.ss.editor.Messages;
65
import com.ss.editor.ui.Icons;
76
import com.ss.editor.ui.component.asset.tree.resource.ResourceElement;
87
import com.ss.editor.ui.event.FXEventManager;
98
import com.ss.editor.ui.event.impl.MovedFileEvent;
109
import com.ss.editor.ui.event.impl.RequestSelectFileEvent;
1110
import com.ss.editor.util.EditorUtil;
12-
11+
import com.ss.rlib.logging.Logger;
12+
import com.ss.rlib.logging.LoggerManager;
13+
import com.ss.rlib.util.FileUtils;
14+
import com.ss.rlib.util.array.Array;
15+
import com.ss.rlib.util.array.ArrayFactory;
16+
import javafx.scene.control.MenuItem;
17+
import javafx.scene.image.ImageView;
18+
import javafx.scene.input.Clipboard;
19+
import javafx.scene.input.DataFormat;
1320
import org.jetbrains.annotations.NotNull;
1421

1522
import java.io.File;
@@ -18,16 +25,6 @@
1825
import java.nio.file.Path;
1926
import java.util.List;
2027

21-
import javafx.scene.control.MenuItem;
22-
import javafx.scene.image.ImageView;
23-
import javafx.scene.input.Clipboard;
24-
import javafx.scene.input.DataFormat;
25-
import com.ss.rlib.logging.Logger;
26-
import com.ss.rlib.logging.LoggerManager;
27-
import com.ss.rlib.util.FileUtils;
28-
import com.ss.rlib.util.array.Array;
29-
import com.ss.rlib.util.array.ArrayFactory;
30-
3128
/**
3229
* The action to paste a file.
3330
*

src/main/java/com/ss/editor/util/EditorUtil.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
import static java.lang.Math.acos;
66
import static java.lang.Math.toDegrees;
77
import static java.lang.ThreadLocal.withInitial;
8+
import static java.util.stream.Collectors.toList;
89
import com.jme3.math.Vector2f;
910
import com.jme3.math.Vector3f;
1011
import com.jme3.renderer.Camera;
12+
import com.jme3.system.JmeSystem;
13+
import com.jme3.system.Platform;
1114
import com.ss.editor.JFXApplication;
1215
import com.ss.editor.analytics.google.GAnalytics;
1316
import com.ss.editor.annotation.FXThread;
@@ -30,6 +33,7 @@
3033
import javafx.scene.control.DialogPane;
3134
import javafx.scene.control.TextArea;
3235
import javafx.scene.input.Clipboard;
36+
import javafx.scene.input.ClipboardContent;
3337
import javafx.scene.input.DataFormat;
3438
import javafx.scene.layout.VBox;
3539
import org.apache.commons.lang3.SystemUtils;
@@ -40,6 +44,7 @@
4044
import java.net.MalformedURLException;
4145
import java.net.URL;
4246
import java.net.URLClassLoader;
47+
import java.nio.ByteBuffer;
4348
import java.nio.file.Path;
4449
import java.text.SimpleDateFormat;
4550
import java.util.ArrayList;
@@ -62,10 +67,53 @@ public abstract class EditorUtil {
6267
@NotNull
6368
public static final DataFormat JAVA_PARAM = new DataFormat("SSEditor.javaParam");
6469

70+
/**
71+
* Represents a List of Files.
72+
*/
73+
public static final DataFormat GNOME_FILES = new DataFormat("x-special/gnome-copied-files");
74+
6575
@NotNull
6676
private static final ThreadLocal<SimpleDateFormat> LOCATE_DATE_FORMAT = withInitial(() ->
6777
new SimpleDateFormat("HH:mm:ss:SSS"));
6878

79+
/**
80+
* Added files like files to copy to clipboard content.
81+
*
82+
* @param paths the list of files.
83+
* @param content the content to store.
84+
*/
85+
public static void addCopiedFile(@NotNull final Array<Path> paths, @NotNull final ClipboardContent content) {
86+
87+
final List<File> files = paths.stream()
88+
.map(Path::toFile)
89+
.collect(toList());
90+
91+
content.putFiles(files);
92+
content.put(EditorUtil.JAVA_PARAM, "copy");
93+
94+
final Platform platform = JmeSystem.getPlatform();
95+
96+
if (platform == Platform.Linux64 || platform == Platform.Linux32) {
97+
98+
final StringBuilder builder = new StringBuilder("copy\n");
99+
100+
paths.forEach(builder, (path, b) ->
101+
b.append(path.toUri().toASCIIString()).append('\n'));
102+
103+
builder.delete(builder.length() - 1, builder.length());
104+
105+
final ByteBuffer buffer = ByteBuffer.allocate(builder.length());
106+
107+
for (int i = 0, length = builder.length(); i < length; i++) {
108+
buffer.put((byte) builder.charAt(i));
109+
}
110+
111+
buffer.flip();
112+
113+
content.put(GNOME_FILES, buffer);
114+
}
115+
}
116+
69117
/**
70118
* Check exists boolean.
71119
*

0 commit comments

Comments
 (0)