Statistics
| Revision:

gvsig-scripting / 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 @ 650

History | View | Annotate | Download (11 KB)

1
package org.gvsig.scripting.swing.impl;
2

    
3
import java.awt.BorderLayout;
4
import java.awt.Dimension;
5
import java.net.URL;
6
import java.net.URLClassLoader;
7
import java.util.Collection;
8
import java.util.HashMap;
9
import java.util.Locale;
10
import java.util.Map;
11
import javax.help.HelpSet;
12
import javax.help.HelpSetException;
13
import javax.help.JHelp;
14
import javax.help.ScriptingHelpModel;
15
import javax.swing.Action;
16
import javax.swing.ImageIcon;
17
import javax.swing.JComponent;
18
import javax.swing.JPanel;
19
import org.gvsig.about.AboutLocator;
20
import org.gvsig.about.AboutManager;
21
import org.gvsig.scripting.ScriptingDialog;
22
import org.gvsig.scripting.ScriptingFolder;
23
import org.gvsig.scripting.ScriptingHelpManager;
24
import org.gvsig.scripting.ScriptingLocator;
25
import org.gvsig.scripting.ScriptingManager;
26
import org.gvsig.scripting.ScriptingScript;
27
import org.gvsig.scripting.ScriptingUnit;
28
import org.gvsig.scripting.swing.api.JCodeEditor;
29
import org.gvsig.scripting.swing.api.JDialogEditor;
30
import org.gvsig.scripting.swing.api.JEditor;
31
import org.gvsig.scripting.swing.api.JScriptingBrowser;
32
import org.gvsig.scripting.swing.api.JScriptingComposer;
33
import org.gvsig.scripting.swing.api.JScriptingConsole;
34
import org.gvsig.scripting.swing.api.JScriptingLauncher;
35
import org.gvsig.scripting.swing.api.JThinG;
36
import org.gvsig.scripting.swing.api.JThinlet;
37
import org.gvsig.scripting.swing.api.ScriptingUIManager;
38
import org.gvsig.scripting.swing.api.SyntaxtHighlightTextComponent;
39
import org.gvsig.scripting.swing.impl.composer.DefaultJCodeEditor;
40
import org.gvsig.scripting.swing.impl.composer.DefaultJDialogEditor;
41
import org.gvsig.scripting.swing.impl.composer.DefaultJScriptingComposer;
42
import org.gvsig.scripting.swing.impl.syntaxhighlight.JEditorPaneSyntaxHighlighting;
43
import org.gvsig.scripting.swing.impl.syntaxhighlight.JRSyntaxTextArea;
44
import org.gvsig.tools.ToolsLocator;
45
import org.gvsig.tools.i18n.I18nManager;
46
import org.gvsig.tools.swing.api.ToolsSwingLocator;
47
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
48
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
49
import org.slf4j.Logger;
50
import org.slf4j.LoggerFactory;
51

    
52
public class DefaultScriptingUIManager implements ScriptingUIManager {
53

    
54
    private final static Logger logger = LoggerFactory.getLogger(DefaultScriptingUIManager.class);
55
    
56
    private final ScriptingManager manager;
57
    private final Map<String, URL> userHelps = new HashMap<>();
58
    private I18nManager i18nManager;
59
    private WindowManager windowsManager = null;
60
    private final Map<String,Action> composerTools = new HashMap<>();
61
    private final Map<String,MenuEntry> composerMenus = new HashMap<>();
62
    private JScriptingComposer activeComposer;
63
    
64
    private static class DefaultMenuEntry implements MenuEntry {
65
        private final Action action;
66
        private final String text;
67

    
68
        public DefaultMenuEntry(String text, Action action) {
69
            this.text = text;
70
            this.action = action;
71
        }
72

    
73
        @Override
74
        public String getText() {
75
            return this.text;
76
        }
77

    
78
        @Override
79
        public Action getAction() {
80
            return this.action;
81
        }
82
        
83
    }
84
    public DefaultScriptingUIManager() {
85

    
86
        this.manager = ScriptingLocator.getManager();
87
        this.manager.put("ScriptingUIManager", this);
88

    
89
        this.i18nManager = ToolsLocator.getI18nManager();
90
    }
91

    
92
    @Override
93
    public JScriptingComposer createComposer() {
94
        return new DefaultJScriptingComposer(this);
95
    }
96

    
97
    @Override
98
    public JPanel createInstaller() {
99
        // TODO Auto-generated method stub
100
        return null;
101
    }
102

    
103
    @Override
104
    public JScriptingLauncher createLauncher() {
105
        return new DefaultJScriptingLauncher(this);
106
    }
107

    
108
    @Override
109
    public ImageIcon getIcon(String name) {
110
        return this.getIcon(name, null);
111
    }
112

    
113
    @Override
114
    public ImageIcon getIcon(String name, String size) {
115
        if (name == null) {
116
            return new ImageIcon();
117
        }
118
        String tamanyo = "16x16/";
119
        if (size != null && size.equals("big")) {
120
            tamanyo = "32x32/";
121
        }
122
        ClassLoader loader = this.getClass().getClassLoader();
123
        URL url = loader.getResource("org/gvsig/scripting/images/" + tamanyo + name + ".png");
124
        if (url == null) {
125
            url = loader.getResource("org/gvsig/scripting/images/" + tamanyo + "image-missing.png");
126
        }
127
        if (url == null) {
128
            return new ImageIcon();
129
        }
130
        return new ImageIcon(url);
131
    }
132

    
133
    @Override
134
    public ScriptingManager getManager() {
135
        return this.manager;
136
    }
137

    
138
    @Override
139
    public JPanel getHelp() {
140
        JPanel panel = new JPanel();
141
        panel.setLayout(new BorderLayout());
142
        ScriptingHelpManager helpManager = this.getManager().getHelpManager();
143
        HelpSet hs = helpManager.getHelpSet();
144
        JHelp jhelp = new JHelp(
145
                new ScriptingHelpModel(hs, helpManager),
146
                null,
147
                hs.getDefaultPresentation()
148
        );
149
        panel.add(jhelp, BorderLayout.CENTER);
150
        panel.setPreferredSize(new Dimension(800, 600));
151
        return panel;
152
    }
153

    
154
    public String[] getPrerreferedLanguages() {
155
        String curr = Locale.getDefault().getLanguage().toLowerCase();
156
        if (curr.equals("gl")) {
157
            return new String[]{"gl", "es", "en"};
158
        }
159
        if (curr.equals("ca")) {
160
            return new String[]{"ca", "es", "en"};
161
        }
162
        if (curr.equals("eu")) {
163
            return new String[]{"eu", "es", "en"};
164
        }
165
        if (curr.equals("va")) {
166
            return new String[]{"va", "ca", "es", "en"};
167
        }
168
        return new String[]{curr, "en", "es"};
169
    }
170

    
171
    @Override
172
    public JPanel getUserHelp() {
173
        String[] langs = this.getPrerreferedLanguages();
174
        URL url = null;
175
        for (String lang : langs) {
176
            url = this.userHelps.get(lang);
177
            if (url != null) {
178
                break;
179
            }
180
        }
181

    
182
        if (url == null) {
183
            logger.warn("Can't have help");
184
            return null;
185
        }
186

    
187
        URL[] urls = new URL[1];
188
        urls[0] = url;
189
        ClassLoader loader = new URLClassLoader(urls, this.getClass().getClassLoader());
190

    
191
        HelpSet helpSet;
192
        try {
193
            URL resource;
194
            resource = loader.getResource("org/gvsig/scripting/help/help.hs");
195

    
196
            helpSet = new HelpSet(loader, resource);
197
        } catch (HelpSetException e) {
198
            logger.warn("Can't load helpset '" + url.toString() + "'.", e);
199
            return null;
200
        }
201

    
202
        JPanel panel = new JPanel();
203
        panel.setLayout(new BorderLayout());
204
        panel.add(new JHelp(helpSet), BorderLayout.CENTER);
205
        panel.setPreferredSize(new Dimension(800, 600));
206
        return panel;
207

    
208
    }
209

    
210
    @Override
211
    public void addUserHelp(String langName, URL resource) {
212
        this.userHelps.put(langName.toLowerCase(), resource);
213
    }
214

    
215
    @Override
216
    public AboutManager getAboutManager() {
217
        return AboutLocator.getManager();
218
    }
219

    
220
    private void showWindow(JComponent panel, String title, WindowManager.MODE mode) {
221
        WindowManager winmanager = this.getWindowManager();
222
        if( winmanager instanceof WindowManager_v2 ) {
223
            ((WindowManager_v2)winmanager).showWindow(panel, title, mode, getIcon("scripting_python").getImage());
224
        } else {
225
            winmanager.showWindow(panel, title, mode);
226
        }
227
    }
228
    
229
    @Override
230
    public void showDialog(JComponent panel, String title) {
231
        this.showWindow(panel, title, WindowManager.MODE.DIALOG);
232
    }
233

    
234
    @Override
235
    public void showWindow(JComponent panel, String title) {
236
        this.showWindow(panel, title, WindowManager.MODE.WINDOW);
237
    }
238

    
239
    @Override
240
    public void showTool(JComponent panel, String title) {
241
        this.showWindow(panel, title, WindowManager.MODE.TOOL);
242
    }
243

    
244
    @Override
245
    public JScriptingBrowser createBrowser(ScriptingFolder root, boolean foldersOnly) {
246
        return new DefaultJScriptingBrowser(this, root, foldersOnly);
247
    }
248

    
249
    @Override
250
    public JScriptingBrowser createBrowser(ScriptingFolder root) {
251
        return new DefaultJScriptingBrowser(this, root, false);
252
    }
253

    
254
    @Override
255
    public JCodeEditor createJCodeEditor(ScriptingScript script) {
256
        return new DefaultJCodeEditor(this, script);
257
    }
258

    
259
    @Override
260
    public JDialogEditor createJDialogEditor(ScriptingDialog script) {
261
        return new DefaultJDialogEditor(this, script);
262
    }
263

    
264
    @Override
265
    public JThinG createJThinG() {
266
        JThinG thing = new DefaultJThinG();
267
        return thing;
268
    }
269

    
270
    @Override
271
    public JThinlet createJThinlet() {
272
        JThinlet thinlet = new DefaultJThinlet();
273
        return thinlet;
274
    }
275

    
276
    @Override
277
    public SyntaxtHighlightTextComponent createSyntaxHighlightingPanel() {
278
        try {
279
            return new JRSyntaxTextArea();
280
        } catch (Throwable t) {
281
            logger.info("Can't create advanced SyntaxHighlightingPanel.", t);
282
            return new JEditorPaneSyntaxHighlighting();
283
        }
284
    }
285

    
286
    @Override
287
    public String getTranslation(String key) {
288
        if (this.i18nManager == null) {
289
            this.i18nManager = ToolsLocator.getI18nManager();
290
        }
291
        return i18nManager.getTranslation(key);
292
    }
293

    
294
    @Override
295
    public WindowManager getWindowManager() {
296
        if( this.windowsManager==null ) {
297
            this.windowsManager = ToolsSwingLocator.getWindowManager();
298
        }
299
        return this.windowsManager;
300
    }
301

    
302
    @Override
303
    public void setWindowManager(WindowManager windowsManager) {
304
        this.windowsManager = windowsManager;
305
    }
306

    
307
    @Override
308
    public JScriptingConsole createJScriptingConsole() {
309
        return new DefaultJScriptingConsole(true);
310
    }
311

    
312
    @Override
313
    public JScriptingConsole createJScriptingConsole(boolean captureOutput) {
314
        return new DefaultJScriptingConsole(captureOutput);
315
    }
316

    
317
    @Override
318
    public void addComposerMenu(String text, Action action) {
319
        String name = (String) action.getValue(Action.ACTION_COMMAND_KEY);
320
        this.composerMenus.put(name,new DefaultMenuEntry(text,action));
321
    }
322

    
323
    @Override
324
    public void addComposerTool(Action action) {
325
        String name = (String) action.getValue(Action.ACTION_COMMAND_KEY);
326
        this.composerTools.put(name,action);
327
    }
328

    
329
    @Override
330
    public Collection<MenuEntry> getComposerMenus() {
331
        return this.composerMenus.values();
332
    }
333

    
334
    @Override
335
    public Collection<Action> getComposerTools() {
336
        return this.composerTools.values();
337
    }
338
    
339
    @Override
340
    public JEditor createEditor(ScriptingUnit unit) {
341
        if( unit instanceof ScriptingDialog ) {
342
            return new DefaultJDialogEditor(this, (ScriptingDialog) unit);
343
        }
344
        if( unit instanceof ScriptingScript ) {
345
            return new DefaultJCodeEditor(this, (ScriptingScript) unit);
346
        }
347
        return null;
348
    }
349

    
350
    public void setActiveComposer(JScriptingComposer composer) {
351
        this.activeComposer = composer;
352
    }
353
    
354
    public JScriptingComposer getActiveComposer() {
355
        return this.activeComposer;
356
    }
357
    
358
}