/*
* 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.beans.*;
import edu.xtec.jclic.misc.Gradient;
import edu.xtec.jclic.misc.Utils;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.util.EventObject;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.08.29
*/
public class ActivityEditorFramePanel extends ActivityEditorInternalPanel {
edu.xtec.jclic.bags.MediaBagEditor mediaBagEditor;
/** Creates new form MenuEditorPanel */
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.
*/
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
@Override
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());
}
@Override
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);
}
@Override
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();
}
@Override
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);
}
@Override
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);
}
}
}
}