/*
* 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.modifier;
import com.trollworks.gcs.widgets.outline.ListHeaderCell;
import com.trollworks.gcs.widgets.outline.ListTextCell;
import com.trollworks.gcs.widgets.outline.MultiCell;
import com.trollworks.toolkit.annotation.Localize;
import com.trollworks.toolkit.ui.widget.outline.Cell;
import com.trollworks.toolkit.ui.widget.outline.Column;
import com.trollworks.toolkit.ui.widget.outline.Outline;
import com.trollworks.toolkit.ui.widget.outline.OutlineModel;
import com.trollworks.toolkit.ui.widget.outline.TextCell;
import com.trollworks.toolkit.utility.Localization;
import javax.swing.SwingConstants;
/** Modifier Columns */
public enum ModifierColumnID {
/** The enabled/disabled column. */
ENABLED {
@Override
public String toString() {
return ENABLED_TITLE;
}
@Override
public String getToolTip() {
return ENABLED_TOOLTIP;
}
@Override
public Cell getCell(boolean forEditor) {
if (forEditor) {
return new TextCell(SwingConstants.CENTER, false);
}
return new ListTextCell(SwingConstants.CENTER, false);
}
@Override
public String getDataAsText(Modifier modifier) {
return modifier.isEnabled() ? ENABLED_COLUMN : ""; //$NON-NLS-1$
}
},
/** The advantage name/description. */
DESCRIPTION {
@Override
public String toString() {
return DESCRIPTION_TITLE;
}
@Override
public String getToolTip() {
return DESCRIPTION_TOOLTIP;
}
@Override
public Cell getCell(boolean forEditor) {
return new MultiCell(forEditor);
}
@Override
public String getDataAsText(Modifier modifier) {
StringBuilder builder = new StringBuilder();
String notes = modifier.getNotes();
builder.append(modifier.toString());
if (notes.length() > 0) {
builder.append(" ("); //$NON-NLS-1$
builder.append(notes);
builder.append(')');
}
return builder.toString();
}
},
/** The total cost modifier. */
COST_MODIFIER_TOTAL {
@Override
public String toString() {
return COST_MODIFIER_TITLE;
}
@Override
public String getToolTip() {
return COST_MODIFIER_TOOLTIP;
}
@Override
public Cell getCell(boolean forEditor) {
if (forEditor) {
return new TextCell(SwingConstants.LEFT, false);
}
return new ListTextCell(SwingConstants.LEFT, false);
}
@Override
public String getDataAsText(Modifier modifier) {
return modifier.getCostDescription();
}
},
/** The page reference. */
REFERENCE {
@Override
public String toString() {
return REFERENCE_TITLE;
}
@Override
public String getToolTip() {
return REFERENCE_TOOLTIP;
}
@Override
public Cell getCell(boolean forEditor) {
if (forEditor) {
return new TextCell(SwingConstants.RIGHT, false);
}
return new ListTextCell(SwingConstants.RIGHT, false);
}
@Override
public String getDataAsText(Modifier modifier) {
return modifier.getReference();
}
};
@Localize("Enabled")
@Localize(locale = "de", value = "Aktiv")
@Localize(locale = "ru", value = "Включено")
@Localize(locale = "es", value = "Activo")
static String ENABLED_TITLE;
@Localize("Whether this modifier has been enabled or not")
@Localize(locale = "de", value = "Ob dieser Modifikator aktiv ist oder nicht.")
@Localize(locale = "ru", value = "Включить этот модификатор")
@Localize(locale = "es", value = "Determina si el modificador está activo o no")
static String ENABLED_TOOLTIP;
@Localize("\u2713")
@Localize(locale = "de", value = "\u2713")
static String ENABLED_COLUMN;
@Localize("Enhancements & Limitations")
@Localize(locale = "de", value = "Verbesserungen & Einschränkungen")
@Localize(locale = "ru", value = "Улучшения и ограничения")
@Localize(locale = "es", value = "Mejoras y Limitaciones")
static String DESCRIPTION_TITLE;
@Localize("The name and notes describing this enhancement or limitation")
@Localize(locale = "de", value = "Die Namen und Anmerkungen, die diese Verbesserung oder Einschränkung beschreiben.")
@Localize(locale = "ru", value = "Название и заметки, описывающие улучшение или ограничение")
@Localize(locale = "es", value = "Nombre y Notas describiendo esta mejora o limitación")
static String DESCRIPTION_TOOLTIP;
@Localize("Cost Modifier")
@Localize(locale = "de", value = "Kostenmodifikator")
@Localize(locale = "ru", value = "Модификатор стоимости")
@Localize(locale = "es", value = "Coste del modificador")
static String COST_MODIFIER_TITLE;
@Localize("The cost modifier for this enhancement or limitation")
@Localize(locale = "de", value = "Der Kostenmodifikator für diese Verbesserung oder Einschränkung.")
@Localize(locale = "ru", value = "Стоимость модификатора за улучшение или ограничение")
@Localize(locale = "es", value = "Coste del modificador de esta mejora o limitación")
static String COST_MODIFIER_TOOLTIP;
@Localize("Ref")
@Localize(locale = "de", value = "Ref.")
@Localize(locale = "ru", value = "Ссыл")
static String REFERENCE_TITLE;
@Localize("A reference to the book and page this modifier appears on (e.g. B22 would refer to \"Basic Set\", page 22)")
@Localize(locale = "de", value = "Eine Referenz auf das Buch und die Seite, auf der dieser Modifikator beschrieben wird (z.B. B22 würde auf \"Basic Set\" Seite 22 verweisen).")
@Localize(locale = "ru", value = "Ссылка на страницу и книгу, описывающая модификатор (например B22 - \"Базовые правила\", страница 22)")
@Localize(locale = "es", value = "Referencia al libro y página donde se menciona el modificador (p.e. B22 se refiere al \"Manual Básico\", página 22).")
static String REFERENCE_TOOLTIP;
static {
Localization.initialize();
}
/**
* @param modifier The {@link Modifier} to get the data from.
* @return An object representing the data for this column.
*/
public Object getData(Modifier modifier) {
return getDataAsText(modifier);
}
/**
* @param modifier The {@link Modifier} to get the data from.
* @return Text representing the data for this column.
*/
public abstract String getDataAsText(Modifier modifier);
/** @return The tooltip for the column. */
public abstract String getToolTip();
/**
* @param forEditor Whether this is for an editor or not.
* @return The {@link Cell} used to display the data.
*/
public abstract Cell getCell(boolean forEditor);
/** @return Whether this column should be displayed for the specified data file. */
@SuppressWarnings("static-method")
public boolean shouldDisplay() {
return true;
}
/**
* Adds all relevant {@link Column}s to a {@link Outline}.
*
* @param outline The {@link Outline} to use.
* @param forEditor Whether this is for an editor or not.
*/
public static void addColumns(Outline outline, boolean forEditor) {
OutlineModel model = outline.getModel();
for (ModifierColumnID one : values()) {
if (one.shouldDisplay()) {
Column column = new Column(one.ordinal(), one.toString(), one.getToolTip(), one.getCell(forEditor));
if (!forEditor) {
column.setHeaderCell(new ListHeaderCell(true));
}
model.addColumn(column);
}
}
}
}