Package com.pclewis.mcpatcher

Source Code of com.pclewis.mcpatcher.MainMenu

package com.pclewis.mcpatcher;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

class MainMenu {
    private MainForm mainForm;

    JMenuBar menuBar;

    JMenu file;
    JMenuItem origFile;
    JMenuItem outputFile;
    JMenuItem exit;

    JMenu mods;
    JMenuItem addMod;
    JMenuItem removeMod;
    JMenuItem enableAll;
    JMenuItem disableAll;
    JMenuItem moveUp;
    JMenuItem moveDown;

    JMenu profile;
    JMenuItem save;
    JMenuItem load;
    JMenuItem delete;

    JMenu game;
    JMenuItem patch;
    JMenuItem unpatch;
    JMenuItem test;

    MainMenu(MainForm mainForm1) {
        mainForm = mainForm1;

        menuBar = new JMenuBar();

        file = new JMenu("File");
        file.setMnemonic('F');
        menuBar.add(file);

        origFile = new JMenuItem("Select input file...");
        origFile.setMnemonic('i');
        copyActionListener(origFile, mainForm.origBrowseButton);
        file.add(origFile);

        outputFile = new JMenuItem("Select output file...");
        outputFile.setMnemonic('o');
        copyActionListener(outputFile, mainForm.outputBrowseButton);
        file.add(outputFile);

        file.addSeparator();

        exit = new JMenuItem("Exit");
        exit.setMnemonic('x');
        exit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(
                    new WindowEvent(mainForm.frame, WindowEvent.WINDOW_CLOSING)
                );
            }
        });
        file.add(exit);

        mods = new JMenu("Mods");
        mods.setMnemonic('M');
        menuBar.add(mods);

        addMod = new JMenuItem("Add...");
        addMod.setMnemonic('A');
        copyActionListener(addMod, mainForm.addButton);
        mods.add(addMod);

        removeMod = new JMenuItem("Remove");
        removeMod.setMnemonic('R');
        copyActionListener(removeMod, mainForm.removeButton);
        mods.add(removeMod);

        mods.addSeparator();

        enableAll = new JMenuItem("Enable all");
        enableAll.setMnemonic('E');
        mods.add(enableAll);
        enableAll.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                ModList modList = MCPatcher.modList;
                if (modList != null) {
                    modList.enableValidMods(true);
                    mainForm.redrawModListCheckboxes();
                }
            }
        });

        disableAll = new JMenuItem("Disable all");
        disableAll.setMnemonic('D');
        mods.add(disableAll);
        disableAll.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                ModList modList = MCPatcher.modList;
                if (modList != null) {
                    modList.disableAll();
                    mainForm.redrawModListCheckboxes();
                }
            }
        });

        mods.addSeparator();

        moveUp = new JMenuItem("Move up");
        moveUp.setMnemonic('u');
        copyActionListener(moveUp, mainForm.upButton);
        mods.add(moveUp);

        moveDown = new JMenuItem("Move down");
        moveDown.setMnemonic('d');
        copyActionListener(moveDown, mainForm.downButton);
        mods.add(moveDown);

        mods.addSeparator();

        profile = new JMenu("Profile");
        profile.setMnemonic('r');
        menuBar.add(profile);

        save = new JMenuItem("Save profile...");
        save.setMnemonic('S');
        save.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String profileName;
                for (int i = 0; ; i++) {
                    profileName = "Custom Profile";
                    if (i > 0) {
                        profileName += " " + i;
                    }
                    if (MCPatcherUtils.config.findProfileByName(profileName, false) == null) {
                        break;
                    }
                }
                Object result = JOptionPane.showInputDialog(
                    mainForm.frame,
                    "Enter a name for this profile:",
                    "Profile name",
                    JOptionPane.QUESTION_MESSAGE,
                    null,
                    null,
                    profileName
                );
                if (result != null && result instanceof String && !result.equals("")) {
                    profileName = (String) result;
                    String currentProfile = MCPatcherUtils.config.getConfigValue(Config.TAG_SELECTED_PROFILE);
                    if (profileName.equals(currentProfile)) {
                        return;
                    }
                    if (MCPatcherUtils.config.findProfileByName(profileName, false) != null) {
                        int confirm = JOptionPane.showConfirmDialog(
                            mainForm.frame,
                            String.format("Profile \"%s\" exists.  Overwrite?", profileName),
                            "Confirm overwrite",
                            JOptionPane.YES_NO_OPTION
                        );
                        if (confirm != JOptionPane.YES_OPTION) {
                            return;
                        }
                        MCPatcherUtils.config.deleteProfile(profileName);
                    }
                    MCPatcher.modList.updateProperties();
                    MCPatcherUtils.config.selectProfile(profileName);
                    mainForm.updateControls();
                }
            }
        });
        profile.add(save);

        load = new JMenu("Select profile");
        load.setMnemonic('e');
        profile.add(load);

        delete = new JMenu("Delete profile");
        delete.setMnemonic('D');
        profile.add(delete);

        game = new JMenu("Game");
        game.setMnemonic('G');
        menuBar.add(game);

        patch = new JMenuItem("Patch");
        patch.setMnemonic('P');
        copyActionListener(patch, mainForm.patchButton);
        game.add(patch);

        unpatch = new JMenuItem("Unpatch");
        unpatch.setMnemonic('U');
        copyActionListener(unpatch, mainForm.undoButton);
        game.add(unpatch);

        game.addSeparator();

        test = new JMenuItem("Test Minecraft");
        test.setMnemonic('T');
        copyActionListener(test, mainForm.testButton);
        game.add(test);

        updateControls(true);
    }

    private static void copyActionListener(JMenuItem item, final JButton button) {
        item.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (button.isEnabled()) {
                    for (ActionListener listener : button.getActionListeners()) {
                        listener.actionPerformed(e);
                    }
                }
            }
        });
    }

    void updateControls(boolean busy) {
        file.setEnabled(!busy);
        mods.setEnabled(!busy);
        profile.setEnabled(!busy);
        game.setEnabled(!busy);

        origFile.setEnabled(mainForm.origBrowseButton.isEnabled());
        outputFile.setEnabled(mainForm.outputBrowseButton.isEnabled());
        addMod.setEnabled(mainForm.addButton.isEnabled());
        removeMod.setEnabled(mainForm.removeButton.isEnabled());
        moveUp.setEnabled(mainForm.upButton.isEnabled());
        moveDown.setEnabled(mainForm.downButton.isEnabled());
        patch.setEnabled(mainForm.patchButton.isEnabled());
        unpatch.setEnabled(mainForm.undoButton.isEnabled());
        test.setEnabled(mainForm.testButton.isEnabled());

        load.removeAll();
        delete.removeAll();
        if (!busy && MCPatcherUtils.config != null) {
            ArrayList<String> profiles = MCPatcherUtils.config.getProfiles();
            Collections.sort(profiles, new Comparator<String>() {
                public int compare(String o1, String o2) {
                    MinecraftVersion v1 = null;
                    MinecraftVersion v2 = null;
                    if (Config.isDefaultProfile(o1)) {
                        v1 = MinecraftVersion.parseVersion(o1);
                    }
                    if (Config.isDefaultProfile(o2)) {
                        v2 = MinecraftVersion.parseVersion(o2);
                    }
                    if (v1 == null && v2 == null) {
                        return o1.compareTo(o2);
                    } else if (v1 == null) {
                        return 1;
                    } else if (v2 == null) {
                        return -1;
                    } else {
                        return v1.compareTo(v2);
                    }
                }
            });
            ButtonGroup buttonGroup = new ButtonGroup();
            final String currentProfile = MCPatcherUtils.config.getConfigValue(Config.TAG_SELECTED_PROFILE);
            for (final String profile : profiles) {
                JRadioButtonMenuItem item = new JRadioButtonMenuItem(profile, profile.equals(currentProfile));
                item.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        if (profile.equals(currentProfile)) {
                            return;
                        }
                        MCPatcher.modList.updateProperties();
                        MCPatcherUtils.config.selectProfile(profile);
                        boolean modsOk = false;
                        if (Config.isDefaultProfile(profile)) {
                            String version = profile.replaceFirst("^Minecraft\\s+", "");
                            if (!version.equals(MCPatcher.minecraft.getVersion().getProfileString())) {
                                File jar = MCPatcherUtils.getMinecraftPath("bin", "minecraft-" + MinecraftVersion.profileStringToVersionString(version) + ".jar");
                                if (jar.exists()) {
                                    try {
                                        modsOk = MCPatcher.setMinecraft(jar, false);
                                    } catch (Exception e1) {
                                        e1.printStackTrace();
                                    }
                                }
                            }
                        }
                        if (!modsOk) {
                            MCPatcher.getAllMods();
                        }
                        mainForm.updateModList();
                    }
                });
                buttonGroup.add(item);
                load.add(item);

                JMenuItem item1 = new JMenuItem(profile);
                item1.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        if (profile.equals(currentProfile)) {
                            return;
                        }
                        int result = JOptionPane.showConfirmDialog(
                            mainForm.frame,
                            String.format("Delete saved profile \"%s\"?", profile),
                            "Confirm profile delete",
                            JOptionPane.YES_NO_OPTION
                        );
                        if (result == JOptionPane.YES_OPTION) {
                            MCPatcherUtils.config.deleteProfile(profile);
                            mainForm.updateControls();
                        }
                    }
                });
                item1.setEnabled(!profile.equals(currentProfile));
                delete.add(item1);
            }
        }
        if (load.getSubElements().length == 0) {
            JMenuItem item = new JMenuItem("(none)");
            item.setEnabled(false);
            load.add(item);
        } else {
            load.setEnabled(true);
        }
        if (delete.getSubElements().length == 0) {
            JMenuItem item = new JMenuItem("(none)");
            item.setEnabled(false);
            delete.add(item);
        } else {
            delete.setEnabled(true);
        }
    }
}
TOP

Related Classes of com.pclewis.mcpatcher.MainMenu

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.