00001 package edu.stanford.hci.r3.tools.design.swing;
00002
00003 import java.awt.Dimension;
00004 import java.awt.event.ActionEvent;
00005 import java.awt.event.ActionListener;
00006
00007 import javax.swing.JButton;
00008 import javax.swing.JComponent;
00009 import javax.swing.JFrame;
00010 import javax.swing.JPanel;
00011 import javax.swing.JTextField;
00012
00013 import edu.stanford.hci.r3.events.EventHandler;
00014 import edu.stanford.hci.r3.events.PenEvent;
00015 import edu.stanford.hci.r3.events.handlers.ClickAdapter;
00016 import edu.stanford.hci.r3.paper.Region;
00017 import edu.stanford.hci.r3.paper.Sheet;
00018 import edu.stanford.hci.r3.paper.regions.XMLRegion;
00019 import edu.stanford.hci.r3.pen.PenSample;
00020 import edu.stanford.hci.r3.tools.design.util.Regions;
00021
00032 public class SheetFrame extends JFrame {
00033
00034 private static final long serialVersionUID = 8854448449113342296L;
00035
00044 public SheetFrame(Sheet sheet, int width, int height) {
00045 super(sheet.getName());
00046
00047 double scale = Regions.makeItFit(sheet.getWidth().getValue(),
00048 sheet.getHeight().getValue(),
00049 width,
00050 height);
00051
00052 JPanel panel = new JPanel(null);
00053 panel.setPreferredSize(new Dimension((int)(sheet.getWidth().getValue() * scale),
00054 (int)(sheet.getHeight().getValue() * scale)));
00055 getContentPane().add(panel);
00056 pack();
00057
00058 setLayout(null);
00059
00060 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
00061 setResizable(false);
00062
00063
00064 for (Region r : sheet.getRegions()) {
00065 JComponent c = null;
00066
00067
00068 if (r instanceof XMLRegion) {
00069 final XMLRegion xr = (XMLRegion)r;
00070 String type = xr.getType();
00071 if (type!=null) {
00072 if (type.equals("click")) {
00073 JButton button = new JButton(xr.getName());
00074 button.addActionListener(new ActionListener() {
00075 public void actionPerformed(ActionEvent e) {
00076 long ts = System.currentTimeMillis();
00077 for (EventHandler eh : xr.getEventHandlers()) {
00078 if (eh instanceof ClickAdapter)
00079 ((ClickAdapter)eh).clicked(
00080 new PenEvent(0,"swing",ts,
00081 new PenSample(0,0,128,ts)));
00082 }
00083 }
00084 });
00085 c = button;
00086 } else if (type.equals("handwriting")) {
00087 JTextField tf = new JTextField();
00088 tf.addActionListener(new ActionListener() {
00089 public void actionPerformed(ActionEvent e) {
00090
00091 }
00092 });
00093 c = tf;
00094 }
00095 }
00096 }
00097
00098 if (c==null)
00099 c = new RegionComponent(r);
00100
00101
00102 panel.add(c);
00103
00104 c.setBounds((int)(r.getOriginX().getValue() * scale),
00105 (int)(r.getOriginY().getValue() * scale),
00106 (int)(r.getWidth().getValue() * scale),
00107 (int)(r.getHeight().getValue() * scale));
00108 }
00109 }
00110
00111 }