package hep.aida.ref.plotter.style.registry;

import hep.aida.IAnalysisFactory;
import hep.aida.IPlotterStyle;
import hep.aida.ref.xml.AidaStyleXMLReader;

import java.awt.Component;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;

import org.freehep.application.RecentItemTextField;
import org.freehep.application.studio.Studio;

public class AddStyleStoreEntryPanel extends JPanel {
    private Component parent;
    private String title;
    private JPanel thisPanel;
    private JTextField styleName = new JTextField(15);
    private RecentItemTextField inputFile = new RecentItemTextField("hep.aida.ref.plotter.style.registry.AddStyleStoreEntryPanel.InputFile", 15, false);
    private JFileChooser inputChooser = new JFileChooser();
    private JButton browse;
    private JRadioButton createNew;
    private JRadioButton createFromFile;
    private JComboBox previewType;
    
    public AddStyleStoreEntryPanel() {
        this(null, "Add Style Store Entry");
    }
    public AddStyleStoreEntryPanel(Component parent) {
        this(parent, "Add Style Store Entry");
    }
    public AddStyleStoreEntryPanel(String title) {
        this(null, title);
    }
    public AddStyleStoreEntryPanel(Component parent, String title) {
        super();
        this.parent = parent;
        this.title = title;
        thisPanel = this;
        initComponents();
    }
    
    private void initComponents() {
        Class[] types = new Class[] { hep.aida.IHistogram1D.class, hep.aida.IHistogram2D.class, hep.aida.IDataPointSet.class };
        previewType = new JComboBox(types);
        previewType.setSelectedIndex(0);
        
        browse = new JButton("Browse...");
        browse.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ev) {
                String fileName = inputFile.getText();
                int returnVal = inputChooser.showOpenDialog(thisPanel);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    File file = inputChooser.getSelectedFile();
                    fileName = file.getAbsolutePath();
                    inputFile.setText(fileName);
                } else {  }
            }
        });
        
        createNew = new JRadioButton("Create New Style ");
        createNew.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ev) {
                if (ev.getSource() instanceof JRadioButton) {
                    boolean selected = ((JRadioButton) ev.getSource()).isSelected();
                    inputFile.setEnabled(!selected);
                    browse.setEnabled(!selected);
                }
            }
        });
        
        createFromFile = new JRadioButton("Read Style from File ");
        createFromFile.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ev) {
                if (ev.getSource() instanceof JRadioButton) {
                    boolean selected = ((JRadioButton) ev.getSource()).isSelected();
                    inputFile.setEnabled(selected);
                    browse.setEnabled(selected);
                }
            }
        });
        
        ButtonGroup rbg = new ButtonGroup();
        rbg.add(createNew);
        rbg.add(createFromFile);
        createNew.setSelected(true);
        inputFile.setEnabled(false);
        browse.setEnabled(false);
        
        //this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.setBorder(new TitledBorder(new EtchedBorder(), title));
        java.awt.GridBagConstraints gbc = new java.awt.GridBagConstraints();
        gbc.anchor = java.awt.GridBagConstraints.WEST;
        gbc.insets =  new java.awt.Insets(2, 2, 2, 2);
        
        this.setLayout(new java.awt.GridBagLayout());
        
        gbc.gridy=0; gbc.gridx=0;
        this.add(new JLabel("Style Name: "), gbc);
        gbc.gridx=1;
        this.add(styleName, gbc);
        gbc.gridy=1; gbc.gridx=0;
        this.add(createNew, gbc);
        gbc.gridy=2; gbc.gridx=0;
        this.add(createFromFile, gbc);
        gbc.gridx=1;
        this.add(inputFile, gbc);
        gbc.gridx=2;
        this.add(browse, gbc);
        gbc.gridy=3; gbc.gridx=0;
        this.add(new JLabel("Style Preview: "), gbc);
        gbc.gridx=1;
        this.add(previewType, gbc);
        
    }
    
    
    IPlotterStyle createStyleAction() {
        IPlotterStyle style = IAnalysisFactory.create().createPlotterFactory().createPlotterStyle();
        return style;
    }
    
    IPlotterStyle readStyleAction() throws IOException, org.jdom.JDOMException {
        IPlotterStyle style = null;
        File file = null;
        String fileName = inputFile.getText();
        style = AidaStyleXMLReader.restoreFromFile(fileName);
        return style;
    }
    
    public StyleStoreEntry createStoreEntry() throws IOException, org.jdom.JDOMException {
        StyleStoreEntry entry = null;
        Component comp = parent;
        if (comp == null) comp = (Component) SwingUtilities.getAncestorOfClass(Frame.class, this);
        boolean wrongInput = true;
        while (wrongInput) {
            int reply = JOptionPane.showOptionDialog(comp, this, title, JOptionPane.YES_NO_OPTION, JOptionPane.DEFAULT_OPTION, null, new String[] {"Ok", "Cancel"},  "Cancel");
            try {
                if (reply == JOptionPane.YES_OPTION) {
                    String sn = styleName.getText();
                    if (sn == null || sn.trim().equals(""))
                        throw new IllegalArgumentException("Style Name can not be Empty, please correct");
                    
                    String fileName = inputFile.getText();
                    IPlotterStyle style = null;
                    if (createNew.isSelected()) style = createStyleAction();
                    else readStyleAction();
                    
                    entry = new StyleStoreEntry(styleName.getText(), style, new JELRule());
                    Class preview = (Class) previewType.getSelectedItem();
                    if (preview != null) entry.setPreviewType(preview);
                    inputFile.saveState();
                }
                wrongInput = false;
            } catch (Exception e) {
                String message = "Error: "+e.getMessage();
                if (parent != null && parent instanceof Studio) ((Studio) parent).error(this, message, e);
                e.printStackTrace();
            }
        }
        return entry;
    }
    
}

 

Ads help maintain this website.