From: <cpm...@us...> - 2011-09-30 00:18:29
|
Revision: 15417 http://pcgen.svn.sourceforge.net/pcgen/?rev=15417&view=rev Author: cpmeister Date: 2011-09-30 00:18:23 +0000 (Fri, 30 Sep 2011) Log Message: ----------- UI Update: - added close buttons to character tabs - implemented proper saving functionality when closing characters - changed info title on AdvancedSourceSelectionPanel from "Info" to "Campaign Info" Modified Paths: -------------- sandbox/uisync/code/src/java/pcgen/gui2/CharacterTabs.java sandbox/uisync/code/src/java/pcgen/gui2/PCGenActionMap.java sandbox/uisync/code/src/java/pcgen/gui2/PCGenFrame.java sandbox/uisync/code/src/java/pcgen/gui2/sources/AdvancedSourceSelectionPanel.java sandbox/uisync/code/src/java/pcgen/gui2/util/SharedTabPane.java Added Paths: ----------- sandbox/uisync/code/src/java/pcgen/resources/images/XButton_Click.gif sandbox/uisync/code/src/java/pcgen/resources/images/XButton_Roll.gif sandbox/uisync/code/src/java/pcgen/resources/images/XButton_Stat.gif Modified: sandbox/uisync/code/src/java/pcgen/gui2/CharacterTabs.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/CharacterTabs.java 2011-09-29 02:20:46 UTC (rev 15416) +++ sandbox/uisync/code/src/java/pcgen/gui2/CharacterTabs.java 2011-09-30 00:18:23 UTC (rev 15417) @@ -20,12 +20,20 @@ */ package pcgen.gui2; +import java.awt.FlowLayout; +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.swing.Icon; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JTabbedPane; import javax.swing.event.ChangeEvent; @@ -39,6 +47,7 @@ import pcgen.core.facade.event.ReferenceListener; import pcgen.core.facade.util.ListFacade; import pcgen.gui2.tabs.InfoTabbedPane; +import pcgen.gui2.tools.Icons; import pcgen.gui2.util.SharedTabPane; import pcgen.system.CharacterManager; @@ -53,7 +62,7 @@ private final PCGenFrame frame; //This holds the list of characters as well as the order in which they are displayed private final List<CharacterFacade> characters; - private final Map<CharacterFacade, TabNameHandler> listenerMap; + private final Map<CharacterFacade, TabLabel> listenerMap; private final InfoTabbedPane infoTabbedPane; private final JPopupMenu popupMenu; @@ -62,7 +71,7 @@ this.frame = frame; this.characters = new ArrayList<CharacterFacade>(); this.infoTabbedPane = new InfoTabbedPane(); - this.listenerMap = new HashMap<CharacterFacade, TabNameHandler>(); + this.listenerMap = new HashMap<CharacterFacade, TabLabel>(); this.popupMenu = new JPopupMenu(); initComponents(); } @@ -87,16 +96,9 @@ private void addCharacter(CharacterFacade character) { characters.add(character); - ReferenceFacade<String> tabNameRef = character.getTabNameRef(); - if (StringUtils.isNotEmpty(tabNameRef.getReference())) - { - addTab(tabNameRef.getReference()); - } - else - { - addTab(character.getNameRef().getReference()); - } - listenerMap.put(character, new TabNameHandler(character)); + TabLabel tabLabel = new TabLabel(frame, character); + addTab(tabLabel); + listenerMap.put(character, tabLabel); } private void removeCharacter(CharacterFacade character) @@ -142,8 +144,7 @@ removeAll(); for (CharacterFacade character : characters) { - TabNameHandler listener = listenerMap.remove(character); - character.getTabNameRef().removeReferenceListener(listener); + listenerMap.remove(character).removeListeners(); } characters.clear(); for (CharacterFacade character : (ListFacade<CharacterFacade>) e.getSource()) @@ -153,23 +154,60 @@ infoTabbedPane.clearStateMap(); } - private class TabNameHandler implements ReferenceListener<String> + private static class TabLabel extends JPanel implements ActionListener, ReferenceListener<String> { + private static final Icon DEFAULT_ICON = Icons.createImageIcon("XButton_Stat.gif"); + private static final Icon ROLLOVER_ICON = Icons.createImageIcon("XButton_Roll.gif"); + private static final Icon PRESSED_ICON = Icons.createImageIcon("XButton_Click.gif"); + private JLabel titleLabel; + private JButton closeButton; private CharacterFacade character; private ReferenceFacade<String> tabNameRef; private ReferenceFacade<String> nameRef; + private PCGenFrame frame; - public TabNameHandler(CharacterFacade character) + public TabLabel(PCGenFrame frame, CharacterFacade character) { + super(new FlowLayout(FlowLayout.CENTER, 5, 2)); + this.frame = frame; this.character = character; this.tabNameRef = character.getTabNameRef(); this.nameRef = character.getNameRef(); + initComponents(); + + closeButton.addActionListener(this); tabNameRef.addReferenceListener(this); nameRef.addReferenceListener(this); } + private void initComponents() + { + if (StringUtils.isNotEmpty(tabNameRef.getReference())) + { + titleLabel = new JLabel(tabNameRef.getReference()); + } + else + { + titleLabel = new JLabel(nameRef.getReference()); + } + add(titleLabel); + + closeButton = new JButton(); + closeButton.setMargin(new Insets(0, 0, 0, 0)); + closeButton.setFocusable(false); + closeButton.setBorderPainted(false); + closeButton.setContentAreaFilled(false); + closeButton.setRolloverEnabled(true); + closeButton.setRolloverIcon(ROLLOVER_ICON); + closeButton.setIcon(DEFAULT_ICON); + closeButton.setPressedIcon(PRESSED_ICON); + add(closeButton); + + setOpaque(false); + } + public void removeListeners() { tabNameRef.removeReferenceListener(this); @@ -182,22 +220,27 @@ { if (StringUtils.isEmpty(tabNameRef.getReference())) { - setTitleAt(characters.indexOf(character), e.getNewReference()); + titleLabel.setText(e.getNewReference()); } } else { if (StringUtils.isNotEmpty(e.getNewReference())) { - setTitleAt(characters.indexOf(character), e.getNewReference()); + titleLabel.setText(e.getNewReference()); } else { - setTitleAt(characters.indexOf(character), nameRef.getReference()); + titleLabel.setText(nameRef.getReference()); } } } + public void actionPerformed(ActionEvent e) + { + frame.closeCharacter(character); + } + } private class PopupListener extends MouseAdapter Modified: sandbox/uisync/code/src/java/pcgen/gui2/PCGenActionMap.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/PCGenActionMap.java 2011-09-29 02:20:46 UTC (rev 15416) +++ sandbox/uisync/code/src/java/pcgen/gui2/PCGenActionMap.java 2011-09-30 00:18:23 UTC (rev 15417) @@ -352,6 +352,7 @@ { private DebugDialog dialog = null; + public ConsoleAction() { super("mnuToolsConsole"); @@ -360,7 +361,7 @@ @Override public void actionPerformed(ActionEvent e) { - if(dialog == null) + if (dialog == null) { dialog = new DebugDialog(frame); } @@ -448,8 +449,7 @@ @Override public void actionPerformed(ActionEvent e) { - //TODO: handle user propting for saving the character - CharacterManager.removeCharacter(frame.getSelectedCharacterRef().getReference()); + frame.closeCharacter(frame.getSelectedCharacterRef().getReference()); } } @@ -465,8 +465,7 @@ @Override public void actionPerformed(ActionEvent e) { - //TODO: handle user propting for saving the character - CharacterManager.removeAllCharacters(); + frame.closeAllCharacters(); } } @@ -492,13 +491,7 @@ { return; } - - File file = pc.getFileRef().getReference(); - if (StringUtils.isBlank(file.getName()) - || !CharacterManager.saveCharacter(pc)) - { - frame.showSaveCharacterChooser(pc); - } + frame.saveCharacter(pc); } public void referenceChanged(ReferenceEvent<CharacterFacade> e) Modified: sandbox/uisync/code/src/java/pcgen/gui2/PCGenFrame.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/PCGenFrame.java 2011-09-29 02:20:46 UTC (rev 15416) +++ sandbox/uisync/code/src/java/pcgen/gui2/PCGenFrame.java 2011-09-30 00:18:23 UTC (rev 15417) @@ -356,6 +356,32 @@ } } + public boolean saveCharacter(CharacterFacade character) + { + File file = character.getFileRef().getReference(); + if (StringUtils.isBlank(file.getName()) || !CharacterManager.saveCharacter(character)) + { + return showSaveCharacterChooser(character); + } + return true; + } + + public void closeCharacter(CharacterFacade character) + { + int ret = JOptionPane.showConfirmDialog(this, "Do you want to save " + + character.getNameRef().getReference() + "?", + Constants.s_APPNAME, JOptionPane.YES_NO_CANCEL_OPTION); + if (ret == JOptionPane.CANCEL_OPTION) + { + return; + } + if (ret == JOptionPane.YES_OPTION) + { + saveCharacter(character); + } + CharacterManager.removeCharacter(character); + } + public boolean closeAllCharacters() { ListFacade<CharacterFacade> characters = CharacterManager.getCharacters(); @@ -403,17 +429,8 @@ if (ret2 == JOptionPane.YES_OPTION) {//If you get here then the user either selected "Yes to All" or "Yes" - boolean saved = true; - if (character.getFileRef().getReference() == null) + if (saveCharacter(character)) { - saved = showSaveCharacterChooser(character); - } - else - { - CharacterManager.saveCharacter(character); - } - if (saved) - { characterList.add(character); } } @@ -556,25 +573,25 @@ if (!PCGFile.isPCGenCharacterFile(pcgFile)) { JOptionPane.showMessageDialog(this, - "Invalid PCGen character file:" + pcgFile, - "Unable To Load Character", JOptionPane.ERROR_MESSAGE); + "Invalid PCGen character file:" + pcgFile, + "Unable To Load Character", JOptionPane.ERROR_MESSAGE); return; } if (!pcgFile.exists()) { JOptionPane.showMessageDialog(this, - "The character file " + pcgFile + " does not exist.", - "Unable To Load Character", JOptionPane.ERROR_MESSAGE); + "The character file " + pcgFile + " does not exist.", + "Unable To Load Character", JOptionPane.ERROR_MESSAGE); return; } if (!pcgFile.canRead()) { JOptionPane.showMessageDialog(this, - "The character file " + pcgFile + " cannot be read.", - "Unable To Load Character", JOptionPane.ERROR_MESSAGE); + "The character file " + pcgFile + " cannot be read.", + "Unable To Load Character", JOptionPane.ERROR_MESSAGE); return; } - + SourceSelectionFacade sources = CharacterManager.getRequiredSources(pcgFile, PCGenFrame.this); if (sources == null) { Modified: sandbox/uisync/code/src/java/pcgen/gui2/sources/AdvancedSourceSelectionPanel.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/sources/AdvancedSourceSelectionPanel.java 2011-09-29 02:20:46 UTC (rev 15416) +++ sandbox/uisync/code/src/java/pcgen/gui2/sources/AdvancedSourceSelectionPanel.java 2011-09-30 00:18:23 UTC (rev 15417) @@ -145,7 +145,7 @@ }; this.treeViewModel = new SourceTreeViewModel(); this.gameModeList = new JList(); - this.infoPane = new InfoPane(); + this.infoPane = new InfoPane("Campaign Info"); this.selectedCampaigns = new ArrayList<CampaignFacade>(); initComponents(); initDefaults(); Modified: sandbox/uisync/code/src/java/pcgen/gui2/util/SharedTabPane.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/util/SharedTabPane.java 2011-09-29 02:20:46 UTC (rev 15416) +++ sandbox/uisync/code/src/java/pcgen/gui2/util/SharedTabPane.java 2011-09-30 00:18:23 UTC (rev 15417) @@ -61,6 +61,13 @@ addTab(title, new JPanel(new BorderLayout())); } + public void addTab(Component tabRenderer) + { + int index = getTabCount(); + addTab(null, new JPanel(new BorderLayout())); + setTabComponentAt(index, tabRenderer); + } + public void removeTab(String title) { int index = indexOfTab(title); Added: sandbox/uisync/code/src/java/pcgen/resources/images/XButton_Click.gif =================================================================== (Binary files differ) Property changes on: sandbox/uisync/code/src/java/pcgen/resources/images/XButton_Click.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: sandbox/uisync/code/src/java/pcgen/resources/images/XButton_Roll.gif =================================================================== (Binary files differ) Property changes on: sandbox/uisync/code/src/java/pcgen/resources/images/XButton_Roll.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: sandbox/uisync/code/src/java/pcgen/resources/images/XButton_Stat.gif =================================================================== (Binary files differ) Property changes on: sandbox/uisync/code/src/java/pcgen/resources/images/XButton_Stat.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |