Revision 634

View differences:

trunk/libraries/libCorePlugin/src/com/iver/core/mdiManager/NewSkin.java
24 24
import java.beans.PropertyVetoException;
25 25

  
26 26
import java.lang.reflect.InvocationTargetException;
27

  
27 28
import java.util.Iterator;
28 29

  
29 30
import javax.swing.DefaultDesktopManager;
......
39 40
 *
40 41
 */
41 42
public class NewSkin implements MDIManager, Extension {
42
    /**
43
     * Variable privada <code>desktopManager</code> para usarlo cuando sale una
44
     * ventana que no queremos que nos restaure las que tenemos maximizadas.
45
     * Justo antes de usar el setMaximize(false), le pegamos el cambiazo.
46
     */
47
    private static DesktopManager desktopManager = new DefaultDesktopManager();
43
	/**
44
	 * Variable privada <code>desktopManager</code> para usarlo cuando sale una
45
	 * ventana que no queremos que nos restaure las que tenemos maximizadas.
46
	 * Justo antes de usar el setMaximize(false), le pegamos el cambiazo.
47
	 */
48
	private static DesktopManager desktopManager = new DefaultDesktopManager();
48 49

  
49
    /** log */
50
    private static Logger logger = Logger.getLogger(NewSkin.class.getName());
50
	/** log */
51
	private static Logger logger = Logger.getLogger(NewSkin.class.getName());
51 52

  
52
    /** Panel de la MDIFrame */
53
    private JDesktopPane panel = new JDesktopPane();
53
	/** Panel de la MDIFrame */
54
	private JDesktopPane panel = new JDesktopPane();
54 55

  
55
    /** MDIFrame */
56
    private MDIFrame mainFrame;
57
    private GlassPane glassPane = new GlassPane();
58
    
59
    private DialogStackSupport dss;
60
    private FrameViewSupport fvs;
61
    private ViewInfoSupport vis;
62
    private ViewStackSupport vss;
63
    private SingletonViewSupport svs;
56
	/** MDIFrame */
57
	private MDIFrame mainFrame;
58
	private GlassPane glassPane = new GlassPane();
59
	private DialogStackSupport dss;
60
	private FrameViewSupport fvs;
61
	private ViewInfoSupport vis;
62
	private ViewStackSupport vss;
63
	private SingletonViewSupport svs;
64 64

  
65
    /**
66
     * @see com.iver.andami.ui.mdiManager.MDIManager#init(com.iver.andami.ui.mdiFrame.MDIFrame)
67
     */
68
    public void init(MDIFrame f) {
69
        //Inicializa el Frame y la consola
70
        mainFrame = f;
71
        mainFrame.setGlassPane(glassPane);
72
        panel.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
65
	/**
66
	 * @see com.iver.andami.ui.mdiManager.MDIManager#init(com.iver.andami.ui.mdiFrame.MDIFrame)
67
	 */
68
	public void init(MDIFrame f) {
69
		//Inicializa el Frame y la consola
70
		mainFrame = f;
71
		mainFrame.setGlassPane(glassPane);
72
		panel.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
73 73

  
74
        mainFrame.getContentPane().add(panel, BorderLayout.CENTER);
75
        panel.setDesktopManager(desktopManager);
74
		mainFrame.getContentPane().add(panel, BorderLayout.CENTER);
75
		panel.setDesktopManager(desktopManager);
76 76

  
77
        fvs = new FrameViewSupport(mainFrame);
78
        dss = new DialogStackSupport(mainFrame);
79
        vis = new ViewInfoSupport(fvs);
80
        fvs.setVis(vis);
81
        vss = new ViewStackSupport(vis);
82
        svs = new SingletonViewSupport(vis);
83
    }
77
		fvs = new FrameViewSupport(mainFrame);
78
		dss = new DialogStackSupport(mainFrame);
79
		vis = new ViewInfoSupport(fvs);
80
		fvs.setVis(vis);
81
		vss = new ViewStackSupport(vis);
82
		svs = new SingletonViewSupport(vis);
83
	}
84 84

  
85
    /**
86
     * @see com.iver.andami.ui.mdiManager.MDIManager#addView(com.iver.andami.ui.mdiManager.View)
87
     */
88
    public View addView(View p) throws SingletonDialogAlreadyShownException {
89
        //se obtiene la informaci?n de la vista
90
        ViewInfo vi = vis.getViewInfo(p);
85
	/**
86
	 * @see com.iver.andami.ui.mdiManager.MDIManager#addView(com.iver.andami.ui.mdiManager.View)
87
	 */
88
	public View addView(View p) throws SingletonDialogAlreadyShownException {
89
		//se obtiene la informaci?n de la vista
90
		ViewInfo vi = vis.getViewInfo(p);
91 91

  
92
        //Se comprueban las incompatibilidades que pudieran haber en la vista
93
        MDIUtilities.checkViewInfo(vi);
92
		//Se comprueban las incompatibilidades que pudieran haber en la vista
93
		MDIUtilities.checkViewInfo(vi);
94 94

  
95
        /*
96
         * Se obtiene la referencia a la vista anterior por si es una singleton y est?
97
         * siendo mostrada. Se obtiene su informaci?n si ya fue mostrada
98
         */
99
        View anterior = svs.getView(p);
95
		/*
96
		 * Se obtiene la referencia a la vista anterior por si es una singleton y est?
97
		 * siendo mostrada. Se obtiene su informaci?n si ya fue mostrada
98
		 */
99
		View anterior = svs.getView(p);
100 100

  
101
        if (anterior != p) {
102
            vis.deleteViewInfo(p);
103
            vi = vis.getViewInfo(anterior);
104
            activateJInternalFrame(fvs.getJInternalFrame(anterior));
105
        } else {
106
            if (vi.isModal()) {
107
                addJDialog(anterior);
108
            } else {
109
					//Se sit?a la vista en la pila de vistas
110
					vss.add(p, new ActionListener() {
101
		if (anterior != p) {
102
			vis.deleteViewInfo(p);
103
			vi = vis.getViewInfo(anterior);
104
			activateJInternalFrame(fvs.getJInternalFrame(anterior));
105
		} else {
106
			if (vi.isModal()) {
107
				addJDialog(anterior);
108
			} else {
109
				//Se sit?a la vista en la pila de vistas
110
				vss.add(p,
111
					new ActionListener() {
111 112
						public void actionPerformed(ActionEvent e) {
112
							View v = vis.getViewById(Integer.parseInt(e.getActionCommand()));
113
							View v = vis.getViewById(Integer.parseInt(
114
										e.getActionCommand()));
113 115
							JInternalFrame f = fvs.getJInternalFrame(v);
114 116
							activateJInternalFrame(f);
115 117
						}
116 118
					});
117
	                addJInternalFrame(anterior);
118
            }
119
        }
119
				addJInternalFrame(anterior);
120
			}
121
		}
120 122

  
121
        return p;
122
    }
123
		return p;
124
	}
123 125

  
124
    /**
125
     * DOCUMENT ME!
126
     *
127
     * @param p
128
     */
129
    private void addJInternalFrame(View p) {
130
        ViewInfo vi = vis.getViewInfo(p);
126
	/**
127
	 * DOCUMENT ME!
128
	 *
129
	 * @param p
130
	 */
131
	private void addJInternalFrame(View p) {
132
		ViewInfo vi = vis.getViewInfo(p);
131 133

  
132
        boolean first = !fvs.contains(p);
134
		boolean first = !fvs.contains(p);
133 135

  
134
        JInternalFrame wnd = fvs.getJInternalFrame(p);
136
		JInternalFrame wnd = fvs.getJInternalFrame(p);
135 137

  
136
        wnd.addInternalFrameListener(new FrameListener());
138
		wnd.addInternalFrameListener(new FrameListener());
137 139

  
138
        // Si es always live se comprueba si est? a?adirlo para s?lo visualizar
139
        if (vi.isAlwaysLive()) {
140
            if (first) {
141
                wnd.setDefaultCloseOperation(JInternalFrame.HIDE_ON_CLOSE);
140
		// Si es always live se comprueba si est? a?adirlo para s?lo visualizar
141
		if (vi.isAlwaysLive()) {
142
			if (first) {
143
				wnd.setDefaultCloseOperation(JInternalFrame.HIDE_ON_CLOSE);
142 144

  
143
                if (vi.isModeless()) {
144
                    panel.add(wnd, JDesktopPane.PALETTE_LAYER);
145
                } else {
146
                    panel.add(wnd);
147
                }
148
            } else {
149
                wnd.setVisible(true);
150
            }
151
        } else {
152
            wnd.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
145
				if (vi.isModeless()) {
146
					panel.add(wnd, JDesktopPane.PALETTE_LAYER);
147
				} else {
148
					panel.add(wnd);
149
				}
150
			} else {
151
				wnd.setVisible(true);
152
			}
153
		} else {
154
			wnd.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
153 155

  
154
            if (vi.isModeless()) {
155
                panel.add(wnd, JDesktopPane.PALETTE_LAYER);
156
            } else {
157
                panel.add(wnd);
158
            }
159
        }
156
			if (vi.isModeless()) {
157
				panel.add(wnd, JDesktopPane.PALETTE_LAYER);
158
			} else {
159
				panel.add(wnd);
160
			}
161
		}
160 162

  
161
        activateJInternalFrame(wnd);
162
    }
163
		activateJInternalFrame(wnd);
164
	}
163 165

  
164
    /**
165
     * DOCUMENT ME!
166
     *
167
     * @param wnd
168
     */
169
    private void activateJInternalFrame(JInternalFrame wnd) {
170
        wnd.moveToFront();
166
	/**
167
	 * DOCUMENT ME!
168
	 *
169
	 * @param wnd
170
	 */
171
	private void activateJInternalFrame(JInternalFrame wnd) {
172
		wnd.moveToFront();
171 173

  
172
        try {
173
            wnd.setSelected(true);
174
        } catch (PropertyVetoException e) {
175
        }
176
    }
174
		try {
175
			wnd.setSelected(true);
176
		} catch (PropertyVetoException e) {
177
		}
178
	}
177 179

  
178
    /**
179
     * DOCUMENT ME!
180
     *
181
     * @param p
182
     */
183
    private void addJDialog(View p) {
184
        JDialog dlg = fvs.getJDialog(p);
180
	/**
181
	 * DOCUMENT ME!
182
	 *
183
	 * @param p
184
	 */
185
	private void addJDialog(View p) {
186
		JDialog dlg = fvs.getJDialog(p);
185 187

  
186
        dlg.addWindowListener(new DialogWindowListener());
187
        dss.pushDialog(dlg);
188
		dlg.addWindowListener(new DialogWindowListener());
189
		dss.pushDialog(dlg);
188 190

  
189
        dlg.setVisible(vis.getViewInfo(p).isVisible());
190
    }
191
		dlg.setVisible(vis.getViewInfo(p).isVisible());
192
	}
191 193

  
192
    /**
193
     * @see com.iver.andami.ui.mdiManager.MDIManager#getActiveView()
194
     */
195
    public View getActiveView() {
196
    	JInternalFrame jif = panel.getSelectedFrame();
197
    	if (jif != null){
198
    		return fvs.getView(jif);
199
    	}
200
        return null;
201
    }
194
	/**
195
	 * @see com.iver.andami.ui.mdiManager.MDIManager#getActiveView()
196
	 */
197
	public View getActiveView() {
198
		JInternalFrame jif = panel.getSelectedFrame();
202 199

  
203
    /**
204
     * @see com.iver.andami.ui.mdiManager.MDIManager#closeView(com.iver.andami.ui.mdiManager.View)
205
     */
206
    public void closeView(View p) {
207
        //Si es un di?logo modal 
208
        if (p.getViewInfo().isModal()) {
209
            closeJDialog(fvs.getJDialog(p));
210
        } else { //Si no es modal se cierra el JInternalFrame
211
            closeJInternalFrame(fvs.getJInternalFrame(p));
212
        }
213
        fvs.closeView(p);
214
    }
200
		if (jif != null) {
201
			return fvs.getView(jif);
202
		}
215 203

  
216
    /**
217
     * @see com.iver.andami.ui.mdiManager.MDIManager#closeAllViews()
218
     */
219
    public void closeAllViews() {
220
        Iterator i = fvs.getViewIterator();
204
		return null;
205
	}
221 206

  
222
        while (i.hasNext()) {
223
            View view = (View) i.next();
224
            closeView(view);
225
            i = fvs.getViewIterator();
226
        }
227
    }
207
	/**
208
	 * @see com.iver.andami.ui.mdiManager.MDIManager#closeView(com.iver.andami.ui.mdiManager.View)
209
	 */
210
	public void closeView(View p) {
211
		//Si es un di?logo modal 
212
		if (p.getViewInfo().isModal()) {
213
			closeJDialog(fvs.getJDialog(p));
214
		} else { //Si no es modal se cierra el JInternalFrame
215
			closeJInternalFrame(fvs.getJInternalFrame(p));
216
		}
228 217

  
229
    /**
230
     * @see com.iver.andami.ui.mdiManager.MDIManager#getViewInfo(com.iver.andami.ui.mdiManager.View)
231
     */
232
    public ViewInfo getViewInfo(View v) {
233
        return vis.getViewInfo(v);
234
    }
218
		fvs.closeView(p);
219
	}
235 220

  
236
    /**
237
     * DOCUMENT ME!
238
     *
239
     * @param dialog
240
     *
241
     * @throws RuntimeException DOCUMENT ME!
242
     */
243
    private void closeJDialog(JDialog dialog) {
244
        JDialog dlg = dss.popDialog();
221
	/**
222
	 * @see com.iver.andami.ui.mdiManager.MDIManager#closeAllViews()
223
	 */
224
	public void closeAllViews() {
225
		Iterator i = fvs.getViewIterator();
245 226

  
246
        if (dlg != dialog) {
247
            throw new RuntimeException(
248
                "S?lo se puede cerrar el ?ltimo di?logo modal abierto");
249
        }
227
		while (i.hasNext()) {
228
			View view = (View) i.next();
229
			closeView(view);
230
			i = fvs.getViewIterator();
231
		}
232
	}
250 233

  
251
        dlg.setVisible(false);
234
	/**
235
	 * @see com.iver.andami.ui.mdiManager.MDIManager#getViewInfo(com.iver.andami.ui.mdiManager.View)
236
	 */
237
	public ViewInfo getViewInfo(View v) {
238
		return vis.getViewInfo(v);
239
	}
252 240

  
253
        View s = (View) fvs.getView(dlg);
241
	/**
242
	 * DOCUMENT ME!
243
	 *
244
	 * @param dialog
245
	 *
246
	 * @throws RuntimeException DOCUMENT ME!
247
	 */
248
	private void closeJDialog(JDialog dialog) {
249
		JDialog dlg = dss.popDialog();
254 250

  
255
        callViewClosed(s);
256
        
257
        fvs.closeView(s);
251
		if (dlg != dialog) {
252
			throw new RuntimeException(
253
				"S?lo se puede cerrar el ?ltimo di?logo modal abierto");
254
		}
258 255

  
259
        if (!vis.getViewInfo(s).isAlwaysLive()) {
260
            dlg.dispose();
261
        }
256
		dlg.setVisible(false);
262 257

  
263
        //Si es singleton se desasocia el modelo con la vista
264
        if (s instanceof SingletonView) {
265
            svs.closeView((SingletonView) s);
266
        }
267
    }
258
		View s = (View) fvs.getView(dlg);
268 259

  
269
    private void callViewClosed(View view){
270
        if (view instanceof ViewListener){
271
        	((ViewListener) view).viewClosed();
272
        }
273
    }
260
		callViewClosed(s);
274 261

  
275
    private void callViewActivated(View view){
276
        if (view instanceof ViewListener){
277
        	((ViewListener) view).viewActivated();
278
        }
279
    }
280
    
281
    /**
282
     * DOCUMENT ME!
283
     *
284
     * @param frame
285
     */
286
    private void closeJInternalFrame(JInternalFrame frame) {
287
        try {
288
            View s = (View) fvs.getView(frame);
262
		fvs.closeView(s);
289 263

  
290
            if (vis.getViewInfo(s).isAlwaysLive()) {
291
                frame.setVisible(false);
292
            } else {
293
                frame.setClosed(true);
294
                callViewClosed(s);
295
            }
264
		if (!vis.getViewInfo(s).isAlwaysLive()) {
265
			dlg.dispose();
266
		}
296 267

  
297
            //Si es singleton se desasocia el modelo con la vista
298
            if (s instanceof SingletonView) {
299
                svs.closeView((SingletonView) s);
300
            }
301
            
302
            vss.remove(s);
303
        } catch (PropertyVetoException e) {
304
            logger.error("Not compatible with property veto's. Use ViewInfo instead.",
305
                e);
306
        }
307
    }
268
		//Si es singleton se desasocia el modelo con la vista
269
		if (s instanceof SingletonView) {
270
			svs.closeView((SingletonView) s);
271
		}
272
	}
308 273

  
309
    /**
310
     * @see com.iver.andami.plugins.Extension#inicializar()
311
     */
312
    public void inicializar() {
313
    }
274
	/**
275
	 * DOCUMENT ME!
276
	 *
277
	 * @param view DOCUMENT ME!
278
	 */
279
	private void callViewClosed(View view) {
280
		if (view instanceof ViewListener) {
281
			((ViewListener) view).viewClosed();
282
		}
283
	}
314 284

  
315
    /**
316
     * @see com.iver.andami.plugins.Extension#execute(java.lang.String)
317
     */
318
    public void execute(String actionCommand) {
319
        if (actionCommand.equals("cascada")) {
320
        } else if (actionCommand.equals("mosaico")) {
321
        }
322
    }
285
	/**
286
	 * DOCUMENT ME!
287
	 *
288
	 * @param view DOCUMENT ME!
289
	 */
290
	private void callViewActivated(View view) {
291
		if (view instanceof ViewListener) {
292
			((ViewListener) view).viewActivated();
293
		}
294
	}
323 295

  
324
    /**
325
     * @see com.iver.andami.plugins.Extension#isEnabled()
326
     */
327
    public boolean isEnabled() {
328
        // TODO Auto-generated method stub
329
        return false;
330
    }
296
	/**
297
	 * DOCUMENT ME!
298
	 *
299
	 * @param frame
300
	 */
301
	private void closeJInternalFrame(JInternalFrame frame) {
302
		try {
303
			View s = (View) fvs.getView(frame);
331 304

  
332
    /**
333
     * @see com.iver.andami.plugins.Extension#isVisible()
334
     */
335
    public boolean isVisible() {
336
        // TODO Auto-generated method stub
337
        return true;
338
    }
305
			if (vis.getViewInfo(s).isAlwaysLive()) {
306
				frame.setVisible(false);
307
			} else {
308
				frame.setClosed(true);
309
				callViewClosed(s);
310
			}
339 311

  
340
    /**
341
     * @see com.iver.andami.ui.mdiManager.MDIManager#setWaitCursor()
342
     */
343
    public void setWaitCursor() {
344
        if (mainFrame != null) {
345
        	  glassPane.setVisible(true);
346
        	  mainFrame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
347
        	  dss.setWaitCursor();
348
        }
349
    }
312
			//Si es singleton se desasocia el modelo con la vista
313
			if (s instanceof SingletonView) {
314
				svs.closeView((SingletonView) s);
315
			}
350 316

  
351
    /**
352
     * @see com.iver.andami.ui.mdiManager.MDIManager#restoreCursor()
353
     */
354
    public void restoreCursor() {
355
        if (mainFrame != null) {
356
        	  glassPane.setVisible(false);
357
        	  mainFrame.setCursor(null);
358
        	  dss.restoreCursor();
359
        }
360
    }
317
			vss.remove(s);
318
		} catch (PropertyVetoException e) {
319
			logger.error("Not compatible with property veto's. Use ViewInfo instead.",
320
				e);
321
		}
322
	}
361 323

  
362
    /**
363
     * Listener para los eventos de cerrado de los di?logos. Tiene su raz?n de
364
     * ser en que los di?logos han de devolverse al pool cuando se cierran
365
     *
366
     * @author Fernando Gonz?lez Cort?s
367
     */
368
    public class DialogWindowListener extends WindowAdapter {
369
        /**
370
         * Captura el evento de cerrado de los di?logos con el fin de realizar
371
         * tareas de mantenimiento
372
         *
373
         * @param e evento
374
         */
375
        public void windowClosing(WindowEvent e) {
376
            closeJDialog((JDialog) e.getSource());
377
        }
378
    }
324
	/**
325
	 * @see com.iver.andami.plugins.Extension#inicializar()
326
	 */
327
	public void inicializar() {
328
	}
379 329

  
380
    /**
381
     * DOCUMENT ME!
382
     */
383
    public class FrameListener implements InternalFrameListener {
384
        /**
385
         * @see javax.swing.event.InternalFrameListener#internalFrameActivated(javax.swing.event.InternalFrameEvent)
386
         */
387
        public void internalFrameActivated(InternalFrameEvent e) {
388
            View panel = fvs.getView((JInternalFrame) e.getSource());
389
            ViewInfo vi = vis.getViewInfo(panel);
330
	/**
331
	 * @see com.iver.andami.plugins.Extension#execute(java.lang.String)
332
	 */
333
	public void execute(String actionCommand) {
334
		if (actionCommand.equals("cascada")) {
335
		} else if (actionCommand.equals("mosaico")) {
336
		}
337
	}
390 338

  
391
            JInternalFrame frame = fvs.getJInternalFrame(panel);
339
	/**
340
	 * @see com.iver.andami.plugins.Extension#isEnabled()
341
	 */
342
	public boolean isEnabled() {
343
		// TODO Auto-generated method stub
344
		return false;
345
	}
392 346

  
393
            if (!frame.isMaximizable() && frame.isMaximum()) {
394
                try {
395
                    frame.setMaximum(false);
396
                } catch (PropertyVetoException e1) {
397
                }
398
            }
347
	/**
348
	 * @see com.iver.andami.plugins.Extension#isVisible()
349
	 */
350
	public boolean isVisible() {
351
		// TODO Auto-generated method stub
352
		return true;
353
	}
399 354

  
400
            callViewActivated(panel);
355
	/**
356
	 * @see com.iver.andami.ui.mdiManager.MDIManager#setWaitCursor()
357
	 */
358
	public void setWaitCursor() {
359
		if (mainFrame != null) {
360
			glassPane.setVisible(true);
361
			mainFrame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
362
			dss.setWaitCursor();
363
		}
364
	}
401 365

  
402
            mainFrame.enableControls();
403
        }
366
	/**
367
	 * @see com.iver.andami.ui.mdiManager.MDIManager#restoreCursor()
368
	 */
369
	public void restoreCursor() {
370
		if (mainFrame != null) {
371
			glassPane.setVisible(false);
372
			mainFrame.setCursor(null);
373
			dss.restoreCursor();
374
		}
375
	}
404 376

  
405
        /**
406
         * @see javax.swing.event.InternalFrameListener#internalFrameClosed(javax.swing.event.InternalFrameEvent)
407
         */
408
        public void internalFrameClosed(InternalFrameEvent e) {
409
        }
377
	/**
378
	 * Listener para los eventos de cerrado de los di?logos. Tiene su raz?n de
379
	 * ser en que los di?logos han de devolverse al pool cuando se cierran
380
	 *
381
	 * @author Fernando Gonz?lez Cort?s
382
	 */
383
	public class DialogWindowListener extends WindowAdapter {
384
		/**
385
		 * Captura el evento de cerrado de los di?logos con el fin de realizar
386
		 * tareas de mantenimiento
387
		 *
388
		 * @param e evento
389
		 */
390
		public void windowClosing(WindowEvent e) {
391
			closeJDialog((JDialog) e.getSource());
392
		}
393
	}
410 394

  
411
        /**
412
         * @see javax.swing.event.InternalFrameListener#internalFrameClosing(javax.swing.event.InternalFrameEvent)
413
         */
414
        public void internalFrameClosing(InternalFrameEvent e) {
415
            // Se elimina la memoria del JInternalFrame si no es ALWAYS_LIVE
416
            JInternalFrame c = (JInternalFrame) e.getSource();
417
            ViewInfo vi = vis.getViewInfo((View) fvs.getView(c));
395
	/**
396
	 * DOCUMENT ME!
397
	 */
398
	public class FrameListener implements InternalFrameListener {
399
		/**
400
		 * @see javax.swing.event.InternalFrameListener#internalFrameActivated(javax.swing.event.InternalFrameEvent)
401
		 */
402
		public void internalFrameActivated(InternalFrameEvent e) {
403
			View panel = fvs.getView((JInternalFrame) e.getSource());
404
			ViewInfo vi = vis.getViewInfo(panel);
418 405

  
419
            View view = fvs.getView(c);
406
			JInternalFrame frame = fvs.getJInternalFrame(panel);
420 407

  
421
            if (!vi.isAlwaysLive()) {
422
                Utilities.cleanComponent(c);
423
                callViewClosed(view);
424
            }
408
			if (!frame.isMaximizable() && frame.isMaximum()) {
409
				try {
410
					frame.setMaximum(false);
411
				} catch (PropertyVetoException e1) {
412
				}
413
			}
425 414

  
426
            fvs.closeView(view);
415
			callViewActivated(panel);
427 416

  
428
            boolean alwaysLive;
429
            alwaysLive = vi.isAlwaysLive();
417
			mainFrame.enableControls();
418
		}
430 419

  
431
            /*
432
             * Si no es alwaysLive y es singleton, se desasocia el
433
             * modelo con el frame
434
             */
435
            if (!alwaysLive) {
436
                panel.remove(c);
420
		/**
421
		 * @see javax.swing.event.InternalFrameListener#internalFrameClosed(javax.swing.event.InternalFrameEvent)
422
		 */
423
		public void internalFrameClosed(InternalFrameEvent e) {
424
		}
437 425

  
438
                if (view instanceof SingletonView) {
439
                    svs.closeView((SingletonView) view);
440
                }
441
            }
442
            
443
            vss.remove(view);
426
		/**
427
		 * @see javax.swing.event.InternalFrameListener#internalFrameClosing(javax.swing.event.InternalFrameEvent)
428
		 */
429
		public void internalFrameClosing(InternalFrameEvent e) {
430
			// Se elimina la memoria del JInternalFrame si no es ALWAYS_LIVE
431
			JInternalFrame c = (JInternalFrame) e.getSource();
432
			ViewInfo vi = vis.getViewInfo((View) fvs.getView(c));
444 433

  
445
            mainFrame.enableControls();
434
			View view = fvs.getView(c);
446 435

  
447
            panel.repaint();
448
        }
436
			if (!vi.isAlwaysLive()) {
437
				Utilities.cleanComponent(c);
438
				callViewClosed(view);
439
			}
449 440

  
450
        /**
451
         * @see javax.swing.event.InternalFrameListener#internalFrameDeactivated(javax.swing.event.InternalFrameEvent)
452
         */
453
        public void internalFrameDeactivated(InternalFrameEvent e) {
454
        }
441
			fvs.closeView(view);
455 442

  
456
        /**
457
         * @see javax.swing.event.InternalFrameListener#internalFrameDeiconified(javax.swing.event.InternalFrameEvent)
458
         */
459
        public void internalFrameDeiconified(InternalFrameEvent e) {
460
            mainFrame.enableControls();
461
        }
443
			boolean alwaysLive;
444
			alwaysLive = vi.isAlwaysLive();
462 445

  
463
        /**
464
         * @see javax.swing.event.InternalFrameListener#internalFrameIconified(javax.swing.event.InternalFrameEvent)
465
         */
466
        public void internalFrameIconified(InternalFrameEvent e) {
467
            mainFrame.enableControls();
468
        }
446
			/*
447
			 * Si no es alwaysLive y es singleton, se desasocia el
448
			 * modelo con el frame
449
			 */
450
			if (!alwaysLive) {
451
				panel.remove(c);
469 452

  
470
        /**
471
         * @see javax.swing.event.InternalFrameListener#internalFrameOpened(javax.swing.event.InternalFrameEvent)
472
         */
473
        public void internalFrameOpened(InternalFrameEvent e) {
474
        }
475
    }
453
				if (view instanceof SingletonView) {
454
					svs.closeView((SingletonView) view);
455
				}
456
			}
457

  
458
			vss.remove(view);
459

  
460
			mainFrame.enableControls();
461

  
462
			panel.repaint();
463
		}
464

  
465
		/**
466
		 * @see javax.swing.event.InternalFrameListener#internalFrameDeactivated(javax.swing.event.InternalFrameEvent)
467
		 */
468
		public void internalFrameDeactivated(InternalFrameEvent e) {
469
		}
470

  
471
		/**
472
		 * @see javax.swing.event.InternalFrameListener#internalFrameDeiconified(javax.swing.event.InternalFrameEvent)
473
		 */
474
		public void internalFrameDeiconified(InternalFrameEvent e) {
475
			mainFrame.enableControls();
476
		}
477

  
478
		/**
479
		 * @see javax.swing.event.InternalFrameListener#internalFrameIconified(javax.swing.event.InternalFrameEvent)
480
		 */
481
		public void internalFrameIconified(InternalFrameEvent e) {
482
			mainFrame.enableControls();
483
		}
484

  
485
		/**
486
		 * @see javax.swing.event.InternalFrameListener#internalFrameOpened(javax.swing.event.InternalFrameEvent)
487
		 */
488
		public void internalFrameOpened(InternalFrameEvent e) {
489
		}
490
	}
476 491
}

Also available in: Unified diff