svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.labeling.app / org.gvsig.labeling.app.mainplugin / src / main / java / org / gvsig / labeling / gui / layerproperties / FeatureDependent.java @ 42981
History | View | Annotate | Download (21.3 KB)
1 | 40911 | jldominguez | /**
|
---|---|---|---|
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.labeling.gui.layerproperties; |
||
25 | |||
26 | import java.awt.BorderLayout; |
||
27 | import java.awt.Component; |
||
28 | import java.awt.Dimension; |
||
29 | import java.awt.GridLayout; |
||
30 | import java.awt.event.ActionEvent; |
||
31 | import java.awt.event.ActionListener; |
||
32 | import java.awt.event.MouseAdapter; |
||
33 | import java.awt.event.MouseEvent; |
||
34 | import java.beans.PropertyChangeEvent; |
||
35 | 41670 | jjdelcerro | import java.util.Collection; |
36 | 40911 | jldominguez | |
37 | import javax.swing.AbstractCellEditor; |
||
38 | 41670 | jjdelcerro | import javax.swing.DefaultComboBoxModel; |
39 | 40911 | jldominguez | import javax.swing.JButton; |
40 | import javax.swing.JCheckBox; |
||
41 | 41670 | jjdelcerro | import javax.swing.JComboBox; |
42 | 40911 | jldominguez | import javax.swing.JComponent; |
43 | import javax.swing.JLabel; |
||
44 | import javax.swing.JOptionPane; |
||
45 | import javax.swing.JPanel; |
||
46 | import javax.swing.JScrollPane; |
||
47 | import javax.swing.JTable; |
||
48 | import javax.swing.ListSelectionModel; |
||
49 | import javax.swing.event.TableModelEvent; |
||
50 | import javax.swing.event.TableModelListener; |
||
51 | import javax.swing.table.DefaultTableModel; |
||
52 | import javax.swing.table.TableCellEditor; |
||
53 | import javax.swing.table.TableCellRenderer; |
||
54 | import javax.swing.table.TableColumnModel; |
||
55 | |||
56 | 41670 | jjdelcerro | import org.gvsig.app.gui.labeling.LabelClassEditor; |
57 | 40911 | jldominguez | import org.gvsig.fmap.dal.exception.ReadException; |
58 | import org.gvsig.fmap.dal.feature.FeatureStore; |
||
59 | import org.gvsig.fmap.dal.feature.FeatureType; |
||
60 | import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass; |
||
61 | 41670 | jjdelcerro | import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClassFactory; |
62 | 40911 | jldominguez | import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod; |
63 | import org.gvsig.gui.beans.swing.celleditors.BooleanTableCellEditor; |
||
64 | import org.gvsig.gui.beans.swing.cellrenderers.BooleanTableCellRenderer; |
||
65 | import org.gvsig.i18n.Messages; |
||
66 | import org.gvsig.labeling.label.FeatureDependentLabeled; |
||
67 | import org.gvsig.symbology.SymbologyLocator; |
||
68 | 41670 | jjdelcerro | import org.gvsig.symbology.SymbologyManager; |
69 | import org.gvsig.symbology.swing.SymbologySwingLocator; |
||
70 | import org.gvsig.symbology.swing.SymbologySwingManager; |
||
71 | import org.gvsig.tools.ToolsLocator; |
||
72 | import org.gvsig.tools.i18n.I18nManager; |
||
73 | import org.slf4j.Logger; |
||
74 | import org.slf4j.LoggerFactory; |
||
75 | 40911 | jldominguez | |
76 | public class FeatureDependent extends AbstractLabelingMethodPanel implements ActionListener{ |
||
77 | 41670 | jjdelcerro | private static final Logger logger = LoggerFactory.getLogger(FeatureDependent.class); |
78 | 42981 | fdiaz | |
79 | 40911 | jldominguez | private static final long serialVersionUID = 5493451803343695650L; |
80 | private static int NAME_FIELD_INDEX = 0; |
||
81 | private static int PREVIEW_FIELD_INDEX = 1; |
||
82 | private static int FILTER_FIELD_INDEX = 2; |
||
83 | private static int LABEL_EXPRESSION_FIELD_INDEX = 3; |
||
84 | private static int VISIBLE_FIELD_INDEX = 4; |
||
85 | JTable tblClasses = null; |
||
86 | private JButton btnMoveUpClass; |
||
87 | private JButton btnAddClass; |
||
88 | private JCheckBox chkLabel; |
||
89 | private JCheckBox chkDefinePriorities; |
||
90 | private JScrollPane scrlPan; |
||
91 | private boolean openEditor = false; |
||
92 | private JButton btnMoveDownClass; |
||
93 | private JButton btnDelClass; |
||
94 | 42981 | fdiaz | |
95 | private JPanel panel; |
||
96 | |||
97 | |||
98 | 40911 | jldominguez | /*
|
99 | private String[] fieldNames;
|
||
100 | private int[] fieldTypes;
|
||
101 | */
|
||
102 | private JPanel buttonPanel; |
||
103 | 41670 | jjdelcerro | private JComboBox comboLabelClassFactoryToUse; |
104 | 40911 | jldominguez | |
105 | @Override
|
||
106 | public String getName() { |
||
107 | 42981 | fdiaz | |
108 | 40911 | jldominguez | return Messages.getText(
|
109 | "define_classes_of_features_and_label_each_differently")+"."; |
||
110 | } |
||
111 | |||
112 | @Override
|
||
113 | public Class<? extends ILabelingMethod> getLabelingMethodClass() { |
||
114 | return FeatureDependentLabeled.class;
|
||
115 | } |
||
116 | |||
117 | |||
118 | private JCheckBox getChkDefinePriorities() { |
||
119 | if (chkDefinePriorities == null) { |
||
120 | chkDefinePriorities = new JCheckBox(Messages.getText("label_priority")); |
||
121 | chkDefinePriorities.addActionListener(this);
|
||
122 | chkDefinePriorities.setName("CHK_DEFINE_PRIORITIES");
|
||
123 | } |
||
124 | return chkDefinePriorities;
|
||
125 | } |
||
126 | |||
127 | |||
128 | private JButton getBtnDelClass() { |
||
129 | if (btnDelClass == null) { |
||
130 | btnDelClass = new JButton(Messages.getText("delete")); |
||
131 | btnDelClass.setName("BTNDELCLASS");
|
||
132 | btnDelClass.addActionListener(this);
|
||
133 | } |
||
134 | return btnDelClass;
|
||
135 | } |
||
136 | |||
137 | private JButton getBtnAddClass() { |
||
138 | if (btnAddClass == null) { |
||
139 | btnAddClass = new JButton(Messages.getText("add")); |
||
140 | btnAddClass.setName("BTNADDCLASS");
|
||
141 | btnAddClass.addActionListener(this);
|
||
142 | } |
||
143 | return btnAddClass;
|
||
144 | } |
||
145 | |||
146 | private JButton getBtnMoveUpClass() { |
||
147 | if (btnMoveUpClass == null) { |
||
148 | btnMoveUpClass = new JButton(Messages.getText("move_up")); |
||
149 | btnMoveUpClass.setName("BTNMOVEUPCLASS");
|
||
150 | btnMoveUpClass.addActionListener(this);
|
||
151 | } |
||
152 | return btnMoveUpClass;
|
||
153 | } |
||
154 | |||
155 | private JButton getBtnMoveDownClass() { |
||
156 | if (btnMoveDownClass == null) { |
||
157 | btnMoveDownClass = new JButton(Messages.getText("move_down")); |
||
158 | btnMoveDownClass.setName("BTNMOVEDOWNCLASS");
|
||
159 | btnMoveDownClass.addActionListener(this);
|
||
160 | } |
||
161 | return btnMoveDownClass;
|
||
162 | } |
||
163 | |||
164 | private JScrollPane getCenterScrl() { |
||
165 | |||
166 | scrlPan = new JScrollPane(getTblClasses()); |
||
167 | scrlPan.setPreferredSize(new Dimension(180, 300)); |
||
168 | |||
169 | return scrlPan;
|
||
170 | } |
||
171 | |||
172 | |||
173 | private JTable getTblClasses() { |
||
174 | |||
175 | tblClasses = new JTable(new LabelClassTableModel()); |
||
176 | tblClasses.setRowHeight(50);
|
||
177 | tblClasses.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||
178 | tblClasses.addMouseListener(new MouseAdapter() { |
||
179 | int prevRow =-1; |
||
180 | @Override
|
||
181 | public void mouseClicked(MouseEvent e) { |
||
182 | if (!tblClasses.isEnabled()){
|
||
183 | return;
|
||
184 | } |
||
185 | int col = tblClasses.getColumnModel().getColumnIndexAtX(e.getX());
|
||
186 | int row = (int) ((e.getY()-tblClasses.getLocation().getY()) / tblClasses.getRowHeight()); |
||
187 | if(!(row > tblClasses.getRowCount()-1 || col > tblClasses.getColumnCount()-1)) |
||
188 | { |
||
189 | openEditor = (row == prevRow && e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2 |
||
190 | ) ; |
||
191 | prevRow = row; |
||
192 | if (openEditor)
|
||
193 | tblClasses.editCellAt(row, col); |
||
194 | } |
||
195 | } |
||
196 | }); |
||
197 | |||
198 | tblClasses.getModel().addTableModelListener(new TableModelListener() { |
||
199 | |||
200 | public void tableChanged(TableModelEvent e) { |
||
201 | if (!tblClasses.isEnabled()){
|
||
202 | return;
|
||
203 | } |
||
204 | |||
205 | if(e.getColumn() == VISIBLE_FIELD_INDEX){
|
||
206 | ILabelClass oldLc = (ILabelClass) tblClasses.getValueAt(e.getFirstRow(), PREVIEW_FIELD_INDEX); |
||
207 | oldLc.setVisible(Boolean.valueOf(tblClasses.getValueAt(e.getFirstRow(), VISIBLE_FIELD_INDEX).toString()));
|
||
208 | } |
||
209 | } |
||
210 | |||
211 | }); |
||
212 | |||
213 | TableColumnModel cm = tblClasses.getColumnModel();
|
||
214 | |||
215 | tblClasses.getColumnModel().getColumn(PREVIEW_FIELD_INDEX).setCellRenderer(new TableCellRenderer() { |
||
216 | |||
217 | public Component getTableCellRendererComponent(JTable table, |
||
218 | Object value, boolean isSelected, boolean hasFocus, |
||
219 | int row, int column) { |
||
220 | LabelClassPreview lcPr = new LabelClassPreview();
|
||
221 | lcPr.setLabelClass((ILabelClass) value); |
||
222 | return lcPr;
|
||
223 | } |
||
224 | |||
225 | }); |
||
226 | tblClasses.getColumnModel().getColumn(VISIBLE_FIELD_INDEX).setCellRenderer(new BooleanTableCellRenderer(false)); |
||
227 | tblClasses.getColumnModel().getColumn(LABEL_EXPRESSION_FIELD_INDEX).setCellRenderer(new TableCellRenderer() { |
||
228 | public Component getTableCellRendererComponent(JTable table, |
||
229 | Object value, boolean isSelected, boolean hasFocus, |
||
230 | int row, int column) { |
||
231 | String expr = null; |
||
232 | if (value != null) |
||
233 | expr = (String) value;
|
||
234 | if (expr == null) |
||
235 | expr = "";
|
||
236 | // LabelExpressionParser.tokenFor(LabelExpressionParser.EOEXPR);
|
||
237 | |||
238 | // expr = expr.replaceAll(LabelExpressionParser.tokenFor(LabelExpressionParser.EOFIELD), " | ");
|
||
239 | // expr = expr.substring(0, expr.length()-1);
|
||
240 | return new JLabel("<html><p>"+expr+"</p></html>", JLabel.CENTER); |
||
241 | } |
||
242 | }); |
||
243 | |||
244 | // the editors
|
||
245 | |||
246 | for (int i = 0; i < tblClasses.getColumnModel().getColumnCount(); i++) { |
||
247 | if (i!= VISIBLE_FIELD_INDEX) {
|
||
248 | tblClasses.getColumnModel().getColumn(i).setCellEditor( |
||
249 | new LabelClassCellEditor(this.layer.getFeatureStore())); |
||
250 | } else {
|
||
251 | tblClasses.getColumnModel().getColumn(VISIBLE_FIELD_INDEX). |
||
252 | setCellEditor(new BooleanTableCellEditor(tblClasses));
|
||
253 | } |
||
254 | } |
||
255 | ((DefaultTableModel)tblClasses.getModel()).fireTableDataChanged();
|
||
256 | repaint(); |
||
257 | |||
258 | return tblClasses;
|
||
259 | } |
||
260 | |||
261 | 41670 | jjdelcerro | private class LabelClassCellEditor extends AbstractCellEditor implements TableCellEditor { |
262 | 40911 | jldominguez | |
263 | 41670 | jjdelcerro | private static final long serialVersionUID = 6399823783851437400L; |
264 | private FeatureStore fsto = null; |
||
265 | 40911 | jldominguez | |
266 | 41670 | jjdelcerro | public LabelClassCellEditor(FeatureStore store) {
|
267 | fsto = store; |
||
268 | } |
||
269 | 40911 | jldominguez | |
270 | 41670 | jjdelcerro | public Component getTableCellEditorComponent( |
271 | JTable table, Object value, boolean isSelected, int row, int column) { |
||
272 | 40911 | jldominguez | |
273 | 41670 | jjdelcerro | if (openEditor) {
|
274 | SymbologySwingManager manager = SymbologySwingLocator.getSwingManager(); |
||
275 | ILabelClass oldLc = (ILabelClass) tblClasses.getValueAt(row, PREVIEW_FIELD_INDEX); |
||
276 | oldLc.setVisible(Boolean.valueOf(tblClasses.getValueAt(row, VISIBLE_FIELD_INDEX).toString()));
|
||
277 | LabelClassEditor lcProp = manager.createLabelClassEditor(oldLc,fsto); |
||
278 | oldLc.setTexts(new String[]{oldLc.getName()}); |
||
279 | 40911 | jldominguez | |
280 | 41670 | jjdelcerro | lcProp.showDialog(); |
281 | if( !lcProp.isAccepted() ) {
|
||
282 | return null; |
||
283 | } |
||
284 | ILabelClass newLc = lcProp.getLabelClass(); |
||
285 | 40911 | jldominguez | |
286 | 41670 | jjdelcerro | LabelClassTableModel m = (LabelClassTableModel) tblClasses.getModel(); |
287 | Boolean changeDone = false; |
||
288 | 40911 | jldominguez | |
289 | 41670 | jjdelcerro | if (!(oldLc.getName().equals(newLc.getName()))) {
|
290 | if (!checSameLablClassName(m, newLc.getName())) {
|
||
291 | 40911 | jldominguez | |
292 | 41670 | jjdelcerro | m.setValueAt(newLc.getStringLabelExpression(), row, LABEL_EXPRESSION_FIELD_INDEX); |
293 | m.setValueAt(newLc.getName(), row, NAME_FIELD_INDEX); |
||
294 | m.setValueAt(newLc, row, PREVIEW_FIELD_INDEX); |
||
295 | m.setValueAt(newLc.getSQLQuery(), row, FILTER_FIELD_INDEX); |
||
296 | m.setValueAt(newLc.isVisible(), row, VISIBLE_FIELD_INDEX); |
||
297 | fireEditingStopped(); //Make the renderer reappear.
|
||
298 | changeDone = true;
|
||
299 | } else {
|
||
300 | JOptionPane.showMessageDialog(tblClasses,
|
||
301 | Messages.getText( |
||
302 | "cannot_exist_two_label_classes_with_the_same_name")
|
||
303 | + "\n",
|
||
304 | Messages.getText("error"),
|
||
305 | JOptionPane.ERROR_MESSAGE);
|
||
306 | changeDone = true;
|
||
307 | } |
||
308 | } |
||
309 | if (!changeDone) {
|
||
310 | m.setValueAt(newLc.getStringLabelExpression(), row, LABEL_EXPRESSION_FIELD_INDEX); |
||
311 | m.setValueAt(newLc.getName(), row, NAME_FIELD_INDEX); |
||
312 | m.setValueAt(newLc, row, PREVIEW_FIELD_INDEX); |
||
313 | m.setValueAt(newLc.getSQLQuery(), row, FILTER_FIELD_INDEX); |
||
314 | m.setValueAt(newLc.isVisible(), row, VISIBLE_FIELD_INDEX); |
||
315 | fireEditingStopped(); //Make the renderer reappear.
|
||
316 | changeDone = true;
|
||
317 | } |
||
318 | } |
||
319 | 40911 | jldominguez | |
320 | 41670 | jjdelcerro | method.clearAllClasses(); |
321 | ILabelClass[] classes = ((LabelClassTableModel) tblClasses.getModel()).toLabelClassArray();
|
||
322 | for (int i = 0; i < classes.length; i++) { |
||
323 | method.addLabelClass(classes[i]); |
||
324 | } |
||
325 | 40911 | jldominguez | |
326 | 41670 | jjdelcerro | openEditor = false;
|
327 | return null; |
||
328 | } |
||
329 | 40911 | jldominguez | |
330 | 41670 | jjdelcerro | public Object getCellEditorValue() { |
331 | return null; |
||
332 | } |
||
333 | |||
334 | } |
||
335 | |||
336 | |||
337 | 40911 | jldominguez | private boolean checSameLablClassName(LabelClassTableModel mod, String name) { |
338 | for (int i = 0; i < mod.getRowCount(); i++) { |
||
339 | if(name.equals(mod.getLabelAtRow(i).getName()))
|
||
340 | return true; |
||
341 | } |
||
342 | return false; |
||
343 | } |
||
344 | |||
345 | |||
346 | private class LabelClassTableModel extends DefaultTableModel { |
||
347 | 42981 | fdiaz | |
348 | 40911 | jldominguez | private static final long serialVersionUID = -9152998982339430209L; |
349 | Object[][] values; |
||
350 | |||
351 | private String[] classesTableFieldNames = new String[] { |
||
352 | Messages.getText("name"),
|
||
353 | Messages.getText("preview"),
|
||
354 | Messages.getText("filter"),
|
||
355 | Messages.getText("label_expression"),
|
||
356 | Messages.getText("visible"),
|
||
357 | }; |
||
358 | |||
359 | |||
360 | public LabelClassTableModel() {
|
||
361 | super();
|
||
362 | ILabelClass[] labelClasses = method.getLabelClasses();
|
||
363 | |||
364 | values = new Object[labelClasses.length][classesTableFieldNames.length]; |
||
365 | for (int i = 0; i < values.length; i++) { |
||
366 | values[i][PREVIEW_FIELD_INDEX] = labelClasses[i]; |
||
367 | values[i][NAME_FIELD_INDEX] = labelClasses[i].getName(); |
||
368 | values[i][FILTER_FIELD_INDEX] = labelClasses[i].getSQLQuery(); |
||
369 | values[i][LABEL_EXPRESSION_FIELD_INDEX] = labelClasses[i].getStringLabelExpression(); |
||
370 | values[i][VISIBLE_FIELD_INDEX] = labelClasses[i].isVisible(); |
||
371 | } |
||
372 | setDataVector(values, classesTableFieldNames); |
||
373 | } |
||
374 | |||
375 | public String getColumnName(int col) { |
||
376 | return classesTableFieldNames[col];
|
||
377 | } |
||
378 | |||
379 | public int getColumnCount() { |
||
380 | return classesTableFieldNames.length;
|
||
381 | } |
||
382 | |||
383 | @Override
|
||
384 | public boolean isCellEditable(int row, int column) { |
||
385 | return true; |
||
386 | } |
||
387 | |||
388 | public ILabelClass getLabelAtRow(int row) { |
||
389 | return (ILabelClass) getValueAt(row, PREVIEW_FIELD_INDEX);
|
||
390 | } |
||
391 | |||
392 | public ILabelClass[] toLabelClassArray() { |
||
393 | ILabelClass[] classes = new ILabelClass[getRowCount()]; |
||
394 | for (int i = 0; i < classes.length; i++) { |
||
395 | classes[i] = getLabelAtRow(i); |
||
396 | if (getChkDefinePriorities().isSelected()) {
|
||
397 | classes[i].setPriority(i); |
||
398 | } |
||
399 | } |
||
400 | return classes;
|
||
401 | } |
||
402 | |||
403 | public void setClassArray(ILabelClass[] classes) { |
||
404 | for (int i = 0; i < classes.length; i++) { |
||
405 | setValueAt(classes[i],i,PREVIEW_FIELD_INDEX); |
||
406 | setValueAt(classes[i].getName(),i,NAME_FIELD_INDEX); |
||
407 | setValueAt(classes[i].getSQLQuery(),i,FILTER_FIELD_INDEX); |
||
408 | setValueAt(classes[i].getStringLabelExpression(),i,LABEL_EXPRESSION_FIELD_INDEX); |
||
409 | setValueAt(classes[i].isVisible(),i,VISIBLE_FIELD_INDEX); |
||
410 | } |
||
411 | |||
412 | } |
||
413 | |||
414 | } |
||
415 | |||
416 | @Override
|
||
417 | protected void initializePanel() { |
||
418 | setLayout(new BorderLayout()); |
||
419 | 42981 | fdiaz | add(getPanel(),BorderLayout.CENTER);
|
420 | 40911 | jldominguez | } |
421 | |||
422 | 42981 | fdiaz | private JPanel getPanel() { |
423 | if (this.panel == null) { |
||
424 | this.panel = new JPanel(new BorderLayout()); |
||
425 | 40911 | jldominguez | |
426 | 42981 | fdiaz | GridLayout gl = new GridLayout(4, 1); |
427 | buttonPanel = new JPanel(gl); |
||
428 | buttonPanel.add(getBtnAddClass()); |
||
429 | buttonPanel.add(getBtnDelClass()); |
||
430 | // buttonPanel.addComponent(new JBlank(10, 10));
|
||
431 | buttonPanel.add(getBtnMoveUpClass()); |
||
432 | buttonPanel.add(getBtnMoveDownClass()); |
||
433 | |||
434 | JPanel auxp = new JPanel(); |
||
435 | auxp.add(buttonPanel); |
||
436 | |||
437 | this.panel.add(auxp, BorderLayout.EAST); |
||
438 | this.panel.add(getChkDefinePriorities(), BorderLayout.NORTH); |
||
439 | |||
440 | JPanel centro = new JPanel(new BorderLayout()); |
||
441 | centro.add(getLabelClassSelector(), BorderLayout.NORTH);
|
||
442 | centro.add(getCenterScrl(), BorderLayout.CENTER);
|
||
443 | panel.add(centro, BorderLayout.CENTER);
|
||
444 | |||
445 | } |
||
446 | return this.panel; |
||
447 | |||
448 | } |
||
449 | |||
450 | |||
451 | 41670 | jjdelcerro | private JPanel getLabelClassSelector() { |
452 | I18nManager i18nManager = ToolsLocator.getI18nManager(); |
||
453 | SymbologyManager symbologyMamanger = SymbologyLocator.getSymbologyManager(); |
||
454 | 42981 | fdiaz | |
455 | 41670 | jjdelcerro | JPanel panel = new JPanel(new BorderLayout()); |
456 | 42119 | mcompany | panel.add(new JLabel(i18nManager.getTranslation("_Label_type_to_use_XcolonX")), BorderLayout.WEST); |
457 | 42981 | fdiaz | |
458 | 41670 | jjdelcerro | DefaultComboBoxModel model = new DefaultComboBoxModel(); |
459 | Collection<ILabelClassFactory> factories = symbologyMamanger.getLabelClassFactories();
|
||
460 | for( ILabelClassFactory factory : factories ) {
|
||
461 | model.addElement(factory); |
||
462 | } |
||
463 | this.comboLabelClassFactoryToUse = new JComboBox(model); |
||
464 | panel.add(comboLabelClassFactoryToUse, BorderLayout.CENTER);
|
||
465 | if( model.getSize()>0 ) { |
||
466 | comboLabelClassFactoryToUse.setSelectedIndex(0);
|
||
467 | } |
||
468 | return panel;
|
||
469 | } |
||
470 | 42981 | fdiaz | |
471 | public void fillPanel(FeatureType fty) |
||
472 | 40911 | jldominguez | throws ReadException {
|
473 | 42981 | fdiaz | |
474 | 40911 | jldominguez | chkDefinePriorities.setSelected(this.method.definesPriorities());
|
475 | repaint(); |
||
476 | } |
||
477 | |||
478 | private void swapClass(int classIndex, int targetPos,int numOfElements) { |
||
479 | |||
480 | ILabelClass[] classes = ((LabelClassTableModel)tblClasses.getModel()).toLabelClassArray();
|
||
481 | ILabelClass aux = classes[targetPos]; |
||
482 | classes[targetPos] = classes[classIndex]; |
||
483 | classes[classIndex] = aux; |
||
484 | ((LabelClassTableModel)tblClasses.getModel()).setClassArray(classes); |
||
485 | } |
||
486 | |||
487 | 41670 | jjdelcerro | public void actionPerformed(ActionEvent e) { |
488 | if (method == null) { |
||
489 | return;
|
||
490 | } |
||
491 | 40911 | jldominguez | |
492 | 41670 | jjdelcerro | JComponent c = (JComponent) e.getSource(); |
493 | LabelClassTableModel mod = ((LabelClassTableModel) tblClasses.getModel()); |
||
494 | 40911 | jldominguez | |
495 | 41670 | jjdelcerro | if (c.equals(btnAddClass)) {
|
496 | ILabelClassFactory factory = (ILabelClassFactory) this.comboLabelClassFactoryToUse.getSelectedItem();
|
||
497 | if( factory == null ) { |
||
498 | logger.warn("Can't acces to the defaut selected labelclassfactory.");
|
||
499 | return;
|
||
500 | } |
||
501 | ILabelClass newClass = factory.create(); |
||
502 | 40911 | jldominguez | |
503 | 41670 | jjdelcerro | String name = Messages.getText("labeling") |
504 | + String.valueOf(1); |
||
505 | 40911 | jldominguez | |
506 | 41670 | jjdelcerro | int count = 0; |
507 | while (checSameLablClassName(mod, name)) {
|
||
508 | count++; |
||
509 | name = Messages.getText("labeling")
|
||
510 | + String.valueOf(count);
|
||
511 | } |
||
512 | newClass.setName(name); |
||
513 | mod.addRow(new Object[]{ |
||
514 | newClass.getName(), |
||
515 | newClass, |
||
516 | newClass.getSQLQuery(), |
||
517 | newClass.getStringLabelExpression(), |
||
518 | newClass.isVisible()}); |
||
519 | 40911 | jldominguez | |
520 | 41670 | jjdelcerro | } else if (c.equals(btnDelClass)) { |
521 | if (mod.getRowCount() >= 1) { |
||
522 | int[] sRows = tblClasses.getSelectedRows(); |
||
523 | 40911 | jldominguez | |
524 | 41670 | jjdelcerro | for (int i = sRows.length - 1; i >= 0; i--) { |
525 | mod.removeRow(sRows[i]); |
||
526 | } |
||
527 | } |
||
528 | } else if (c.equals(chkDefinePriorities)) { |
||
529 | 40911 | jldominguez | |
530 | 41670 | jjdelcerro | method.setDefinesPriorities(chkDefinePriorities.isSelected()); |
531 | 40911 | jldominguez | |
532 | 41670 | jjdelcerro | } else if (c.equals(chkLabel)) { |
533 | int[] sRows = tblClasses.getSelectedRows(); |
||
534 | for (int i = sRows.length - 1; i >= 0; i--) { |
||
535 | ILabelClass lc = mod.getLabelAtRow(i); |
||
536 | lc.setVisible(chkLabel.isSelected()); |
||
537 | } |
||
538 | 40911 | jldominguez | |
539 | 41670 | jjdelcerro | } else if (c.equals(btnMoveUpClass)) { |
540 | int[] indices = tblClasses.getSelectedRows(); |
||
541 | if (indices.length > 0) { |
||
542 | int classIndex = indices[0]; |
||
543 | int targetPos = Math.max(0, classIndex - 1); |
||
544 | swapClass(classIndex, targetPos, indices.length); |
||
545 | } |
||
546 | 40911 | jldominguez | |
547 | 41670 | jjdelcerro | } else if (c.equals(btnMoveDownClass)) { |
548 | int[] indices = tblClasses.getSelectedRows(); |
||
549 | if (indices.length > 0) { |
||
550 | int classIndex = indices[indices.length - 1]; |
||
551 | int targetPos = Math.min(tblClasses.getRowCount() - 1, classIndex + 1); |
||
552 | swapClass(classIndex, targetPos, indices.length); |
||
553 | } |
||
554 | 40911 | jldominguez | |
555 | 41670 | jjdelcerro | } else if (c.equals(btnDelClass)) { |
556 | int[] indices = tblClasses.getSelectedRows(); |
||
557 | if (indices.length > 0) { |
||
558 | int classIndex = indices[0]; |
||
559 | int targetPos = Math.min(tblClasses.getRowCount(), classIndex); |
||
560 | swapClass(classIndex, targetPos, indices.length); |
||
561 | } |
||
562 | } |
||
563 | 40911 | jldominguez | |
564 | 41670 | jjdelcerro | mod.fireTableDataChanged(); |
565 | method.clearAllClasses(); |
||
566 | ILabelClass[] classes = ((LabelClassTableModel) tblClasses.getModel()).toLabelClassArray();
|
||
567 | for (int i = 0; i < classes.length; i++) { |
||
568 | method.addLabelClass(classes[i]); |
||
569 | } |
||
570 | repaint(); |
||
571 | } |
||
572 | 42981 | fdiaz | |
573 | 40911 | jldominguez | public void propertyChange(PropertyChangeEvent evt) { |
574 | // TODO Auto-generated method stub
|
||
575 | |||
576 | } |
||
577 | |||
578 | public void setEnabled(boolean enabled) { |
||
579 | super.setEnabled(enabled);
|
||
580 | getBtnAddClass().setEnabled(enabled); |
||
581 | getBtnDelClass().setEnabled(enabled); |
||
582 | getBtnMoveDownClass().setEnabled(enabled); |
||
583 | getBtnMoveUpClass().setEnabled(enabled); |
||
584 | getChkDefinePriorities().setEnabled(enabled); |
||
585 | scrlPan.setEnabled(enabled); |
||
586 | tblClasses.setEnabled(enabled); |
||
587 | } |
||
588 | |||
589 | |||
590 | |||
591 | |||
592 | |||
593 | |||
594 | } |