/* * Copyright (c) 1998-2017 by Richard A. Wilkes. All rights reserved. * * This Source Code Form is subject to the terms of the Mozilla Public * License, version 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This Source Code Form is "Incompatible With Secondary Licenses", as * defined by the Mozilla Public License, version 2.0. */ package com.trollworks.gcs.character; import com.trollworks.gcs.page.DropPanel; import com.trollworks.gcs.page.PageField; import com.trollworks.gcs.page.PageLabel; import com.trollworks.toolkit.annotation.Localize; import com.trollworks.toolkit.ui.layout.Alignment; import com.trollworks.toolkit.ui.layout.FlexComponent; import com.trollworks.toolkit.ui.layout.FlexGrid; import com.trollworks.toolkit.ui.layout.FlexRow; import com.trollworks.toolkit.ui.layout.FlexSpacer; import com.trollworks.toolkit.ui.widget.Wrapper; import com.trollworks.toolkit.utility.Localization; import java.awt.Color; import javax.swing.SwingConstants; /** The character attributes panel. */ public class AttributesPanel extends DropPanel { @Localize("Attributes") @Localize(locale = "de", value = "Attribute") @Localize(locale = "ru", value = "Атрибуты") @Localize(locale = "es", value = "Atributos") private static String ATTRIBUTES; @Localize("Strength (ST):") @Localize(locale = "de", value = "Stärke (ST):") @Localize(locale = "ru", value = "Сила (СЛ):") @Localize(locale = "es", value = "Fuerza (FZ):") private static String ST; @Localize("<html><body><b>{0} points</b> have been spent to modify <b>Strength</b></body></html>") @Localize(locale = "de", value = "<html><body><b>{0} Punkte</b> wurden ausgegeben, um die <b>Stärke</b> zu verändern</body></html>") @Localize(locale = "ru", value = "<html><body><b>{0} очков</b> было потрачено на <b>Силу</b><br>или по-английски Strength, кратко <b>ST</b></body></html>") @Localize(locale = "es", value = "<html><body><b>{0} puntos</b> se han consumido en modificar <b>Fuerza</b></body></html>") private static String ST_TOOLTIP; @Localize("Dexterity (DX):") @Localize(locale = "de", value = "Geschick (GE):") @Localize(locale = "ru", value = "Ловкость (ЛВ):") @Localize(locale = "es", value = "Destreza (DS):") private static String DX; @Localize("<html><body><b>{0} points</b> have been spent to modify <b>Dexterity</b></body></html>") @Localize(locale = "de", value = "<html><body><b>{0} Punkte</b> wurden ausgegeben, um das <b>Geschick</b> zu verändern</body></html>") @Localize(locale = "ru", value = "<html><body><b>{0} очков</b> было потрачено на <b>Ловкость </b><br>или по-английски Dexterity, кратко <b>DX</b></body></html>") @Localize(locale = "es", value = "<html><body><b>{0} puntos</b> se han consumido en modificar <b>Destreza</b></body></html>") private static String DX_TOOLTIP; @Localize("Intelligence (IQ):") @Localize(locale = "de", value = "Intelligenz (IQ):") @Localize(locale = "ru", value = "Интеллект (ИН):") @Localize(locale = "es", value = "Inteligencia (CI):") private static String IQ; @Localize("<html><body><b>{0} points</b> have been spent to modify <b>Intelligence</b></body></html>") @Localize(locale = "de", value = "<html><body><b>{0} Punkte</b> wurden ausgegeben, um die <b>Intelligenz</b> zu verändern</body></html>") @Localize(locale = "ru", value = "<html><body><b>{0} очков</b> было потрачено на <b>Интеллект</b><br>или по-английски Intelligence, кратко <b>IQ</b></body></html>") @Localize(locale = "es", value = "<html><body><b>{0} puntos</b> se han consumido en modificar <b>Inteligencia</b></body></html>") private static String IQ_TOOLTIP; @Localize("Health (HT):") @Localize(locale = "de", value = "Konstitution (KO):") @Localize(locale = "ru", value = "Здоровье (ЗД):") @Localize(locale = "es", value = "Salud (SL):") private static String HT; @Localize("<html><body><b>{0} points</b> have been spent to modify <b>Health</b></body></html>") @Localize(locale = "de", value = "<html><body><b>{0} Punkte</b> wurden ausgegeben, um die <b>Konstitution</b> zu verändern</body></html>") @Localize(locale = "ru", value = "<html><body><b>{0} очков</b> было потрачено на <b>Здоровье</b><br>или по-английски Health, кратко <b>HT</b></body></html>") @Localize(locale = "es", value = "<html><body><b>{0} puntos</b> se han consumido en modificar <b>Salud</b></body></html>") private static String HT_TOOLTIP; @Localize("Will:") @Localize(locale = "de", value = "Wille:") @Localize(locale = "ru", value = "Воля:") @Localize(locale = "es", value = "Voluntad") private static String WILL; @Localize("<html><body><b>{0} points</b> have been spent to modify <b>Will</b></body></html>") @Localize(locale = "de", value = "<html><body><b>{0} Punkte</b> wurden ausgegeben, um den <b>Willen</b> zu verändern</body></html>") @Localize(locale = "ru", value = "<html><body><b>{0} очков</b> было потрачено на <b>Волю</b> (по-английски <b>Will</b>)</body></html>") @Localize(locale = "es", value = "<html><body><b>{0} puntos</b> se han consumido en modificar <b>Voluntad</b></body></html>") private static String WILL_TOOLTIP; @Localize("Fright Check:") @Localize(locale = "de", value = "Schreckprobe:") @Localize(locale = "ru", value = "Бросок страха:") @Localize(locale = "es", value = "Chequeo de Miedo") private static String FRIGHT_CHECK; @Localize("Perception:") @Localize(locale = "de", value = "Wahrnehmung:") @Localize(locale = "ru", value = "Восприятие:") @Localize(locale = "es", value = "Percepción") private static String PERCEPTION; @Localize("<html><body><b>{0} points</b> have been spent to modify <b>Perception</b></body></html>") @Localize(locale = "de", value = "<html><body><b>{0} Punkte</b> wurden ausgegeben, um die <b>Wahrnehmung</b> zu verändern</body></html>") @Localize(locale = "ru", value = "<html><body><b>{0} очков</b> было потрачено на <b>Восприятие</b><br>или по-английски Perception, кратко <b>Per</b></body></html>") @Localize(locale = "es", value = "<html><body><b>{0} puntos</b> se han consumido en modificar <b>Percepción</b></body></html>") private static String PERCEPTION_TOOLTIP; @Localize("Vision:") @Localize(locale = "de", value = "Sehen:") @Localize(locale = "ru", value = "Зрение:") @Localize(locale = "es", value = "Vista") private static String VISION; @Localize("Hearing:") @Localize(locale = "de", value = "Hören:") @Localize(locale = "ru", value = "Слух:") @Localize(locale = "es", value = "Oido") private static String HEARING; @Localize("Touch:") @Localize(locale = "de", value = "Fühlen:") @Localize(locale = "ru", value = "Осязание:") @Localize(locale = "es", value = "Tacto") private static String TOUCH; @Localize("Taste & Smell:") @Localize(locale = "de", value = "Schm. & Riechen:") @Localize(locale = "ru", value = "Вкус и запах:") @Localize(locale = "es", value = "Gusto y Olfato") private static String TASTE_SMELL; @Localize("Basic Speed:") @Localize(locale = "de", value = "Grundgeschw.:") @Localize(locale = "ru", value = "Баз. скорость:") @Localize(locale = "es", value = "Velocidad Básica") private static String BASIC_SPEED; @Localize("<html><body><b>{0} points</b> have been spent to modify <b>Basic Speed</b></body></html>") @Localize(locale = "de", value = "<html><body><b>{0} Punkte</b> wurden ausgegeben, um die <b>Grundgeschwindigkeit</b> zu verändern</body></html>") @Localize(locale = "ru", value = "<html><body><b>{0} очков</b> было потрачено на <b>Базовую скорость</b> (по-английски Basic Speed)</body></html>") @Localize(locale = "es", value = "<html><body><b>{0} puntos</b> se han consumido en modificar <b>Velocidad Básica</b></body></html>") private static String BASIC_SPEED_TOOLTIP; @Localize("Basic Move:") @Localize(locale = "de", value = "Grundbewegung:") @Localize(locale = "ru", value = "Баз. движение:") @Localize(locale = "es", value = "Movimiento Básico") private static String BASIC_MOVE; @Localize("<html><body><b>{0} points</b> have been spent to modify <b>Basic Move</b></body></html>") @Localize(locale = "de", value = "<html><body><b>{0} Punkte</b> wurden ausgegeben, um die <b>Grundbewegung</b> zu verändern</body></html>") @Localize(locale = "ru", value = "<html><body><b>{0} очков</b> было потрачено на <b>Базовое движение</b> (по-английски Basic Move)</body></html>") @Localize(locale = "es", value = "<html><body><b>{0} puntos</b> se han consumido en modificar <b>Movimiento Básico</b></body></html>") private static String BASIC_MOVE_TOOLTIP; @Localize("thr:") @Localize(locale = "de", value = "stoß:") @Localize(locale = "ru", value = "прм:") @Localize(locale = "es", value = "") private static String BASIC_THRUST; @Localize("The basic damage value for thrust attacks") @Localize(locale = "de", value = "Der Grundschaden für Stoßangriffe") @Localize(locale = "ru", value = "Величина базового урона для прямых атак") @Localize(locale = "es", value = "") private static String BASIC_THRUST_TOOLTIP; @Localize("sw:") @Localize(locale = "de", value = "schw:") @Localize(locale = "ru", value = "амп:") @Localize(locale = "es", value = "") private static String BASIC_SWING; @Localize("The basic damage value for swing attacks") @Localize(locale = "de", value = "Der Grundschaden für Schwungangriffe") @Localize(locale = "ru", value = "Величина базового урона для амплитудных атак") @Localize(locale = "es", value = "") private static String BASIC_SWING_TOOLTIP; static { Localization.initialize(); } private CharacterSheet mSheet; /** * Creates a new attributes panel. * * @param sheet The sheet to display the data for. */ public AttributesPanel(CharacterSheet sheet) { super(null, ATTRIBUTES, true); mSheet = sheet; FlexGrid grid = new FlexGrid(); grid.setVerticalGap(0); int row = 0; createLabelAndField(grid, row++, GURPSCharacter.ID_STRENGTH, ST, ST_TOOLTIP, SwingConstants.RIGHT, true); createLabelAndField(grid, row++, GURPSCharacter.ID_DEXTERITY, DX, DX_TOOLTIP, SwingConstants.RIGHT, true); createLabelAndField(grid, row++, GURPSCharacter.ID_INTELLIGENCE, IQ, IQ_TOOLTIP, SwingConstants.RIGHT, true); createLabelAndField(grid, row++, GURPSCharacter.ID_HEALTH, HT, HT_TOOLTIP, SwingConstants.RIGHT, true); createDivider(grid, row++, false); createDivider(grid, row++, true); createLabelAndField(grid, row++, GURPSCharacter.ID_WILL, WILL, WILL_TOOLTIP, SwingConstants.RIGHT, true); createLabelAndField(grid, row++, GURPSCharacter.ID_FRIGHT_CHECK, FRIGHT_CHECK, null, SwingConstants.RIGHT, false); createDivider(grid, row++, false); createDivider(grid, row++, true); createLabelAndField(grid, row++, GURPSCharacter.ID_BASIC_SPEED, BASIC_SPEED, BASIC_SPEED_TOOLTIP, SwingConstants.RIGHT, true); createLabelAndField(grid, row++, GURPSCharacter.ID_BASIC_MOVE, BASIC_MOVE, BASIC_MOVE_TOOLTIP, SwingConstants.RIGHT, true); createDivider(grid, row++, false); createDivider(grid, row++, true); createLabelAndField(grid, row++, GURPSCharacter.ID_PERCEPTION, PERCEPTION, PERCEPTION_TOOLTIP, SwingConstants.RIGHT, true); createLabelAndField(grid, row++, GURPSCharacter.ID_VISION, VISION, null, SwingConstants.RIGHT, false); createLabelAndField(grid, row++, GURPSCharacter.ID_HEARING, HEARING, null, SwingConstants.RIGHT, false); createLabelAndField(grid, row++, GURPSCharacter.ID_TASTE_AND_SMELL, TASTE_SMELL, null, SwingConstants.RIGHT, false); createLabelAndField(grid, row++, GURPSCharacter.ID_TOUCH, TOUCH, null, SwingConstants.RIGHT, false); createDivider(grid, row++, false); createDivider(grid, row++, true); createDamageFields(grid, row++); grid.apply(this); } private void createLabelAndField(FlexGrid grid, int row, String key, String title, String tooltip, int alignment, boolean enabled) { PageField field = new PageField(mSheet, key, alignment, enabled, tooltip); PageLabel label = new PageLabel(title, field); add(label); add(field); grid.add(new FlexComponent(label, Alignment.RIGHT_BOTTOM, Alignment.CENTER), row, 0); grid.add(field, row, 1); } private void createDamageFields(FlexGrid grid, int rowIndex) { FlexRow row = new FlexRow(); row.setHorizontalAlignment(Alignment.CENTER); createDamageLabelAndField(row, GURPSCharacter.ID_BASIC_THRUST, BASIC_THRUST, BASIC_THRUST_TOOLTIP); row.add(new FlexSpacer(0, 0, false, false)); createDamageLabelAndField(row, GURPSCharacter.ID_BASIC_SWING, BASIC_SWING, BASIC_SWING_TOOLTIP); grid.add(row, rowIndex, 0, 1, 2); } private void createDamageLabelAndField(FlexRow row, String key, String title, String tooltip) { PageField field = new PageField(mSheet, key, SwingConstants.RIGHT, false, tooltip); PageLabel label = new PageLabel(title, field); add(label); add(field); row.add(new FlexComponent(label, true)); row.add(new FlexComponent(field, true)); } private void createDivider(FlexGrid grid, int row, boolean black) { Wrapper panel = new Wrapper(); panel.setOnlySize(1, 1); add(panel); if (black) { addHorizontalBackground(panel, Color.black); } grid.add(panel, row, 0, 1, 2); } }