Revision 2537

View differences:

org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.dynform/org.gvsig.tools.dynform.spi/src/main/java/org/gvsig/tools/dynform/spi/dynformfield/AbstractJDynFormField.java
482 482

  
483 483
    @Override
484 484
    public void fetch(DynObject container) {
485
        if( this.isReadOnly() ) {
486
            return;
487
        }
485
//        if( this.isReadOnly() ) {
486
//            return;
487
//        }
488 488
        Object value = this.getValue();
489 489
        DynClass dynclass = container.getDynClass();
490 490
        if( dynclass!=null ) {
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.dynform/org.gvsig.tools.dynform.spi/src/main/java/org/gvsig/tools/dynform/spi/dynformfield/AbstractJDynFormFieldWithValueList.java
23 23
 */
24 24
package org.gvsig.tools.dynform.spi.dynformfield;
25 25

  
26
import java.awt.event.ActionEvent;
27
import java.awt.event.ActionListener;
26 28
import java.awt.event.FocusListener;
27 29
import java.awt.event.ItemEvent;
28 30
import java.awt.event.KeyAdapter;
......
52 54
import org.gvsig.tools.dynform.spi.DynFormSPIManager.ComponentsFactory;
53 55
import static org.gvsig.tools.dynform.spi.DynFormSPIManager.TAG_DYNFORM_DROPDOWN;
54 56
import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormField.IllegalFieldValue;
57
import org.gvsig.tools.dynobject.DynField;
55 58
import org.gvsig.tools.dynobject.DynField_v2;
56 59
import org.gvsig.tools.dynobject.DynObject;
57 60
import org.gvsig.tools.dynobject.DynObjectValueItem;
......
104 107
            return null;
105 108
        }
106 109
        if(  theDefinition instanceof DynField_v2 ) {
107
            if( theDefinition.getAvailableValuesMethod()!=null ) {
108
                DynObject item = this.getForm().getDefinition().createElement();
109
                this.getForm().getValues(item);
110
                return theDefinition.getAvailableValues(item);
110
            DynObject context = this.getForm().getDefinition().createElement();
111
            DynField[] fields = context.getDynClass().getDynFields();
112
            for (DynField field : fields) {
113
                String name = field.getName();
114
                JDynFormField jfield = (JDynFormField) this.getForm().getField(name);
115
                if (jfield != null ) {
116
                    try {
117
                        jfield.fetch(context);
118
                    } catch (Exception ex) {
119
                        LOGGER.warn("Can't get value of field '" + name + "'.", ex);
120
                    }
121
                }
111 122
            }
123
            return theDefinition.getAvailableValues(context);
112 124
        }
113 125
        return theDefinition.getAvailableValues();
114 126
    }
......
116 128
    @Override
117 129
    public void initComponent() {
118 130
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
119
        DynObjectValueItem[] availableValues = this.getAvailableValues();
120 131
        ComponentsFactory theFactory = this.getComponentsFactory();
121 132
        if (theFactory.containsJComboBox(this.getDefinition(), null)) {
122 133
            JComboBox combo = this.getComponentsFactory().getJComboBox(this.getDefinition(), null);
123 134
            this.dropDown = ToolsSwingLocator.getToolsSwingManager().createDropDown(combo);
124
            this.dropDown.setModel(new DefaultComboBoxModel(availableValues));
135
            if( this.getDefinition().isAvailableValuesCalculated() ) {
136
                this.dropDown.addDropdownListener((ActionEvent e) -> {
137
                    dropDown.setModel(new DefaultComboBoxModel(this.getAvailableValues()));
138
                });
139
            } else {
140
                this.dropDown.setModel(new DefaultComboBoxModel(this.getAvailableValues()));
141
            }
125 142
            this.contents = combo;
126 143
            this.fixPreferredWidth(this.contents);
127 144
            this.dropDown.addItemListener((ItemEvent e) -> {
......
133 150
        } else if (theFactory.containsJLabel(this.getDefinition(), "Ddn")) {
134 151
            JLabel label = this.getComponentsFactory().getJLabel(this.getDefinition(), "Ddn");
135 152
            this.dropDown = ToolsSwingLocator.getToolsSwingManager().createDropDown(label);
136
            this.dropDown.setModel(new DefaultComboBoxModel(availableValues));
153
            if( this.getDefinition().isAvailableValuesCalculated() ) {
154
                this.dropDown.addDropdownListener((ActionEvent e) -> {
155
                    dropDown.setModel(new DefaultComboBoxModel(this.getAvailableValues()));
156
                });
157
            } else {
158
                this.dropDown.setModel(new DefaultComboBoxModel(this.getAvailableValues()));
159
            }
137 160
            this.dropDown.setVisibleDropdownArrow(true);
138 161
            this.contents = label;
139 162
            this.fixPreferredWidth(this.contents);
......
181 204
                }
182 205
            });
183 206
        } else {
207
            DynObjectValueItem[] availableValues = this.getAvailableValues();
184 208
            if (availableValues == null) {
185 209
                this.dropDown = null;
186 210
                JTextComponent text = this.getComponentsFactory().getJTextField(this.getDefinition(), null);
......
211 235
                    case "label": {
212 236
                        JLabel label = this.getComponentsFactory().getJLabel(this.getDefinition(), "Ddn");
213 237
                        this.dropDown = ToolsSwingLocator.getToolsSwingManager().createDropDown(label);
214
                        this.dropDown.setModel(new DefaultComboBoxModel(availableValues));
238
                        this.dropDown.setModel(new DefaultComboBoxModel(this.getAvailableValues()));
239
                        if( this.getDefinition().isAvailableValuesCalculated() ) {
240
                            this.dropDown.addDropdownListener((ActionEvent e) -> {
241
                                dropDown.setModel(new DefaultComboBoxModel(this.getAvailableValues()));
242
                            });
243
                        }
215 244
                        this.dropDown.setVisibleDropdownArrow(true);
216 245
                        label.setBorder(BorderFactory.createLineBorder(UIManager.getColor("TextField.darkShadow")));
217 246
                        label.setForeground(UIManager.getColor("TextField.foreground"));
......
225 254
                    case "combo": {
226 255
                        JComboBox combo = this.getComponentsFactory().getJComboBox(this.getDefinition(), null);
227 256
                        this.dropDown = ToolsSwingLocator.getToolsSwingManager().createDropDown(combo);
228
                        this.dropDown.setModel(new DefaultComboBoxModel(availableValues));
257
                        this.dropDown.setModel(new DefaultComboBoxModel(this.getAvailableValues()));
258
                        if( this.getDefinition().isAvailableValuesCalculated() ) {
259
                            this.dropDown.addDropdownListener((ActionEvent e) -> {
260
                                dropDown.setModel(new DefaultComboBoxModel(this.getAvailableValues()));
261
                            });
262
                        }
229 263
                        this.contents = combo;
230 264
                        this.fixPreferredWidth(this.contents);
231 265
                        break;
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.dynform/org.gvsig.tools.dynform.impl/src/main/java/org/gvsig/tools/dynform/impl/DefaultDynFormLibrary.java
24 24
package org.gvsig.tools.dynform.impl;
25 25

  
26 26

  
27
import java.net.URL;
27 28
import org.gvsig.tools.ToolsLocator;
28 29
import org.gvsig.tools.dynform.DynFormLibrary;
29 30
import org.gvsig.tools.dynform.DynFormLocator;
30 31
import org.gvsig.tools.dynform.spi.DynFormSPILocator;
31
import org.gvsig.tools.dynform.spi.DynFormSPIManager;
32 32
import static org.gvsig.tools.dynform.spi.DynFormSPIManager.TAG_DYNFORM_ACTION_CLOSE;
33 33
import static org.gvsig.tools.dynform.spi.DynFormSPIManager.TAG_DYNFORM_ACTION_DELETE;
34 34
import static org.gvsig.tools.dynform.spi.DynFormSPIManager.TAG_DYNFORM_ACTION_NEW;
......
50 50
import org.gvsig.tools.dynobject.DynObjectManager;
51 51
import org.gvsig.tools.library.AbstractLibrary;
52 52
import org.gvsig.tools.library.LibraryException;
53
import org.gvsig.tools.swing.api.ToolsSwingLocator;
54
import org.gvsig.tools.swing.icontheme.IconTheme;
53 55

  
54 56
public class DefaultDynFormLibrary extends AbstractLibrary {
57
        public static final String ICON_PROVIDER_NAME = "DynForm";
55 58

  
59
        public static final String ICON_COMMON_GROUP_NAME = "Common";
60

  
61
        @Override
56 62
	public void doRegistration() {
57 63
		super.doRegistration();
58 64
		registerAsImplementationOf(DynFormLibrary.class);
59 65
	}
60 66
	
67
        @Override
61 68
	protected void doInitialize() throws LibraryException {
62 69
		DynFormLocator.registerDefaultDynFormManager(DefaultDynFormManager.class);
63 70
		DynFormSPILocator.registerDefaultDynFormSPIManager(DefaultDynFormSPIManager.class);
......
81 88
            dynObjectManager.registerTag(TAG_DYNFORM_SEPARATOR, "String value to add a separator previos this field with this.");
82 89
            dynObjectManager.registerTag(TAG_DYNFORM_DROPDOWN, "String value to force the type of dropdown to use, must be 'label' or 'combo'.");
83 90
            dynObjectManager.registerTag(TAG_DYNFORM_RESIZEWEIGHT, "Integer value between 0 and 100 indicating what the field should expand. A value of 0 indicates that it should not be expanded.");
91

  
84 92
        }
85

  
93
        
94
        
95
        @Override
86 96
	protected void doPostInitialize() throws LibraryException {
87

  
97
            String[][] iconsInfo = new String[][]{
98
                new String[]{ICON_PROVIDER_NAME, ICON_COMMON_GROUP_NAME, "form-buttonbar-cancelnew"},
99
                new String[]{ICON_PROVIDER_NAME, ICON_COMMON_GROUP_NAME, "form-buttonbar-close"},
100
                new String[]{ICON_PROVIDER_NAME, ICON_COMMON_GROUP_NAME, "form-buttonbar-delete"},
101
                new String[]{ICON_PROVIDER_NAME, ICON_COMMON_GROUP_NAME, "form-buttonbar-first"},
102
                new String[]{ICON_PROVIDER_NAME, ICON_COMMON_GROUP_NAME, "form-buttonbar-last"},
103
                new String[]{ICON_PROVIDER_NAME, ICON_COMMON_GROUP_NAME, "form-buttonbar-new"},
104
                new String[]{ICON_PROVIDER_NAME, ICON_COMMON_GROUP_NAME, "form-buttonbar-next"},
105
                new String[]{ICON_PROVIDER_NAME, ICON_COMMON_GROUP_NAME, "form-buttonbar-previous"},
106
                new String[]{ICON_PROVIDER_NAME, ICON_COMMON_GROUP_NAME, "form-buttonbar-save"},
107
                new String[]{ICON_PROVIDER_NAME, ICON_COMMON_GROUP_NAME, "form-problem-indicator"},
108
                new String[]{ICON_PROVIDER_NAME, ICON_COMMON_GROUP_NAME, "form-buttonbar-search"}
109
            };
110
            registerIcons(iconsInfo);
88 111
	}
89 112

  
113
    public static void registerIcons(String[][] iconsInfo) {
114
        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
115
        for (String[] icon : iconsInfo) {
116
            // 0 - Provider, 1 - Group, 2 - Name
117
            URL url = DefaultDynFormLibrary.class.getResource("images/"+ icon[2] + ".png");
118
            theme.registerDefault(icon[0], icon[1], icon[2], null, url);
119
        }
120
    }        
90 121
}
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.dynform/org.gvsig.tools.dynform.impl/src/main/java/org/gvsig/tools/dynform/impl/DefaultJProblemIndicator.java
36 36
import org.gvsig.tools.dynform.JDynFormField;
37 37
import org.gvsig.tools.dynform.spi.dynformfield.JProblemIndicator;
38 38
import org.gvsig.tools.swing.api.Component;
39
import org.gvsig.tools.swing.api.ToolsSwingLocator;
40
import org.gvsig.tools.swing.icontheme.IconTheme;
39 41

  
40 42
public class DefaultJProblemIndicator implements Component, JProblemIndicator {
41 43

  
......
54 56
    private void initComponentIfNeed() {
55 57
        if (this.indicator == null) {
56 58
            this.indicator = new JLabel();
57
            URL resource = null;
58
            resource = this.getClass().getClassLoader().getResource("org/gvsig/tools/dynform/impl/problem.png");
59
            URL resource;
60
            IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
61
            this.errorIcon = theme.get("form-problem-indicator");
62
            resource = this.getClass().getClassLoader().getResource("org/gvsig/tools/dynform/impl/images/transparent.png");
59 63
            if (resource != null) {
60
                this.errorIcon = new ImageIcon(resource);
61
            }
62
            resource = this.getClass().getClassLoader().getResource("org/gvsig/tools/dynform/impl/transparent.png");
63
            if (resource != null) {
64 64
                this.okIcon = new ImageIcon(resource);
65 65
            }
66 66
            this.indicator.setIcon(this.okIcon);
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.dynform/org.gvsig.tools.dynform.impl/src/main/java/org/gvsig/tools/dynform/impl/DefaultDynFormFieldDefinition.java
27 27
import org.gvsig.tools.dynform.DynFormFieldDefinition;
28 28
import org.gvsig.tools.dynobject.DynField;
29 29
import org.gvsig.tools.dynobject.DynField_v2;
30
import org.gvsig.tools.dynobject.DynMethod;
30 31
import org.gvsig.tools.dynobject.DynObjectManager;
31 32
import org.gvsig.tools.dynobject.impl.DefaultDynField;
32 33
import org.gvsig.tools.service.Manager;
......
52 53
		this.setOrder(definition.getOder());
53 54
                this.setSubtype(definition.getSubtype());
54 55

  
55
		this.setAvailableValues(definition.getAvailableValues());
56 56

  
57 57
		this.manager = manager;
58 58
		DynObjectManager dynManager = ToolsLocator.getDynObjectManager();
59 59
		this.label = (String) dynManager.getAttributeValue(definition, "label");
60 60
		if(definition instanceof DynField_v2){
61
                        this.setDefaultValueSupplier(((DynField_v2)definition).getDefaultValueSupplier());
62
			this.setClassOfValue(((DynField_v2)definition).getDynClassOfValue());
63
			this.setClassOfValue(((DynField_v2)definition).getClassOfValue());
61
                        DynField_v2 definition2 = (DynField_v2)definition;
62
                        DynMethod method = definition2.getAvailableValuesMethod();
63
                        if( method == null ) {
64
                            this.setAvailableValues(definition.getAvailableValues());
65
                        } else {
66
                            this.setAvailableValues(method);
67
                        }
68
                        this.setDefaultValueSupplier(definition2.getDefaultValueSupplier());
69
			this.setClassOfValue(definition2.getDynClassOfValue());
70
			this.setClassOfValue(definition2.getClassOfValue());
64 71
                        if( definition.isContainer() ) {
65
                            this.setClassOfItems(((DynField_v2)definition).getDynClassOfItems());
66
                            this.setClassOfItems(((DynField_v2)definition).getClassOfItems());
67
                            this.setTypeOfItems(((DynField_v2)definition).getTypeOfItems());
72
                            this.setClassOfItems(definition2.getDynClassOfItems());
73
                            this.setClassOfItems(definition2.getClassOfItems());
74
                            this.setTypeOfItems(definition2.getTypeOfItems());
68 75
                        }
69
			this.getTags().add(((DynField_v2)definition).getTags());
76
			this.getTags().add(definition2.getTags());
70 77

  
71 78
		}else{
72
			this.setSubtype(definition.getSubtype());
79
        		this.setAvailableValues(definition.getAvailableValues());
80
//			this.setSubtype(definition.getSubtype());
73 81
		}
74 82
	}
75 83

  
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.dynform/org.gvsig.tools.dynform.services/src/main/java/org/gvsig/tools/dynform/services/dynformset/base/FormSetButtonBar.java
26 26
import java.awt.Dimension;
27 27
import java.awt.FlowLayout;
28 28
import java.awt.event.ActionEvent;
29
import java.awt.event.ActionListener;
30 29
import java.awt.event.KeyEvent;
31
import java.net.URL;
32 30
import java.util.ArrayList;
33 31
import java.util.HashMap;
34 32
import java.util.HashSet;
......
40 38
import javax.swing.Action;
41 39
import javax.swing.BorderFactory;
42 40

  
43
import javax.swing.Icon;
44 41
import javax.swing.ImageIcon;
45 42
import javax.swing.JButton;
46 43
import javax.swing.JComponent;
......
63 60
import static org.gvsig.tools.dynform.JDynFormSet.ACTION_SET_CURRENT_RECORD;
64 61
import org.gvsig.tools.i18n.I18nManager;
65 62
import org.gvsig.tools.swing.api.Component;
63
import org.gvsig.tools.swing.api.ToolsSwingLocator;
64
import org.gvsig.tools.swing.icontheme.IconTheme;
66 65
import org.slf4j.Logger;
67 66
import org.slf4j.LoggerFactory;
68 67

  
68
@SuppressWarnings("UseSpecificCatch")
69 69
public class FormSetButtonBar implements Component {
70 70

  
71 71
    protected static final Logger LOGGER = LoggerFactory
......
316 316
            this.othersButtons.add(new JButton(action));
317 317
        }
318 318
        I18nManager i18n = ToolsLocator.getI18nManager();
319
        this.contents.add(createButton(i18n.getTranslation("_Close"), "close.png", ACTION_CLOSE, KeyEvent.VK_UNDEFINED));
319
        this.contents.add(createButton(i18n.getTranslation("_Close"), "form-buttonbar-close", ACTION_CLOSE, KeyEvent.VK_UNDEFINED));
320 320
        this.initButtons();
321 321
        this.updateRecords();
322 322
    }
323 323

  
324 324
    private JPanel getStandardButtonBar() {
325 325
        I18nManager i18nManager = ToolsLocator.getI18nManager();
326
        JPanel contents = new JPanel();
327
        contents.setLayout(new FlowLayout(FlowLayout.LEADING, 4, 4));
326
        JPanel theContents = new JPanel();
327
        theContents.setLayout(new FlowLayout(FlowLayout.LEADING, 4, 4));
328 328

  
329
        JComponent firstButton = createButton(i18nManager.getTranslation("_first"), "first.png", ACTION_FIRST, KeyEvent.CTRL_MASK + KeyEvent.VK_PAGE_UP);
330
        contents.add(firstButton);
331
        contents.add(createButton(i18nManager.getTranslation("_back"), "previous.png", ACTION_PREVIOUS, KeyEvent.VK_PAGE_UP));
329
        JComponent firstButton = createButton(i18nManager.getTranslation("_first"), "form-buttonbar-first", ACTION_FIRST, KeyEvent.CTRL_MASK + KeyEvent.VK_PAGE_UP);
330
        theContents.add(firstButton);
331
        theContents.add(createButton(i18nManager.getTranslation("_back"), "form-buttonbar-previous", ACTION_PREVIOUS, KeyEvent.VK_PAGE_UP));
332 332

  
333 333
        this.records = new JButton();
334 334
        this.records.setCursor(new Cursor(Cursor.HAND_CURSOR));
......
336 336
        this.records.setBorderPainted(false);
337 337
        this.records.setFocusPainted(false);
338 338
        this.records.setContentAreaFilled(false);
339
        this.records.addActionListener(new ActionListener() {
340

  
341
            @Override
342
            public void actionPerformed(ActionEvent ae) {
343
                doGoRecord();
344
            }
345
        });
339
        this.records.addActionListener((ActionEvent ae) -> { doGoRecord(); });
346 340
        int height = this.records.getFont().getSize();
347 341
        if (height < 16) {
348 342
            height = 16;
349 343
        }
350 344
        this.records.setPreferredSize(new Dimension(COUNTER_WIDTH, height));
351 345
        this.records.setHorizontalAlignment(SwingConstants.CENTER);
352
        contents.add(this.records);
346
        theContents.add(this.records);
353 347

  
354
        contents.add(createButton(i18nManager.getTranslation("_next"), "next.png", ACTION_NEXT, KeyEvent.VK_PAGE_DOWN));
355
        contents.add(createButton(i18nManager.getTranslation("_last"), "last.png", ACTION_LAST, KeyEvent.CTRL_MASK + KeyEvent.VK_PAGE_DOWN));
348
        theContents.add(createButton(i18nManager.getTranslation("_next"), "form-buttonbar-next", ACTION_NEXT, KeyEvent.VK_PAGE_DOWN));
349
        theContents.add(createButton(i18nManager.getTranslation("_last"), "form-buttonbar-last", ACTION_LAST, KeyEvent.CTRL_MASK + KeyEvent.VK_PAGE_DOWN));
356 350

  
357
        contents.add(createButton(i18nManager.getTranslation("guardar"), "save.png", ACTION_SAVE, KeyEvent.CTRL_MASK + KeyEvent.VK_S));
358
        contents.add(createButton(i18nManager.getTranslation("nuevo"), "new.png", ACTION_NEW, KeyEvent.VK_F6));
359
        contents.add(createButton(i18nManager.getTranslation("cancelar nuevo"), "cancelnew.png", ACTION_CANCEL_NEW, KeyEvent.VK_F12));
360
        contents.add(createButton(i18nManager.getTranslation("borrar"), "delete.png", ACTION_DELETE, KeyEvent.SHIFT_MASK + KeyEvent.VK_F2));
361
        contents.add(createButton(i18nManager.getTranslation("search"), "search.png", ACTION_SEARCH, KeyEvent.CTRL_MASK + KeyEvent.VK_F));
351
        theContents.add(createButton(i18nManager.getTranslation("guardar"), "form-buttonbar-save", ACTION_SAVE, KeyEvent.CTRL_MASK + KeyEvent.VK_S));
352
        theContents.add(createButton(i18nManager.getTranslation("nuevo"), "form-buttonbar-new", ACTION_NEW, KeyEvent.VK_F6));
353
        theContents.add(createButton(i18nManager.getTranslation("cancelar nuevo"), "form-buttonbar-cancelnew", ACTION_CANCEL_NEW, KeyEvent.VK_F12));
354
        theContents.add(createButton(i18nManager.getTranslation("borrar"), "form-buttonbar-delete", ACTION_DELETE, KeyEvent.SHIFT_MASK + KeyEvent.VK_F2));
355
        theContents.add(createButton(i18nManager.getTranslation("search"), "form-buttonbar-search", ACTION_SEARCH, KeyEvent.CTRL_MASK + KeyEvent.VK_F));
362 356

  
363
        return contents;
357
        return theContents;
364 358
    }
365 359

  
366 360
    private void doGoRecord() {
......
399 393

  
400 394
    private JComponent createButton(final String tip, final String image, final String action, int mnemonic) {
401 395
        int actionid = this.actionNameToId.get(action);
402
        
403
        URL url = this.getClass().getClassLoader().getResource("org/gvsig/tools/dynform/impl/" + image);
404
        Icon icon = new ImageIcon(url);
396

  
397
        IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
398
        ImageIcon icon = iconTheme.get(image);
399
//                
400
//        URL url = this.getClass().getClassLoader().getResource("org/gvsig/tools/dynform/impl/images/" + image+".png");
401
//        Icon icon = new ImageIcon(url);
405 402
        JButton button = new JButton(icon);
406 403
        if (mnemonic != KeyEvent.VK_UNDEFINED) {
407 404
            button.setMnemonic(mnemonic);
......
412 409
        button.setContentAreaFilled(false);
413 410
        button.setToolTipText(tip);
414 411
        button.setCursor(new Cursor(Cursor.HAND_CURSOR));
415
        button.addActionListener(new ActionListener() {
416

  
417
            @Override
418
            public void actionPerformed(ActionEvent ae) {
419
                fireEvent(action, null);
420
            }
421
        });
412
        button.addActionListener((ActionEvent ae) -> { fireEvent(action, null); });
422 413
        this.buttons[actionid] = button;
423 414
        return button;
424 415
    }
......
457 448
    public void setEnabled(String id, boolean enabled) {
458 449
        Integer x = this.actionNameToId.get(id);
459 450
        if( x!=null ) { // Ojo, si quito el intValue a veces falla
460
            this.buttons[x.intValue()].setEnabled(enabled);
451
            this.buttons[x].setEnabled(enabled);
461 452
            return;
462 453
        }
463 454
        JButton button = this.otherButtons.get(id);
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/dynobject/impl/DefaultDynField.java
702 702
            }
703 703
            v = (Comparable) value;
704 704
            boolean ok = false;
705
            for (DynObjectValueItem availableValue : this.availableValues) {
706
                if (v.compareTo(availableValue.getValue()) == 0) {
707
                    ok = true;
708
                    break;
705
            DynObjectValueItem[] theAvailableValues = this.getAvailableValues();
706
            if( theAvailableValues!=null ) {
707
                for (DynObjectValueItem availableValue : theAvailableValues) {
708
                    if (v.compareTo(availableValue.getValue()) == 0) {
709
                        ok = true;
710
                        break;
711
                    }
709 712
                }
713
                if (!ok) {
714
                    throw new DynFieldValidateException(value, this);
715
                }
710 716
            }
711
            if (!ok) {
712
                throw new DynFieldValidateException(value, this);
713
            }
714 717
        } else if (this.getMaxValue() != null && this.getMinValue() != null) {
715 718
            if (!(value instanceof Comparable)) {
716 719
                throw new DynFieldValidateException(value, this);
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/dataTypes/DataTypeUtils.java
111 111
        return (boolean) coerce(DataTypes.BOOLEAN, value, defaultValue);
112 112
    }
113 113

  
114
    public static boolean isTrue(Object value, boolean defaultValue) {
115
        return (boolean) coerce(DataTypes.BOOLEAN, value, defaultValue);
116
    }
117

  
118
    public static boolean isFalse(Object value, boolean defaultValue) {
119
        return ! (boolean) coerce(DataTypes.BOOLEAN, value, defaultValue);
120
    }
121

  
114 122
    public static float toFloat(Object value, float defaultValue) {
115 123
        return (float) coerce(DataTypes.FLOAT, value, defaultValue);
116 124
    }
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/dataTypes/DataTypes.java
66 66

  
67 67
	public static final int OBJECT = 0x40;
68 68

  
69
	public static final int MAX_TYPE_VALUE = 0x70;
69
	public static final int MAX_TYPE_VALUE = 0x7f;
70 70

  
71 71
	public static final String SUBTYPE_FILE = "File";
72 72
	public static final String SUBTYPE_FOLDER = "Folder";
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/dataTypes/impl/DefaultDataTypesManager.java
28 28
import java.net.URI;
29 29
import java.net.URL;
30 30
import java.util.ArrayList;
31
import java.util.Date;
32 31
import java.util.Iterator;
33 32
import java.util.List;
34 33
import java.util.Locale;
......
211 210
      // Check if the type has been already registereds
212 211
      get(type);
213 212
      throw new IllegalArgumentException("type "
214
              + Integer.toHexString(type).toUpperCase() + ", name " + name
215
              + ", already registered as " + getTypeName(type) + ".");
213
              + Integer.toHexString(type).toUpperCase() + ", name '" + name
214
              + "', already registered as '" + getTypeName(type) + "'.");
216 215
    } catch (IllegalArgumentException e) {
217 216
      // OK, the type is still not registered.
218 217
    }
......
222 221
            flags, max_precision, default_precision, default_scale
223 222
    );
224 223
    types[type] = dataType;
225
    LOG.info("Registered data type {}.", dataType.toString());
224
    LOG.debug("Registered data type {}.", dataType.toString());
226 225
    return dataType;
227 226
  }
228 227

  
......
253 252
    }
254 253

  
255 254
    if (dataType == null) {
256
      throw new IllegalArgumentException("DataType " + type
257
              + " not registered");
255
      throw new IllegalArgumentException("DataType " + type + " not registered");
258 256
    }
259 257

  
260 258
    return dataType;
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/DropDownButton.java
21 21
import javax.swing.JPopupMenu;
22 22
import javax.swing.UIManager;
23 23
import org.apache.commons.lang3.StringUtils;
24
import org.gvsig.tools.swing.api.ActionListenerSupport;
24 25
import org.gvsig.tools.swing.api.DropDown;
25 26
import org.gvsig.tools.util.LabeledValue;
26 27

  
......
43 44
    private boolean visibleDropdownArrow = true;
44 45
    private final Color warningBackgroundColor;
45 46
    private final Color backgroundColor;
47
    private final ActionListenerSupport dropdownListsnersHelper;
46 48
    
47
    
48 49
    public DropDownButton(final AbstractButton button, Color warningBackgroundColor) {
49 50
        this.component = button;
50 51
        this.itemListeners = new HashSet<>();
52
        this.dropdownListsnersHelper = new DefaultActionListenerSupport();
51 53
        this.component.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
52 54
        this.component.addMouseListener(new MouseAdapter() {
53 55
            @Override
......
62 64
        if( !s.endsWith(" \u25BE")) {
63 65
            this.component.setText(s+" \u25BE");
64 66
        }
65
        this.component.addActionListener(new ActionListener() {
66
            @Override
67
            public void actionPerformed(ActionEvent e) {
68
                doShowPopup();
69
            }
67
        this.component.addActionListener((ActionEvent e) -> {
68
            doShowPopup();
70 69
        });
71 70
    }
72 71

  
......
121 120
    }
122 121

  
123 122
    private void doShowPopup() {
123
        ActionEvent ev = new ActionEvent(this, 0, null);
124
        dropdownListsnersHelper.fireActionEvent(ev);
124 125
        if (model == null) {
125 126
            return;
126 127
        }
......
269 270
        this.itemListeners.remove(l);
270 271
    }
271 272
    
273
    @Override
274
    public void addDropdownListener(ActionListener listener) {
275
        this.dropdownListsnersHelper.addActionListener(listener);
276
    }
277
    
278
    @Override
279
    public void removeDropdownListener(ActionListener listener) {
280
        this.dropdownListsnersHelper.removeActionListener(listener);
281
    }
272 282
}
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/ClipboardMonitor.java
1
package org.gvsig.tools.swing.impl;
2

  
3
import java.awt.Toolkit;
4
import java.awt.datatransfer.Clipboard;
5
import java.awt.datatransfer.ClipboardOwner;
6
import java.awt.datatransfer.DataFlavor;
7
import java.awt.datatransfer.FlavorEvent;
8
import java.awt.datatransfer.FlavorListener;
9
import java.awt.datatransfer.StringSelection;
10
import java.awt.datatransfer.Transferable;
11
import java.util.HashMap;
12
import java.util.Map;
13
import java.util.Objects;
14
import java.util.Observable;
15
import java.util.Observer;
16
import org.apache.commons.lang3.StringUtils;
17
import org.slf4j.Logger;
18
import org.slf4j.LoggerFactory;
19

  
20
/**
21
 *
22
 * @author gvSIG Team
23
 */
24
@SuppressWarnings(value = {"UseSpecificCatch"})
25
public class ClipboardMonitor extends Observable implements ClipboardOwner {
26

  
27
    // log4j.logger.org.gvsig.tools.swing.impl.ClipboardMonitor=DEBUG
28
    
29
    private static final Logger LOGGER = LoggerFactory.getLogger(ClipboardMonitor.class);
30
    
31
    private static ClipboardMonitor monitor = null;
32

  
33
    private final Map<Observer,FlavorListener> listeners = new HashMap<>();
34

  
35
    public ClipboardMonitor() {
36
        gainOwnership();
37
    }
38

  
39
    public Clipboard getClipboard() {
40
        Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
41
        return clip;
42
    }
43
    
44
    private void gainOwnership() {
45
        LOGGER.debug("gainOwnership");
46
        Clipboard clip = getClipboard();
47
        try {
48
            Transferable content = clip.getContents(null);
49
            clip.setContents(content, this);
50
            setChanged();
51
            notifyObservers(content);
52
        } catch (Exception ex) {
53
            LOGGER.debug("Can't gain clipboard ownership",ex);
54
        }
55
    }
56

  
57
    @Override
58
    public void lostOwnership(Clipboard clipboard, Transferable contents) {
59
        LOGGER.debug("lostOwnership");
60
        new Thread(() -> {
61
            try {
62
                Thread.sleep(200);
63
                gainOwnership();
64
            } catch (Exception e) {
65
                LOGGER.debug("Retry gain clipboard ownership failed",e);
66
            }
67
        }).start();
68
    }
69

  
70
    public static final ClipboardMonitor getMonitor() {
71
        if (monitor == null) {
72
            monitor = new ClipboardMonitor();
73
        }
74
        return monitor;
75
    }
76

  
77
    public void put(String data) {
78
        LOGGER.debug("put "+StringUtils.abbreviate(data, 30));
79
        StringSelection ss = new StringSelection(data);
80
        Clipboard clip = getClipboard();
81

  
82
        ClipboardOwner owner = ss; // use this as owner don't fire events to observers ??
83
        clip.setContents(ss, owner);
84
    }
85

  
86
    public String getString() {
87
        LOGGER.debug("getString");
88
        try {
89
            Clipboard clip = getClipboard();
90
            Transferable t = clip.getContents(null);
91
            if(t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
92
                return (String) (t.getTransferData(DataFlavor.stringFlavor));
93
            }
94
        } catch (Exception ex) {
95
            LOGGER.debug("getString return null",ex);
96
            return null;
97
        }
98
        LOGGER.debug("getString return null");
99
        return null;
100
    }
101

  
102
    public boolean hasString() {
103
        LOGGER.debug("hasString");
104
        try {
105
            Clipboard clip = getClipboard();
106
            boolean available = clip.isDataFlavorAvailable(DataFlavor.stringFlavor);
107
            return !available;
108
        } catch (Exception ex) {
109
            LOGGER.debug("hasString error, return true",ex);
110
            return true;
111
        }
112
    }
113

  
114
    @Override
115
    public synchronized void addObserver(Observer o) {
116
        LOGGER.debug("addObserver "+Objects.toString(o));
117
        if( o==null || listeners.containsKey(o) ) {
118
            return;
119
        }
120
        Clipboard clip = getClipboard();
121
        FlavorListener listener = (FlavorEvent e) -> { o.update(monitor, null); };
122
        super.addObserver(o); 
123
        clip.addFlavorListener(listener);
124
        listeners.put(o, listener);
125
    }
126

  
127
    @Override
128
    public synchronized void deleteObserver(Observer o) {
129
        LOGGER.debug("deleteObserver"+Objects.toString(o));
130
        if( o==null ) {
131
            return;
132
        }
133
        Clipboard clip = getClipboard();
134
        FlavorListener listener = listeners.get(o);
135
        super.deleteObserver(o); 
136
        listeners.remove(o);
137
        if( listener==null ) {
138
            return;
139
        }
140
        clip.removeFlavorListener(listener);
141
    }
142
    
143
}
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/DefaultToolsSwingManager.java
4 4
import java.awt.Color;
5 5
import java.awt.Component;
6 6
import java.awt.Dimension;
7
import java.awt.Toolkit;
8
import java.awt.datatransfer.DataFlavor;
9
import java.awt.datatransfer.StringSelection;
10
import java.awt.datatransfer.Transferable;
11 7
import java.awt.event.ActionListener;
12 8
import java.awt.image.BufferedImage;
13 9
import java.awt.image.WritableRaster;
......
647 643
        return new DropDownLabelIcon(lblNull, this.getWarningBackgroundColor());
648 644
    }
649 645

  
650
    /**
651
     * Stores the provided text data on the clipboard.
652
     * 
653
     * @param data
654
     *            An String containing the data to be stored
655
     *            on the clipboard.
656
     */
657 646
    @Override
658 647
    public void putInClipboard(String data) {
659
        StringSelection ss = new StringSelection(data);
660

  
661
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, ss);
648
        ClipboardMonitor.getMonitor().put(data);
662 649
    }
663 650

  
664
    /**
665
     * Gets text data from the Clipboard, if available.
666
     * 
667
     * @return An String containing the clipboard's data, or <code>null</code>
668
     *         if the data was not available.
669
     */
670 651
    @Override
671 652
    public String getFromClipboard() {
672
        
673
        try {
674
            Transferable t = Toolkit.getDefaultToolkit()
675
                    .getSystemClipboard()
676
                    .getContents(null);
677
            if(t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
678
                return (String) (t.getTransferData(DataFlavor.stringFlavor));
679
            }
680
        } catch (Exception e) {
681
            return null;
682
        }
683
        return null;
653
        return ClipboardMonitor.getMonitor().getString();
684 654
    }
685 655

  
656
    @Override
686 657
    public boolean isClipboardEmpty() {
687
        
688
        try {
689
            boolean available = Toolkit.getDefaultToolkit()
690
                    .getSystemClipboard().isDataFlavorAvailable(DataFlavor.stringFlavor);
691
            return !available;
692
        } catch (Exception e) {
693
            return true;
694
        }
658
        return ClipboardMonitor.getMonitor().hasString();
695 659
    }
696 660
    
697 661
    @Override
662
    public void addClipboardObserver(java.util.Observer observer) {
663
        ClipboardMonitor.getMonitor().addObserver(observer);
664
    }
665
    
666
    @Override
667
    public void deleteClipboardObserver(java.util.Observer observer) {
668
        ClipboardMonitor.getMonitor().deleteObserver(observer);
669
    }
670
    
671
    @Override
698 672
    public JSpinner spinnerOfNumber(JSpinner spinner, Number value) {
699 673
        return NullableSpinnerUtils.ofNumber(spinner, value);
700 674
    }
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/coerce/CoerceToColor.java
40 40
  private static Map<String, Color> colorTable = null;
41 41

  
42 42
  @Override
43
  @SuppressWarnings("UseSpecificCatch")
43 44
  public Object coerce(Object value, CoercionContext context) throws CoercionException {
44 45
    if (value == null || value instanceof Color) {
45 46
      return value;
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/DropDownComboBox.java
1 1
package org.gvsig.tools.swing.impl;
2 2

  
3 3
import java.awt.Color;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
4 6
import java.awt.event.ItemListener;
5 7
import java.util.List;
6 8
import java.util.Objects;
......
8 10
import javax.swing.ImageIcon;
9 11
import javax.swing.JComboBox;
10 12
import javax.swing.JComponent;
13
import javax.swing.event.PopupMenuEvent;
14
import javax.swing.event.PopupMenuListener;
15
import org.gvsig.tools.swing.api.ActionListenerSupport;
11 16
import org.gvsig.tools.swing.api.DropDown;
12 17
import org.gvsig.tools.util.LabeledValue;
13 18

  
......
22 27
    private boolean readonly;
23 28
    private final Color warningBackgroundColor;
24 29
    private final Color backgroundColor;
30
    private final ActionListenerSupport dropdownListsnersHelper;
25 31

  
26 32
    public DropDownComboBox(JComboBox combo, Color warningBackgroundColor) {
27 33
        this.combo = combo;
28 34
        this.warningBackgroundColor = warningBackgroundColor;
29 35
        this.backgroundColor = combo.getBackground();
36
        this.dropdownListsnersHelper = new DefaultActionListenerSupport();
37
        this.combo.addPopupMenuListener(new PopupMenuListener() {
38
            @Override
39
            public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
40
                ActionEvent ev = new ActionEvent(this, 0, null);
41
                dropdownListsnersHelper.fireActionEvent(ev);
42
            }
43

  
44
            @Override
45
            public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
46
            }
47

  
48
            @Override
49
            public void popupMenuCanceled(PopupMenuEvent e) {
50
            }
51
        });
30 52
    }
31 53

  
32 54
    @Override
......
135 157
        return this.icons;
136 158
    }
137 159
        
160
    public void addDropdownListener(ActionListener listener) {
161
        this.dropdownListsnersHelper.addActionListener(listener);
162
    }
163
    
164
    public void removeDropdownListener(ActionListener listener) {
165
        this.dropdownListsnersHelper.removeActionListener(listener);
166
    }
138 167
}
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/DropDownLabel.java
24 24
import javax.swing.JPopupMenu;
25 25
import javax.swing.UIManager;
26 26
import org.apache.commons.lang3.StringUtils;
27
import org.gvsig.tools.swing.api.ActionListenerSupport;
27 28
import org.gvsig.tools.swing.api.DropDown;
28 29
import org.gvsig.tools.util.LabeledValue;
29 30

  
......
46 47
    private Color enabledForeground = null;
47 48
    private final Color backgroundColor;
48 49
    private final Color warningBackgroundColor;
50
    private final ActionListenerSupport dropdownListsnersHelper;
49 51
    
50 52
    
51 53
    public DropDownLabel(final JComponent component, Color warningBackgroundColor) {
52 54
        this.component = component;
53 55
        this.itemListeners = new HashSet<>();
56
        this.dropdownListsnersHelper = new DefaultActionListenerSupport();
54 57
        this.component.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
55 58
        this.component.addMouseListener(new MouseAdapter() {
56 59
            @Override
......
129 132
    }
130 133

  
131 134
    private void doShowPopup() {
135
        ActionEvent ev = new ActionEvent(this, 0, null);
136
        dropdownListsnersHelper.fireActionEvent(ev);
132 137
        if (model == null) {
133 138
            return;
134 139
        }
......
280 285
    public void removeItemListener(ItemListener l) {
281 286
        this.itemListeners.remove(l);
282 287
    }
288

  
289
    @Override
290
    public void addDropdownListener(ActionListener listener) {
291
        this.dropdownListsnersHelper.addActionListener(listener);
292
    }
283 293
    
294
    @Override
295
    public void removeDropdownListener(ActionListener listener) {
296
        this.dropdownListsnersHelper.removeActionListener(listener);
297
    }
298
    
284 299
}
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.swing/org.gvsig.tools.swing.api/src/main/java/org/gvsig/tools/swing/api/ToolsSwingUtils.java
66 66
        }
67 67
        return dim;
68 68
    }
69

  
69 70
    public static Dimension ensureMaxRows(JComponent comp, int rows) {
70 71
        Dimension dim = comp.getPreferredSize();
71 72
        int h = rows2px(rows);
......
121 122
        }
122 123
        return dim;
123 124
    }
125

  
126
    public static Dimension ensureRowsCols(Dimension dim, int minRows, int minCols, int maxRows, int maxCols) {
127
        if( minRows>0 ) {
128
            int minh = rows2px(minRows);
129
            if( dim.height < minh ) {
130
                dim.height = minh;
131
            }
132
        }
133
        if( minCols > 0 ) {
134
            int minw = cols2px(minCols);
135
            if( dim.width < minw ) {
136
                dim.width = minw;
137
            }
138
        }
139
        if( maxRows>0 ) {
140
            int maxh = rows2px(maxRows);
141
            if( dim.height > maxh ) {
142
                dim.height = maxh;
143
            }
144
        }
145
        if( maxCols > 0 ) {
146
            int maxw = cols2px(maxCols);
147
            if( dim.width > maxw ) {
148
                dim.width = maxw;
149
            }
150
        }
151
        return dim;
152
    }
153

  
154
    public static Dimension ensureRowsCols(JComponent comp, int minRows, int minCols, int maxRows, int maxCols) {
155
        Dimension dim = comp.getPreferredSize();       
156
        comp.setPreferredSize(ensureRowsCols(dim, minRows, minCols, maxRows, maxCols));
157
        return dim;
158
    }
159

  
124 160
}
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.swing/org.gvsig.tools.swing.api/src/main/java/org/gvsig/tools/swing/api/ToolsSwingManager.java
304 304

  
305 305
    public boolean isClipboardEmpty();
306 306
    
307
    public void addClipboardObserver(java.util.Observer observer);
308
    
309
    public void deleteClipboardObserver(java.util.Observer observer);
310
    
307 311
    public JSpinner spinnerOfNumber(JSpinner spinner, Number value);
308 312
    
309 313
    public JSpinner spinnerOfNumber(JSpinner spinner, Class valueClass);
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.swing/org.gvsig.tools.swing.api/src/main/java/org/gvsig/tools/swing/api/DropDown.java
1 1
package org.gvsig.tools.swing.api;
2 2

  
3 3
import java.awt.ItemSelectable;
4
import java.awt.event.ActionListener;
4 5
import java.util.List;
5 6
import javax.swing.ComboBoxModel;
6 7
import javax.swing.ImageIcon;
......
37 38
    
38 39
    public boolean isVisibleDropdownArrow();
39 40

  
41
    public void addDropdownListener(ActionListener listener);
42
    
43
    public void removeDropdownListener(ActionListener listener);
44
    
40 45
}

Also available in: Unified diff