/* * Copyright (c) 2014 tabletoptool.com team. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * rptools.com team - initial implementation * tabletoptool.com team - further development */ package com.t3.client.ui; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JTextField; import com.jeta.forms.components.panel.FormPanel; import com.t3.client.TabletopTool; import com.t3.language.I18N; import com.t3.model.Token; import com.t3.model.Vision; import com.t3.model.Zone; import com.t3.model.vision.BlockyRoundVision; import com.t3.model.vision.FacingConicVision; import com.t3.model.vision.RoundVision; import com.t3.swing.SwingUtil; public class VisionDialog extends JDialog { private JTextField nameTextField; private JTextField distanceTextField; private JCheckBox enabledCheckBox; private JComboBox<Vision> typeCombo; public VisionDialog(Zone zone, Token token) { this(zone, token, null); } public VisionDialog(Zone zone, Token token, Vision vision) { super(TabletopTool.getFrame(), I18N.getText("VisionDialog.msg.title"), true); setDefaultCloseOperation(DISPOSE_ON_CLOSE); FormPanel panel = new FormPanel("com/t3/client/ui/forms/visionDialog.xml"); initNameTextField(panel, vision); initEnabledCheckBox(panel, vision); initDistanceTextField(panel, vision); initTypeCombo(panel, token, vision); initDeleteButton(panel, token, vision); initOKButton(panel, zone, token); initCancelButton(panel); setContentPane(panel); pack(); } @Override public void setVisible(boolean b) { if (b) { SwingUtil.centerOver(this, TabletopTool.getFrame()); } super.setVisible(b); } private void initNameTextField(FormPanel panel, Vision vision) { nameTextField = panel.getTextField("name"); nameTextField.setText(vision != null ? vision.getName() : ""); } private void initEnabledCheckBox(FormPanel panel, Vision vision) { enabledCheckBox = panel.getCheckBox("enabled"); enabledCheckBox.setSelected(vision == null || vision.isEnabled()); } private void initDistanceTextField(FormPanel panel, Vision vision) { distanceTextField = panel.getTextField("distance"); distanceTextField.setText(vision != null ? Integer.toString(vision.getDistance()) : ""); } private void initTypeCombo(FormPanel panel, Token token, Vision vision) { typeCombo = panel.getComboBox("typeCombo"); Vision[] list = null; if (vision != null) { list = new Vision[] { vision }; } else { list = new Vision[] { new RoundVision(), new FacingConicVision(), new BlockyRoundVision() }; } typeCombo.setModel(new DefaultComboBoxModel<Vision>(list)); typeCombo.setEnabled(vision == null); typeCombo.setSelectedIndex(0); } private void initOKButton(FormPanel panel, final Zone zone, final Token token) { JButton button = (JButton) panel.getButton("okButton"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (commit(zone, token)) { close(); } } }); getRootPane().setDefaultButton(button); } private void initDeleteButton(FormPanel panel, final Token token, final Vision vision) { JButton button = (JButton) panel.getButton("deleteButton"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // token.removeVision(vision); close(); } }); button.setEnabled(vision != null); } private void initCancelButton(FormPanel panel) { JButton button = (JButton) panel.getButton("cancelButton"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { close(); } }); } private boolean commit(Zone zone, Token token) { Vision vision = (Vision) typeCombo.getSelectedItem(); if (distanceTextField.getText().trim().length() == 0) { TabletopTool.showError("VisionDialog.error.EmptyDistance"); return false; } int distance = 0; try { distance = Integer.parseInt(distanceTextField.getText()); } catch (NumberFormatException nfex) { TabletopTool.showError("VisionDialog.error.numericDistanceOnly"); return false; } vision.setName(nameTextField.getText()); vision.setEnabled(enabledCheckBox.isSelected()); vision.setDistance(distance); // token.addVision(vision); TabletopTool.serverCommand().putToken(zone.getId(), token); return true; } private void close() { setVisible(false); } }