/*
* Copyright (c) 2009 Tom Parker <thpr@users.sourceforge.net>
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
package pcgen.gui2.converter.panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.List;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SpringLayout;
import pcgen.cdom.base.CDOMObject;
import pcgen.cdom.enumeration.ObjectKey;
import pcgen.core.GameMode;
import pcgen.core.Globals;
import pcgen.core.SettingsHandler;
import pcgen.core.SystemCollections;
import pcgen.gui2.converter.event.ProgressEvent;
import pcgen.gui2.util.JComboBoxEx;
import pcgen.persistence.CampaignFileLoader;
import pcgen.system.ConfigurationSettings;
import pcgen.system.PCGenSettings;
import pcgen.util.Logging;
public class GameModePanel extends ConvertSubPanel
{
JComboBoxEx gameModeCombo;
private SpringLayout layout = new SpringLayout();
private final CampaignFileLoader campaignFileLoader;
/**
* Create a new instance of GameModePanel
* @param campaignFileLoader The loader to read in campaigns
*/
public GameModePanel(CampaignFileLoader campaignFileLoader)
{
this.campaignFileLoader = campaignFileLoader;
}
@Override
public boolean autoAdvance(CDOMObject pc)
{
return false;
}
/* (non-Javadoc)
* @see pcgen.gui2.converter.panel.ConvertSubPanel#returnAllowed()
*/
@Override
public boolean returnAllowed()
{
return true;
}
@Override
public boolean performAnalysis(CDOMObject pc)
{
File sourceDir = pc.get(ObjectKey.DIRECTORY);
String name = sourceDir.getAbsolutePath();
if (!name.equals(ConfigurationSettings.getPccFilesDir())
&& !name.equals(PCGenSettings.getVendorDataDir())
&& !name.equals(PCGenSettings.getHomebrewDataDir()))
{
// User has selected another path - we need to load the sources from there.
Logging.log(Logging.INFO, "Loading campaigns from " + sourceDir);
Globals.clearCampaignsForRefresh();
campaignFileLoader.setAlternateSourceFolder(sourceDir);
campaignFileLoader.execute();
}
GameMode gameMode = pc.get(ObjectKey.GAME_MODE);
if (gameMode != null)
{
SettingsHandler.setGame(gameMode.getName());
}
// Globals.emptyLists();
Globals.sortPObjectListByName(Globals.getCampaignList());
Globals.createEmptyRace();
return saveGameMode(pc);
}
private boolean saveGameMode(CDOMObject pc)
{
boolean advance = pc.get(ObjectKey.GAME_MODE) != null;
if (advance)
{
fireProgressEvent(ProgressEvent.ALLOWED);
}
else
{
fireProgressEvent(ProgressEvent.NOT_ALLOWED);
}
return advance;
}
private void getSelection(CDOMObject pc)
{
GameMode gameMode = (GameMode) gameModeCombo.getSelectedItem();
pc.put(ObjectKey.GAME_MODE, gameMode);
PCGenSettings context = PCGenSettings.getInstance();
context.setProperty(PCGenSettings.CONVERT_GAMEMODE, gameMode.getName());
}
@Override
public void setupDisplay(JPanel panel, final CDOMObject pc)
{
panel.setLayout(layout);
JLabel introLabel =
new JLabel("Please select the Game Mode to Convert:");
panel.add(introLabel);
layout.putConstraint(SpringLayout.NORTH, introLabel, 50,
SpringLayout.NORTH, panel);
layout.putConstraint(SpringLayout.WEST, introLabel, 25,
SpringLayout.WEST, panel);
List<GameMode> games = SystemCollections.getUnmodifiableGameModeList();
gameModeCombo = new JComboBoxEx(games.toArray());
gameModeCombo.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
getSelection(pc);
saveGameMode(pc);
}
});
PCGenSettings context = PCGenSettings.getInstance();
SettingsHandler.setGame(context
.initProperty(PCGenSettings.CONVERT_GAMEMODE, SettingsHandler
.getGame().getName()));
GameMode currGame = SettingsHandler.getGame();
if (pc.get(ObjectKey.GAME_MODE) != null)
{
currGame = pc.get(ObjectKey.GAME_MODE);
}
gameModeCombo.setSelectedItem(currGame);
getSelection(pc);
saveGameMode(pc);
panel.add(gameModeCombo);
layout.putConstraint(SpringLayout.NORTH, gameModeCombo, 20,
SpringLayout.SOUTH, introLabel);
layout.putConstraint(SpringLayout.WEST, gameModeCombo, 25,
SpringLayout.WEST, panel);
}
}