/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package robotinterface.drawable.swing.component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Collection; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JSpinner; import javax.swing.JTextField; import javax.swing.SpinnerNumberModel; import javax.swing.SwingUtilities; import robotinterface.algorithm.parser.parameterparser.Argument; import robotinterface.algorithm.procedure.Procedure; import robotinterface.drawable.swing.MutableWidgetContainer; /** * * @author antunes2 */ public abstract class WidgetLine extends Component { private boolean onPageEnd = false; @Deprecated public WidgetLine(int i) { } @Deprecated public WidgetLine(int i, int j) { } public WidgetLine() { } public WidgetLine(boolean onPageEnd) { this.onPageEnd = onPageEnd; } public boolean isOnPageEnd() { return onPageEnd; } public abstract void createRow(Collection<Component> components, MutableWidgetContainer container, int index); public void toString(StringBuilder sb, ArrayList<Argument> arguments, MutableWidgetContainer container) { } // protected Widget[] createGenericField(Procedure p, Argument arg, String fieldName, int fieldWidth, int fieldHeight, Collection<Component> components, final MutableWidgetContainer container) { // //cria componentes swing // JSpinner spinner = new JSpinner(); // JComboBox combobox = new JComboBox(); // JTextField textfield = new JTextField(); // final JButton changeButton = new JButton(); // // //habilita o foco // spinner.setFocusable(true); // combobox.setFocusable(true); // textfield.setFocusable(true); // // //define comportamento durante o foco e adiciona valores // spinner.setModel(new SpinnerNumberModel(0, -360, 360, 2)); // MutableWidgetContainer.autoUpdateValue(spinner); // MutableWidgetContainer.setAutoFillComboBox(combobox, p); // // //cria widgets e define seus respectivos tamanhos // final Widget wspinner = new Widget(spinner, fieldWidth, fieldHeight); // final Widget wcombobox = new Widget(combobox, fieldWidth, fieldHeight); // final Widget wtextfield = new Widget(textfield, fieldWidth, fieldHeight); // // //aciona a atualização e seleção automática dos componentes de acordo // //com o tipo de argumento // final Widget chosen = container.entangle(arg, wspinner, wcombobox, wtextfield); // // //obtem o foco para o widget selecionado // SwingUtilities.invokeLater(new Runnable() { // @Override // public void run() { // chosen.getJComponent().requestFocus(); // } // }); // // //adiciona widgets criados // components.add(new TextLabel(fieldName)); // components.add(wspinner); // components.add(wcombobox); // components.add(wtextfield); // components.add(new Widget(changeButton, fieldHeight, fieldHeight)); // // //define o icone e comportamento do botão // final ImageIcon iconcb = new ImageIcon(getClass().getResource("/resources/fugue/ui-combo-box.png")); // final ImageIcon iconsp = new ImageIcon(getClass().getResource("/resources/fugue/ui-spin.png")); // final ImageIcon icontf = new ImageIcon(getClass().getResource("/resources/fugue/ui-text-field.png")); // // if (container.contains(wspinner)) { // changeButton.setIcon(iconcb); // changeButton.setToolTipText("Selecionar variável"); // } else if (container.contains(wcombobox)) { // changeButton.setIcon(icontf); // changeButton.setToolTipText("Edição livre"); // } else { // changeButton.setIcon(iconsp); // changeButton.setToolTipText("Selecionar valor"); // } // // ActionListener actionListener = new ActionListener() { // @Override // public void actionPerformed(ActionEvent e) { // if (container.contains(wspinner)) { // container.removeWidget(wspinner); // container.addWidget(wcombobox); // wcombobox.getJComponent().requestFocusInWindow(); // changeButton.setIcon(icontf); // changeButton.setToolTipText("Edição livre"); // } else if (container.contains(wcombobox)) { // container.removeWidget(wcombobox); // container.addWidget(wtextfield); // wtextfield.getJComponent().requestFocusInWindow(); // changeButton.setIcon(iconsp); // changeButton.setToolTipText("Selecionar valor"); // } else { // container.removeWidget(wtextfield); // container.addWidget(wspinner); // wspinner.getJComponent().requestFocusInWindow(); // changeButton.setIcon(iconcb); // changeButton.setToolTipText("Selecionar variável"); // } // } // }; // // changeButton.addActionListener(actionListener); //// actionListener.actionPerformed(null); // // return new Widget[]{wspinner, wcombobox, wtextfield}; // } public static final int ARG_SPINNER = 1; public static final int ARG_COMBOBOX = 2; public static final int ARG_TEXTFIELD = 4; public static final int DEFAULT = ARG_SPINNER | ARG_COMBOBOX | ARG_TEXTFIELD; protected Widget[] createGenericField(Procedure p, Argument arg, String fieldName, int fieldWidth, int fieldHeight, Collection<Component> components, final MutableWidgetContainer container) { return createGenericField(p, arg, fieldName, fieldWidth, fieldHeight, components, container, DEFAULT, true); } protected Widget[] createGenericField(Procedure p, Argument arg, String fieldName, int fieldWidth, int fieldHeight, Collection<Component> components, final MutableWidgetContainer container, boolean autoFocus) { return createGenericField(p, arg, fieldName, fieldWidth, fieldHeight, components, container, DEFAULT, autoFocus); } protected Widget[] createGenericField(Procedure p, Argument arg, String fieldName, int fieldWidth, int fieldHeight, Collection<Component> components, final MutableWidgetContainer container, int type) { return createGenericField(p, arg, fieldName, fieldWidth, fieldHeight, components, container, type, true); } protected Widget[] createGenericField(Procedure p, Argument arg, String fieldName, int fieldWidth, int fieldHeight, Collection<Component> components, final MutableWidgetContainer container, int type, boolean autoFocus) { final ArrayList<Widget> ws = new ArrayList<>(); final ArrayList<Object[]> infos = new ArrayList<>(); components.add(new TextLabel(fieldName)); if ((type & ARG_SPINNER) != 0) { JSpinner spinner = new JSpinner(); spinner.setModel(new SpinnerNumberModel(0, Integer.MIN_VALUE, Integer.MAX_VALUE, 1)); spinner.setFocusable(true); MutableWidgetContainer.autoUpdateValue(spinner); Widget wspinner = new Widget(spinner, fieldWidth, fieldHeight); components.add(wspinner); ws.add(wspinner); ImageIcon icon = new ImageIcon(getClass().getResource("/resources/fugue/ui-spin.png")); infos.add(new Object[]{"Selecionar valor", icon, wspinner}); } if ((type & ARG_COMBOBOX) != 0) { JComboBox combobox = new JComboBox(); combobox.setFocusable(true); MutableWidgetContainer.setAutoFillComboBox(combobox, p); Widget wcombobox = new Widget(combobox, fieldWidth, fieldHeight); components.add(wcombobox); ws.add(wcombobox); ImageIcon icon = new ImageIcon(getClass().getResource("/resources/fugue/ui-combo-box.png")); infos.add(new Object[]{"Selecionar variável", icon, wcombobox}); } if ((type & ARG_TEXTFIELD) != 0) { JTextField textfield = new JTextField(); textfield.setFocusable(true); Widget wtextfield = new Widget(textfield, fieldWidth, fieldHeight); components.add(wtextfield); ws.add(wtextfield); ImageIcon icon = new ImageIcon(getClass().getResource("/resources/fugue/ui-text-field.png")); infos.add(new Object[]{"Edição livre", icon, wtextfield}); } Widget[] aws = new Widget[]{}; aws = ws.toArray(aws); final Widget chosen = container.entangle(arg, aws); if (autoFocus) { //obtem o foco para o widget selecionado SwingUtilities.invokeLater(new Runnable() { @Override public void run() { chosen.getJComponent().requestFocus(); } }); } if (infos.size() > 1) { final JButton changeButton = new JButton(); components.add(new Widget(changeButton, fieldHeight, fieldHeight)); for (int i = 0; i < infos.size(); i++) { if (container.contains(ws.get(i))) { int next = (i + 1 >= infos.size()) ? 0 : i + 1; Object[] info = infos.get(next); changeButton.setToolTipText((String) info[0]); changeButton.setIcon((ImageIcon) info[1]); break; } } ActionListener actionListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for (int i = 0; i < infos.size(); i++) { if (container.contains(ws.get(i))) { container.removeWidget(ws.get(i)); int next = (i + 1 >= infos.size()) ? 0 : i + 1; Object[] info = infos.get(next); changeButton.setToolTipText((String) info[0]); changeButton.setIcon((ImageIcon) info[1]); container.addWidget((Widget) info[2]); ((Widget) info[2]).getJComponent().requestFocusInWindow(); break; } } } }; changeButton.addActionListener(actionListener); } return aws; } }