/*
* File : ConditionalJumpPanel.java
* Created : 19-mar-2004 11:44
* 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.bags;
import edu.xtec.jclic.beans.SmallIntEditor;
import edu.xtec.util.Options;
import edu.xtec.util.ResourceManager;
import java.util.EventObject;
import javax.swing.Icon;
import javax.swing.JComboBox;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.08.09
*/
public class ConditionalJumpPanel extends edu.xtec.util.CtrlPanel {
Options options;
protected String[] jmpOptions;
protected Icon[] jmpIcons;
ActivitySequenceElementEditorPanel asep;
ConditionalJumpInfo ji;
String sType;
/** Creates new form ConditionalJumpPanel */
public ConditionalJumpPanel(Options options, ActivitySequenceElementEditorPanel asep, boolean up) {
this.options=options;
this.asep=asep;
sType = up ? "up" : "down";
ji=new ConditionalJumpInfo(JumpInfo.RETURN, null, 60);
initObjects();
initComponents();
}
private static final String[]
OPTIONS_KEYS={"edit_seq_action_jump", "edit_seq_action_stop", "edit_seq_action_return", "edit_seq_action_exit"},
OPTIONS_ICONS={"seq_next_jump", "seq_next_stop", "seq_next_return", "seq_exit"};
private void initObjects(){
int l=OPTIONS_KEYS.length;
jmpOptions=new String[l];
jmpIcons=new Icon[l];
for(int i=0; i<l; i++){
jmpOptions[i]=options.getMsg(OPTIONS_KEYS[i]);
jmpIcons[i]=ResourceManager.getImageIcon("icons/"+OPTIONS_ICONS[i]+".gif");
}
}
/** 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 actionLb;
java.awt.GridBagConstraints gridBagConstraints;
javax.swing.JLabel thresholdLb;
javax.swing.JLabel timeLb;
actionLb = new javax.swing.JLabel();
actionCombo = new JComboBox(jmpOptions);
jumpBtn = new javax.swing.JButton();
jumpLb = new javax.swing.JLabel();
thresholdLb = new javax.swing.JLabel();
thresholdInt = new edu.xtec.jclic.beans.SmallIntEditor();
timeLb = new javax.swing.JLabel();
timeInt = new edu.xtec.jclic.beans.SmallIntEditor();
setLayout(new java.awt.GridBagLayout());
actionLb.setLabelFor(actionCombo);
actionLb.setText(options.getMsg("edit_seq_action"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
add(actionLb, gridBagConstraints);
actionCombo.setToolTipText(options.getMsg("edit_seq_action_tooltip"));
actionCombo.setRenderer(new edu.xtec.util.CustomListCellRenderer(jmpOptions, jmpIcons));
actionCombo.addActionListener(this);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
add(actionCombo, gridBagConstraints);
jumpBtn.setText("...");
jumpBtn.setToolTipText(options.getMsg("edit_seq_jump_tooltip"));
jumpBtn.setMargin(new java.awt.Insets(0, 3, 0, 3));
jumpBtn.setEnabled(false);
jumpBtn.addActionListener(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);
add(jumpBtn, gridBagConstraints);
jumpLb.setText(" ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
add(jumpLb, gridBagConstraints);
thresholdLb.setLabelFor(thresholdInt);
thresholdLb.setText(options.getMsg("edit_seq_threshold"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
add(thresholdLb, gridBagConstraints);
thresholdInt.setToolTipText(options.getMsg("edit_seq_threshold_tooltip_"+sType));
thresholdInt.setMax(100);
thresholdInt.setMin(-1);
thresholdInt.setValue(60);
thresholdInt.addPropertyChangeListener(SmallIntEditor.PROP_VALUE, this);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
add(thresholdInt, gridBagConstraints);
timeLb.setLabelFor(timeInt);
timeLb.setText(options.getMsg("edit_seq_time"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
add(timeLb, gridBagConstraints);
timeInt.setToolTipText(options.getMsg("edit_seq_time_tooltip_"+sType));
timeInt.setMax(9999);
timeInt.setMin(-1);
timeInt.setValue(-1);
timeInt.addPropertyChangeListener(SmallIntEditor.PROP_VALUE, this);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
add(timeInt, gridBagConstraints);
}//GEN-END:initComponents
public void setJumpInfo(ConditionalJumpInfo ji, boolean up){
if(ji==null)
ji=new ConditionalJumpInfo(JumpInfo.RETURN, null, up ? 80 : 20);
else
ji=new ConditionalJumpInfo(ji.action, ji.sequence, ji.threshold, ji.time);
this.ji=ji;
thresholdInt.setValue(ji.threshold);
timeInt.setValue(ji.time);
actionCombo.setSelectedIndex(ji.action);
thresholdInt.setToolTipText(options.getMsg("edit_seq_threshold_tooltip_"+(up ? "up" : "down")));
timeInt.setToolTipText(options.getMsg("edit_seq_time_tooltip_"+(up ? "up" : "down")));
setJumpLabel();
checkEnabled();
setModified(false);
}
public ConditionalJumpInfo getJumpInfo(){
ji.threshold=thresholdInt.getValue();
ji.time=timeInt.getValue();
return ji;
}
@Override
public boolean eventPerformed(EventObject ev){
Object src=(ev==null ? null : ev.getSource());
if(src==null)
return false;
if(src==actionCombo || src==jumpBtn){
asep.checkJump(ji, actionCombo, false, src==jumpBtn);
setJumpLabel();
}
checkEnabled();
repaint();
return true;
}
public void checkEnabled(){
jumpBtn.setEnabled(ji.action==JumpInfo.JUMP);
}
private void setJumpLabel(){
StringBuilder sb=new StringBuilder();
if(ji.action==JumpInfo.JUMP && ji.sequence!=null){
sb.append(ji.sequence);
if(ji.projectPath!=null)
sb.append(" (").append(ji.projectPath).append(")");
}
jumpLb.setText(sb.append(' ').substring(0));
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JComboBox actionCombo;
private javax.swing.JButton jumpBtn;
private javax.swing.JLabel jumpLb;
private edu.xtec.jclic.beans.SmallIntEditor thresholdInt;
private edu.xtec.jclic.beans.SmallIntEditor timeInt;
// End of variables declaration//GEN-END:variables
}