Package ch.rakudave.jnetmap.view.properties

Source Code of ch.rakudave.jnetmap.view.properties.MapProperties$IconListRenderer

package ch.rakudave.jnetmap.view.properties;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;

import net.xeoh.plugins.base.util.PluginManagerUtil;
import ch.rakudave.jnetmap.controller.Controller;
import ch.rakudave.jnetmap.model.Map;
import ch.rakudave.jnetmap.plugins.Notifier;
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;
import ch.rakudave.jnetmap.view.components.TabPanel;

@SuppressWarnings("serial")
public class MapProperties extends JDialog {

  public MapProperties(final Frame owner, final Map m) {
    super(owner, Lang.getNoHTML("map.properties"), ModalityType.DOCUMENT_MODAL);
    setLayout(new BorderLayout(5, 5));
    setPreferredSize(new Dimension(400,400));
    JPanel topWrapper = new JPanel(new GridLayout(0, 2, 5, 5));
      topWrapper.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
      final SpinnerNumberModel updateInterval = new SpinnerNumberModel(m.getUpdateInterval(), 1, 60, 1);
      JSpinner updateSpinner = new JSpinner(updateInterval);
      topWrapper.add(new JLabel(Lang.get("map.updateinterval")));
      topWrapper.add(updateSpinner);
    JPanel listWrapper = new JPanel(new BorderLayout());
      listWrapper.setBorder(BorderFactory.createTitledBorder(Lang.getNoHTML("map.notifiers")));
      final JList listenerList = new JList(new Vector<Notifier>(m.getStatusListeners()));
        listenerList.setCellRenderer(new IconListRenderer(true));
      JPanel addWrapper = new JPanel(new BorderLayout());
        final JComboBox addSelector = new JComboBox(new Vector<Notifier>() {{
          for (Notifier p : new PluginManagerUtil(Controller.pm).getPlugins(Notifier.class)) {
            try {
              add(p);
            } catch (Exception e) {
              Logger.error("Unable to load plugin " + p, e);
            }
          }
        }});
        addSelector.setRenderer(new IconListRenderer(false));
        JButton addListener = new JButton(Lang.get("action.add"), Icons.get("add"));
          addListener.setPreferredSize(new Dimension(100, 30));
          addListener.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
              Notifier newListener = ((Notifier) addSelector.getSelectedItem()).create();
              m.addStatusListener(newListener);
              newListener.showPropertiesWindow(owner, true);
              listenerList.setListData(new Vector<Notifier>(m.getStatusListeners()));
            }
          });
        addWrapper.add(addSelector, BorderLayout.CENTER);
        addWrapper.add(addListener, BorderLayout.EAST);
      JPanel listManipulators = new JPanel();
        listManipulators.setLayout(new BoxLayout(listManipulators, BoxLayout.PAGE_AXIS));
        JButton removeListener = new JButton(Lang.get("action.remove"), Icons.get("remove"));
          removeListener.setPreferredSize(new Dimension(100, 30));
          removeListener.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
              if (listenerList.getSelectedIndex() == -1) return;
              m.removeStatusListener((Notifier) listenerList.getSelectedValue());
              listenerList.setListData(new Vector<Notifier>(m.getStatusListeners()));
            }
          });
        JButton editListener = new JButton(Lang.get("action.edit"), Icons.get("edit"));
          editListener.setPreferredSize(new Dimension(100, 30));
          editListener.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
              if (listenerList.getSelectedIndex() == -1) return;
              ((Notifier) listenerList.getSelectedValue()).showPropertiesWindow(owner, false);
              listenerList.setListData(new Vector<Notifier>(m.getStatusListeners()));
            }
          });
        listManipulators.add(removeListener);
        listManipulators.add(editListener);
        listManipulators.add(Box.createVerticalGlue());
      listWrapper.add(addWrapper, BorderLayout.NORTH);
      listWrapper.add(listenerList, BorderLayout.CENTER);
      listWrapper.add(listManipulators, BorderLayout.EAST);
    JPanel bottomRow = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 5));
      final JDialog _this = this;
      JButton cancel = new JButton(Lang.get("action.cancel"), Icons.get("cancel"));
        cancel.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            _this.dispose();
          }
        });
      JButton ok = new JButton(Lang.get("action.ok"), Icons.get("ok"));
        ok.setPreferredSize(cancel.getPreferredSize());
        ok.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            m.setUpdateInterval(updateInterval.getNumber().intValue());
            m.getHistory().setSaved(false);
            _this.dispose();
            if (TabPanel.getCurrentTab() != null) TabPanel.getCurrentTab().repaint();
          }
        });
      bottomRow.add(cancel);
      bottomRow.add(ok);
    add(topWrapper, BorderLayout.NORTH);
    add(listWrapper, BorderLayout.CENTER);
    add(bottomRow, BorderLayout.SOUTH);
    pack();
    SwingHelper.centerTo(owner, this);
    setVisible(true);
  }
 
  private class IconListRenderer extends DefaultListCellRenderer {
    private boolean showName;
    public IconListRenderer(boolean showName) {
      this.showName = showName;
    }
    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
      JLabel label = (JLabel) super.getListCellRendererComponent(list,
          value, index, isSelected, cellHasFocus);
      if (value == null) return label;
      Notifier l = (Notifier) value;
      label.setText((showName)?l.getPluginName()+": "+l.getName():l.getPluginName());
      label.setIcon(l.getIcon());
      return label;
    }
  }
}
TOP

Related Classes of ch.rakudave.jnetmap.view.properties.MapProperties$IconListRenderer

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.