Revision 9575 branches/v10/libraries/libUI/src/org/gvsig/gui/beans/filterPanel/filterQueryPanel/FilterQueryJPanel.java
FilterQueryJPanel.java | ||
---|---|---|
1 | 1 |
package org.gvsig.gui.beans.filterPanel.filterQueryPanel; |
2 | 2 |
|
3 |
import java.awt.Color; |
|
3 | 4 |
import java.awt.Dimension; |
4 | 5 |
import java.awt.GridBagConstraints; |
5 | 6 |
import java.awt.GridBagLayout; |
6 | 7 |
import java.io.Serializable; |
7 | 8 |
|
8 | 9 |
import javax.swing.BorderFactory; |
10 |
import javax.swing.DefaultListModel; |
|
11 |
import javax.swing.JLabel; |
|
9 | 12 |
import javax.swing.JPanel; |
10 | 13 |
import javax.swing.JScrollPane; |
11 | 14 |
|
12 | 15 |
import org.gvsig.gui.beans.Messages; |
13 | 16 |
import org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel; |
17 |
import org.gvsig.gui.beans.filterPanel.JLabelCellRenderer; |
|
14 | 18 |
|
15 | 19 |
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana |
16 | 20 |
* |
... | ... | |
88 | 92 |
protected void initialize() { |
89 | 93 |
super.initialize(); |
90 | 94 |
this.setBorder(BorderFactory.createTitledBorder(Messages.getText("filterOnAWFSLayer"))); |
95 |
getValuesJList().setCellRenderer(new JLabelCellRenderer()); |
|
91 | 96 |
} |
92 | 97 |
|
93 | 98 |
/* |
... | ... | |
109 | 114 |
} |
110 | 115 |
|
111 | 116 |
return fieldsJPanel; |
117 |
} |
|
118 |
|
|
119 |
/** |
|
120 |
* @see AbstractFilterQueryJPanel#getValuesJList() |
|
121 |
*/ |
|
122 |
protected javax.swing.JList getValuesJList() { |
|
123 |
if (valuesJList == null) { |
|
124 |
valuesJList = new javax.swing.JList(new DefaultListModel()); |
|
125 |
valuesListModel = new DefaultListModelForJLabelAsCell(); |
|
126 |
valuesJList.setModel(valuesListModel); |
|
127 |
valuesJList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); |
|
128 |
|
|
129 |
// valuesJList.addMouseListener(new MouseAdapter() { |
|
130 |
// /* |
|
131 |
// * (non-Javadoc) |
|
132 |
// * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent) |
|
133 |
// */ |
|
134 |
// public void mouseClicked(MouseEvent e) { |
|
135 |
// if (e.getClickCount() == 2) { |
|
136 |
// int row = fieldsJTree.getRowForLocation(e.getX(), e.getY()); |
|
137 |
// |
|
138 |
// if (row > -1) { |
|
139 |
// putSymbol(((DefaultListModel)valuesJList.getModel()).get(row).toString()); |
|
140 |
// } |
|
141 |
// } |
|
142 |
// } |
|
143 |
// }); |
|
144 |
} |
|
145 |
|
|
146 |
return valuesJList; |
|
112 | 147 |
} |
113 | 148 |
|
114 |
/** |
|
115 |
* This method initializes jScrollPane |
|
116 |
* |
|
117 |
* @return javax.swing.JScrollPane |
|
149 |
/* |
|
150 |
* (non-Javadoc) |
|
151 |
* @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getFieldsJScrollPane() |
|
118 | 152 |
*/ |
119 | 153 |
protected javax.swing.JScrollPane getFieldsJScrollPane() { |
120 | 154 |
if (fieldsJScrollPane == null) { |
... | ... | |
147 | 181 |
return valuesJPanel; |
148 | 182 |
} |
149 | 183 |
|
150 |
/** |
|
151 |
* This method initializes jScrollPane1 |
|
152 |
* |
|
153 |
* @return javax.swing.JScrollPane |
|
184 |
/* |
|
185 |
* (non-Javadoc) |
|
186 |
* @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getValuesJScrollPane() |
|
154 | 187 |
*/ |
155 | 188 |
protected javax.swing.JScrollPane getValuesJScrollPane() { |
156 | 189 |
if (valuesJScrollPane == null) { |
... | ... | |
177 | 210 |
return filterJScrollPane; |
178 | 211 |
} |
179 | 212 |
|
180 |
/** |
|
181 |
* This method initializes txtExpression |
|
182 |
* |
|
183 |
* @return javax.swing.JTextArea |
|
213 |
/* |
|
214 |
* (non-Javadoc) |
|
215 |
* @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#getTxtExpression() |
|
184 | 216 |
*/ |
185 | 217 |
protected javax.swing.JTextArea getTxtExpression() { |
186 | 218 |
if (txtExpression == null) { |
... | ... | |
214 | 246 |
|
215 | 247 |
if (difference != 0) { |
216 | 248 |
this.setPreferredSize(new Dimension(this.getPreferredSize().width + difference, this.getPreferredSize().height)); |
217 |
topJPanel.setPreferredSize(new Dimension(topJPanel.getPreferredSize().width + difference, topJPanel.getPreferredSize().height));
|
|
218 |
bottomJPanel.setPreferredSize(new Dimension(bottomJPanel.getPreferredSize().width + difference, bottomJPanel.getPreferredSize().height));
|
|
219 |
filterJScrollPane.setPreferredSize(new Dimension(filterJScrollPane.getPreferredSize().width + difference, filterJScrollPane.getPreferredSize().height));
|
|
249 |
getTopJPanel().setPreferredSize(new Dimension(getTopJPanel().getPreferredSize().width + difference, getTopJPanel().getPreferredSize().height));
|
|
250 |
getBottomJPanel().setPreferredSize(new Dimension(getBottomJPanel().getPreferredSize().width + difference, getBottomJPanel().getPreferredSize().height));
|
|
251 |
getFilterJScrollPane().setPreferredSize(new Dimension(getFilterJScrollPane().getPreferredSize().width + difference, getFilterJScrollPane().getPreferredSize().height));
|
|
220 | 252 |
|
221 | 253 |
int halfDifference = difference / 2; |
222 | 254 |
|
223 |
fieldsJPanel.setPreferredSize(new Dimension(fieldsJPanel.getPreferredSize().width + halfDifference, fieldsJPanel.getPreferredSize().height)); |
|
224 |
fieldsJScrollPane.setPreferredSize(new Dimension(fieldsJScrollPane.getPreferredSize().width + halfDifference, fieldsJScrollPane.getPreferredSize().height)); |
|
255 |
getFieldsJLabel().setPreferredSize(new Dimension(getFieldsJLabel().getPreferredSize().width + halfDifference, getFieldsJLabel().getPreferredSize().height)); |
|
256 |
getFieldsJPanel().setPreferredSize(new Dimension(getFieldsJPanel().getPreferredSize().width + halfDifference, getFieldsJPanel().getPreferredSize().height)); |
|
257 |
getFieldsJScrollPane().setPreferredSize(new Dimension(getFieldsJScrollPane().getPreferredSize().width + halfDifference, getFieldsJScrollPane().getPreferredSize().height)); |
|
225 | 258 |
|
226 |
valuesJPanel.setPreferredSize(new Dimension(valuesJPanel.getPreferredSize().width + halfDifference, valuesJPanel.getPreferredSize().height)); |
|
227 |
valuesJScrollPane.setPreferredSize(new Dimension(valuesJScrollPane.getPreferredSize().width + halfDifference, valuesJScrollPane.getPreferredSize().height)); |
|
259 |
getValuesJLabel().setPreferredSize(new Dimension(getValuesJLabel().getPreferredSize().width + halfDifference, getValuesJLabel().getPreferredSize().height)); |
|
260 |
getValuesJPanel().setPreferredSize(new Dimension(getValuesJPanel().getPreferredSize().width + halfDifference, getValuesJPanel().getPreferredSize().height)); |
|
261 |
getValuesJScrollPane().setPreferredSize(new Dimension(getValuesJScrollPane().getPreferredSize().width + halfDifference, getValuesJScrollPane().getPreferredSize().height)); |
|
228 | 262 |
} |
229 | 263 |
} |
264 |
|
|
265 |
/** |
|
266 |
* Extension of JLabel that has some specific characteristics -> Version for values that are loaded in layer in view |
|
267 |
* |
|
268 |
* @author Pablo Piqueras Bartolom? (p_queras@hotmail.com) |
|
269 |
*/ |
|
270 |
protected final class JLabelValueLoaded extends JLabel implements Comparable { |
|
271 |
|
|
272 |
/** |
|
273 |
* Default constructor without parameters |
|
274 |
*/ |
|
275 |
public JLabelValueLoaded() { |
|
276 |
super(); |
|
277 |
this.configure(); |
|
278 |
} |
|
279 |
|
|
280 |
/** |
|
281 |
* Default constructor with a parameter |
|
282 |
* |
|
283 |
* @param text |
|
284 |
*/ |
|
285 |
public JLabelValueLoaded(String text) { |
|
286 |
super(text); |
|
287 |
this.configure(); |
|
288 |
} |
|
289 |
|
|
290 |
/** |
|
291 |
* Configures some characteristics |
|
292 |
*/ |
|
293 |
private void configure() { |
|
294 |
this.setBackground(Color.yellow); |
|
295 |
this.setForeground(Color.blue); |
|
296 |
} |
|
297 |
|
|
298 |
/* |
|
299 |
* (non-Javadoc) |
|
300 |
* @see java.lang.Comparable#compareTo(java.lang.Object) |
|
301 |
*/ |
|
302 |
public int compareTo(Object o) { |
|
303 |
// It's supposed that 'o' is an string |
|
304 |
return this.getText().compareTo(o); |
|
305 |
} |
|
306 |
|
|
307 |
/* |
|
308 |
* (non-Javadoc) |
|
309 |
* @see java.lang.Object#toString() |
|
310 |
*/ |
|
311 |
public String toString() { |
|
312 |
return this.getText(); |
|
313 |
} |
|
314 |
} |
|
315 |
|
|
316 |
/** |
|
317 |
* Extension of JLabel that has some specific characteristics -> Version for values that aren't loaded in layer in view |
|
318 |
* |
|
319 |
* @author Pablo Piqueras Bartolom? (p_queras@hotmail.com) |
|
320 |
*/ |
|
321 |
protected final class JLabelValueNotLoaded extends JLabel implements Comparable{ |
|
322 |
|
|
323 |
/** |
|
324 |
* Default constructor without parameters |
|
325 |
*/ |
|
326 |
public JLabelValueNotLoaded() { |
|
327 |
super(); |
|
328 |
this.configure(); |
|
329 |
} |
|
330 |
|
|
331 |
/** |
|
332 |
* Default constructor with a parameter |
|
333 |
* |
|
334 |
* @param text |
|
335 |
*/ |
|
336 |
public JLabelValueNotLoaded(String text) { |
|
337 |
super(text); |
|
338 |
this.configure(); |
|
339 |
} |
|
340 |
|
|
341 |
/** |
|
342 |
* Configures some characteristics |
|
343 |
*/ |
|
344 |
private void configure() { |
|
345 |
this.setBackground(Color.white); |
|
346 |
} |
|
347 |
|
|
348 |
/* |
|
349 |
* (non-Javadoc) |
|
350 |
* @see java.lang.Comparable#compareTo(java.lang.Object) |
|
351 |
*/ |
|
352 |
public int compareTo(Object o) { |
|
353 |
// It's supposed that 'o' is an string |
|
354 |
return this.getText().compareTo(o); |
|
355 |
} |
|
356 |
|
|
357 |
/* |
|
358 |
* (non-Javadoc) |
|
359 |
* @see java.lang.Object#toString() |
|
360 |
*/ |
|
361 |
public String toString() { |
|
362 |
return this.getText(); |
|
363 |
} |
|
364 |
} |
|
365 |
|
|
366 |
/** |
|
367 |
* This class reimplements the "contains()" method of "DefaultListModel" for |
|
368 |
* |
|
369 |
* @author Pablo Piqueras Bartolom? (p_queras@hotmail.com) |
|
370 |
* |
|
371 |
*/ |
|
372 |
protected final class DefaultListModelForJLabelAsCell extends DefaultListModel{ |
|
373 |
|
|
374 |
/** |
|
375 |
* Represents the start index of the group of not loaded values (that should be after the group of loaded values) |
|
376 |
* -2 -> if elements aren't grouped (in two lists: first for loaded, after for not loaded) |
|
377 |
* -1 -> if there isn't elements |
|
378 |
* 0 -> if there are only not loaded elements |
|
379 |
* = (capacity() -1) -> if there are only loaded elements |
|
380 |
*/ |
|
381 |
private int startIndexOfNotLoadedValues; |
|
382 |
|
|
383 |
/** |
|
384 |
* Default constructor without parameters |
|
385 |
*/ |
|
386 |
public DefaultListModelForJLabelAsCell() { |
|
387 |
super(); |
|
388 |
startIndexOfNotLoadedValues = -1; |
|
389 |
} |
|
390 |
|
|
391 |
/** |
|
392 |
* Method that returns true if there is a inner JLabel that has as inner text the same text as 'patternText' |
|
393 |
* |
|
394 |
* @param patternText |
|
395 |
* @return A boolean value |
|
396 |
*/ |
|
397 |
public boolean containsJLabelText(String patternText) { |
|
398 |
for (int i = 0; i < super.getSize(); i++) { |
|
399 |
if (((JLabel)super.get(i)).getText().compareTo(patternText) == 0) |
|
400 |
return true; |
|
401 |
} |
|
402 |
|
|
403 |
return false; |
|
404 |
} |
|
405 |
|
|
406 |
/** |
|
407 |
* Returns the position of first JLabel that has as text the same text as 'patternText', or -1 if no JLabel has that text |
|
408 |
* |
|
409 |
* @param patternText An String |
|
410 |
* @return An integer value |
|
411 |
*/ |
|
412 |
public int getIndexOfJLabelText(String patternText) { |
|
413 |
for (int i = 0; i < super.getSize(); i++) { |
|
414 |
if (((JLabel)super.get(i)).getText().compareTo(patternText) == 0) |
|
415 |
return i; |
|
416 |
} |
|
417 |
|
|
418 |
return -1; // If not found |
|
419 |
} |
|
420 |
|
|
421 |
/** |
|
422 |
* Changes element to |
|
423 |
* |
|
424 |
* @param patternText |
|
425 |
*/ |
|
426 |
public void changeElementThatHasTextToJLabelLoadedValue(String patternText) { |
|
427 |
int index = getIndexOfJLabelText(patternText); |
|
428 |
|
|
429 |
if (index != -1) |
|
430 |
super.set(index, new JLabelValueLoaded(patternText)); |
|
431 |
} |
|
432 |
|
|
433 |
/** |
|
434 |
* Sets all elements to 'JLabelValueNotLoaded' |
|
435 |
*/ |
|
436 |
public void setAllElementsToNotLoaded() { |
|
437 |
if (startIndexOfNotLoadedValues == -1) { |
|
438 |
for (int i = 0; i < super.getSize(); i++) { |
|
439 |
if (super.get(i) instanceof JLabelValueLoaded) { |
|
440 |
JLabelValueNotLoaded jL = new JLabelValueNotLoaded(((JLabelValueLoaded)super.get(i)).getText()); |
|
441 |
super.remove(i); |
|
442 |
super.add(i, jL);///// REIMPLEMENTATION OF SOME METHODS OF 'DefaultListModel' ///// |
|
443 |
} |
|
444 |
} |
|
445 |
} |
|
446 |
else { |
|
447 |
for (int i = 0; i < startIndexOfNotLoadedValues; i++) { |
|
448 |
if (super.get(i) instanceof JLabelValueLoaded) { |
|
449 |
JLabelValueNotLoaded jL = new JLabelValueNotLoaded(((JLabelValueLoaded)super.get(i)).getText()); |
|
450 |
super.set(i, jL); // replacement |
|
451 |
} |
|
452 |
} |
|
453 |
} |
|
454 |
|
|
455 |
startIndexOfNotLoadedValues = 0; |
|
456 |
} |
|
457 |
|
|
458 |
///// REIMPLEMENTATION OF SOME METHODS OF 'DefaultListModel' ///// |
|
459 |
|
|
460 |
/* |
|
461 |
* (non-Javadoc) |
|
462 |
* @see javax.swing.DefaultListModel#clear() |
|
463 |
*/ |
|
464 |
public void clear() { |
|
465 |
super.clear(); |
|
466 |
startIndexOfNotLoadedValues = -1; |
|
467 |
} |
|
468 |
|
|
469 |
/* |
|
470 |
* (non-Javadoc) |
|
471 |
* @see javax.swing.DefaultListModel#insertElementAt(java.lang.Object, int) |
|
472 |
*/ |
|
473 |
public void insertElementAt(Object obj, int index) { |
|
474 |
super.insertElementAt(obj, index); |
|
475 |
|
|
476 |
if ((obj instanceof JLabelValueNotLoaded) && (index > -1) && (index < startIndexOfNotLoadedValues)) |
|
477 |
startIndexOfNotLoadedValues = index; |
|
478 |
} |
|
479 |
|
|
480 |
/* |
|
481 |
* (non-Javadoc) |
|
482 |
* @see javax.swing.DefaultListModel#remove(int) |
|
483 |
*/ |
|
484 |
public Object remove(int index) { |
|
485 |
if ( (index > -1) && (index == startIndexOfNotLoadedValues) && (index == (super.capacity() -1)) ) { |
|
486 |
startIndexOfNotLoadedValues = -1; |
|
487 |
} |
|
488 |
|
|
489 |
return super.remove(index); |
|
490 |
} |
|
491 |
|
|
492 |
/* |
|
493 |
* (non-Javadoc) |
|
494 |
* @see javax.swing.DefaultListModel#removeAllElements() |
|
495 |
*/ |
|
496 |
public void removeAllElements() { |
|
497 |
super.removeAllElements(); |
|
498 |
startIndexOfNotLoadedValues = -1; |
|
499 |
} |
|
500 |
|
|
501 |
/* |
|
502 |
* (non-Javadoc) |
|
503 |
* @see javax.swing.DefaultListModel#removeElement(java.lang.Object) |
|
504 |
*/ |
|
505 |
public boolean removeElement(Object obj) { |
|
506 |
int index = super.indexOf(obj); |
|
507 |
|
|
508 |
if ( (index > -1) && (index == startIndexOfNotLoadedValues) && (index == (super.capacity() -1)) ) { |
|
509 |
startIndexOfNotLoadedValues = -1; |
|
510 |
} |
|
511 |
|
|
512 |
return super.removeElement(obj); |
|
513 |
} |
|
514 |
|
|
515 |
/* |
|
516 |
* (non-Javadoc) |
|
517 |
* @see javax.swing.DefaultListModel#removeElementAt(int) |
|
518 |
*/ |
|
519 |
public void removeElementAt(int index) { |
|
520 |
if ( (index > -1) && (index == startIndexOfNotLoadedValues) && (index == (super.capacity() -1)) ) { |
|
521 |
startIndexOfNotLoadedValues = -1; |
|
522 |
} |
|
523 |
|
|
524 |
super.removeElementAt(index); |
|
525 |
} |
|
526 |
|
|
527 |
/* |
|
528 |
* (non-Javadoc) |
|
529 |
* @see javax.swing.DefaultListModel#removeRange(int, int) |
|
530 |
*/ |
|
531 |
public void removeRange(int fromIndex, int toIndex) { |
|
532 |
super.removeRange(fromIndex, toIndex); |
|
533 |
|
|
534 |
// Try to find any element of type 'JLabelNotLoadedValue' |
|
535 |
for (int i = 0; i < super.capacity(); i++) { |
|
536 |
if (super.get(i) instanceof JLabelValueNotLoaded) { |
|
537 |
if ( ( (i == (super.capacity() -1) || (i < (super.capacity() -1)) && (super.get(super.capacity() -1) instanceof JLabelValueNotLoaded) ) ) ) |
|
538 |
startIndexOfNotLoadedValues = i; |
|
539 |
else |
|
540 |
startIndexOfNotLoadedValues = -1; |
|
541 |
} |
|
542 |
} |
|
543 |
} |
|
544 |
|
|
545 |
/* |
|
546 |
* (non-Javadoc) |
|
547 |
* @see javax.swing.DefaultListModel#set(int, java.lang.Object) |
|
548 |
*/ |
|
549 |
public Object set(int index, Object element) { |
|
550 |
if ((element instanceof JLabelValueNotLoaded) && (index > -1) && (index < startIndexOfNotLoadedValues)) |
|
551 |
startIndexOfNotLoadedValues = index; |
|
552 |
|
|
553 |
return super.set(index, element); |
|
554 |
} |
|
555 |
|
|
556 |
/* |
|
557 |
* (non-Javadoc) |
|
558 |
* @see javax.swing.DefaultListModel#setElementAt(java.lang.Object, int) |
|
559 |
*/ |
|
560 |
public void setElementAt(Object obj, int index) { |
|
561 |
super.setElementAt(obj, index); |
|
562 |
|
|
563 |
if ((obj instanceof JLabelValueNotLoaded) && (index > -1) && (index < startIndexOfNotLoadedValues)) |
|
564 |
startIndexOfNotLoadedValues = index; |
|
565 |
} |
|
566 |
|
|
567 |
///// END REIMPLEMENTATION OF SOME METHODS OF 'DefaultListModel' ///// |
|
568 |
} |
|
230 | 569 |
} |
Also available in: Unified diff