/*
* 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.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.text.ParseException;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import javax.swing.ToolTipManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import com.jeta.forms.components.colors.JETAColorWell;
import com.jeta.forms.components.panel.FormPanel;
import com.t3.client.AppPreferences;
import com.t3.client.TabletopTool;
import com.t3.client.walker.WalkerMetric;
import com.t3.model.Token;
import com.t3.model.Zone;
import com.t3.model.grid.Grid;
import com.t3.model.grid.GridFactory;
import com.t3.swing.SwingUtil;
import com.t3.util.StringUtil;
public class PreferencesDialog extends JDialog {
/**
* @author frank
*
*/
private abstract class DocumentListenerProxy implements DocumentListener {
JTextField comp;
public DocumentListenerProxy(JTextField tf) {
comp = tf;
}
@Override
public void changedUpdate(DocumentEvent e) {
updateValue();
}
@Override
public void insertUpdate(DocumentEvent e) {
updateValue();
}
@Override
public void removeUpdate(DocumentEvent e) {
updateValue();
}
protected void updateValue() {
try {
int value = StringUtil.parseInteger(comp.getText()); // Localized
storeNumericValue(value);
} catch (ParseException nfe) {
// Ignore it
}
}
protected abstract void storeNumericValue(int value);
}
/**
* @author frank
*/
private abstract class ChangeListenerProxy implements ChangeListener {
@Override
public void stateChanged(ChangeEvent ce) {
JSpinner sp = (JSpinner) ce.getSource();
int value = (Integer) sp.getValue();
storeSpinnerValue(value);
}
protected abstract void storeSpinnerValue(int value);
}
// Interactions
private final JCheckBox newMapsHaveFOWCheckBox;
private final JCheckBox tokensPopupWarningWhenDeletedCheckBox;
private final JCheckBox tokensStartSnapToGridCheckBox;
private final JCheckBox newMapsVisibleCheckBox;
private final JCheckBox newTokensVisibleCheckBox;
private final JCheckBox tokensStartFreeSizeCheckBox;
private final JCheckBox stampsStartSnapToGridCheckBox;
private final JCheckBox stampsStartFreeSizeCheckBox;
private final JCheckBox backgroundsStartSnapToGridCheckBox;
private final JCheckBox backgroundsStartFreeSizeCheckBox;
private final JComboBox<String> duplicateTokenCombo;
private final JComboBox<String> tokenNamingCombo;
private final JComboBox<String> showNumberingCombo;
private final JComboBox<WalkerMetric> movementMetricCombo;
private final JCheckBox showStatSheetCheckBox;
private final JSpinner haloLineWidthSpinner;
private final JSpinner haloOverlayOpacitySpinner;
private final JSpinner auraOverlayOpacitySpinner;
private final JSpinner lightOverlayOpacitySpinner;
private final JSpinner fogOverlayOpacitySpinner;
private final JCheckBox useHaloColorAsVisionOverlayCheckBox;
private final JCheckBox autoRevealVisionOnGMMoveCheckBox;
private final JCheckBox showSmiliesCheckBox;
private final JCheckBox playSystemSoundCheckBox;
private final JCheckBox playSystemSoundOnlyWhenNotFocusedCheckBox;
private final JCheckBox facingFaceEdges;
private final JCheckBox facingFaceVertices;
private final JCheckBox showAvatarInChat;
private final JCheckBox allowPlayerMacroEditsDefault;
private final JCheckBox toolTipInlineRolls;
private final JCheckBox suppressToolTipsMacroLinks;
private final JETAColorWell trustedOuputForeground;
private final JETAColorWell trustedOuputBackground;
private final JSpinner chatAutosaveTime;
private final JTextField chatFilenameFormat;
private final JSpinner typingNotificationDuration;
// Chat Notification
private final JETAColorWell chatNotificationColor;
private final JCheckBox chatNotificationShowBackground;
// Defaults
private final JComboBox<String> defaultGridTypeCombo;
private final JTextField defaultGridSizeTextField;
private final JTextField defaultUnitsPerCellTextField;
private final JTextField defaultVisionDistanceTextField;
private final JTextField statsheetPortraitSize;
private final JSpinner autoSaveSpinner;
private final JCheckBox saveReminderCheckBox;
private final JCheckBox showDialogOnNewToken;
// Accessibility
private final JTextField fontSizeTextField;
private final JTextField toolTipInitialDelay;
private final JTextField toolTipDismissDelay;
//Application
private final JCheckBox fitGMView;
private final JCheckBox fillSelectionCheckBox;
private final JCheckBox hideNPCs;
private final JCheckBox ownerPermissions;
private final JCheckBox lockMovement;
private final JCheckBox showInitGainMessage;
public PreferencesDialog() {
super(TabletopTool.getFrame(), "Preferences", true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
((JPanel) getContentPane()).setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
FormPanel panel = new FormPanel("com/t3/client/ui/forms/preferencesDialog.xml");
JButton okButton = (JButton) panel.getButton("okButton");
getRootPane().setDefaultButton(okButton);
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
setVisible(false);
dispose();
TabletopTool.getEventDispatcher().fireEvent(TabletopTool.PreferencesEvent.Changed);
}
});
showStatSheetCheckBox = panel.getCheckBox("showStatSheet");
showNumberingCombo = panel.getComboBox("showNumberingCombo");
saveReminderCheckBox = panel.getCheckBox("saveReminderCheckBox");
fillSelectionCheckBox = panel.getCheckBox("fillSelectionCheckBox");
autoSaveSpinner = panel.getSpinner("autoSaveSpinner");
duplicateTokenCombo = panel.getComboBox("duplicateTokenCombo");
tokenNamingCombo = panel.getComboBox("tokenNamingCombo");
newMapsHaveFOWCheckBox = panel.getCheckBox("newMapsHaveFOWCheckBox");
tokensPopupWarningWhenDeletedCheckBox = panel.getCheckBox("tokensPopupWarningWhenDeletedCheckBox");//new JCheckBox();//panel.getCheckBox("testCheckBox");
tokensStartSnapToGridCheckBox = panel.getCheckBox("tokensStartSnapToGridCheckBox");
newMapsVisibleCheckBox = panel.getCheckBox("newMapsVisibleCheckBox");
newTokensVisibleCheckBox = panel.getCheckBox("newTokensVisibleCheckBox");
stampsStartFreeSizeCheckBox = panel.getCheckBox("stampsStartFreeSize");
tokensStartFreeSizeCheckBox = panel.getCheckBox("tokensStartFreeSize");
stampsStartSnapToGridCheckBox = panel.getCheckBox("stampsStartSnapToGrid");
backgroundsStartFreeSizeCheckBox = panel.getCheckBox("backgroundsStartFreeSize");
backgroundsStartSnapToGridCheckBox = panel.getCheckBox("backgroundsStartSnapToGrid");
defaultGridTypeCombo = panel.getComboBox("defaultGridTypeCombo");
defaultGridSizeTextField = panel.getTextField("defaultGridSize");
defaultUnitsPerCellTextField = panel.getTextField("defaultUnitsPerCell");
defaultVisionDistanceTextField = panel.getTextField("defaultVisionDistance");
statsheetPortraitSize = panel.getTextField("statsheetPortraitSize");
fontSizeTextField = panel.getTextField("fontSize");
haloLineWidthSpinner = panel.getSpinner("haloLineWidthSpinner");
haloOverlayOpacitySpinner = panel.getSpinner("haloOverlayOpacitySpinner");
auraOverlayOpacitySpinner = panel.getSpinner("auraOverlayOpacitySpinner");
lightOverlayOpacitySpinner = panel.getSpinner("lightOverlayOpacitySpinner");
fogOverlayOpacitySpinner = panel.getSpinner("fogOverlayOpacitySpinner");
useHaloColorAsVisionOverlayCheckBox = panel.getCheckBox("useHaloColorAsVisionOverlayCheckBox");
autoRevealVisionOnGMMoveCheckBox = panel.getCheckBox("autoRevealVisionOnGMMoveCheckBox");
showSmiliesCheckBox = panel.getCheckBox("showSmiliesCheckBox");
playSystemSoundCheckBox = panel.getCheckBox("playSystemSounds");
playSystemSoundOnlyWhenNotFocusedCheckBox = panel.getCheckBox("soundsOnlyWhenNotFocused");
showAvatarInChat = panel.getCheckBox("showChatAvatar");
showDialogOnNewToken = panel.getCheckBox("showDialogOnNewToken");
movementMetricCombo = panel.getComboBox("movementMetric");
allowPlayerMacroEditsDefault = panel.getCheckBox("allowPlayerMacroEditsDefault");
toolTipInlineRolls = panel.getCheckBox("toolTipInlineRolls");
suppressToolTipsMacroLinks = panel.getCheckBox("suppressToolTipsMacroLinks");
trustedOuputForeground = (JETAColorWell) panel.getComponentByName("trustedOuputForeground");
trustedOuputBackground = (JETAColorWell) panel.getComponentByName("trustedOuputBackground");
toolTipInitialDelay = panel.getTextField("toolTipInitialDelay");
toolTipDismissDelay = panel.getTextField("toolTipDismissDelay");
facingFaceEdges = panel.getCheckBox("facingFaceEdges");
facingFaceVertices = panel.getCheckBox("facingFaceVertices");
chatNotificationColor = (JETAColorWell) panel.getComponentByName("chatNotificationColor");
chatNotificationShowBackground = panel.getCheckBox("chatNotificationShowBackground");
chatAutosaveTime = panel.getSpinner("chatAutosaveTime");
chatFilenameFormat = panel.getTextField("chatFilenameFormat");
fitGMView = panel.getCheckBox("fitGMView");
hideNPCs = panel.getCheckBox("hideNPCs");
ownerPermissions = panel.getCheckBox("ownerPermission");
lockMovement = panel.getCheckBox("lockMovement");
showInitGainMessage = panel.getCheckBox("showInitGainMessage");
typingNotificationDuration = panel.getSpinner("typingNotificationDuration");
setInitialState();
// And keep it updated
facingFaceEdges.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setFaceEdge(facingFaceEdges.isSelected());
updateFacings();
}
});
facingFaceVertices.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setFaceVertex(facingFaceVertices.isSelected());
updateFacings();
}
});
toolTipInlineRolls.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setUseToolTipForInlineRoll(toolTipInlineRolls.isSelected());
}
});
suppressToolTipsMacroLinks.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setSuppressToolTipsForMacroLinks(suppressToolTipsMacroLinks.isSelected());
}
});
toolTipInitialDelay.getDocument().addDocumentListener(new DocumentListenerProxy(toolTipInitialDelay) {
@Override
protected void storeNumericValue(int value) {
AppPreferences.setToolTipInitialDelay(value);
ToolTipManager.sharedInstance().setInitialDelay(value);
}
});
toolTipDismissDelay.getDocument().addDocumentListener(new DocumentListenerProxy(toolTipDismissDelay) {
@Override
protected void storeNumericValue(int value) {
AppPreferences.setToolTipDismissDelay(value);
ToolTipManager.sharedInstance().setDismissDelay(value);
}
});
chatNotificationColor.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setChatNotificationColor(chatNotificationColor.getColor());
TabletopTool.getFrame().setChatTypingLabelColor(AppPreferences.getChatNotificationColor());
}
});
trustedOuputForeground.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setTrustedPrefixFG(trustedOuputForeground.getColor());
TabletopTool.getFrame().getCommandPanel().setTrustedMacroPrefixColors(AppPreferences.getTrustedPrefixFG(), AppPreferences.getTrustedPrefixBG());
}
});
trustedOuputBackground.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setTrustedPrefixBG(trustedOuputBackground.getColor());
TabletopTool.getFrame().getCommandPanel().setTrustedMacroPrefixColors(AppPreferences.getTrustedPrefixFG(), AppPreferences.getTrustedPrefixBG());
}
});
chatAutosaveTime.addChangeListener(new ChangeListenerProxy() {
@Override
protected void storeSpinnerValue(int value) {
AppPreferences.setChatAutosaveTime(value);
}
});
typingNotificationDuration.addChangeListener(new ChangeListenerProxy() {
@Override
protected void storeSpinnerValue(int value) {
AppPreferences.setTypingNotificationDuration(value);
}
});
chatFilenameFormat.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
if (!e.isTemporary()) {
StringBuffer saveFile = new StringBuffer(chatFilenameFormat.getText());
if (saveFile.indexOf(".") < 0) {
saveFile.append(".html");
}
AppPreferences.setChatFilenameFormat(saveFile.toString());
}
}
});
allowPlayerMacroEditsDefault.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setAllowPlayerMacroEditsDefault(allowPlayerMacroEditsDefault.isSelected());
}
});
showAvatarInChat.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setShowAvatarInChat(showAvatarInChat.isSelected());
}
});
saveReminderCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setSaveReminder(saveReminderCheckBox.isSelected());
}
});
fillSelectionCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setFillSelectionBox(fillSelectionCheckBox.isSelected());
}
});
showDialogOnNewToken.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setShowDialogOnNewToken(showDialogOnNewToken.isSelected());
}
});
autoSaveSpinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent ce) {
int newInterval = (Integer) autoSaveSpinner.getValue();
AppPreferences.setAutoSaveIncrement(newInterval);
TabletopTool.getAutoSaveManager().restart();
}
});
newMapsHaveFOWCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setNewMapsHaveFOW(newMapsHaveFOWCheckBox.isSelected());
}
});
tokensPopupWarningWhenDeletedCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setTokensWarnWhenDeleted(tokensPopupWarningWhenDeletedCheckBox.isSelected());
}
});
tokensStartSnapToGridCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setTokensStartSnapToGrid(tokensStartSnapToGridCheckBox.isSelected());
}
});
newMapsVisibleCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setNewMapsVisible(newMapsVisibleCheckBox.isSelected());
}
});
newTokensVisibleCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setNewTokensVisible(newTokensVisibleCheckBox.isSelected());
}
});
stampsStartFreeSizeCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setObjectsStartFreesize(stampsStartFreeSizeCheckBox.isSelected());
}
});
tokensStartFreeSizeCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setTokensStartFreesize(tokensStartFreeSizeCheckBox.isSelected());
}
});
stampsStartSnapToGridCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setObjectsStartSnapToGrid(stampsStartSnapToGridCheckBox.isSelected());
}
});
showStatSheetCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setShowStatSheet(showStatSheetCheckBox.isSelected());
}
});
backgroundsStartFreeSizeCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setBackgroundsStartFreesize(backgroundsStartFreeSizeCheckBox.isSelected());
}
});
backgroundsStartSnapToGridCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setBackgroundsStartSnapToGrid(backgroundsStartSnapToGridCheckBox.isSelected());
}
});
defaultGridSizeTextField.getDocument().addDocumentListener(new DocumentListenerProxy(defaultGridSizeTextField) {
@Override
protected void storeNumericValue(int value) {
AppPreferences.setDefaultGridSize(value);
}
});
defaultUnitsPerCellTextField.getDocument().addDocumentListener(new DocumentListenerProxy(defaultUnitsPerCellTextField) {
@Override
protected void storeNumericValue(int value) {
AppPreferences.setDefaultUnitsPerCell(value);
}
});
defaultVisionDistanceTextField.getDocument().addDocumentListener(new DocumentListenerProxy(defaultVisionDistanceTextField) {
@Override
protected void storeNumericValue(int value) {
AppPreferences.setDefaultVisionDistance(value);
}
});
statsheetPortraitSize.getDocument().addDocumentListener(new DocumentListenerProxy(statsheetPortraitSize) {
@Override
protected void storeNumericValue(int value) {
AppPreferences.setPortraitSize(value);
}
});
haloLineWidthSpinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent ce) {
AppPreferences.setHaloLineWidth((Integer) haloLineWidthSpinner.getValue());
}
});
// Overlay opacity options in AppPreferences, with
// error checking to ensure values are within the acceptable range
// of 0 and 255.
haloOverlayOpacitySpinner.addChangeListener(new ChangeListenerProxy() {
@Override
protected void storeSpinnerValue(int value) {
AppPreferences.setHaloOverlayOpacity(value);
TabletopTool.getFrame().refresh();
}
});
auraOverlayOpacitySpinner.addChangeListener(new ChangeListenerProxy() {
@Override
protected void storeSpinnerValue(int value) {
AppPreferences.setAuraOverlayOpacity(value);
TabletopTool.getFrame().refresh();
}
});
lightOverlayOpacitySpinner.addChangeListener(new ChangeListenerProxy() {
@Override
protected void storeSpinnerValue(int value) {
AppPreferences.setLightOverlayOpacity(value);
TabletopTool.getFrame().refresh();
}
});
fogOverlayOpacitySpinner.addChangeListener(new ChangeListenerProxy() {
@Override
protected void storeSpinnerValue(int value) {
AppPreferences.setFogOverlayOpacity(value);
TabletopTool.getFrame().refresh();
}
});
useHaloColorAsVisionOverlayCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setUseHaloColorOnVisionOverlay(useHaloColorAsVisionOverlayCheckBox.isSelected());
}
});
autoRevealVisionOnGMMoveCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setAutoRevealVisionOnGMMovement(autoRevealVisionOnGMMoveCheckBox.isSelected());
}
});
showSmiliesCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setShowSmilies(showSmiliesCheckBox.isSelected());
}
});
playSystemSoundCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setPlaySystemSounds(playSystemSoundCheckBox.isSelected());
}
});
playSystemSoundOnlyWhenNotFocusedCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setPlaySystemSoundsOnlyWhenNotFocused(playSystemSoundOnlyWhenNotFocusedCheckBox.isSelected());
}
});
fontSizeTextField.getDocument().addDocumentListener(new DocumentListenerProxy(fontSizeTextField) {
@Override
protected void storeNumericValue(int value) {
AppPreferences.setFontSize(value);
}
});
fitGMView.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setFitGMView(fitGMView.isSelected());
}
});
hideNPCs.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setInitHideNpcs(hideNPCs.isSelected());
}
});
ownerPermissions.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setInitOwnerPermissions(ownerPermissions.isSelected());
}
});
lockMovement.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setInitLockMovement(lockMovement.isSelected());
}
});
showInitGainMessage.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setShowInitGainMessage(showInitGainMessage.isSelected());
}
});
chatNotificationShowBackground.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppPreferences.setChatNotificationShowBackground(chatNotificationShowBackground.isSelected());
}
});
DefaultComboBoxModel<String> gridTypeModel = new DefaultComboBoxModel<String>();
gridTypeModel.addElement(GridFactory.SQUARE);
gridTypeModel.addElement(GridFactory.HEX_HORI);
gridTypeModel.addElement(GridFactory.HEX_VERT);
gridTypeModel.setSelectedItem(AppPreferences.getDefaultGridType());
defaultGridTypeCombo.setModel(gridTypeModel);
defaultGridTypeCombo.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
AppPreferences.setDefaultGridType((String) defaultGridTypeCombo.getSelectedItem());
}
});
DefaultComboBoxModel<String> tokenNumModel = new DefaultComboBoxModel<String>();
tokenNumModel.addElement(Token.NUM_INCREMENT);
tokenNumModel.addElement(Token.NUM_RANDOM);
tokenNumModel.setSelectedItem(AppPreferences.getDuplicateTokenNumber());
duplicateTokenCombo.setModel(tokenNumModel);
duplicateTokenCombo.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
AppPreferences.setDuplicateTokenNumber((String) duplicateTokenCombo.getSelectedItem());
}
});
DefaultComboBoxModel<String> tokenNameModel = new DefaultComboBoxModel<String>();
tokenNameModel.addElement(Token.NAME_USE_FILENAME);
tokenNameModel.addElement(Token.NAME_USE_CREATURE);
tokenNameModel.setSelectedItem(AppPreferences.getNewTokenNaming());
tokenNamingCombo.setModel(tokenNameModel);
tokenNamingCombo.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
AppPreferences.setNewTokenNaming((String) tokenNamingCombo.getSelectedItem());
}
});
DefaultComboBoxModel<String> showNumModel = new DefaultComboBoxModel<String>();
showNumModel.addElement(Token.NUM_ON_NAME);
showNumModel.addElement(Token.NUM_ON_GM);
showNumModel.addElement(Token.NUM_ON_BOTH);
showNumModel.setSelectedItem(AppPreferences.getTokenNumberDisplay());
showNumberingCombo.setModel(showNumModel);
showNumberingCombo.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
AppPreferences.setTokenNumberDisplay((String) showNumberingCombo.getSelectedItem());
}
});
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) {
AppPreferences.setMovementMetric((WalkerMetric) movementMetricCombo.getSelectedItem());
}
});
//showInitGainMessage
add(panel);
pack();
}
@Override
public void setVisible(boolean b) {
if (b) {
SwingUtil.centerOver(this, TabletopTool.getFrame());
}
super.setVisible(b);
}
/**
* Used by the ActionListeners of the facing checkboxes to update the facings for all of the current zones.
* Redundant to go through all zones because all zones using the same grid type share facings but it doesn't hurt
* anything and avoids having to track what grid types are being used.
*/
private void updateFacings() {
// List<Zone> zlist = TabletopTool.getServer().getCampaign().getZones(); // generated NPE http://forums.rptools.net/viewtopic.php?f=3&t=17334
List<Zone> zlist = TabletopTool.getCampaign().getZones();
boolean faceEdges = AppPreferences.getFaceEdge();
boolean faceVertices = AppPreferences.getFaceVertex();
for (Zone z : zlist) {
Grid g = z.getGrid();
g.setFacings(faceEdges, faceVertices);
}
}
private void setInitialState() {
showDialogOnNewToken.setSelected(AppPreferences.getShowDialogOnNewToken());
saveReminderCheckBox.setSelected(AppPreferences.getSaveReminder());
fillSelectionCheckBox.setSelected(AppPreferences.getFillSelectionBox());
autoSaveSpinner.setValue(AppPreferences.getAutoSaveIncrement());
newMapsHaveFOWCheckBox.setSelected(AppPreferences.getNewMapsHaveFOW());
tokensPopupWarningWhenDeletedCheckBox.setSelected(AppPreferences.getTokensWarnWhenDeleted());
tokensStartSnapToGridCheckBox.setSelected(AppPreferences.getTokensStartSnapToGrid());
newMapsVisibleCheckBox.setSelected(AppPreferences.getNewMapsVisible());
newTokensVisibleCheckBox.setSelected(AppPreferences.getNewTokensVisible());
stampsStartFreeSizeCheckBox.setSelected(AppPreferences.getObjectsStartFreesize());
tokensStartFreeSizeCheckBox.setSelected(AppPreferences.getTokensStartFreesize());
stampsStartSnapToGridCheckBox.setSelected(AppPreferences.getObjectsStartSnapToGrid());
backgroundsStartFreeSizeCheckBox.setSelected(AppPreferences.getBackgroundsStartFreesize());
showStatSheetCheckBox.setSelected(AppPreferences.getShowStatSheet());
backgroundsStartSnapToGridCheckBox.setSelected(AppPreferences.getBackgroundsStartSnapToGrid());
defaultGridSizeTextField.setText(Integer.toString(AppPreferences.getDefaultGridSize()));
defaultUnitsPerCellTextField.setText(Integer.toString(AppPreferences.getDefaultUnitsPerCell()));
defaultVisionDistanceTextField.setText(Integer.toString(AppPreferences.getDefaultVisionDistance()));
statsheetPortraitSize.setText(Integer.toString(AppPreferences.getPortraitSize()));
fontSizeTextField.setText(Integer.toString(AppPreferences.getFontSize()));
haloLineWidthSpinner.setValue(AppPreferences.getHaloLineWidth());
haloOverlayOpacitySpinner.setModel(new SpinnerNumberModel(AppPreferences.getHaloOverlayOpacity(), 0, 255, 1));
auraOverlayOpacitySpinner.setModel(new SpinnerNumberModel(AppPreferences.getAuraOverlayOpacity(), 0, 255, 1));
lightOverlayOpacitySpinner.setModel(new SpinnerNumberModel(AppPreferences.getLightOverlayOpacity(), 0, 255, 1));
fogOverlayOpacitySpinner.setModel(new SpinnerNumberModel(AppPreferences.getFogOverlayOpacity(), 0, 255, 1));
useHaloColorAsVisionOverlayCheckBox.setSelected(AppPreferences.getUseHaloColorOnVisionOverlay());
autoRevealVisionOnGMMoveCheckBox.setSelected(AppPreferences.getAutoRevealVisionOnGMMovement());
showSmiliesCheckBox.setSelected(AppPreferences.getShowSmilies());
playSystemSoundCheckBox.setSelected(AppPreferences.getPlaySystemSounds());
playSystemSoundOnlyWhenNotFocusedCheckBox.setSelected(AppPreferences.getPlaySystemSoundsOnlyWhenNotFocused());
showAvatarInChat.setSelected(AppPreferences.getShowAvatarInChat());
allowPlayerMacroEditsDefault.setSelected(AppPreferences.getAllowPlayerMacroEditsDefault());
toolTipInlineRolls.setSelected(AppPreferences.getUseToolTipForInlineRoll());
suppressToolTipsMacroLinks.setSelected(AppPreferences.getSuppressToolTipsForMacroLinks());
trustedOuputForeground.setColor(AppPreferences.getTrustedPrefixFG());
trustedOuputBackground.setColor(AppPreferences.getTrustedPrefixBG());
toolTipInitialDelay.setText(Integer.toString(AppPreferences.getToolTipInitialDelay()));
toolTipDismissDelay.setText(Integer.toString(AppPreferences.getToolTipDismissDelay()));
facingFaceEdges.setSelected(AppPreferences.getFaceEdge());
facingFaceVertices.setSelected(AppPreferences.getFaceVertex());
chatAutosaveTime.setModel(new SpinnerNumberModel(AppPreferences.getChatAutosaveTime(), 0, 24 * 60, 1));
chatFilenameFormat.setText(AppPreferences.getChatFilenameFormat());
fitGMView.setSelected(AppPreferences.getFitGMView());
hideNPCs.setSelected(AppPreferences.getInitHideNpcs());
ownerPermissions.setSelected(AppPreferences.getInitOwnerPermissions());
lockMovement.setSelected(AppPreferences.getInitLockMovement());
showInitGainMessage.setSelected(AppPreferences.isShowInitGainMessage());
Integer rawVal = AppPreferences.getTypingNotificationDuration();
Integer typingVal = null;
if (rawVal != null && rawVal > 99) { // backward compatibility -- used to be stored in ms, now in seconds
Double dbl = (double) (rawVal / 1000);
if (dbl >= 1) {
long fixedUp = Math.round(dbl);
typingVal = (int) fixedUp;
typingVal = typingVal > 99 ? 99 : typingVal;
} else {
typingVal = 1;
}
}
int value = Math.abs((typingVal == null || typingVal > rawVal) ? rawVal : typingVal);
AppPreferences.setTypingNotificationDuration(value);
SpinnerNumberModel typingDurationModel = new SpinnerNumberModel((int) AppPreferences.getTypingNotificationDuration(), 0, 99, 1);
typingNotificationDuration.setModel(typingDurationModel);
chatNotificationColor.setColor(AppPreferences.getChatNotificationColor());
chatNotificationShowBackground.setSelected(AppPreferences.getChatNotificationShowBackground());
}
}