/* * 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.prereq; import com.trollworks.gcs.criteria.IntegerCriteria; import com.trollworks.gcs.criteria.NumericCompareType; import com.trollworks.gcs.widgets.outline.ListRow; import com.trollworks.toolkit.annotation.Localize; import com.trollworks.toolkit.ui.UIUtilities; import com.trollworks.toolkit.ui.image.StdImage; 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.IconButton; import com.trollworks.toolkit.utility.Localization; import java.awt.event.ActionEvent; import javax.swing.JComboBox; import javax.swing.JComponent; /** A prerequisite list editor panel. */ public class ListPrereqEditor extends PrereqEditor { @Localize("Requires all of:") @Localize(locale = "de", value = "Benötigt alle von:") @Localize(locale = "ru", value = "Требует всё из:") @Localize(locale = "es", value = "Requiere todos los siguientes: ") private static String REQUIRES_ALL; @Localize("Requires at least one of:") @Localize(locale = "de", value = "Benötigt mindestens einen von:") @Localize(locale = "ru", value = "Требует одно из:") @Localize(locale = "es", value = "Requiere al menos uno de:") private static String REQUIRES_ANY; @Localize("Add a prerequisite to this list") @Localize(locale = "de", value = "Füge eine Bedingung zu dieser Liste hinzu") @Localize(locale = "ru", value = "Добавить требование в этот список") @Localize(locale = "es", value = "Añadiro un prerrequisito a esta lista") private static String ADD_PREREQ_TOOLTIP; @Localize("Add a prerequisite list to this list") @Localize(locale = "de", value = "Füge eine Bedingungs-Liste zu dieser Liste hinzu") @Localize(locale = "ru", value = "Добавить список требований в этот список") @Localize(locale = "es", value = "Añadir una lista de prerrequisitos a esta lista") private static String ADD_PREREQ_LIST_TOOLTIP; @Localize(" ") @Localize(locale = "de", value = " ") private static String NO_TL_PREREQ; @Localize("When the Character's TL is") @Localize(locale = "de", value = "Wenn der TL des Charakters ist") @Localize(locale = "ru", value = "Когда ТУ персонажа") @Localize(locale = "es", value = "Cuando el NT del personaje es") private static String TL_IS; @Localize("When the Character's TL is at least") @Localize(locale = "de", value = "Wenn der TL des Charakters ist mindestens") @Localize(locale = "ru", value = "Когда ТУ персонажа по крайней мере") @Localize(locale = "es", value = "Cuando el NT del personaje es al menos") private static String TL_IS_AT_LEAST; @Localize("When the Character's TL is at most") @Localize(locale = "de", value = "Wenn der TL des Charakters ist höchstens") @Localize(locale = "ru", value = "Когда ТУ персонажа не более") @Localize(locale = "es", value = "Cuando el NT del personaje es como mucho") private static String TL_IS_AT_MOST; static { Localization.initialize(); } private static Class<?> LAST_ITEM_TYPE = AdvantagePrereq.class; private static final String ANY_ALL = "AnyAll"; //$NON-NLS-1$ private static final String WHEN_TL = "WhenTL"; //$NON-NLS-1$ /** @param type The last item type created or switched to. */ public static void setLastItemType(Class<?> type) { LAST_ITEM_TYPE = type; } /** * Creates a new prerequisite editor panel. * * @param row The owning row. * @param prereq The prerequisite to edit. * @param depth The depth of this prerequisite. */ public ListPrereqEditor(ListRow row, PrereqList prereq, int depth) { super(row, prereq, depth); } private static String mapWhenTLToString(IntegerCriteria criteria) { if (PrereqList.isWhenTLEnabled(criteria)) { switch (criteria.getType()) { case IS: default: return TL_IS; case AT_LEAST: return TL_IS_AT_LEAST; case AT_MOST: return TL_IS_AT_MOST; } } return NO_TL_PREREQ; } @Override protected void rebuildSelf(FlexRow left, FlexGrid grid, FlexRow right) { PrereqList prereqList = (PrereqList) mPrereq; IntegerCriteria whenTLCriteria = prereqList.getWhenTLCriteria(); left.add(addComboBox(WHEN_TL, new Object[] { NO_TL_PREREQ, TL_IS, TL_IS_AT_LEAST, TL_IS_AT_MOST }, mapWhenTLToString(whenTLCriteria))); if (PrereqList.isWhenTLEnabled(whenTLCriteria)) { left.add(addNumericCompareField(whenTLCriteria, 0, 99, false)); } left.add(addComboBox(ANY_ALL, new Object[] { REQUIRES_ALL, REQUIRES_ANY }, prereqList.requiresAll() ? REQUIRES_ALL : REQUIRES_ANY)); grid.add(new FlexSpacer(0, 0, true, false), 0, 1); IconButton button = new IconButton(StdImage.MORE, ADD_PREREQ_LIST_TOOLTIP, () -> addPrereqList()); add(button); right.add(button); button = new IconButton(StdImage.ADD, ADD_PREREQ_TOOLTIP, () -> addPrereq()); add(button); right.add(button); } private void addPrereqList() { addItem(new PrereqList((PrereqList) mPrereq, true)); } private void addPrereq() { try { addItem((Prereq) LAST_ITEM_TYPE.getConstructor(PrereqList.class).newInstance(mPrereq)); } catch (Exception exception) { // Shouldn't have a failure... exception.printStackTrace(System.err); } } @Override public void actionPerformed(ActionEvent event) { String command = event.getActionCommand(); if (ANY_ALL.equals(command)) { ((PrereqList) mPrereq).setRequiresAll(((JComboBox<?>) event.getSource()).getSelectedIndex() == 0); getParent().repaint(); } else if (WHEN_TL.equals(command)) { PrereqList prereqList = (PrereqList) mPrereq; IntegerCriteria whenTLCriteria = prereqList.getWhenTLCriteria(); Object value = ((JComboBox<?>) event.getSource()).getSelectedItem(); if (!mapWhenTLToString(whenTLCriteria).equals(value)) { if (TL_IS.equals(value)) { if (!PrereqList.isWhenTLEnabled(whenTLCriteria)) { PrereqList.setWhenTLEnabled(whenTLCriteria, true); } whenTLCriteria.setType(NumericCompareType.IS); } else if (TL_IS_AT_LEAST.equals(value)) { if (!PrereqList.isWhenTLEnabled(whenTLCriteria)) { PrereqList.setWhenTLEnabled(whenTLCriteria, true); } whenTLCriteria.setType(NumericCompareType.AT_LEAST); } else if (TL_IS_AT_MOST.equals(value)) { if (!PrereqList.isWhenTLEnabled(whenTLCriteria)) { PrereqList.setWhenTLEnabled(whenTLCriteria, true); } whenTLCriteria.setType(NumericCompareType.AT_MOST); } else { PrereqList.setWhenTLEnabled(whenTLCriteria, false); } rebuild(); } } else { super.actionPerformed(event); } } private void addItem(Prereq prereq) { JComponent parent = (JComponent) getParent(); int index = UIUtilities.getIndexOf(parent, this); ((PrereqList) mPrereq).add(0, prereq); parent.add(create(mRow, prereq, getDepth() + 1), index + 1); parent.revalidate(); } }