/* * 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.preferences; import com.trollworks.gcs.app.GCSFonts; import com.trollworks.gcs.character.Profile; import com.trollworks.toolkit.annotation.Localize; import com.trollworks.toolkit.ui.RetinaIcon; import com.trollworks.toolkit.ui.UIUtilities; import com.trollworks.toolkit.ui.border.TitledBorder; import com.trollworks.toolkit.ui.image.StdImage; import com.trollworks.toolkit.ui.widget.ActionPanel; import com.trollworks.toolkit.utility.Localization; import com.trollworks.toolkit.utility.text.Text; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Insets; import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.text.MessageFormat; import javax.swing.UIManager; /** The character portrait. */ public class PortraitPreferencePanel extends ActionPanel { @Localize("Portrait") @Localize(locale = "de", value = "Charakterbild") @Localize(locale = "ru", value = "Изображение") @Localize(locale = "es", value = "Retrato") private static String PORTRAIT; @Localize("<html><body>The portrait to use when a new character sheet is created.<br><br>Ideal original portrait size is {0} pixels wide by {1} pixels tall,<br>although the image will be automatically scaled to these<br>dimensions, if necessary.</body></html>") @Localize(locale = "de", value = "<html><body>Das zu verwendende Charakterbild, wenn ein neues Charakterblatt erstellt wird.<br><br>Ideale Größe für das Bild ist {0} Pixel breit und {1} Pixel hoch,<br>aber das Bild wird automatisch auf diese Maße<br>skaliert, wenn dies notwendig sein sollte.</body></html>") @Localize(locale = "ru", value = "<html><body>Изображение, используемое при создании нового листа персонажа.<br><br>Наилучший размер изображения - {0} пикселей в ширину и {1} пикселей в высоту, но при необходимости, <br>изображение будет автоматически смасштабировано в этипропорции.</body></html>") @Localize(locale = "es", value = "<html><body>Retrato para usar cuando se crea una nueva hoja de personaje.<br><br>El tamaño original ideal es de {0} pixels de ancho por {1} pixels de alto,<br>en cualquier otro caso, la imagen se escalará <br>automaticamente a estas dimensiones, si es necesario.</body></html>") @Localize(locale = "es", value = "") private static String PORTRAIT_TOOLTIP; static { Localization.initialize(); } private RetinaIcon mPortrait; /** * Creates a new character portrait. * * @param image The image to display. */ public PortraitPreferencePanel(StdImage image) { super(); mPortrait = Profile.createPortrait(image); setBorder(new TitledBorder(UIManager.getFont(GCSFonts.KEY_LABEL), PORTRAIT)); Insets insets = getInsets(); UIUtilities.setOnlySize(this, new Dimension(insets.left + insets.right + Profile.PORTRAIT_WIDTH, insets.top + insets.bottom + Profile.PORTRAIT_HEIGHT)); setToolTipText(Text.wrapPlainTextForToolTip(MessageFormat.format(PORTRAIT_TOOLTIP, new Integer(Profile.PORTRAIT_WIDTH * 2), new Integer(Profile.PORTRAIT_HEIGHT * 2)))); addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent event) { if (event.getClickCount() == 2) { notifyActionListeners(); } } }); } /** @param image The new portrait. */ public void setPortrait(StdImage image) { mPortrait = Profile.createPortrait(image); repaint(); } @Override protected void paintComponent(Graphics gc) { Insets insets = getInsets(); Rectangle bounds = new Rectangle(insets.left, insets.top, getWidth() - (insets.left + insets.right), getHeight() - (insets.top + insets.bottom)); gc.setColor(Color.white); gc.fillRect(bounds.x, bounds.y, bounds.width, bounds.height); if (mPortrait != null) { mPortrait.paintIcon(this, gc, insets.left, insets.top); } } }