Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.app / org.gvsig.app.mainplugin / src / main / java / org / gvsig / app / gui / selectionByTheme / SelectionByTheme.java @ 43704

History | View | Annotate | Download (9.92 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
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 3
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
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.app.gui.selectionByTheme;
25

    
26
import java.awt.BorderLayout;
27
import java.awt.event.ActionEvent;
28
import java.awt.event.ActionListener;
29
import org.gvsig.tools.ToolsLocator;
30
import org.gvsig.tools.i18n.I18nManager;
31
import java.util.ArrayList;
32
import java.util.List;
33
import javax.swing.DefaultComboBoxModel;
34
import javax.swing.SwingUtilities;
35
import org.gvsig.tools.swing.api.ToolsSwingLocator;
36
import org.gvsig.tools.swing.api.ToolsSwingManager;
37
import org.gvsig.tools.swing.api.task.JTaskStatus;
38
import org.gvsig.tools.task.SimpleTaskStatus;
39

    
40
public class SelectionByTheme extends SelectionByThemeView {
41

    
42
    /**
43
     * 
44
     */
45
    private static final long serialVersionUID = -5094042907941800674L;
46

    
47
    public static final int EQUALS = 0;
48
    public static final int DISJOINT = 1;
49
    public static final int INTERSECTS = 2;
50
    public static final int TOUCHES = 3;
51
    public static final int CROSSES = 4;
52
    public static final int WITHIN = 5;
53
    public static final int CONTAINS = 6;
54
    public static final int OVERLAPS = 7;
55

    
56
    private SelectionByThemeModel dataSource = null;
57

    
58
    private final List<SelectionByThemeListener> listeners = new ArrayList<>();
59
    private SimpleTaskStatus taskStatus;
60
    private JTaskStatus statusBar;
61

    
62
    public SelectionByTheme() {
63
        super();
64
        initialize();
65
    }
66

    
67
    private void initialize() {
68
        I18nManager i18n = ToolsLocator.getI18nManager();
69
        ToolsSwingManager manager = ToolsSwingLocator.getToolsSwingManager();
70

    
71
        manager.translate(this.lblSelecFromActiveLayers);
72
        manager.translate(this.lblSelectedElementsFromLayer);
73
        this.lblSelecFromActiveLayers.setText("<html>"+i18n.getTranslation(this.lblSelecFromActiveLayers.getText())+"</html>");
74
        this.lblSelectedElementsFromLayer.setText("<html>"+i18n.getTranslation(this.lblSelectedElementsFromLayer.getText())+"</html>");
75
        manager.translate(this.btnNew);
76
        manager.translate(this.btnAdd);
77
        manager.translate(this.btnFrom);
78
        manager.translate(this.btnCerrar);
79

    
80
        String[] textosAcciones = new String[] {
81
            i18n.getTranslation("Sean_iguales_a"),
82
            i18n.getTranslation("Sean_disjuntos_a"),
83
            i18n.getTranslation("Intersecten_con"),
84
            i18n.getTranslation("Toquen"),
85
            i18n.getTranslation("Crucen_con"),
86
            i18n.getTranslation("Contengan"),
87
            i18n.getTranslation("Esten_contenidos_en"),
88
            i18n.getTranslation("Se_superponen_a"),
89
        };
90

    
91
        DefaultComboBoxModel model = new DefaultComboBoxModel(textosAcciones);
92
        this.cmbAction.setModel(model);        
93

    
94
        this.btnNew.addActionListener(new ActionListener() {
95
            @Override
96
            public void actionPerformed(ActionEvent e) {
97
                callNewListeners(cmbCapas.getSelectedIndex(), cmbAction.getSelectedIndex());
98
            }
99
        });
100
        this.btnAdd.addActionListener(new ActionListener() {
101
            @Override
102
            public void actionPerformed(ActionEvent e) {
103
                callAddToListeners(cmbCapas.getSelectedIndex(), cmbAction.getSelectedIndex());
104
            }
105
        });
106
        this.btnFrom.addActionListener(new ActionListener() {
107
            @Override
108
            public void actionPerformed(ActionEvent e) {
109
                callFromListeners(cmbCapas.getSelectedIndex(), cmbAction.getSelectedIndex());
110
            }
111
        });
112
        this.btnCerrar.addActionListener(new ActionListener() {
113
            @Override
114
            public void actionPerformed(ActionEvent e) {
115
                setVisible(false);
116
            }
117
        });
118
        this.taskStatus = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus(i18n.getTranslation("Seleccion_por_capa"));
119
        this.statusBar = ToolsSwingLocator.getTaskStatusSwingManager().createJTaskStatus();
120
        this.statusBar.bind(this.taskStatus);
121
        this.statusBar.setTitle("X");        
122
        this.statusBar.message("X");
123
        this.statusBar.setShowRemoveTaskButton(false);
124
        
125
        this.panelStatusBar.setLayout(new BorderLayout());
126
        this.panelStatusBar.add(this.statusBar,BorderLayout.CENTER);
127

    
128
        SwingUtilities.invokeLater(new Runnable() {
129
            @Override
130
            public void run() {
131
                statusBar.message("");
132
                panelStatusBar.setVisible(false);
133
            }
134
        });
135
    }
136

    
137
    @Override
138
    public void setEnabled(boolean enabled) {
139
        this.btnAdd.setEnabled(enabled);
140
        this.btnCerrar.setEnabled(enabled);
141
        this.btnFrom.setEnabled(enabled);
142
        this.btnNew.setEnabled(enabled);
143
        this.cmbAction.setEnabled(enabled);
144
        this.cmbCapas.setEnabled(enabled);        
145
    }
146

    
147
    @Override
148
    public boolean isEnabled() {
149
        return this.cmbAction.isEnabled();
150
    }
151
    
152
    public SelectionByThemeModel getModel() {
153
        return dataSource;
154
    }
155

    
156
    public void setModel(SelectionByThemeModel source) {
157
        dataSource = source;
158
        String[] nameLayers = new String[dataSource.getLayers().getLayersCount()];
159
        for (int i = 0; i < nameLayers.length; i++) {
160
            nameLayers[i] = dataSource.getLayers().getLayer(i).getName();
161
        }
162
        DefaultComboBoxModel model = new DefaultComboBoxModel(nameLayers);
163
        cmbCapas.setModel(model);
164
    }
165

    
166
    private void callNewListeners(final int selection, final int actionCode) {
167
        Thread task = new Thread(
168
            new Runnable() {
169
                @Override
170
                public void run() {
171
                    try {
172
                        for (SelectionByThemeListener l : listeners) {
173
                            l.newSet(
174
                                dataSource.getLayers().getActives(), 
175
                                dataSource.getLayers().getLayer(selection), 
176
                                actionCode,
177
                                taskStatus
178
                            );
179
                        }
180
                    } finally {
181
                        setEnabled(true);
182
                        panelStatusBar.setVisible(false);
183
                    }
184
                }
185
            }, 
186
            "SelectionByTheme"
187
        );
188
        I18nManager i18n = ToolsLocator.getI18nManager();
189
        this.taskStatus = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus(i18n.getTranslation("Seleccion_por_capa"));
190
        this.statusBar.bind(this.taskStatus);
191
        this.panelStatusBar.setVisible(true);
192
        setEnabled(false);
193
        task.start();
194
    }
195

    
196
    private void callAddToListeners(final int selection, final int actionCode) {
197
        Thread task = new Thread(
198
            new Runnable() {
199
                @Override
200
                public void run() {
201
                    try {
202
                        for (SelectionByThemeListener l : listeners) {
203
                            l.addToSet(
204
                                dataSource.getLayers().getActives(), 
205
                                dataSource.getLayers().getLayer(selection), 
206
                                actionCode,
207
                                taskStatus
208
                            );
209
                        }
210
                    } finally {
211
                        panelStatusBar.setVisible(false);
212
                        setEnabled(true);
213
                    }
214
                }
215
            }, 
216
            "SelectionByTheme"
217
        );
218
        I18nManager i18n = ToolsLocator.getI18nManager();
219
        this.taskStatus = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus(i18n.getTranslation("Seleccion_por_capa"));
220
        this.statusBar.bind(this.taskStatus);
221
        this.panelStatusBar.setVisible(true);
222
        setEnabled(false);
223
        task.start();
224
    }
225

    
226
    private void callFromListeners(final int selection, final int actionCode) {
227
        Thread task = new Thread(
228
            new Runnable() {
229
                @Override
230
                public void run() {
231
                    try {
232
                        for (SelectionByThemeListener l : listeners) {
233
                            l.fromSet(
234
                                dataSource.getLayers().getActives(), 
235
                                dataSource.getLayers().getLayer(selection), 
236
                                actionCode,
237
                                taskStatus
238
                            );
239
                        }
240
                    } finally {
241
                        panelStatusBar.setVisible(false);
242
                        setEnabled(true);
243
                    }
244
                }
245
            }, 
246
            "SelectionByTheme"
247
        );
248
        I18nManager i18n = ToolsLocator.getI18nManager();
249
        this.taskStatus = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus(i18n.getTranslation("Seleccion_por_capa"));
250
        this.statusBar.bind(this.taskStatus);
251
        this.panelStatusBar.setVisible(true);
252
        setEnabled(false);
253
        task.start();
254
    }
255
    
256
    public boolean addSelectionListener(SelectionByThemeListener arg0) {
257
        return listeners.add(arg0);
258
    }
259

    
260
    public boolean removeSelectionListener(SelectionByThemeListener arg0) {
261
        return listeners.remove(arg0);
262
    }
263

    
264
}