Package de.ailis.xadrian.actions

Source Code of de.ailis.xadrian.actions.ChangeSectorAction

/*
* Copyright (C) 2010-2012 Klaus Reimer <k@ailis.de>
* See LICENSE.TXT for licensing information.
*/
package de.ailis.xadrian.actions;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import de.ailis.xadrian.data.Sector;
import de.ailis.xadrian.dialogs.SelectSectorDialog;
import de.ailis.xadrian.interfaces.GameProvider;
import de.ailis.xadrian.interfaces.SectorProvider;
import de.ailis.xadrian.interfaces.StateProvider;
import de.ailis.xadrian.listeners.StateListener;
import de.ailis.xadrian.resources.Icons;
import de.ailis.xadrian.support.BaseAction;
import de.ailis.xadrian.support.ModalDialog.Result;

/**
* Changes the sector of the complex.
*
* @author Klaus Reimer (k@ailis.de)
*/
public class ChangeSectorAction extends BaseAction implements StateListener
{
    /** Serial version UID */
    private static final long serialVersionUID = -5290504312967776304L;

    /** The game provider. */
    private final GameProvider gameProvider;

    /** The complex provider */
    private final SectorProvider sectorProvider;

    /**
     * Constructor
     *
     * @param gameProvider
     *            The game provider.
     * @param sectorProvider
     *            The sector provider.
     * @param context
     *            The context name (for having different action settings per
     *            context)
     */
    public ChangeSectorAction(final GameProvider gameProvider,
        final SectorProvider sectorProvider, final String context)
    {
        super("changeSector", Icons.SECTOR, context);
        if (gameProvider == null)
            throw new IllegalArgumentException("gameProvider must be set");
        this.gameProvider = gameProvider;
        this.sectorProvider = sectorProvider;
        setEnabled(sectorProvider.canChangeSector());
        if (sectorProvider instanceof StateProvider)
            ((StateProvider) sectorProvider).addStateListener(this);
    }

    /**
     * @see ActionListener#actionPerformed(ActionEvent)
     */
    @Override
    public void actionPerformed(final ActionEvent e)
    {
        final Sector sector = this.sectorProvider.getSector();
        final SelectSectorDialog dialog =
            this.gameProvider.getGame().getSelectSectorDialog();
        dialog.setSelected(sector);
        if (dialog.open() == Result.OK)
            this.sectorProvider.setSector(dialog.getSelected());
    }

    /**
     * @see de.ailis.xadrian.listeners.StateListener#stateChanged()
     */
    @Override
    public void stateChanged()
    {
        setEnabled(this.sectorProvider.canChangeSector());
    }
}
TOP

Related Classes of de.ailis.xadrian.actions.ChangeSectorAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.