package hep.aida.ref.plotter.style.editor;
/*
 * AidaStyleEditor.java
 *
 * Created on June 13, 2005, 3:08 PM
 */

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

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.net.URL;
import java.util.Hashtable;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.UIManager;

import com.l2fprod.common.swing.LookAndFeelTweaks;
import com.l2fprod.common.swing.plaf.LookAndFeelAddons;

/**
 *
 * @author  The FreeHEP team @ SLAC
 */
public class AidaStyleEditor extends JFrame {
    JFrame frame;
    private JTabbedPane tabbedPanel;
    private Class previewType;
    private ConfigurePreviewPanel configurePanel;
    
    private JFileChooser inputChooser = new JFileChooser();
    private JTextField outputFile = new JTextField(30);
    private JCheckBox writeSetParameters = new JCheckBox("Write Only Set Parameters");
    private JFileChooser outputChooser = new JFileChooser();
    private JPanel outputPanel;
    private JButton outputBrowse;

    private int newStyleCounter = 0;
    private Hashtable files = new Hashtable();
    
    private Image homeImage;
    private JPanel homePanel;
    
    private Logger styleLogger;
    private Level logLevel;
    
    // Set Logger and Handler level and Formatter
    public static void setLoggerLevel(Logger logger, Level l) {
        final String lineSeparator = System.getProperty("line.separator", "\n");
        logger.setLevel(l);
        Handler[] handlers = Logger.getLogger( "" ).getHandlers();
        for ( int index = 0; index < handlers.length; index++ ) {
            handlers[index].setLevel(l);
            
            handlers[index].setFormatter( new SimpleFormatter() {
                public String format(LogRecord record) {
                    long millis = record.getMillis()%1000;
                    String tmp = super.format(record);
                    tmp = tmp.replaceFirst(lineSeparator, " ["+millis+"] :: \t");
                    return tmp;
                }
            } );
            
        }
        logger.fine("Set verbose level to: "+logger.getLevel());
    }
    
    
    /** Creates a new instance of AidaStyleEditor */
    public AidaStyleEditor() {
        this("AIDA Style Editor");
    }
    public AidaStyleEditor(String frameName) {
        super(frameName);
        styleLogger = Logger.getLogger("hep.aida.ref.plotter.style.editor");
        logLevel = Level.INFO;
        setLoggerLevel(styleLogger, logLevel);
        frame = this;
        init();
        
        pack();
        setSize(700, 600);
        addHomePage();
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        setLocation( (d.width-getSize().width )/2, (d.height-getSize().height )/2 );
        setVisible(true);
    }
    
    private void init() {
        tabbedPanel = new JTabbedPane();
        configurePanel = new ConfigurePreviewPanel();
        
        createMenus();
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add("Center", tabbedPanel);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    private void createMenus() {
        // FILE Menu
        JMenu fileMenu = new JMenu("File");
        
        JMenuItem item = new JMenuItem("New Style");
        item.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                newStyleAction();
            }
        });
        fileMenu.add(item);
        
        item = new JMenuItem("Open Style...");
        item.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                readStyleAction();
            }
        });
        fileMenu.add(item);
        
        item = new JMenuItem("Save Style As...");
        item.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                saveStyleAsAction();
            }
        });
        fileMenu.add(item);
        
        item = new JMenuItem("Close Style");
        item.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                removeSelectedTabAction();
            }
        });
        fileMenu.add(item);
        
        
        fileMenu.addSeparator();
        item = new JMenuItem("Exit");
        item.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                exitAction();
            }
        });
        fileMenu.add(item);
        
        
        // VIEW Menu
        JMenu viewMenu = new JMenu("View");
        JMenu previewMenu = new JMenu("Set Preview Type");
        viewMenu.add(previewMenu);
        
        // Set preview type here
        JRadioButtonMenuItem rbItem = null;
        ButtonGroup rbGroup = new ButtonGroup();
        Class[] possibleTypes = StylePreviewCreator.getPossiblePreviewTypes();
        ActionListener typeListener = new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                setPreviewTypeAction(evt.getActionCommand());
            }
        };
        
        for (int i=0; i 

Ads help maintain this website.