Browse Source

Added Menus

____tbvns____ 6 months ago
parent
commit
418304d95e

+ 3 - 2
core/src/main/java/xyz/tbvns/core/Decoder.java

@@ -3,6 +3,7 @@ package xyz.tbvns.core;
 import javafx.scene.control.ProgressBar;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.io.FileUtils;
+import xyz.tbvns.core.Objects.Level;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -85,10 +86,10 @@ public class Decoder {
         FileUtils.writeStringToFile(new File(path), template, StandardCharsets.UTF_8);
     }
 
-    public static void exportGMD(String name, String data, String path, UIProgressBar progressBar, float factor) throws IOException, URISyntaxException {
+    public static void exportGMD(Level level, String path, UIProgressBar progressBar, float factor) throws IOException, URISyntaxException {
         String template = new String(Decoder.class.getResourceAsStream("/template.gmd").readAllBytes());
         progressBar.updateBar(progressBar.getProgressBar().getProgress() + 0.2 * factor);
-        template = template.replace("%name%", name).replace("%levelData%", encodeLevel(data, progressBar, factor*0.8f));
+        template = template.replace("%name%", level.getName()).replace("%levelData%", encodeLevel(level.getEncodedLevelString(), progressBar, factor*0.8f));
         FileUtils.writeStringToFile(new File(path), template, StandardCharsets.UTF_8);
         progressBar.updateBar(progressBar.getProgressBar().getProgress() + 0.2 * factor);
     }

+ 12 - 0
ui/src/main/java/xyz/tbvns/ui/LevelEditor/FXMenu.java

@@ -0,0 +1,12 @@
+package xyz.tbvns.ui.LevelEditor;
+
+import javafx.scene.Node;
+import javafx.scene.control.Menu;
+import javafx.scene.control.MenuItem;
+import xyz.tbvns.core.Objects.Level;
+
+public interface FXMenu {
+    default Menu getMenu(Level level, Node node) {
+        return new Menu();
+    }
+}

+ 18 - 5
ui/src/main/java/xyz/tbvns/ui/LevelEditor/MainWindow.java

@@ -15,9 +15,11 @@ import java.util.Set;
 public class MainWindow {
     public static Level level;
     public static Scene scene;
+    public static Stage stage;
     public static void open(Stage stage, Level level) {
         MainWindow.level = level;
-        scene = new Scene(pane());
+        MainWindow.stage = stage;
+        scene = new Scene(pane(level));
         stage.setScene(scene);
         stage.setTitle("PowerGD: Editing " + level.getName() + " by " + level.getCreator());
         Main.setUpResizeEditMenu(scene);
@@ -26,9 +28,9 @@ public class MainWindow {
         stage.setWidth(800);
     }
 
-    public static Pane pane() {
+    public static Pane pane(Level level) {
         FlowPane pane = new FlowPane();
-        pane.getChildren().add(toolBar());
+        pane.getChildren().add(toolBar(level));
         pane.getChildren().add(tabPane());
         return pane;
     }
@@ -72,10 +74,21 @@ public class MainWindow {
     }
 
     public static MenuBar menuBar;
-    public static MenuBar toolBar() {
+    public static MenuBar toolBar(Level level) {
         MenuBar menuBar = new MenuBar();
         MainWindow.menuBar = menuBar;
-        menuBar.getMenus().addAll(new Menu("hello"), new Menu("world"), new Menu("hello"), new Menu("world"), new Menu("hello"), new Menu("world"));
+
+        Reflections reflections = new Reflections("xyz.tbvns.ui.LevelEditor.menus");
+        Set<Class<? extends FXMenu>> menus = reflections.getSubTypesOf(FXMenu.class);
+        for (Class<? extends FXMenu> menu : menus) {
+            try {
+                FXMenu fxMenu = menu.getConstructor().newInstance();
+                System.out.println(fxMenu.getClass());
+                menuBar.getMenus().add(fxMenu.getMenu(level, menuBar));
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
 
         return menuBar;
     }

+ 50 - 0
ui/src/main/java/xyz/tbvns/ui/LevelEditor/SaveManager.java

@@ -0,0 +1,50 @@
+package xyz.tbvns.ui.LevelEditor;
+
+import javafx.scene.Node;
+import javafx.stage.FileChooser;
+import xyz.tbvns.core.DataManager;
+import xyz.tbvns.core.Decoder;
+import xyz.tbvns.core.Objects.Level;
+import xyz.tbvns.core.UIProgressBar;
+
+import java.io.File;
+import java.io.IOException;
+
+public class SaveManager {
+    public static void export(Node node, Level level) {
+        FileChooser chooser = new FileChooser();
+        chooser.setTitle("Export " + level.getName() + ".gmd");
+        chooser.setInitialFileName(level.getName() + ".gmd");
+        File file = chooser.showSaveDialog(node.getScene().getWindow());
+        if (file != null) {
+            try {
+                UIProgressBar progressBar = new UIProgressBar();
+                progressBar.openNow("Exporting level...");
+                new Thread(() -> {
+                    try {
+                        Decoder.exportGMD(level, file.getPath(), progressBar, 1);
+                        progressBar.close();
+                    } catch (Exception e) {
+                        throw new RuntimeException(e);
+                    }
+                }).start();
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    public static void save(Level level) {
+        UIProgressBar progressBar = new UIProgressBar();
+        progressBar.openNow("Saving level...");
+        new Thread(() -> {
+            try {
+                DataManager.saveLevel(level, progressBar, 1);
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+            progressBar.updateBar(1);
+            progressBar.close();
+        }).start();
+    }
+}

+ 48 - 0
ui/src/main/java/xyz/tbvns/ui/LevelEditor/menus/EditFilesMenu.java

@@ -0,0 +1,48 @@
+package xyz.tbvns.ui.LevelEditor.menus;
+
+import javafx.scene.Node;
+import javafx.scene.Scene;
+import javafx.scene.control.Menu;
+import javafx.scene.control.MenuItem;
+import xyz.tbvns.core.Objects.Level;
+import xyz.tbvns.ui.LevelEditor.FXMenu;
+import xyz.tbvns.ui.LevelEditor.MainWindow;
+import xyz.tbvns.ui.LevelEditor.SaveManager;
+import xyz.tbvns.ui.LevelSelectScreen;
+import xyz.tbvns.ui.Main;
+
+public class EditFilesMenu implements FXMenu {
+    @Override
+    public Menu getMenu(Level level, Node node) {
+        Menu menu = new Menu("Files");
+
+        MenuItem save = new MenuItem("Save");
+        MenuItem close = new MenuItem("Close");
+
+        Menu export = new Menu("Export");
+        MenuItem exportGMD = new MenuItem("GDShare (.gmd)");
+        MenuItem exportWSLiveEditor = new MenuItem("WSLiveEditor");
+        exportWSLiveEditor.setDisable(true);
+        export.getItems().addAll(exportGMD, exportWSLiveEditor);
+
+        menu.getItems().addAll(save, export, close);
+
+        save.setOnAction(actionEvent -> {
+            SaveManager.save(level);
+        });
+
+        exportGMD.setOnAction(actionEvent -> {
+            SaveManager.export(node, level);
+        });
+
+        close.setOnAction(actionEvent -> {
+            Scene scene = new Scene(LevelSelectScreen.pane());
+            Main.setUpResizeSelectMenu(scene);
+            MainWindow.stage.hide();
+            MainWindow.stage.setScene(scene);
+            MainWindow.stage.show();
+        });
+
+        return menu;
+    }
+}

+ 3 - 39
ui/src/main/java/xyz/tbvns/ui/LevelEditor/tabs/EditLevelString.java

@@ -11,6 +11,7 @@ import xyz.tbvns.core.Decoder;
 import xyz.tbvns.core.Objects.Level;
 import xyz.tbvns.ui.LevelEditor.FXTab;
 import xyz.tbvns.core.UIProgressBar;
+import xyz.tbvns.ui.LevelEditor.SaveManager;
 import xyz.tbvns.ui.Utils;
 
 import java.io.File;
@@ -38,11 +39,11 @@ public class EditLevelString implements FXTab {
         Button save = new Button("Save");
         save.setOnMouseClicked(mouseEvent -> {
             level.setEncodedLevelString(area.getText().replace("\n", ""));
-            save(pane, level);
+            SaveManager.save(level);
         });
         Button export = new Button("Export");
         export.setOnMouseClicked(mouseEvent -> {
-            export(pane, level, area.getText());
+            SaveManager.export(pane, level);
         });
         toolBar = new ToolBar(save, export);
         pane.getChildren().add(toolBar);
@@ -66,41 +67,4 @@ public class EditLevelString implements FXTab {
             area.setPrefHeight(t1.floatValue() - toolBar.getHeight() - parent.getTabMaxHeight() - 7);
         });
     }
-
-    public void export(Node node, Level level, String levelString) {
-        FileChooser chooser = new FileChooser();
-        chooser.setTitle("Save " + level.getName() + ".gmd");
-        chooser.setInitialFileName(level.getName() + ".gmd");
-        File file = chooser.showSaveDialog(node.getScene().getWindow());
-        if (file != null) {
-            try {
-                UIProgressBar progressBar = new UIProgressBar();
-                progressBar.openNow("Exporting level...");
-                new Thread(() -> {
-                    try {
-                        Decoder.exportGMD(level.getName(), levelString, file.getPath(), progressBar, 1);
-                        progressBar.close();
-                    } catch (Exception e) {
-                        throw new RuntimeException(e);
-                    }
-                }).start();
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-    }
-
-    public void save(Node node, Level level) {
-        UIProgressBar progressBar = new UIProgressBar();
-        progressBar.openNow("Saving level...");
-        new Thread(() -> {
-            try {
-                DataManager.saveLevel(level, progressBar, 1);
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
-            progressBar.updateBar(1);
-            progressBar.close();
-        }).start();
-    }
 }

+ 6 - 0
ui/src/main/java/xyz/tbvns/ui/LevelSelectScreen.java

@@ -9,6 +9,7 @@ import javafx.scene.control.ScrollPane;
 import javafx.scene.layout.*;
 import javafx.scene.paint.Color;
 import javafx.scene.text.Font;
+import javafx.stage.Stage;
 import lombok.extern.slf4j.Slf4j;
 import xyz.tbvns.core.DataManager;
 import xyz.tbvns.core.Objects.Level;
@@ -19,6 +20,11 @@ import java.util.List;
 
 @Slf4j
 public class LevelSelectScreen {
+
+    public void open() {
+
+    }
+
     public static Label label = new Label("Select the level to edit:");
     public static Pane pane() {
         FlowPane pane = new FlowPane();