Package net.alteiar.effectBean.gui.effect.trigger

Source Code of net.alteiar.effectBean.gui.effect.trigger.TriggerEditor

package net.alteiar.effectBean.gui.effect.trigger;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.Beans;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;

import net.alteiar.CampaignClient;
import net.alteiar.campaign.player.gui.map.element.PanelMapElementEditor;
import net.alteiar.client.bean.BasicBean;
import net.alteiar.documents.map.MapBean;
import net.alteiar.effectBean.Effect;
import net.alteiar.effectBean.EffectSuite;
import net.alteiar.effectBean.xml.EffectChoiceListGenerator;
import net.alteiar.shared.UniqueID;
import net.alteiar.trigger.TriggerBean;

public class TriggerEditor extends PanelMapElementEditor<TriggerBean> {

  /**
   *
   */
  private static final long serialVersionUID = 1L;

  private final JComboBox<String> listEffect;
  private final JButton addButton;
  private final ArrayList<Effect> effets;
  private final ArrayList<Integer> selectedEffects;
  private Integer selectedEffect;

  public TriggerEditor(TriggerBean mapElement) throws ClassNotFoundException {
    super(mapElement);
    this.add(new JLabel("Lier des effets au déclencheur:"),
        BorderLayout.NORTH);
    selectedEffect = 1;
    MapBean map = CampaignClient.getInstance().getBean(mapElement.getMapId());
    HashSet<UniqueID> elements = map.getElements();
    effets = new ArrayList<Effect>();
    selectedEffects = new ArrayList<Integer>();
    for (UniqueID element : elements) {
      BasicBean effect = CampaignClient.getInstance().getBean(element);
      if (Beans.isInstanceOf(effect, Effect.class)) {
        effets.add((Effect) effect);
      }
    }
    effets.get(selectedEffect).setSelected(true);
    String[] effectList = new String[effets.size()];
    EffectChoiceListGenerator eGenerator = new EffectChoiceListGenerator();
    ArrayList<Class<?>> classList = eGenerator
        .getEffectClasses(EffectChoiceListGenerator.path);
    ArrayList<String> effectNameList = eGenerator
        .getEffectName(EffectChoiceListGenerator.path);
    for (int j = 0; j < effets.size(); j++) {
      for (int i = 0; i < classList.size(); i++) {
        if (Beans.isInstanceOf(effets.get(j), classList.get(i))) {
          effectList[j] = effectNameList.get(i);
        }
      }
    }

    listEffect = new JComboBox<String>(effectList);
    listEffect.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        effets.get(selectedEffect).setSelected(false);
        JComboBox<String> temp = (JComboBox<String>) e.getSource();
        selectedEffect = temp.getSelectedIndex();
        effets.get(selectedEffect).setSelected(true);
      }

    });
    addButton = new JButton("Add");
    addButton.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent arg0) {
        selectedEffects.add(selectedEffect);
      }

    });
    this.add(new JLabel("Ajouter un effet au déclencheur:"),
        BorderLayout.NORTH);

    JPanel panelCenter = new JPanel();
    panelCenter.setLayout(new BoxLayout(panelCenter, BoxLayout.Y_AXIS));
    panelCenter.add(buildRow("Choix de l'effet: ", listEffect));
    panelCenter
        .add(buildRow("Ajout de l'effet au déclencheur: ", addButton));
    this.add(panelCenter, BorderLayout.CENTER);

  }

  private static JPanel buildRow(String name, JComponent panel) {
    JPanel container = new JPanel(new FlowLayout());
    container.add(new JLabel(name));
    container.add(panel);
    return container;
  }

  public Boolean isDataValid() {
    return true;
  }

  public String getInvalidMessage() {
    return "";
  }

  @Override
  public void applyModification() {
    TriggerBean trigger = getMapElement();
    EffectSuite effect = (EffectSuite) trigger.getEffect();
    Set<Integer> set = new HashSet<Integer>();
    set.addAll(selectedEffects);
    ArrayList<Integer> distinctList = new ArrayList<Integer>(set);
    for (Integer indexEffect : distinctList) {
      effect.addEffect(effets.get(indexEffect));
    }
  }

}
TOP

Related Classes of net.alteiar.effectBean.gui.effect.trigger.TriggerEditor

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.