Package net.alteiar.campaign.player.gui.documents

Source Code of net.alteiar.campaign.player.gui.documents.PanelCreateDocument

package net.alteiar.campaign.player.gui.documents;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

import net.alteiar.campaign.CampaignClient;
import net.alteiar.campaign.player.gui.MainFrame;
import net.alteiar.campaign.player.logger.ExceptionTool;
import net.alteiar.campaign.player.plugin.PluginSystem;
import net.alteiar.dialog.DialogOkCancel;
import net.alteiar.dialog.PanelOkCancel;
import net.alteiar.documents.BeanDirectory;
import net.alteiar.documents.BeanDocument;
import net.alteiar.newversion.shared.bean.BasicBean;

public class PanelCreateDocument extends JPanel implements PanelOkCancel {
  private static final long serialVersionUID = 1L;

  private static PanelCreateDocument documentBuilder = new PanelCreateDocument();

  public static void createDocument(final BeanDirectory parent) {
    DialogOkCancel<PanelCreateDocument> dlg = new DialogOkCancel<PanelCreateDocument>(
        MainFrame.FRAME, "Cr\u00E9er un document", true,
        documentBuilder);

    dlg.getMainPanel().refreshElements();
    dlg.setOkText("Cr\u00E9er");
    dlg.setCancelText("Annuler");
    dlg.setLocationRelativeTo(null);
    dlg.setMaximumSize(new Dimension(600, 470));
    dlg.setMinimumSize(new Dimension(600, 470));
    dlg.setPreferredSize(new Dimension(600, 470));
    dlg.setVisible(true);

    if (dlg.getReturnStatus() == DialogOkCancel.RET_OK) {
      try {
        dlg.getMainPanel().buildElement(parent);
      } catch (Exception ex) {
        ExceptionTool.showError(ex);
      }
    }
  }

  public static ArrayList<PanelDocumentBuilder> getBuilders() {
    return PluginSystem.getInstance().getGuiDocumentFactory();
  }

  private final JPanel panelWest;
  private final JPanel panelCenter;
  private PanelDocumentBuilder builder;

  private PanelCreateDocument() {
    super(new BorderLayout());

    panelWest = new JPanel();
    panelWest.setLayout(new BoxLayout(panelWest, BoxLayout.PAGE_AXIS));

    this.add(panelWest, BorderLayout.WEST);

    builder = getBuilders().get(0);
    builder.reset();

    panelCenter = new JPanel(new BorderLayout());
    panelCenter.add(builder, BorderLayout.CENTER);
    this.add(panelCenter, BorderLayout.CENTER);
  }

  private void refreshElements() {
    builder.reset();

    panelWest.removeAll();
    int maxWidth = 50;
    int maxHeight = 50;
    for (final PanelDocumentBuilder panel : getBuilders()) {
      Dimension dim = panel.getPreferredSize();

      maxWidth = Math.max(maxWidth, dim.width);
      maxHeight = Math.max(maxHeight, dim.height);

      ElementBuilder select = new ElementBuilder(
          panel.getDocumentBuilderName());
      select.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
          selectBuilder(panel);
        }
      });
      select.setPreferredSize(new Dimension(80, 80));
      select.setMaximumSize(new Dimension(80, 80));
      select.setMinimumSize(new Dimension(80, 80));
      // panelWest.add(select);

      JButton btnCreate = new JButton(panel.getDocumentBuilderName());
      btnCreate.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
          selectBuilder(panel);
        }
      });

      btnCreate.setPreferredSize(new Dimension(100, 50));
      btnCreate.setMaximumSize(new Dimension(100, 50));
      btnCreate.setMinimumSize(new Dimension(100, 50));

      panelWest.add(btnCreate);
    }

    this.setPreferredSize(new Dimension(maxWidth, maxHeight));
  }

  private void selectBuilder(PanelDocumentBuilder builder) {
    panelCenter.removeAll();
    this.builder = builder;
    builder.reset();
    panelCenter.add(this.builder);
    this.revalidate();
    this.repaint();
  }

  public void buildElement(BeanDirectory dir) {
    BasicBean bean = builder.buildDocument();

    if (bean != null) {
      BeanDocument doc = new BeanDocument(dir, builder.getDocumentName(),
          builder.getDocumentType(), bean);

      CampaignClient.getInstance().addBean(doc);
    }
  }

  @Override
  public Boolean isDataValid() {
    return builder.isDataValid();
  }

  @Override
  public String getInvalidMessage() {
    return builder.getInvalidMessage();
  }

  private class ElementBuilder extends JPanel {
    private static final long serialVersionUID = 1L;

    private final JLabel lblTitle;

    public ElementBuilder(String title) {
      this.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));

      GridBagLayout gridBagLayout = new GridBagLayout();
      gridBagLayout.columnWidths = new int[] { 0, 0 };
      gridBagLayout.rowHeights = new int[] { 0, 0 };
      gridBagLayout.columnWeights = new double[] { 1.0, Double.MIN_VALUE };
      gridBagLayout.rowWeights = new double[] { 1.0, Double.MIN_VALUE };
      setLayout(gridBagLayout);

      lblTitle = new JLabel(title);
      lblTitle.setHorizontalAlignment(SwingConstants.CENTER);
      GridBagConstraints gbc_lblTitle = new GridBagConstraints();
      gbc_lblTitle.fill = GridBagConstraints.BOTH;
      gbc_lblTitle.gridx = 0;
      gbc_lblTitle.gridy = 0;
      add(lblTitle, gbc_lblTitle);
    }
  }
}
TOP

Related Classes of net.alteiar.campaign.player.gui.documents.PanelCreateDocument

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.