Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / dockingSkin / src / main / java / org / gvsig / mdiManager / DockWindowSupport.java @ 24453

History | View | Annotate | Download (9.8 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.mdiManager;
42

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

    
48
import javax.swing.JComponent;
49
import javax.swing.JDialog;
50
import javax.swing.JPanel;
51

    
52
import net.infonode.docking.RootWindow;
53
import net.infonode.docking.title.SimpleDockingWindowTitleProvider;
54

    
55
import org.gvsig.mdiManager.frames.ExternalFrame;
56

    
57
import com.iver.andami.PluginServices;
58
import com.iver.andami.ui.mdiFrame.MDIFrame;
59
import com.iver.andami.ui.mdiManager.IWindow;
60
import com.iver.andami.ui.mdiManager.WindowInfo;
61

    
62

    
63
/**
64
 *
65
 */
66
public class DockWindowSupport {
67
    private Hashtable frameView = new Hashtable();
68
    private Hashtable viewFrame = new Hashtable();
69
//    private Image icon;
70
    private DockInfoSupport vis;
71
        private RootWindow rootWindow;
72
        private MDIFrame mainFrame;
73

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

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

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

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

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

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

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

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

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

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

    
141
        if (frame == null) {
142
                WindowInfo vi = vis.getWindowInfo(p);
143
                DockWindow nuevo = createDockWindow(p);
144
            viewFrame.put(p, nuevo);
145
            frameView.put(nuevo, p);
146

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

    
173
    public DockWindow createDockWindow(IWindow p)
174
    {
175
        WindowInfo wi = vis.getWindowInfo(p);
176
        DockWindow nuevo = new DockWindow(p,wi.getTitle(),null);
177
//        if (icon != null){
178
//            nuevo.setFrameIcon(new ImageIcon(icon));
179
//        }
180
        
181
        nuevo.add((JPanel) p);
182
//        nuevo.setClosable(true);
183
        nuevo.setSize(getWidth(p, wi), getHeight(p, wi));
184
//        nuevo.setTitle(wi.getTitle());
185
        nuevo.setVisible(wi.isVisible());
186
//        nuevo.setResizable(wi.isResizable());
187
        nuevo.getWindowProperties().setMinimizeEnabled(wi.isIconifiable());
188
        nuevo.getWindowProperties().setMaximizeEnabled(wi.isMaximizable());
189
        nuevo.setLocation(wi.getX(), wi.getY());
190
        nuevo.setMinimumSize(wi.getMinimumSize());
191

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

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

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

    
205
//    /**
206
//     * DOCUMENT ME!
207
//     *
208
//     * @param v DOCUMENT ME!
209
//     * @param x DOCUMENT ME!
210
//     */
211
//    public void setX(IWindow win, int x) {
212
//            IFrame frame = (IFrame) viewFrame.get(win);
213
//            frame.setX(x);
214
//    }
215
//
216
//    /**
217
//     * DOCUMENT ME!
218
//     *
219
//     * @param v DOCUMENT ME!
220
//     * @param y DOCUMENT ME!
221
//     */
222
//    public void setY(IWindow win, int y) {
223
//            IFrame frame = (IFrame) viewFrame.get(win);
224
//            frame.setY(y);
225
//    }
226

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

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

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

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

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

    
293
        if (vi.getWidth() == -1) {
294
            JPanel p = (JPanel) v;
295

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

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

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

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

    
329
        if (vi.getHeight() == -1) {
330
            JPanel p = (JPanel) v;
331

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

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

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

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

    
374
}