Statistics
| Revision:

gvsig-raster / org.gvsig.raster.tools / trunk / org.gvsig.raster.tools / org.gvsig.raster.tools.app / org.gvsig.raster.tools.app.basic / src / main / java / org / gvsig / raster / tools / app / basic / tool / clip / ui / ClippingPanel.java @ 875

History | View | Annotate | Download (7.54 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.tools.app.basic.tool.clip.ui;
23

    
24
import java.awt.BorderLayout;
25
import java.util.Observable;
26
import java.util.Observer;
27

    
28
import javax.swing.BorderFactory;
29
import javax.swing.JPanel;
30
import javax.swing.JTabbedPane;
31

    
32
import org.gvsig.andami.PluginServices;
33
import org.gvsig.fmap.dal.coverage.RasterLocator;
34
import org.gvsig.fmap.dal.coverage.util.RasterUtils;
35
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
36
import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
37
import org.gvsig.raster.tools.app.basic.tool.clip.ClippingData;
38
import org.gvsig.raster.tools.app.basic.tool.clip.ui.listener.ClippingPanelListener;
39
import org.gvsig.raster.tools.app.basic.tool.clip.ui.panel.ClippingCoordinatesPanel;
40
import org.gvsig.raster.tools.app.basic.tool.clip.ui.panel.ClippingOptionsPanel;
41
import org.gvsig.raster.tools.app.basic.tool.clip.ui.panel.ClippingResolutionPanel;
42
import org.gvsig.raster.tools.app.basic.tool.clip.ui.panel.ClippingSelectionPanel;
43

    
44
/**
45
 * General panel for clipping. This panel contains a list of panels with the
46
 * clip options. 
47
 * 
48
 * @author Nacho Brodin (nachobrodin@gmail.com)
49
 */
50
public class ClippingPanel extends DefaultButtonsPanel implements Observer {
51
        private static final long         serialVersionUID = 3078196473228467834L;
52

    
53
        private ClippingDialog            clippingDialog       = null;
54

    
55
        private JTabbedPane               jTabbedPane1         = null;
56

    
57
        private ClippingCoordinatesPanel  coordinatesPanel     = null;
58
        private ClippingResolutionPanel   resolutionPanel      = null;
59
        private ClippingSelectionPanel    selectionPanel       = null;
60
        private ClippingOptionsPanel      optionsPanel         = null;
61

    
62
        private ClippingPanelListener     clippingPanelListener = null;
63

    
64
        /**
65
         * Crea un nuevo <code>ClippingPanel</code>
66
         * @param clippingDialog
67
         */
68
        @SuppressWarnings("deprecation")
69
        public ClippingPanel(ClippingDialog clippingDialog) {
70
                super(ButtonsPanel.BUTTONS_ACCEPTCANCELAPPLY);
71
                getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT).setEnabled(false);
72
                getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY).setEnabled(false);
73

    
74
                this.clippingDialog = clippingDialog;
75

    
76
                initialize();
77
        }
78
        
79
        /**
80
         * Asigna el gestor de eventos y a?ade los listener a los controles
81
         * que lo necesiten 
82
         * @param list
83
         */
84
        public void setClippingListener(ClippingPanelListener list) {
85
                this.clippingPanelListener = list;
86
                addListeners(clippingPanelListener);
87
                getCoordinatesPanel().setClippingListener(clippingPanelListener);
88
        }
89
        
90
        /**
91
         * Gets the listener
92
         * @return
93
         */
94
        public ClippingPanelListener getListener() {
95
                return clippingPanelListener;
96
        }
97
        
98
        /**
99
         * A?ade listeners a los controles que lo necesitan
100
         * @param list
101
         */
102
        private void addListeners(ClippingPanelListener list) {
103
                getResolutionPanel().getCCellSize().addValueChangedListener(list);
104
                getResolutionPanel().getCWidth().addValueChangedListener(list);
105
                getResolutionPanel().getCHeight().addValueChangedListener(list);
106
                getResolutionPanel().getButtonRestore().addActionListener(list);
107
                addButtonPressedListener(list);
108
        }
109
                
110
        /**
111
         * Obtener el <code>ClippingDialog</code> asociado a este objeto.
112
         * @return ClippingDialog
113
         */
114
        public ClippingDialog getClippingDialog() {
115
                return clippingDialog;
116
        }
117

    
118
        /**
119
         * This method initializes this
120
         */
121
        private void initialize() {
122
                JPanel jPanel = null;
123
                jTabbedPane1 = new JTabbedPane();
124
                
125
                jTabbedPane1.addTab(PluginServices.getText(this, "coordenadas_recorte"), getCoordinatesPanel());
126

    
127
                jPanel = new JPanel();
128
                jPanel.setLayout(new BorderLayout());
129
                jPanel.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
130
                jPanel.add(getResolutionPanel());
131
                jTabbedPane1.addTab(PluginServices.getText(this, "resolucion_espacial"), jPanel);
132

    
133
                jTabbedPane1.addTab(PluginServices.getText(this, "seleccion_bandas"), getSelectionPanel());
134

    
135
                jPanel = new JPanel();
136
                jPanel.setLayout(new BorderLayout());
137
                jPanel.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
138
                jPanel.add(getOptionsPanel());
139
                jTabbedPane1.addTab(PluginServices.getText(this, "otras_opciones"), jPanel);
140

    
141
                setLayout(new BorderLayout());
142
                add(jTabbedPane1, BorderLayout.CENTER);
143
        }
144
        
145
        public void removeTab(JPanel panel) {
146
                jTabbedPane1.remove(panel);                        
147
        }
148

    
149
        public ClippingCoordinatesPanel getCoordinatesPanel() {
150
                if (coordinatesPanel == null) {
151
                        coordinatesPanel = new ClippingCoordinatesPanel();
152
                }
153
                return coordinatesPanel;
154
        }
155
        
156
        /**
157
         * This method initializes jPanel
158
         *
159
         * @return javax.swing.JPanel
160
         */
161
        public ClippingResolutionPanel getResolutionPanel() {
162
                if (resolutionPanel == null) {
163
                        resolutionPanel = new ClippingResolutionPanel();
164
                        resolutionPanel.validate();
165
                }
166
                return resolutionPanel;
167
        }
168

    
169
        /**
170
         * This method initializes jPanel1
171
         *
172
         * @return javax.swing.JPanel
173
         */
174
        public ClippingSelectionPanel getSelectionPanel() {
175
                if (selectionPanel == null) {
176
                        selectionPanel = new ClippingSelectionPanel();
177
                }
178
                return selectionPanel;
179
        }
180

    
181
        /**
182
         * This method initializes jOptions
183
         *
184
         * @return javax.swing.JPanel
185
         */
186
        public ClippingOptionsPanel getOptionsPanel() {
187
                if (optionsPanel == null) {
188
                        optionsPanel = new ClippingOptionsPanel();
189
                }
190
                return optionsPanel;
191
        }
192

    
193
        double textWidth, textHeight;
194
        
195
        /**
196
         * Almacena el estado actual del ancho y alto para poder restaurarlo
197
         * si lo necesitamos.
198
         */
199
        public void saveStatus(ClippingData data) {
200
                textWidth = data.getPxWidth();
201
                textHeight = data.getPxHeight();
202
        }
203

    
204
        /**
205
         * Restaura el estado almacenado por saveStatus
206
         */
207
        public void restoreStatus(ClippingData data) {
208
                data.setPxWidth(textWidth);
209
                data.setPxHeight(textHeight);
210
                data.updateObservers();
211
        }
212

    
213
        /**
214
         * Actualiza los valores de los paneles cuando los datos de ClippingData varian
215
         * @param o 
216
         * @param arg
217
         */
218
        public void update(Observable o, Object arg) {
219
                if(!(o instanceof ClippingData))
220
                        return;
221
                ClippingData data = (ClippingData)o;
222
                
223
                clippingPanelListener.setEnableValueChangedEvent(false);
224
                getResolutionPanel().setWidthText(Math.round(data.getPxWidth()), 0);
225
                getResolutionPanel().setHeightText(Math.round(data.getPxHeight()), 0);
226
                RasterUtils util = RasterLocator.getManager().getRasterUtils();
227
                getCoordinatesPanel().setCoordReal(util.getCoord(data.getUlxWc(), data.getUlyWc(), data.getLrxWc(), data.getLryWc(), ClippingData.DEC));
228
                getCoordinatesPanel().setCoordPixel(util.getCoord(data.getUlxPx(), data.getUlyPx(), data.getLrxPx(), data.getLryPx(), ClippingData.DEC));
229
                getResolutionPanel().setCellSizeText(data.getCellSize(), ClippingData.DEC);
230
                clippingPanelListener.setEnableValueChangedEvent(true);
231
        }
232
}