Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.app / org.gvsig.app.mainplugin / src / main / java / org / gvsig / app / project / documents / view / expressionevaluator / ViewCaptureRectangleElement.java @ 44129

History | View | Annotate | Download (3.39 KB)

1
package org.gvsig.app.project.documents.view.expressionevaluator;
2

    
3
import java.awt.Dialog;
4
import java.awt.Window;
5
import org.gvsig.expressionevaluator.ExpressionBuilder;
6
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
7
import org.gvsig.expressionevaluator.swing.Element.CalculatedElement;
8
import org.gvsig.expressionevaluator.swing.Element.SimpleElement;
9
import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
10
import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
11
import org.gvsig.fmap.geom.Geometry;
12
import org.gvsig.tools.ToolsLocator;
13
import org.gvsig.tools.swing.api.Component;
14

    
15
/**
16
 *
17
 * @author jjdelcerro
18
 */
19
@SuppressWarnings("UseSpecificCatch")
20
public class ViewCaptureRectangleElement 
21
        extends AbstractElement
22
        implements SimpleElement, CalculatedElement
23
{
24
    private ViewCaptureRectanglePanel aditionalPanel;
25

    
26
    public ViewCaptureRectangleElement() {
27
        super(
28
                ToolsLocator.getI18nManager().getTranslation("_Capture_rectangle"), 
29
                "expressionbuilder-element-view-capture-bbox"
30
        );
31
    }
32

    
33
    @Override
34
    public Object getValue() {
35
        if (this.aditionalPanel == null) {
36
            return null;
37
        }
38
        try {
39
            Geometry geom = this.aditionalPanel.getGeometry();
40
            if (geom == null) {
41
                return null;
42
            }
43
            ExpressionBuilder builder = ExpressionEvaluatorLocator.getManager().createExpressionBuilder();
44
            if (this.aditionalPanel.insertAsWKT()) {
45
                if (this.aditionalPanel.insertAsGeometry()) {
46
                    builder.getConfig().set(
47
                            ExpressionBuilder.Config.geometry_type_support,
48
                            ExpressionBuilder.GeometrySupportType.WKT
49
                    );
50
                    return builder.geometry(geom, geom.getProjection()).toString();
51
                } else {
52
                    String wkt = geom.convertToWKT();
53
                    return "'" + wkt + "'";
54
                }
55
            } else {
56
                if (this.aditionalPanel.insertAsGeometry()) {
57
                    builder.getConfig().set(
58
                            ExpressionBuilder.Config.geometry_type_support,
59
                            ExpressionBuilder.GeometrySupportType.WKB
60
                    );
61
                    return builder.geometry(geom, geom.getProjection()).toString();
62
                } else {
63
                    byte[] wkb = geom.convertToWKB();
64
                    return builder.bytearray_hex(wkb);
65
                }
66
            }
67
        } catch (Exception ex) {
68
            LOGGER.warn("Can't get point value.", ex);
69
            return null;
70
        }
71
    }
72

    
73
    @Override
74
    public Component getAditionalPanel(JExpressionBuilder expressionBuilder) {
75
        if (aditionalPanel == null) {
76
            this.aditionalPanel = new ViewCaptureRectanglePanel();
77
        }
78
        return this.aditionalPanel;
79
    }
80

    
81
    public boolean isEnabled() {
82
        return ! isModalDialogShowing();
83
    }
84

    
85
    private static boolean isModalDialogShowing() {
86
        Window[] windows = Window.getWindows();
87
        if (windows != null) { // don't rely on current implementation, which at least returns [0].
88
            for (Window w : windows) {
89
                if (w.isShowing() && w instanceof Dialog && ((Dialog) w).isModal()) {
90
                    return true;
91
                }
92
            }
93
        }
94
        return false;
95
    }
96

    
97
}