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
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 }