Logo Search packages:      
Sourcecode: jclic version File versions  Download package

ActivityEditorFramePanel.java

/*
 * File    : ActivityEditorFramePanel.java
 * Created : 10-jun-2002 09:59
 * By      : fbusquets
 *
 * JClic - Authoring and playing system for educational activities
 *
 * Copyright (C) 2000 - 2005 Francesc Busquets & Departament
 * d'Educacio de la Generalitat de Catalunya
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details (see the LICENSE file).
 */

package edu.xtec.jclic;

import edu.xtec.jclic.edit.*;
import edu.xtec.util.Options;
import edu.xtec.jclic.misc.Utils;
import java.awt.Container;
import javax.swing.JComponent;
import java.awt.Color;
import edu.xtec.jclic.misc.Gradient;
import edu.xtec.jclic.misc.GradientEditor;
import javax.swing.JPanel;
import java.awt.Image;
import java.awt.Point;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.border.BevelBorder;
import java.awt.Dimension;
import edu.xtec.jclic.beans.NullableObject;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import edu.xtec.jclic.beans.*;
import java.util.EventObject;

/**
 *
 * @author Francesc Busquets (fbusquets@xtec.net)
 * @version 1.0
 */
00054 public class ActivityEditorFramePanel extends ActivityEditorInternalPanel {
    
    edu.xtec.jclic.bags.MediaBagEditor mediaBagEditor;
    
    /** Creates new form MenuEditorPanel */
00059     public ActivityEditorFramePanel(ActivityEditorPanel parent) {
        super(parent);
        initComponents();
        setEnabled(false);
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
00070     private void initComponents() {//GEN-BEGIN:initComponents
        javax.swing.JLabel actBgColorLb;
        javax.swing.JLabel actGradientLb;
        javax.swing.JLabel bgColorLb;
        javax.swing.JPanel gameWindowPanel;
        javax.swing.JLabel gradientLb;
        java.awt.GridBagConstraints gridBagConstraints;
        javax.swing.JLabel imgLb;
        javax.swing.JPanel mainWindowPanel;
        javax.swing.JLabel marginLb;
        javax.swing.JPanel previewPanel0;
        javax.swing.JLabel spacer1;
        javax.swing.JLabel xLb;
        javax.swing.JLabel yLb;

        locationGroup = new javax.swing.ButtonGroup();
        previewPanel0 = new javax.swing.JPanel();
        previewPanel = new PreviewPanel();
        mainWindowPanel = new javax.swing.JPanel();
        bgColorLb = new javax.swing.JLabel();
        bgColorBtn = new edu.xtec.jclic.beans.ColorButton();
        bgColorBtn.setOptions(options);
        gradientLb = new javax.swing.JLabel();
        gradientButton = new edu.xtec.jclic.beans.GradientButton();
        gradientButton.setOptions(options);
        imgLb = new javax.swing.JLabel();
        imgButton = new edu.xtec.jclic.beans.ImgButton();
        imgButton.setOptions(options);
        tiledBgImgChk = new javax.swing.JCheckBox();
        gameWindowPanel = new javax.swing.JPanel();
        actBgColorLb = new javax.swing.JLabel();
        actBgColorBtn = new edu.xtec.jclic.beans.ColorButton();
        actBgColorBtn.setOptions(options);
        actGradientLb = new javax.swing.JLabel();
        actGradientButton = new edu.xtec.jclic.beans.GradientButton();
        actGradientButton.setOptions(options);
        transpChk = new javax.swing.JCheckBox();
        borderChk = new javax.swing.JCheckBox();
        marginLb = new javax.swing.JLabel();
        marginInt = new edu.xtec.jclic.beans.SmallIntEditor();
        spacer1 = new javax.swing.JLabel();
        locationLb = new javax.swing.JLabel();
        centeredBtn = new javax.swing.JRadioButton();
        absoluteBtn = new javax.swing.JRadioButton();
        xLb = new javax.swing.JLabel();
        xInt = new edu.xtec.jclic.beans.SmallIntEditor();
        yLb = new javax.swing.JLabel();
        yInt = new edu.xtec.jclic.beans.SmallIntEditor();

        setLayout(new java.awt.GridBagLayout());

        previewPanel0.setLayout(new java.awt.BorderLayout());

        previewPanel0.setBorder(new javax.swing.border.TitledBorder(options.getMsg("edit_act_preview")));
        previewPanel.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0)));
        previewPanel0.add(previewPanel, java.awt.BorderLayout.CENTER);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weighty = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
        add(previewPanel0, gridBagConstraints);

        mainWindowPanel.setLayout(new java.awt.GridBagLayout());

        mainWindowPanel.setBorder(new javax.swing.border.TitledBorder(options.getMsg("edit_act_mainWindow")));
        bgColorLb.setLabelFor(bgColorBtn);
        bgColorLb.setText(options.getMsg("edit_act_bgColor"));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        mainWindowPanel.add(bgColorLb, gridBagConstraints);

        bgColorBtn.setToolTipText(options.getMsg("edit_act_bgColor_tooltip"));
        bgColorBtn.addPropertyChangeListener(ColorButton.PROP_COLOR, this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        mainWindowPanel.add(bgColorBtn, gridBagConstraints);

        gradientLb.setLabelFor(gradientButton);
        gradientLb.setText(options.getMsg("edit_act_gradient"));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        mainWindowPanel.add(gradientLb, gridBagConstraints);

        gradientButton.setToolTipText(options.getMsg("edit_act_gradient_tooltip"));
        gradientButton.addPropertyChangeListener(GradientButton.PROP_GRADIENT, this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        mainWindowPanel.add(gradientButton, gridBagConstraints);

        imgLb.setLabelFor(imgButton);
        imgLb.setText(options.getMsg("edit_act_image"));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        mainWindowPanel.add(imgLb, gridBagConstraints);

        imgButton.setToolTipText(options.getMsg("edit_act_image_tooltip"));
        imgButton.addPropertyChangeListener(ImgButton.PROP_IMG_NAME, this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
        gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        mainWindowPanel.add(imgButton, gridBagConstraints);

        tiledBgImgChk.setToolTipText(options.getMsg("edit_act_tiledBgImg_tooltip"));
        tiledBgImgChk.setText(options.getMsg("edit_act_tiledBgImg"));
        tiledBgImgChk.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.weightx = 1.0;
        mainWindowPanel.add(tiledBgImgChk, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
        gridBagConstraints.weightx = 0.5;
        gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
        add(mainWindowPanel, gridBagConstraints);

        gameWindowPanel.setLayout(new java.awt.GridBagLayout());

        gameWindowPanel.setBorder(new javax.swing.border.TitledBorder(options.getMsg("edit_act_gameWindow")));
        actBgColorLb.setLabelFor(actBgColorBtn);
        actBgColorLb.setText(options.getMsg("edit_act_bgColor"));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gameWindowPanel.add(actBgColorLb, gridBagConstraints);

        actBgColorBtn.setToolTipText(options.getMsg("edit_act_bgColor_tooltip"));
        actBgColorBtn.addPropertyChangeListener(ColorButton.PROP_COLOR, this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gameWindowPanel.add(actBgColorBtn, gridBagConstraints);

        actGradientLb.setLabelFor(actGradientButton);
        actGradientLb.setText(options.getMsg("edit_act_gradient"));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gameWindowPanel.add(actGradientLb, gridBagConstraints);

        actGradientButton.setToolTipText(options.getMsg("edit_act_gradient_tooltip"));
        actGradientButton.addPropertyChangeListener(GradientButton.PROP_GRADIENT, this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gameWindowPanel.add(actGradientButton, gridBagConstraints);

        transpChk.setToolTipText(options.getMsg("edit_act_transparent_tooltip"));
        transpChk.setText(options.getMsg("edit_act_transparent"));
        transpChk.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.weightx = 1.0;
        gameWindowPanel.add(transpChk, gridBagConstraints);

        borderChk.setToolTipText(options.getMsg("edit_act_border_tooltip"));
        borderChk.setText(options.getMsg("edit_act_border"));
        borderChk.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gameWindowPanel.add(borderChk, gridBagConstraints);

        marginLb.setLabelFor(marginInt);
        marginLb.setText(options.getMsg("edit_act_margin"));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gameWindowPanel.add(marginLb, gridBagConstraints);

        marginInt.setToolTipText(options.getMsg("edit_act_margin_tooltip"));
        marginInt.setMax(999);
        marginInt.addPropertyChangeListener(SmallIntEditor.PROP_VALUE, this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gameWindowPanel.add(marginInt, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
        gameWindowPanel.add(spacer1, gridBagConstraints);

        locationLb.setText(options.getMsg("edit_act_location"));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gameWindowPanel.add(locationLb, gridBagConstraints);

        centeredBtn.setToolTipText(options.getMsg("edit_act_centered_tooltip"));
        centeredBtn.setSelected(true);
        centeredBtn.setText(options.getMsg("edit_act_centered"));
        locationGroup.add(centeredBtn);
        centeredBtn.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gameWindowPanel.add(centeredBtn, gridBagConstraints);

        absoluteBtn.setToolTipText(options.getMsg("edit_act_absolute_tooltip"));
        absoluteBtn.setText(options.getMsg("edit_act_absolute"));
        locationGroup.add(absoluteBtn);
        absoluteBtn.addActionListener(this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gameWindowPanel.add(absoluteBtn, gridBagConstraints);

        xLb.setLabelFor(xInt);
        xLb.setText(options.getMsg("edit_act_x"));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gameWindowPanel.add(xLb, gridBagConstraints);

        xInt.setToolTipText(options.getMsg("edit_act_x_tooltip"));
        xInt.setMax(999);
        xInt.setMin(-999);
        xInt.addPropertyChangeListener(SmallIntEditor.PROP_VALUE, this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gameWindowPanel.add(xInt, gridBagConstraints);

        yLb.setLabelFor(yInt);
        yLb.setText(options.getMsg("edit_act_y"));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gameWindowPanel.add(yLb, gridBagConstraints);

        yInt.setToolTipText(options.getMsg("edit_act_y_tooltip"));
        yInt.setMax(999);
        yInt.setMin(-999);
        yInt.addPropertyChangeListener(SmallIntEditor.PROP_VALUE, this);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gameWindowPanel.add(yInt, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
        gridBagConstraints.weightx = 0.5;
        gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
        add(gameWindowPanel, gridBagConstraints);

    }//GEN-END:initComponents
        

    public void setEnabled(boolean enabled){
        super.setEnabled(enabled);
        marginInt.setEnabled(enabled);
        bgColorBtn.setEnabled(enabled);
        gradientButton.setEnabled(enabled);
        imgButton.setEnabled(enabled);
        tiledBgImgChk.setEnabled(enabled && imgButton.getObject()!=null);
        borderChk.setEnabled(enabled);
        transpChk.setEnabled(enabled);
        actBgColorBtn.setEnabled(enabled);
        actGradientButton.setEnabled(enabled);
        absoluteBtn.setEnabled(enabled);
        centeredBtn.setEnabled(enabled);
        xInt.setEnabled(enabled && absoluteBtn.isSelected());
        yInt.setEnabled(enabled && absoluteBtn.isSelected());
    }
    
    public boolean eventPerformed(EventObject ev){
        Object cmp = ev==null ? null : ev.getSource();
        if(cmp==null || cmp==imgButton){
            tiledBgImgChk.setEnabled(imgButton.getObject()!=null);
        }
        if(cmp==null || cmp==centeredBtn || cmp==absoluteBtn){
            xInt.setEnabled(absoluteBtn.isSelected());
            yInt.setEnabled(absoluteBtn.isSelected());
        }
        ((PreviewPanel)previewPanel).reset();
        return ev!=null;
    }

    /*
    public void clear() {
        mediaBagEditor=null;
        marginInt.setValue(Activity.DEFAULT_MARGIN);
        ((ColorButton)bgColorBtn).setColor(Activity.DEFAULT_BG_COLOR);
        gradientButton.setGradient(null);
        imgButton.setImgName(null);
        imgButton.setMediaBagEditor(null);
        tiledBgImgChk.setSelected(true);
        borderChk.setSelected(true);
        transpChk.setSelected(false);
        ((ColorButton)actBgColorBtn).setColor(Activity.DEFAULT_BG_COLOR);
        actGradientButton.setGradient(null);
        centeredBtn.setSelected(true);
        absoluteBtn.setSelected(false);
        xInt.setValue(0);
        yInt.setValue(0);
        eventPerformed(null);
    }
     */
    
    public void fillData() {
        Activity act=getActivity();
        //if(act!=null){
            //setInitializing(true);
            marginInt.setValue(act==null ? Activity.DEFAULT_MARGIN : act.margin);
            mediaBagEditor = act==null ? null : getActivityEditor().getMediaBagEditor();
            ((ColorButton)bgColorBtn).setColor(act==null ? Activity.DEFAULT_BG_COLOR : act.bgColor);
            gradientButton.setGradient(act==null ? null : act.bgGradient);
            imgButton.setMediaBagEditor(mediaBagEditor);
            imgButton.setImgName(act==null ? null : act.bgImageFile);
            tiledBgImgChk.setSelected(act==null ? true : (act.tiledBgImg || act.bgImageFile==null));
            ((PreviewPanel)previewPanel).reset();
            borderChk.setSelected(act==null ? true : act.border);
            transpChk.setSelected(act==null ? false : act.transparentBg);
            ((ColorButton)actBgColorBtn).setColor(act==null ? Activity.DEFAULT_BG_COLOR : act.activityBgColor);
            actGradientButton.setGradient(act==null ? null : act.activityBgGradient);            
            absoluteBtn.setSelected(act==null ? false : act.absolutePositioned);
            centeredBtn.setSelected(act==null ? true : !act.absolutePositioned);
            if(act!=null && act.absolutePosition!=null){
                xInt.setValue(act.absolutePosition.x);
                yInt.setValue(act.absolutePosition.y);
            } else{
                xInt.setValue(0);
                yInt.setValue(0);
            }
            //setInitializing(false);
        //}
        eventPerformed(null);
    }
    
    public void saveData(){
        Activity act=getActivity();
        if(act!=null){
            act.margin=marginInt.getValue();
            act.bgColor=((ColorButton)bgColorBtn).getColor();
            act.bgGradient=gradientButton.getGradient();
            act.bgImageFile=imgButton.getImgName();
            act.tiledBgImg=tiledBgImgChk.isSelected() && act.bgImageFile!=null;
            act.border=borderChk.isSelected();
            act.transparentBg=transpChk.isSelected();
            act.activityBgColor=((ColorButton)actBgColorBtn).getColor();
            act.activityBgGradient=actGradientButton.getGradient();
            act.absolutePositioned=absoluteBtn.isSelected();
            if(act.absolutePositioned){
                act.absolutePosition=new Point(xInt.getValue(), yInt.getValue());
            } else{
                act.absolutePosition=null;
            }
        }
    }
    
    /*
    public boolean dataChanged(){
        boolean result=false;
        Activity act=getActivity();
        if(act!=null){
            result =

            !act.bgColor.equals(((ColorButton)bgColorBtn).getColor()) ||
            !Utils.compareObjects(act.bgGradient, gradientButton.getGradient()) ||
            !Utils.compareObjects(act.bgImageFile, imgButton.getImgName()) ||
            tiledBgImgChk.isSelected()!=act.tiledBgImg ||
            marginInt.getValue()!=act.margin ||
            
            !act.activityBgColor.equals(((ColorButton)actBgColorBtn).getColor()) ||
            !Utils.compareObjects(act.activityBgGradient, actGradientButton.getGradient()) ||
            transpChk.isSelected()!=act.transparentBg ||
            borderChk.isSelected()!=act.border ||
            centeredBtn.isSelected()==act.absolutePositioned ||
            (absoluteBtn.isSelected() && 
             (act.absolutePosition==null 
             || xInt.getValue()!=act.absolutePosition.x 
             || yInt.getValue()!=act.absolutePosition.y));
        }
        return result;
    }
     */
    
    protected javax.swing.Icon getIcon(){
        return edu.xtec.util.ResourceManager.getImageIcon("icons/frame.gif");
    }
    
    protected String getTitle() {
        return options.getMsg("edit_act_panels_frame");
    }    

    protected String getTooltip() {
        return options.getMsg("edit_act_panels_frame_tooltip");
    }
    
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JRadioButton absoluteBtn;
    private edu.xtec.jclic.beans.ColorButton actBgColorBtn;
    private edu.xtec.jclic.beans.GradientButton actGradientButton;
    private edu.xtec.jclic.beans.ColorButton bgColorBtn;
    private javax.swing.JCheckBox borderChk;
    private javax.swing.JRadioButton centeredBtn;
    private edu.xtec.jclic.beans.GradientButton gradientButton;
    private edu.xtec.jclic.beans.ImgButton imgButton;
    private javax.swing.ButtonGroup locationGroup;
    private javax.swing.JLabel locationLb;
    private edu.xtec.jclic.beans.SmallIntEditor marginInt;
    private javax.swing.JPanel previewPanel;
    private javax.swing.JCheckBox tiledBgImgChk;
    private javax.swing.JCheckBox transpChk;
    private edu.xtec.jclic.beans.SmallIntEditor xInt;
    private edu.xtec.jclic.beans.SmallIntEditor yInt;
    // End of variables declaration//GEN-END:variables
    
    class PreviewPanel extends JPanel{
        InnerPreviewPane innerPane;
        Image bgImage;
        boolean tiledBgImg;
        Gradient bgGradient, actBgGradient;        
        Point bgImageOrigin=new Point();
        double scale=1.0;
        
        PreviewPanel(){
            super();
            setLayout(null);
            innerPane=new InnerPreviewPane();
            add(innerPane);
        }
        
        class InnerPreviewPane extends JPanel{
            InnerPreviewPane(){
                super();
                setLayout(null);
            }
            
            public void fitTo(Rectangle proposedRect, Rectangle maxRect){
                Activity act=getActivity();
                Dimension d=new Dimension(
                act==null ? Activity.DEFAULT_WIDTH : act.getWindowSize().width,
                act==null ? Activity.DEFAULT_HEIGHT : act.getWindowSize().height
                );
                int w=Math.max(Activity.MINIMUM_WIDTH, Math.min(proposedRect.width, (int)(scale*d.width)));
                int h=Math.max(Activity.MINIMUM_HEIGHT, Math.min(proposedRect.height, (int)(scale*d.height)));
                boolean b=centeredBtn.isSelected();
                int xp = (b ? 0 : bgImageOrigin.x) + Math.max(0, b ? proposedRect.x+(proposedRect.width-w)/2 : (int)(scale*xInt.getValue()));
                int yp = (b ? 0 : bgImageOrigin.y) + Math.max(0, b ? proposedRect.y+(proposedRect.height-h)/2 : (int)(scale*yInt.getValue()));
                
                if(xp>maxRect.width-Activity.MINIMUM_WIDTH)
                    xp=maxRect.width-Activity.MINIMUM_WIDTH;
                if(xp+w>maxRect.width)
                    w=maxRect.width-xp;
                
                if(yp>maxRect.height-Activity.MINIMUM_HEIGHT)
                    yp=maxRect.height-Activity.MINIMUM_HEIGHT;
                if(yp+h>maxRect.height)
                    h=maxRect.height-yp;
                
                setBounds(xp, yp, w, h);
            }
            
            public void paintComponent(Graphics g){
                Graphics2D g2=(Graphics2D)g;
                Rectangle rBounds=new Rectangle(0, 0, getWidth(), getHeight());
                
                if(!isOpaque() || actBgGradient==null || actBgGradient.hasTransparency())
                    super.paintComponent(g);
                
                RenderingHints rh=g2.getRenderingHints();
                
                if(isOpaque() && actBgGradient!=null){
                    g2.setRenderingHints(edu.xtec.jclic.Constants.DEFAULT_RENDERING_HINTS);
                    actBgGradient.paint(g2, rBounds);
                }
                
                if(getActivityEditor()!=null)
                    //getActivityEditor().drawPreview(g2, rBounds, margin);
                    getActivityEditor().drawPreview(g2, rBounds, marginInt.getValue());
                
                g2.setRenderingHints(rh);
            }
        }
        
        public void reset(){
            bgImage=null;
            bgGradient=null;
            actBgGradient=null;
            bgImage=null;
            tiledBgImg=true;
            if(mediaBagEditor!=null){
                String bgImageFile=imgButton.getImgName();
                if(bgImageFile!=null){
                    try{
                        bgImage=mediaBagEditor.getMediaBag().getImageElement(bgImageFile).getImage();
                    } catch(Exception ex){
                        options.getMessages().showErrorWarning(this, "ERROR", ex);
                    }
                }
                tiledBgImg=tiledBgImgChk.isSelected();
            }
            innerPane.setBorder(
            borderChk.isSelected() ? 
            BorderFactory.createBevelBorder(BevelBorder.RAISED) : 
                BorderFactory.createEmptyBorder()
                );
                
            innerPane.setOpaque(!transpChk.isSelected());
            innerPane.setBackground(actBgColorBtn.getColor());
            actBgGradient=actGradientButton.getGradient();
            
            bgGradient=gradientButton.getGradient();
            setBackground(bgColorBtn.getColor());
            revalidate();
            repaint();
        }
        
        public void doLayout(){
            scale=1.0;
            bgImageOrigin.x=0;
            bgImageOrigin.y=0;            
            Rectangle bounds=getBounds();
            int margin=marginInt.getValue();
            Rectangle proposedRect=new Rectangle(margin, margin, bounds.width-2*margin, bounds.height-2*margin);
            if(bgImage!=null && !tiledBgImg){
                int w=bgImage.getWidth(this);
                int h=bgImage.getHeight(this);                    
                if(w>0 && h>0 && (w>getWidth() || h>getHeight())){
                    scale=Math.min((double)getWidth()/w, (double)getHeight()/h);
                    w=(int)(scale*w);
                    h=(int)(scale*h);
                }
                else
                    scale=1.0;
                bgImageOrigin.x=(getWidth()-w)/2;
                bgImageOrigin.y=(getHeight()-h)/2;                
                if(absoluteBtn.isSelected()){
                    proposedRect.x=bgImageOrigin.x;
                    proposedRect.y=bgImageOrigin.y;
                    proposedRect.width-=(bgImageOrigin.x-margin);
                    proposedRect.height-=(bgImageOrigin.y-margin);
                    proposedRect.width=Math.min(proposedRect.width, bounds.width);
                    proposedRect.height=Math.min(proposedRect.height, bounds.height);
                }
            }
            innerPane.fitTo(proposedRect, bounds);
        }
        
        public void paintComponent(Graphics g){
            Graphics2D g2=(Graphics2D)g;
            
            Rectangle rBounds=new Rectangle(0, 0, getWidth(), getHeight());
            
            if(bgGradient==null || bgGradient.hasTransparency())
                super.paintComponent(g);
            
            if(bgGradient!=null || bgImage!=null){
                RenderingHints rh=g2.getRenderingHints();
                g2.setRenderingHints(edu.xtec.jclic.Constants.DEFAULT_RENDERING_HINTS);
                
                if(bgGradient!=null)
                    bgGradient.paint(g2, rBounds);
                
                if(bgImage!=null){
                    Rectangle r=new Rectangle(0, 0, bgImage.getWidth(this), bgImage.getHeight(this));
                    Rectangle gBounds=g2.getClipBounds();
                    
                    if(!tiledBgImg){
                        r.setLocation(bgImageOrigin);
                        if(r.intersects(gBounds)){
                            if(scale==1.0)
                                g2.drawImage(bgImage, bgImageOrigin.x, bgImageOrigin.y, this);
                            else{
                                int w0=bgImage.getWidth(this);
                                int h0=bgImage.getHeight(this);
                                int w=(int)(scale*w0);
                                int h=(int)(scale*h0);
                                g2.drawImage(bgImage, 
                                bgImageOrigin.x, bgImageOrigin.y, 
                                bgImageOrigin.x + w,
                                bgImageOrigin.y + h,
                                0, 0, w0, h0, this);
                            }
                        }
                    }
                    else{
                        Utils.tileImage(g2, bgImage, rBounds, r, this);
                    }
                }
                g2.setRenderingHints(rh);
            }
        }
    }
    
}

Generated by  Doxygen 1.6.0   Back to index