From: <cpm...@us...> - 2011-10-14 22:43:41
|
Revision: 15452 http://pcgen.svn.sourceforge.net/pcgen/?rev=15452&view=rev Author: cpmeister Date: 2011-10-14 22:43:32 +0000 (Fri, 14 Oct 2011) Log Message: ----------- UI update: - various fixes for the Nimbus LAF - minor code refactoring + javadocs Modified Paths: -------------- sandbox/uisync/code/src/java/pcgen/gui2/CharacterTabs.java sandbox/uisync/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java sandbox/uisync/code/src/java/pcgen/gui2/tabs/ClassInfoTab.java sandbox/uisync/code/src/java/pcgen/gui2/tabs/DomainInfoTab.java sandbox/uisync/code/src/java/pcgen/gui2/tabs/RaceInfoTab.java sandbox/uisync/code/src/java/pcgen/gui2/tabs/SkillInfoTab.java sandbox/uisync/code/src/java/pcgen/gui2/tabs/SummaryInfoTab.java sandbox/uisync/code/src/java/pcgen/gui2/tabs/TemplateInfoTab.java sandbox/uisync/code/src/java/pcgen/gui2/tabs/models/TextFieldHandler.java sandbox/uisync/code/src/java/pcgen/gui2/tabs/summary/ClassLevelTableModel.java sandbox/uisync/code/src/java/pcgen/gui2/tabs/summary/InfoPaneHandler.java sandbox/uisync/code/src/java/pcgen/gui2/tabs/summary/LanguageTableModel.java sandbox/uisync/code/src/java/pcgen/gui2/tools/InfoPane.java sandbox/uisync/code/src/java/pcgen/gui2/util/table/TableCellUtilities.java Added Paths: ----------- sandbox/uisync/code/src/java/pcgen/gui2/tabs/models/HtmlSheetSupport.java sandbox/uisync/code/src/java/pcgen/gui2/tabs/models/QualifiedTreeCellRenderer.java Removed Paths: ------------- sandbox/uisync/code/src/java/pcgen/gui2/tabs/HtmlSheetSupport.java sandbox/uisync/code/src/java/pcgen/gui2/tabs/QualifiedTreeCellRenderer.java Modified: sandbox/uisync/code/src/java/pcgen/gui2/CharacterTabs.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/CharacterTabs.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/CharacterTabs.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -20,6 +20,7 @@ */ package pcgen.gui2; +import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Insets; import java.awt.event.ActionEvent; @@ -30,6 +31,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; @@ -190,12 +193,23 @@ closeButton = new JButton(); closeButton.setMargin(new Insets(0, 0, 0, 0)); + closeButton.setBorder(BorderFactory.createEmptyBorder()); closeButton.setFocusable(false); closeButton.setBorderPainted(false); closeButton.setContentAreaFilled(false); closeButton.setRolloverEnabled(true); + + ImageIcon icon = Icons.XButton_Stat.getImageIcon(); + Dimension size = new Dimension(icon.getIconWidth(), icon.getIconHeight()); + Insets insets = closeButton.getInsets(); + size.width += insets.left + insets.right; + size.height += insets.top + insets.bottom; + closeButton.setMinimumSize(size); + closeButton.setPreferredSize(size); + closeButton.setMaximumSize(size); + + closeButton.setIcon(icon); closeButton.setRolloverIcon(Icons.XButton_Roll.getImageIcon()); - closeButton.setIcon(Icons.XButton_Stat.getImageIcon()); closeButton.setPressedIcon(Icons.XButton_Click.getImageIcon()); add(closeButton); Modified: sandbox/uisync/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/facade/CharacterFacadeImpl.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -2779,12 +2779,12 @@ } return value; } -// -// public String getAbilityChoiceDisplayString(AbilityCategoryFacade category, AbilityFacade ability) -// { -// return "";//TODO: implement -// } + public String getAbilityChoiceDisplayString(AbilityCategoryFacade category, AbilityFacade ability) + { + return "";//TODO: implement + } + public SpellSupportFacade getSpellSupport() { throw new UnsupportedOperationException("Not supported yet."); Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/ClassInfoTab.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/ClassInfoTab.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/ClassInfoTab.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -20,6 +20,7 @@ */ package pcgen.gui2.tabs; +import pcgen.gui2.tabs.models.QualifiedTreeCellRenderer; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/DomainInfoTab.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/DomainInfoTab.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/DomainInfoTab.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -20,6 +20,7 @@ */ package pcgen.gui2.tabs; +import pcgen.gui2.tabs.models.QualifiedTreeCellRenderer; import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.ActionEvent; Deleted: sandbox/uisync/code/src/java/pcgen/gui2/tabs/HtmlSheetSupport.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/HtmlSheetSupport.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/HtmlSheetSupport.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -1,315 +0,0 @@ -/* - * HtmlSheetSupport.java - * Copyright 2011 Connor Petty <cpm...@us...> - * - * 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 Mar 10, 2011, 1:35:43 PM - */ -package pcgen.gui2.tabs; - -import java.awt.Image; -import java.awt.Toolkit; -import java.io.BufferedWriter; -import java.io.File; -import java.io.IOException; -import java.io.PipedReader; -import java.io.PipedWriter; -import java.io.StringReader; -import java.io.StringWriter; -import java.lang.reflect.InvocationTargetException; -import java.net.URL; -import java.util.Collections; -import java.util.Dictionary; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.FutureTask; -import java.util.concurrent.ThreadFactory; -import javax.swing.ImageIcon; -import javax.swing.JEditorPane; -import javax.swing.SwingUtilities; -import javax.swing.text.EditorKit; -import javax.swing.text.html.HTMLDocument; -import org.apache.commons.lang.StringUtils; -import pcgen.base.lang.UnreachableError; -import pcgen.core.facade.CharacterFacade; -import pcgen.io.ExportHandler; -import pcgen.util.Logging; - -/** - * - * @author Connor Petty <cpm...@us...> - */ -public class HtmlSheetSupport -{ - - private final CharacterFacade character; - private final File templateFile; - private final JEditorPane htmlPane; - private ImageCache cache = new ImageCache(); - private FutureTask refresher = null; - private boolean installed = false; - private String missingSheetMsg; - private ExecutorService executor = Executors.newSingleThreadExecutor(new ThreadFactory() - { - - public Thread newThread(Runnable r) - { - Thread thread = new Thread(r); - thread.setDaemon(true); - thread.setName("html-sheet-thread"); - return thread; - } - - }); - - public HtmlSheetSupport(CharacterFacade character, JEditorPane htmlPane, String infoSheetFile) - { - this.character = character; - if (!StringUtils.isEmpty(infoSheetFile)) - { - templateFile = new File(infoSheetFile); - } - else - { - templateFile = null; - } - this.htmlPane = htmlPane; - } - - public void install() - { - installed = true; - refresh(); - } - - public void uninstall() - { - installed = false; - } - - public void refresh() - { - if (templateFile == null) - { - htmlPane.setText(missingSheetMsg); - return; - } - if (refresher != null && !refresher.isDone()) - { - refresher.cancel(false); - } - refresher = new Refresher(); - executor.execute(refresher); - } - - public void setMissingSheetMsg(String missingSheetMsg) - { - this.missingSheetMsg = missingSheetMsg; - } - - private class Refresher extends FutureTask<HTMLDocument> - { - - public Refresher() - { - super(new DocumentBuilder()); - } - - @Override - protected void done() - { - if (!installed || isCancelled()) - { - return; - } - try - { - final HTMLDocument doc = get(); - SwingUtilities.invokeAndWait(new Runnable() - { - - public void run() - { - htmlPane.setDocument(doc); - } - - }); - } - catch (InvocationTargetException ex) - { - throw new UnreachableError(); - } - catch (InterruptedException ex) - { - Logging.errorPrint(templateFile.getName(), ex); - } - catch (ExecutionException ex) - { - Logging.errorPrint(templateFile.getName(), ex.getCause()); - } - - } - - } - - private class DocumentBuilder implements Callable<HTMLDocument> - { - - public HTMLDocument call() throws Exception - { - StringWriter writer = new StringWriter(); - character.export(new ExportHandler(templateFile), new BufferedWriter(writer)); - StringReader reader = new StringReader(writer.toString()); - EditorKit kit = htmlPane.getEditorKit(); - HTMLDocument doc = new HTMLDocument(); - - doc.setBase(templateFile.getParentFile().toURL()); - // XXX - This is a hack specific to Sun's JDK 5.0 and in no - // way should be trusted to work in future java releases - // (though it still might) - Connor Petty - doc.putProperty("imageCache", cache); - kit.read(reader, doc, 0); - return doc; - } - - } - -// private class DocumentBuilder implements Callable<HTMLDocument>, Runnable -// { -// -// private PipedWriter writer = new PipedWriter(); -// -// public HTMLDocument call() throws Exception -// { -// PipedReader reader = new PipedReader(writer); -// createWriterThread().start(); -// -// EditorKit kit = htmlPane.getEditorKit(); -// HTMLDocument doc = new HTMLDocument(); -// doc.setBase(templateFile.getParentFile().toURL()); -// // XXX - This is a hack specific to Sun's JDK 5.0 and in no -// // way should be trusted to work in future java releases -// // (though it still might) - Connor Petty -// doc.putProperty("imageCache", cache); -// kit.read(reader, doc, 0); -// reader.close(); -// return doc; -// } -// -// private Thread createWriterThread() -// { -// Thread thread = new Thread(this); -// thread.setName("html-sheet-thread-2"); -// thread.setDaemon(true); -// thread.setPriority(Thread.NORM_PRIORITY); -// return thread; -// } -// -// public void run() -// { -// BufferedWriter bw = new BufferedWriter(writer, 1); -// try -// { -// character.export(new ExportHandler(templateFile), bw); -// } -// finally -// { -// try -// { -// bw.close(); -// } -// catch (IOException ex) -// { -// Logging.errorPrint("Unable to close PipedWriter", ex); -// } -// } -// } -// -// } - /** - * A cache for images loaded onto the info pane. - */ - private static class ImageCache extends Dictionary<URL, Image> - { - - private HashMap<URL, Image> cache = new HashMap<URL, Image>(); - - @Override - public int size() - { - return cache.size(); - } - - @Override - public boolean isEmpty() - { - return cache.isEmpty(); - } - - @Override - public Enumeration<URL> keys() - { - return Collections.enumeration(cache.keySet()); - } - - @Override - public Enumeration<Image> elements() - { - return Collections.enumeration(cache.values()); - } - - @Override - public Image get(Object key) - { - if (!(key instanceof URL)) - { - return null; - } - URL src = (URL) key; - if (!cache.containsKey(src)) - { - Image newImage = Toolkit.getDefaultToolkit().createImage(src); - if (newImage != null) - { - // Force the image to be loaded by using an ImageIcon. - ImageIcon ii = new ImageIcon(); - ii.setImage(newImage); - } - cache.put(src, newImage); - } - return cache.get(src); - } - - @Override - public Image put(URL key, Image value) - { - return cache.put(key, value); - } - - @Override - public Image remove(Object key) - { - return cache.remove(key); - } - - } - -} Deleted: sandbox/uisync/code/src/java/pcgen/gui2/tabs/QualifiedTreeCellRenderer.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/QualifiedTreeCellRenderer.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/QualifiedTreeCellRenderer.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -1,65 +0,0 @@ -/* - * QualifiedTreeCellRenderer.java - * Copyright 2011 Connor Petty <cpm...@us...> - * - * 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 Feb 16, 2011, 12:00:54 PM - */ -package pcgen.gui2.tabs; - -import java.awt.Component; -import javax.swing.JTree; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeCellRenderer; -import pcgen.core.facade.CharacterFacade; -import pcgen.core.facade.InfoFacade; -import pcgen.gui2.UIPropertyContext; - -/** - * - * @author Connor Petty <cpm...@us...> - */ -public class QualifiedTreeCellRenderer extends DefaultTreeCellRenderer -{ - - private CharacterFacade character; - - public QualifiedTreeCellRenderer(CharacterFacade character) - { - this.character = character; - setTextNonSelectionColor(UIPropertyContext.getQualifiedColor()); - setClosedIcon(null); - setLeafIcon(null); - setOpenIcon(null); - } - - @Override - public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) - { - Object obj = ((DefaultMutableTreeNode) value).getUserObject(); - if ("".equals(obj)) - { - obj = "None"; - } - super.getTreeCellRendererComponent(tree, obj, sel, expanded, leaf, row, hasFocus); - if (obj instanceof InfoFacade && !character.isQualifiedFor((InfoFacade) obj)) - { - setForeground(UIPropertyContext.getNotQualifiedColor()); - } - return this; - } - -} Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/RaceInfoTab.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/RaceInfoTab.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/RaceInfoTab.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -22,6 +22,7 @@ */ package pcgen.gui2.tabs; +import pcgen.gui2.tabs.models.QualifiedTreeCellRenderer; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/SkillInfoTab.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/SkillInfoTab.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/SkillInfoTab.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -20,6 +20,7 @@ */ package pcgen.gui2.tabs; +import pcgen.gui2.tabs.models.HtmlSheetSupport; import java.awt.Component; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/SummaryInfoTab.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/SummaryInfoTab.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/SummaryInfoTab.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -21,6 +21,7 @@ package pcgen.gui2.tabs; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/TemplateInfoTab.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/TemplateInfoTab.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/TemplateInfoTab.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -20,6 +20,7 @@ */ package pcgen.gui2.tabs; +import pcgen.gui2.tabs.models.QualifiedTreeCellRenderer; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.util.Arrays; Copied: sandbox/uisync/code/src/java/pcgen/gui2/tabs/models/HtmlSheetSupport.java (from rev 15439, sandbox/uisync/code/src/java/pcgen/gui2/tabs/HtmlSheetSupport.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/models/HtmlSheetSupport.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/models/HtmlSheetSupport.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -0,0 +1,315 @@ +/* + * HtmlSheetSupport.java + * Copyright 2011 Connor Petty <cpm...@us...> + * + * 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 Mar 10, 2011, 1:35:43 PM + */ +package pcgen.gui2.tabs.models; + +import java.awt.Image; +import java.awt.Toolkit; +import java.io.BufferedWriter; +import java.io.File; +import java.io.IOException; +import java.io.PipedReader; +import java.io.PipedWriter; +import java.io.StringReader; +import java.io.StringWriter; +import java.lang.reflect.InvocationTargetException; +import java.net.URL; +import java.util.Collections; +import java.util.Dictionary; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.FutureTask; +import java.util.concurrent.ThreadFactory; +import javax.swing.ImageIcon; +import javax.swing.JEditorPane; +import javax.swing.SwingUtilities; +import javax.swing.text.EditorKit; +import javax.swing.text.html.HTMLDocument; +import org.apache.commons.lang.StringUtils; +import pcgen.base.lang.UnreachableError; +import pcgen.core.facade.CharacterFacade; +import pcgen.io.ExportHandler; +import pcgen.util.Logging; + +/** + * + * @author Connor Petty <cpm...@us...> + */ +public class HtmlSheetSupport +{ + + private final CharacterFacade character; + private final File templateFile; + private final JEditorPane htmlPane; + private ImageCache cache = new ImageCache(); + private FutureTask refresher = null; + private boolean installed = false; + private String missingSheetMsg; + private ExecutorService executor = Executors.newSingleThreadExecutor(new ThreadFactory() + { + + public Thread newThread(Runnable r) + { + Thread thread = new Thread(r); + thread.setDaemon(true); + thread.setName("html-sheet-thread"); + return thread; + } + + }); + + public HtmlSheetSupport(CharacterFacade character, JEditorPane htmlPane, String infoSheetFile) + { + this.character = character; + if (!StringUtils.isEmpty(infoSheetFile)) + { + templateFile = new File(infoSheetFile); + } + else + { + templateFile = null; + } + this.htmlPane = htmlPane; + } + + public void install() + { + installed = true; + refresh(); + } + + public void uninstall() + { + installed = false; + } + + public void refresh() + { + if (templateFile == null) + { + htmlPane.setText(missingSheetMsg); + return; + } + if (refresher != null && !refresher.isDone()) + { + refresher.cancel(false); + } + refresher = new Refresher(); + executor.execute(refresher); + } + + public void setMissingSheetMsg(String missingSheetMsg) + { + this.missingSheetMsg = missingSheetMsg; + } + + private class Refresher extends FutureTask<HTMLDocument> + { + + public Refresher() + { + super(new DocumentBuilder()); + } + + @Override + protected void done() + { + if (!installed || isCancelled()) + { + return; + } + try + { + final HTMLDocument doc = get(); + SwingUtilities.invokeAndWait(new Runnable() + { + + public void run() + { + htmlPane.setDocument(doc); + } + + }); + } + catch (InvocationTargetException ex) + { + throw new UnreachableError(); + } + catch (InterruptedException ex) + { + Logging.errorPrint(templateFile.getName(), ex); + } + catch (ExecutionException ex) + { + Logging.errorPrint(templateFile.getName(), ex.getCause()); + } + + } + + } + + private class DocumentBuilder implements Callable<HTMLDocument> + { + + public HTMLDocument call() throws Exception + { + StringWriter writer = new StringWriter(); + character.export(new ExportHandler(templateFile), new BufferedWriter(writer)); + StringReader reader = new StringReader(writer.toString()); + EditorKit kit = htmlPane.getEditorKit(); + HTMLDocument doc = new HTMLDocument(); + + doc.setBase(templateFile.getParentFile().toURL()); + // XXX - This is a hack specific to Sun's JDK 5.0 and in no + // way should be trusted to work in future java releases + // (though it still might) - Connor Petty + doc.putProperty("imageCache", cache); + kit.read(reader, doc, 0); + return doc; + } + + } + +// private class DocumentBuilder implements Callable<HTMLDocument>, Runnable +// { +// +// private PipedWriter writer = new PipedWriter(); +// +// public HTMLDocument call() throws Exception +// { +// PipedReader reader = new PipedReader(writer); +// createWriterThread().start(); +// +// EditorKit kit = htmlPane.getEditorKit(); +// HTMLDocument doc = new HTMLDocument(); +// doc.setBase(templateFile.getParentFile().toURL()); +// // XXX - This is a hack specific to Sun's JDK 5.0 and in no +// // way should be trusted to work in future java releases +// // (though it still might) - Connor Petty +// doc.putProperty("imageCache", cache); +// kit.read(reader, doc, 0); +// reader.close(); +// return doc; +// } +// +// private Thread createWriterThread() +// { +// Thread thread = new Thread(this); +// thread.setName("html-sheet-thread-2"); +// thread.setDaemon(true); +// thread.setPriority(Thread.NORM_PRIORITY); +// return thread; +// } +// +// public void run() +// { +// BufferedWriter bw = new BufferedWriter(writer, 1); +// try +// { +// character.export(new ExportHandler(templateFile), bw); +// } +// finally +// { +// try +// { +// bw.close(); +// } +// catch (IOException ex) +// { +// Logging.errorPrint("Unable to close PipedWriter", ex); +// } +// } +// } +// +// } + /** + * A cache for images loaded onto the info pane. + */ + private static class ImageCache extends Dictionary<URL, Image> + { + + private HashMap<URL, Image> cache = new HashMap<URL, Image>(); + + @Override + public int size() + { + return cache.size(); + } + + @Override + public boolean isEmpty() + { + return cache.isEmpty(); + } + + @Override + public Enumeration<URL> keys() + { + return Collections.enumeration(cache.keySet()); + } + + @Override + public Enumeration<Image> elements() + { + return Collections.enumeration(cache.values()); + } + + @Override + public Image get(Object key) + { + if (!(key instanceof URL)) + { + return null; + } + URL src = (URL) key; + if (!cache.containsKey(src)) + { + Image newImage = Toolkit.getDefaultToolkit().createImage(src); + if (newImage != null) + { + // Force the image to be loaded by using an ImageIcon. + ImageIcon ii = new ImageIcon(); + ii.setImage(newImage); + } + cache.put(src, newImage); + } + return cache.get(src); + } + + @Override + public Image put(URL key, Image value) + { + return cache.put(key, value); + } + + @Override + public Image remove(Object key) + { + return cache.remove(key); + } + + } + +} Copied: sandbox/uisync/code/src/java/pcgen/gui2/tabs/models/QualifiedTreeCellRenderer.java (from rev 15439, sandbox/uisync/code/src/java/pcgen/gui2/tabs/QualifiedTreeCellRenderer.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/models/QualifiedTreeCellRenderer.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/models/QualifiedTreeCellRenderer.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -0,0 +1,65 @@ +/* + * QualifiedTreeCellRenderer.java + * Copyright 2011 Connor Petty <cpm...@us...> + * + * 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 Feb 16, 2011, 12:00:54 PM + */ +package pcgen.gui2.tabs.models; + +import java.awt.Component; +import javax.swing.JTree; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; +import pcgen.core.facade.CharacterFacade; +import pcgen.core.facade.InfoFacade; +import pcgen.gui2.UIPropertyContext; + +/** + * + * @author Connor Petty <cpm...@us...> + */ +public class QualifiedTreeCellRenderer extends DefaultTreeCellRenderer +{ + + private CharacterFacade character; + + public QualifiedTreeCellRenderer(CharacterFacade character) + { + this.character = character; + setTextNonSelectionColor(UIPropertyContext.getQualifiedColor()); + setClosedIcon(null); + setLeafIcon(null); + setOpenIcon(null); + } + + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) + { + Object obj = ((DefaultMutableTreeNode) value).getUserObject(); + if ("".equals(obj)) + { + obj = "None"; + } + super.getTreeCellRendererComponent(tree, obj, sel, expanded, leaf, row, hasFocus); + if (obj instanceof InfoFacade && !character.isQualifiedFor((InfoFacade) obj)) + { + setForeground(UIPropertyContext.getNotQualifiedColor()); + } + return this; + } + +} Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/models/TextFieldHandler.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/models/TextFieldHandler.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/models/TextFieldHandler.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -73,6 +73,8 @@ { if (!textField.getText().equals(e.getNewReference())) { + //This is done to prevent an event feedback loop since + //setText modifies the document we are listening to. textField.getDocument().removeDocumentListener(this); textField.setText(e.getNewReference()); textField.getDocument().addDocumentListener(this); Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/summary/ClassLevelTableModel.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/summary/ClassLevelTableModel.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/summary/ClassLevelTableModel.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -39,6 +39,7 @@ import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.table.AbstractTableModel; +import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellEditor; @@ -247,6 +248,8 @@ super(); cellPanel.setLayout(new BoxLayout(cellPanel, BoxLayout.X_AXIS)); cellPanel.setOpaque(true); + addLevelButton.setFocusable(false); + removeLevelButton.setFocusable(false); addLevelButton.addActionListener(this); removeLevelButton.addActionListener(this); } @@ -264,8 +267,8 @@ public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { cellPanel.removeAll(); - cellPanel.setBackground(table.getBackground()); - cellPanel.setForeground(table.getForeground()); + TableCellUtilities.setToRowBackground(cellPanel, table, row); + cellLabel.setForeground(table.getForeground()); cellLabel.setFont(table.getFont()); if (row == levels.getSize() - 1) { Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/summary/InfoPaneHandler.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/summary/InfoPaneHandler.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/summary/InfoPaneHandler.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -31,7 +31,7 @@ import pcgen.core.facade.event.ListListener; import pcgen.core.facade.event.ReferenceEvent; import pcgen.core.facade.event.ReferenceListener; -import pcgen.gui2.tabs.HtmlSheetSupport; +import pcgen.gui2.tabs.models.HtmlSheetSupport; import pcgen.system.LanguageBundle; /** Modified: sandbox/uisync/code/src/java/pcgen/gui2/tabs/summary/LanguageTableModel.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tabs/summary/LanguageTableModel.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/tabs/summary/LanguageTableModel.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -21,7 +21,6 @@ package pcgen.gui2.tabs.summary; import java.awt.CardLayout; -import java.awt.Color; import java.awt.Component; import java.awt.Frame; import java.awt.Point; @@ -29,18 +28,13 @@ import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; -import java.util.EventObject; +import javax.swing.AbstractCellEditor; import javax.swing.Box; -import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTable; -import javax.swing.SwingUtilities; -import javax.swing.event.CellEditorListener; -import javax.swing.event.ChangeEvent; -import javax.swing.event.EventListenerList; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; @@ -54,6 +48,7 @@ import pcgen.gui2.dialog.LanguageChooserDialog; import pcgen.gui2.tabs.Utilities; import pcgen.gui2.util.SignIcon.Sign; +import pcgen.gui2.util.table.TableCellUtilities; import pcgen.util.Logging; public class LanguageTableModel extends AbstractTableModel @@ -83,7 +78,7 @@ table.setRowSelectionAllowed(false); table.setColumnSelectionAllowed(false); table.setFocusable(false); - table.setRowHeight(20); + table.setRowHeight(21); table.getTableHeader().setReorderingAllowed(false); } @@ -93,9 +88,6 @@ table.addMouseMotionListener(this); table.setModel(this); - //make sure that these components are using the current LAF - SwingUtilities.updateComponentTreeUI(renderer); - SwingUtilities.updateComponentTreeUI(editor); table.setDefaultRenderer(Object.class, renderer); table.setDefaultEditor(Object.class, editor); } @@ -154,8 +146,8 @@ @Override public boolean isCellEditable(int rowIndex, int columnIndex) { - if (rowIndex < languages.getSize() && - character.isAutomatic(languages.getElementAt(rowIndex))) + if (rowIndex < languages.getSize() + && character.isAutomatic(languages.getElementAt(rowIndex))) { return false; } @@ -180,26 +172,27 @@ editor.cancelCellEditing(); } - private class Editor extends JPanel implements TableCellEditor, ActionListener + private class Editor extends AbstractCellEditor implements TableCellEditor, ActionListener { private final String ADD_ID = "Add"; private final String REMOVE_ID = "Remove"; - private EventListenerList eventListeners = new EventListenerList(); - transient protected ChangeEvent changeEvent = null; + private JPanel cellPanel = new JPanel(); private CardLayout cardLayout = new CardLayout(); private JLabel addLabel = new JLabel(); private JLabel cellLabel = new JLabel(); public Editor() { - setLayout(cardLayout); - setOpaque(false); + cellPanel.setLayout(cardLayout); + cellPanel.setOpaque(true); JButton addButton = Utilities.createSignButton(Sign.Plus); JButton removeButton = Utilities.createSignButton(Sign.Minus); addButton.setActionCommand(ADD_ID); removeButton.setActionCommand(REMOVE_ID); + addButton.setFocusable(false); + removeButton.setFocusable(false); addButton.addActionListener(this); removeButton.addActionListener(this); Box box = Box.createHorizontalBox(); @@ -207,33 +200,36 @@ box.add(addLabel); box.add(Box.createHorizontalStrut(3)); box.add(addButton); - add(box, ADD_ID); + box.add(Box.createHorizontalStrut(2)); + cellPanel.add(box, ADD_ID); box = Box.createHorizontalBox(); + box.add(Box.createHorizontalStrut(3)); box.add(cellLabel); box.add(Box.createHorizontalGlue()); box.add(removeButton); - add(box, REMOVE_ID); + box.add(Box.createHorizontalStrut(2)); + cellPanel.add(box, REMOVE_ID); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { - setBackground(table.getBackground()); + TableCellUtilities.setToRowBackground(cellPanel, table, row); if (row >= languages.getSize()) { addLabel.setForeground(table.getForeground()); addLabel.setFont(table.getFont()); addLabel.setText("Add " + ((LanguageChooserFacade) value).getName()); - cardLayout.show(this, ADD_ID); + cardLayout.show(cellPanel, ADD_ID); } else { cellLabel.setForeground(table.getForeground()); cellLabel.setFont(table.getFont()); cellLabel.setText(value.toString()); - cardLayout.show(this, REMOVE_ID); + cardLayout.show(cellPanel, REMOVE_ID); } - return this; + return cellPanel; } public void actionPerformed(ActionEvent e) @@ -250,8 +246,8 @@ else { //TODO: Remove button action - Logging.errorPrint("Ignoring request to remove language " + - getValueAt(table.getEditingRow(), 0)); + Logging.errorPrint("Ignoring request to remove language " + + getValueAt(table.getEditingRow(), 0)); } cancelCellEditing(); } @@ -261,130 +257,6 @@ return null; } - /** - * Returns true. - * @param e an event object - * @return true - */ - public boolean isCellEditable(EventObject e) - { - return true; - } - - /** - * Returns true. - * @param anEvent an event object - * @return true - */ - public boolean shouldSelectCell(EventObject anEvent) - { - return true; - } - - /** - * Calls <code>fireEditingStopped</code> and returns true. - * @return true - */ - public boolean stopCellEditing() - { - fireEditingStopped(); - return true; - } - - /** - * Calls <code>fireEditingCanceled</code>. - */ - public void cancelCellEditing() - { - fireEditingCanceled(); - } - - /** - * Adds a <code>CellEditorListener</code> to the listener list. - * @param l the new listener to be added - */ - public void addCellEditorListener(CellEditorListener l) - { - eventListeners.add(CellEditorListener.class, l); - } - - /** - * Removes a <code>CellEditorListener</code> from the listener list. - * @param l the listener to be removed - */ - public void removeCellEditorListener(CellEditorListener l) - { - eventListeners.remove(CellEditorListener.class, l); - } - - /** - * Returns an array of all the <code>CellEditorListener</code>s added - * to this AbstractCellEditor with addCellEditorListener(). - * - * @return all of the <code>CellEditorListener</code>s added or an empty - * array if no listeners have been added - * @since 1.4 - */ - public CellEditorListener[] getCellEditorListeners() - { - return (CellEditorListener[]) eventListeners.getListeners( - CellEditorListener.class); - } - - /** - * Notifies all listeners that have registered interest for - * notification on this event type. The event instance - * is created lazily. - * - * @see EventListenerList - */ - protected void fireEditingStopped() - { - // Guaranteed to return a non-null array - Object[] listeners = eventListeners.getListenerList(); - // Process the listeners last to first, notifying - // those that are interested in this event - for (int i = listeners.length - 2; i >= 0; i -= 2) - { - if (listeners[i] == CellEditorListener.class) - { - // Lazily create the event: - if (changeEvent == null) - { - changeEvent = new ChangeEvent(this); - } - ((CellEditorListener) listeners[i + 1]).editingStopped(changeEvent); - } - } - } - - /** - * Notifies all listeners that have registered interest for - * notification on this event type. The event instance - * is created lazily. - * - * @see EventListenerList - */ - protected void fireEditingCanceled() - { - // Guaranteed to return a non-null array - Object[] listeners = eventListeners.getListenerList(); - // Process the listeners last to first, notifying - // those that are interested in this event - for (int i = listeners.length - 2; i >= 0; i -= 2) - { - if (listeners[i] == CellEditorListener.class) - { - // Lazily create the event: - if (changeEvent == null) - { - changeEvent = new ChangeEvent(this); - } - ((CellEditorListener) listeners[i + 1]).editingCanceled(changeEvent); - } - } - } - } private class Renderer extends JPanel implements TableCellRenderer @@ -403,9 +275,11 @@ { setLayout(cardLayout); Box box = Box.createHorizontalBox(); + box.add(Box.createHorizontalStrut(3)); box.add(cellLabel); box.add(Box.createHorizontalGlue()); box.add(removeButton); + box.add(Box.createHorizontalStrut(2)); add(box, REMOVE_ID); box = Box.createHorizontalBox(); @@ -413,21 +287,17 @@ box.add(addLabel); box.add(Box.createHorizontalStrut(3)); box.add(addButton); + box.add(Box.createHorizontalStrut(2)); add(box, ADD_ID); - - setOpaque(true); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - setBackground(table.getBackground()); - - - + TableCellUtilities.setToRowBackground(this, table, row); if (row < languages.getSize()) { - boolean automatic = value instanceof LanguageFacade && - character.isAutomatic((LanguageFacade) value); + boolean automatic = value instanceof LanguageFacade + && character.isAutomatic((LanguageFacade) value); Point mouse = table.getMousePosition(); if (automatic) @@ -440,8 +310,8 @@ } cellLabel.setText(value.toString()); cellLabel.setFont(table.getFont()); - removeButton.setVisible(mouse != null && table.rowAtPoint(mouse) == row && - !automatic); + removeButton.setVisible(mouse != null && table.rowAtPoint(mouse) == row + && !automatic); cardLayout.show(this, REMOVE_ID); } else Modified: sandbox/uisync/code/src/java/pcgen/gui2/tools/InfoPane.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/tools/InfoPane.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/tools/InfoPane.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -82,6 +82,7 @@ public void setText(String text) { + //This is done so the vertical scroll bar goes back up to the top when the text is changed EditorKit kit = textPane.getEditorKit(); Document newDoc = kit.createDefaultDocument(); try Modified: sandbox/uisync/code/src/java/pcgen/gui2/util/table/TableCellUtilities.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/util/table/TableCellUtilities.java 2011-10-13 23:16:30 UTC (rev 15451) +++ sandbox/uisync/code/src/java/pcgen/gui2/util/table/TableCellUtilities.java 2011-10-14 22:43:32 UTC (rev 15452) @@ -20,6 +20,7 @@ */ package pcgen.gui2.util.table; +import java.awt.Color; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -45,10 +46,22 @@ public final class TableCellUtilities { + private static final DefaultTableCellRenderer dummyRenderer = new DefaultTableCellRenderer(); + private TableCellUtilities() { } + public static void setToRowBackground(Component c, JTable table, int row) + { + dummyRenderer.getTableCellRendererComponent(table, null, false, false, row, 0); + Color bg = dummyRenderer.getBackground(); + // We have to create a new color object because Nimbus returns + // a color of type DerivedColor, which behaves strange, not sure + // why. + c.setBackground(new Color(bg.getRed(), bg.getGreen(), bg.getBlue())); + } + public static class RadioButtonEditor extends AbstractCellEditor implements ActionListener, TableCellEditor This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |