Revision 202 org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.swing/org.gvsig.tools.swing.impl/src/main/java/org/gvsig/tools/swing/impl/dynobject/dynfield/JNDynFieldComponent.java

View differences:

JNDynFieldComponent.java
43 43
import java.util.List;
44 44

  
45 45
import javax.swing.BorderFactory;
46
import javax.swing.DefaultListModel;
47 46
import javax.swing.JButton;
48 47
import javax.swing.JList;
49 48
import javax.swing.JPanel;
......
56 55
import org.gvsig.tools.dynobject.DynField;
57 56
import org.gvsig.tools.service.ServiceException;
58 57
import org.gvsig.tools.swing.api.ToolsSwingLocator;
58
import org.gvsig.tools.swing.api.dynobject.ValueChangedListener;
59 59
import org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent;
60 60
import org.gvsig.tools.swing.api.dynobject.dynfield.ValueField;
61 61
import org.gvsig.tools.swing.spi.DelegatedJFieldComponent;
......
64 64
 * @author <a href="mailto:reinhold@uji.es">cmartin</a>
65 65
 *
66 66
 */
67
public class JNDynFieldComponent  extends DelegatedJFieldComponent implements JDynFieldComponent, ListSelectionListener {
67
public class JNDynFieldComponent  extends DelegatedJFieldComponent implements JDynFieldComponent, ListSelectionListener, ValueChangedListener {
68 68
    
69 69
    
70 70
    private static final int  MINIMUM_LIST_SIZE = 5;
71 71

  
72
    private static final Object UNKNOWN = "unknown";
73

  
72 74
    private JList list;
73 75

  
74 76
    private JButton sbutton;
......
96 98
     */
97 99
    public JNDynFieldComponent(ValueField parent, DynField dynField) {
98 100
	super(parent,dynField);
101
	this.addValueChangedListener(this);
99 102
    }
100 103

  
101 104
    private void addElement(Object element) {
102
	items.add(element);	
103
	this.list.setSelectedIndex(items.getModel().getSize()-1);
105
	Object[] values = this.getDynField().getElementsType().getAvailableValues();
106
	if (values!=null)
107
	    items.addElement(element, values[(Integer) element]);	
108
	else if (this.getDynField().getElementsType().getType()==DataTypes.BOOLEAN)
109
	    if (element == null)
110
		items.addElement(element, UNKNOWN);
111
	    else
112
		items.addElement(element, element);
113
	 else
114
		items.addElement(element, element);		    
115
	this.list.setSelectedIndex(items.getSize()-1);
104 116
    }
105 117
    
118
    private void setValue(Object element, int index) { 	
119
	Object[] values = this.getDynField().getElementsType().getAvailableValues();
120
	if (element instanceof Integer){
121
	    int ind = (Integer) element;
122
	    if ((values!=null)&&(ind>-1))
123
		items.setValue(index, element, values[(Integer) element]);	
124
	    else
125
		items.setValue(index, element, element);
126
	}else if (this.getDynField().getElementsType().getType()==DataTypes.BOOLEAN)
127
	    if (element == null)
128
		items.setValue(index, element, UNKNOWN);
129
	    else
130
		items.setValue(index, element, element);
131
	 else
132
		items.setValue(index, element, element);	
133
	this.list.setSelectedIndex(index);
134
    }
135
    
106 136
//    private void addElement(int index, Object item, boolean addItemToInnerList) {
107 137
//	addItem(index,item);
108 138
////	if (addItemToInnerList)
......
265 295
	c.gridy = 0;
266 296
	c.ipady = 0;
267 297
	c.weightx = 0.0;  // 0
268
	c.fill = GridBagConstraints.BASELINE;
298
	c.fill = GridBagConstraints.RELATIVE;
269 299
	c.anchor = GridBagConstraints.PAGE_START;
270 300
	subPanel.add(sbutton,c);
271 301

  
......
331 361
     * 
332 362
     */
333 363
    private void initJList() {
334
	this.list = new JList(this.items.getModel());
364
	this.list = new JList(this.items);
335 365
	this.list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
336 366
	this.list.addListSelectionListener(this);
337
	if (this.items.getModel().getSize()>0) 
367
	if (this.items.getSize()>0) 
338 368
	    this.list.setSelectedIndex(0);
339 369
    }
340 370

  
......
356 386
    public boolean isValid() {
357 387
	return this.component.isValid();
358 388
    }
359

  
389
    
360 390
    /**
361 391
     * 
362 392
     */
363 393
    private void populateItems(List items) {
364 394
	if (items == null)
365 395
	    return;
366
	Object element;
367
	for (int i = 0; i < items.size(); i++) {
368
	    element = items.get(i);
369
	    this.items.add(element);
370
	}
396
	else
397
	    this.items.setValue(items);
371 398
//	if (!items.isEmpty())
372 399
//	    this.list.setSelectedIndex(0);
373 400
    }
374 401

  
375 402
    public void refresh(){
376
	if ((items.getModel().isEmpty())||(list.getSelectedIndex()<0)){
403
	if ((items.isEmpty())||(list.getSelectedIndex()<0)){
377 404
	   this.sbutton.setEnabled(false);
378 405
	   this.component.requestFocus();
379 406
	}else
......
382 409

  
383 410
    private void removeElement(int ind) {
384 411
	
385
	if ((ind>=0)&&(ind<this.items.getModel().getSize()))
412
	if ((ind>=0)&&(ind<this.items.getSize()))
386 413
	removeItem(ind);
387 414
	
388
	if (items.getModel().getSize()<0)
415
	if (items.getSize()<0)
389 416
	    sbutton.setEnabled(false);
390 417
	else{
391 418
	    if (ind>0)
......
399 426
     */
400 427
    private void removeItem(int ind) {
401 428
//	model.removeElement(model.get(ind));
402
	this.items.removeItem(ind);
429
	this.items.removeElement(ind);
403 430
    }
404 431

  
405 432
    /* (non-Javadoc)
......
435 462
//	for (int i=0;i<this.model.size();i++){
436 463
//	    this.items.addItem(i,this.model.get(i));
437 464
//	}
438
	setFieldValue(this.items.toArray());
465
	setFieldValue(this.items);
439 466
    }
440 467

  
441 468

  
......
472 499
    @Override
473 500
    public void setValue(Object value) {
474 501
	if (value instanceof List){
475
	   populateItems((List) value);
502
	   this.items.setValue((List) value);
476 503
	}else{
477
	    this.list.setSelectedValue(value, true);		
504
	   this.list.setSelectedValue(value, true);		
478 505
	}
479

  
506
	this.fireValueChangedEvent();
480 507
    }
481 508

  
482 509

  
......
485 512
     */
486 513
    public void valueChanged(ListSelectionEvent e) {
487 514
	if (list.getSelectedIndex()>=0){
488
	    this.component.setValue(this.items.getModel().getElementAt(list.getSelectedIndex()));
515
	    this.component.setValue(this.items.getElementAt(list.getSelectedIndex()));
489 516
//	    this.list.setVisibleRowCount(model.getSize());
490 517
	    this.sbutton.setVisible(true);
491 518
//	    this.listScrollPane.setVisible(true);
492 519
	}else{
493
	    if (this.items.getModel().getSize()<1){
520
	    if (this.items.getSize()<1){
494 521
//		this.sbutton.setVisible(false);
495 522
//		this.listScrollPane.setVisible(false);
496 523
	    }else{
497
		int index =this.items.getModel().indexOf(this.items.getModel().firstElement());
524
		int index =this.items.indexOf(this.items.firstElement());
498 525
		if (index!=this.list.getSelectedIndex())
499 526
		    this.list.setSelectedIndex(index);
500 527
	    }
501 528
	}
502 529
	refresh();
503
	if (!isValid())
504
	    this.fireValueChangedEvent();
530
	this.fireValueChangedEvent();
505 531
    }
506 532

  
533
    /* (non-Javadoc)
534
     * @see org.gvsig.tools.swing.api.dynobject.ValueChangedListener#handleValueChanged(org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent)
535
     */
536
    public void handleValueChanged(JDynFieldComponent field) {
537
	Object value = field.getValue();
538
	int index = this.list.getSelectedIndex();
539
	if (index>-1){
540
	    setValue(value,index);
541
	}
542
    }
507 543

  
544

  
508 545
//    /* (non-Javadoc)
509 546
//     * @see org.gvsig.tools.swing.spi.DelegatedJFieldComponent#getDynField()
510 547
//     */

Also available in: Unified diff