Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.expressionevaluator / org.gvsig.expressionevaluator.swing / org.gvsig.expressionevaluator.swing.impl / src / main / java / org / gvsig / expressionevaluator / swing / impl / DefaultExpressionPickerController.java @ 44098

History | View | Annotate | Download (7.45 KB)

1 43983 jjdelcerro
package org.gvsig.expressionevaluator.swing.impl;
2
3
import java.awt.event.ActionEvent;
4
import java.awt.event.ActionListener;
5
import java.net.URL;
6
import java.util.Collection;
7
import java.util.List;
8
import javax.swing.ImageIcon;
9
import javax.swing.JButton;
10 44094 jjdelcerro
import javax.swing.JMenuItem;
11 44080 jjdelcerro
import javax.swing.JPopupMenu;
12 43983 jjdelcerro
import javax.swing.text.JTextComponent;
13
import org.apache.commons.lang3.StringUtils;
14
import org.gvsig.expressionevaluator.DataTypes;
15
import org.gvsig.expressionevaluator.Expression;
16
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
17
import org.gvsig.expressionevaluator.SymbolTable;
18
import org.gvsig.expressionevaluator.swing.Element;
19
import org.gvsig.tools.ToolsLocator;
20
import org.gvsig.tools.dataTypes.CoercionException;
21
import org.gvsig.tools.dataTypes.DataTypesManager;
22
import org.gvsig.tools.swing.api.ToolsSwingLocator;
23
import org.gvsig.tools.swing.api.pickercontroller.AbstractPickerController;
24
import org.gvsig.tools.swing.icontheme.IconTheme;
25
import org.gvsig.tools.swing.icontheme.IconThemeManager;
26
import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
27
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
28
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
29 44080 jjdelcerro
import org.gvsig.tools.i18n.I18nManager;
30
import org.gvsig.tools.swing.api.ToolsSwingManager;
31 43983 jjdelcerro
import org.gvsig.tools.swing.api.windowmanager.Dialog;
32
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
33
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
34
35
/**
36
 *
37
 * @author jjdelcerro
38
 */
39
public class DefaultExpressionPickerController
40
        extends AbstractPickerController<Expression>
41
        implements ExpressionPickerController
42
    {
43
44
    public static void selfRegister() {
45
        URL imageResource = DefaultExpressionPickerController.class.getClassLoader().getResource("org/gvsig/tools/swing/picker/picker-expression.png");
46
        if (imageResource != null) {
47
            IconThemeManager iconThemeManager = ToolsSwingLocator.getIconThemeManager();
48
            IconTheme theme = iconThemeManager.getCurrent();
49
            ImageIcon icon = new ImageIcon(imageResource);
50
            theme.registerDefault("tools", "picker", "picker-expression", icon, imageResource);
51
        }
52
    }
53
54
    private final JButton button;
55
    private final JTextComponent text;
56
    private Expression value;
57 44098 jjdelcerro
    private final ExpressionBuilderConfig config;
58 43983 jjdelcerro
    private final ExpressionEvaluatorSwingManager manager;
59 44094 jjdelcerro
    private final ActionListener buttonAction;
60
    private final JMenuItem menuItem;
61 43983 jjdelcerro
62
    public DefaultExpressionPickerController(ExpressionEvaluatorSwingManager manager, JTextComponent text, JButton button) {
63 44080 jjdelcerro
        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
64
        I18nManager i18n = ToolsLocator.getI18nManager();
65
66 43983 jjdelcerro
        this.manager = manager;
67
        this.config = new DefaultExpressionBuilderConfig(manager);
68
        this.text = text;
69
        this.button = button;
70
        this.value = ExpressionEvaluatorLocator.getManager().createExpression();
71
        this.button.setIcon(this.getIcon("picker-expression"));
72 44094 jjdelcerro
        this.buttonAction = new ActionListener() {
73 43983 jjdelcerro
            @Override
74
            public void actionPerformed(ActionEvent e) {
75
                doSelectExpression();
76
            }
77 44094 jjdelcerro
        };
78
        this.button.addActionListener(this.buttonAction);
79 43983 jjdelcerro
80 44080 jjdelcerro
        swingManager.addClearButton(this.text);
81
        swingManager.setDefaultPopupMenu(this.text);
82
        JPopupMenu popupMenu = this.text.getComponentPopupMenu();
83 44094 jjdelcerro
        this.menuItem = new JMenuItem(i18n.getTranslation("_Show_expression_builder"));
84
        this.menuItem.addActionListener(buttonAction);
85
        popupMenu.add(this.menuItem);
86 43983 jjdelcerro
    }
87
88 44094 jjdelcerro
    @Override
89
    public void unbind() {
90
        this.button.removeActionListener(this.buttonAction);
91
        JPopupMenu popupMenu = this.text.getComponentPopupMenu();
92
        popupMenu.remove(this.menuItem);
93
    }
94
95 43983 jjdelcerro
    private void doSelectExpression() {
96
        this.value.setPhrase(this.text.getText());
97
98
        DefaultJExpressionBuilder panel = new DefaultJExpressionBuilder(this.manager, this.config);
99
        panel.setExpression(this.value);
100
101
        WindowManager_v2 windowManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
102
        Dialog dialog = windowManager.createDialog(
103
                panel.asJComponent(),
104
                "Expression builder",
105
                null,
106
                WindowManager_v2.BUTTONS_OK_CANCEL
107
        );
108
        dialog.show(WindowManager.MODE.DIALOG);
109
        if( dialog.getAction()==WindowManager_v2.BUTTON_OK ) {
110
            this.set(panel.getExpression());
111
        }
112
    }
113
114
    @Override
115
    public Expression get() {
116
        this.value.setPhrase(this.text.getText());
117
        return this.value;
118
    }
119
120
    @Override
121
    public void set(Expression value) {
122 44079 jjdelcerro
        if( value==null ) {
123
            this.text.setText("");
124 44080 jjdelcerro
            this.value.setPhrase("");
125 44079 jjdelcerro
        } else {
126 44080 jjdelcerro
            this.value = value;
127 44079 jjdelcerro
            this.text.setText(this.value.getPhrase());
128
        }
129 43983 jjdelcerro
    }
130
131
    @Override
132
    public boolean isEmpty() {
133
        boolean empty = StringUtils.isBlank(this.text.getText());
134
        return empty;
135
    }
136
137
138
    @Override
139
    public void coerceAndSet(Object value) {
140
        try {
141
            DataTypesManager.Coercion toExpression = ToolsLocator.getDataTypesManager().getCoercion(DataTypes.EXPRESSION);
142
            this.set((Expression) toExpression.coerce(value));
143
        } catch (CoercionException ex) {
144
            throw new IllegalArgumentException("Can't converto to color", ex);
145
        }
146
    }
147
148
    @Override
149
    public void setEnabled(boolean enabled) {
150
        this.text.setEnabled(enabled);
151
        this.button.setEnabled(enabled);
152
    }
153
154
    @Override
155
    public boolean isEnabled() {
156
        return this.text.isEnabled();
157
    }
158
159
    @Override
160
    public void setEditable(boolean editable) {
161
        super.setEditable(editable);
162
        this.text.setEditable(editable);
163
        this.button.setEnabled(editable);
164
    }
165
166
    @Override
167
    public int getSimpleElementsLimit() {
168
        return this.config.getSimpleElementsLimit();
169
    }
170
171
    @Override
172
    public void setSimpleElementsLimit(int limit) {
173
        this.config.setSimpleElementsLimit(limit);
174
    }
175
176
    @Override
177
    public List<Element> getElements() {
178
        return this.config.getElements();
179
    }
180
181
    @Override
182 44034 jjdelcerro
    public void addElement(Element element) {
183
        this.config.addElement(element);
184
    }
185
186
    @Override
187 43983 jjdelcerro
    public Collection<SymbolTable> getSymbolTables() {
188
        return this.config.getSymbolTables();
189
    }
190 43987 jjdelcerro
191
    @Override
192
    public void addSymbolTable(String name) {
193
        this.config.addSymbolTable(name);
194
    }
195 43983 jjdelcerro
196
    @Override
197
    public void addSymbolTable(SymbolTable symbolTable) {
198
        this.config.addSymbolTable(symbolTable);
199
    }
200
201
    @Override
202
    public void removeAllSymbolTables() {
203
        this.config.removeAllSymbolTables();
204
    }
205
206 43984 jjdelcerro
    @Override
207
    public void removeSymbolTable(String name) {
208
        this.config.removeSymbolTable(name);
209
    }
210
211
    @Override
212
    public void setScriptsEnabled(boolean enabled) {
213
        this.config.setScriptsEnabled(enabled);
214
    }
215
216
    @Override
217
    public boolean getScriptsEnabled() {
218
        return this.config.getScriptsEnabled();
219
    }
220
221 44098 jjdelcerro
    @Override
222
    public SymbolTable getPreviewSymbolTable() {
223
        return this.config.getPreviewSymbolTable();
224
    }
225
226
    @Override
227
    public void setPreviewSymbolTable(SymbolTable symbolTable) {
228
        this.config.setPreviewSymbolTable(symbolTable);
229
    }
230
231 43983 jjdelcerro
232
}