/*
* 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.edit;
import com.trollworks.gcs.advantage.Advantage;
import com.trollworks.gcs.advantage.AdvantageOutline;
import com.trollworks.gcs.character.GURPSCharacter;
import com.trollworks.gcs.equipment.Equipment;
import com.trollworks.gcs.equipment.EquipmentOutline;
import com.trollworks.gcs.equipment.EquipmentState;
import com.trollworks.gcs.widgets.outline.ListOutline;
import com.trollworks.gcs.widgets.outline.MultipleRowUndo;
import com.trollworks.gcs.widgets.outline.RowUndo;
import com.trollworks.toolkit.annotation.Localize;
import com.trollworks.toolkit.collections.FilteredIterator;
import com.trollworks.toolkit.ui.menu.Command;
import com.trollworks.toolkit.ui.widget.outline.OutlineProxy;
import com.trollworks.toolkit.utility.Localization;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
/** Provides the "Rotate State" command. */
public class RotateStateCommand extends Command {
@Localize("Rotate State")
private static String TITLE;
static {
Localization.initialize();
}
/** The action command this command will issue. */
public static final String CMD_ROTATE_STATE = "RotateState"; //$NON-NLS-1$
/** The singleton {@link RotateStateCommand}. */
public static final RotateStateCommand INSTANCE = new RotateStateCommand();
private RotateStateCommand() {
super(TITLE, CMD_ROTATE_STATE, KeyEvent.VK_QUOTE);
}
@Override
public void adjust() {
Component focus = getFocusOwner();
if (focus instanceof OutlineProxy) {
focus = ((OutlineProxy) focus).getRealOutline();
}
if (focus instanceof EquipmentOutline || focus instanceof AdvantageOutline) {
ListOutline outline = (ListOutline) focus;
setEnabled(outline.getDataFile() instanceof GURPSCharacter && outline.getModel().hasSelection());
} else {
setEnabled(false);
}
}
@SuppressWarnings("unused")
@Override
public void actionPerformed(ActionEvent event) {
Component focus = getFocusOwner();
if (focus instanceof OutlineProxy) {
focus = ((OutlineProxy) focus).getRealOutline();
}
ArrayList<RowUndo> undos = new ArrayList<RowUndo>();
if (focus instanceof EquipmentOutline) {
EquipmentOutline outline = (EquipmentOutline) focus;
for (Equipment equipment : new FilteredIterator<Equipment>(outline.getModel().getSelectionAsList(), Equipment.class)) {
RowUndo undo = new RowUndo(equipment);
EquipmentState[] values = EquipmentState.values();
int index = equipment.getState().ordinal() - 1;
if (index < 0) {
index = values.length - 1;
}
equipment.setState(values[index]);
if (undo.finish()) {
undos.add(undo);
}
}
} else if (focus instanceof AdvantageOutline) {
AdvantageOutline outline = (AdvantageOutline) focus;
for (Advantage adq : new FilteredIterator<Advantage>(outline.getModel().getSelectionAsList(), Advantage.class)) {
RowUndo undo = new RowUndo(adq);
adq.setEnabled(!adq.isSelfEnabled());
if (undo.finish()) {
undos.add(undo);
}
}
}
if (!undos.isEmpty()) {
((ListOutline) focus).repaintSelection();
new MultipleRowUndo(undos);
}
}
}