Revision 1064

View differences:

org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.impl/src/main/java/org/gvsig/scripting/impl/AbstractUnit.java
173 173
        return this.parent;
174 174
    }
175 175

  
176
    @Override
176 177
    public String getUserPath() {
177 178
        List<String> parts = new ArrayList<>();
178 179
        ScriptingUnit unit = this;
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.swing/org.gvsig.scripting.swing.api/src/main/java/org/gvsig/scripting/swing/api/ScriptingUIManager.java
15 15
import org.gvsig.scripting.ScriptingManager;
16 16
import org.gvsig.scripting.ScriptingScript;
17 17
import org.gvsig.scripting.ScriptingUnit;
18
import org.gvsig.tools.swing.api.script.ScriptSwingManager;
18 19
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
19 20

  
20 21
/**
......
27 28
 * @see ScriptingManager
28 29
 *
29 30
 */
30
public interface ScriptingUIManager {
31
public interface ScriptingUIManager extends ScriptSwingManager {
31 32
    public static final String SCRIPT_COMPOSER_AUTORUN = "scautorun";
32 33
    
33 34
    /**
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.swing/org.gvsig.scripting.swing.impl/src/main/java/org/gvsig/scripting/swing/impl/DefaultScriptingUIManager.java
17 17
import javax.swing.JButton;
18 18
import javax.swing.JComboBox;
19 19
import javax.swing.JComponent;
20
import javax.swing.JList;
20 21
import javax.swing.JPanel;
21 22
import javax.swing.JTextField;
22 23
import org.gvsig.about.AboutLocator;
......
54 55
import org.gvsig.scripting.swing.impl.tools.DefaultScriptChooserPanel;
55 56
import org.gvsig.scripting.swing.impl.tools.ScriptListPickerController;
56 57
import org.gvsig.scripting.swing.impl.tools.ScriptPickerController;
57
import org.gvsig.scripting.swing.impl.tools.ScriptSwingManager;
58 58
import org.gvsig.tools.ToolsLocator;
59 59
import org.gvsig.tools.i18n.I18nManager;
60 60
import org.gvsig.tools.script.Script;
......
67 67
import org.slf4j.LoggerFactory;
68 68

  
69 69
public class DefaultScriptingUIManager 
70
        implements ScriptingUIManager , ScriptSwingManager
70
        implements ScriptingUIManager
71 71
    {
72 72

  
73 73
    private final static Logger logger = LoggerFactory.getLogger(DefaultScriptingUIManager.class);
......
431 431
        ScriptListPickerController x = new ScriptListPickerController(combo, remove, chooser);
432 432
        return x;
433 433
    }
434

  
435
    @Override
436
    public PickerController<List<Script>> createListScriptPickerController(JList list, JButton remove, JButton chooser) {
437
        ScriptListPickerController x = new ScriptListPickerController(list, remove, chooser);
438
        return x;
439
    }
434 440
}
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.swing/org.gvsig.scripting.swing.impl/src/main/java/org/gvsig/scripting/swing/impl/tools/ScriptSwingManager.java
1
package org.gvsig.scripting.swing.impl.tools;
2

  
3

  
4
import java.util.List;
5
import javax.swing.JButton;
6
import javax.swing.JComboBox;
7
import javax.swing.JTextField;
8
import org.gvsig.tools.script.Script;
9
import org.gvsig.tools.swing.api.Component;
10
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
11

  
12
public interface ScriptSwingManager {
13
    
14
    public interface ScriptChooserPanel extends Component {
15
        public int showDialog();
16
        
17
        public Script getScript();
18
        
19
        public int getAction();
20
    }
21
    
22
    public ScriptChooserPanel createScriptChooserPanel();
23
   
24
    public  PickerController<Script> createScriptPickerController(JTextField text, JButton chooser);
25

  
26
    public  PickerController<List<Script>> createListScriptPickerController(JComboBox combo, JButton remove, JButton chooser);
27
}
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.swing/org.gvsig.scripting.swing.impl/src/main/java/org/gvsig/scripting/swing/impl/tools/ScriptListPickerController.java
2 2

  
3 3
import java.awt.event.ActionEvent;
4 4
import java.awt.event.ActionListener;
5
import java.awt.event.ItemEvent;
6
import java.awt.event.ItemListener;
7
import java.awt.event.KeyEvent;
8
import java.awt.event.KeyListener;
9
import java.util.ArrayList;
5 10
import java.util.List;
6 11
import javax.swing.DefaultComboBoxModel;
12
import javax.swing.DefaultListModel;
7 13
import javax.swing.JButton;
8 14
import javax.swing.JComboBox;
15
import javax.swing.JList;
16
import javax.swing.SwingUtilities;
17
import javax.swing.event.ListSelectionEvent;
18
import javax.swing.event.ListSelectionListener;
19
import org.gvsig.scripting.ScriptingUnit;
9 20
import org.gvsig.scripting.swing.api.ScriptingSwingLocator;
10 21
import org.gvsig.scripting.swing.api.ScriptingUIManager;
11 22
import org.gvsig.tools.script.Script;
12 23
import org.gvsig.tools.swing.api.ListElement;
13 24
import org.gvsig.tools.swing.api.pickercontroller.AbstractPickerController;
25
import org.gvsig.tools.swing.api.script.ScriptSwingManager;
14 26
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
15 27

  
16 28
/**
......
18 30
 * @author jjdelcerro
19 31
 */
20 32
public class ScriptListPickerController extends AbstractPickerController<List<Script>> {
33

  
34
    private class ListComponent {
35

  
36
        private final JComboBox combo;
37
        private final JList list;
38

  
39
        public ListComponent(JComboBox combo) {
40
            this.list = null;
41
            this.combo = combo;
42
        }
43

  
44
        public ListComponent(JList list) {
45
            this.list = list;
46
            this.combo = null;
47
        }
48

  
49
        public void setEnabled(boolean b) {
50
            if (this.list == null) {
51
                this.combo.setEnabled(b);
52
            } else {
53
                this.list.setEnabled(b);
54
            }
55
        }
56

  
57
        public int getSelectedIndex() {
58
            if (this.list == null) {
59
                return this.combo.getSelectedIndex();
60
            } else {
61
                return this.list.getSelectedIndex();
62
            }
63
        }
64

  
65
        public void clearElements() {
66
            if (this.list == null) {
67
                this.combo.setModel(new DefaultComboBoxModel());
68
            } else {
69
                this.list.setModel(new DefaultListModel());
70
            }
71
        }
72

  
73
        public void addElement(ListElement element) {
74
            if (this.list == null) {
75
                this.combo.addItem(element);
76
            } else {
77
                ((DefaultListModel) (this.list.getModel())).addElement(element);
78
            }
79
        }
80

  
81
        public void addSelectionListener(final ActionListener listener) {
82
            if (this.combo != null) {
83
                this.combo.addItemListener(new ItemListener() {
84
                    @Override
85
                    public void itemStateChanged(ItemEvent e) {
86
                        ActionEvent event = new ActionEvent(this, 1, "ItemChanged");
87
                        listener.actionPerformed(event);
88
                    }
89
                });
90
            }
91
            if (this.list != null) {
92
                this.list.addListSelectionListener(new ListSelectionListener() {
93
                    @Override
94
                    public void valueChanged(ListSelectionEvent e) {
95
                        ActionEvent event = new ActionEvent(this, 1, "ItemChanged");
96
                        listener.actionPerformed(event);
97
                    }
98
                });
99
            }
100
        }
101
        
102
        public void addKeyListener(KeyListener listener) {
103
            if( this.list!=null ) {
104
                this.list.addKeyListener(listener);
105
            }
106
        }
107

  
108
        private void setSelectedIndex(int n) {
109
            if (this.list == null) {
110
                this.combo.setSelectedIndex(n);
111
            } else {
112
                this.list.setSelectedIndex(n);
113
            }
114
        }
115
    }
116

  
21 117
    private List<Script> scripts;
22
    private final JComboBox combo;
118
    private final ListComponent list;
23 119
    private final JButton btnRemove;
24 120
    private final JButton btnChooser;
25
    
121

  
26 122
    public ScriptListPickerController(JComboBox combo, JButton remove, JButton chooser) {
27
        this.combo = combo;
123
        this.scripts = new ArrayList<>();
124
        this.list = new ListComponent(combo);
28 125
        this.btnChooser = chooser;
29 126
        this.btnRemove = remove;
30
        
31
        this.combo.setEnabled(false);
127

  
128
        this.initComponents();
129
    }
130

  
131
    public ScriptListPickerController(JList list, JButton remove, JButton chooser) {
132
        this.scripts = new ArrayList<>();
133
        this.list = new ListComponent(list);
134
        this.btnChooser = chooser;
135
        this.btnRemove = remove;
136

  
137
        this.initComponents();
138
    }
139

  
140
    private void initComponents() {
141
        this.list.setEnabled(true);
142

  
32 143
        this.btnRemove.setEnabled(false);
33 144
        this.btnRemove.setIcon(this.getIcon("picker-script-remove"));
34 145
        this.btnRemove.setText("");
35
        this.btnChooser.setEnabled(false);
146
        this.btnChooser.setEnabled(true);
36 147
        this.btnChooser.setIcon(this.getIcon("picker-script"));
37 148
        this.btnChooser.setText("");
38 149
        this.btnChooser.addActionListener(new ActionListener() {
......
47 158
                doRemoveScript();
48 159
            }
49 160
        });
161

  
162
        this.list.addSelectionListener(new ActionListener() {
163
            @Override
164
            public void actionPerformed(ActionEvent e) {
165
                doSelectionChanged();
166
            }
167
        });
168
        this.list.addKeyListener(new KeyListener() {
169
            @Override
170
            public void keyTyped(KeyEvent e) {
171
                if( (e.getModifiers() & KeyEvent.CTRL_MASK) == KeyEvent.CTRL_MASK) {
172
                    doMoveCurrentScript(e.getKeyCode());
173
                }
174
            }
175

  
176
            @Override
177
            public void keyPressed(KeyEvent e) {
178
                if( (e.getModifiers() & KeyEvent.CTRL_MASK) == KeyEvent.CTRL_MASK) {
179
                    doMoveCurrentScript(e.getKeyCode());
180
                }
181
            }
182

  
183
            @Override
184
            public void keyReleased(KeyEvent e) {
185
            }
186
        });
50 187
    }
188

  
189
    private void doMoveCurrentScript(int keyCode) {
190
        int n = this.list.getSelectedIndex();
191
        if( n<0 ) {
192
            return;
193
        }
194
        if( keyCode ==KeyEvent.VK_UP) {
195
            if( n<1 ) {
196
                return;
197
            }
198
            Script sc = this.scripts.get(n);
199
            this.scripts.add(n-1, sc);
200
            this.rebuildList();
201
            return;
202
        }
203
        if( keyCode ==KeyEvent.VK_DOWN) {
204
            if( n>=this.scripts.size()-1 ) {
205
                return;
206
            }
207
            Script sc = this.scripts.get(n);
208
            this.scripts.add(n+1, sc);
209
            this.rebuildList();
210
        }
211
        
212
    }
51 213
    
214
    private void doSelectionChanged() {
215
        if (this.list.getSelectedIndex() >= 0) {
216
            this.btnRemove.setEnabled(true);
217
        } else {
218
            this.btnRemove.setEnabled(false);
219
        }
220
    }
221

  
52 222
    private void doChooseScript() {
53 223
        ScriptingUIManager manager = ScriptingSwingLocator.getUIManager();
54 224
        ScriptSwingManager.ScriptChooserPanel chooser = manager.createScriptChooserPanel();
55 225
        chooser.showDialog();
56
        if( chooser.getAction()==WindowManager_v2.BUTTON_OK ) {
226
        if (chooser.getAction() == WindowManager_v2.BUTTON_OK) {
57 227
            Script theScript = chooser.getScript();
58
            if( theScript!=null ) {
228
            if (theScript != null) {
59 229
                this.add(theScript);
60 230
                this.fireChangeEvent();
61 231
            }
62 232
        }
63 233
    }
64
    
65
    private void  doRemoveScript() {
66
        int index = this.combo.getSelectedIndex();
67
        if( index < 0 ) {
234

  
235
    private void doRemoveScript() {
236
        int index = this.list.getSelectedIndex();
237
        if (index < 0) {
68 238
            return;
69 239
        }
70 240
        this.scripts.remove(index);
71
        rebuildCombo();
241
        rebuildList();
72 242
    }
73
    
243

  
74 244
    private void add(Script script) {
75 245
        this.scripts.add(script);
76
        this.rebuildCombo();
246
        this.rebuildList();
77 247
    }
78
    
248

  
79 249
    @Override
80 250
    public List<Script> get() {
81 251
        return this.scripts;
......
84 254
    @Override
85 255
    public void set(List<Script> value) {
86 256
        this.scripts = value;
87
        this.rebuildCombo();
257
        this.rebuildList();
88 258
    }
89 259

  
90 260
    @Override
91 261
    public void coerceAndSet(Object value) {
92
        if( value instanceof List ) {
262
        if (value instanceof List) {
93 263
            this.set((List<Script>) value);
94 264
            return;
95 265
        }
96 266
        String s = "null";
97
        if( value != null ) {
267
        if (value != null) {
98 268
            s = value.getClass().getName();
99 269
        }
100
        throw new IllegalArgumentException("Can't coerce '"+s+"' to List of scripts.");
270
        throw new IllegalArgumentException("Can't coerce '" + s + "' to List of scripts.");
101 271
    }
102 272

  
103 273
    @Override
104 274
    public void setEnabled(boolean enabled) {
105 275
        this.btnChooser.setEnabled(enabled);
106
        this.btnRemove.setEnabled(enabled);
107
        this.combo.setEnabled(enabled);
276
        this.list.setEnabled(enabled);
277
        if (enabled) {
278
            if (this.list.getSelectedIndex() >= 0) {
279
                this.btnRemove.setEnabled(true);
280
            } else {
281
                this.btnRemove.setEnabled(false);
282
            }
283
        } else {
284
            this.btnRemove.setEnabled(false);
285
        }
108 286
    }
109 287

  
110 288
    @Override
......
112 290
        return this.btnChooser.isEnabled();
113 291
    }
114 292

  
115
    private void rebuildCombo() {
116
        DefaultComboBoxModel model = new DefaultComboBoxModel();
117
        if( this.scripts!=null ) {
118
            for (Script script : scripts) {
119
                model.addElement(new ListElement(script.getName(), script));
293
    private void rebuildList() {
294
        SwingUtilities.invokeLater(new Runnable() {
295
            @Override
296
            public void run() {
297
                int n = list.getSelectedIndex();
298
                list.clearElements();
299
                if (scripts != null) {
300
                    String label;
301
                    for (Script script : scripts) {
302
                        if (script instanceof ScriptingUnit) {
303
                            label = ((ScriptingUnit) script).getUserPath();
304
                        } else {
305
                            label = script.getName();
306
                        }
307
                        list.addElement(new ListElement(label, script));
308
                    }
309
                }
310
                if( n>=0 && n<scripts.size() ) {
311
                    btnRemove.setEnabled(true);
312
                    list.setSelectedIndex(n);
313
                } else {
314
                    btnRemove.setEnabled(false);
315
                }
120 316
            }
121
        }
122
        this.combo.setModel(model);
317
        });
123 318
    }
124
    
319

  
125 320
}
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.swing/org.gvsig.scripting.swing.impl/src/main/java/org/gvsig/scripting/swing/impl/tools/ScriptPickerController.java
7 7
import java.awt.event.KeyEvent;
8 8
import javax.swing.JButton;
9 9
import javax.swing.JTextField;
10
import static javax.swing.UIManager.getIcon;
10
import org.gvsig.scripting.ScriptingUnit;
11 11
import org.gvsig.scripting.swing.api.ScriptingSwingLocator;
12 12
import org.gvsig.scripting.swing.api.ScriptingUIManager;
13
import org.gvsig.scripting.swing.impl.tools.ScriptSwingManager.ScriptChooserPanel;
14 13
import org.gvsig.tools.script.Script;
14
import org.gvsig.tools.swing.api.ToolsSwingLocator;
15
import org.gvsig.tools.swing.api.ToolsSwingManager;
15 16
import org.gvsig.tools.swing.api.pickercontroller.AbstractPickerController;
17
import org.gvsig.tools.swing.api.script.ScriptSwingManager.ScriptChooserPanel;
16 18
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
17 19

  
18 20
/**
......
23 25
    private Script script;
24 26
    private final JTextField txtText;
25 27
    private final JButton btnChooser;
26
    private final JButton btnClear;
27 28
    
28 29
    public ScriptPickerController(JTextField text, JButton chooser) {
29 30
        this.txtText = text;
30 31
        this.btnChooser = chooser;
31 32
        
33
        this.txtText.setEditable(false);
32 34
        this.btnChooser.setEnabled(true);
33 35
        this.btnChooser.setIcon(this.getIcon("picker-script"));
34 36
        this.btnChooser.setText("");
......
41 43
        this.txtText.addKeyListener(new KeyAdapter() {
42 44
            @Override
43 45
            public void keyPressed(KeyEvent e) {
44
                doClearScriptSelection();
46
                if( e.getKeyChar()==' ' || e.getKeyChar()==127 ) {
47
                    doClearScriptSelection();
48
                }
45 49
            }
46 50
        });
47
        this.btnClear = new JButton(getIcon("picker-cleartext"));
48
        btnClear.setBorderPainted( false );
49
        btnClear.setFocusPainted( false );
50
        btnClear.setContentAreaFilled( false );        
51
        btnClear.setOpaque(false);        
52
        btnClear.addActionListener(new ActionListener() {
51
        ToolsSwingManager manager = ToolsSwingLocator.getToolsSwingManager();
52
        manager.addClearButton(this.txtText, new ActionListener() {
53 53
            @Override
54 54
            public void actionPerformed(ActionEvent e) {
55 55
                doClearScriptSelection();
56 56
            }
57 57
        });
58
        this.txtText.setEditable(false);
59
        this.txtText.setLayout(new BorderLayout());
60
        this.txtText.add(btnClear, BorderLayout.EAST);        
58
        manager.setDefaultPopupMenu(this.txtText, "Script");
61 59
    }
62 60
    
63 61
    private void doClearScriptSelection() {
......
89 87
        if( value == null ) {
90 88
            this.txtText.setText("");
91 89
        } else {
92
            this.txtText.setText(script.getName());
90
            if( this.script instanceof ScriptingUnit ) {
91
                this.txtText.setText(((ScriptingUnit)script).getUserPath());
92
            } else {
93
                this.txtText.setText(script.getName());
94
            }
93 95
        }
94 96
    }
95 97

  
......
109 111
    @Override
110 112
    public void setEnabled(boolean enabled) {
111 113
        this.btnChooser.setEnabled(enabled);
112
        this.btnClear.setEnabled(enabled);
114
        this.txtText.setEnabled(enabled);
113 115
    }
114 116

  
115 117
    @Override
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.swing/org.gvsig.scripting.swing.impl/src/main/java/org/gvsig/scripting/swing/impl/tools/DefaultScriptChooserPanel.java
14 14
import org.gvsig.scripting.swing.api.JScriptingBrowser;
15 15
import org.gvsig.scripting.swing.api.ScriptingUIManager;
16 16
import org.gvsig.scripting.swing.impl.DefaultJScriptingBrowser;
17
import org.gvsig.scripting.swing.impl.tools.ScriptSwingManager.ScriptChooserPanel;
18 17
import org.gvsig.tools.ToolsLocator;
19 18
import org.gvsig.tools.i18n.I18nManager;
20 19
import org.gvsig.tools.script.Script;
21 20
import org.gvsig.tools.swing.api.ToolsSwingLocator;
21
import org.gvsig.tools.swing.api.script.ScriptSwingManager.ScriptChooserPanel;
22 22
import org.gvsig.tools.swing.api.windowmanager.Dialog;
23 23
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
24 24
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
......
94 94

  
95 95
    @Override
96 96
    public int getAction() {
97
        return WindowManager_v2.BUTTON_CANCEL;
97
        return this.action;
98 98
    }
99 99

  
100 100
    @Override
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.swing/org.gvsig.scripting.swing.impl/src/main/java/org/gvsig/scripting/swing/impl/ScriptingSwingDefaultSwingLibrary.java
4 4
import org.gvsig.scripting.swing.api.ScriptingSwingLocator;
5 5
import org.gvsig.tools.library.AbstractLibrary;
6 6
import org.gvsig.tools.library.LibraryException;
7
import org.gvsig.tools.swing.api.ToolsSwingLocator;
7 8

  
8 9
public class ScriptingSwingDefaultSwingLibrary extends AbstractLibrary {
9 10

  
......
14 15

  
15 16
    @Override
16 17
    protected void doInitialize() throws LibraryException {
17
        ScriptingSwingLocator
18
            .registerUIManager(DefaultScriptingUIManager.class);
18
        ScriptingSwingLocator.registerUIManager(DefaultScriptingUIManager.class);
19
        ToolsSwingLocator.registerScriptSwingManager(DefaultScriptingUIManager.class);
19 20
    }
20 21

  
21 22
    @Override

Also available in: Unified diff