Statistics
| Revision:

gvsig-raster / org.gvsig.raster / trunk / org.gvsig.raster / org.gvsig.raster.swing / org.gvsig.raster.swing.impl / src / main / java / org / gvsig / raster / swing / impl / preview / PreviewBasePanel.java @ 1317

History | View | Annotate | Download (11.3 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
* 
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
* 
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
* 
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
* MA  02110-1301, USA.
20
* 
21
*/
22
package org.gvsig.raster.swing.impl.preview;
23

    
24
import java.awt.BorderLayout;
25
import java.awt.Color;
26
import java.awt.Dimension;
27
import java.awt.geom.Rectangle2D;
28
import java.util.ArrayList;
29

    
30
import javax.swing.BorderFactory;
31
import javax.swing.JPanel;
32
import javax.swing.JSplitPane;
33
import javax.swing.JTabbedPane;
34
import javax.swing.border.Border;
35
import javax.swing.border.TitledBorder;
36
import javax.swing.plaf.basic.BasicSplitPaneDivider;
37
import javax.swing.plaf.basic.BasicSplitPaneUI;
38

    
39
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
40
import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
41
import org.gvsig.gui.beans.imagenavigator.IClientImageNavigator;
42
import org.gvsig.gui.beans.imagenavigator.ImageNavigator;
43
import org.gvsig.i18n.Messages;
44
import org.gvsig.raster.swing.preview.DataSourcePreview;
45
import org.gvsig.raster.swing.preview.PreviewBasePanelTab;
46
import org.gvsig.raster.swing.preview.PreviewPanel;
47
import org.gvsig.raster.swing.preview.PreviewRenderProcess;
48
/**
49
 * Panel base para componentes con previsualizaci?n.
50
 * 
51
 * 19/02/2008
52
 * @author Nacho Brodin nachobrodin@gmail.com
53
 */
54
public class PreviewBasePanel extends DefaultButtonsPanel implements PreviewPanel {
55
        private static final long serialVersionUID = 6028780107787443656L;
56

    
57
        private ImageNavigator        imageNavigator        = null;
58
        private DataSourcePreview     fLayer                = null;
59

    
60
        /**
61
         * Lista de paneles de usuario que son a?adidos a los tabs
62
         */
63
        private ArrayList<PreviewBasePanelTab>             
64
                                      userPanel             = new ArrayList<PreviewBasePanelTab>();
65
        /**
66
         * Panel de la base del cuadro con opciones comunes para todos los tabs
67
         */
68
        private JPanel                generalPanel          = null;
69
        /**
70
         * Panel de debajo de la vista previa
71
         */
72
        private JPanel                downPreviewPanel      = null;
73
        private PreviewRenderProcess  renderProcess         = null;
74

    
75
        /**
76
         * Panel central para el caso de que sea m?s de uno (con pesta?as)
77
         */
78
        private JTabbedPane           tabbedPane            = null;
79
        /**
80
         * Panel central para el caso de que sea solo uno (sin pesta?as)
81
         */
82
        private JPanel                mainPanel             = null;
83

    
84
        private JSplitPane            jPanelRight           = null;
85
        private JPanel                jPanelPreview         = null;
86

    
87
        private PreviewRequestManager previewRequestManager =  null;
88
        
89
        /**
90
         * Construir un nuevo PreviewBasePanel
91
         * @param userPanel. Lista de paneles de usuario para los tabs
92
         * @param generalPanel. Panel inferior global para todos los tabs
93
         * @param downPreviewPanel. Panel inferior al de la previsualizaci?n
94
         * @param renderProcess. Clase para procesar el raster antes del dibujado
95
         * @param lyr. Capa raster a mostrar en la previsualizaci?n
96
         */
97
        public PreviewBasePanel(ArrayList<PreviewBasePanelTab> userPanel, 
98
                                                        JPanel generalPanel, 
99
                                                        JPanel downPreviewPanel, 
100
                                                        PreviewRenderProcess renderProcess,
101
                                                        DataSourcePreview lyr) {
102
                this(ButtonsPanel.BUTTONS_ACCEPTCANCELAPPLY, userPanel, generalPanel, downPreviewPanel, renderProcess, lyr);
103
        }
104

    
105
        /**
106
         * Construir un nuevo PreviewBasePanel
107
         * @param buttons
108
         * @param userPanel
109
         * @param generalPanel
110
         * @param downPreviewPanel
111
         * @param renderProcess
112
         * @param lyr
113
         */
114
        public PreviewBasePanel(int buttons,
115
                        ArrayList<PreviewBasePanelTab> userPanel, 
116
                        JPanel generalPanel, 
117
                        JPanel downPreviewPanel, 
118
                        PreviewRenderProcess renderProcess,
119
                        DataSourcePreview lyr) {
120
                super(buttons);
121
                this.userPanel = userPanel;
122
                this.generalPanel = generalPanel;
123
                this.downPreviewPanel = downPreviewPanel;
124
                this.renderProcess = renderProcess;
125
                setLayer(lyr);
126
                initialize();
127
        }
128

    
129
        /**
130
         * Inicializa los componentes gr?ficos
131
         */
132
        private void initialize() {
133
                setLayout(new BorderLayout(8, 8));
134

    
135
                JPanel panelLeft = new JPanel();
136
                panelLeft.setPreferredSize(new Dimension(390, 0));
137
                panelLeft.setLayout(new BorderLayout(8, 8));
138
                if(userPanel != null) {
139
                        if(userPanel.size() == 1)
140
                                panelLeft.add(getPanelWithoutTabs(), BorderLayout.CENTER);
141
                        else if(userPanel.size() > 1)
142
                                panelLeft.add(getTabbedPane(), BorderLayout.CENTER);
143
                }
144
                if(generalPanel != null)
145
                        panelLeft.add(getGeneralPanel(), BorderLayout.SOUTH);
146

    
147
                JSplitPane jSplitPane1 = new JSplitPane();
148
                jSplitPane1.setLeftComponent(panelLeft);
149
                jSplitPane1.setRightComponent(getPanelRight());
150
                jSplitPane1.setResizeWeight(1.0);
151
                jSplitPane1.setContinuousLayout(true);
152
                jSplitPane1.setUI(new BasicSplitPaneUI() {
153
                        public BasicSplitPaneDivider createDefaultDivider() {
154
                                return new BasicSplitPaneDivider(this) {
155
                                        private static final long serialVersionUID = 1L;
156

    
157
                                        public void setBorder(Border b) {
158
                                        }
159
                                };
160
                        }
161
                });
162
                jSplitPane1.setBorder(null);
163

    
164
                add(jSplitPane1, BorderLayout.CENTER);
165
        }
166
        
167
        /**
168
         * Cierra la capa abierta para previsualizaci?n
169
         */
170
        public void closePreviewLayer() {
171
                previewRequestManager.closePreviewLayer();
172
        }
173
        
174
        /**
175
         * Asigna el panel de la posici?n 0 del array. Este panel es el que se utiliza
176
         * cuando no hay un JTabbedPane
177
         * @param panel
178
         */
179
        public void setUniquePanel(PreviewBasePanelTab panel) {
180
                userPanel.clear();
181
                userPanel.add(panel);
182
                mainPanel = (JPanel)panel;
183
                ((JSplitPane)getContent().getComponent(0)).setLeftComponent(mainPanel);
184
                getContent().updateUI();
185
        }
186

    
187
        /*
188
         * (non-Javadoc)
189
         * @see org.gvsig.raster.swing.preview.PreviewPanel#getTabbedPane()
190
         */
191
        public JTabbedPane getTabbedPane() {
192
                if (tabbedPane == null) {
193
                        tabbedPane = new JTabbedPane();
194
                        for (int i = 0; i < userPanel.size(); i++) 
195
                                tabbedPane.addTab(((PreviewBasePanelTab)userPanel.get(i)).getTitle(), ((PreviewBasePanelTab)userPanel.get(i)).getPanel());
196
                }
197
                return tabbedPane;
198
        }
199
        
200
        /**
201
         * Obtiene el panel central sin tabs. Esto ocurre cuando el usuario solo quiere un
202
         * panel. En este caso no hacen falta pesta?as por lo que se incorpora solo un JPanel
203
         * @return JTabbedPane
204
         */
205
        public JPanel getPanelWithoutTabs() {
206
                if (mainPanel == null) {
207
                        if(((PreviewBasePanelTab)userPanel.get(0)) instanceof JPanel) {
208
                                mainPanel = ((PreviewBasePanelTab)userPanel.get(0)).getPanel();
209
                        } else
210
                                mainPanel = new JPanel();
211
                }
212
                return mainPanel;
213
        }
214
        
215
        /**
216
         * Obtiene el panel con opciones comunes a todas las pesta?as.
217
         * @return JPanel
218
         */
219
        public JPanel getGeneralPanel() {
220
                return generalPanel;
221
        }
222
        
223
        /**
224
         * Obtiene el panel de debajo de la vista previa
225
         * @return JPanel
226
         */
227
        public JPanel getDownPreviewPanel() {
228
                return downPreviewPanel;
229
        }
230

    
231
        /**
232
         * Obtiene la lista de paneles de usuario
233
         * @return ArrayList de IUserPanelInterface
234
         */
235
        public ArrayList<PreviewBasePanelTab> getUserPanels() {
236
                return userPanel;
237
        }
238
        
239
        /**
240
         * Obtiene el objeto IClientImageNavigator
241
         * @return
242
         */
243
        public IClientImageNavigator getPreviewManager() {
244
                return previewRequestManager;
245
        }
246

    
247
        /*
248
         * (non-Javadoc)
249
         * @see org.gvsig.raster.swing.preview.PreviewPanel#getImageNavigator()
250
         */
251
        public ImageNavigator getImageNavigator() {
252
                if (imageNavigator == null) {
253
                        imageNavigator = new ImageNavigator(getPreviewManager());
254
                        imageNavigator.setFocusable(true);
255
                        imageNavigator.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
256
                }
257
                return imageNavigator;
258
        }
259

    
260
        /**
261
         * Obtiene el panel con el componente con la vista previa
262
         * @return JPanel
263
         */
264
        public JPanel getPanelPreview() {
265
                if (jPanelPreview == null) {
266
                        jPanelPreview = new JPanel();
267
                        JPanel jsubpanel2 = new JPanel();
268
                        jPanelPreview.setBorder(BorderFactory.createTitledBorder(null, Messages.getText("vista_previa"), TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));
269
                        jPanelPreview.setLayout(new BorderLayout());
270
                        jsubpanel2.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
271
                        jsubpanel2.setLayout(new BorderLayout());
272

    
273
                        jsubpanel2.add(getImageNavigator(), BorderLayout.CENTER);
274
                        jPanelPreview.add(jsubpanel2, BorderLayout.CENTER);
275

    
276
                        jPanelPreview.setPreferredSize(new Dimension(237, 237));
277
                        jPanelPreview.setMinimumSize(new Dimension(237, 237));
278
                        jPanelPreview.setMaximumSize(new Dimension(237, 237));
279
                }
280
                return jPanelPreview;
281
        }
282

    
283
        /**
284
         * Devuelve el panel donde estar? el widget de preview
285
         * @return
286
         */
287
        private JSplitPane getPanelRight() {
288
                if (jPanelRight == null) {
289
                        jPanelRight = new JSplitPane();
290
                        jPanelRight.setOrientation(JSplitPane.VERTICAL_SPLIT);
291
                        jPanelRight.setContinuousLayout(true);
292
                        jPanelRight.setResizeWeight(0.0);
293
                        jPanelRight.setPreferredSize(new Dimension(220, 0));
294
                        jPanelRight.setMinimumSize(new Dimension(220, 0));
295

    
296
                        if(getPanelPreview() != null)
297
                                jPanelRight.setTopComponent(getPanelPreview());
298
                        else
299
                                jPanelRight.setTopComponent(new JPanel());
300
                        if(getDownPreviewPanel() != null)
301
                                jPanelRight.setBottomComponent(getDownPreviewPanel());
302
                        else
303
                                jPanelRight.setBottomComponent(new JPanel());
304
                        jPanelRight.setUI(new BasicSplitPaneUI() {
305
                                public BasicSplitPaneDivider createDefaultDivider() {
306
                                        return new BasicSplitPaneDivider(this) {
307
                                                private static final long serialVersionUID = 1L;
308

    
309
                                                public void setBorder(Border b) {
310
                                                }
311
                                        };
312
                                }
313
                        });
314
                        jPanelRight.setBorder(null);
315
                }
316
                return jPanelRight;
317
        }
318

    
319
        public void setLayer(DataSourcePreview fLayer) {
320
                this.fLayer = fLayer;
321
                previewRequestManager = new PreviewRequestManager(renderProcess, fLayer);
322

    
323
                previewInitializeSizes();
324
        }
325
        
326
        public void previewInitializeSizes() {
327
                // Util para ejecutar el test sin una capa de prueba
328
                if (fLayer == null)
329
                        return;
330

    
331
                // Especificar las dimensiones de la capa en la vista previa
332
                Rectangle2D extent2 = fLayer.getBBoxRectangle();
333
                getImageNavigator().setViewDimensions(extent2.getMinX(), extent2.getMaxY(), extent2.getMaxX(), extent2.getMinY());
334
                getImageNavigator().setZoom(1.0/ fLayer.getCellSize());
335
                getImageNavigator().setAutoAdjusted();
336
        }
337

    
338

    
339
        /**
340
         * Especificar el layer para el recorte
341
         * @param layer
342
         */
343
        public DataSourcePreview getLayer() {
344
                return fLayer;
345
        }
346
        
347
        /*
348
         * (non-Javadoc)
349
         * @see org.gvsig.raster.swing.preview.PreviewPanel#setPreviewSize(java.awt.Dimension)
350
         */
351
        public void setPreviewSize(Dimension dimension) {
352
                getPanelPreview().setPreferredSize(dimension);
353
                getPanelPreview().setMinimumSize(dimension);
354
                getPanelPreview().setMaximumSize(dimension);
355
        }
356
        
357
        /*
358
         * (non-Javadoc)
359
         * @see org.gvsig.raster.swing.preview.PreviewPanel#refreshPreview()
360
         */
361
        public void refreshPreview() {
362
                if (fLayer == null)
363
                        return;
364
                getImageNavigator().updateBuffer();
365
        }
366

    
367
        /*
368
         * (non-Javadoc)
369
         * @see org.gvsig.raster.swing.preview.PreviewPanel#getDataSourcePreview()
370
         */
371
        public DataSourcePreview getDataSourcePreview() {
372
                return fLayer;
373
        }
374
}