/*
* 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 java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.text.DecimalFormat;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JTextField;
import yasb.Binder;
import com.t3.client.AppPreferences;
import com.t3.client.TabletopTool;
import com.t3.client.swing.AbeillePanel;
import com.t3.client.swing.GenericDialog;
import com.t3.client.walker.WalkerMetric;
import com.t3.language.I18N;
import com.t3.util.StringUtil;
/**
* @author trevor
*/
public class StartServerDialog extends AbeillePanel<StartServerDialogPreferences> {
private boolean accepted;
private StartServerDialogPreferences prefs;
private GenericDialog dialog;
private JComboBox<WalkerMetric> movementMetricCombo;
private JCheckBox useIndividualFOW;
private JCheckBox useIndividualViews;
private JCheckBox autoRevealOnMovement;
private JCheckBox playersCanRevealVision;
public StartServerDialog() {
super("com/t3/client/ui/forms/startServerDialog.xml");
panelInit();
}
public boolean accepted() {
return accepted;
}
public void showDialog() {
dialog = new GenericDialog(I18N.getText("ServerDialog.msg.title"), TabletopTool.getFrame(), this);
prefs = new StartServerDialogPreferences();
bind(prefs);
useIndividualFOW = (JCheckBox) getComponent("@useIndividualFOW");
useIndividualViews = (JCheckBox) getComponent("@useIndividualViews");
autoRevealOnMovement = (JCheckBox) getComponent("@autoRevealOnMovement");
playersCanRevealVision = (JCheckBox) getComponent("@playersCanRevealVision");
useIndividualFOW.setEnabled(prefs.getUseIndividualViews());
useIndividualViews.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (!useIndividualViews.isSelected()) {
useIndividualFOW.setSelected(false);
useIndividualFOW.setEnabled(false);
} else {
useIndividualFOW.setEnabled(true);
}
}
});
autoRevealOnMovement.setEnabled(prefs.getPlayersCanRevealVision());
playersCanRevealVision.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (!playersCanRevealVision.isSelected()) {
autoRevealOnMovement.setSelected(false);
autoRevealOnMovement.setEnabled(false);
} else {
autoRevealOnMovement.setEnabled(true);
}
}
});
movementMetricCombo = getMovementMetric();
DefaultComboBoxModel<WalkerMetric> movementMetricModel = new DefaultComboBoxModel<WalkerMetric>();
movementMetricModel.addElement(WalkerMetric.ONE_TWO_ONE);
movementMetricModel.addElement(WalkerMetric.ONE_ONE_ONE);
movementMetricModel.addElement(WalkerMetric.MANHATTAN);
movementMetricModel.addElement(WalkerMetric.NO_DIAGONALS);
movementMetricModel.setSelectedItem(AppPreferences.getMovementMetric());
movementMetricCombo.setModel(movementMetricModel);
movementMetricCombo.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
prefs.setMovementMetric((WalkerMetric) movementMetricCombo.getSelectedItem());
}
});
getRootPane().setDefaultButton(getOKButton());
dialog.showDialog();
}
public JTextField getPortTextField() {
return (JTextField) getComponent("@port");
}
public JTextField getUsernameTextField() {
return (JTextField) getComponent("@username");
}
public JButton getOKButton() {
return (JButton) getComponent("okButton");
}
public JButton getCancelButton() {
return (JButton) getComponent("cancelButton");
}
public JComboBox getRoleCombo() {
return (JComboBox) getComponent("@role");
}
public JButton getNetworkingHelpButton() {
return (JButton) getComponent("networkingHelpButton");
}
public JCheckBox getUseUPnPCheckbox() {
return (JCheckBox) getComponent("@useUPnP");
}
public JCheckBox getUseTooltipForRolls() {
return (JCheckBox) getComponent("@useToolTipsForUnformattedRolls");
}
public JComboBox<WalkerMetric> getMovementMetric() {
return (JComboBox<WalkerMetric>) getComponent("movementMetric");
}
@Override
protected void preModelBind() {
Binder.setFormat(getPortTextField(), new DecimalFormat("####"));
}
public void initOKButton() {
getOKButton().addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
if (getPortTextField().getText().length() == 0) {
TabletopTool.showError("ServerDialog.error.port");
return;
}
try {
Integer.parseInt(getPortTextField().getText());
} catch (NumberFormatException nfe) {
TabletopTool.showError("ServerDialog.error.port");
return;
}
if (StringUtil.isEmpty(getUsernameTextField().getText())) {
TabletopTool.showError("ServerDialog.error.username");
return;
}
if (commit()) {
prefs.setMovementMetric((WalkerMetric) movementMetricCombo.getSelectedItem());
prefs.setAutoRevealOnMovement(autoRevealOnMovement.isSelected());
accepted = true;
dialog.closeDialog();
}
}
});
}
public void initCancelButton() {
getCancelButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
accepted = false;
dialog.closeDialog();
}
});
}
public void initTestConnectionButton() {
getNetworkingHelpButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// We don't have a good, server-side way of testing any more.
boolean ok;
ok = TabletopTool.confirm("msg.info.server.networkingHelp");
if (ok)
TabletopTool.showDocument(I18N.getString("msg.info.server.forumNFAQ_URL"));
}
});
}
}