Package com.atlauncher.gui.dialogs

Source Code of com.atlauncher.gui.dialogs.EditModsDialog

/*
* ATLauncher - https://github.com/ATLauncher/ATLauncher
* Copyright (C) 2013 ATLauncher
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.atlauncher.gui.dialogs;

import com.atlauncher.App;
import com.atlauncher.data.DisableableMod;
import com.atlauncher.data.Instance;
import com.atlauncher.data.Language;
import com.atlauncher.gui.components.ModsJCheckBox;
import com.atlauncher.utils.Utils;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.SwingConstants;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class EditModsDialog extends JDialog {
    private static final long serialVersionUID = 7004414192679481818L;

    private Instance instance; // The instance this is for

    private JPanel bottomPanel, disabledModsPanel, enabledModsPanel;
    private JSplitPane split, labelsTop, labels, modsInPack;
    private JScrollPane scroller1, scroller2;
    private JButton addButton, enableButton, disableButton, removeButton, closeButton;
    private JLabel topLabelLeft, topLabelRight;
    private ArrayList<ModsJCheckBox> enabledMods, disabledMods;

    public EditModsDialog(final Instance instance) {
        super(App.settings.getParent(), Language.INSTANCE.localizeWithReplace("instance.editingmods",
                instance.getName()), ModalityType.APPLICATION_MODAL);
        this.instance = instance;
        setSize(550, 450);
        setLocationRelativeTo(App.settings.getParent());
        setLayout(new BorderLayout());
        setResizable(false);
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent arg0) {
                dispose();
            }
        });

        split = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
        split.setDividerSize(0);
        split.setBorder(null);
        split.setEnabled(false);
        add(split, BorderLayout.NORTH);

        labelsTop = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
        labelsTop.setDividerSize(0);
        labelsTop.setBorder(null);
        labelsTop.setEnabled(false);
        split.setLeftComponent(labelsTop);

        labels = new JSplitPane();
        labels.setDividerLocation(275);
        labels.setDividerSize(0);
        labels.setBorder(null);
        labels.setEnabled(false);
        split.setRightComponent(labels);

        topLabelLeft = new JLabel(Language.INSTANCE.localize("instance.enabledmods"));
        topLabelLeft.setHorizontalAlignment(SwingConstants.CENTER);
        labels.setLeftComponent(topLabelLeft);

        topLabelRight = new JLabel(Language.INSTANCE.localize("instance.disabledmods"));
        topLabelRight.setHorizontalAlignment(SwingConstants.CENTER);
        labels.setRightComponent(topLabelRight);

        modsInPack = new JSplitPane();
        modsInPack.setDividerLocation(275);
        modsInPack.setDividerSize(0);
        modsInPack.setBorder(null);
        modsInPack.setEnabled(false);
        add(modsInPack, BorderLayout.CENTER);

        disabledModsPanel = new JPanel();
        disabledModsPanel.setLayout(null);
        disabledModsPanel.setBackground(App.THEME.getModSelectionBackgroundColor());

        scroller1 = new JScrollPane(disabledModsPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        scroller1.getVerticalScrollBar().setUnitIncrement(16);
        scroller1.setPreferredSize(new Dimension(275, 350));
        modsInPack.setRightComponent(scroller1);

        enabledModsPanel = new JPanel();
        enabledModsPanel.setLayout(null);
        enabledModsPanel.setBackground(App.THEME.getModSelectionBackgroundColor());

        scroller2 = new JScrollPane(enabledModsPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        scroller2.getVerticalScrollBar().setUnitIncrement(16);
        scroller2.setPreferredSize(new Dimension(275, 350));
        modsInPack.setLeftComponent(scroller2);

        bottomPanel = new JPanel();
        add(bottomPanel, BorderLayout.SOUTH);

        addButton = new JButton(Language.INSTANCE.localize("instance.addmod"));
        addButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                FileChooserDialog fcd = new FileChooserDialog(Language.INSTANCE.localize("instance.addmod"),
                        Language.INSTANCE.localize("common.mod"), Language.INSTANCE.localize("common.add"),
                        Language.INSTANCE.localize("instance.typeofmod"), Language.INSTANCE.localize("instance" + "" +
                        ".selectmodtype"), new String[]{"Mods Folder", "Inside Minecraft.jar", "CoreMods Mod",
                        "Texture Pack", "Resource Pack", "Shader Pack"}, new String[]{"jar", "zip", "litemod"});
                ArrayList<File> files = fcd.getChosenFiles();
                if (files != null && files.size() >= 1) {
                    boolean reload = false;
                    for (File file : files) {
                        String typeTemp = fcd.getSelectorValue();
                        com.atlauncher.data.Type type = null;
                        if (typeTemp.equalsIgnoreCase("Mods Folder")) {
                            type = com.atlauncher.data.Type.mods;
                        } else if (typeTemp.equalsIgnoreCase("Inside Minecraft.jar")) {
                            type = com.atlauncher.data.Type.jar;
                        } else if (typeTemp.equalsIgnoreCase("CoreMods Mod")) {
                            type = com.atlauncher.data.Type.coremods;
                        } else if (typeTemp.equalsIgnoreCase("Texture Pack")) {
                            type = com.atlauncher.data.Type.texturepack;
                        } else if (typeTemp.equalsIgnoreCase("Resource Pack")) {
                            type = com.atlauncher.data.Type.resourcepack;
                        } else if (typeTemp.equalsIgnoreCase("Shader Pack")) {
                            type = com.atlauncher.data.Type.shaderpack;
                        }
                        if (type != null) {
                            DisableableMod mod = new DisableableMod(file.getName(), "Custom", true, file.getName(),
                                    type, null, null, true, true);
                            if (Utils.copyFile(file, instance.getDisabledModsDirectory())) {
                                instance.getInstalledMods().add(mod);
                                disabledMods.add(new ModsJCheckBox(mod));
                                reload = true;
                            }
                        }
                    }
                    if (reload) {
                        reloadPanels();
                    }
                }
            }
        });
        bottomPanel.add(addButton);

        enableButton = new JButton(Language.INSTANCE.localize("instance.enablemod"));
        enableButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                enableMods();
            }
        });
        bottomPanel.add(enableButton);

        disableButton = new JButton(Language.INSTANCE.localize("instance.disablemod"));
        disableButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                disableMods();
            }
        });
        bottomPanel.add(disableButton);

        removeButton = new JButton(Language.INSTANCE.localize("instance.removemod"));
        removeButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                removeMods();
            }
        });
        bottomPanel.add(removeButton);

        closeButton = new JButton(Language.INSTANCE.localize("common.close"));
        closeButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
            }
        });
        bottomPanel.add(closeButton);

        loadMods();

        setVisible(true);
    }

    private void loadMods() {
        List<DisableableMod> mods = instance.getInstalledMods();
        enabledMods = new ArrayList<ModsJCheckBox>();
        disabledMods = new ArrayList<ModsJCheckBox>();
        int dCount = 0;
        int eCount = 0;
        for (DisableableMod mod : mods) {
            ModsJCheckBox checkBox = null;
            int nameSize = getFontMetrics(Utils.getFont()).stringWidth(mod.getName());

            checkBox = new ModsJCheckBox(mod);
            if (mod.isDisabled()) {
                checkBox.setBounds(0, (dCount * 20), nameSize + 23, 20);
                disabledMods.add(checkBox);
                dCount++;
            } else {
                checkBox.setBounds(0, (eCount * 20), nameSize + 23, 20);
                enabledMods.add(checkBox);
                eCount++;
            }
        }
        for (int i = 0; i < enabledMods.size(); i++) {
            ModsJCheckBox checkBox = enabledMods.get(i);
            enabledModsPanel.add(checkBox);
        }
        for (int i = 0; i < disabledMods.size(); i++) {
            ModsJCheckBox checkBox = disabledMods.get(i);
            disabledModsPanel.add(checkBox);
        }
        enabledModsPanel.setPreferredSize(new Dimension(0, enabledMods.size() * 20));
        disabledModsPanel.setPreferredSize(new Dimension(0, disabledMods.size() * 20));
    }

    private void enableMods() {
        ArrayList<ModsJCheckBox> mods = new ArrayList<ModsJCheckBox>(disabledMods);
        for (ModsJCheckBox mod : mods) {
            if (mod.isSelected()) {
                mod.getDisableableMod().enable(instance);
            }
        }
        reloadPanels();
    }

    private void disableMods() {
        ArrayList<ModsJCheckBox> mods = new ArrayList<ModsJCheckBox>(enabledMods);
        for (ModsJCheckBox mod : mods) {
            if (mod.isSelected()) {
                mod.getDisableableMod().disable(instance);
            }
        }
        reloadPanels();
    }

    private void removeMods() {
        ArrayList<ModsJCheckBox> mods = new ArrayList<ModsJCheckBox>(enabledMods);
        for (ModsJCheckBox mod : mods) {
            if (mod.isSelected()) {
                instance.removeInstalledMod(mod.getDisableableMod());
                enabledMods.remove(mod);
            }
        }
        mods = new ArrayList<ModsJCheckBox>(disabledMods);
        for (ModsJCheckBox mod : mods) {
            if (mod.isSelected()) {
                instance.removeInstalledMod(mod.getDisableableMod());
                disabledMods.remove(mod);
            }
        }
        reloadPanels();
    }

    private void reloadPanels() {
        App.settings.saveInstances();
        enabledModsPanel.removeAll();
        disabledModsPanel.removeAll();
        loadMods();
        enabledModsPanel.repaint();
        disabledModsPanel.repaint();
    }

}
TOP

Related Classes of com.atlauncher.gui.dialogs.EditModsDialog

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.