/* * File : ActivitySequenceElementEditorPanel.java * Created : 08-apr-2003 17:24 * 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.NullableObject; import edu.xtec.jclic.beans.SmallIntEditor; import edu.xtec.jclic.edit.Editor; import edu.xtec.jclic.edit.EditorPanel; import edu.xtec.jclic.project.JClicProjectEditor; import edu.xtec.util.ListComboModel; import edu.xtec.util.Options; import edu.xtec.util.ResourceManager; import edu.xtec.util.StrUtils; import java.awt.Component; import java.awt.Container; import java.util.EventObject; import javax.swing.Icon; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JTextField; import javax.swing.ListModel; import javax.swing.event.DocumentEvent; /** * * @author Francesc Busquets (fbusquets@xtec.cat) * @version 13.08.09 */ public class ActivitySequenceElementEditorPanel extends EditorPanel { String[] fwdOptions, backOptions; Icon[] fwdIcons, backIcons; protected ListComboModel actModel, jmpTagModel; protected JComboBox tagCombo; protected JTextField prjEdit; protected JComponent[] prompt_objects; protected String[] prompt_keys, prompt_msg; /** Creates new form ActivitySequenceElementEditorPanel */ public ActivitySequenceElementEditorPanel(Options options) { super(options); initObjects(); //ActivitySequenceElementEditor.createActions(options); initComponents(); postInit(250, false, false); setEnabled(false); } private static final String[] FWD_OPTIONS_KEYS={"edit_seq_action_fwd", "edit_seq_action_jump", "edit_seq_action_stop", "edit_seq_action_return", "edit_seq_action_exit"}, FWD_OPTIONS_ICONS={"seq_next", "seq_next_jump", "seq_next_stop", "seq_next_return", "seq_exit"}, BACK_OPTIONS_KEYS={"edit_seq_action_back", "edit_seq_action_jump", "edit_seq_action_stop", "edit_seq_action_return", "edit_seq_action_exit"}, BACK_OPTIONS_ICONS={"seq_prev", "seq_prev_jump", "seq_prev_stop", "seq_prev_return", "seq_exit"}; private void initObjects(){ int l=FWD_OPTIONS_KEYS.length; fwdOptions=new String[l]; fwdIcons=new Icon[l]; backOptions=new String[l]; backIcons=new Icon[l]; for(int i=0; i<FWD_OPTIONS_KEYS.length; i++){ fwdOptions[i]=options.getMsg(FWD_OPTIONS_KEYS[i]); fwdIcons[i]=ResourceManager.getImageIcon("icons/"+FWD_OPTIONS_ICONS[i]+".gif"); backOptions[i]=options.getMsg(BACK_OPTIONS_KEYS[i]); backIcons[i]=ResourceManager.getImageIcon("icons/"+BACK_OPTIONS_ICONS[i]+".gif"); } tagCombo=new JComboBox(); tagCombo.setEditable(true); tagCombo.addActionListener(this); prjEdit=new JTextField(); prompt_objects=new JComponent[] {tagCombo, prjEdit}; prompt_keys=new String[] {"edit_seq_tag", "edit_seq_project"}; prompt_msg=new String[] {"edit_seq_jump_msg"}; } /** 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 actLabel; javax.swing.JLabel backActionLb; javax.swing.JPanel backPanel; javax.swing.JLabel bkIcon; javax.swing.JPanel condJumpPanel; javax.swing.JLabel delayLabel; javax.swing.JLabel descLabel; javax.swing.JLabel fwIcon; javax.swing.JLabel fwdActionLb; javax.swing.JPanel fwdPanel; java.awt.GridBagConstraints gridBagConstraints; javax.swing.JLabel lowerLb; javax.swing.JLabel spacer; javax.swing.JLabel tagLabel; javax.swing.JLabel upperLb; mainPanel = new javax.swing.JPanel(); actLabel = new javax.swing.JLabel(); actCombo = new javax.swing.JComboBox(); editActBtn = new javax.swing.JButton(); editActBtn.addActionListener(this); tagLabel = new javax.swing.JLabel(); tagText = new javax.swing.JTextField(); descLabel = new javax.swing.JLabel(); scroll = new javax.swing.JScrollPane(); descText = new javax.swing.JTextArea(); fwdPanel = new javax.swing.JPanel(); fwIcon = new javax.swing.JLabel(); fwdEnabledChk = new javax.swing.JCheckBox(); fwdActionLb = new javax.swing.JLabel(); fwdActionCombo = new javax.swing.JComboBox(fwdOptions); fwdJumpBtn = new javax.swing.JButton(); fwdJumpLb = new javax.swing.JLabel(); autoChk = new javax.swing.JCheckBox(); delayLabel = new javax.swing.JLabel(); delayEditor = new edu.xtec.jclic.beans.SmallIntEditor(); condJumpPanel = new javax.swing.JPanel(); upperLb = new javax.swing.JLabel(); upperBtn = new CondJumpBtn(true); lowerLb = new javax.swing.JLabel(); lowerBtn = new CondJumpBtn(false); backPanel = new javax.swing.JPanel(); bkIcon = new javax.swing.JLabel(); backEnabledChk = new javax.swing.JCheckBox(); backActionLb = new javax.swing.JLabel(); backActionCombo = new javax.swing.JComboBox(backOptions); backJumpBtn = new javax.swing.JButton(); backJumpLb = new javax.swing.JLabel(); spacer = new javax.swing.JLabel(); setLayout(new java.awt.BorderLayout()); mainPanel.setLayout(new java.awt.GridBagLayout()); actLabel.setText(options.getMsg("edit_seq_activity")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; mainPanel.add(actLabel, gridBagConstraints); actCombo.setToolTipText(options.getMsg("edit_seq_activity_tooltip")); actCombo.addActionListener(this); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; mainPanel.add(actCombo, gridBagConstraints); editActBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/miniclic.png"))); editActBtn.setToolTipText(options.getMsg("edit_act_editActivity_tooltip")); editActBtn.setText(options.getMsg("edit_act_editActivity")); editActBtn.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); 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; mainPanel.add(editActBtn, gridBagConstraints); tagLabel.setText(options.getMsg("edit_seq_tag")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; mainPanel.add(tagLabel, gridBagConstraints); tagText.setToolTipText(options.getMsg("edit_seq_tag_tooltip")); tagText.setPreferredSize(new java.awt.Dimension(130, 21)); tagText.setMinimumSize(new java.awt.Dimension(130, 21)); tagText.getDocument().addDocumentListener(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; mainPanel.add(tagText, gridBagConstraints); descLabel.setText(options.getMsg("edit_seq_description")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST; mainPanel.add(descLabel, gridBagConstraints); scroll.setPreferredSize(new java.awt.Dimension(200, 60)); scroll.setMinimumSize(new java.awt.Dimension(200, 40)); descText.setWrapStyleWord(true); descText.setToolTipText(options.getMsg("edit_seq_description_tooltip")); descText.setLineWrap(true); descText.setRows(2); descText.getDocument().addDocumentListener(this); scroll.setViewportView(descText); 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.NORTHWEST; mainPanel.add(scroll, gridBagConstraints); fwdPanel.setLayout(new java.awt.GridBagLayout()); fwdPanel.setBorder(new javax.swing.border.TitledBorder(options.getMsg("edit_seq_arrow_fwd"))); fwIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/next.gif"))); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2); fwdPanel.add(fwIcon, gridBagConstraints); fwdEnabledChk.setToolTipText(options.getMsg("edit_seq_button_enabled_tooltip")); fwdEnabledChk.setText(options.getMsg("edit_seq_button_enabled")); fwdEnabledChk.addActionListener(this); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2); fwdPanel.add(fwdEnabledChk, gridBagConstraints); fwdActionLb.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); fwdPanel.add(fwdActionLb, gridBagConstraints); fwdActionCombo.setToolTipText(options.getMsg("edit_seq_action_tooltip_fw")); fwdActionCombo.setRenderer(new edu.xtec.util.CustomListCellRenderer(fwdOptions, fwdIcons)); fwdActionCombo.addActionListener(this); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2); fwdPanel.add(fwdActionCombo, gridBagConstraints); fwdJumpBtn.setText("..."); fwdJumpBtn.setToolTipText(options.getMsg("edit_seq_jump_tooltip")); fwdJumpBtn.setMargin(new java.awt.Insets(0, 3, 0, 3)); fwdJumpBtn.setEnabled(false); fwdJumpBtn.addActionListener(this); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2); fwdPanel.add(fwdJumpBtn, gridBagConstraints); fwdJumpLb.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); fwdPanel.add(fwdJumpLb, gridBagConstraints); autoChk.setText(options.getMsg("edit_seq_auto")); autoChk.setToolTipText(options.getMsg("edit_seq_auto_tooltip")); autoChk.addActionListener(this); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2); fwdPanel.add(autoChk, gridBagConstraints); delayLabel.setText(options.getMsg("edit_seq_delay")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2); fwdPanel.add(delayLabel, gridBagConstraints); delayEditor.setToolTipText(options.getMsg("edit_seq_delay_tooltip")); delayEditor.setMax(999); delayEditor.setMin(1); delayEditor.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); fwdPanel.add(delayEditor, gridBagConstraints); condJumpPanel.setLayout(new java.awt.GridBagLayout()); condJumpPanel.setBorder(new javax.swing.border.TitledBorder(options.getMsg("edit_seq_condJump"))); condJumpPanel.setToolTipText(options.getMsg("edit_seq_condJump_tooltip")); upperLb.setLabelFor(upperBtn); upperLb.setText(options.getMsg("edit_seq_condJump_upper")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); condJumpPanel.add(upperLb, gridBagConstraints); upperBtn.setToolTipText(options.getMsg("edit_seq_condJump_upper_tooltip")); upperBtn.setText("<Not Set>"); upperBtn.addPropertyChangeListener(NullableObject.PROP_CUSTOM_OBJECT, this); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); condJumpPanel.add(upperBtn, gridBagConstraints); lowerLb.setLabelFor(lowerBtn); lowerLb.setText(options.getMsg("edit_seq_condJump_lower")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); condJumpPanel.add(lowerLb, gridBagConstraints); lowerBtn.setToolTipText(options.getMsg("edit_seq_condJump_lower_tooltip")); lowerBtn.setText("<Not Set>"); lowerBtn.addPropertyChangeListener(NullableObject.PROP_CUSTOM_OBJECT, this); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); condJumpPanel.add(lowerBtn, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); fwdPanel.add(condJumpPanel, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); mainPanel.add(fwdPanel, gridBagConstraints); backPanel.setLayout(new java.awt.GridBagLayout()); backPanel.setBorder(new javax.swing.border.TitledBorder(options.getMsg("edit_seq_arrow_back"))); bkIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/xtec/resources/icons/prev.gif"))); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2); backPanel.add(bkIcon, gridBagConstraints); backEnabledChk.setToolTipText(options.getMsg("edit_seq_button_enabled_tooltip")); backEnabledChk.setText(options.getMsg("edit_seq_button_enabled")); backEnabledChk.addActionListener(this); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2); backPanel.add(backEnabledChk, gridBagConstraints); backActionLb.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); backPanel.add(backActionLb, gridBagConstraints); backActionCombo.setToolTipText(options.getMsg("edit_seq_action_tooltip_bk")); backActionCombo.setRenderer(new edu.xtec.util.CustomListCellRenderer(backOptions, backIcons)); backActionCombo.addActionListener(this); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2); backPanel.add(backActionCombo, gridBagConstraints); backJumpBtn.setText("..."); backJumpBtn.setToolTipText(options.getMsg("edit_seq_jump_tooltip")); backJumpBtn.setMargin(new java.awt.Insets(0, 3, 0, 3)); backJumpBtn.setEnabled(false); backJumpBtn.addActionListener(this); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2); backPanel.add(backJumpBtn, gridBagConstraints); backJumpLb.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); backPanel.add(backJumpLb, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); mainPanel.add(backPanel, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; gridBagConstraints.weighty = 1.0; mainPanel.add(spacer, gridBagConstraints); add(mainPanel, java.awt.BorderLayout.WEST); }//GEN-END:initComponents public boolean checkIfEditorValid(Editor e) { return e instanceof ActivitySequenceElementEditor; } protected ActivitySequenceElement getActivitySequenceElement(){ if(editor==null) return null; else return ((ActivitySequenceElementEditor)editor).getActivitySequenceElement(); } protected int getRealDelayValue(){ return autoChk.isSelected() ? delayEditor.getValue() : 0; } protected int getBtnValue(){ boolean fw=fwdEnabledChk.isSelected(); boolean bk=backEnabledChk.isSelected(); return fw ? (bk ? ActivitySequenceElement.NAV_BOTH : ActivitySequenceElement.NAV_FWD) : (bk ? ActivitySequenceElement.NAV_BACK : ActivitySequenceElement.NAV_NONE); } protected void fillData() { ActivitySequenceElement ase=getActivitySequenceElement(); JClicProjectEditor jcpe = ase==null ? null : ((ActivitySequenceElementEditor)getEditor()).getProjectEditor(); if(jcpe!=null){ ListModel lm=jcpe.getActivityBagEditor().getListModel(); if(actModel==null || actModel.getListModel()!=lm){ actModel=new ListComboModel(lm); actCombo.setModel(actModel); } if(ase!=null) actCombo.setSelectedItem(jcpe.getActivityBagEditor().getChildByName(ase.getActivityName())); } else{ actModel=new ListComboModel(); actCombo.setModel(actModel); actCombo.setSelectedItem(null); } fwdEnabledChk.setSelected(ase==null ? true : (ase.navButtons & ActivitySequenceElement.NAV_FWD)!=0); fwdActionCombo.setSelectedIndex((ase==null || ase.fwdJump==null) ? 0 : ase.fwdJump.action+1); backEnabledChk.setSelected(ase==null ? true : (ase.navButtons & ActivitySequenceElement.NAV_BACK)!=0); backActionCombo.setSelectedIndex((ase==null || ase.backJump==null) ? 0 : ase.backJump.action+1); tagText.setText(StrUtils.secureString(ase==null ? null : ase.getTag())); descText.setText(StrUtils.secureString(ase==null ? null : ase.getDescription())); autoChk.setSelected(ase!=null && ase.delay>0); delayEditor.setValue(Math.max(1, ase==null ? 0 : ase.delay)); ((CondJumpBtn)upperBtn).setConditionalJumpInfo(ase==null || ase.fwdJump==null ? null : ase.fwdJump.upperJump); ((CondJumpBtn)lowerBtn).setConditionalJumpInfo(ase==null || ase.fwdJump==null ? null : ase.fwdJump.lowerJump); setJumpLabels(); checkEnabled(); repaint(); } @Override public boolean eventPerformed(EventObject ev){ Object src=(ev==null ? null : ev.getSource()); ActivitySequenceElement ase=getActivitySequenceElement(); if(src==null || ase==null) return false; if(src==tagCombo){ if(tagCombo.getSelectedIndex()>=0){ tagCombo.getEditor().setItem(tagCombo.getSelectedItem()); } return false; } else if(src==editActBtn && getEditor()!=null && actCombo.getSelectedItem()!=null){ JClicProjectEditor prjed=((ActivitySequenceElementEditor)getEditor()).getProjectEditor(); if(prjed!=null && prjed.getTestPlayerContainer()!=null){ prjed.getTestPlayerContainer().editActivity(actCombo.getSelectedItem().toString()); } return false; } else if(src==fwdActionCombo || src==fwdJumpBtn){ ase.fwdJump=(ActivitySequenceJump)checkJump(ase.fwdJump, fwdActionCombo, true, src==fwdJumpBtn); setJumpLabels(); } else if(src==backActionCombo || src==backJumpBtn){ ase.backJump=(ActivitySequenceJump)checkJump(ase.backJump, backActionCombo, true, src==backJumpBtn); setJumpLabels(); } checkEnabled(); repaint(); updateTable(); return true; } @Override public boolean documentChangePerformed(DocumentEvent documentEvent){ if(documentEvent!=null && documentEvent.getDocument().equals(tagText.getDocument())) updateTable(); return true; } private void updateTable(){ Container cnt=getAWTAncestor(ActivitySequenceEditorPanel.class); if(cnt!=null){ setInitializing(true); saveData(); int row=((ActivitySequenceEditorPanel)cnt).seqTable.getSelectionModel().getAnchorSelectionIndex(); ((ActivitySequenceEditorPanel)cnt).tableModel.fireTableDataChanged(); ((ActivitySequenceEditorPanel)cnt).seqTable.getSelectionModel().setSelectionInterval(row, row); setInitializing(false); } } protected JumpInfo checkJump(JumpInfo ji, JComboBox combo, boolean allowNull, boolean forcePrompt){ int offset = allowNull ? 1 : 0; int v=combo.getSelectedIndex(); if(v==0 && allowNull) ji=null; else{ if(ji==null) ji=new ActivitySequenceJump(v-offset); else ji.action=v-offset; if(ji.action==JumpInfo.JUMP && (forcePrompt || (ji.sequence==null && ji.projectPath==null))){ boolean b=promptJumpParams(ji, this); if(!b || (ji.sequence==null && ji.projectPath==null)){ if(allowNull) ji=null; else ji.action=JumpInfo.RETURN; setInitializing(true); combo.setSelectedIndex(ji==null ? 0 : ji.action+offset); setInitializing(false); } } } return ji; } @Override public final void setEnabled(boolean enabled){ super.setEnabled(enabled); actCombo.setEnabled(enabled); fwdEnabledChk.setEnabled(enabled); backEnabledChk.setEnabled(enabled); tagText.setEnabled(enabled); descText.setEnabled(enabled); autoChk.setEnabled(enabled); checkEnabled(); } public void checkEnabled(){ boolean e = isEnabled(); boolean fw = fwdEnabledChk.isSelected() || autoChk.isSelected(); boolean fwBtn = fw && fwdActionCombo.getSelectedIndex()==JumpInfo.JUMP+1; boolean fwCond = fw && fwdActionCombo.getSelectedIndex()>0; boolean bk = backEnabledChk.isSelected(); boolean bkBtn = bk && backActionCombo.getSelectedIndex()==JumpInfo.JUMP+1; fwdActionCombo.setEnabled(e && fw); fwdJumpBtn.setEnabled(e && fwBtn); delayEditor.setEnabled(e && autoChk.isSelected()); backActionCombo.setEnabled(e && bk); backJumpBtn.setEnabled(e && bkBtn); upperBtn.setEnabled(e && fwCond); lowerBtn.setEnabled(e && fwCond); } protected void saveData() { ActivitySequenceElement ase=getActivitySequenceElement(); ActivityBagElementEditor abed=(ActivityBagElementEditor)actCombo.getSelectedItem(); if(ase!=null && abed!=null){ ase.setActivityName(abed.toString()); String tag=StrUtils.nullableString(tagText.getText()); if(!StrUtils.compareObjects(tag, ase.getTag())){ ActivitySequenceEditor ased=(ActivitySequenceEditor)getEditor().getEditorParent(); if(ase.getTag()!=null && ased!=null && ased.tagList!=null) ased.tagList.removeElement(ased.getTag(ase.getTag())); ase.setTag(tag); if(tag!=null && ased!=null && ased.tagList!=null) ased.tagList.addElement(tag); } ase.setTag(StrUtils.nullableString(tagText.getText())); ase.setDescription(StrUtils.nullableString(descText.getText())); ase.navButtons=getBtnValue(); ase.delay=getRealDelayValue(); if(ase.fwdJump!=null){ ase.fwdJump.upperJump=((CondJumpBtn)upperBtn).getConditionalJumpInfo(); ase.fwdJump.lowerJump=((CondJumpBtn)lowerBtn).getConditionalJumpInfo(); } } } @Override protected Icon getIcon(){ return ActivitySequenceElementEditor.getIcon(); } @Override protected String getTitle(){ return "Activity sequence element"; //return options.getMsg("library_dlg_title"); } protected boolean promptJumpParams(JumpInfo ji, Component parent){ boolean result=false; ActivitySequenceElement ase=getActivitySequenceElement(); if(ase!=null){ JClicProjectEditor jcpe=((ActivitySequenceElementEditor)getEditor()).getProjectEditor(); if(jcpe!=null){ ListModel lm=jcpe.getActivitySequenceEditor().getTagList(); if(jmpTagModel==null || jmpTagModel.getListModel()!=lm) jmpTagModel=new ListComboModel(lm); tagCombo.setModel(jmpTagModel); tagCombo.setSelectedItem(ji.sequence); String tx = ji.projectPath; prjEdit.setText(tx==null ? "" : tx); result=options.getMessages().showInputDlg(parent , prompt_msg, prompt_keys, prompt_objects , "edit_seq_jump_title"); if(result){ ji.sequence=StrUtils.nullableString(tagCombo.getEditor().getItem()); ji.projectPath=StrUtils.nullableString(prjEdit.getText()); } } } return result; } private void setJumpLabels(){ StringBuilder sb=new StringBuilder(); ActivitySequenceElement ase=getActivitySequenceElement(); if(ase!=null && ase.fwdJump!=null){ if(ase.fwdJump.sequence!=null) sb.append(ase.fwdJump.sequence); if(ase.fwdJump.projectPath!=null) sb.append(" (").append(ase.fwdJump.projectPath).append(")"); } fwdJumpLb.setText(sb.append(' ').substring(0)); sb.setLength(0); if(ase!=null && ase.backJump!=null){ if(ase.backJump.sequence!=null) sb.append(ase.backJump.sequence); if(ase.backJump.projectPath!=null) sb.append(" (").append(ase.backJump.projectPath).append(")"); } backJumpLb.setText(sb.append(' ').substring(0)); } class CondJumpBtn extends NullableObject{ boolean upper; ConditionalJumpPanel cjp; CondJumpBtn(boolean upper){ super(); this.upper=upper; setOptions(ActivitySequenceElementEditorPanel.this.options); } ConditionalJumpInfo getConditionalJumpInfo(){ return (ConditionalJumpInfo)getObject(); } void setConditionalJumpInfo(ConditionalJumpInfo cji){ setObject(cji); checkIcon(); } @Override protected Object createObject(){ return new ConditionalJumpInfo(JumpInfo.RETURN, null, upper ? 80 : 20); } @Override protected Object editObject(Object o){ if(o==null) o=createObject(); ConditionalJumpInfo cji=(ConditionalJumpInfo)o; if(cjp==null){ cjp=new ConditionalJumpPanel(options, ActivitySequenceElementEditorPanel.this, upper); } cjp.setJumpInfo((ConditionalJumpInfo)o, upper); boolean b=options.getMessages().showInputDlg(this, cjp, "edit_seq_condJump_" + (upper ? "upper" : "lower")); return b ? cjp.getJumpInfo() : null; }; @Override public void changeObject(Object o){ super.changeObject(o); checkIcon(); } private void checkIcon(){ JumpInfo o=getConditionalJumpInfo(); if(o==null || fwdIcons==null) setIcon(null); else setIcon(fwdIcons[o.action+1]); repaint(); } } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JComboBox actCombo; private javax.swing.JCheckBox autoChk; private javax.swing.JComboBox backActionCombo; private javax.swing.JCheckBox backEnabledChk; private javax.swing.JButton backJumpBtn; private javax.swing.JLabel backJumpLb; private edu.xtec.jclic.beans.SmallIntEditor delayEditor; private javax.swing.JTextArea descText; private javax.swing.JButton editActBtn; private javax.swing.JComboBox fwdActionCombo; private javax.swing.JCheckBox fwdEnabledChk; private javax.swing.JButton fwdJumpBtn; private javax.swing.JLabel fwdJumpLb; private edu.xtec.jclic.beans.NullableObject lowerBtn; private javax.swing.JPanel mainPanel; private javax.swing.JScrollPane scroll; private javax.swing.JTextField tagText; private edu.xtec.jclic.beans.NullableObject upperBtn; // End of variables declaration//GEN-END:variables }