1 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 ; 27 import java.util.*; 28 import java.util.List ; 29 import javax.swing.*; 30 import javax.swing.event.*; 31 import javax.swing.event.InternalFrameListener ; 32 33 39 public class GUIWorkspace extends GenericWorkspaceAbstract implements ItemListener , InternalFrameListener { 40 41 45 protected Hashtable viewsByFrames = new Hashtable(); 46 47 protected Hashtable framesByViews = new Hashtable(); 48 49 protected List 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 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 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 pve) { 88 } 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) { titleNrs=new ArrayList(); 99 titleNrsCollectionsByDocuments.put(view.getDocument(),titleNrs); 100 } 101 int titleNr=0; 102 Integer titleNrInteger; 103 do { 104 titleNrInteger=new Integer (++titleNr); 105 } while (titleNrs.contains(titleNrInteger)); 106 titleNrs.add(titleNrInteger); 107 String 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 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 } 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 } 186 187 public void internalFrameDeiconified(InternalFrameEvent e) { 188 } 190 191 public void internalFrameIconified(InternalFrameEvent e) { 192 } 194 195 public void internalFrameOpened(InternalFrameEvent e) { 196 } 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 frame=(javax.swing.JInternalFrame )framesByViews.get(view); 221 Integer nr=(Integer )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 } | Popular Tags |