Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libCorePlugin / src / org / gvsig / coreplugin / mdiManager / FrameWindowSupport.java @ 39416

History | View | Annotate | Download (9.35 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 org.gvsig.coreplugin.mdiManager;
42

    
43
import java.awt.Component;
44
import java.awt.Dimension;
45
import java.awt.Image;
46
import java.util.Hashtable;
47
import java.util.Iterator;
48

    
49
import javax.swing.ImageIcon;
50
import javax.swing.JComponent;
51
import javax.swing.JDialog;
52
import javax.swing.JFrame;
53
import javax.swing.JInternalFrame;
54
import javax.swing.JPanel;
55

    
56
import org.gvsig.andami.ui.mdiFrame.MDIFrame;
57
import org.gvsig.andami.ui.mdiManager.IWindow;
58
import org.gvsig.andami.ui.mdiManager.WindowInfo;
59
import org.gvsig.coreplugin.mdiManager.frames.ExternalFrame;
60
import org.gvsig.coreplugin.mdiManager.frames.IFrame;
61
import org.gvsig.coreplugin.mdiManager.frames.InternalFrame;
62
import org.gvsig.i18n.Messages;
63

    
64

    
65

    
66
/**
67
 *
68
 */
69
public class FrameWindowSupport {
70
    private Hashtable frameView = new Hashtable();
71
    private Hashtable viewFrame = new Hashtable();
72
    private Image icon;
73
    private WindowInfoSupport vis;
74
        private JFrame mainFrame;
75

    
76
    /**
77
     * Creates a new FrameViewSupport object.
78
     *
79
     * @param i DOCUMENT ME!
80
     */
81
    public FrameWindowSupport(MDIFrame mainFrame) {
82
            this.mainFrame = mainFrame;
83
        icon = mainFrame.getIconImage();
84
    }
85

    
86
    public Iterator getWindowIterator(){
87
            return viewFrame.keySet().iterator();
88
    }
89

    
90
    public boolean contains(IWindow v){
91
            return viewFrame.containsKey(v);
92
    }
93

    
94
        /**
95
         * @param wnd
96
         * @return
97
         */
98
        public boolean contains(JInternalFrame wnd) {
99
                return frameView.contains(wnd);
100
        }
101

    
102
    /**
103
     * DOCUMENT ME!
104
     *
105
     * @param p DOCUMENT ME!
106
     *
107
     * @return DOCUMENT ME!
108
     */
109
    public JDialog getJDialog(IWindow p) {
110
        JDialog dlg = (JDialog) viewFrame.get(p);
111

    
112
        if (dlg == null) {
113
            WindowInfo vi = vis.getWindowInfo(p);
114
            ExternalFrame nuevo = new ExternalFrame(mainFrame);
115

    
116
            nuevo.getContentPane().add((JPanel) p);
117
            nuevo.setSize(getWidth(p, vi), getHeight(p, vi) + 30);
118
            nuevo.setTitle(vi.getTitle());
119
            nuevo.setResizable(vi.isResizable());
120
            nuevo.setMinimumSize(vi.getMinimumSize());
121

    
122
            viewFrame.put(p, nuevo);
123
            frameView.put(nuevo, p);
124

    
125
            nuevo.setModal(vi.isModal());
126
            return nuevo;
127
        } else {
128
            return dlg;
129
        }
130
    }
131

    
132
    /**
133
     * DOCUMENT ME!
134
     *
135
     * @param p DOCUMENT ME!
136
     *
137
     * @return DOCUMENT ME!
138
     */
139
    public JInternalFrame getJInternalFrame(IWindow p) {
140
            JInternalFrame frame = (JInternalFrame) viewFrame.get(p);
141

    
142
        if (frame == null) {
143
                //ViewInfo vi = vis.getViewInfo(p);
144
            JInternalFrame nuevo = createJInternalFrame(p);
145
            viewFrame.put(p, nuevo);
146
            frameView.put(nuevo, p);
147

    
148
            return nuevo;
149
        } else {
150
            return frame;
151
        }
152
    }
153
    
154
    /**
155
     * Gets the frame associated to the provided IWindow panel.
156
     * The frame will usually be a JInternalFrame or a JDialog.
157
     *
158
     * @param panel The IWindow panel whose frame wants to be retrieved.
159
     *
160
     * @return The associated frame, it will usually be a JInternalFrame or
161
     * a JDialog.
162
     */
163
    public Component getFrame(IWindow panel) {
164
            Object object = viewFrame.get(panel);
165
            if (object!=null && object instanceof Component) {
166
                    return (Component) object;
167
            }
168
            else {
169
            throw new RuntimeException(Messages.getText("window_not_found")
170
                + ": " + panel.getWindowInfo().getTitle());
171
            }
172
    }
173

    
174
    public JInternalFrame createJInternalFrame(IWindow p)
175
    {
176
        WindowInfo wi = vis.getWindowInfo(p);
177
        JInternalFrame nuevo = new InternalFrame();
178
        if (icon != null){
179
            nuevo.setFrameIcon(new ImageIcon(icon));
180
        }
181
        
182
        nuevo.getContentPane().add((JPanel) p);
183
        nuevo.setClosable(!wi.isNotClosable());
184
        nuevo.setSize(getWidth(p, wi), getHeight(p, wi));
185
        nuevo.setTitle(wi.getTitle());
186
        nuevo.setVisible(wi.isVisible());
187
        nuevo.setResizable(wi.isResizable());
188
        nuevo.setIconifiable(wi.isIconifiable());
189
        nuevo.setMaximizable(wi.isMaximizable());
190
        nuevo.setLocation(wi.getX(), wi.getY());
191
        nuevo.setMinimumSize(wi.getMinimumSize());
192

    
193
        nuevo.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
194
        return nuevo;
195
    }
196

    
197
    public IWindow getWindow(Component dlg){
198
            return (IWindow) frameView.get(dlg);
199
    }
200

    
201
    public void closeWindow(IWindow v){
202
            Object c = viewFrame.remove(v);
203
            frameView.remove(c);
204
    }
205

    
206
    /**
207
     * DOCUMENT ME!
208
     *
209
     * @param v DOCUMENT ME!
210
     * @param x DOCUMENT ME!
211
     */
212
    public void setX(IWindow win, int x) {
213
            IFrame frame = (IFrame) viewFrame.get(win);
214
            if (frame != null) {
215
                frame.setX(x);
216
            }
217
            
218
    }
219

    
220
    /**
221
     * DOCUMENT ME!
222
     *
223
     * @param v DOCUMENT ME!
224
     * @param y DOCUMENT ME!
225
     */
226
    public void setY(IWindow win, int y) {
227
            IFrame frame = (IFrame) viewFrame.get(win);
228
        if (frame != null) {
229
            frame.setY(y);
230
        }
231
    }
232

    
233
    /**
234
     * DOCUMENT ME!
235
     *
236
     * @param v DOCUMENT ME!
237
     * @param height DOCUMENT ME!
238
     */
239
    public void setHeight(IWindow win, int height) {
240
            IFrame frame = (IFrame) viewFrame.get(win);
241
            frame.setHeight(height);
242
    }
243

    
244
    /**
245
     * DOCUMENT ME!
246
     *
247
     * @param v DOCUMENT ME!
248
     * @param width DOCUMENT ME!
249
     */
250
    public void setWidth(IWindow win, int width) {
251
            IFrame frame = (IFrame) viewFrame.get(win);
252
            frame.setWidth(width);
253
    }
254

    
255
    /**
256
     * DOCUMENT ME!
257
     *
258
     * @param v DOCUMENT ME!
259
     * @param title DOCUMENT ME!
260
     */
261
    public void setTitle(IWindow win, String title) {
262
            IFrame frame = (IFrame) viewFrame.get(win);
263
            frame.setTitle(title);
264
    }
265
    
266
        /**
267
         * Sets the minimum allowed size for the provided window.
268
         * 
269
         * @param sw
270
         * @param minSize
271
         */
272
        public void setMinimumSize(IWindow win, Dimension minSize) {
273
            IFrame frame = (IFrame) viewFrame.get(win);
274
            frame.setMinimumSize(minSize);
275
        }
276

    
277
    /**
278
     * DOCUMENT ME!
279
     *
280
     * @param vis The vis to set.
281
     */
282
    public void setVis(WindowInfoSupport vis) {
283
        this.vis = vis;
284
    }
285

    
286
    /**
287
     * DOCUMENT ME!
288
     *
289
     * @param v DOCUMENT ME!
290
     *
291
     * @return DOCUMENT ME!
292
     */
293
    private int getWidth(IWindow v) {
294
        WindowInfo vi = vis.getWindowInfo(v);
295

    
296
        if (vi.getWidth() == -1) {
297
            JPanel p = (JPanel) v;
298

    
299
            return p.getSize().width;
300
        } else {
301
            return vi.getWidth();
302
        }
303
    }
304

    
305
    /**
306
     * DOCUMENT ME!
307
     *
308
     * @param v DOCUMENT ME!
309
     *
310
     * @return DOCUMENT ME!
311
     */
312
    private int getWidth(IWindow v, WindowInfo wi) {
313
        if (wi.getWidth() == -1) {
314
            JPanel p = (JPanel) v;
315

    
316
            return p.getSize().width;
317
        } else {
318
            return wi.getWidth();
319
        }
320
    }
321

    
322
    /**
323
     * DOCUMENT ME!
324
     *
325
     * @param v DOCUMENT ME!
326
     *
327
     * @return DOCUMENT ME!
328
     */
329
    private int getHeight(IWindow v) {
330
        WindowInfo vi = vis.getWindowInfo(v);
331

    
332
        if (vi.getHeight() == -1) {
333
            JPanel p = (JPanel) v;
334

    
335
            return p.getSize().height;
336
        } else {
337
            return vi.getHeight();
338
        }
339
    }
340

    
341
    /**
342
     * DOCUMENT ME!
343
     *
344
     * @param v DOCUMENT ME!
345
     *
346
     * @return DOCUMENT ME!
347
     */
348
    private int getHeight(IWindow v, WindowInfo wi) {
349
        if (wi.getHeight() == -1) {
350
            JPanel p = (JPanel) v;
351

    
352
            return p.getSize().height;
353
        } else {
354
            return wi.getHeight();
355
        }
356
    }
357

    
358
    public void updateWindowInfo(IWindow win, WindowInfo windowInfo) {
359
            Object o = viewFrame.get(win);
360
            if (windowInfo!=null && o!=null) {
361
                    if (o instanceof JComponent) {
362
                        JComponent component = (JComponent) o;
363
                        windowInfo.updateWidth(component.getWidth());
364
                                windowInfo.updateHeight(component.getHeight());
365
                                windowInfo.updateX(component.getX());
366
                                windowInfo.updateY(component.getY());
367
                                windowInfo.updateClosed(!component.isShowing());
368
                                if (component instanceof JInternalFrame) {
369
                                        JInternalFrame iframe = (JInternalFrame) component;
370
                                        windowInfo.updateNormalBounds(iframe.getNormalBounds());
371
                                        windowInfo.updateMaximized(iframe.isMaximum());
372
                                }
373
                    }
374
            }
375
    }
376

    
377
}