EventBrowserView.java

00001 package edu.stanford.hci.r3.events.replay;
00002 
00003 import java.awt.BorderLayout;
00004 import java.awt.Color;
00005 import java.awt.Component;
00006 import java.awt.Container;
00007 import java.awt.Font;
00008 import java.awt.event.ActionEvent;
00009 import java.awt.event.ActionListener;
00010 import java.awt.event.MouseAdapter;
00011 import java.awt.event.MouseEvent;
00012 import java.io.File;
00013 
00014 import javax.swing.BorderFactory;
00015 import javax.swing.BoundedRangeModel;
00016 import javax.swing.JButton;
00017 import javax.swing.JFileChooser;
00018 import javax.swing.JFrame;
00019 import javax.swing.JPanel;
00020 import javax.swing.JTextArea;
00021 
00022 import prefuse.Display;
00023 import prefuse.data.query.NumberRangeModel;
00024 import edu.stanford.hci.r3.PaperToolkit;
00025 import edu.stanford.hci.r3.pattern.calibrate.CalibrationEngine;
00026 import edu.stanford.hci.r3.pen.ink.Ink;
00027 import edu.stanford.hci.r3.util.DebugUtils;
00028 import edu.stanford.hci.r3.util.WindowUtils;
00029 import edu.stanford.hci.r3.util.components.JRangeSlider;
00030 import edu.stanford.hci.r3.util.files.FileUtils;
00031 
00043 public class EventBrowserView extends JFrame {
00044 
00048         private EventBrowser browser;
00049 
00050         private JPanel commandsPanel;
00051 
00052         private Display display;
00053 
00054         private JPanel eventSliderPanel;
00055 
00056         private JPanel eventVizView;
00057 
00058         private JButton playButton;
00059 
00060         private BoundedRangeModel rangeModel;
00061 
00062         private JRangeSlider rangeSlider;
00063 
00064         private JTextArea infoArea;
00065 
00066         private JPanel bottomPanel;
00067 
00068         private JButton importButton;
00069 
00070         private JButton clearButton;
00071 
00072         private JButton playFastButton;
00073 
00078         public EventBrowserView(EventBrowser brows, Display disp) {
00079                 browser = brows;
00080                 display = disp;
00081                 setTitle("Event Browser");
00082                 setSize(800, 320);
00083                 setupComponents();
00084 
00085                 // this frame is displayed by the application manager
00086                 // so it should not exit the application on close
00087 
00088                 // center it relative to the dekstop
00089                 setLocation(WindowUtils.getWindowOrigin(this, WindowUtils.DESKTOP_CENTER));
00090         }
00091 
00095         private JButton getClearButton() {
00096                 if (clearButton == null) {
00097                         clearButton = new JButton("Clear");
00098                         clearButton.addActionListener(new ActionListener() {
00099                                 public void actionPerformed(ActionEvent e) {
00100                                         browser.clearLoadedEvents();
00101                                 }
00102                         });
00103                 }
00104                 return clearButton;
00105         }
00106 
00110         private Component getCommandsPanel() {
00111                 if (commandsPanel == null) {
00112                         commandsPanel = new JPanel();
00113                         commandsPanel.add(getClearButton());
00114                         commandsPanel.add(getImportButton());
00115                         commandsPanel.add(getExportButton());
00116                         commandsPanel.add(getPlayButton());
00117                 }
00118                 return commandsPanel;
00119         }
00120 
00121         private Component getInfoArea() {
00122                 if (infoArea == null) {
00123                         infoArea = new JTextArea();
00124                         infoArea.setEditable(false);
00125                         infoArea.setFont(new Font("Tahoma", Font.PLAIN, 14));
00126                         infoArea.setBorder(BorderFactory.createEmptyBorder(7, 5, 7, 5));
00127                         infoArea.setForeground(Color.WHITE);
00128                         infoArea.setText("Ready...");
00129                 }
00130                 return infoArea;
00131         }
00132 
00136         private Component getEventSliderPanel() {
00137                 if (eventSliderPanel == null) {
00138                         eventSliderPanel = new JPanel();
00139                         eventSliderPanel.setLayout(new BorderLayout());
00140                         eventSliderPanel.add(getEventVizView(), BorderLayout.SOUTH);
00141                         eventSliderPanel.add(getRangeSlider(), BorderLayout.SOUTH);
00142                 }
00143                 return eventSliderPanel;
00144         }
00145 
00149         private Component getEventVizView() {
00150                 if (eventVizView == null) {
00151                         eventVizView = new JPanel();
00152                         eventVizView.setLayout(new BorderLayout());
00153                         eventVizView.add(display, BorderLayout.CENTER);
00154                 }
00155                 return eventVizView;
00156         }
00157 
00161         private JButton getExportButton() {
00162                 return new JButton("Export");
00163         }
00164 
00168         private JButton getImportButton() {
00169                 if (importButton == null) {
00170                         importButton = new JButton("Import");
00171                         importButton.addActionListener(new ActionListener() {
00172                                 public void actionPerformed(ActionEvent e) {
00173                                         JFileChooser chooser = FileUtils.createNewFileChooser(EventReplayManager.FILE_EXTENSION);
00174                                         chooser.setCurrentDirectory(new File(PaperToolkit.getToolkitRootPath(), "eventData/"));
00175                                         chooser.setMultiSelectionEnabled(true);
00176                                         int result = chooser.showDialog(null, "Import Event Data");
00177                                         if (result == JFileChooser.APPROVE_OPTION) {
00178                                                 File[] selectedFiles = chooser.getSelectedFiles();
00179                                                 for (File f : selectedFiles) {
00180                                                         DebugUtils.println("Loading " + f);
00181                                                         browser.loadEventData(f);
00182                                                 }
00183                                         }
00184 
00185                                 }
00186                         });
00187                 }
00188                 return importButton;
00189         }
00190 
00194         private JButton getPlayButton() {
00195                 if (playButton == null) {
00196                         playButton = new JButton("Play");
00197                         playButton.addActionListener(new ActionListener() {
00198                                 public void actionPerformed(ActionEvent e) {
00199                                         try {
00200                                                 DebugUtils.println("Waiting 1.5 seconds...");
00201                                                 Thread.sleep(1500);
00202                                                 DebugUtils.println("Play Events Now...");
00203                                         } catch (InterruptedException ex) {
00204                                                 ex.printStackTrace();
00205                                         }
00206                                         browser.replayLoadedEvents();
00207                                 }
00208                         });
00209                 }
00210                 return playButton;
00211         }
00212 
00213         private JButton getPlayFastButton() {
00214                 if (playFastButton == null) {
00215                         playFastButton = new JButton("Play Fast");
00216                         playFastButton.addActionListener(new ActionListener() {
00217                                 public void actionPerformed(ActionEvent e) {
00218                                         try {
00219                                                 DebugUtils.println("Waiting 1.5 seconds...");
00220                                                 Thread.sleep(1500);
00221                                                 DebugUtils.println("Play Events Now...");
00222                                         } catch (InterruptedException ex) {
00223                                                 ex.printStackTrace();
00224                                         }
00225                                         browser.replayLoadedEvents();
00226                                 }
00227                         });
00228                 }
00229                 return playFastButton;
00230         }
00231 
00235         private BoundedRangeModel getRangeModel() {
00236                 if (rangeModel == null) {
00237                         rangeModel = new NumberRangeModel(0, 1000, 0, 1000);
00238                 }
00239                 return rangeModel;
00240         }
00241 
00245         private Component getRangeSlider() {
00246                 if (rangeSlider == null) {
00247                         rangeSlider = new EventSlider(getRangeModel(), JRangeSlider.HORIZONTAL,
00248                                         JRangeSlider.LEFTRIGHT_TOPBOTTOM);
00249                         rangeSlider.setBackground(Color.DARK_GRAY);
00250                         rangeSlider.setForeground(new Color(202, 217, 253));
00251                         rangeSlider.setThumbColor(new Color(249, 248, 244));
00252                         rangeSlider.setMinExtent(1); // between the two handles
00253                         rangeSlider.addMouseListener(new MouseAdapter() {
00254                                 public void mousePressed(MouseEvent e) {
00255                                         DebugUtils.println("Pressed");
00256                                 }
00257 
00258                                 public void mouseReleased(MouseEvent e) {
00259                                         DebugUtils.println("Released");
00260                                 }
00261                         });
00262 
00263                 }
00264                 return rangeSlider;
00265         }
00266 
00270         private void setupComponents() {
00271                 final Container contentPane = getContentPane();
00272                 contentPane.add(getEventSliderPanel(), BorderLayout.CENTER);
00273                 contentPane.add(getBottomPanel(), BorderLayout.SOUTH);
00274         }
00275 
00276         private Component getBottomPanel() {
00277                 if (bottomPanel == null) {
00278                         bottomPanel = new JPanel();
00279                         bottomPanel.setLayout(new BorderLayout());
00280                         bottomPanel.add(getInfoArea(), BorderLayout.CENTER);
00281                         bottomPanel.add(getCommandsPanel(), BorderLayout.EAST);
00282 
00283                 }
00284                 return bottomPanel;
00285         }
00286 }

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