Designer.java

00001 package edu.stanford.hci.r3.tools.design;
00002 
00003 import java.awt.BorderLayout;
00004 import java.awt.Component;
00005 import java.awt.Container;
00006 import java.awt.Frame;
00007 import java.awt.GraphicsDevice;
00008 import java.awt.GraphicsEnvironment;
00009 import java.awt.event.WindowAdapter;
00010 import java.awt.event.WindowEvent;
00011 import java.awt.event.WindowListener;
00012 import java.util.List;
00013 
00014 import javax.swing.Box;
00015 import javax.swing.JFrame;
00016 import javax.swing.JPanel;
00017 import javax.swing.JScrollPane;
00018 import javax.swing.ScrollPaneConstants;
00019 import javax.swing.WindowConstants;
00020 
00021 import edu.stanford.hci.r3.PaperToolkit;
00022 import edu.stanford.hci.r3.tools.design.gui.DocumentPanel;
00023 import edu.stanford.hci.r3.tools.design.gui.toolbar.DebuggingTasks;
00024 import edu.stanford.hci.r3.tools.design.gui.toolbar.DocumentTasks;
00025 import edu.stanford.hci.r3.tools.design.gui.toolbar.UserTestTasks;
00026 import edu.stanford.hci.r3.util.DebugUtils;
00027 import edu.stanford.hci.r3.util.WindowUtils;
00028 import edu.stanford.hci.r3.util.components.ribbons.RibbonPanel;
00029 import edu.stanford.hci.r3.util.components.ribbons.RibbonToolbar;
00030 
00044 public class Designer {
00045 
00046         private static final String TITLE = "R3 Paper UI Designer";
00047 
00048         public static void main(String[] args) {
00049                 new Designer();
00050         }
00051 
00052         private DebuggingTasks debuggingTasks;
00053 
00054         private DocumentPanel documentPanel;
00055 
00056         private DocumentTasks documentTasks;
00057 
00058         private JFrame fullScreenFrame;
00059 
00060         private int lastWindowX = 0;
00061 
00062         private int lastWindowY = 0;
00063 
00064         private JFrame mainFrame;
00065 
00066         private JPanel mainPanel;
00067 
00068         private JScrollPane scrollPane;
00069 
00070         private RibbonToolbar toolbar;
00071 
00072         private UserTestTasks userTestTasks;
00073 
00074         private JPanel informationPanel;
00075 
00079         public Designer() {
00080                 this(0, 0);
00081         }
00082 
00087         private Designer(int designerWindowX, int designerWindowY) {
00088                 lastWindowX = designerWindowX;
00089                 lastWindowY = designerWindowY;
00090                 setupGUI();
00091         }
00092 
00099         private WindowListener getCloseHandler() {
00100                 return new WindowAdapter() {
00101                         private void updateWindowLocation() {
00102                                 lastWindowX = mainFrame.getLocation().x;
00103                                 lastWindowY = mainFrame.getLocation().y;
00104                         }
00105 
00106                         public void windowActivated(WindowEvent arg0) {
00107                                 updateWindowLocation();
00108                         }
00109 
00110                         public void windowClosing(WindowEvent we) {
00111                                 updateWindowLocation();
00112                         }
00113 
00114                         public void windowDeactivated(WindowEvent arg0) {
00115                                 updateWindowLocation();
00116                         }
00117                 };
00118         }
00119 
00123         private List<RibbonPanel> getDebuggingTasksComponents() {
00124                 if (debuggingTasks == null) {
00125                         debuggingTasks = new DebuggingTasks();
00126                 }
00127                 return debuggingTasks.getPanels();
00128         }
00129 
00136         private DocumentPanel getDocumentPanel() {
00137                 if (documentPanel == null) {
00138                         documentPanel = new DocumentPanel();
00139                 }
00140                 return documentPanel;
00141         }
00142 
00146         private List<RibbonPanel> getDocumentTasksComponents() {
00147                 if (documentTasks == null) {
00148                         documentTasks = new DocumentTasks();
00149                 }
00150                 return documentTasks.getPanels();
00151         }
00152 
00158         public int getLastWindowX() {
00159                 return lastWindowX;
00160         }
00161 
00167         public int getLastWindowY() {
00168                 return lastWindowY;
00169         }
00170 
00174         public JFrame getMainFrame() {
00175                 if (mainFrame == null) {
00176                         mainFrame = new JFrame();
00177                         mainFrame.setTitle(TITLE);
00178                         mainFrame.setSize(1024, 768);
00179                         mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
00180                         mainFrame.setContentPane(getMainPanel());
00181                         mainFrame.pack();
00182                         // position the window
00183                         if (lastWindowX == 0 && lastWindowY == 0) {
00184                                 mainFrame.setLocation(WindowUtils.getWindowOrigin(mainFrame,
00185                                                 WindowUtils.DESKTOP_CENTER));
00186                         } else {
00187                                 mainFrame.setLocation(lastWindowX, lastWindowY);
00188                         }
00189                         mainFrame.setExtendedState(Frame.MAXIMIZED_BOTH);
00190                         mainFrame.addWindowListener(getCloseHandler());
00191                         mainFrame.setVisible(true);
00192                 }
00193                 return mainFrame;
00194         }
00195 
00199         private Container getMainPanel() {
00200                 if (mainPanel == null) {
00201                         mainPanel = new JPanel();
00202                         mainPanel.setLayout(new BorderLayout());
00203                         mainPanel.add(getRibbonToolbar(), BorderLayout.NORTH);
00204                         mainPanel.add(getInformationPanel(), BorderLayout.EAST);
00205                         mainPanel.add(getScrollableDocumentPanel(), BorderLayout.CENTER);
00206                 }
00207                 return mainPanel;
00208         }
00209 
00213         private Component getInformationPanel() {
00214                 if (informationPanel == null) {
00215                         informationPanel = new JPanel();
00216                         informationPanel.add(Box.createHorizontalStrut(100));
00217                 }
00218                 return informationPanel;
00219         }
00220 
00224         private JScrollPane getScrollableDocumentPanel() {
00225                 if (scrollPane == null) {
00226                         scrollPane = new JScrollPane(getDocumentPanel(),
00227                                         ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
00228                                         ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
00229                         getDocumentPanel().setParentScrollPane(scrollPane);
00230                         getDocumentPanel().setParentFrame(mainFrame);
00231                 }
00232                 return scrollPane;
00233         }
00234 
00238         private Component getRibbonToolbar() {
00239                 if (toolbar == null) {
00240                         toolbar = new RibbonToolbar();
00241 
00242                         final String documentTasksName = "Application, Sheets, and Regions";
00243                         final String userTestName = "User Testing";
00244                         final String debuggingName = "Debugging";
00245                         toolbar.addCategories(documentTasksName, userTestName, debuggingName);
00246                         toolbar.addToolsToCategoryPanel(documentTasksName, getDocumentTasksComponents());
00247                         toolbar.addToolsToCategoryPanel(userTestName, getUserTestTasksComponents());
00248                         toolbar.addToolsToCategoryPanel(debuggingName, getDebuggingTasksComponents());
00249                 }
00250                 return toolbar;
00251         }
00252 
00256         private List<RibbonPanel> getUserTestTasksComponents() {
00257                 if (userTestTasks == null) {
00258                         userTestTasks = new UserTestTasks();
00259                 }
00260                 return userTestTasks.getPanels();
00261         }
00262 
00269         private void setupGUI() {
00270                 PaperToolkit.initializeLookAndFeel();
00271                 getMainFrame();
00272         }
00273 
00280         public void startFullScreenView(int displayNumber) {
00281                 if (fullScreenFrame == null) {
00282                         fullScreenFrame = new JFrame();
00283                         fullScreenFrame.setUndecorated(true);
00284                         fullScreenFrame.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
00285                         fullScreenFrame.addWindowListener(new WindowAdapter() {
00286                                 public void windowDeactivated(WindowEvent e) {
00287                                         final Container contentPane = fullScreenFrame.getContentPane();
00288                                         contentPane.removeAll();
00289                                         DebugUtils.println("Window Deactivated... Adding back to the old panel...");
00290                                         scrollPane.setViewportView(new JPanel());
00291                                         scrollPane.repaint();
00292                                 }
00293                         });
00294                 }
00295                 final GraphicsEnvironment localGraphicsEnvironment = GraphicsEnvironment
00296                                 .getLocalGraphicsEnvironment();
00297                 final GraphicsDevice[] screenDevices = localGraphicsEnvironment.getScreenDevices();
00298                 if (displayNumber >= 0 && displayNumber < screenDevices.length) {
00299                         screenDevices[displayNumber].setFullScreenWindow(fullScreenFrame);
00300                 } else {
00301                         screenDevices[0].setFullScreenWindow(fullScreenFrame);
00302                 }
00303 
00304                 fullScreenFrame.setVisible(true);
00305         }
00306 
00307 }

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