Added native file chooser, fixed macOS prefs errors

This commit is contained in:
Anuken
2018-05-24 21:13:31 -04:00
parent b0f1ad63ee
commit c19fcb831f
7 changed files with 99 additions and 27 deletions

View File

@@ -8,6 +8,7 @@ import io.anuke.kryonet.KryoServer;
import io.anuke.mindustry.Mindustry;
import io.anuke.mindustry.core.Platform;
import io.anuke.mindustry.net.Net;
import io.anuke.ucore.UCore;
import io.anuke.ucore.util.OS;
public class DesktopLauncher {
@@ -20,7 +21,7 @@ public class DesktopLauncher {
config.setWindowedMode(960, 540);
config.setWindowIcon("sprites/icon.png");
if(OS.isMac) {
config.setPreferencesConfig(System.getProperty("DocumentsDirectory"), FileType.Absolute);
config.setPreferencesConfig(UCore.getProperty("user.home") + "/Library/Application Support/", FileType.Absolute);
}
Platform.instance = new DesktopPlatform(arg);

View File

@@ -3,17 +3,25 @@ package io.anuke.mindustry.desktop;
import club.minnced.discord.rpc.DiscordEventHandlers;
import club.minnced.discord.rpc.DiscordRPC;
import club.minnced.discord.rpc.DiscordRichPresence;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Base64Coder;
import io.anuke.kryonet.DefaultThreadImpl;
import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.core.ThreadHandler.ThreadProvider;
import io.anuke.mindustry.core.Platform;
import io.anuke.mindustry.core.ThreadHandler.ThreadProvider;
import io.anuke.mindustry.net.Net;
import io.anuke.ucore.UCore;
import io.anuke.ucore.core.Settings;
import io.anuke.ucore.function.Consumer;
import io.anuke.ucore.util.Strings;
import javafx.application.Application;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import javafx.stage.Stage;
import javax.swing.*;
import java.io.File;
import java.net.NetworkInterface;
import java.text.DateFormat;
import java.text.NumberFormat;
@@ -40,6 +48,19 @@ public class DesktopPlatform extends Platform {
}
}
@Override
public void showFileChooser(String text, String content, Consumer<FileHandle> cons, boolean open, String... filter) {
new Thread(() -> {
FxApp.text = text;
FxApp.cons = cons;
FxApp.filter = filter;
FxApp.open = open;
FxApp.open();
}){{
setDaemon(true);
}}.start();
}
@Override
public String format(Date date){
return format.format(date);
@@ -139,4 +160,56 @@ public class DesktopPlatform extends Platform {
System.arraycopy(bytes, 0, result, 0, bytes.length);
return !new String(Base64Coder.encode(result)).equals("AAAAAAAAAOA=");
}
public static class FxApp extends Application{
static String text;
static Consumer<FileHandle> cons;
static String[] filter;
static String content;
static boolean open;
private static FxApp instance;
static void open(){
if(instance == null){
launch();
}
ss();
}
static void ss(){
javafx.application.Platform.runLater(() -> instance.show());
}
public FxApp(){
instance = this;
ss();
}
@Override
public void start(Stage stage){
}
public void show(){
for(int i = 0; i < filter.length; i ++){
filter[i] = "*." + filter[i];
}
FileChooser chooser = new FileChooser();
chooser.setTitle(text);
chooser.getExtensionFilters().add(new ExtensionFilter(content, filter));
chooser.setInitialDirectory(new File(System.getProperty("user.home")));
File file;
if (open) {
file = chooser.showOpenDialog(null);
} else {
file = chooser.showSaveDialog(null);
}
if (file != null) {
cons.accept(Gdx.files.absolute(file.getAbsolutePath()));
}
}
}
}