1 14 15 package desktop; 16 17 import org.wings.SComponent; 18 import org.wings.SConstants; 19 import org.wings.SContainer; 20 import org.wings.SDesktopPane; 21 import org.wings.SFileChooser; 22 import org.wings.SFlowDownLayout; 23 import org.wings.SFrame; 24 import org.wings.SInternalFrame; 25 import org.wings.SMenu; 26 import org.wings.SMenuBar; 27 import org.wings.SMenuItem; 28 import org.wings.SOptionPane; 29 import org.wings.event.SContainerEvent; 30 import org.wings.event.SContainerListener; 31 import org.wings.style.CSSProperty; 32 import org.wings.util.ComponentVisitor; 33 34 import java.awt.event.ActionEvent ; 35 import java.awt.event.ActionListener ; 36 import java.io.File ; 37 import java.io.FileReader ; 38 import java.io.Reader ; 39 import java.io.StringWriter ; 40 44 public class Desktop 45 implements SConstants 46 { 47 SFrame frame; 48 SDesktopPane desktop; 49 SMenu windowMenu; 50 int editorNumber; 51 52 public Desktop() { 53 frame = new SFrame("Desktop"); 54 frame.setAttribute(CSSProperty.MARGIN, "4px"); 55 56 SContainer contentPane = frame.getContentPane(); 57 contentPane.setLayout(new SFlowDownLayout()); 58 editorNumber = 0; 59 SMenuBar menuBar = createMenu(); 60 contentPane.add(menuBar); 61 62 desktop = new SDesktopPane(); 63 desktop.addContainerListener(new SContainerListener() { 65 public void componentAdded(SContainerEvent e) { 66 SInternalFrame frame = (SInternalFrame) e.getChild(); 67 SMenuItem windowItem = new WindowMenuItem(desktop, frame); 68 windowMenu.add(windowItem); 69 } 70 public void componentRemoved(SContainerEvent e) { 71 SInternalFrame frame = (SInternalFrame) e.getChild(); 72 SMenuItem windowItem = new WindowMenuItem(frame); 73 windowMenu.remove(windowItem); 74 } 75 }); 76 contentPane.add(desktop); 77 78 newEditor().setText(getStory()); 79 80 frame.show(); 81 } 82 83 protected String getStory() { 84 return "Ein Philosoph ist jemand, der in einem absolut dunklen Raum " + 85 "mit verbundenen Augen nach einer schwarzen Katze sucht, die gar nicht " + 86 "da ist. Ein Theologe ist jemand der genau das gleiche macht und ruft: " + 87 "\"ich hab sie!\""; 88 } 89 90 protected SMenuBar createMenu() { 91 SMenuItem newItem = new SMenuItem("New"); 92 newItem.addActionListener(new ActionListener () { 93 public void actionPerformed(ActionEvent evt) { 94 newEditor(); 95 } 96 }); 97 SMenuItem openItem = new SMenuItem("Open"); 98 openItem.addActionListener(new ActionListener () { 99 public void actionPerformed(ActionEvent evt) { 100 openEditor(); 101 } 102 }); 103 104 SMenu fileMenu = new SMenu("File"); 105 fileMenu.add(newItem); 106 fileMenu.add(openItem); 107 108 windowMenu = new SMenu("Window"); 109 110 SMenuBar menuBar = new SMenuBar(); 111 menuBar.add(fileMenu); 112 menuBar.add(windowMenu); 113 114 return menuBar; 115 } 116 117 120 public String getServletInfo() { 121 return "Desktop ($Revision: 1.6 $)"; 122 } 123 124 128 public void addNewFrame(final SInternalFrame frame) { 129 desktop.add(frame, 0); 130 try { 131 desktop.invite(new ComponentVisitor() { 132 public void visit(SComponent c) { } 133 public void visit(SContainer c) { 134 if (! (c instanceof SInternalFrame)) 135 return; 136 SInternalFrame ff = (SInternalFrame) c; 137 if (ff != frame && ff.isMaximized()) { 138 ff.setMaximized(false); 139 frame.setMaximized(true); 141 } 142 } 143 }); 144 } 145 catch (Exception e) { 146 System.err.println(e); 147 } 148 } 149 150 public Editor newEditor() { 151 Editor editor = new Editor(); 152 editor.setTitle("Editor [" + (++editorNumber) + "]"); 153 addNewFrame(editor); 154 return editor; 155 } 156 157 public Editor openEditor() { 158 final Editor editor = new Editor(); 159 addNewFrame(editor); 160 161 final SFileChooser chooser = new SFileChooser(); 162 chooser.setColumns(20); 163 164 final SOptionPane dialog = new SOptionPane(); 165 dialog.setEncodingType("multipart/form-data"); 166 dialog.showInput(editor, "Choose file", chooser, "Open file"); 167 dialog.addActionListener(new ActionListener () { 168 public void actionPerformed(ActionEvent evt) { 169 if ( evt.getActionCommand()==SOptionPane.OK_ACTION ) { 170 try { 171 File file = chooser.getFile(); 172 Reader reader = new FileReader (file); 173 StringWriter writer = new StringWriter (); 174 175 int b; 176 while ((b = reader.read()) >= 0) 177 writer.write(b); 178 179 editor.setText(writer.toString()); 180 editor.setTitle(chooser.getFileName()); 181 chooser.reset(); 182 } 183 catch (Exception e) { 184 dialog.show(editor); SOptionPane.showMessageDialog(editor, 187 "Error opening file", 188 e.getMessage()); 189 } 190 } 191 else { 192 editor.close(); 193 } 194 } 195 }); 196 197 return editor; 198 } 199 200 206 private static class WindowMenuItem extends SMenuItem { 207 private final SInternalFrame frame; 208 209 public WindowMenuItem(SInternalFrame f) { 210 frame = f; 211 } 212 213 public WindowMenuItem(final SDesktopPane d, final SInternalFrame f) { 214 frame = f; 215 219 addActionListener(new ActionListener () { 220 public void actionPerformed(ActionEvent evt) { 221 d.setPosition(f, 0); 222 if (f.isIconified()) { 223 f.setIconified(false); 224 } 225 229 try { 230 d.invite(new ComponentVisitor() { 231 public void visit(SComponent c) { } 232 public void visit(SContainer c) { 233 if (! (c instanceof SInternalFrame)) 234 return; 235 SInternalFrame ff = (SInternalFrame) c; 236 if (ff != frame && ff.isMaximized()) { 237 ff.setMaximized(false); 238 frame.setMaximized(true); 240 } 241 } 242 }); 243 } 244 catch (Exception e) { 245 System.err.println(e); 246 } 247 } 248 }); 249 } 250 251 254 public String getText() { 255 String title = frame.getTitle(); 256 return (title == null || title.length()==0) ? "[noname]" : title; 257 } 258 259 262 public boolean equals(Object o) { 263 if (o instanceof WindowMenuItem) { 264 WindowMenuItem wme = (WindowMenuItem) o; 265 return (frame != null && wme.frame == frame); 266 } 267 return false; 268 } 269 } 270 } 271 272 279 | Popular Tags |