/*
* PCGenActionMap.java
* Copyright 2008 Connor Petty <cpmeister@users.sourceforge.net>
*
* This library 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 library 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Created on Aug 14, 2008, 3:51:27 PM
*/
package pcgen.gui2;
import gmgen.GMGenSystem;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import javax.swing.ActionMap;
import javax.swing.JOptionPane;
import pcgen.cdom.content.Sponsor;
import pcgen.core.Globals;
import pcgen.facade.core.AbilityFacade;
import pcgen.facade.core.CharacterFacade;
import pcgen.facade.core.ClassFacade;
import pcgen.facade.core.ItemFacade;
import pcgen.facade.core.KitFacade;
import pcgen.facade.core.RaceFacade;
import pcgen.facade.util.ReferenceFacade;
import pcgen.facade.core.SkillFacade;
import pcgen.facade.core.SourceSelectionFacade;
import pcgen.facade.core.SpellFacade;
import pcgen.facade.core.StatFacade;
import pcgen.facade.core.TemplateFacade;
import pcgen.facade.util.event.ReferenceEvent;
import pcgen.facade.util.event.ReferenceListener;
import pcgen.gui2.coreview.CoreViewFrame;
import pcgen.gui2.dialog.CalculatorDialog;
import pcgen.gui2.dialog.DataInstaller;
import pcgen.gui2.dialog.DebugDialog;
import pcgen.gui2.dialog.ExportDialog;
import pcgen.gui2.dialog.KitSelectionDialog;
import pcgen.gui2.dialog.PrintPreviewDialog;
import pcgen.gui2.solverview.SolverViewFrame;
import pcgen.gui2.tools.Icons;
import pcgen.gui2.tools.PCGenAction;
import pcgen.gui2.tools.Utility;
import pcgen.system.CharacterManager;
import pcgen.system.ConfigurationSettings;
import pcgen.system.LanguageBundle;
import pcgen.util.Logging;
/**
* The PCGenActionMap is the action map for the PCGenFrame, and as such
* hold all of the actions that the PCGenFrame uses. The purpose of this
* class is to hold all of the regarding actions for the menubar, toolbar,
* and accessory popup menus that may use them. Since all of the action
* handlers are Action objects they can be disabled or enabled to cause
* all buttons that use the actions to update themselves accordingly.
* @author Connor Petty <cpmeister@users.sourceforge.net>
*/
public final class PCGenActionMap extends ActionMap
{
//the File menu commands
public static final String FILE_COMMAND = "file";
public static final String NEW_COMMAND = FILE_COMMAND + ".new";
public static final String OPEN_COMMAND = FILE_COMMAND + ".open";
public static final String OPEN_RECENT_COMMAND = FILE_COMMAND + ".openrecent";
public static final String CLOSE_COMMAND = FILE_COMMAND + ".close";
public static final String CLOSEALL_COMMAND = FILE_COMMAND + ".closeall";
public static final String SAVE_COMMAND = FILE_COMMAND + ".save";
public static final String SAVEAS_COMMAND = FILE_COMMAND + ".saveas";
public static final String SAVEALL_COMMAND = FILE_COMMAND + ".saveall";
public static final String REVERT_COMMAND = FILE_COMMAND + ".reverttosaved";
public static final String PARTY_COMMAND = FILE_COMMAND + ".party";
public static final String OPEN_PARTY_COMMAND = PARTY_COMMAND + ".open";
public static final String OPEN_RECENT_PARTY_COMMAND = PARTY_COMMAND + ".openrecent";
public static final String CLOSE_PARTY_COMMAND = PARTY_COMMAND + ".close";
public static final String SAVE_PARTY_COMMAND = PARTY_COMMAND + ".save";
public static final String SAVEAS_PARTY_COMMAND = PARTY_COMMAND + ".saveas";
public static final String PRINT_COMMAND = FILE_COMMAND + ".print";
public static final String EXPORT_COMMAND = FILE_COMMAND + ".export";
public static final String EXIT_COMMAND = FILE_COMMAND + ".exit";
//the Edit menu commands
public static final String EDIT_COMMAND = "edit";
public static final String UNDO_COMMAND = EDIT_COMMAND + ".undo";
public static final String REDO_COMMAND = EDIT_COMMAND + ".redo";
public static final String ADD_KIT_COMMAND = EDIT_COMMAND + ".addkit";
public static final String GENERATE_COMMAND = EDIT_COMMAND + ".regenerate";
public static final String TEMP_BONUS_COMMAND = EDIT_COMMAND + ".tempbonus";
public static final String EQUIPMENTSET_COMMAND = EDIT_COMMAND + ".equipmentset";
//the Source menu commands
public static final String SOURCES_COMMAND = "sources";
public static final String SOURCES_LOAD_COMMAND = SOURCES_COMMAND + ".load";
public static final String SOURCES_LOAD_SELECT_COMMAND = SOURCES_COMMAND + ".select";
public static final String SOURCES_RELOAD_COMMAND = SOURCES_COMMAND + ".reload";
public static final String SOURCES_UNLOAD_COMMAND = SOURCES_COMMAND + ".unload";
public static final String INSTALL_DATA_COMMAND = SOURCES_COMMAND + ".installData";
//the tools menu commands
public static final String TOOLS_COMMAND = "tools";
public static final String FILTERS_COMMAND = TOOLS_COMMAND + ".filters";
public static final String KIT_FILTERS_COMMAND = FILTERS_COMMAND + ".kit";
public static final String RACE_FILTERS_COMMAND = FILTERS_COMMAND + ".race";
public static final String TEMPLATE_FILTERS_COMMAND = FILTERS_COMMAND + ".template";
public static final String CLASS_FILTERS_COMMAND = FILTERS_COMMAND + ".class";
public static final String ABILITY_FILTERS_COMMAND = FILTERS_COMMAND + ".ability";
public static final String SKILL_FILTERS_COMMAND = FILTERS_COMMAND + ".skill";
public static final String EQUIPMENT_FILTERS_COMMAND = FILTERS_COMMAND + ".equipment";
public static final String SPELL_FILTERS_COMMAND = FILTERS_COMMAND + ".spell";
public static final String GENERATORS_COMMAND = TOOLS_COMMAND + ".generators";
public static final String TREASURE_GENERATORS_COMMAND = GENERATORS_COMMAND + ".treasure";
public static final String RACE_GENERATORS_COMMAND = GENERATORS_COMMAND + ".race";
public static final String TEMPLATE_GENERATORS_COMMAND = GENERATORS_COMMAND + ".template";
public static final String CLASS_GENERATORS_COMMAND = GENERATORS_COMMAND + ".class";
public static final String STAT_GENERATORS_COMMAND = GENERATORS_COMMAND + ".stat";
public static final String ABILITY_GENERATORS_COMMAND = GENERATORS_COMMAND + ".ability";
public static final String SKILL_GENERATORS_COMMAND = GENERATORS_COMMAND + ".skill";
public static final String EQUIPMENT_GENERATORS_COMMAND = GENERATORS_COMMAND + ".equipment";
public static final String SPELL_GENERATORS_COMMAND = GENERATORS_COMMAND + ".spell";
public static final String PREFERENCES_COMMAND = TOOLS_COMMAND + ".preferences";
public static final String GMGEN_COMMAND = TOOLS_COMMAND + ".gmgen";
public static final String LOG_COMMAND = TOOLS_COMMAND + ".log";
public static final String LOGGING_LEVEL_COMMAND = TOOLS_COMMAND + ".loggingLevel";
public static final String CALCULATOR_COMMAND = TOOLS_COMMAND + ".calculator";
public static final String COREVIEW_COMMAND = TOOLS_COMMAND + ".coreview";
public static final String SOLVERVIEW_COMMAND = TOOLS_COMMAND + ".solverview";
//the help menu commands
public static final String HELP_COMMAND = "help";
public static final String HELP_CONTEXT_COMMAND = HELP_COMMAND + ".context";
public static final String HELP_DOCS_COMMAND = HELP_COMMAND + ".docs";
public static final String HELP_OGL_COMMAND = HELP_COMMAND + ".ogl";
public static final String HELP_SPONSORS_COMMAND = HELP_COMMAND + ".sponsors";
public static final String HELP_TIPOFTHEDAY_COMMAND = HELP_COMMAND + ".tod";
public static final String HELP_ABOUT_COMMAND = HELP_COMMAND + ".about";
private final PCGenFrame frame;
public static final String MNU_TOOLS = "mnuTools"; //$NON-NLS-1$
public static final String MNU_TOOLS_PREFERENCES = "mnuToolsPreferences"; //$NON-NLS-1$
public static final String MNU_EDIT = "mnuEdit"; //$NON-NLS-1$
public static final String MNU_FILE = "mnuFile"; //$NON-NLS-1$
public PCGenActionMap(PCGenFrame frame)
{
this.frame = frame;
initActions();
}
private void initActions()
{
put(FILE_COMMAND, new FileAction());
put(NEW_COMMAND, new NewAction());
put(OPEN_COMMAND, new OpenAction());
put(OPEN_RECENT_COMMAND, new OpenRecentAction());
put(CLOSE_COMMAND, new CloseAction());
put(CLOSEALL_COMMAND, new CloseAllAction());
put(SAVE_COMMAND, new SaveAction());
put(SAVEAS_COMMAND, new SaveAsAction());
put(SAVEALL_COMMAND, new SaveAllAction());
put(REVERT_COMMAND, new RevertAction());
put(PARTY_COMMAND, new PartyAction());
put(OPEN_PARTY_COMMAND, new OpenPartyAction());
put(OPEN_RECENT_PARTY_COMMAND, new OpenRecentAction());
put(CLOSE_PARTY_COMMAND, new ClosePartyAction());
put(SAVE_PARTY_COMMAND, new SavePartyAction());
put(SAVEAS_PARTY_COMMAND, new SaveAsPartyAction());
put(PRINT_COMMAND, new PrintAction());
put(EXPORT_COMMAND, new ExportAction());
put(EXIT_COMMAND, new ExitAction());
put(EDIT_COMMAND, new EditAction());
put(UNDO_COMMAND, new UndoAction());
put(REDO_COMMAND, new RedoAction());
put(ADD_KIT_COMMAND, new AddKitAction());
put(GENERATE_COMMAND, new GenerateAction());
put(EQUIPMENTSET_COMMAND, new EquipmentSetAction());
put(TEMP_BONUS_COMMAND, new TempBonusAction());
put(PREFERENCES_COMMAND, new PreferencesAction());
put(GMGEN_COMMAND, new GMGenAction());
put(LOG_COMMAND, new DebugAction());
put(LOGGING_LEVEL_COMMAND, new LoggingLevelAction());
put(CALCULATOR_COMMAND, new CalculatorAction());
put(COREVIEW_COMMAND, new CoreViewAction());
put(SOLVERVIEW_COMMAND, new SolverViewAction());
put(INSTALL_DATA_COMMAND, new InstallDataAction());
put(FILTERS_COMMAND, new FiltersAction());
put(KIT_FILTERS_COMMAND,
new DefaultFiltersAction("mnuToolsFiltersKit", KIT_FILTERS_COMMAND,
KitFacade.class));
put(RACE_FILTERS_COMMAND,
new DefaultFiltersAction("mnuToolsFiltersRace", RACE_FILTERS_COMMAND,
RaceFacade.class));
put(TEMPLATE_FILTERS_COMMAND,
new DefaultFiltersAction("mnuToolsFiltersTemplate",
TEMPLATE_FILTERS_COMMAND,
TemplateFacade.class));
put(CLASS_FILTERS_COMMAND,
new DefaultFiltersAction("mnuToolsFiltersClass",
CLASS_FILTERS_COMMAND,
ClassFacade.class));
put(ABILITY_FILTERS_COMMAND,
new DefaultFiltersAction("mnuToolsFiltersAbility",
ABILITY_FILTERS_COMMAND,
AbilityFacade.class));
put(SKILL_FILTERS_COMMAND,
new DefaultFiltersAction("mnuToolsFiltersSkill",
SKILL_FILTERS_COMMAND,
SkillFacade.class));
put(EQUIPMENT_FILTERS_COMMAND,
new DefaultFiltersAction("mnuToolsFiltersEquipment",
EQUIPMENT_FILTERS_COMMAND,
ItemFacade.class));
put(SPELL_FILTERS_COMMAND,
new DefaultFiltersAction("mnuToolsFiltersSpell",
SPELL_GENERATORS_COMMAND,
SpellFacade.class));
put(SOURCES_COMMAND, new SourcesAction());
put(SOURCES_LOAD_COMMAND, new LoadSourcesAction());
put(SOURCES_LOAD_SELECT_COMMAND, new LoadSourcesSelectAction());
put(SOURCES_RELOAD_COMMAND, new ReloadSourcesAction());
put(SOURCES_UNLOAD_COMMAND, new UnloadSourcesAction());
put(GENERATORS_COMMAND, new GeneratorsAction());
put(TREASURE_GENERATORS_COMMAND, new TreasureGeneratorsAction());
put(STAT_GENERATORS_COMMAND,
new DefaultGeneratorsAction("mnuToolsGeneratorsStat",
STAT_GENERATORS_COMMAND,
StatFacade.class));
put(RACE_GENERATORS_COMMAND,
new DefaultGeneratorsAction("mnuToolsGeneratorsRace",
RACE_GENERATORS_COMMAND,
RaceFacade.class));
put(TEMPLATE_GENERATORS_COMMAND,
new DefaultGeneratorsAction("mnuToolsGeneratorsTemplate",
TEMPLATE_GENERATORS_COMMAND,
TemplateFacade.class));
put(CLASS_GENERATORS_COMMAND,
new DefaultGeneratorsAction("mnuToolsGeneratorsClass",
CLASS_GENERATORS_COMMAND,
ClassFacade.class));
put(ABILITY_GENERATORS_COMMAND,
new DefaultGeneratorsAction("mnuToolsGeneratorsAbility",
ABILITY_GENERATORS_COMMAND,
AbilityFacade.class));
put(SKILL_GENERATORS_COMMAND,
new DefaultGeneratorsAction("mnuToolsGeneratorsSkill",
SKILL_GENERATORS_COMMAND,
SkillFacade.class));
put(EQUIPMENT_GENERATORS_COMMAND,
new DefaultGeneratorsAction("mnuToolsGeneratorsEquipment",
EQUIPMENT_GENERATORS_COMMAND,
ItemFacade.class));
put(SPELL_GENERATORS_COMMAND,
new DefaultGeneratorsAction("mnuToolsGeneratorsSpell",
SPELL_GENERATORS_COMMAND,
SpellFacade.class));
put(TOOLS_COMMAND, new ToolsAction());
put(HELP_COMMAND, new HelpAction());
put(HELP_CONTEXT_COMMAND, new ContextHelpAction());
put(HELP_DOCS_COMMAND, new DocsHelpAction());
put(HELP_OGL_COMMAND, new OGLHelpAction());
put(HELP_SPONSORS_COMMAND, new SponsorsHelpAction());
put(HELP_TIPOFTHEDAY_COMMAND, new TipOfTheDayHelpAction());
put(HELP_ABOUT_COMMAND, new AboutHelpAction());
}
private class EditAction extends PCGenAction
{
public EditAction()
{
super(MNU_EDIT);
}
}
private class UndoAction extends PCGenAction//extends CharacterAction
{
public UndoAction()
{
super("mnuEditUndo", UNDO_COMMAND, "shortcut Z");
setEnabled(false);
}
@Override
public void actionPerformed(ActionEvent e)
{
throw new UnsupportedOperationException("Not supported yet.");
}
}
private class RedoAction extends PCGenAction//extends CharacterAction
{
public RedoAction()
{
super("mnuEditRedo", REDO_COMMAND, "shortcut Y");
setEnabled(false);
}
@Override
public void actionPerformed(ActionEvent e)
{
throw new UnsupportedOperationException("Not supported yet.");
}
}
private class AddKitAction extends CharacterAction
{
public AddKitAction()
{
super("mnuEditAddKit");
setEnabled(false);
}
@Override
public void actionPerformed(ActionEvent e)
{
KitSelectionDialog kitDialog =
new KitSelectionDialog(frame, frame
.getSelectedCharacterRef().get());
Utility.setComponentRelativeLocation(frame, kitDialog);
kitDialog.setVisible(true);
}
}
private class GenerateAction extends PCGenAction //extends CharacterAction
{
public GenerateAction()
{
super("mnuEditGenerate");
setEnabled(false);
}
@Override
public void actionPerformed(ActionEvent e)
{
throw new UnsupportedOperationException("Not supported yet.");
}
}
private class EquipmentSetAction extends PCGenAction
{
public EquipmentSetAction()
{
super("mnuEditEquipmentSet");
}
}
private class TempBonusAction extends PCGenAction
{
public TempBonusAction()
{
super("mnuEditTempBonus");
}
}
private class PreferencesAction extends PCGenAction
{
public PreferencesAction()
{
super(MNU_TOOLS_PREFERENCES, Icons.Preferences16);
}
@Override
public void actionPerformed(ActionEvent e)
{
PCGenUIManager.displayPreferencesDialog();
}
}
private static class GMGenAction extends PCGenAction
{
public GMGenAction()
{
super("mnuToolsGMGen", GMGEN_COMMAND, null, Icons.gmgen_icon, GMGenSystem.APPLICATION_NAME);
}
@Override
public void actionPerformed(ActionEvent e)
{
PCGenUIManager.displayGmGen();
}
}
private class DebugAction extends PCGenAction
{
private DebugDialog dialog = null;
public DebugAction()
{
super("mnuToolsLog", LOG_COMMAND, "F10");
}
@Override
public void actionPerformed(ActionEvent e)
{
if (dialog == null)
{
dialog = new DebugDialog(frame);
}
Utility.setComponentRelativeLocation(frame, dialog);
dialog.setVisible(true);
}
}
private class CalculatorAction extends PCGenAction
{
private CalculatorDialog dialog = null;
public CalculatorAction()
{
super("mnuToolsCalculator", CALCULATOR_COMMAND, "F11");
}
@Override
public void actionPerformed(ActionEvent e)
{
if (dialog == null)
{
dialog = new CalculatorDialog(frame);
}
Utility.setComponentRelativeLocation(frame, dialog);
dialog.setVisible(true);
}
}
private class CoreViewAction extends CharacterAction
{
public CoreViewAction()
{
super("mnuToolsCoreView", COREVIEW_COMMAND, "Shift-F11");
}
@Override
public void actionPerformed(ActionEvent e)
{
CharacterFacade cf = frame.getSelectedCharacterRef().get();
CoreViewFrame cvf = new CoreViewFrame(frame, cf);
cvf.setVisible(true);
}
}
private class SolverViewAction extends CharacterAction
{
public SolverViewAction()
{
super("mnuToolsSolverView", SOLVERVIEW_COMMAND, "Ctrl-F11");
}
@Override
public void actionPerformed(ActionEvent e)
{
SolverViewFrame svf = new SolverViewFrame();
svf.setVisible(true);
}
}
private class LoggingLevelAction extends PCGenAction
{
public LoggingLevelAction()
{
super("mnuLoggingLevel");
}
}
/**
* The tools menu action to open the install data dialog.
*/
private class InstallDataAction extends PCGenAction
{
public InstallDataAction()
{
super("mnuSourcesInstallData");
}
@Override
public void actionPerformed(ActionEvent e)
{
DataInstaller di = new DataInstaller();
di.setVisible(true);
}
}
private class FileAction extends PCGenAction
{
public FileAction()
{
super(MNU_FILE);
}
}
private class NewAction extends PCGenAction
{
private ReferenceFacade<?> ref;
public NewAction()
{
super("mnuFileNew", NEW_COMMAND, "shortcut N", Icons.New16);
ref = frame.getLoadedDataSetRef();
ref.addReferenceListener(new SourceListener());
setEnabled(ref.get() != null);
}
@Override
public void actionPerformed(ActionEvent e)
{
frame.createNewCharacter();
}
private class SourceListener implements ReferenceListener<Object>
{
@Override
public void referenceChanged(ReferenceEvent<Object> e)
{
setEnabled(e.getNewReference() != null);
}
}
}
private class OpenAction extends PCGenAction
{
public OpenAction()
{
super("mnuFileOpen", OPEN_COMMAND, "shortcut O", Icons.Open16);
}
@Override
public void actionPerformed(ActionEvent e)
{
frame.showOpenCharacterChooser();
}
}
private class OpenRecentAction extends PCGenAction
{
public OpenRecentAction()
{
super("mnuOpenRecent");
}
}
private class CloseAction extends CharacterAction
{
public CloseAction()
{
super("mnuFileClose", CLOSE_COMMAND, "shortcut W", Icons.Close16);
}
@Override
public void actionPerformed(ActionEvent e)
{
frame.closeCharacter(frame.getSelectedCharacterRef().get());
}
}
private class CloseAllAction extends CharacterAction
{
public CloseAllAction()
{
super("mnuFileCloseAll", CLOSEALL_COMMAND, Icons.CloseAll16);
}
@Override
public void actionPerformed(ActionEvent e)
{
frame.closeAllCharacters();
}
}
private class SaveAction extends PCGenAction implements ReferenceListener<CharacterFacade>
{
private FileRefListener fileListener = new FileRefListener();
public SaveAction()
{
super("mnuFileSave", SAVE_COMMAND, "shortcut S", Icons.Save16);
ReferenceFacade<CharacterFacade> ref = frame.getSelectedCharacterRef();
ref.addReferenceListener(this);
checkEnabled(ref.get());
}
@Override
public void actionPerformed(ActionEvent e)
{
final CharacterFacade pc = frame.getSelectedCharacterRef().get();
if (pc == null)
{
return;
}
frame.saveCharacter(pc);
}
@Override
public void referenceChanged(ReferenceEvent<CharacterFacade> e)
{
CharacterFacade oldRef = e.getOldReference();
if (oldRef != null)
{
oldRef.getFileRef().removeReferenceListener(fileListener);
}
checkEnabled(e.getNewReference());
}
private void checkEnabled(CharacterFacade character)
{
if (character != null)
{
ReferenceFacade<File> file = character.getFileRef();
file.addReferenceListener(fileListener);
setEnabled(file.get() != null);
}
else
{
setEnabled(false);
}
}
private class FileRefListener implements ReferenceListener<File>
{
@Override
public void referenceChanged(ReferenceEvent<File> e)
{
setEnabled(e.getNewReference() != null);
}
}
}
private class SaveAsAction extends CharacterAction
{
public SaveAsAction()
{
super("mnuFileSaveAs", SAVEAS_COMMAND, "shift-shortcut S",
Icons.SaveAs16);
}
@Override
public void actionPerformed(ActionEvent e)
{
frame.showSaveCharacterChooser(frame.getSelectedCharacterRef().get());
}
}
private class SaveAllAction extends CharacterAction
{
public SaveAllAction()
{
super("mnuFileSaveAll", SAVEALL_COMMAND, Icons.SaveAll16);
}
@Override
public void actionPerformed(ActionEvent e)
{
frame.saveAllCharacters();
}
}
private class RevertAction extends CharacterAction
{
public RevertAction()
{
super("mnuFileRevertToSaved", REVERT_COMMAND, "shortcut R");
}
@Override
public void actionPerformed(ActionEvent e)
{
frame.revertCharacter(frame.getSelectedCharacterRef().get());
}
}
private class PartyAction extends PCGenAction
{
public PartyAction()
{
super("mnuFileParty");
}
}
private class OpenPartyAction extends PCGenAction
{
public OpenPartyAction()
{
super("mnuFilePartyOpen", OPEN_PARTY_COMMAND, Icons.Open16);
}
@Override
public void actionPerformed(ActionEvent e)
{
frame.showOpenPartyChooser();
}
}
private class ClosePartyAction extends PCGenAction
{
public ClosePartyAction()
{
super("mnuFilePartyClose", CLOSE_PARTY_COMMAND, Icons.Close16);
}
@Override
public void actionPerformed(ActionEvent e)
{
frame.closeAllCharacters();
}
}
private class SavePartyAction extends CharacterAction
{
public SavePartyAction()
{
super("mnuFilePartySave", SAVE_PARTY_COMMAND, Icons.Save16);
}
@Override
public void actionPerformed(ActionEvent e)
{
if (frame.saveAllCharacters() && !CharacterManager.saveCurrentParty())
{
frame.showSavePartyChooser();
}
}
}
private class SaveAsPartyAction extends CharacterAction
{
public SaveAsPartyAction()
{
super("mnuFilePartySaveAs", SAVEAS_PARTY_COMMAND, Icons.SaveAs16);
}
@Override
public void actionPerformed(ActionEvent e)
{
frame.showSavePartyChooser();
}
}
private class PrintAction extends CharacterAction
{
public PrintAction()
{
super("mnuFilePrint", PRINT_COMMAND, "shortcut P", Icons.Print16);
}
@Override
public void actionPerformed(ActionEvent e)
{
PrintPreviewDialog.showPrintPreviewDialog(frame);
}
}
private class ExportAction extends CharacterAction
{
public ExportAction()
{
super("mnuFileExport", EXPORT_COMMAND, "shift-shortcut P",
Icons.Export16);
}
@Override
public void actionPerformed(ActionEvent e)
{
ExportDialog.showExportDialog(frame);
}
}
private class ExitAction extends PCGenAction
{
public ExitAction()
{
super("mnuFileExit", EXIT_COMMAND, "shortcut Q");
}
@Override
public void actionPerformed(ActionEvent e)
{
PCGenUIManager.closePCGen();
}
}
private class SourcesAction extends PCGenAction
{
public SourcesAction()
{
super("mnuSources");
}
@Override
public void actionPerformed(ActionEvent e)
{
throw new UnsupportedOperationException("Not supported yet.");
}
}
private class LoadSourcesAction extends PCGenAction
{
public LoadSourcesAction()
{
super("mnuSourcesLoad");
}
}
private class LoadSourcesSelectAction extends PCGenAction
{
public LoadSourcesSelectAction()
{
super("mnuSourcesLoadSelect", SOURCES_LOAD_COMMAND, "shortcut L");
}
@Override
public void actionPerformed(ActionEvent e)
{
frame.showSourceSelectionDialog();
}
}
private class ReloadSourcesAction extends PCGenAction implements ReferenceListener<SourceSelectionFacade>
{
public ReloadSourcesAction()
{
super("mnuSourcesReload", SOURCES_RELOAD_COMMAND, "shift-shortcut R");
ReferenceFacade<SourceSelectionFacade> currentSourceSelectionRef =
frame.getCurrentSourceSelectionRef();
currentSourceSelectionRef.addReferenceListener(this);
checkEnabled(currentSourceSelectionRef.get());
}
@Override
public void actionPerformed(ActionEvent e)
{
SourceSelectionFacade sources =
frame.getCurrentSourceSelectionRef().get();
if (sources != null)
{
frame.unloadSources();
frame.loadSourceSelection(sources);
}
}
@Override
public void referenceChanged(ReferenceEvent<SourceSelectionFacade> e)
{
checkEnabled(e.getNewReference());
}
private void checkEnabled(SourceSelectionFacade sources)
{
setEnabled(sources != null && !sources.getCampaigns().isEmpty());
}
}
private class UnloadSourcesAction extends PCGenAction implements ReferenceListener<SourceSelectionFacade>
{
public UnloadSourcesAction()
{
super("mnuSourcesUnload", SOURCES_UNLOAD_COMMAND, "shortcut U");
ReferenceFacade<SourceSelectionFacade> currentSourceSelectionRef =
frame.getCurrentSourceSelectionRef();
currentSourceSelectionRef.addReferenceListener(this);
checkEnabled(currentSourceSelectionRef.get());
}
@Override
public void actionPerformed(ActionEvent e)
{
frame.unloadSources();
}
@Override
public void referenceChanged(ReferenceEvent<SourceSelectionFacade> e)
{
checkEnabled(e.getNewReference());
}
private void checkEnabled(SourceSelectionFacade sources)
{
setEnabled(sources != null && !sources.getCampaigns().isEmpty());
}
}
private class GeneratorsAction extends PCGenAction
{
public GeneratorsAction()
{
super("mnuToolsGenerators");
setEnabled(false);
}
}
private class FiltersAction extends PCGenAction
{
public FiltersAction()
{
super("mnuToolsFilters");
setEnabled(false);
}
@Override
public void actionPerformed(ActionEvent e)
{
throw new UnsupportedOperationException("Not supported yet.");
}
}
private class TreasureGeneratorsAction extends PCGenAction
{
public TreasureGeneratorsAction()
{
super("mnuToolsGeneratorsTreasure", TREASURE_GENERATORS_COMMAND,
"shortcut T");
}
@Override
public void actionPerformed(ActionEvent e)
{
throw new UnsupportedOperationException("Not supported yet.");
}
}
private class ToolsAction extends PCGenAction
{
public ToolsAction()
{
super(MNU_TOOLS);
}
@Override
public void actionPerformed(ActionEvent e)
{
throw new UnsupportedOperationException("Not supported yet.");
}
}
private class HelpAction extends PCGenAction
{
public HelpAction()
{
super("mnuHelp", HELP_COMMAND);
}
}
private class ContextHelpAction extends PCGenAction
{
public ContextHelpAction()
{
super("mnuHelpContext", HELP_CONTEXT_COMMAND, Icons.ContextualHelp16);
setEnabled(false);
}
@Override
public void actionPerformed(ActionEvent e)
{
throw new UnsupportedOperationException("Not supported yet.");
}
}
private class DocsHelpAction extends PCGenAction
{
public DocsHelpAction()
{
super("mnuHelpDocumentation", HELP_DOCS_COMMAND, "F1", Icons.Help16);
}
@Override
public void actionPerformed(ActionEvent e)
{
try
{
Utility.viewInBrowser(new File(ConfigurationSettings
.getDocsDir(), "index.html"));
}
catch (IOException ex)
{
Logging.errorPrint("Could not open docs in external browser", ex);
JOptionPane.showMessageDialog(frame,
LanguageBundle.getString("in_menuDocsNotOpenMsg"),
LanguageBundle.getString("in_menuDocsNotOpenTitle"),
JOptionPane.ERROR_MESSAGE);
}
}
}
private class OGLHelpAction extends PCGenAction
{
public OGLHelpAction()
{
super("mnuHelpOGL", HELP_OGL_COMMAND);
}
@Override
public void actionPerformed(ActionEvent e)
{
frame.showOGLDialog();
}
}
private class SponsorsHelpAction extends PCGenAction
{
public SponsorsHelpAction()
{
super("mnuHelpSponsors", HELP_SPONSORS_COMMAND);
}
@Override
public void actionPerformed(ActionEvent e)
{
Collection<Sponsor> sponsors = Globals.getGlobalContext().getReferenceContext().getConstructedCDOMObjects(Sponsor.class);
if (sponsors.size() > 1)
{
frame.showSponsorsDialog();
return;
}
JOptionPane.showMessageDialog(frame,
"There are no sponsors",
"Missing Sponsors",
JOptionPane.INFORMATION_MESSAGE);
}
}
private class TipOfTheDayHelpAction extends PCGenAction
{
public TipOfTheDayHelpAction()
{
super("mnuHelpTipOfTheDay", HELP_TIPOFTHEDAY_COMMAND,
Icons.TipOfTheDay16);
}
@Override
public void actionPerformed(ActionEvent e)
{
frame.showTipsOfTheDay();
}
}
private class AboutHelpAction extends PCGenAction
{
public AboutHelpAction()
{
super("mnuHelpAbout", HELP_ABOUT_COMMAND, Icons.About16);
}
@Override
public void actionPerformed(ActionEvent e)
{
frame.showAboutDialog();
}
}
private class DefaultGeneratorsAction extends PCGenAction
{
private final Class<?> generatorClass;
public DefaultGeneratorsAction(String prop, String command,
Class<?> generatorClass)
{
super(prop, command);
this.generatorClass = generatorClass;
}
@Override
public void actionPerformed(ActionEvent e)
{
throw new UnsupportedOperationException("Not supported yet.");
}
}
private class DefaultFiltersAction extends PCGenAction
{
private final Class<?> filterClass;
public DefaultFiltersAction(String prop, String command,
Class<?> filterClass)
{
super(prop, command);
this.filterClass = filterClass;
}
@Override
public void actionPerformed(ActionEvent e)
{
throw new UnsupportedOperationException("Not supported yet.");
}
}
private abstract class CharacterAction extends PCGenAction
{
private ReferenceFacade<?> ref;
public CharacterAction(String prop)
{
this(prop, null, null, null);
}
public CharacterAction(String prop, Icons icon)
{
this(prop, null, null, icon);
}
public CharacterAction(String prop, String command, String accelerator)
{
this(prop, command, accelerator, null);
}
public CharacterAction(String prop, String command, Icons icon)
{
this(prop, command, null, icon);
}
public CharacterAction(String prop, String command, String accelerator, Icons icon)
{
super(prop, command, accelerator, icon);
ref = frame.getSelectedCharacterRef();
ref.addReferenceListener(new CharacterListener());
setEnabled(ref.get() != null);
}
private class CharacterListener implements ReferenceListener<Object>
{
@Override
public void referenceChanged(ReferenceEvent<Object> e)
{
setEnabled(e.getNewReference() != null);
}
}
}
}