Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libCorePlugin / src / com / iver / core / mdiManager / NewSkin.java @ 5024

History | View | Annotate | Download (20.9 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   IVER T.I. S.A
34
 *   Salamanca 50
35
 *   46005 Valencia
36
 *   Spain
37
 *
38
 *   +34 963163400
39
 *   dac@iver.es
40
 */
41
package com.iver.core.mdiManager;
42

    
43
import java.awt.BorderLayout;
44
import java.awt.Cursor;
45
import java.awt.Dimension;
46
import java.awt.event.ActionEvent;
47
import java.awt.event.ActionListener;
48
import java.awt.event.WindowAdapter;
49
import java.awt.event.WindowEvent;
50
import java.beans.PropertyVetoException;
51
import java.util.ArrayList;
52
import java.util.Iterator;
53

    
54
import javax.swing.DefaultDesktopManager;
55
import javax.swing.DesktopManager;
56
import javax.swing.JDesktopPane;
57
import javax.swing.JDialog;
58
import javax.swing.JInternalFrame;
59
import javax.swing.event.InternalFrameEvent;
60
import javax.swing.event.InternalFrameListener;
61

    
62
import org.apache.log4j.Logger;
63

    
64
import com.iver.andami.plugins.Extension;
65
import com.iver.andami.ui.mdiFrame.GlassPane;
66
import com.iver.andami.ui.mdiFrame.MDIFrame;
67
import com.iver.andami.ui.mdiManager.MDIManager;
68
import com.iver.andami.ui.mdiManager.MDIUtilities;
69
import com.iver.andami.ui.mdiManager.SingletonDialogAlreadyShownException;
70
import com.iver.andami.ui.mdiManager.SingletonView;
71
import com.iver.andami.ui.mdiManager.View;
72
import com.iver.andami.ui.mdiManager.ViewInfo;
73
import com.iver.andami.ui.mdiManager.ViewListener;
74

    
75
/**
76
 *
77
 */
78
public class NewSkin extends Extension implements MDIManager{
79
    /**
80
     * Variable privada <code>desktopManager</code> para usarlo cuando sale
81
     * una ventana que no queremos que nos restaure las que tenemos maximizadas.
82
     * Justo antes de usar el setMaximize(false), le pegamos el cambiazo.
83
     */
84
    private static DesktopManager desktopManager = new DefaultDesktopManager();
85

    
86
    /** log */
87
    private static Logger logger = Logger.getLogger(NewSkin.class.getName());
88

    
89
    /** Panel de la MDIFrame */
90
    private JDesktopPane panel = new JDesktopPane();
91

    
92
    /** MDIFrame */
93
    private MDIFrame mainFrame;
94

    
95
    private GlassPane glassPane = new GlassPane();
96

    
97
    private DialogStackSupport dss;
98

    
99
    private FrameViewSupport fvs;
100

    
101
    private ViewInfoSupport vis;
102

    
103
    private ViewStackSupport vss;
104

    
105
    private SingletonViewSupport svs;
106

    
107
    private Cursor lastCursor = null;
108

    
109
    /**
110
     * @see com.iver.andami.ui.mdiManager.MDIManager#init(com.iver.andami.ui.mdiFrame.MDIFrame)
111
     */
112
    public void init(MDIFrame f) {
113
        // Inicializa el Frame y la consola
114
        mainFrame = f;
115
        mainFrame.setGlassPane(glassPane);
116
        panel.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
117

    
118
        mainFrame.getContentPane().add(panel, BorderLayout.CENTER);
119
        panel.setDesktopManager(desktopManager);
120

    
121
        fvs = new FrameViewSupport(mainFrame);
122
        dss = new DialogStackSupport(mainFrame);
123
        svs = new SingletonViewSupport(vis, fvs);
124
        vis = new ViewInfoSupport(mainFrame, fvs, svs);
125
        fvs.setVis(vis);
126
        vss = new ViewStackSupport(vis);
127
    }
128

    
129
    /**
130
     * @see com.iver.andami.ui.mdiManager.MDIManager#addView(com.iver.andami.ui.mdiManager.View)
131
     */
132
    public View addView(View p) throws SingletonDialogAlreadyShownException {
133
        // se obtiene la informaci?n de la vista
134
        ViewInfo vi = vis.getViewInfo(p);
135

    
136
        // Se comprueban las incompatibilidades que pudieran haber en la vista
137
        MDIUtilities.checkViewInfo(vi);
138
        if ((p instanceof SingletonView) && (vi.isModal())) {
139
            throw new RuntimeException("A modal view cannot be a SingletonView");
140
        }
141

    
142
        /*
143
         * Se obtiene la referencia a la vista anterior por si es una singleton
144
         * y est? siendo mostrada. Se obtiene su informaci?n si ya fue mostrada
145
         */
146
        boolean singletonPreviouslyAdded = false;
147

    
148
        if (p instanceof SingletonView) {
149
            SingletonView sv = (SingletonView) p;
150
            if (svs.registerView(sv.getClass(), sv.getViewModel(), vis
151
                    .getViewInfo(sv))) {
152
                singletonPreviouslyAdded = true;
153
            }
154
        }
155

    
156
        if (singletonPreviouslyAdded) {
157
            // Si la vista no est? actualmente abierta
158
            if (!svs.contains((SingletonView) p)) {
159
                JInternalFrame frame = fvs.getJInternalFrame(p);
160
                svs.openSingletonView((SingletonView) p, frame);
161
                addJInternalFrame(frame, vi);
162
                vss.add(p, new ActionListener() {
163
                    public void actionPerformed(ActionEvent e) {
164
                        View v = vis.getViewById(Integer.parseInt(e
165
                                .getActionCommand()));
166
                        JInternalFrame f = fvs.getJInternalFrame(v);
167
                        activateJInternalFrame(f);
168
                    }
169
                });
170
                return p;
171
            } else {
172
                // La vista est? actualmente abierta
173
                JInternalFrame frame = (JInternalFrame) svs
174
                        .getFrame((SingletonView) p);
175
                activateJInternalFrame(frame);
176
                vss.setActive(p);
177
                return fvs.getView((JInternalFrame) frame);
178
            }
179
        } else {
180
            if (vi.isModal()) {
181
                addJDialog(p);
182
            } else {
183
                // Se sit?a la vista en la pila de vistas
184
                vss.add(p, new ActionListener() {
185
                    public void actionPerformed(ActionEvent e) {
186
                        View v = vis.getViewById(Integer.parseInt(e
187
                                .getActionCommand()));
188
                        JInternalFrame f = fvs.getJInternalFrame(v);
189
                        activateJInternalFrame(f);
190
                    }
191
                });
192
                addJInternalFrame(p);
193
            }
194

    
195
            return p;
196
        }
197
    }
198

    
199
    /**
200
     * DOCUMENT ME!
201
     *
202
     * @param wnd
203
     *            DOCUMENT ME!
204
     * @param vi
205
     *            DOCUMENT ME!
206
     */
207
    private void addJInternalFrame(JInternalFrame wnd, ViewInfo vi) {
208
        wnd.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
209
        wnd.addInternalFrameListener(new FrameListener());
210

    
211
        if (vi.isModeless() || vi.isPalette()) {
212
            panel.add(wnd, JDesktopPane.PALETTE_LAYER);
213
            if (vi.isPalette())
214
                wnd.setFocusable(false);
215
        } else {
216
            panel.add(wnd);
217
        }
218

    
219
        activateJInternalFrame(wnd);
220
    }
221

    
222
    /**
223
     * DOCUMENT ME!
224
     *
225
     * @param p
226
     */
227
    private void addJInternalFrame(View p) {
228
        ViewInfo vi = vis.getViewInfo(p);
229

    
230
        JInternalFrame wnd = fvs.getJInternalFrame(p);
231

    
232
        if (p instanceof SingletonView) {
233
            SingletonView sv = (SingletonView) p;
234
            svs.openSingletonView(sv, wnd);
235
        }
236

    
237
        addJInternalFrame(wnd, vi);
238
    }
239

    
240
    /**
241
     * DOCUMENT ME!
242
     *
243
     * @param wnd
244
     */
245
    private void activateJInternalFrame(JInternalFrame wnd) {
246
        try {
247
            wnd.moveToFront();
248
            logger.debug("Activando " + wnd.getTitle());
249
            wnd.setSelected(true);
250
            wnd.setIcon(false);
251
        } catch (PropertyVetoException e) {
252
            logger.error(e);
253
        }
254
    }
255

    
256
    /**
257
     * Situa un di?logo modal en el centro de la pantalla
258
     *
259
     * @param d
260
     *            Di?logo que se quiere situar
261
     */
262
    private void centerDialog(JDialog d) {
263
        int offSetX = d.getWidth() / 2;
264
        int offSetY = d.getHeight() / 2;
265

    
266
        d.setLocation((mainFrame.getWidth() / 2) - offSetX, (mainFrame
267
                .getHeight() / 2)
268
                - offSetY);
269
    }
270

    
271
    /**
272
     * DOCUMENT ME!
273
     *
274
     * @param p
275
     */
276
    private void addJDialog(View p) {
277
        JDialog dlg = fvs.getJDialog(p);
278

    
279
        centerDialog(dlg);
280

    
281
        dlg.addWindowListener(new DialogWindowListener());
282
        dss.pushDialog(dlg);
283

    
284
        dlg.setVisible(vis.getViewInfo(p).isVisible());
285
    }
286

    
287
    /**
288
     * @see com.iver.andami.ui.mdiManager.MDIManager#getActiveView()
289
     */
290
    public View getActiveView() {
291
        JInternalFrame jif = panel.getSelectedFrame();
292

    
293
        if (jif != null) {
294
            View theView = fvs.getView(jif);
295
            if (theView == null)
296
                return null;
297
            if (theView.getViewInfo().isPalette())
298
                return vss.getActiveView();
299
            else
300
                return fvs.getView(jif);
301
        }
302
        // return vss.getActiveView();
303

    
304
        return null;
305
    }
306
    public View getFocusView(){
307
             JInternalFrame jif = panel.getSelectedFrame();
308

    
309
         if (jif != null) {
310
             View theView = fvs.getView(jif);
311
             if (theView == null)
312
                 return null;
313
             return fvs.getView(jif);
314
         }
315
         return null;
316
    }
317
    /**
318
     * @see com.iver.andami.ui.mdiManager.MDIManager#closeView(com.iver.andami.ui.mdiManager.View)
319
     */
320
    public void closeView(View p) {
321
        // Si es un di?logo modal
322
        if (p.getViewInfo().isModal()) {
323
            closeJDialog();
324
        } else { // Si no es modal se cierra el JInternalFrame
325
            closeJInternalFrame(fvs.getJInternalFrame(p));
326
        }
327
    }
328

    
329
    /**
330
     * @see com.iver.andami.ui.mdiManager.MDIManager#closeAllViews()
331
     */
332
    public void closeAllViews() {
333
        ArrayList eliminar = new ArrayList();
334
        Iterator i = fvs.getViewIterator();
335

    
336
        while (i.hasNext()) {
337
            eliminar.add((View) i.next());
338
        }
339

    
340
        for (Iterator iter = eliminar.iterator(); iter.hasNext();) {
341
            View vista = (View) iter.next();
342
            closeView(vista);
343
        }
344
    }
345

    
346
    /**
347
     * @see com.iver.andami.ui.mdiManager.MDIManager#getViewInfo(com.iver.andami.ui.mdiManager.View)
348
     */
349
    public ViewInfo getViewInfo(View v) {
350
            //ViewInfo vi = new ViewInfo();
351
            ViewInfo vi = vis.getViewInfo(v);
352
            JInternalFrame f = fvs.getJInternalFrame(v);
353
            vi.setX(f.getX());
354
            vi.setY(f.getY());
355
            vi.setHeight(f.getHeight());
356
            vi.setWidth(f.getWidth());
357
            // isClosed() doesn't work as (I) expected, why? Using isShowing instead
358
            vi.setClosed(!f.isShowing());
359
            vi.setNormalBounds(f.getNormalBounds());
360
            vi.setMaximized(f.isMaximum());
361
            return vi;
362
    }
363

    
364
    /**
365
     * DOCUMENT ME!
366
     *
367
     * @param dialog
368
     * @throws RuntimeException
369
     *             DOCUMENT ME!
370
     */
371
    private void closeJDialog() {
372
        JDialog dlg = dss.popDialog();
373

    
374
        dlg.setVisible(false);
375

    
376
        View s = (View) fvs.getView(dlg);
377

    
378
        callViewClosed(s);
379

    
380
        fvs.closeView(s);
381

    
382
        // Si es singleton se desasocia el modelo con la vista
383
        if (s instanceof SingletonView) {
384
            svs.closeView((SingletonView) s);
385
        }
386
    }
387

    
388
    /**
389
     * DOCUMENT ME!
390
     *
391
     * @param view
392
     *            DOCUMENT ME!
393
     */
394
    private void callViewClosed(View view) {
395
        if (view instanceof ViewListener) {
396
            ((ViewListener) view).viewClosed();
397
        }
398
    }
399

    
400
    /**
401
     * DOCUMENT ME!
402
     *
403
     * @param view
404
     *            DOCUMENT ME!
405
     */
406
    private void callViewActivated(View view) {
407
        logger.debug("View " + view.getViewInfo().getTitle()
408
                + " activated (callViewActivated)");
409
        if (view instanceof ViewListener) {
410
            ((ViewListener) view).viewActivated();
411
        }
412
    }
413

    
414
    /**
415
     * DOCUMENT ME!
416
     *
417
     * @param frame
418
     */
419
    private void closeJInternalFrame(JInternalFrame frame) {
420
        try {
421
            View s = (View) fvs.getView(frame);
422

    
423
            frame.setClosed(true);
424
            callViewClosed(s);
425
        } catch (PropertyVetoException e) {
426
            logger
427
                    .error(
428
                            "Not compatible with property veto's. Use ViewInfo instead.",
429
                            e);
430
        }
431
    }
432

    
433
    /**
434
     * @see com.iver.andami.plugins.IExtension#initialize()
435
     */
436
    public void initialize() {
437
    }
438

    
439
    /**
440
     * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
441
     */
442
    public void execute(String actionCommand) {
443
        if (actionCommand.equals("cascada")) {
444
        } else if (actionCommand.equals("mosaico")) {
445
        }
446
    }
447

    
448
    /**
449
     * @see com.iver.andami.plugins.IExtension#isEnabled()
450
     */
451
    public boolean isEnabled() {
452
        // TODO Auto-generated method stub
453
        return false;
454
    }
455

    
456
    /**
457
     * @see com.iver.andami.plugins.IExtension#isVisible()
458
     */
459
    public boolean isVisible() {
460
        // TODO Auto-generated method stub
461
        return true;
462
    }
463

    
464
    /**
465
     * @see com.iver.andami.ui.mdiManager.MDIManager#setWaitCursor()
466
     */
467
    public void setWaitCursor() {
468
        if (mainFrame != null) {
469
            glassPane.setVisible(true);
470
            lastCursor = mainFrame.getCursor();
471
            dss.setWaitCursor();
472
            glassPane.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
473
        }
474
    }
475

    
476
    /**
477
     * @see com.iver.andami.ui.mdiManager.MDIManager#restoreCursor()
478
     */
479
    public void restoreCursor() {
480
        if (mainFrame != null) {
481
            glassPane.setVisible(false);
482
            dss.restoreCursor();
483
            glassPane.setCursor(lastCursor);
484
        }
485
    }
486

    
487
    /**
488
     * Listener para los eventos de cerrado de los di?logos. Tiene su raz?n de
489
     * ser en que los di?logos han de devolverse al pool cuando se cierran
490
     *
491
     * @author Fernando Gonz?lez Cort?s
492
     */
493
    public class DialogWindowListener extends WindowAdapter {
494
        /**
495
         * Captura el evento de cerrado de los di?logos con el fin de realizar
496
         * tareas de mantenimiento
497
         *
498
         * @param e
499
         *            evento
500
         */
501
        public void windowClosing(WindowEvent e) {
502
            closeJDialog();
503
        }
504
    }
505

    
506
    /**
507
     * DOCUMENT ME!
508
     */
509
    public class FrameListener implements InternalFrameListener {
510
        /**
511
         * @see javax.swing.event.InternalFrameListener#internalFrameActivated(javax.swing.event.InternalFrameEvent)
512
         */
513
        public void internalFrameActivated(InternalFrameEvent e) {
514
            // logger.debug("internalFrameActivated " +
515
            // e.getInternalFrame().getTitle());
516

    
517
            // activatedInternalFramesStack.push(e.getInternalFrame());
518

    
519
            View panel = fvs.getView((JInternalFrame) e.getSource());
520

    
521
            ViewInfo vi = vis.getViewInfo(panel);
522
            if (vi.isPalette())
523
                return;
524

    
525
            vss.setActive(panel);
526

    
527
            JInternalFrame frame = fvs.getJInternalFrame(panel);
528

    
529
            if (!frame.isMaximizable() && frame.isMaximum()) {
530
                try {
531
                    frame.setMaximum(false);
532
                } catch (PropertyVetoException e1) {
533
                }
534
            }
535
            mainFrame.enableControls();
536
            if (vi.getSelectedTool() != null)
537
                mainFrame.setSelectedTool(vi.getSelectedTool());
538
            callViewActivated(panel);
539

    
540
        }
541

    
542
        /**
543
         * @see javax.swing.event.InternalFrameListener#internalFrameClosed(javax.swing.event.InternalFrameEvent)
544
         */
545
        public void internalFrameClosed(InternalFrameEvent e) {
546
        }
547

    
548
        /**
549
         * @see javax.swing.event.InternalFrameListener#internalFrameClosing(javax.swing.event.InternalFrameEvent)
550
         */
551
        public void internalFrameClosing(InternalFrameEvent e) {
552
            // Se elimina la memoria del JInternalFrame si no es ALWAYS_LIVE
553
            // logger.debug("internalFrameClosing " +
554
            // e.getInternalFrame().getTitle());
555

    
556
            JInternalFrame c = (JInternalFrame) e.getSource();
557
            ViewInfo vi = vis.getViewInfo((View) fvs.getView(c));
558

    
559
            View view = fvs.getView(c);
560
            callViewClosed(view);
561
            boolean alwaysLive;
562
            if (view instanceof SingletonView) {
563
                svs.closeView((SingletonView) view);
564
            }
565

    
566
            fvs.closeView(view);
567

    
568
            panel.remove(c);
569

    
570
            vss.remove(view);
571

    
572
            if (!vi.isPalette())
573
                mainFrame.enableControls();
574
            panel.repaint();
575

    
576
            // Para activar el JInternalFrame desde la que hemos
577
            // abierto la ventana que estamos cerrando
578
            View lastView = vss.getActiveView();
579
            // La activamos
580
            if (lastView != null) {
581
                System.err.println("Devuelvo el foco a "
582
                        + lastView.getViewInfo().getTitle());
583
                JInternalFrame frame = fvs.getJInternalFrame(lastView);
584
                try {
585
                    frame.setSelected(true);
586
                } catch (PropertyVetoException e1) {
587
                    // TODO Auto-generated catch block
588
                    // e1.printStackTrace();
589
                }
590
                // addView(lastView);
591
            }
592

    
593
        }
594

    
595
        /**
596
         * @see javax.swing.event.InternalFrameListener#internalFrameDeactivated(javax.swing.event.InternalFrameEvent)
597
         */
598
        public void internalFrameDeactivated(InternalFrameEvent e) {
599
            // logger.debug("internalDeActivated " +
600
            // e.getInternalFrame().getTitle());
601
            JInternalFrame c = (JInternalFrame) e.getSource();
602
            View andamiView = fvs.getView(c);
603
            if (andamiView != null) {
604
                ViewInfo vi = vis.getViewInfo(andamiView);
605
                if (vi.isPalette())
606
                    return;
607
                vi.setSelectedTool(mainFrame.getSelectedTool());
608
            }
609

    
610
        }
611

    
612
        /**
613
         * @see javax.swing.event.InternalFrameListener#internalFrameDeiconified(javax.swing.event.InternalFrameEvent)
614
         */
615
        public void internalFrameDeiconified(InternalFrameEvent e) {
616
            mainFrame.enableControls();
617
        }
618

    
619
        /**
620
         * @see javax.swing.event.InternalFrameListener#internalFrameIconified(javax.swing.event.InternalFrameEvent)
621
         */
622
        public void internalFrameIconified(InternalFrameEvent e) {
623
            mainFrame.enableControls();
624
        }
625

    
626
        /**
627
         * @see javax.swing.event.InternalFrameListener#internalFrameOpened(javax.swing.event.InternalFrameEvent)
628
         */
629
        public void internalFrameOpened(InternalFrameEvent e) {
630
            // logger.debug("internalFrameOpened. Source= " +
631
            // e.getSource().toString());
632
        }
633
    }
634

    
635
    /**
636
     * @see com.iver.andami.ui.mdiManager.MDIManager#closeSingletonView(java.lang.Class,
637
     *      java.lang.Object)
638
     */
639
    public boolean closeSingletonView(Class viewClass, Object model) {
640
        JInternalFrame frame = svs.getFrame(viewClass, model);
641
        if (frame == null)
642
            return false;
643
        closeJInternalFrame(frame);
644
        return true;
645
    }
646

    
647
    /**
648
     * @see com.iver.andami.ui.mdiManager.MDIManager#closeSingletonView(java.lang.Object)
649
     */
650
    public boolean closeSingletonView(Object model) {
651
        JInternalFrame[] frames = svs.getFrames(model);
652
        if (frames.length == 0)
653
            return false;
654
        for (int i = 0; i < frames.length; i++) {
655
            closeJInternalFrame(frames[i]);
656
        }
657
        return true;
658
    }
659

    
660
    public View[] getAllViews() {
661
        ArrayList views = new ArrayList();
662
        Iterator i = fvs.getViewIterator();
663

    
664
        while (i.hasNext()) {
665
            views.add((View) i.next());
666
        }
667
        return (View[]) views.toArray(new View[0]);
668
    }
669

    
670
    public void setMaximum(View v, boolean bMaximum) throws PropertyVetoException
671
    {
672
        JInternalFrame f = fvs.getJInternalFrame(v);
673
        f.setMaximum(bMaximum);
674
    }
675
    
676
    public void changeViewInfo(View v, ViewInfo vi){
677
            JInternalFrame f = fvs.getJInternalFrame(v);
678
                f.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
679
                JDesktopPane pnl = f.getDesktopPane();
680
                pnl.remove(f);
681
                f.setSize(new Dimension(vi.getWidth(),vi.getHeight()));
682
                f.setLocation(vi.getX(), vi.getY());
683
                if (vi.isPalette()) {
684
                        pnl.add(f, JDesktopPane.PALETTE_LAYER);
685
                        f.setFocusable(false);
686
                } else {
687
                        pnl.add(f, JDesktopPane.DEFAULT_LAYER);
688
                        f.setFocusable(true);
689
                        if (vi.isClosed()) {
690
                                closeView(v);
691
                        }
692
                }
693
                
694
                if (vi.isMaximized()) {
695
                        try {
696
                                f.setMaximum(true);
697
                        } catch (PropertyVetoException e) {
698
                                // TODO Auto-generated catch block
699
                                //e.printStackTrace();
700
                        }
701
                        f.setNormalBounds(vi.getNormalBounds());
702
                }
703
                activateJInternalFrame(f);
704
   }
705
}