61 lines
2.0 KiB
Java
61 lines
2.0 KiB
Java
package io.gitlab.jfronny.inceptum.gtk;
|
|
|
|
import org.gtk.gio.ApplicationFlags;
|
|
import org.gtk.glib.GLib;
|
|
import org.gtk.gtk.Application;
|
|
import io.gitlab.jfronny.inceptum.common.*;
|
|
import io.gitlab.jfronny.inceptum.gtk.window.MainWindow;
|
|
import io.gitlab.jfronny.inceptum.launcher.LauncherEnv;
|
|
|
|
import java.io.IOException;
|
|
import java.util.*;
|
|
|
|
public class GtkMain {
|
|
public static final String ID = "io.gitlab.jfronny.inceptum";
|
|
private static final Queue<Runnable> SCHEDULED = new ArrayDeque<>();
|
|
|
|
public static void main(String[] args) throws IOException {
|
|
LauncherEnv.initialize(GtkEnvBackend.INSTANCE);
|
|
Utils.LOGGER.info("Launching Inceptum v" + BuildMetadata.VERSION);
|
|
Utils.LOGGER.info("Loading from " + MetaHolder.BASE_PATH);
|
|
//TODO look into java-gtk samples for window architecture
|
|
int statusCode = -1;
|
|
try {
|
|
statusCode = showGui(args);
|
|
} finally {
|
|
LauncherEnv.terminate();
|
|
System.exit(statusCode);
|
|
}
|
|
}
|
|
|
|
public static void schedule(Runnable task) {
|
|
SCHEDULED.add(Objects.requireNonNull(task));
|
|
}
|
|
|
|
public static int showGui(String[] args) throws IOException {
|
|
var app = new Application(ID, ApplicationFlags.FLAGS_NONE);
|
|
app.onActivate(() -> {
|
|
GtkMenubar.create(app);
|
|
var window = new MainWindow(app);
|
|
window.show();
|
|
GLib.idleAdd(() -> {
|
|
Runnable r;
|
|
while ((r = SCHEDULED.poll()) != null) {
|
|
try {
|
|
r.run();
|
|
} catch (Throwable t) {
|
|
Utils.LOGGER.error("Could not run scheduled task", t);
|
|
}
|
|
}
|
|
return true;
|
|
});
|
|
GtkEnvBackend.INSTANCE.dialogParent = window;
|
|
window.onCloseRequest(() -> {
|
|
GtkEnvBackend.INSTANCE.dialogParent = null;
|
|
app.quit();
|
|
return false;
|
|
});
|
|
});
|
|
return app.run(args.length, args);
|
|
}
|
|
} |