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 @ 43817

History | View | Annotate | Download (5.45 KB)

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

    
3
import java.awt.BorderLayout;
4
import java.awt.Color;
5
import java.awt.Dimension;
6
import java.awt.FlowLayout;
7
import java.awt.event.FocusAdapter;
8
import java.awt.event.FocusEvent;
9
import java.awt.event.FocusListener;
10
import java.beans.PropertyChangeEvent;
11
import java.beans.PropertyChangeListener;
12

    
13
import javax.swing.JList;
14
import javax.swing.JPanel;
15
import javax.swing.JScrollPane;
16
import javax.swing.JTable;
17

    
18
import org.gvsig.raster.lib.buffer.api.BufferLocator;
19
import org.gvsig.raster.lib.buffer.api.BufferManager;
20
import org.gvsig.raster.lib.buffer.api.Kernel;
21
import org.gvsig.tools.dynform.JDynFormField;
22
import org.gvsig.tools.dynform.spi.dynformfield.AbstractJDynFormField;
23
import org.gvsig.tools.dynobject.DynObject;
24
import org.gvsig.tools.service.spi.ServiceManager;
25

    
26

    
27
/**
28
 * @author fdiaz
29
 *
30
 */
31
public class JDynFormFieldKernel extends AbstractJDynFormField implements JDynFormField {
32

    
33
    private static String RasterOperation_kernelSizeFieldName = "RasterOperation.kernelSizeFieldName";
34

    
35
    private static String RasterOperation_kernelOperatorFieldName = "RasterOperation.kernelOperatorFieldName";
36
    private static String RasterOperation_kernelOperatorValueToEnable = "RasterOperation.kernelOperatorValueToEnable";
37

    
38
    private JDynFormField kernelSizeField;
39
    private JTable matrix;
40
    private boolean initialized;
41

    
42
    private JDynFormField kernelOperator;
43

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

    
55
    }
56

    
57
    @Override
58
    public Object getValue() {
59
        if(matrix==null){
60
            return null;
61
        }
62
        return ((KernelTableModel)matrix.getModel()).getKernel();
63
    }
64

    
65
    @Override
66
    public boolean hasValidValue() {
67
        //FIXME: Ver las condiciones para devolver true
68
        return true;
69
    }
70

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

    
81
    @Override
82
    public void initComponent() {
83
        String kernelSizeFieldName = getTagValueAsString(RasterOperation_kernelSizeFieldName, null);
84
        this.kernelSizeField = this.getForm().getField(kernelSizeFieldName);
85

    
86
        this.kernelSizeField.asJComponent().addFocusListener(new FocusAdapter() {
87
            @Override
88
            public void focusLost(FocusEvent e) {
89
                doChangeSizeMatrix((Integer)kernelSizeField.getValue());
90
            };
91
        });
92
//        this.kernelSizeField.addListener(new JDynFormFieldListener() {
93
//
94
//            @Override
95
//            public void message(JDynFormField arg0, String arg1) {
96
//            }
97
//
98
//            @Override
99
//            public void fieldEnter(JDynFormField arg0) {
100
//            }
101
//
102
//            @Override
103
//            public void fieldExit(JDynFormField arg0) {
104
//            }
105
//
106
//            @Override
107
//            public void fieldChanged(JDynFormField arg0) {
108
//                doChangeSizeMatrix((Integer)kernelSizeField.getValue());
109
//
110
//            }
111
//        });
112

    
113
        String kernelOperatorFieldName = getTagValueAsString(RasterOperation_kernelOperatorFieldName, null);
114
        this.kernelOperator = this.getForm().getField(kernelOperatorFieldName);
115
        final String kernelOperatorValueToEnable = getTagValueAsString(RasterOperation_kernelOperatorValueToEnable, null);
116

    
117

    
118
        this.kernelOperator.asJComponent().addFocusListener(new FocusAdapter() {
119
            @Override
120
            public void focusLost(FocusEvent e) {
121
                doEnableMatrix(kernelOperatorValueToEnable.equalsIgnoreCase((String)kernelOperator.getValue()));
122
            };
123
        });
124

    
125
        JPanel panel = new JPanel(new BorderLayout());
126

    
127
        matrix = new JTable();
128
        matrix.setRowSelectionAllowed(false);
129
        JScrollPane scrollPane = new JScrollPane(matrix);
130
        matrix.setFillsViewportHeight(true);
131

    
132
        doChangeSizeMatrix((Integer)kernelSizeField.getValue());
133
        matrix.setTableHeader(null);
134
        panel.add(scrollPane, BorderLayout.NORTH);
135
        Dimension dim = scrollPane.getPreferredSize();
136
        dim.height = 100;
137
        scrollPane.setPreferredSize(dim);
138
        this.contents = scrollPane;
139

    
140
        doEnableMatrix(kernelOperatorValueToEnable.equalsIgnoreCase((String)kernelOperator.getValue()));
141

    
142
        this.initialized = true;
143
    }
144

    
145
    protected void doEnableMatrix(boolean enable) {
146
        matrix.setEnabled(enable);
147
    }
148

    
149
    protected void doChangeSizeMatrix(Integer value) {
150

    
151
        BufferManager manager = BufferLocator.getBufferManager();
152

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

    
155
            double[][] k = new double[value][value];
156
            for (int i = 0; i < value; i++) {
157
                for (int j = 0; j < value; j++) {
158
                    k[i][j] = 0d;
159
                }
160
            }
161

    
162
            Kernel kernel = manager.createKernel(k);
163

    
164
            KernelTableModel model = new KernelTableModel(kernel);
165
            matrix.setModel(model);
166
        }
167

    
168
    }
169

    
170
    @Override
171
    public Object getAssignedValue() {
172
        return matrix;
173
    }
174

    
175
}