// Copyright 2000, SLAC, Stanford, California, U.S.A. package org.freehep.util.commanddispatcher.test; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.net.URL; import javax.swing.AbstractButton; import javax.swing.JComponent; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JToolBar; import org.freehep.util.commanddispatcher.BooleanCommandState; import org.freehep.util.commanddispatcher.CommandProcessor; import org.freehep.util.commanddispatcher.CommandSourceAdapter; import org.freehep.util.commanddispatcher.CommandState; import org.freehep.util.commanddispatcher.CommandTargetManager; import org.freehep.xml.menus.XMLMenuBuilder; import org.xml.sax.SAXException; /** * @author Tony Johnson (tonyj@slac.stanford.edu) * @version $Id: Test.java 8584 2006-08-10 23:06:37Z duns $ */ public class Test extends org.freehep.swing.test.TestFrame { private final static Class base = org.freehep.xml.menus.test.Test.class; private CommandTargetManager cmdManager; public static void main(String[] argv) throws Exception { new Test(); } protected JComponent createComponent() { JPanel main = new JPanel(new BorderLayout()); try { cmdManager = new CommandTargetManager(); URL xml = base.getResource("menus.xml"); final XMLMenuBuilder menus = new MyXMLMenuBuilder(xml); cmdManager.add(new MyCommandProcessor()); cmdManager.start(); JMenuBar b = menus.getMenuBar("mainMenu"); main.add(b, BorderLayout.NORTH); JPanel p = new JPanel(); main.add(p, BorderLayout.CENTER); p.setLayout(new BorderLayout()); JToolBar t = menus.getToolBar("applicationToolBar"); p.add(t, BorderLayout.NORTH); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if (e.isPopupTrigger()) showPopup(e); super.mousePressed(e); } public void mouseReleased(MouseEvent e) { if (e.isPopupTrigger()) showPopup(e); super.mouseReleased(e); } private void showPopup(MouseEvent e) { JPopupMenu popup = menus.getPopupMenu("toolbarPopupMenu"); popup.show(Test.this, e.getX(), e.getY()); } }); } catch (Exception x) { x.printStackTrace(); System.exit(0); } main.setPreferredSize(new Dimension(400, 200)); return main; } public class MyCommandProcessor extends CommandProcessor { private boolean enablePrint = true; public void enableEnablePrint(BooleanCommandState state) { state.setEnabled(true); state.setSelected(enablePrint); } public void enablePrint(CommandState state) { state.setEnabled(enablePrint); } public void onEnablePrint(boolean state) { enablePrint = state; setChanged(); } public void onExit() { quit(); } public void onPrint() { System.out.println("Print"); } } private class MyXMLMenuBuilder extends XMLMenuBuilder { // MD: Jikes had a problem compiling an anonymous inner class with a throw clause in // the constructor, therefore I redefined it as an inner class MyXMLMenuBuilder(URL xml) throws SAXException, IOException { build(xml); } protected JMenuItem createMenuItem(String className, String name, String type, String command) throws SAXException { JMenuItem result = super.createMenuItem(className, name, type, command); cmdManager.add(new CommandSourceAdapter(result)); return result; } protected AbstractButton createToolBarItem(String className, String name, String type, String command) throws SAXException { AbstractButton result = super.createToolBarItem(className, name, type, command); cmdManager.add(new CommandSourceAdapter(result)); return result; } } }