Statistics
| Revision:

svn-gvsig-desktop / branches / org.gvsig.desktop-2018a / org.gvsig.desktop.library / org.gvsig.raster / org.gvsig.raster.swing / org.gvsig.raster.swing.buffer / org.gvsig.raster.swing.buffer.impl / src / main / java / org / gvsig / raster / swing / buffer / impl / operations / dynformfield / JDynFormFieldKernel.java @ 43821

History | View | Annotate | Download (5.05 KB)

1
package org.gvsig.raster.swing.buffer.impl.operations.dynformfield;
2

    
3
import java.awt.BorderLayout;
4
import java.awt.Dimension;
5
import java.awt.event.ItemEvent;
6
import java.awt.event.ItemListener;
7

    
8
import javax.swing.JComboBox;
9
import javax.swing.JPanel;
10
import javax.swing.JScrollPane;
11
import javax.swing.JTable;
12

    
13
import org.gvsig.raster.lib.buffer.api.BufferLocator;
14
import org.gvsig.raster.lib.buffer.api.BufferManager;
15
import org.gvsig.raster.lib.buffer.api.Kernel;
16
import org.gvsig.tools.dynform.JDynFormField;
17
import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormField;
18
import org.gvsig.tools.dynobject.DynObject;
19
import org.gvsig.tools.service.spi.ServiceManager;
20

    
21

    
22
/**
23
 * @author fdiaz
24
 *
25
 */
26
public class JDynFormFieldKernel extends AbstractJDynFormField implements JDynFormField {
27

    
28
    private static String RasterOperation_kernelSizeFieldName = "RasterOperation.kernelSizeFieldName";
29

    
30
    private static String RasterOperation_kernelOperatorFieldName = "RasterOperation.kernelOperatorFieldName";
31
    private static String RasterOperation_kernelOperatorValueToEnable = "RasterOperation.kernelOperatorValueToEnable";
32

    
33
    private JDynFormField kernelSizeField;
34
    private JTable matrix;
35
    private boolean initialized;
36

    
37
    private JDynFormField kernelOperator;
38

    
39
    private String kernelOperatorValueToEnable;
40

    
41
    /**
42
     * @param parameters
43
     * @param serviceManager
44
     */
45
    public JDynFormFieldKernel(DynObject parameters, ServiceManager serviceManager) {
46
        super(parameters, serviceManager);
47
        initialized=false;
48
        if (this.getParameterValue() != null) {
49
            setValue((Kernel) this.getParameterValue());
50
        }
51

    
52
    }
53

    
54
    @Override
55
    public Object getValue() {
56
        if(matrix==null || !kernelOperatorValueToEnable.equalsIgnoreCase((String)kernelOperator.getValue())){
57
            return null;
58
        }
59
        return ((KernelTableModel)matrix.getModel()).getKernel();
60
    }
61

    
62
    @Override
63
    public boolean hasValidValue() {
64
        //FIXME: Ver las condiciones para devolver true
65
        return true;
66
    }
67

    
68
    @Override
69
    public void setValue(Object arg0) {
70
        if(arg0==null){
71
            doChangeSizeMatrix((Integer)kernelSizeField.getValue());
72
        } else {
73
            KernelTableModel model = new KernelTableModel((Kernel) arg0);
74
            matrix.setModel(model);
75
        }
76
    }
77

    
78
    @Override
79
    public void initComponent() {
80
        String kernelSizeFieldName = getTagValueAsString(RasterOperation_kernelSizeFieldName, null);
81
        this.kernelSizeField = this.getForm().getField(kernelSizeFieldName);
82

    
83
        ((JComboBox<?>)this.kernelSizeField.asJComponent()).addItemListener(new ItemListener() {
84

    
85
            @Override
86
            public void itemStateChanged(ItemEvent e) {
87
                doChangeSizeMatrix((Integer)kernelSizeField.getValue());
88
            }
89
        });
90

    
91
        getKernelOperator();
92
        kernelOperatorValueToEnable = getTagValueAsString(RasterOperation_kernelOperatorValueToEnable, null);
93

    
94
        ((JComboBox<?>)this.kernelOperator.asJComponent()).addItemListener(new ItemListener() {
95

    
96
            @Override
97
            public void itemStateChanged(ItemEvent e) {
98
                doSetVisibleMatrix(kernelOperatorValueToEnable.equalsIgnoreCase((String)kernelOperator.getValue()));
99
            }
100
        });
101

    
102
        JPanel panel = new JPanel(new BorderLayout());
103

    
104
        matrix = new JTable();
105
        matrix.setRowSelectionAllowed(false);
106
        JScrollPane scrollPane = new JScrollPane(matrix);
107
        matrix.setFillsViewportHeight(true);
108

    
109
        doChangeSizeMatrix((Integer)kernelSizeField.getValue());
110
        matrix.setTableHeader(null);
111
        panel.add(scrollPane, BorderLayout.NORTH);
112
        Dimension dim = scrollPane.getPreferredSize();
113
        dim.height = 100;
114
        scrollPane.setPreferredSize(dim);
115
        this.contents = scrollPane;
116

    
117
        doSetVisibleMatrix(kernelOperatorValueToEnable.equalsIgnoreCase((String)kernelOperator.getValue()));
118

    
119
        this.initialized = true;
120
    }
121

    
122
    private void getKernelOperator() {
123
        String kernelOperatorFieldName = getTagValueAsString(RasterOperation_kernelOperatorFieldName, null);
124
        this.kernelOperator = this.getForm().getField(kernelOperatorFieldName);
125
    }
126

    
127
    protected void doSetEnableMatrix(boolean enable) {
128
        matrix.setEnabled(enable);
129
    }
130

    
131
    protected void doSetVisibleMatrix(boolean enable) {
132
        matrix.setVisible(enable);
133
    }
134

    
135
    protected void doChangeSizeMatrix(Integer value) {
136

    
137
        BufferManager manager = BufferLocator.getBufferManager();
138

    
139
        if (!initialized || value.intValue() != ((KernelTableModel)matrix.getModel()).getKernel().getSide()) {
140

    
141
            double[][] k = new double[value][value];
142
            for (int i = 0; i < value; i++) {
143
                for (int j = 0; j < value; j++) {
144
                    k[i][j] = 0d;
145
                }
146
            }
147

    
148
            Kernel kernel = manager.createKernel(k);
149

    
150
            KernelTableModel model = new KernelTableModel(kernel);
151
            matrix.setModel(model);
152
        }
153

    
154
    }
155

    
156
    @Override
157
    public Object getAssignedValue() {
158
        return matrix;
159
    }
160

    
161
}