SheetFrame.java

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                 // Loop through regions
00064                 for (Region r : sheet.getRegions()) {
00065                         JComponent c = null;
00066                         
00067                         // Find regions with meta data
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                                                                 // TODO: Gotta figure out what happens here
00091                                                         }
00092                                                 });
00093                                                 c = tf;
00094                                         }
00095                                 }
00096                         }
00097                         // Otherwise use a default component
00098                         if (c==null)
00099                                 c = new RegionComponent(r);
00100                         
00101                         // Add it
00102                         panel.add(c);
00103                         // Set the bounds
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 }

Generated on Sat Apr 14 18:21:38 2007 for R3 Paper Toolkit by  doxygen 1.4.7