Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libCorePlugin / src / org / gvsig / coreplugin / mdiManager / FrameWindowSupport.java @ 29630

History | View | Annotate | Download (9.23 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.PluginServices;
57
import org.gvsig.andami.ui.mdiFrame.MDIFrame;
58
import org.gvsig.andami.ui.mdiManager.IWindow;
59
import org.gvsig.andami.ui.mdiManager.WindowInfo;
60
import org.gvsig.coreplugin.mdiManager.frames.ExternalFrame;
61
import org.gvsig.coreplugin.mdiManager.frames.IFrame;
62
import org.gvsig.coreplugin.mdiManager.frames.InternalFrame;
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
                    PluginServices.getLogger().error("window_not_found_"+panel.getWindowInfo().getTitle());
170
                    return null;
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(true);
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
            frame.setX(x);
215
    }
216

    
217
    /**
218
     * DOCUMENT ME!
219
     *
220
     * @param v DOCUMENT ME!
221
     * @param y DOCUMENT ME!
222
     */
223
    public void setY(IWindow win, int y) {
224
            IFrame frame = (IFrame) viewFrame.get(win);
225
            frame.setY(y);
226
    }
227

    
228
    /**
229
     * DOCUMENT ME!
230
     *
231
     * @param v DOCUMENT ME!
232
     * @param height DOCUMENT ME!
233
     */
234
    public void setHeight(IWindow win, int height) {
235
            IFrame frame = (IFrame) viewFrame.get(win);
236
            frame.setHeight(height);
237
    }
238

    
239
    /**
240
     * DOCUMENT ME!
241
     *
242
     * @param v DOCUMENT ME!
243
     * @param width DOCUMENT ME!
244
     */
245
    public void setWidth(IWindow win, int width) {
246
            IFrame frame = (IFrame) viewFrame.get(win);
247
            frame.setWidth(width);
248
    }
249

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

    
272
    /**
273
     * DOCUMENT ME!
274
     *
275
     * @param vis The vis to set.
276
     */
277
    public void setVis(WindowInfoSupport vis) {
278
        this.vis = vis;
279
    }
280

    
281
    /**
282
     * DOCUMENT ME!
283
     *
284
     * @param v DOCUMENT ME!
285
     *
286
     * @return DOCUMENT ME!
287
     */
288
    private int getWidth(IWindow v) {
289
        WindowInfo vi = vis.getWindowInfo(v);
290

    
291
        if (vi.getWidth() == -1) {
292
            JPanel p = (JPanel) v;
293

    
294
            return p.getSize().width;
295
        } else {
296
            return vi.getWidth();
297
        }
298
    }
299

    
300
    /**
301
     * DOCUMENT ME!
302
     *
303
     * @param v DOCUMENT ME!
304
     *
305
     * @return DOCUMENT ME!
306
     */
307
    private int getWidth(IWindow v, WindowInfo wi) {
308
        if (wi.getWidth() == -1) {
309
            JPanel p = (JPanel) v;
310

    
311
            return p.getSize().width;
312
        } else {
313
            return wi.getWidth();
314
        }
315
    }
316

    
317
    /**
318
     * DOCUMENT ME!
319
     *
320
     * @param v DOCUMENT ME!
321
     *
322
     * @return DOCUMENT ME!
323
     */
324
    private int getHeight(IWindow v) {
325
        WindowInfo vi = vis.getWindowInfo(v);
326

    
327
        if (vi.getHeight() == -1) {
328
            JPanel p = (JPanel) v;
329

    
330
            return p.getSize().height;
331
        } else {
332
            return vi.getHeight();
333
        }
334
    }
335

    
336
    /**
337
     * DOCUMENT ME!
338
     *
339
     * @param v DOCUMENT ME!
340
     *
341
     * @return DOCUMENT ME!
342
     */
343
    private int getHeight(IWindow v, WindowInfo wi) {
344
        if (wi.getHeight() == -1) {
345
            JPanel p = (JPanel) v;
346

    
347
            return p.getSize().height;
348
        } else {
349
            return wi.getHeight();
350
        }
351
    }
352

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

    
372
}