package hep.aida.ref.plotter.style.editor;
/*
 * StyleEditorPanel.java
 *
 * Created on June 14, 2005, 9:32 AM
 */

import hep.aida.IAnalysisFactory;
import hep.aida.IBaseStyle;
import hep.aida.IHistogram1D;
import hep.aida.IPlotterStyle;
import hep.aida.ref.plotter.BaseStyle;
import hep.aida.ref.plotter.Style;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;

import com.l2fprod.common.propertysheet.Property;
import com.l2fprod.common.propertysheet.PropertySheetPanel;

/**
 *
 * @author  serbo
 */
public class StyleEditorPanel extends JSplitPane implements TreeSelectionListener, PropertyChangeListener {
    private String title;
    private IPlotterStyle style;
    private JComboBox previewTypeBox;
    private Class previewType = IHistogram1D.class;
    private JTree styleTree;
    private DefaultTreeModel styleModel;
    private StylePreviewCreator stylePreviewCreator;
    private JSplitPane rightPanel;
    private boolean previewFitRegion = true;
    private JCheckBox showPreviewCheckBox;
    private JComponent previewPanel;
    private int previewDividerLocation = 250;
    
    private PropertySheetPanel currentStylePanel;
    
    static boolean isAnyParameterSet(BaseStyle style) {
        return isAnyParameterSet(style, true);
    }
    static boolean isAnyParameterSet(BaseStyle style, boolean recursive) {
        boolean isSet = false;
        if (style == null) return false;
        
        // Loop over parameters first
        String[] parNames = style.availableParameters();
        if (parNames != null) {
            for (int i=0; i 0) previewPanel.remove(0);
        } catch (ArrayIndexOutOfBoundsException e) { e.printStackTrace(); }
        */
        
        //if (previewFitRegion) {
            Dimension d = null;
            //newComponent.setMinimumSize(d);
        //}
        if (showPreviewCheckBox.isSelected()) {
            JComponent newComponent = stylePreviewCreator.getPreviewPanel(style, previewType);
            newComponent.setMaximumSize(d);
            newComponent.setPreferredSize(d);
            if (rightPanel.getBottomComponent() != null) previewDividerLocation = rightPanel.getDividerLocation();
            rightPanel.setBottomComponent(newComponent);
            rightPanel.setDividerLocation(previewDividerLocation);
            previewPanel = newComponent;
        }
    }
    
    private void init(IPlotterStyle ps, ConfigurePreviewPanel configurePanel, Class previewType) {
        this.style = ps;
        this.previewType = previewType;
        
        showPreviewCheckBox = new JCheckBox("Show Preview ");
        showPreviewCheckBox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ev) {
                boolean selected = ((JCheckBox) ev.getSource()).isSelected();
                //System.out.println("Preview Selected: "+selected);
                setPreviewVisibleAction(selected);
            }
        });
        
        Class[] possibleTypes = StylePreviewCreator.getPossiblePreviewTypes();
        String[] possibleTypesString = new String[possibleTypes.length];
        for (int i=0; i 1)
                ((JComponent) rightPanel.getTopComponent()).remove(1);
            ((JComponent) rightPanel.getTopComponent()).add(panel);
            rightPanel.setDividerLocation(rdl);
            if (panel instanceof PropertySheetPanel) {
                currentStylePanel = (PropertySheetPanel) panel;
                currentStylePanel.addPropertySheetChangeListener(this);
            }
        }
    }
    
    
    // PropertyChangeLisener methods
    
    public void propertyChange(PropertyChangeEvent evt) {
        Property prop = (Property)evt.getSource();
        updatePreview();
        
        // repaint Tree and the panel
        //Component tc = rightPanel.getTopComponent();
        //if (((JComponent) rightPanel.getTopComponent()).getComponentCount() > 1)
        //        tc = ((JComponent) rightPanel.getTopComponent()).getComponent(1);
        //if (tc != null) tc.repaint();
        styleTree.repaint();
        if (currentStylePanel != null) { 
            //RuntimeException re = new RuntimeException("**** Property Change *** ");
            //re.printStackTrace();
            currentStylePanel.repaint();
        }
    }
    
    // Style-specific Cell Renderer
    
    class StyleTreeCellRenderer extends DefaultTreeCellRenderer {
        
        public Component getTreeCellRendererComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
            Component c = super.getTreeCellRendererComponent(tree, value, isSelected, expanded, leaf, row, hasFocus);
            Font font = c.getFont();
            if (font != null) {
                boolean normal = !font.isItalic();
                String name = font.getName();
                int size = font.getSize();
                int style = Font.PLAIN;
                boolean isSet = false;
                boolean isSetHere = false;
                if (value instanceof StyleTreeNode) {
                    IBaseStyle st = ((StyleTreeNode) value).getStyle();
                    if (st instanceof BaseStyle) {
                        BaseStyle bst = (BaseStyle) st;
                        isSet = isAnyParameterSet(bst, true);
                        isSetHere = isAnyParameterSet(bst, false);
                    }
                }
                
                if (isSetHere) {
                    style = Font.PLAIN;
                    if (isSelected) c.setForeground(Color.white);
                    else c.setForeground(Color.black);
                } else if (isSet) {
                    style = Font.PLAIN;
                    if (isSelected) c.setForeground(Color.green);
                    else c.setForeground(Color.blue);
               } else {
                    style = Font.ITALIC;
                    if (isSelected) c.setForeground(Color.yellow);
                    else c.setForeground(Color.red);
                }
                Font newFont = new Font(name, style, size);
                c.setFont(newFont);
            }
            return c;
        }
    }
    
    
    public static void main(String[] args) throws Exception {
        //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        //LookAndFeelTweaks.tweak();
        
        JFrame frame = new JFrame("PropertySheet");
        frame.getContentPane().setLayout(new BorderLayout());
        
        IPlotterStyle style = IAnalysisFactory.create().createPlotterFactory().createPlotterStyle();
        
        StyleEditorPanel sePanel = new StyleEditorPanel(style, new ConfigurePreviewPanel(),IHistogram1D.class);
        frame.getContentPane().add("Center", sePanel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setSize(600, 500);
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        frame.setLocation( (d.width-frame.getSize().width )/2, (d.height-frame.getSize().height )/2 );
        frame.setVisible(true);
    }
    
}

 

Ads help maintain this website.