Package ch.rakudave.jnetmap.view.preferences

Source Code of ch.rakudave.jnetmap.view.preferences.PluginPanel$PluginInfo

package ch.rakudave.jnetmap.view.preferences;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextArea;
import javax.swing.filechooser.FileNameExtensionFilter;

import net.xeoh.plugins.base.util.PluginManagerUtil;
import ch.rakudave.jnetmap.controller.Actions;
import ch.rakudave.jnetmap.controller.Controller;
import ch.rakudave.jnetmap.plugins.Plugin;
import ch.rakudave.jnetmap.util.IO;
import ch.rakudave.jnetmap.util.Icons;
import ch.rakudave.jnetmap.util.Lang;
import ch.rakudave.jnetmap.util.SwingHelper;
import ch.rakudave.jnetmap.util.logging.Logger;

/**
* @author rakudave
*/
@SuppressWarnings("serial")
public class PluginPanel extends PreferencePanel {
  private JPanel pluginList;
 
  public PluginPanel() {
    setLayout(new BorderLayout());
    title = Lang.getNoHTML("preferences.plugins");
    pluginList = new JPanel();
    pluginList.setLayout(new BoxLayout(pluginList, BoxLayout.PAGE_AXIS));
    for (Plugin p : new PluginManagerUtil(Controller.pm).getPlugins(Plugin.class)) {
      pluginList.add(new PluginInfo(p));
      pluginList.add(new JSeparator());
    }
    pluginList.add(Box.createVerticalGlue());
    final PluginPanel _this = this;
    JPanel bottom = new JPanel(new BorderLayout());
      JButton add = SwingHelper.createAlignedButton(new AbstractAction(Lang.get("preferences.plugins.get"), Icons.get("down")) {
        @Override
        public void actionPerformed(ActionEvent e) {
          Actions.openWebsite("http://jnetmap.sourceforge.net?file=kop4.php");
        }
      });
      JButton install = SwingHelper.createAlignedButton(new AbstractAction(Lang.get("action.install"), Icons.get("install")) {
        @Override
        public void actionPerformed(ActionEvent e) {
          File f = SwingHelper.openDialog(_this, new FileNameExtensionFilter("Java Archive File", "jar"));
          try {
            IO.copy(new FileInputStream(f), IO.pluginDir + "/" + f.getName());
            JOptionPane.showMessageDialog(_this, Lang.get("message.import.restart"),
                f.getName(), JOptionPane.INFORMATION_MESSAGE);
          } catch (FileNotFoundException e1) {
            Logger.error("Failed to install plugin " + f, e1);
            JOptionPane.showMessageDialog(_this, Lang.get("message.import.error"),
                f.getName(), JOptionPane.ERROR_MESSAGE);
          }
        }
      });
      bottom.add(add, BorderLayout.WEST);
      bottom.add(install, BorderLayout.EAST);
    add(new JScrollPane(pluginList, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
        JScrollPane.HORIZONTAL_SCROLLBAR_NEVER), BorderLayout.CENTER);
    add(bottom, BorderLayout.SOUTH);
  }

  @Override
  public void save() {}
 
  private class PluginInfo extends JPanel {
    public PluginInfo(final Plugin p) {
      super(new BorderLayout(5, 5));
      final JPanel _this = this;
      setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
      JPanel bottom = new JPanel();
        bottom.setLayout(new BoxLayout(bottom, BoxLayout.LINE_AXIS));
        JButton delete = SwingHelper.createAlignedButton(new AbstractAction(Lang.get("action.delete"), Icons.get("close")) {
            @Override
            public void actionPerformed(ActionEvent e) {
              int action = JOptionPane.showConfirmDialog(_this, Lang.get("message.confirm.delete").replaceAll("%name%", p.getPluginName()),
                  Lang.get("action.delete"), JOptionPane.OK_CANCEL_OPTION);
              if (action != 0) return;
              if (IO.tryRemovePlugin(p)) {
                for (Component c : _this.getComponents()) {
                  c.setEnabled(false);
                }
                _this.setEnabled(false);
                setEnabled(false);
              } else {
                Logger.error("Unable to remove plugin "+p.getPluginName());
              }
            }
          });
          delete.setMaximumSize(new Dimension(50,30));
        bottom.add(new JLabel("by " + p.getAuthor()));
        bottom.add(Box.createHorizontalGlue());
        bottom.add(delete);
      JTextArea ta = new JTextArea(p.getDescription());
        ta.setLineWrap(true);
        ta.setWrapStyleWord(true);
        ta.setFocusable(false);
        ta.setBackground(new Color(getBackground().getRGB()));
      add(new JLabel(p.getPluginName(), p.getIcon(), JLabel.LEFT), BorderLayout.NORTH);
      add(ta, BorderLayout.CENTER);
      add(bottom, BorderLayout.SOUTH);
    }
  }
}
TOP

Related Classes of ch.rakudave.jnetmap.view.preferences.PluginPanel$PluginInfo

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.