Revision 9575 branches/v10/libraries/libUI/src/org/gvsig/gui/beans/filterPanel/filterQueryPanel/FilterQueryJPanel.java

View differences:

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