KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > desktop > Desktop


1 /*
2  * $Id: Desktop.java,v 1.6 2005/05/27 12:47:34 blueshift Exp $
3  * (c) Copyright 2000 wingS development team.
4  *
5  * This file is part of the wingS demo (http://j-wings.org).
6  *
7  * The wingS demo is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * Please see COPYING for the complete licence.
13  */

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 JavaDoc;
35 import java.awt.event.ActionListener JavaDoc;
36 import java.io.File JavaDoc;
37 import java.io.FileReader JavaDoc;
38 import java.io.Reader JavaDoc;
39 import java.io.StringWriter JavaDoc;
40 /**
41  * @author <a HREF="mailto:hengels@mercatis.de">Holger Engels</a>
42  * @version $Revision: 1.6 $
43  */

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         // add the frames to the window-menu ..
64
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 JavaDoc 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 JavaDoc() {
93         public void actionPerformed(ActionEvent JavaDoc evt) {
94             newEditor();
95         }
96         });
97         SMenuItem openItem = new SMenuItem("Open");
98     openItem.addActionListener(new ActionListener JavaDoc() {
99         public void actionPerformed(ActionEvent JavaDoc 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     /**
118      * Servletinfo
119      */

120     public String JavaDoc getServletInfo() {
121         return "Desktop ($Revision: 1.6 $)";
122     }
123     
124     /**
125      * add a new frame. If there is a frame, that is maximized, then
126      * move the maximization to the new frame.
127      */

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) { /* ign */ }
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                             // set _our_ frame maximized, then.
140
frame.setMaximized(true);
141                         }
142                     }
143                 });
144         }
145         catch (Exception JavaDoc 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 JavaDoc() {
168                 public void actionPerformed(ActionEvent JavaDoc evt) {
169                     if ( evt.getActionCommand()==SOptionPane.OK_ACTION ) {
170                         try {
171                             File JavaDoc file = chooser.getFile();
172                             Reader JavaDoc reader = new FileReader JavaDoc(file);
173                             StringWriter JavaDoc writer = new StringWriter JavaDoc();
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 JavaDoc e) {
184                             dialog.show(editor); // show again ..
185
// .. but first, show error-message on top ..
186
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     /**
201      * A menu item, that handles the position of an internal frame within
202      * the desktop - whenever it is clicked, the frame is put on top. This
203      * MenuItem is added in some component listener, that gets activated
204      * whenever a window is added or removed from the desktop.
205      */

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             /*
216              * when clicked, put that frame on top. If some other frame was
217              * maximized at that point, then maximize _our_ frame instead.
218              */

219             addActionListener(new ActionListener JavaDoc() {
220                     public void actionPerformed(ActionEvent JavaDoc evt) {
221                         d.setPosition(f, 0);
222                         if (f.isIconified()) {
223                             f.setIconified(false);
224                         }
225                         /*
226                          * if some other frame is maximized, then we want
227                          * to toggle this maximization..
228                          */

229                         try {
230                             d.invite(new ComponentVisitor() {
231                                     public void visit(SComponent c) { /*ign*/ }
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                                             // set _our_ frame maximized, then.
239
frame.setMaximized(true);
240                                         }
241                                     }
242                                 });
243                         }
244                         catch (Exception JavaDoc e) {
245                             System.err.println(e);
246                         }
247                     }
248                 });
249         }
250
251         /**
252          * returns the title of the frame.
253          */

254         public String JavaDoc getText() {
255             String JavaDoc title = frame.getTitle();
256             return (title == null || title.length()==0) ? "[noname]" : title;
257         }
258         
259         /**
260          * remove menu item by frame ..
261          */

262         public boolean equals(Object JavaDoc 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 /*
273  * Local variables:
274  * c-basic-offset: 4
275  * indent-tabs-mode: nil
276  * compile-command: "ant -emacs -find build.xml"
277  * End:
278  */

279
Popular Tags