Package org.openquark.gems.client.valueentry

Source Code of org.openquark.gems.client.valueentry.ColourRangeValueEntryPanel

/*
* Copyright (c) 2007 BUSINESS OBJECTS SOFTWARE LIMITED
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
*     * Redistributions of source code must retain the above copyright notice,
*       this list of conditions and the following disclaimer.
*     * Redistributions in binary form must reproduce the above copyright
*       notice, this list of conditions and the following disclaimer in the
*       documentation and/or other materials provided with the distribution.
*     * Neither the name of Business Objects nor the names of its contributors
*       may be used to endorse or promote products derived from this software
*       without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/


/*
* ColourRangeValueEntryPanel.java
* Creation date: (13/07/01 10:38:38 AM)
* By: Michael Cheng
*/
package org.openquark.gems.client.valueentry;

import java.awt.Color;
import java.awt.Rectangle;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.openquark.cal.compiler.TypeExpr;
import org.openquark.cal.valuenode.LiteralValueNode;
import org.openquark.cal.valuenode.ValueNode;


/**
* A quick prototype for handling colour range (0 - 255) input.
* Creation date: (13/07/01 10:38:38 AM)
* @author Michael Cheng
*/
class ColourRangeValueEntryPanel extends ValueEntryPanel {

    private static final long serialVersionUID = 3391357553525824929L;
   
    private JSlider slider;
    private JLabel label;

    /** The primary colour being changed by this ColourRangeValueEntryPanel. */
    private final PrimaryColour primaryColour;


    /**
     * Basically an enum for RED, GREEN, BLUE.
     */
    public static class PrimaryColour {

        private final String colourName;

        private PrimaryColour(String colourNameParam) {

            this.colourName = colourNameParam;
        }

        @Override
        public String toString() {
            return colourName;
        }

        @Override
        public final boolean equals(Object that) {
            return super.equals(that);
        }

        @Override
        public final int hashCode() {
            return super.hashCode();
        }

        public static final PrimaryColour RED = new PrimaryColour("Red");
        public static final PrimaryColour GREEN = new PrimaryColour("Green");
        public static final PrimaryColour BLUE = new PrimaryColour("Blue");
        public static final PrimaryColour ALPHA = new PrimaryColour("Alpha");
    }

    /**
     * When the state of the slider changes, we have to update the ValueNode,
     * the label's text, the label's tooltip, and the colour intensity.
     * It also notifies the ValueEditorListeners of the value change.
     */
    private class SliderChangeListener implements ChangeListener {

        public void stateChanged(ChangeEvent evt) {

            ValueNode oldValue = getValueNode();
            Integer newValue = new Integer(slider.getValue());

            TypeExpr typeExpr = getValueNode().getTypeExpr();
            replaceValueNode(new LiteralValueNode(newValue, typeExpr), true);

            label.setText(String.valueOf(slider.getValue()));
            label.setToolTipText(String.valueOf(slider.getValue()));

            updateDisplayedColour();
           
            notifyValueChanged(oldValue);
        }
    }

    /**
     * ColourRangeValueEntryPanel constructor.
     * @param primaryColour
     * @param valueEditorHierarchyManager
     * @param valueNode
     */
    ColourRangeValueEntryPanel(PrimaryColour primaryColour, ValueEditorHierarchyManager valueEditorHierarchyManager, ValueNode valueNode) {

        super(valueEditorHierarchyManager, valueNode);
        this.primaryColour = primaryColour;

        // we didn't set the colour until after the constructor was called (and therefore after setInitialValue())
        // so we must update the displayed colour.
        updateDisplayedColour();
    }

    /**
     * Returns the LiteralValueNode.
     * Creation date: (13/07/01 11:28:51 AM)
     * @return LiteralValueNode
     */
    public LiteralValueNode getLiteralValueNode() {
        return (LiteralValueNode) getValueNode();
    }

    /**
     * Re-initializes the GUI layout (sets up the slider, etc.)
     * Creation date: (13/07/01 11:16:19 AM)
     */
    @Override
    public void setInitialValue() {

        super.setInitialValue();

        // Okay, let's set up the rest of the GUI (slider)
        if (slider == null) {
            initializeUI();
        }
       
        // Update the displayed values and colors
        slider.setValue(getLiteralValueNode().getIntegerValue().intValue());
        updateDisplayedColour();
    }
   
    /**
     * Initialize the UI components for this Value Entry Panel
     */
    private void initializeUI() {
        // We don't need the launch editor button, nor the value text field.
        this.remove(getLaunchEditorButton());
        this.remove(this.getValueField());
       
        // Create the color slider
        slider = new JSlider();
        slider.setMaximum(255);
        slider.setMinimum(0);
        slider.addChangeListener(new SliderChangeListener());
        this.add(slider, "Center");

        // Create the colour value label
        label = new JLabel(String.valueOf(slider.getValue()));
        label.setToolTipText(String.valueOf(slider.getValue()));
        label.setBorder(BorderFactory.createEtchedBorder());
        Rectangle textBounds = label.getFontMetrics(label.getFont()).getStringBounds("555", label.getGraphics()).getBounds();
        label.setSize(textBounds.width + 6, textBounds.height + 6);
        label.setOpaque(true);
        label.setHorizontalAlignment(SwingConstants.RIGHT);
        label.setPreferredSize(label.getSize());
        label.setForeground(Color.white);
        label.setBackground(Color.white);
        label.setBorder(BorderFactory.createLineBorder(slider.getBackground(), 2));
        this.add(label, "East");
    }

    /**
     * Update the colour displayed by this VEP
     * Creation date: (02/08/02 1:45:51 PM)
     */
    private void updateDisplayedColour() {

        Color b;                            // Background
        Color f = new Color(255, 255, 255); // Foreground
       
        if (primaryColour == PrimaryColour.RED) {
            b = new Color(slider.getValue(), 0, 0);

        } else if (primaryColour == PrimaryColour.GREEN) {
            b = new Color(0, slider.getValue(), 0);
           
        } else if (primaryColour == PrimaryColour.BLUE) {
            b = new Color(0, 0, slider.getValue());
           
        } else {
            b = new Color(slider.getValue(), slider.getValue(), slider.getValue());
            if(slider.getValue() >= 128) {
                f = new Color(0, 0, 0);               
            }            
        }

        label.setBackground(b);
        label.setForeground(f);
    }
}
TOP

Related Classes of org.openquark.gems.client.valueentry.ColourRangeValueEntryPanel

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.