Statistics
| Revision:

gvsig-raster / org.gvsig.raster.tools / branches / org.gvsig.raster.tools_dataaccess_refactoring / org.gvsig.raster.tools.app.basic / src / main / java / org / gvsig / raster / tools / app / basic / tool / clip / ui / ClippingPanel.java @ 2296

History | View | Annotate | Download (7.08 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.JPanel;
29
import javax.swing.JTabbedPane;
30

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

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

    
52
        private ClippingDialog            clippingDialog       = null;
53

    
54
        private JTabbedPane               jTabbedPane1         = null;
55

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

    
61
        private ClippingPanelListener     clippingPanelListener = null;
62

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

    
72
                this.clippingDialog = clippingDialog;
73

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

    
116
        /**
117
         * This method initializes this
118
         */
119
        private void initialize() {
120
                jTabbedPane1 = new JTabbedPane();
121
                
122
                jTabbedPane1.addTab(Messages.getText("coordenadas_recorte"), getCoordinatesPanel());
123
                jTabbedPane1.addTab(Messages.getText("resolucion_espacial"), getResolutionPanel());
124
                jTabbedPane1.addTab(Messages.getText("seleccion_bandas"), getSelectionPanel());
125
                jTabbedPane1.addTab(Messages.getText("otras_opciones"), getOptionsPanel());
126

    
127
                setLayout(new BorderLayout());
128
                add(jTabbedPane1, BorderLayout.CENTER);
129
        }
130
        
131
        public void removeTab(JPanel panel) {
132
                jTabbedPane1.remove(panel);                        
133
        }
134

    
135
        public ClippingCoordinatesPanel getCoordinatesPanel() {
136
                if (coordinatesPanel == null) {
137
                        coordinatesPanel = new ClippingCoordinatesPanel();
138
                }
139
                return coordinatesPanel;
140
        }
141
        
142
        /**
143
         * This method initializes jPanel
144
         *
145
         * @return javax.swing.JPanel
146
         */
147
        public ClippingResolutionPanel getResolutionPanel() {
148
                if (resolutionPanel == null) {
149
                        resolutionPanel = new ClippingResolutionPanel();
150
                        resolutionPanel.validate();
151
                }
152
                return resolutionPanel;
153
        }
154

    
155
        /**
156
         * This method initializes jPanel1
157
         *
158
         * @return javax.swing.JPanel
159
         */
160
        public ClippingSelectionPanel getSelectionPanel() {
161
                if (selectionPanel == null) {
162
                        selectionPanel = new ClippingSelectionPanel();
163
                }
164
                return selectionPanel;
165
        }
166

    
167
        /**
168
         * This method initializes jOptions
169
         *
170
         * @return javax.swing.JPanel
171
         */
172
        public ClippingOptionsPanel getOptionsPanel() {
173
                if (optionsPanel == null) {
174
                        optionsPanel = new ClippingOptionsPanel();
175
                }
176
                return optionsPanel;
177
        }
178

    
179
        double textWidth, textHeight;
180
        
181
        /**
182
         * Almacena el estado actual del ancho y alto para poder restaurarlo
183
         * si lo necesitamos.
184
         */
185
        public void saveStatus(ClippingData data) {
186
                textWidth = data.getPxWidth();
187
                textHeight = data.getPxHeight();
188
        }
189

    
190
        /**
191
         * Restaura el estado almacenado por saveStatus
192
         */
193
        public void restoreStatus(ClippingData data) {
194
                data.setPxWidth(textWidth);
195
                data.setPxHeight(textHeight);
196
                data.updateObservers();
197
        }
198

    
199
        /**
200
         * Actualiza los valores de los paneles cuando los datos de ClippingData varian
201
         * @param o 
202
         * @param arg
203
         */
204
        public void update(Observable o, Object arg) {
205
                if(!(o instanceof ClippingData))
206
                        return;
207
                ClippingData data = (ClippingData)o;
208
                
209
                clippingPanelListener.setEnableValueChangedEvent(false);
210
                getResolutionPanel().setWidthText(Math.round(data.getPxWidth()), 0);
211
                getResolutionPanel().setHeightText(Math.round(data.getPxHeight()), 0);
212
                RasterUtils util = RasterLocator.getManager().getRasterUtils();
213
                getCoordinatesPanel().setCoordReal(util.getCoord(data.getUlxWc(), data.getUlyWc(), data.getLrxWc(), data.getLryWc(), ClippingData.DEC));
214
                getCoordinatesPanel().setCoordPixel(util.getCoord(data.getUlxPx(), data.getUlyPx(), data.getLrxPx(), data.getLryPx(), ClippingData.DEC));
215
                getResolutionPanel().setCellSizeText(data.getCellSize(), ClippingData.DEC);
216
                clippingPanelListener.setEnableValueChangedEvent(true);
217
        }
218
}