/*
* File : OperatorEditorPanel.java
* Created : 08-mar-2004 09:49
* 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.automation.arith;
import edu.xtec.jclic.beans.TextListEditor;
import edu.xtec.util.Options;
import java.util.EventObject;
import java.util.StringTokenizer;
import javax.swing.JComboBox;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.08.09
*/
public class OperatorEditorPanel extends edu.xtec.util.CtrlPanel {
protected static final Integer[] LIST_OF_VALUES=new Integer[Operator.LIMITS.length];
static{
for(int i=0; i<Operator.LIMITS.length; i++)
LIST_OF_VALUES[i]=new Integer(Operator.LIMITS[i]);
}
Options options;
/** Creates new form OperandEditorPanel */
public OperatorEditorPanel(Options options) {
this.options=options;
initComponents();
}
/** 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.JPanel decPanel;
javax.swing.JLabel fromLb;
java.awt.GridBagConstraints gridBagConstraints;
javax.swing.JLabel toLb;
javax.swing.JLabel withLb;
decGrp = new javax.swing.ButtonGroup();
rangePanel = new javax.swing.JPanel();
fromLb = new javax.swing.JLabel();
fromCombo = new JComboBox(LIST_OF_VALUES);
toLb = new javax.swing.JLabel();
toCombo = new JComboBox(LIST_OF_VALUES);
withLb = new javax.swing.JLabel();
opPanel = new javax.swing.JPanel();
withZeroChk = new javax.swing.JCheckBox();
withOneChk = new javax.swing.JCheckBox();
withMinusOneChk = new javax.swing.JCheckBox();
fromListChk = new javax.swing.JCheckBox();
listTxt = new javax.swing.JTextField();
decPanel = new javax.swing.JPanel();
opDec0 = new javax.swing.JRadioButton();
opDec1 = new javax.swing.JRadioButton();
opDec2 = new javax.swing.JRadioButton();
setLayout(new java.awt.GridBagLayout());
rangePanel.setLayout(new java.awt.GridBagLayout());
fromLb.setLabelFor(fromCombo);
fromLb.setText(options.getMsg("edit_arith_op_from"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
rangePanel.add(fromLb, gridBagConstraints);
fromCombo.setToolTipText(options.getMsg("edit_arith_op_from_tooltip"));
fromCombo.addActionListener(this);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
rangePanel.add(fromCombo, gridBagConstraints);
toLb.setLabelFor(toCombo);
toLb.setText(options.getMsg("edit_arith_op_to"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
rangePanel.add(toLb, gridBagConstraints);
toCombo.setToolTipText(options.getMsg("edit_arith_op_to_tooltip"));
toCombo.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;
rangePanel.add(toCombo, gridBagConstraints);
withLb.setText(options.getMsg("edit_arith_op_with"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
rangePanel.add(withLb, gridBagConstraints);
withZeroChk.setText("0");
withZeroChk.setToolTipText(options.getMsg("edit_arith_op_with_tooltip"));
withZeroChk.addActionListener(this);
opPanel.add(withZeroChk);
withOneChk.setText("1");
withOneChk.setToolTipText(options.getMsg("edit_arith_op_with_tooltip"));
withOneChk.addActionListener(this);
opPanel.add(withOneChk);
withMinusOneChk.setText("-1");
withMinusOneChk.setToolTipText(options.getMsg("edit_arith_op_with_tooltip"));
withMinusOneChk.addActionListener(this);
opPanel.add(withMinusOneChk);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
rangePanel.add(opPanel, gridBagConstraints);
fromListChk.setText(options.getMsg("edit_arith_op_fromList"));
fromListChk.addActionListener(this);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
rangePanel.add(fromListChk, gridBagConstraints);
listTxt.getDocument().addDocumentListener(this);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
rangePanel.add(listTxt, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
add(rangePanel, gridBagConstraints);
decPanel.setLayout(new java.awt.GridBagLayout());
decPanel.setBorder(new javax.swing.border.TitledBorder(options.getMsg("edit_arith_op_decimals")));
opDec0.setText(options.getMsg("edit_arith_op_dec0"));
decGrp.add(opDec0);
opDec0.addActionListener(this);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
decPanel.add(opDec0, gridBagConstraints);
opDec1.setText(options.getMsg("edit_arith_op_dec1"));
decGrp.add(opDec1);
opDec1.addActionListener(this);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
decPanel.add(opDec1, gridBagConstraints);
opDec2.setText(options.getMsg("edit_arith_op_dec2"));
decGrp.add(opDec2);
opDec2.addActionListener(this);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
decPanel.add(opDec2, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
add(decPanel, gridBagConstraints);
}//GEN-END:initComponents
private TextListEditor buildNumList(){
TextListEditor tle=new TextListEditor(){
@Override
protected Object editItem(Object currentValue, boolean newValue){
Object result=super.editItem(currentValue, newValue);
if(result!=null){
boolean ok=false;
try{
int v=Integer.parseInt(result.toString());
ok=Math.abs(v)<Operator.MAX_VALUE;
} catch(NumberFormatException ex){
}
if(!ok){
options.getMessages().showAlert(this, "BAD_NUMBER");
result=null;
}
}
return result;
}
};
tle.setOptions(options);
tle.setMaxItems(Operator.NUMLST);
return tle;
}
public void setOperator(Operator op){
setInitializing(true);
fromCombo.setSelectedIndex(op.limInf);
toCombo.setSelectedIndex(op.limSup);
withZeroChk.setSelected(op.wZero);
withOneChk.setSelected(op.wOne);
withMinusOneChk.setSelected(op.wMinusOne);
if(op.numDec==1)
opDec1.setSelected(true);
else if(op.numDec==2)
opDec2.setSelected(true);
else
opDec0.setSelected(true);
fromListChk.setSelected(op.fromList>0);
StringBuilder sb=new StringBuilder();
for(int i=0; i<op.fromList; i++){
sb.append(op.lst[i]).append(" ");
}
listTxt.setText(sb.substring(0).trim());
checkEnabled();
setInitializing(false);
setModified(false);
}
public Operator getOperator(){
Operator op=new Operator();
op.limInf=fromCombo.getSelectedIndex();
op.limSup=toCombo.getSelectedIndex();
op.wZero=withZeroChk.isSelected();
op.wOne=withOneChk.isSelected();
op.wMinusOne=withMinusOneChk.isSelected();
if(opDec1.isSelected())
op.numDec=1;
else if(opDec2.isSelected())
op.numDec=2;
else
op.numDec=0;
op.fromList=0;
if(fromListChk.isSelected()){
StringTokenizer st=new StringTokenizer(listTxt.getText());
String str="";
boolean alerted=false;
while(st.hasMoreTokens() && op.fromList<Operator.NUMLST){
try{
op.lst[op.fromList]=Integer.parseInt(st.nextToken());
op.fromList++;
} catch(NumberFormatException ex){
if(!alerted){
options.getMessages().showAlert(this, "BAD_NUMBER");
alerted=true;
}
}
}
}
return op;
}
protected void checkEnabled(){
boolean fromList=fromListChk.isSelected();
listTxt.setEnabled(fromList);
fromCombo.setEnabled(!fromList);
toCombo.setEnabled(!fromList);
withZeroChk.setEnabled(!fromList);
withOneChk.setEnabled(!fromList);
withMinusOneChk.setEnabled(!fromList);
}
@Override
public boolean eventPerformed(EventObject ev){
checkEnabled();
return ev!=null;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.ButtonGroup decGrp;
private javax.swing.JComboBox fromCombo;
private javax.swing.JCheckBox fromListChk;
private javax.swing.JTextField listTxt;
private javax.swing.JRadioButton opDec0;
private javax.swing.JRadioButton opDec1;
private javax.swing.JRadioButton opDec2;
private javax.swing.JPanel opPanel;
private javax.swing.JPanel rangePanel;
private javax.swing.JComboBox toCombo;
private javax.swing.JCheckBox withMinusOneChk;
private javax.swing.JCheckBox withOneChk;
private javax.swing.JCheckBox withZeroChk;
// End of variables declaration//GEN-END:variables
}