KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > gulden > framework > amoda > environment > gui > GUIWorkspace


1 /*
2  * Project: AMODA - Abstract Modeled Application
3  * Class: de.gulden.framework.amoda.environment.gui.GUIWorkspace
4  * Version: snapshot-beautyj-1.1
5  *
6  * Date: 2004-09-29
7  *
8  * This is a snapshot version of the AMODA 0.2 development branch,
9  * it is not released as a seperate version.
10  * For AMODA, see http://amoda.berlios.de/.
11  *
12  * This is licensed under the GNU Lesser General Public License (LGPL)
13  * and comes with NO WARRANTY.
14  *
15  * Author: Jens Gulden
16  * Email: amoda@jensgulden.de
17  */

18
19 package de.gulden.framework.amoda.environment.gui;
20
21 import de.gulden.framework.amoda.environment.commandline.*;
22 import de.gulden.framework.amoda.generic.core.GenericWorkspaceAbstract;
23 import de.gulden.framework.amoda.model.document.*;
24 import java.awt.*;
25 import java.awt.event.*;
26 import java.awt.event.ItemListener JavaDoc;
27 import java.util.*;
28 import java.util.List JavaDoc;
29 import javax.swing.*;
30 import javax.swing.event.*;
31 import javax.swing.event.InternalFrameListener JavaDoc;
32
33 /**
34  * Class GUIWorkspace.
35  *
36  * @author Jens Gulden
37  * @version snapshot-beautyj-1.1
38  */

39 public class GUIWorkspace extends GenericWorkspaceAbstract implements ItemListener JavaDoc, InternalFrameListener JavaDoc {
40
41     // ------------------------------------------------------------------------
42
// --- fields ---
43
// ------------------------------------------------------------------------
44

45     protected Hashtable viewsByFrames = new Hashtable();
46
47     protected Hashtable framesByViews = new Hashtable();
48
49     protected List JavaDoc recentActiveViews = new ArrayList();
50
51     protected ButtonGroup menuButtonGroup = new ButtonGroup();
52
53     protected Hashtable viewsByMenus = new Hashtable();
54
55     protected Hashtable menusByViews = new Hashtable();
56
57     protected Point newFrameLocation = new Point(30,30);
58
59     protected Hashtable titleNrsCollectionsByDocuments = new Hashtable();
60
61     protected Hashtable titleNrsByFrames = new Hashtable();
62
63
64     // ------------------------------------------------------------------------
65
// --- methods ---
66
// ------------------------------------------------------------------------
67

68     public DocumentView getActiveView() {
69         JInternalFrame frame=getDesktopPane().getSelectedFrame();
70         if (frame!=null) {
71             return (DocumentView)viewsByFrames.get(frame);
72         } else {
73             return null;
74         }
75     }
76
77     public void setActiveView(DocumentView view) {
78         if (view!=null) {
79             // may not actually set the view active, see PropertyVetoException below
80
JInternalFrame frame=(JInternalFrame)framesByViews.get(view);
81             JRadioButtonMenuItem menu=(JRadioButtonMenuItem)menusByViews.get(view);
82             try {
83                 frame.setSelected(true);
84                 recentActiveViews.remove(view);
85                 recentActiveViews.add(0,view);
86                 menu.setSelected(true);
87             } catch (java.beans.PropertyVetoException JavaDoc pve) {
88                 //nop
89
}
90         }
91     }
92
93     public void addView(DocumentView view) {
94         super.addView(view);
95         GUIApplicationEnvironment environment=((GUIApplicationEnvironment)getEnvironment());
96         Collection titleNrs=(Collection)titleNrsCollectionsByDocuments.get(view.getDocument());
97         if (titleNrs==null) { // first view of this document
98
titleNrs=new ArrayList();
99             titleNrsCollectionsByDocuments.put(view.getDocument(),titleNrs);
100         }
101         int titleNr=0;
102         Integer JavaDoc titleNrInteger;
103         do {
104             titleNrInteger=new Integer JavaDoc(++titleNr);
105         } while (titleNrs.contains(titleNrInteger));
106         titleNrs.add(titleNrInteger);
107         String JavaDoc title=view.getDocument().getTitle()+" ["+titleNr+"]";
108         JInternalFrame frame=new JInternalFrame(title,true,true,true,true);
109         titleNrsByFrames.put(frame,titleNrInteger);
110         frame.setDefaultCloseOperation(JInternalFrame.DO_NOTHING_ON_CLOSE);
111         frame.addInternalFrameListener(this);
112         JComponent component=view.createGUIEditor();
113         frame.getContentPane().add(component);
114         viewsByFrames.put(frame,view);
115         framesByViews.put(view,frame);
116         frame.pack();
117         frame.setLocation(newFrameLocation);
118         newFrameLocation.x+=30;
119         newFrameLocation.y+=30;
120         if (newFrameLocation.x>150) {
121             newFrameLocation.x=30;
122             newFrameLocation.y=30;
123         }
124         getDesktopPane().add(frame);
125         JRadioButtonMenuItem menu=new JRadioButtonMenuItem(title);
126         menu.setFont(environment.getFont(GUIApplicationEnvironment.FONT_MENU));
127         menuButtonGroup.add(menu);
128         menu.addItemListener(this);
129         viewsByMenus.put(menu,view);
130         menusByViews.put(view,menu);
131         if (menusByViews.size()==1) {
132             environment.getWindowMenu().addSeparator();
133         }
134         environment.getWindowMenu().add(menu);
135         frame.setVisible(true);
136         setActiveView(view);
137     }
138
139     public void removeView(DocumentView view) {
140         super.removeView(view);
141         JInternalFrame frame=(JInternalFrame)framesByViews.get(view);
142         JRadioButtonMenuItem menu=(JRadioButtonMenuItem)menusByViews.get(view);
143         frame.dispose();
144         getDesktopPane().remove(frame);
145         viewsByFrames.remove(frame);
146         framesByViews.remove(view);
147         ((GUIApplicationEnvironment)getEnvironment()).getWindowMenu().remove(menu);
148         viewsByMenus.remove(menu);
149         menusByViews.remove(view);
150         menuButtonGroup.remove(menu);
151         Object JavaDoc titleNr=titleNrsByFrames.remove(frame);
152         Collection titleNrs=(Collection)titleNrsCollectionsByDocuments.get(view.getDocument());
153         titleNrs.remove(titleNr);
154         if (titleNrs.isEmpty()) {
155             titleNrsCollectionsByDocuments.remove(view.getDocument());
156         }
157
158         recentActiveViews.remove(view);
159         if (!recentActiveViews.isEmpty()) {
160             setActiveView((DocumentView)recentActiveViews.get(0));
161         } else if (!viewsByFrames.isEmpty()) {
162             setActiveView((DocumentView)viewsByFrames.values().iterator().next());
163         } else {
164             setActiveView(null);
165         }
166     }
167
168     public void internalFrameActivated(InternalFrameEvent e) {
169         DocumentView view=(DocumentView)viewsByFrames.get(e.getInternalFrame());
170         setActiveView(view);
171     }
172
173     public void internalFrameClosed(InternalFrameEvent e) {
174         //nop
175
}
176
177     public void internalFrameClosing(InternalFrameEvent e) {
178         JInternalFrame frame=e.getInternalFrame();
179         DocumentView view=(DocumentView)viewsByFrames.get(frame);
180         removeView(view);
181     }
182
183     public void internalFrameDeactivated(InternalFrameEvent e) {
184         //nop
185
}
186
187     public void internalFrameDeiconified(InternalFrameEvent e) {
188         //nop
189
}
190
191     public void internalFrameIconified(InternalFrameEvent e) {
192         //nop
193
}
194
195     public void internalFrameOpened(InternalFrameEvent e) {
196         //nop
197
}
198
199     public void itemStateChanged(ItemEvent e) {
200         if (e.getStateChange()==ItemEvent.SELECTED) {
201             JRadioButtonMenuItem menu=(JRadioButtonMenuItem)e.getItem();
202             DocumentView view=(DocumentView)viewsByMenus.get(menu);
203             setActiveView(view);
204         }
205     }
206
207     public JComponent getGUIEditor(DocumentView view) {
208         JInternalFrame frame=(JInternalFrame)framesByViews.get(view);
209         if (frame!=null) {
210             return (JComponent)frame.getContentPane().getComponent(0);
211         } else {
212             return null;
213         }
214     }
215
216     public void updateWindowTitles() {
217         for (Iterator it=getAllViews().iterator();it.hasNext();) {
218             de.gulden.framework.amoda.model.document.DocumentView view=(DocumentView)it.next();
219             de.gulden.framework.amoda.model.document.Document document=view.getDocument();
220             javax.swing.JInternalFrame JavaDoc frame=(javax.swing.JInternalFrame JavaDoc)framesByViews.get(view);
221             Integer JavaDoc nr=(Integer JavaDoc)titleNrsByFrames.get(frame);
222             frame.setTitle(document.getTitle()+" ["+nr.toString()+"]");
223         }
224     }
225
226     protected JDesktopPane getDesktopPane() {
227         return ((de.gulden.framework.amoda.environment.gui.component.GUIFrame)(((GUIApplicationEnvironment)getEnvironment()).getFrame())).getDesktopPane();
228     }
229
230 } // end GUIWorkspace
231
Popular Tags