/* * $Id$ * * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. */ package org.jdesktop.swingx; import java.awt.BorderLayout; import java.awt.Dimension; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import javax.swing.Action; import javax.swing.ActionMap; import javax.swing.JEditorPane; import javax.swing.JToolBar; import javax.swing.ListModel; import javax.swing.event.ListDataListener; import org.jdesktop.swingx.action.AbstractActionExt; import org.jdesktop.swingx.action.ActionContainerFactory; import org.jdesktop.swingx.action.ActionFactory; import org.jdesktop.swingx.action.ActionManager; /** * A unit test for the JXEditorPane * * @author Mark Davidson */ public class JXEditorPaneVisualCheck extends JXEditorPaneTest { @SuppressWarnings("all") private static final Logger LOG = Logger.getLogger(JXEditorPaneVisualCheck.class .getName()); private static String testText = "This is an example of some text"; public static void main(String[] args) throws Exception { // setSystemLF(true); JXEditorPaneVisualCheck test = new JXEditorPaneVisualCheck(); try { test.runInteractiveTests(); // test.runInteractiveTests("interactive.*Table.*"); // test.runInteractiveTests("interactive.*List.*"); } catch (Exception e) { System.err.println("exception when executing interactive tests:"); e.printStackTrace(); } } /** * Issue #289-swingx: JXEditorPane actions should be disabled if not * applicable. * checking action enabled behaviour of core editorpane. * Doing nothing to enable/disable depending on editable state? * @throws IOException * */ public void interactiveXEditorStyledActions() throws IOException { JXEditorPane editor = new JXEditorPane(); editor.setEditable(false); editor.setPreferredSize(new Dimension(600, 400)); Action[] actions = editor.getActions(); ActionManager manager = ActionManager.getInstance(); List<Object> actionNames = new ArrayList<Object>(); StringBuffer buffer = new StringBuffer("No. of default actions: " + actions.length); ActionMap map = editor.getActionMap(); Object[] keys = map.keys(); int count = keys != null ? keys.length : 0; buffer.append("\n No. of actions in ActionMap: " + count); for (int i = 0; i < actions.length; i++) { // TODO: are names allowed to be anything else as String? // same question in other test methods as well Object id = actions[i].getValue(Action.NAME); // ?? the id in the actionManager is doc'ed as ACTION_COMMAND? // which would imply to be a String (assumption somewhere in core) manager.addAction(id, actions[i]); actionNames.add(id); buffer.append("\n" + actions[i].toString()); } editor.setText(buffer.toString()); ActionContainerFactory factory = new ActionContainerFactory(manager); JToolBar toolbar = factory.createToolBar(actionNames); toolbar.setOrientation(JToolBar.VERTICAL); editor.setEditable(false); editor.setPreferredSize(new Dimension(600, 400)); JXList list = new JXList(true); list.setModel(createListModel(actionNames)); JXFrame frame = wrapWithScrollingInFrame(editor, list, "Looking at swingx editor default and styled actions (show in editor <--> list)"); frame.getContentPane().add(toolbar, BorderLayout.WEST); frame.setVisible(true); } private ListModel createListModel(final List<Object> actionNames) { ListModel model = new ListModel() { public int getSize() { return actionNames.size(); } public Object getElementAt(int index) { return actionNames.get(index); } public void addListDataListener(ListDataListener l) { // TODO Auto-generated method stub } public void removeListDataListener(ListDataListener l) { // TODO Auto-generated method stub } }; return model; } /** * Issue #289-swingx: JXEditorPane actions should be disabled if not * applicable. * checking action enabled behaviour of core editorpane. * Doing nothing to enable/disable depending on editable state? * */ public void interactiveXEditorDefaultActions() { JXEditorPane editor = new JXEditorPane(); editor.setEditable(false); editor.setPreferredSize(new Dimension(600, 400)); Action[] actions = editor.getActions(); ActionManager manager = ActionManager.getInstance(); List<Object> actionNames = new ArrayList<Object>(); StringBuffer buffer = new StringBuffer("No. of default actions: " + actions.length); ActionMap map = editor.getActionMap(); Object[] keys = map.keys(); int count = keys != null ? keys.length : 0; buffer.append("\n No. of actions in ActionMap: " + count); for (int i = 0; i < actions.length; i++) { Object id = actions[i].getValue(Action.NAME); manager.addAction(id, actions[i]); actionNames.add(id); buffer.append("\n" + actions[i].toString()); } editor.setText(buffer.toString()); ActionContainerFactory factory = new ActionContainerFactory(manager); JToolBar toolbar = factory.createToolBar(actionNames); toolbar.setOrientation(JToolBar.VERTICAL); editor.setEditable(false); editor.setPreferredSize(new Dimension(600, 400)); JXFrame frame = wrapWithScrollingInFrame(editor, "Looking at swingx editor default actions (show in xeditor)"); frame.getContentPane().add(toolbar, BorderLayout.WEST); frame.setVisible(true); } /** * Issue #289-swingx: JXEditorPane actions should be disabled if not * applicable. * checking action enabled behaviour of core editorpane. * Doing nothing to enable/disable depending on editable state? * */ public void interactiveEditorDefaultActions() { JEditorPane editor = new JEditorPane(); editor.setText(testText); Action[] actions = editor.getActions(); ActionManager manager = ActionManager.getInstance(); List<Object> actionNames = new ArrayList<Object>(); StringBuffer buffer = new StringBuffer("No. of default actions: " + actions.length); ActionMap map = editor.getActionMap(); Object[] keys = map.keys(); int count = keys != null ? keys.length : 0; buffer.append("\n No. of actions in ActionMap: " + count); for (int i = 0; i < actions.length; i++) { Object id = actions[i].getValue(Action.NAME); manager.addAction(id, actions[i]); actionNames.add(id); buffer.append("\n" + actions[i].toString()); } editor.setText(buffer.toString()); ActionContainerFactory factory = new ActionContainerFactory(manager); JToolBar toolbar = factory.createToolBar(actionNames); toolbar.setOrientation(JToolBar.VERTICAL); editor.setEditable(false); editor.setPreferredSize(new Dimension(600, 400)); JXFrame frame = wrapWithScrollingInFrame(editor, "Looking at core default actions (show in core editor)"); frame.getContentPane().add(toolbar, BorderLayout.WEST); frame.setVisible(true); } /** * JW: this is oold - no idea if that's the way to handle actions!. * */ public void interactiveXEditorActions() { //AbstractActionExt[] actions = new AbstractActionExt[14]; List<AbstractActionExt> actions = new ArrayList<AbstractActionExt>(); actions.add(ActionFactory.createTargetableAction("cut-to-clipboard", "Cut", "C")); actions.add(ActionFactory.createTargetableAction("copy-to-clipboard", "Copy", "P")); actions.add(ActionFactory.createTargetableAction("paste-from-clipboard", "Paste", "T")); actions.add(ActionFactory.createTargetableAction("undo", "Undo", "U")); actions.add(ActionFactory.createTargetableAction("redo", "Redo", "R")); actions.add(ActionFactory.createTargetableAction("insert-break", "LF", "F")); actions.add(ActionFactory.createTargetableAction("left-justify", "Left", "L", true, "position-group")); actions.add(ActionFactory.createTargetableAction("center-justify", "Center", "C", true, "position-group")); actions.add(ActionFactory.createTargetableAction("right-justify", "Right", "R", true, "position-group")); actions.add(ActionFactory.createTargetableAction("font-bold", "Bold", "B", true)); actions.add(ActionFactory.createTargetableAction("font-italic", "Italic", "I", true)); actions.add(ActionFactory.createTargetableAction("font-underline", "Underline", "U", true)); actions.add(ActionFactory.createTargetableAction("InsertUnorderedList", "UL", "U", true)); actions.add(ActionFactory.createTargetableAction("InsertOrderedList", "OL", "O", true)); actions.add(ActionFactory.createTargetableAction("InsertHR", "HR", "H")); ActionManager manager = ActionManager.getInstance(); List<Object> actionNames = new ArrayList<Object>(); for (AbstractActionExt ext : actions) { manager.addAction(ext); actionNames.add(ext.getActionCommand()); } // Populate the toolbar. Must use the ActionContainerFactory to ensure // that toggle actions are supported. ActionContainerFactory factory = new ActionContainerFactory(manager); JToolBar toolbar = factory.createToolBar(actionNames); URL url = JXEditorPaneVisualCheck.class.getResource("resources/test.html"); JXEditorPane editor = null; try { editor = new JXEditorPane(url); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } editor.setEditable(false); editor.setPreferredSize(new Dimension(600, 400)); // toolbar.add(editor.getParagraphSelector()); JXFrame frame = wrapWithScrollingInFrame(editor, "Swingx Editor tester"); frame.getContentPane().add(toolbar, BorderLayout.NORTH); frame.pack(); frame.setVisible(true); } /** * JW: this is oold - no idea if that's the way to handle actions!. * */ public void interactiveEditorActions() { //AbstractActionExt[] actions = new AbstractActionExt[14]; List<AbstractActionExt> actions = new ArrayList<AbstractActionExt>(); // actions.add(ActionFactory.createTargetableAction("cut-to-clipboard", "Cut", "C")); // actions.add(ActionFactory.createTargetableAction("copy-to-clipboard", "Copy", "P")); // actions.add(ActionFactory.createTargetableAction("paste-from-clipboard", "Paste", "T")); actions.add(ActionFactory.createTargetableAction("cut", "Cut", "C")); actions.add(ActionFactory.createTargetableAction("copy", "Copy", "P")); actions.add(ActionFactory.createTargetableAction("paste", "Paste", "T")); actions.add(ActionFactory.createTargetableAction("undo", "Undo", "U")); actions.add(ActionFactory.createTargetableAction("redo", "Redo", "R")); actions.add(ActionFactory.createTargetableAction("insert-break", "LF", "F")); actions.add(ActionFactory.createTargetableAction("left-justify", "Left", "L", true, "position-group")); actions.add(ActionFactory.createTargetableAction("center-justify", "Center", "C", true, "position-group")); actions.add(ActionFactory.createTargetableAction("right-justify", "Right", "R", true, "position-group")); actions.add(ActionFactory.createTargetableAction("font-bold", "Bold", "B", true)); actions.add(ActionFactory.createTargetableAction("font-italic", "Italic", "I", true)); actions.add(ActionFactory.createTargetableAction("font-underline", "Underline", "U", true)); actions.add(ActionFactory.createTargetableAction("InsertUnorderedList", "UL", "U", true)); actions.add(ActionFactory.createTargetableAction("InsertOrderedList", "OL", "O", true)); actions.add(ActionFactory.createTargetableAction("InsertHR", "HR", "H")); ActionManager manager = ActionManager.getInstance(); List<Object> actionNames = new ArrayList<Object>(); for (AbstractActionExt ext : actions) { manager.addAction(ext); actionNames.add(ext.getActionCommand()); } // Populate the toolbar. Must use the ActionContainerFactory to ensure // that toggle actions are supported. ActionContainerFactory factory = new ActionContainerFactory(manager); JToolBar toolbar = factory.createToolBar(actionNames); URL url = JXEditorPaneVisualCheck.class.getResource("resources/test.html"); JEditorPane editor = null; try { editor = new JEditorPane(url); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } editor.setEditable(false); editor.setPreferredSize(new Dimension(600, 400)); // toolbar.add(editor.getParagraphSelector()); JXFrame frame = wrapWithScrollingInFrame(editor, "Core Editor tester"); frame.getContentPane().add(toolbar, BorderLayout.NORTH); frame.pack(); frame.setVisible(true); } }