/** * Ensures that the user can only check/uncheck boxes as appropriate. For example, if "fog" is not * enabled on the map, it cannot be enabled for export. * * <p>This should get called during initialization and whenever the radio buttons change. * * <p>The GM and Players have different rules, to prevent players from gaining knowledge they * should not have using the screenshot (such as revealing things under other things by disabling * layers). Players can basically only turn off tokens, to get an 'empty' version of the map. */ public static void enforceButtonRules() { if (!TabletopTool.getPlayer().isGM()) { ExportRadioButtons.VIEW_PLAYER.setChecked(true); ExportRadioButtons.VIEW_PLAYER.setEnabled(true); ExportRadioButtons.VIEW_GM.setEnabled(false); } if (ExportRadioButtons.LAYERS_CURRENT.isChecked()) { // By "current layers" we mean what you see in the editor, which is everything. // So disable mucking about with layers. formPanel.getLabel("LAYERS_LABEL").setEnabled(false); ExportLayers.setDefaultChecked(); ExportLayers.setDisabled(); } else /* if (ExportRadioButtons.LAYERS_AS_SELECTED.isChecked()) */ { formPanel.getLabel("LAYERS_LABEL").setEnabled(true); boolean isGM = ExportRadioButtons.VIEW_GM.isChecked(); final Zone zone = TabletopTool.getFrame().getCurrentZoneRenderer().getZone(); for (ExportLayers layer : ExportLayers.values()) { boolean enabled = isGM || layer.playerCanModify; // Regardless of whether it is a player or GM, // only enable fog and visibility check-boxes // when the map has those things turned on. switch (layer) { case LAYER_VISIBILITY: enabled &= (zone.getVisionType() != Zone.VisionType.OFF); break; case LAYER_FOG: enabled &= zone.hasFog(); break; } layer.setEnabled(enabled); if (!enabled) { layer.setToDefault(); } } } }
@Override public boolean commit() { Token token = getModel(); if (getNameField().getText().equals("")) { TabletopTool.showError("msg.error.emptyTokenName"); return false; } if (getSpeechTable().isEditing()) { getSpeechTable().getCellEditor().stopCellEditing(); } if (getPropertyTable().isEditing()) { getPropertyTable().getCellEditor().stopCellEditing(); } // Commit the changes to the token properties if (!super.commit()) { return false; } // SIZE token.setSnapToScale(getSizeCombo().getSelectedIndex() != 0); if (getSizeCombo().getSelectedIndex() > 0) { Grid grid = TabletopTool.getFrame().getCurrentZoneRenderer().getZone().getGrid(); token.setFootprint(grid, (TokenFootprint) getSizeCombo().getSelectedItem()); } // Other token.setPropertyType((String) getPropertyTypeCombo().getSelectedItem()); token.setSightType((String) getSightTypeCombo().getSelectedItem()); // Get the states Component[] stateComponents = getStatesPanel().getComponents(); Component barPanel = null; for (int j = 0; j < stateComponents.length; j++) { if ("bar".equals(stateComponents[j].getName())) { barPanel = stateComponents[j]; continue; } Component[] components = ((Container) stateComponents[j]).getComponents(); for (int i = 0; i < components.length; i++) { JCheckBox cb = (JCheckBox) components[i]; String state = cb.getText(); token.setState(state, cb.isSelected()); } } // endfor // BARS if (barPanel != null) { Component[] bars = ((Container) barPanel).getComponents(); for (int i = 0; i < bars.length; i += 2) { JCheckBox cb = (JCheckBox) ((Container) bars[i]).getComponent(1); JSlider bar = (JSlider) bars[i + 1]; Float value = cb.isSelected() ? null : new Float(bar.getValue() / 100f); token.setBar(bar.getName(), value); } } // Ownership // If the token is owned by all and we are a player don't alter the ownership list. if (TabletopTool.getPlayer().isGM() || !token.isOwnedByAll()) { token.clearAllOwners(); for (int i = 0; i < getOwnerList().getModel().getSize(); i++) { DefaultSelectable selectable = (DefaultSelectable) getOwnerList().getModel().getElementAt(i); if (selectable.isSelected()) { token.addOwner((String) selectable.getObject()); } } // If we are not a GM and the only non GM owner make sure we can't // take our selves off of the owners list if (!TabletopTool.getPlayer().isGM()) { boolean hasPlayer = false; Set<String> owners = token.getOwners(); if (owners != null) { Iterator<Player> playerIter = TabletopTool.getPlayerList().iterator(); while (playerIter.hasNext()) { Player pl = playerIter.next(); if (!pl.isGM() && owners.contains(pl.getName())) { hasPlayer = true; } } } if (!hasPlayer) { token.addOwner(TabletopTool.getPlayer().getName()); } } } // SHAPE token.setShape((Token.TokenShape) getShapeCombo().getSelectedItem()); // Macros token.setSpeechMap(((KeyValueTableModel) getSpeechTable().getModel()).getMap()); // Properties ((TokenPropertyTableModel) getPropertyTable().getModel()).applyTo(token); // Charsheet if (getCharSheetPanel().getImageId() != null) { T3Util.uploadAsset(AssetManager.getAsset(getCharSheetPanel().getImageId())); } token.setCharsheetImage(getCharSheetPanel().getImageId()); // IMAGE if (!token.getImageAssetId().equals(getTokenIconPanel().getImageId())) { BufferedImage image = ImageManager.getImageAndWait(getTokenIconPanel().getImageId()); T3Util.uploadAsset(AssetManager.getAsset(getTokenIconPanel().getImageId())); token.setImageAsset(null, getTokenIconPanel().getImageId()); // Default image for now token.setWidth(image.getWidth(null)); token.setHeight(image.getHeight(null)); } // PORTRAIT if (getPortraitPanel().getImageId() != null) { // Make sure the server has the image if (!TabletopTool.getCampaign().containsAsset(getPortraitPanel().getImageId())) { TabletopTool.serverCommand() .putAsset(AssetManager.getAsset(getPortraitPanel().getImageId())); } } token.setPortraitImage(getPortraitPanel().getImageId()); // LAYOUT token.setSizeScale(getTokenLayoutPanel().getSizeScale()); token.setAnchor(getTokenLayoutPanel().getAnchorX(), getTokenLayoutPanel().getAnchorY()); // OTHER tokenSaved = true; // Character Sheet // Map<String, Object> properties = controller.getData(); // for (String prop : token.getPropertyNames()) // token.setProperty(prop, properties.get(prop)); // Update UI TabletopTool.getFrame().updateTokenTree(); TabletopTool.getFrame().resetTokenPanels(); return true; }
public void initGMNotesTextArea() { getGMNotesTextArea().addMouseListener(new MouseHandler(getGMNotesTextArea())); getComponent("@GMNotes").setEnabled(TabletopTool.getPlayer().isGM()); }