/*
* 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.menu.item;
import com.trollworks.gcs.character.SheetDockable;
import com.trollworks.gcs.common.DataFile;
import com.trollworks.gcs.skill.Skill;
import com.trollworks.gcs.skill.SkillsDockable;
import com.trollworks.gcs.skill.Technique;
import com.trollworks.gcs.template.TemplateDockable;
import com.trollworks.gcs.widgets.outline.ListOutline;
import com.trollworks.toolkit.annotation.Localize;
import com.trollworks.toolkit.ui.menu.Command;
import com.trollworks.toolkit.utility.Localization;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
/** Provides the "New Skill" command. */
public class NewSkillCommand extends Command {
@Localize("New Skill")
@Localize(locale = "de", value = "Neue Fertigkeit")
@Localize(locale = "ru", value = "Новое умение")
@Localize(locale = "es", value = "Nueva habilidad")
private static String SKILL;
@Localize("New Skill Container")
@Localize(locale = "de", value = "Neuer Fertigkeiten-Container")
@Localize(locale = "ru", value = "Новый контейнер умения")
@Localize(locale = "es", value = "Nuevo Contenedor de habilidades")
private static String SKILL_CONTAINER;
@Localize("New Technique")
@Localize(locale = "de", value = "Neue Technik")
@Localize(locale = "ru", value = "Новая техника")
@Localize(locale = "es", value = "Nueva Técnica")
private static String TECHNIQUE;
static {
Localization.initialize();
}
/** The action command this command will issue. */
public static final String CMD_NEW_SKILL = "NewSkill"; //$NON-NLS-1$
/** The action command this command will issue. */
public static final String CMD_NEW_SKILL_CONTAINER = "NewSkillContainer"; //$NON-NLS-1$
/** The action command this command will issue. */
public static final String CMD_NEW_TECHNIQUE = "NewTechnique"; //$NON-NLS-1$
/** The "New Skill" command. */
public static final NewSkillCommand INSTANCE = new NewSkillCommand(false, false, SKILL, CMD_NEW_SKILL, KeyEvent.VK_K, COMMAND_MODIFIER);
/** The "New Skill Container" command. */
public static final NewSkillCommand CONTAINER_INSTANCE = new NewSkillCommand(true, false, SKILL_CONTAINER, CMD_NEW_SKILL_CONTAINER, KeyEvent.VK_K, SHIFTED_COMMAND_MODIFIER);
/** The "New Technique" command. */
public static final NewSkillCommand TECHNIQUE_INSTANCE = new NewSkillCommand(false, true, TECHNIQUE, CMD_NEW_TECHNIQUE, KeyEvent.VK_T, COMMAND_MODIFIER);
private boolean mContainer;
private boolean mTechnique;
private NewSkillCommand(boolean container, boolean isTechnique, String title, String cmd, int keyCode, int modifiers) {
super(title, cmd, keyCode, modifiers);
mContainer = container;
mTechnique = isTechnique;
}
@Override
public void adjust() {
SkillsDockable skills = getTarget(SkillsDockable.class);
if (skills != null) {
setEnabled(!skills.getOutline().getModel().isLocked());
} else {
SheetDockable sheet = getTarget(SheetDockable.class);
if (sheet != null) {
setEnabled(true);
} else {
setEnabled(getTarget(TemplateDockable.class) != null);
}
}
}
@Override
public void actionPerformed(ActionEvent event) {
ListOutline outline;
DataFile dataFile;
SkillsDockable skills = getTarget(SkillsDockable.class);
if (skills != null) {
dataFile = skills.getDataFile();
outline = skills.getOutline();
if (outline.getModel().isLocked()) {
return;
}
} else {
SheetDockable sheet = getTarget(SheetDockable.class);
if (sheet != null) {
dataFile = sheet.getDataFile();
outline = sheet.getSheet().getSkillOutline();
} else {
TemplateDockable template = getTarget(TemplateDockable.class);
if (template != null) {
dataFile = template.getDataFile();
outline = template.getTemplate().getSkillOutline();
} else {
return;
}
}
}
Skill skill = mTechnique ? new Technique(dataFile) : new Skill(dataFile, mContainer);
outline.addRow(skill, getTitle(), false);
outline.getModel().select(skill, false);
outline.scrollSelectionIntoView();
outline.openDetailEditor(true);
}
}