From 52d487c316bf9b66f251034a40314dd6944e1cc7 Mon Sep 17 00:00:00 2001 From: Phil Race Date: Fri, 22 Jun 2018 12:16:14 -0700 Subject: [PATCH] 8205136: Move StylePad demo to the open repository Reviewed-by: serb, erikj --- make/CompileDemos.gmk | 6 + src/demo/share/jfc/Stylepad/HelloWorld.java | 208 +++++++++ src/demo/share/jfc/Stylepad/README.txt | 11 + src/demo/share/jfc/Stylepad/Stylepad.java | 409 ++++++++++++++++++ src/demo/share/jfc/Stylepad/Wonderland.java | 299 +++++++++++++ .../Stylepad/resources/Stylepad.properties | 58 +++ .../resources/StylepadSystem.properties | 23 + .../Stylepad/resources/Stylepad_ja.properties | 58 +++ .../resources/Stylepad_zh_CN.properties | 58 +++ .../share/jfc/Stylepad/resources/alice.gif | Bin 0 -> 6857 bytes .../share/jfc/Stylepad/resources/bold.gif | Bin 0 -> 105 bytes .../share/jfc/Stylepad/resources/bullets.gif | Bin 0 -> 118 bytes .../jfc/Stylepad/resources/caterpillar.gif | Bin 0 -> 9404 bytes .../share/jfc/Stylepad/resources/center.gif | Bin 0 -> 96 bytes src/demo/share/jfc/Stylepad/resources/fg.gif | Bin 0 -> 185 bytes .../share/jfc/Stylepad/resources/hatter.gif | Bin 0 -> 17716 bytes .../share/jfc/Stylepad/resources/italic.gif | Bin 0 -> 97 bytes .../share/jfc/Stylepad/resources/left.gif | Bin 0 -> 95 bytes .../share/jfc/Stylepad/resources/rabbit.gif | Bin 0 -> 6425 bytes .../share/jfc/Stylepad/resources/rabbit2.gif | Bin 0 -> 7719 bytes .../share/jfc/Stylepad/resources/right.gif | Bin 0 -> 95 bytes .../jfc/Stylepad/resources/underline.gif | Bin 0 -> 110 bytes 22 files changed, 1130 insertions(+) create mode 100644 src/demo/share/jfc/Stylepad/HelloWorld.java create mode 100644 src/demo/share/jfc/Stylepad/README.txt create mode 100644 src/demo/share/jfc/Stylepad/Stylepad.java create mode 100644 src/demo/share/jfc/Stylepad/Wonderland.java create mode 100644 src/demo/share/jfc/Stylepad/resources/Stylepad.properties create mode 100644 src/demo/share/jfc/Stylepad/resources/StylepadSystem.properties create mode 100644 src/demo/share/jfc/Stylepad/resources/Stylepad_ja.properties create mode 100644 src/demo/share/jfc/Stylepad/resources/Stylepad_zh_CN.properties create mode 100644 src/demo/share/jfc/Stylepad/resources/alice.gif create mode 100644 src/demo/share/jfc/Stylepad/resources/bold.gif create mode 100644 src/demo/share/jfc/Stylepad/resources/bullets.gif create mode 100644 src/demo/share/jfc/Stylepad/resources/caterpillar.gif create mode 100644 src/demo/share/jfc/Stylepad/resources/center.gif create mode 100644 src/demo/share/jfc/Stylepad/resources/fg.gif create mode 100644 src/demo/share/jfc/Stylepad/resources/hatter.gif create mode 100644 src/demo/share/jfc/Stylepad/resources/italic.gif create mode 100644 src/demo/share/jfc/Stylepad/resources/left.gif create mode 100644 src/demo/share/jfc/Stylepad/resources/rabbit.gif create mode 100644 src/demo/share/jfc/Stylepad/resources/rabbit2.gif create mode 100644 src/demo/share/jfc/Stylepad/resources/right.gif create mode 100644 src/demo/share/jfc/Stylepad/resources/underline.gif diff --git a/make/CompileDemos.gmk b/make/CompileDemos.gmk index 989c95267b8..362dfdd551e 100644 --- a/make/CompileDemos.gmk +++ b/make/CompileDemos.gmk @@ -264,6 +264,12 @@ $(eval $(call SetupBuildDemo, Notepad, \ DEMO_SUBDIR := jfc, \ )) +$(eval $(call SetupBuildDemo, Stylepad, \ + DEMO_SUBDIR := jfc, \ + EXTRA_SRC_DIR := $(DEMO_SHARE_SRC)/jfc/Notepad, \ + EXCLUDE_FILES := $(DEMO_SHARE_SRC)/jfc/Notepad/README.txt, \ +)) + $(eval $(call SetupBuildDemo, SampleTree, \ DEMO_SUBDIR := jfc, \ )) diff --git a/src/demo/share/jfc/Stylepad/HelloWorld.java b/src/demo/share/jfc/Stylepad/HelloWorld.java new file mode 100644 index 00000000000..c4e7a8aee40 --- /dev/null +++ b/src/demo/share/jfc/Stylepad/HelloWorld.java @@ -0,0 +1,208 @@ +/* + * + * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +import java.awt.Color; +import java.util.HashMap; +import java.util.Locale; +import java.util.MissingResourceException; +import java.util.ResourceBundle; +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultStyledDocument; +import javax.swing.text.Style; +import javax.swing.text.StyleConstants; +import javax.swing.text.StyleContext; + + +/** + * hack to load attributed content. + */ +public class HelloWorld { + + HelloWorld(DefaultStyledDocument doc, StyleContext styles) { + this.doc = doc; + this.styles = styles; + runAttr = new HashMap(); + } + + void loadDocument() { + createStyles(); + for (int i = 0; i < data.length; i++) { + Paragraph p = data[i]; + addParagraph(p); + } + } + + void addParagraph(Paragraph p) { + try { + Style s = null; + for (int i = 0; i < p.data.length; i++) { + Run run = p.data[i]; + s = runAttr.get(run.attr); + doc.insertString(doc.getLength(), run.content, s); + } + + // set logical style + Style ls = styles.getStyle(p.logical); + doc.setLogicalStyle(doc.getLength() - 1, ls); + doc.insertString(doc.getLength(), "\n", null); + } catch (BadLocationException e) { + System.err.println("Internal error: " + e); + } + } + + void createStyles() { + // no attributes defined + Style s = styles.addStyle(null, null); + runAttr.put("none", s); + s = styles.addStyle(null, null); + StyleConstants.setItalic(s, true); + StyleConstants.setForeground(s, new Color(153, 153, 102)); + runAttr.put("cquote", s); // catepillar quote + + s = styles.addStyle(null, null); + StyleConstants.setItalic(s, true); + StyleConstants.setForeground(s, new Color(51, 102, 153)); + runAttr.put("aquote", s); // alice quote + + try { + ResourceBundle resources = ResourceBundle.getBundle( + "resources.Stylepad", + Locale.getDefault()); + s = styles.addStyle(null, null); + Icon alice = new ImageIcon(resources.getString("aliceGif")); + StyleConstants.setIcon(s, alice); + runAttr.put("alice", s); // alice + + s = styles.addStyle(null, null); + Icon caterpillar = new ImageIcon(resources.getString( + "caterpillarGif")); + StyleConstants.setIcon(s, caterpillar); + runAttr.put("caterpillar", s); // caterpillar + + s = styles.addStyle(null, null); + Icon hatter = new ImageIcon(resources.getString("hatterGif")); + StyleConstants.setIcon(s, hatter); + runAttr.put("hatter", s); // hatter + + + } catch (MissingResourceException mre) { + // can't display image + } + + Style def = styles.getStyle(StyleContext.DEFAULT_STYLE); + + Style heading = styles.addStyle("heading", def); + //StyleConstants.setFontFamily(heading, "SansSerif"); + StyleConstants.setBold(heading, true); + StyleConstants.setAlignment(heading, StyleConstants.ALIGN_CENTER); + StyleConstants.setSpaceAbove(heading, 10); + StyleConstants.setSpaceBelow(heading, 10); + StyleConstants.setFontSize(heading, 18); + + // Title + Style sty = styles.addStyle("title", heading); + StyleConstants.setFontSize(sty, 32); + + // edition + sty = styles.addStyle("edition", heading); + StyleConstants.setFontSize(sty, 16); + + // author + sty = styles.addStyle("author", heading); + StyleConstants.setItalic(sty, true); + StyleConstants.setSpaceBelow(sty, 25); + + // subtitle + sty = styles.addStyle("subtitle", heading); + StyleConstants.setSpaceBelow(sty, 35); + + // normal + sty = styles.addStyle("normal", def); + StyleConstants.setLeftIndent(sty, 10); + StyleConstants.setRightIndent(sty, 10); + //StyleConstants.setFontFamily(sty, "SansSerif"); + StyleConstants.setFontSize(sty, 14); + StyleConstants.setSpaceAbove(sty, 4); + StyleConstants.setSpaceBelow(sty, 4); + } + DefaultStyledDocument doc; + StyleContext styles; + HashMap runAttr; + + + static class Paragraph { + + Paragraph(String logical, Run[] data) { + this.logical = logical; + this.data = data; + } + String logical; + Run[] data; + } + + + static class Run { + + Run(String attr, String content) { + this.attr = attr; + this.content = content; + } + String attr; + String content; + } + Paragraph[] data = new Paragraph[] { + new Paragraph("title", new Run[] { + new Run("none", "Hello from Cupertino") + }), + new Paragraph("title", new Run[] { + new Run("none", "\u53F0\u5317\u554F\u5019\u60A8\u0021") + }), + new Paragraph("title", new Run[] { + new Run("none", "\u0391\u03B8\u03B7\u03BD\u03B1\u03B9\u0020" // Greek + + "\u03B1\u03C3\u03C0\u03B1\u03B6\u03BF\u03BD" + + "\u03C4\u03B1\u03B9\u0020\u03C5\u03BC\u03B1" + + "\u03C2\u0021") + }), + new Paragraph("title", new Run[] { + new Run("none", "\u6771\u4eac\u304b\u3089\u4eca\u65e5\u306f") + }), + new Paragraph("title", new Run[] { + new Run("none", "\u05e9\u05dc\u05d5\u05dd \u05de\u05d9\u05e8\u05d5" + + "\u05e9\u05dc\u05d9\u05dd") + }), + new Paragraph("title", new Run[] { + new Run("none", "\u0633\u0644\u0627\u0645") + }), }; +} diff --git a/src/demo/share/jfc/Stylepad/README.txt b/src/demo/share/jfc/Stylepad/README.txt new file mode 100644 index 00000000000..a8a39fa48d2 --- /dev/null +++ b/src/demo/share/jfc/Stylepad/README.txt @@ -0,0 +1,11 @@ + +To run the Stylepad demo: + + java -jar Stylepad.jar + +These instructions assume that this installation's version of the java +command is in your path. If it isn't, then you should either +specify the complete path to the java command or update your +PATH environment variable as described in the installation +instructions for the Java(TM) SE Development Kit. + diff --git a/src/demo/share/jfc/Stylepad/Stylepad.java b/src/demo/share/jfc/Stylepad/Stylepad.java new file mode 100644 index 00000000000..872e0a43271 --- /dev/null +++ b/src/demo/share/jfc/Stylepad/Stylepad.java @@ -0,0 +1,409 @@ +/* + * + * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.FileDialog; +import java.awt.Frame; +import java.awt.Graphics; +import java.awt.GraphicsEnvironment; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutput; +import java.io.ObjectOutputStream; +import java.lang.reflect.InvocationTargetException; +import java.util.MissingResourceException; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.Icon; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.JTextPane; +import javax.swing.SwingUtilities; +import javax.swing.text.DefaultStyledDocument; +import javax.swing.text.Document; +import javax.swing.text.JTextComponent; +import javax.swing.text.StyleContext; +import javax.swing.text.StyledEditorKit; +import javax.swing.text.TextAction; + + +/** + * Sample application using JTextPane. + * + * @author Timothy Prinzing + */ +@SuppressWarnings("serial") +public class Stylepad extends Notepad { + + private static ResourceBundle resources; + private FileDialog fileDialog; + + private static final String[] MENUBAR_KEYS = {"file", "edit", "color", + "font", "debug"}; + private static final String[] FONT_KEYS = {"family1", "family2", "family3", + "family4", "-", "size1", "size2", "size3", "size4", "size5", "-", + "bold", "italic", "underline"}; + private static final String[] TOOLBAR_KEYS = {"new", "open", "save", "-", + "cut", "copy", "paste", "-", "bold", "italic", "underline", "-", + "left", "center", "right"}; + + + static { + try { + properties.load(Stylepad.class.getResourceAsStream( + "resources/StylepadSystem.properties")); + resources = ResourceBundle.getBundle("resources.Stylepad"); + } catch (MissingResourceException | IOException mre) { + System.err.println("Stylepad.properties or StylepadSystem.properties not found"); + System.exit(0); + } + } + + public Stylepad() { + super(); + } + + public static void main(String[] args) { + try { + SwingUtilities.invokeAndWait(new Runnable() { + + public void run() { + JFrame frame = new JFrame(); + frame.setTitle(resources.getString("Title")); + frame.setBackground(Color.lightGray); + frame.getContentPane(). + setLayout(new BorderLayout()); + Stylepad stylepad = new Stylepad(); + frame.getContentPane().add("Center", stylepad); + frame.setJMenuBar(stylepad.createMenubar()); + frame.addWindowListener(new AppCloser()); + frame.pack(); + frame.setSize(600, 480); + frame.setVisible(true); + } + }); + } catch (InterruptedException ex) { + Logger.getLogger(Stylepad.class.getName()).log(Level.SEVERE, null, + ex); + } catch (InvocationTargetException ex) { + Logger.getLogger(Stylepad.class.getName()).log(Level.SEVERE, null, + ex); + } + } + + /** + * Fetch the list of actions supported by this + * editor. It is implemented to return the list + * of actions supported by the superclass + * augmented with the actions defined locally. + */ + @Override + public Action[] getActions() { + Action[] defaultActions = { + new NewAction(), + new OpenAction(), + new SaveAction(), + new StyledEditorKit.FontFamilyAction("font-family-SansSerif", + "SansSerif"), }; + Action[] a = TextAction.augmentList(super.getActions(), defaultActions); + return a; + } + + /** + * Try and resolve the resource name in the local + * resource file, and if not found fall back to + * the superclass resource file. + */ + @Override + protected String getResourceString(String nm) { + String str; + try { + str = Stylepad.resources.getString(nm); + } catch (MissingResourceException mre) { + str = super.getResourceString(nm); + } + return str; + } + + /** + * Create an editor to represent the given document. + */ + @Override + protected JTextComponent createEditor() { + StyleContext sc = new StyleContext(); + DefaultStyledDocument doc = new DefaultStyledDocument(sc); + initDocument(doc, sc); + JTextPane p = new JTextPane(doc); + p.setDragEnabled(true); + + //p.getCaret().setBlinkRate(0); + + return p; + } + + /** + * Create a menu for the app. This is redefined to trap + * a couple of special entries for now. + */ + @Override + protected JMenu createMenu(String key) { + if (key.equals("color")) { + return createColorMenu(); + } + return super.createMenu(key); + } + + @Override + protected String[] getItemKeys(String key) { + switch (key) { + case "font": + return FONT_KEYS; + default: + return super.getItemKeys(key); + } + } + + @Override + protected String[] getMenuBarKeys() { + return MENUBAR_KEYS; + } + + @Override + protected String[] getToolBarKeys() { + return TOOLBAR_KEYS; + } + + // this will soon be replaced + JMenu createColorMenu() { + ActionListener a; + JMenuItem mi; + JMenu menu = new JMenu(getResourceString("color" + labelSuffix)); + mi = new JMenuItem(resources.getString("Red")); + mi.setHorizontalTextPosition(JButton.RIGHT); + mi.setIcon(new ColoredSquare(Color.red)); + a = + new StyledEditorKit.ForegroundAction("set-foreground-red", + Color.red); + //a = new ColorAction(se, Color.red); + mi.addActionListener(a); + menu.add(mi); + mi = new JMenuItem(resources.getString("Green")); + mi.setHorizontalTextPosition(JButton.RIGHT); + mi.setIcon(new ColoredSquare(Color.green)); + a = new StyledEditorKit.ForegroundAction("set-foreground-green", + Color.green); + //a = new ColorAction(se, Color.green); + mi.addActionListener(a); + menu.add(mi); + mi = new JMenuItem(resources.getString("Blue")); + mi.setHorizontalTextPosition(JButton.RIGHT); + mi.setIcon(new ColoredSquare(Color.blue)); + a = new StyledEditorKit.ForegroundAction("set-foreground-blue", + Color.blue); + //a = new ColorAction(se, Color.blue); + mi.addActionListener(a); + menu.add(mi); + + return menu; + } + + void initDocument(DefaultStyledDocument doc, StyleContext sc) { + Wonderland w = new Wonderland(doc, sc); + w.loadDocument(); + } + + JComboBox createFamilyChoices() { + JComboBox b = new JComboBox(); + String[] fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment(). + getAvailableFontFamilyNames(); + for (String fontName : fontNames) { + b.addItem(fontName); + } + return b; + } + + + /** + * Trys to read a file which is assumed to be a + * serialization of a document. + */ + class OpenAction extends AbstractAction { + + OpenAction() { + super(openAction); + } + + @Override + public void actionPerformed(ActionEvent e) { + Frame frame = getFrame(); + if (fileDialog == null) { + fileDialog = new FileDialog(frame); + } + fileDialog.setMode(FileDialog.LOAD); + fileDialog.setVisible(true); + + String file = fileDialog.getFile(); + if (file == null) { + return; + } + String directory = fileDialog.getDirectory(); + File f = new File(directory, file); + if (f.exists()) { + try { + FileInputStream fin = new FileInputStream(f); + ObjectInputStream istrm = new ObjectInputStream(fin); + Document doc = (Document) istrm.readObject(); + if (getEditor().getDocument() != null) { + getEditor().getDocument().removeUndoableEditListener( + undoHandler); + } + getEditor().setDocument(doc); + doc.addUndoableEditListener(undoHandler); + resetUndoManager(); + frame.setTitle(file); + validate(); + } catch (IOException io) { + // should put in status panel + System.err.println("IOException: " + io.getMessage()); + } catch (ClassNotFoundException cnf) { + // should put in status panel + System.err.println("Class not found: " + cnf.getMessage()); + } + } else { + // should put in status panel + System.err.println("No such file: " + f); + } + } + } + + + /** + * Trys to write the document as a serialization. + */ + class SaveAction extends AbstractAction { + + SaveAction() { + super(saveAction); + } + + @Override + public void actionPerformed(ActionEvent e) { + Frame frame = getFrame(); + if (fileDialog == null) { + fileDialog = new FileDialog(frame); + } + fileDialog.setMode(FileDialog.SAVE); + fileDialog.setVisible(true); + String file = fileDialog.getFile(); + if (file == null) { + return; + } + String directory = fileDialog.getDirectory(); + File f = new File(directory, file); + try { + FileOutputStream fstrm = new FileOutputStream(f); + ObjectOutput ostrm = new ObjectOutputStream(fstrm); + ostrm.writeObject(getEditor().getDocument()); + ostrm.flush(); + frame.setTitle(f.getName()); + } catch (IOException io) { + // should put in status panel + System.err.println("IOException: " + io.getMessage()); + } + } + } + + + /** + * Creates an empty document. + */ + class NewAction extends AbstractAction { + + NewAction() { + super(newAction); + } + + @Override + public void actionPerformed(ActionEvent e) { + if (getEditor().getDocument() != null) { + getEditor().getDocument().removeUndoableEditListener(undoHandler); + } + getEditor().setDocument(new DefaultStyledDocument()); + getEditor().getDocument().addUndoableEditListener(undoHandler); + resetUndoManager(); + getFrame().setTitle(resources.getString("Title")); + validate(); + } + } + + + class ColoredSquare implements Icon { + + Color color; + + public ColoredSquare(Color c) { + this.color = c; + } + + @Override + public void paintIcon(Component c, Graphics g, int x, int y) { + Color oldColor = g.getColor(); + g.setColor(color); + g.fill3DRect(x, y, getIconWidth(), getIconHeight(), true); + g.setColor(oldColor); + } + + @Override + public int getIconWidth() { + return 12; + } + + @Override + public int getIconHeight() { + return 12; + } + } +} diff --git a/src/demo/share/jfc/Stylepad/Wonderland.java b/src/demo/share/jfc/Stylepad/Wonderland.java new file mode 100644 index 00000000000..fdc275b7d14 --- /dev/null +++ b/src/demo/share/jfc/Stylepad/Wonderland.java @@ -0,0 +1,299 @@ +/* + * + * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +import java.awt.Color; +import java.util.HashMap; +import java.util.Locale; +import java.util.MissingResourceException; +import java.util.ResourceBundle; +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultStyledDocument; +import javax.swing.text.Style; +import javax.swing.text.StyleConstants; +import javax.swing.text.StyleContext; + + +/** + * hack to load attributed content + */ +public class Wonderland { + + Wonderland(DefaultStyledDocument doc, StyleContext styles) { + this.doc = doc; + this.styles = styles; + runAttr = new HashMap(); + } + + void loadDocument() { + createStyles(); + for (int i = 0; i < data.length; i++) { + Paragraph p = data[i]; + addParagraph(p); + } + } + + void addParagraph(Paragraph p) { + try { + Style s = null; + for (int i = 0; i < p.data.length; i++) { + Run run = p.data[i]; + s = runAttr.get(run.attr); + doc.insertString(doc.getLength(), run.content, s); + } + + // set logical style + Style ls = styles.getStyle(p.logical); + doc.setLogicalStyle(doc.getLength() - 1, ls); + doc.insertString(doc.getLength(), "\n", null); + } catch (BadLocationException e) { + System.err.println("Internal error: " + e); + } + } + + void createStyles() { + // no attributes defined + Style s = styles.addStyle(null, null); + runAttr.put("none", s); + s = styles.addStyle(null, null); + StyleConstants.setItalic(s, true); + StyleConstants.setForeground(s, new Color(153, 153, 102)); + runAttr.put("cquote", s); // catepillar quote + + s = styles.addStyle(null, null); + StyleConstants.setItalic(s, true); + StyleConstants.setForeground(s, new Color(51, 102, 153)); + runAttr.put("aquote", s); // alice quote + + try { + ResourceBundle resources = ResourceBundle.getBundle( + "resources.Stylepad", + Locale.getDefault()); + s = styles.addStyle(null, null); + Icon alice = + new ImageIcon(getClass(). + getResource(resources.getString("aliceGif"))); + StyleConstants.setIcon(s, alice); + runAttr.put("alice", s); // alice + + s = styles.addStyle(null, null); + Icon caterpillar = + new ImageIcon(getClass(). + getResource(resources.getString("caterpillarGif"))); + StyleConstants.setIcon(s, caterpillar); + runAttr.put("caterpillar", s); // caterpillar + + s = styles.addStyle(null, null); + Icon hatter = + new ImageIcon(getClass(). + getResource(resources.getString("hatterGif"))); + StyleConstants.setIcon(s, hatter); + runAttr.put("hatter", s); // hatter + + + } catch (MissingResourceException mre) { + // can't display image + } + + Style def = styles.getStyle(StyleContext.DEFAULT_STYLE); + + Style heading = styles.addStyle("heading", def); + StyleConstants.setFontFamily(heading, "SansSerif"); + StyleConstants.setBold(heading, true); + StyleConstants.setAlignment(heading, StyleConstants.ALIGN_CENTER); + StyleConstants.setSpaceAbove(heading, 10); + StyleConstants.setSpaceBelow(heading, 10); + StyleConstants.setFontSize(heading, 18); + + // Title + Style sty = styles.addStyle("title", heading); + StyleConstants.setFontSize(sty, 32); + + // edition + sty = styles.addStyle("edition", heading); + StyleConstants.setFontSize(sty, 16); + + // author + sty = styles.addStyle("author", heading); + StyleConstants.setItalic(sty, true); + StyleConstants.setSpaceBelow(sty, 25); + + // subtitle + sty = styles.addStyle("subtitle", heading); + StyleConstants.setSpaceBelow(sty, 35); + + // normal + sty = styles.addStyle("normal", def); + StyleConstants.setLeftIndent(sty, 10); + StyleConstants.setRightIndent(sty, 10); + StyleConstants.setFontFamily(sty, "SansSerif"); + StyleConstants.setFontSize(sty, 14); + StyleConstants.setSpaceAbove(sty, 4); + StyleConstants.setSpaceBelow(sty, 4); + } + DefaultStyledDocument doc; + StyleContext styles; + HashMap runAttr; + + + static class Paragraph { + + Paragraph(String logical, Run[] data) { + this.logical = logical; + this.data = data; + } + String logical; + Run[] data; + } + + + static class Run { + + Run(String attr, String content) { + this.attr = attr; + this.content = content; + } + String attr; + String content; + } + Paragraph[] data = new Paragraph[] { + new Paragraph("title", new Run[] { + new Run("none", "ALICE'S ADVENTURES IN WONDERLAND") + }), + new Paragraph("author", new Run[] { + new Run("none", "Lewis Carroll") + }), + new Paragraph("heading", new Run[] { + new Run("alice", " ") + }), + new Paragraph("edition", new Run[] { + new Run("none", "THE MILLENNIUM FULCRUM EDITION 3.0") + }), + new Paragraph("heading", new Run[] { + new Run("none", "CHAPTER V") + }), + new Paragraph("subtitle", new Run[] { + new Run("none", "Advice from a Caterpillar") + }), + new Paragraph("normal", new Run[] { + new Run("none", " "), }), + new Paragraph("normal", new Run[] { + new Run("none", + "The Caterpillar and Alice looked at each other for some time in " + + "silence: at last the Caterpillar took the hookah out " + + "of its mouth, and addressed her in a languid, sleepy " + + "voice.") + }), + new Paragraph("normal", new Run[] { + new Run("cquote", "Who are YOU? "), + new Run("none", "said the Caterpillar.") + }), + new Paragraph("normal", + new Run[] { + new Run("none", + "This was not an encouraging opening for a conversation. Alice " + + "replied, rather shyly, "), + new Run("aquote", + "I--I hardly know, sir, just at present--at least I know who I WAS " + + "when I got up this morning, but I think I must have " + + "been changed several times since then. "), }), + new Paragraph("heading", new Run[] { + new Run("caterpillar", " ") + }), + new Paragraph("normal", new Run[] { + new Run("cquote", "What do you mean by that? "), + new Run("none", " said the Caterpillar sternly. "), + new Run("cquote", "Explain yourself!"), }), + new Paragraph("normal", new Run[] { + new Run("aquote", "I can't explain MYSELF, I'm afraid, sir"), + new Run("none", " said Alice, "), + new Run("aquote", "because I'm not myself, you see."), }), + new Paragraph("normal", new Run[] { + new Run("cquote", "I don't see,"), + new Run("none", " said the Caterpillar."), }), + new Paragraph("normal", + new Run[] { + new Run("aquote", "I'm afraid I can't put it more clearly, "), + new Run("none", "Alice replied very politely, "), + new Run("aquote", + "for I can't understand it myself to begin with; and being so many " + + "different sizes in a day is very confusing."), }), + new Paragraph("normal", new Run[] { + new Run("cquote", "It isn't, "), + new Run("none", "said the Caterpillar.") + }), + new Paragraph("normal", new Run[] { + new Run("aquote", "Well, perhaps you haven't found it so yet,"), + new Run("none", " said Alice; "), + new Run("aquote", + "but when you have to turn into a chrysalis--you will some day, " + + "you know--and then after that into a butterfly, I " + + "should think you'll feel it a little queer, won't you?") + }), + new Paragraph("normal", new Run[] { + new Run("cquote", "Not a bit, "), + new Run("none", "said the Caterpillar.") + }), + new Paragraph("normal", + new Run[] { + new Run("aquote", "Well, perhaps your feelings may be different,"), + new Run("none", " said Alice; "), + new Run("aquote", "all I know is, it would feel very queer to ME."), + }), + new Paragraph("normal", new Run[] { + new Run("cquote", "You!"), + new Run("none", " said the Caterpillar contemptuously. "), + new Run("cquote", "Who are YOU?"), }), + new Paragraph("normal", new Run[] { + new Run("normal", + "Which brought them back again to the beginning of the " + + "conversation. Alice felt a little irritated at the " + + "Caterpillar's making such VERY short remarks, and she " + + "drew herself up and said, very gravely, "), + new Run("aquote", + "I think, you ought to tell me who YOU are, first."), }), + new Paragraph("normal", new Run[] { + new Run("cquote", "Why? "), + new Run("none", "said the Caterpillar."), }), + new Paragraph("heading", new Run[] { + new Run("hatter", " ") + }), + new Paragraph("normal", new Run[] { + new Run("none", " "), }), + new Paragraph("normal", new Run[] { + new Run("none", " "), }), + new Paragraph("normal", new Run[] { + new Run("none", " "), }) + }; +} diff --git a/src/demo/share/jfc/Stylepad/resources/Stylepad.properties b/src/demo/share/jfc/Stylepad/resources/Stylepad.properties new file mode 100644 index 00000000000..29640b77f77 --- /dev/null +++ b/src/demo/share/jfc/Stylepad/resources/Stylepad.properties @@ -0,0 +1,58 @@ +# +# Resource strings for Stylepad example + +Title=Stylepad + +# Menu labels +colorLabel=Color +Red=Red +Green=Green +Blue=Blue + +boldLabel=Bold +italicLabel=Italic + +# font menu + +fontLabel=Font +family1Label=SansSerif +family2Label=Monospaced +family3Label=Serif +family4Label=Lucida Sans +size1Label=10 +size2Label=12 +size3Label=18 +size4Label=24 +size5Label=48 +boldLabel=Bold +italicLabel=Italic +underlineLabel=Underline + +# +# debug Menu definition +# +debugLabel=Debug +dumpLabel=Dump model to System.err +showElementTreeLabel=Show Elements + + +# toolbar definition +boldImage=resources/bold.gif +boldTooltip=Bold +italicImage=resources/italic.gif +italicTooltip=Italic +underlineImage=resources/underline.gif +underlineTooltip=Underline +foregroundImage=resources/fg.gif +leftImage=resources/left.gif +leftTooltip=Left Justify +centerImage=resources/center.gif +centerTooltip=Center Justify +rightImage=resources/right.gif +rightTooltip=Right Justify +bulletsImage=resources/bullets.gif + +# wonderland example images +aliceGif=resources/alice.gif +caterpillarGif=resources/caterpillar.gif +hatterGif=resources/hatter.gif diff --git a/src/demo/share/jfc/Stylepad/resources/StylepadSystem.properties b/src/demo/share/jfc/Stylepad/resources/StylepadSystem.properties new file mode 100644 index 00000000000..02285ec38f9 --- /dev/null +++ b/src/demo/share/jfc/Stylepad/resources/StylepadSystem.properties @@ -0,0 +1,23 @@ +# +# Non-translatable properties for Stylepad example + +ViewportBackingStore=true + +family1Action=font-family-SansSerif +family2Action=font-family-Monospaced +family3Action=font-family-Serif +family4Action=font-family-LucidaSans +size1Action=font-size-10 +size2Action=font-size-12 +size3Action=font-size-18 +size4Action=font-size-24 +size5Action=font-size-48 +boldAction=font-bold +italicAction=font-italic +underlineAction=font-underline + +dumpAction=dump-model + +leftAction=left-justify +centerAction=center-justify +rightAction=right-justify \ No newline at end of file diff --git a/src/demo/share/jfc/Stylepad/resources/Stylepad_ja.properties b/src/demo/share/jfc/Stylepad/resources/Stylepad_ja.properties new file mode 100644 index 00000000000..947169c45c4 --- /dev/null +++ b/src/demo/share/jfc/Stylepad/resources/Stylepad_ja.properties @@ -0,0 +1,58 @@ +# +# Resource strings for Stylepad example + +Title=\u30B9\u30BF\u30A4\u30EB\u30D1\u30C3\u30C9 + +# Menu labels +colorLabel=\u30AB\u30E9\u30FC +Red=\u8D64 +Green=\u7DD1 +Blue=\u9752 + +boldLabel=\u592A\u5B57 +italicLabel=\u30A4\u30BF\u30EA\u30C3\u30AF + +# font menu + +fontLabel=\u30D5\u30A9\u30F3\u30C8 +family1Label=SansSerif +family2Label=\u30E2\u30CE\u30B9\u30DA\u30FC\u30B9 +family3Label=Serif +family4Label=Lucida Sans +size1Label=10 +size2Label=12 +size3Label=18 +size4Label=24 +size5Label=48 +boldLabel=\u592A\u5B57 +italicLabel=\u30A4\u30BF\u30EA\u30C3\u30AF +underlineLabel=\u4E0B\u7DDA + +# +# debug Menu definition +# +debugLabel=\u30C7\u30D0\u30C3\u30B0 +dumpLabel=\u30E2\u30C7\u30EB\u3092System.err\u306B\u30C0\u30F3\u30D7 +showElementTreeLabel=\u8981\u7D20\u306E\u8868\u793A + + +# toolbar definition +boldImage=resources/bold.gif +boldTooltip=\u592A\u5B57 +italicImage=resources/italic.gif +italicTooltip=\u30A4\u30BF\u30EA\u30C3\u30AF +underlineImage=resources/underline.gif +underlineTooltip=\u4E0B\u7DDA +foregroundImage=resources/fg.gif +leftImage=resources/left.gif +leftTooltip=\u5DE6\u63C3\u3048 +centerImage=resources/center.gif +centerTooltip=\u4E2D\u592E\u63C3\u3048 +rightImage=resources/right.gif +rightTooltip=\u53F3\u63C3\u3048 +bulletsImage=resources/bullets.gif + +# wonderland example images +aliceGif=resources/alice.gif +caterpillarGif=resources/caterpillar.gif +hatterGif=resources/hatter.gif diff --git a/src/demo/share/jfc/Stylepad/resources/Stylepad_zh_CN.properties b/src/demo/share/jfc/Stylepad/resources/Stylepad_zh_CN.properties new file mode 100644 index 00000000000..1ea3d0a7612 --- /dev/null +++ b/src/demo/share/jfc/Stylepad/resources/Stylepad_zh_CN.properties @@ -0,0 +1,58 @@ +# +# Resource strings for Stylepad example + +Title=StylePad + +# Menu labels +colorLabel=\u989C\u8272 +Red=\u7EA2\u8272 +Green=\u7EFF\u8272 +Blue=\u84DD\u8272 + +boldLabel=\u7C97\u4F53 +italicLabel=\u659C\u4F53 + +# font menu + +fontLabel=\u5B57\u4F53 +family1Label=SansSerif +family2Label=Monospaced +family3Label=Serif +family4Label=Lucida Sans +size1Label=10 +size2Label=12 +size3Label=18 +size4Label=24 +size5Label=48 +boldLabel=\u7C97\u4F53 +italicLabel=\u659C\u4F53 +underlineLabel=\u4E0B\u5212\u7EBF + +# +# debug Menu definition +# +debugLabel=\u8C03\u8BD5 +dumpLabel=\u5C06\u6A21\u578B\u8F6C\u50A8\u5230 System.err +showElementTreeLabel=\u663E\u793A\u5143\u7D20 + + +# toolbar definition +boldImage=resources/bold.gif +boldTooltip=\u7C97\u4F53 +italicImage=resources/italic.gif +italicTooltip=\u659C\u4F53 +underlineImage=resources/underline.gif +underlineTooltip=\u4E0B\u5212\u7EBF +foregroundImage=resources/fg.gif +leftImage=resources/left.gif +leftTooltip=\u5DE6\u5BF9\u9F50 +centerImage=resources/center.gif +centerTooltip=\u4E2D\u95F4\u5BF9\u9F50 +rightImage=resources/right.gif +rightTooltip=\u53F3\u5BF9\u9F50 +bulletsImage=resources/bullets.gif + +# wonderland example images +aliceGif=resources/alice.gif +caterpillarGif=resources/caterpillar.gif +hatterGif=resources/hatter.gif diff --git a/src/demo/share/jfc/Stylepad/resources/alice.gif b/src/demo/share/jfc/Stylepad/resources/alice.gif new file mode 100644 index 0000000000000000000000000000000000000000..3202a2e03c4873fbbf5e7140fb8a7d971f1388af GIT binary patch literal 6857 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 G4AuY%#w1h# literal 0 HcmV?d00001 diff --git a/src/demo/share/jfc/Stylepad/resources/bullets.gif b/src/demo/share/jfc/Stylepad/resources/bullets.gif new file mode 100644 index 0000000000000000000000000000000000000000..4d2087bfbd4667fc08d8096832c97999014a769c GIT binary patch literal 118 zcmZ?wbhEHb6l4%!*v!E2|Ns961_p)(h6XSNq=76TIB?*=f1o%>0fhJuWTmAsDE?&O zUh3*ldbzPAcIQg&_Dyd$3o=*( E01mb)3IG5A literal 0 HcmV?d00001 diff --git a/src/demo/share/jfc/Stylepad/resources/caterpillar.gif b/src/demo/share/jfc/Stylepad/resources/caterpillar.gif new file mode 100644 index 0000000000000000000000000000000000000000..ed37ee26b215b945e963195063e33efdd54a41fd GIT binary patch literal 9404 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 literal 0 HcmV?d00001 diff --git a/src/demo/share/jfc/Stylepad/resources/fg.gif b/src/demo/share/jfc/Stylepad/resources/fg.gif new file mode 100644 index 0000000000000000000000000000000000000000..8475160c18cb23e07250a5b13274e4488da67ab5 GIT binary patch literal 185 zcmZ?wbhEHblwgox*v!E2|Ns961_p)(h6XSNq=76TIB?*=f1o%>0fhJuWTmAsDE?&O z6in&> literal 0 HcmV?d00001 diff --git a/src/demo/share/jfc/Stylepad/resources/hatter.gif b/src/demo/share/jfc/Stylepad/resources/hatter.gif new file mode 100644 index 0000000000000000000000000000000000000000..012c7cd854112103e8ef2fe9ae1e75f20eed17e9 GIT binary patch literal 17716 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 literal 0 HcmV?d00001 diff --git a/src/demo/share/jfc/Stylepad/resources/italic.gif b/src/demo/share/jfc/Stylepad/resources/italic.gif new file mode 100644 index 0000000000000000000000000000000000000000..0042b7f4cf2015b24b3c72bc73687b669f0d6d6d GIT binary patch literal 97 zcmZ?wbhEHblwgoxnE0RJ|NsAI&YWRjU^sB#fZ|UUMg|6E1|1+5C@aChz+^P1f92`7 z{L=*{`ZBJX6}kFd>!R}B!>yefD-s#Z_kFNfU0ShGS3Kays^%w6q6`;Xe6qM0tO2{3 BB`N>_ literal 0 HcmV?d00001 diff --git a/src/demo/share/jfc/Stylepad/resources/left.gif b/src/demo/share/jfc/Stylepad/resources/left.gif new file mode 100644 index 0000000000000000000000000000000000000000..e9fe1b7ec04eec89cdf42343aaaceda915e5cd93 GIT binary patch literal 95 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 literal 0 HcmV?d00001 diff --git a/src/demo/share/jfc/Stylepad/resources/rabbit2.gif b/src/demo/share/jfc/Stylepad/resources/rabbit2.gif new file mode 100644 index 0000000000000000000000000000000000000000..68f0d47122635f74318eeed5d858c463240e3e61 GIT binary patch literal 7719 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 X*z+-MBc|-ZpFoWa&&O~c9>f0uSN1wY literal 0 HcmV?d00001 diff --git a/src/demo/share/jfc/Stylepad/resources/right.gif b/src/demo/share/jfc/Stylepad/resources/right.gif new file mode 100644 index 0000000000000000000000000000000000000000..64b7995052ba4b503c8d67e7f56ee7113cbc8545 GIT binary patch literal 95 zcmZ?wbhEHblwgoxnE0RJ|Ns9C3=9Vj8~~DvKUo+V7?>DzfNY?w1dweorGMq=xBSUG xTcV^I@5P+fk6Co0WEp4E<5zR?W~~!{Qf8pC+57LkioDE^7W)