X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2FTEditColorThemeWindow.java;h=668309d5798c411bd977107e086e476255a34616;hb=HEAD;hp=d46ef54998ba15d388d23488863c02e6ef86bc88;hpb=3649b9210ea425f398ba8c24f9509669cf72aa96;p=fanfix.git diff --git a/src/jexer/TEditColorThemeWindow.java b/src/jexer/TEditColorThemeWindow.java index d46ef54..668309d 100644 --- a/src/jexer/TEditColorThemeWindow.java +++ b/src/jexer/TEditColorThemeWindow.java @@ -1,29 +1,27 @@ /* * Jexer - Java Text User Interface * - * License: LGPLv3 or later + * The MIT License (MIT) * - * This module is licensed under the GNU Lesser General Public License - * Version 3. Please see the file "COPYING" in this directory for more - * information about the GNU Lesser General Public License Version 3. + * Copyright (C) 2019 Kevin Lamonte * - * Copyright (C) 2015 Kevin Lamonte + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 3 of - * the License, or (at your option) any later version. + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, see - * http://www.gnu.org/licenses/, or write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. * * @author Kevin Lamonte [kevin.lamonte@gmail.com] * @version 1 @@ -31,6 +29,7 @@ package jexer; import java.util.List; +import java.util.ResourceBundle; import jexer.bits.Color; import jexer.bits.ColorTheme; @@ -45,7 +44,36 @@ import static jexer.TKeypress.*; * color theme. * */ -public final class TEditColorThemeWindow extends TWindow { +public class TEditColorThemeWindow extends TWindow { + + /** + * Translated strings. + */ + private static final ResourceBundle i18n = ResourceBundle.getBundle(TEditColorThemeWindow.class.getName()); + + // ------------------------------------------------------------------------ + // Variables -------------------------------------------------------------- + // ------------------------------------------------------------------------ + + /** + * The current editing theme. + */ + private ColorTheme editTheme; + + /** + * The left-side list of colors pane. + */ + private TList colorNames; + + /** + * The foreground color. + */ + private ForegroundPicker foreground; + + /** + * The background color. + */ + private BackgroundPicker background; /** * The foreground color picker. @@ -191,54 +219,53 @@ public final class TEditColorThemeWindow extends TWindow { CellAttributes background = getWindow().getBackground(); CellAttributes attr = new CellAttributes(); - getScreen().drawBox(0, 0, getWidth(), getHeight(), border, - background, 1, false); + drawBox(0, 0, getWidth(), getHeight(), border, background, 1, + false); attr.setTo(getTheme().getColor("twindow.background.modal")); if (isActive()) { attr.setForeColor(getTheme().getColor("tlabel").getForeColor()); attr.setBold(getTheme().getColor("tlabel").isBold()); } - getScreen().putStringXY(1, 0, " Foreground ", attr); + putStringXY(1, 0, i18n.getString("foregroundLabel"), attr); // Have to draw the colors manually because the int value matches // SGR, not CGA. attr.reset(); - attr.setReverse(true); attr.setForeColor(Color.BLACK); - putStringXY(1, 1, " ", attr); + putStringXY(1, 1, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.BLUE); - putStringXY(4, 1, " ", attr); + putStringXY(4, 1, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.GREEN); - putStringXY(7, 1, " ", attr); + putStringXY(7, 1, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.CYAN); - putStringXY(10, 1, " ", attr); + putStringXY(10, 1, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.RED); - putStringXY(1, 2, " ", attr); + putStringXY(1, 2, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.MAGENTA); - putStringXY(4, 2, " ", attr); + putStringXY(4, 2, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.YELLOW); - putStringXY(7, 2, " ", attr); + putStringXY(7, 2, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.WHITE); - putStringXY(10, 2, " ", attr); + putStringXY(10, 2, "\u2588\u2588\u2588", attr); attr.setBold(true); attr.setForeColor(Color.BLACK); - putStringXY(1, 3, " ", attr); + putStringXY(1, 3, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.BLUE); - putStringXY(4, 3, " ", attr); + putStringXY(4, 3, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.GREEN); - putStringXY(7, 3, " ", attr); + putStringXY(7, 3, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.CYAN); - putStringXY(10, 3, " ", attr); + putStringXY(10, 3, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.RED); - putStringXY(1, 4, " ", attr); + putStringXY(1, 4, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.MAGENTA); - putStringXY(4, 4, " ", attr); + putStringXY(4, 4, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.YELLOW); - putStringXY(7, 4, " ", attr); + putStringXY(7, 4, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.WHITE); - putStringXY(10, 4, " ", attr); + putStringXY(10, 4, "\u2588\u2588\u2588", attr); // Draw the dot int dotX = getXColorPosition(color); @@ -247,10 +274,11 @@ public final class TEditColorThemeWindow extends TWindow { // Use white-on-black for black. All other colors use // black-on-whatever. attr.reset(); - getScreen().putCharXY(dotX, dotY, GraphicsChars.CP437[0x07], - attr); + putCharXY(dotX, dotY, GraphicsChars.CP437[0x07], attr); } else { - getScreen().putCharXY(dotX, dotY, GraphicsChars.CP437[0x07]); + attr.setForeColor(color); + attr.setBold(bold); + putCharXY(dotX, dotY, '\u25D8', attr); } } @@ -463,36 +491,35 @@ public final class TEditColorThemeWindow extends TWindow { CellAttributes background = getWindow().getBackground(); CellAttributes attr = new CellAttributes(); - getScreen().drawBox(0, 0, getWidth(), getHeight(), border, - background, 1, false); + drawBox(0, 0, getWidth(), getHeight(), border, background, 1, + false); attr.setTo(getTheme().getColor("twindow.background.modal")); if (isActive()) { attr.setForeColor(getTheme().getColor("tlabel").getForeColor()); attr.setBold(getTheme().getColor("tlabel").isBold()); } - getScreen().putStringXY(1, 0, " Background ", attr); + putStringXY(1, 0, i18n.getString("backgroundLabel"), attr); // Have to draw the colors manually because the int value matches // SGR, not CGA. attr.reset(); - attr.setReverse(true); attr.setForeColor(Color.BLACK); - putStringXY(1, 1, " ", attr); + putStringXY(1, 1, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.BLUE); - putStringXY(4, 1, " ", attr); + putStringXY(4, 1, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.GREEN); - putStringXY(7, 1, " ", attr); + putStringXY(7, 1, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.CYAN); - putStringXY(10, 1, " ", attr); + putStringXY(10, 1, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.RED); - putStringXY(1, 2, " ", attr); + putStringXY(1, 2, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.MAGENTA); - putStringXY(4, 2, " ", attr); + putStringXY(4, 2, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.YELLOW); - putStringXY(7, 2, " ", attr); + putStringXY(7, 2, "\u2588\u2588\u2588", attr); attr.setForeColor(Color.WHITE); - putStringXY(10, 2, " ", attr); + putStringXY(10, 2, "\u2588\u2588\u2588", attr); // Draw the dot int dotX = getXColorPosition(color); @@ -501,10 +528,10 @@ public final class TEditColorThemeWindow extends TWindow { // Use white-on-black for black. All other colors use // black-on-whatever. attr.reset(); - getScreen().putCharXY(dotX, dotY, GraphicsChars.CP437[0x07], - attr); + putCharXY(dotX, dotY, GraphicsChars.CP437[0x07], attr); } else { - getScreen().putCharXY(dotX, dotY, GraphicsChars.CP437[0x07]); + attr.setForeColor(color); + putCharXY(dotX, dotY, '\u25D8', attr); } } @@ -595,63 +622,19 @@ public final class TEditColorThemeWindow extends TWindow { } - /** - * The current editing theme. - */ - private ColorTheme editTheme; + // ------------------------------------------------------------------------ + // Constructors ----------------------------------------------------------- + // ------------------------------------------------------------------------ /** - * The left-side list of colors pane. - */ - private TList colorNames; - - /** - * The foreground color. - */ - private ForegroundPicker foreground; - - /** - * The background color. - */ - private BackgroundPicker background; - - /** - * Set various widgets/values to the editing theme color. - * - * @param colorName name of color from theme - */ - private void refreshFromTheme(final String colorName) { - CellAttributes attr = editTheme.getColor(colorName); - foreground.color = attr.getForeColor(); - foreground.bold = attr.isBold(); - background.color = attr.getBackColor(); - } - - /** - * Examines foreground, background, and colorNames and sets the color in - * editTheme. - */ - private void saveToEditTheme() { - String colorName = colorNames.getSelected(); - if (colorName == null) { - return; - } - CellAttributes attr = editTheme.getColor(colorName); - attr.setForeColor(foreground.color); - attr.setBold(foreground.bold); - attr.setBackColor(background.color); - editTheme.setColor(colorName, attr); - } - - /** - * Public constructor. The file open box will be centered on screen. + * Public constructor. The window will be centered on screen. * * @param application the TApplication that manages this window */ public TEditColorThemeWindow(final TApplication application) { // Register with the TApplication - super(application, "Colors", 0, 0, 60, 18, MODAL); + super(application, i18n.getString("windowTitle"), 0, 0, 60, 18, MODAL); // Initialize with the first color List colors = getTheme().getColorNames(); @@ -670,6 +653,12 @@ public final class TEditColorThemeWindow extends TWindow { refreshFromTheme(colorNames.getSelected()); } }, + new TAction() { + // When the user navigates with keyboard + public void DO() { + refreshFromTheme(colorNames.getSelected()); + } + }, new TAction() { // When the user navigates with keyboard public void DO() { @@ -682,7 +671,7 @@ public final class TEditColorThemeWindow extends TWindow { refreshFromTheme(colors.get(0)); colorNames.setSelectedIndex(0); - addButton(" &OK ", getWidth() - 37, getHeight() - 4, + addButton(i18n.getString("okButton"), getWidth() - 37, getHeight() - 4, new TAction() { public void DO() { ColorTheme global = getTheme(); @@ -697,7 +686,8 @@ public final class TEditColorThemeWindow extends TWindow { } ); - addButton("&Cancel", getWidth() - 25, getHeight() - 4, + addButton(i18n.getString("cancelButton"), getWidth() - 25, + getHeight() - 4, new TAction() { public void DO() { getApplication().closeWindow(TEditColorThemeWindow.this); @@ -708,8 +698,35 @@ public final class TEditColorThemeWindow extends TWindow { // Default to the color list activate(colorNames); + // Add shortcut text + newStatusBar(i18n.getString("statusBar")); + } + + // ------------------------------------------------------------------------ + // Event handlers --------------------------------------------------------- + // ------------------------------------------------------------------------ + + /** + * Handle keystrokes. + * + * @param keypress keystroke event + */ + @Override + public void onKeypress(final TKeypressEvent keypress) { + // Escape - behave like cancel + if (keypress.equals(kbEsc)) { + getApplication().closeWindow(this); + return; + } + + // Pass to my parent + super.onKeypress(keypress); } + // ------------------------------------------------------------------------ + // TWindow ---------------------------------------------------------------- + // ------------------------------------------------------------------------ + /** * Draw me on screen. */ @@ -724,34 +741,49 @@ public final class TEditColorThemeWindow extends TWindow { attr.setForeColor(getTheme().getColor("tlabel").getForeColor()); attr.setBold(getTheme().getColor("tlabel").isBold()); } - getScreen().putStringXY(3, 2, "Color Name", attr); + putStringXY(3, 2, i18n.getString("colorName"), attr); // Draw the sample text box attr.reset(); attr.setForeColor(foreground.color); attr.setBold(foreground.bold); attr.setBackColor(background.color); - getScreen().putStringXY(getWidth() - 17, getHeight() - 6, - "Text Text Text", attr); - getScreen().putStringXY(getWidth() - 17, getHeight() - 5, - "Text Text Text", attr); + putStringXY(getWidth() - 17, getHeight() - 6, + i18n.getString("textTextText"), attr); + putStringXY(getWidth() - 17, getHeight() - 5, + i18n.getString("textTextText"), attr); } + // ------------------------------------------------------------------------ + // TEditColorThemeWindow -------------------------------------------------- + // ------------------------------------------------------------------------ + /** - * Handle keystrokes. + * Set various widgets/values to the editing theme color. * - * @param keypress keystroke event + * @param colorName name of color from theme */ - @Override - public void onKeypress(final TKeypressEvent keypress) { - // Escape - behave like cancel - if (keypress.equals(kbEsc)) { - getApplication().closeWindow(this); + private void refreshFromTheme(final String colorName) { + CellAttributes attr = editTheme.getColor(colorName); + foreground.color = attr.getForeColor(); + foreground.bold = attr.isBold(); + background.color = attr.getBackColor(); + } + + /** + * Examines foreground, background, and colorNames and sets the color in + * editTheme. + */ + private void saveToEditTheme() { + String colorName = colorNames.getSelected(); + if (colorName == null) { return; } - - // Pass to my parent - super.onKeypress(keypress); + CellAttributes attr = editTheme.getColor(colorName); + attr.setForeColor(foreground.color); + attr.setBold(foreground.bold); + attr.setBackColor(background.color); + editTheme.setColor(colorName, attr); } }