Ignore:
Timestamp:
2011-01-16T18:25:29+01:00 (14 years ago)
Author:
guggis
Message:

Configure scripting engines in the JOSM preferences.

Location:
applications/editors/josm/plugins/scripting/src/org/openstreetmap/josm/plugins/scripting
Files:
12 added
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/scripting/src/org/openstreetmap/josm/plugins/scripting/RunScriptDialog.java

    r25019 r25071  
    1414import java.io.FileReader;
    1515import java.io.IOException;
     16import java.net.MalformedURLException;
     17import java.net.URL;
     18import java.net.URLClassLoader;
    1619import java.util.Collections;
    1720import java.util.LinkedList;
     
    175178                         */
    176179                        String currentFile = cbScriptFile.getText();
    177                         Main.pref.put(PREF_KEY_FILE_HISTORY, currentFile.trim());
    178                         Main.pref.putCollection(PREF_KEY_LAST_FILE, cbScriptFile.getHistory());                 
     180                        Main.pref.put(PREF_KEY_LAST_FILE, currentFile.trim());
     181                        Main.pref.putCollection(PREF_KEY_FILE_HISTORY, cbScriptFile.getHistory());                     
    179182                }
    180183                super.setVisible(visible);
     
    272275               
    273276                protected ScriptEngine getScriptEngine(File file) {
    274                         ScriptEngineManager mgr = new ScriptEngineManager(getClass().getClassLoader());
    275                         Matcher matcher = Pattern.compile("\\.([^\\.]+)$").matcher(file.toString());
     277                        ScriptEngine engine = ScriptEngineProvider.getInstance().getEngineForFile(file);
     278                        if (engine != null) return engine;
    276279                       
    277                         // can we derive a suitable script engine from the file name?                   
    278                         MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();
    279                         // FIXME: provide a resources file for script mime types; provide an editor
    280                         // for these mappings in the preferences
    281                         mimeTypesMap.addMimeTypes("application/x-groovy groovy");
    282                         String mt = mimeTypesMap.getContentType(file);
    283                         if (mt != null){
    284                                 ScriptEngine engine = mgr.getEngineByMimeType(mt);
    285                                 if (engine != null) return engine;     
    286                         }
    287                        
    288                         // no script engine at all? Abort.
    289                         List<ScriptEngineFactory> factories = mgr.getEngineFactories();
    290                         if (factories.isEmpty()) {
    291                                 warnNoScriptingEnginesInstalled();
    292                                 return null;
    293                         }
    294280                        // let the user select a script engine
    295281                        return ScriptEngineSelectionDialog.select(RunScriptDialog.this);
  • applications/editors/josm/plugins/scripting/src/org/openstreetmap/josm/plugins/scripting/ScriptEngineSelectionDialog.java

    r25019 r25071  
    1313import java.awt.event.MouseAdapter;
    1414import java.awt.event.MouseEvent;
    15 import java.util.ArrayList;
    16 import java.util.Collections;
    17 import java.util.Comparator;
    1815import java.util.List;
    1916
    2017import javax.script.ScriptEngine;
    2118import javax.script.ScriptEngineFactory;
    22 import javax.script.ScriptEngineManager;
    2319import javax.swing.AbstractAction;
    24 import javax.swing.AbstractListModel;
    2520import javax.swing.BorderFactory;
    2621import javax.swing.JButton;
     
    4540import org.openstreetmap.josm.tools.ImageProvider;
    4641import org.openstreetmap.josm.tools.WindowGeometry;
     42import org.openstreetmap.josm.plugins.scripting.ui.ScriptEngineCellRenderer;
    4743
    4844/**
     
    8177        private JButton btnOK;
    8278        private ScriptEngine selectedEngine;
    83         private ScriptEngineListModel model;
     79        private ScriptEngineProvider model;
    8480        private OKAction actOK;
    8581       
     
    137133        protected JPanel buildScriptEngineListPanel() {
    138134                JPanel pnl = new JPanel(new BorderLayout());
    139                 lstEngines = new JList(model = new ScriptEngineListModel());
     135                lstEngines = new JList(model = ScriptEngineProvider.getInstance());
    140136                lstEngines.setCellRenderer(new ScriptEngineCellRenderer());
    141137                pnl.add(lstEngines, BorderLayout.CENTER);
     
    222218                super.setVisible(visible);
    223219        }
    224 
    225         /**
    226          * <p>Provides a list model for the list of available script engines.</p>
    227          */
    228         private static class ScriptEngineListModel extends AbstractListModel {
    229                
    230                 private List<ScriptEngineFactory> factories;
    231                
    232                 public ScriptEngineListModel(){
    233                         ScriptEngineManager mgr = new ScriptEngineManager(getClass().getClassLoader());
    234                         factories = new ArrayList<ScriptEngineFactory>(mgr.getEngineFactories());
    235                         Collections.sort(factories,
    236                                         new Comparator<ScriptEngineFactory>() {
    237                                                 @Override
    238                                                 public int compare(ScriptEngineFactory f1, ScriptEngineFactory f2) {
    239                                                         return f1.getEngineName().compareTo(f2.getEngineName());
    240                                                 }
    241                                         }
    242                         );     
    243                 }
    244                                
    245                 /**
    246                  * <p>Replies a script engine created by the i-th script engine factory.</p>
    247                  *
    248                  * @param i the index
    249                  * @return the engine
    250                  */
    251                 public ScriptEngine getScriptEngine(int i){
    252                         ScriptEngine engine = factories.get(i).getScriptEngine();
    253                         return engine;
    254                 }
    255 
    256                 @Override
    257                 public Object getElementAt(int i) {
    258                         return factories.get(i);
    259                 }
    260 
    261                 @Override
    262                 public int getSize() {
    263                         return factories.size();
    264                 }               
    265         }
    266        
    267         /**
    268          * <p>Implements a list cell renderer for the list of scripting engines.</p>
    269          *
    270          */
    271         private static class ScriptEngineCellRenderer implements ListCellRenderer {
    272 
    273                 private final JLabel lbl = new JLabel();
    274                
    275                 protected String getDisplayName(ScriptEngineFactory factory){
    276                         return tr("{1} (with engine {0})", factory.getEngineName(), factory.getLanguageName());
    277                 }
    278                
    279                 protected String getTooltipText(ScriptEngineFactory factory){
    280                         StringBuilder sb = new StringBuilder();
    281                         sb.append("<html>");
    282                         sb.append("<strong>").append(tr("Name:")).append("</strong> ").append(factory.getEngineName()).append("<br>");
    283                         sb.append("<strong>").append(tr("Version:")).append("</strong> ").append(factory.getEngineVersion()).append("<br>");
    284                         sb.append("<strong>").append(tr("Language:")).append("</strong> ").append(factory.getLanguageName()).append("<br>");
    285                         sb.append("<strong>").append(tr("Language version:")).append("</strong> ").append(factory.getLanguageVersion()).append("<br>");
    286                         sb.append("<strong>").append(tr("MIME-Types:")).append("</strong> ");
    287                         List<String> types = factory.getMimeTypes();
    288                         for(int i=0; i<types.size(); i++){
    289                                 if (i > 0 )sb.append(", ");
    290                                 sb.append(types.get(i));
    291                         }
    292                         sb.append("<br>");
    293                         sb.append("</html>");
    294                        
    295                         return sb.toString();
    296                 }
    297                
    298                 protected void renderColors(boolean selected){
    299                         if (!selected){
    300                                 lbl.setForeground(UIManager.getColor("List.foreground"));
    301                                 lbl.setBackground(UIManager.getColor("List.background"));
    302                         } else {
    303                                 lbl.setForeground(UIManager.getColor("List.selectionForeground"));
    304                                 lbl.setBackground(UIManager.getColor("List.selectionBackground"));
    305                         }
    306                 }
    307                
    308                 public ScriptEngineCellRenderer() {             
    309                         lbl.setOpaque(true);
    310                         lbl.setBorder(BorderFactory.createEmptyBorder(1, 3, 1, 3));
    311                         lbl.setIcon(ImageProvider.get("script-engine"));
    312                 }
    313                
    314                 @Override
    315                 public Component getListCellRendererComponent(JList list, Object obj,int index, boolean isSelected, boolean cellHasFocus) {
    316                         ScriptEngineFactory factory = (ScriptEngineFactory)obj;
    317                         renderColors(isSelected);
    318                         lbl.setText(getDisplayName(factory));
    319                         lbl.setToolTipText(getTooltipText(factory));
    320                         return lbl;
    321                 }               
    322         }
    323220}
  • applications/editors/josm/plugins/scripting/src/org/openstreetmap/josm/plugins/scripting/ScriptingPlugin.java

    r25019 r25071  
    11package org.openstreetmap.josm.plugins.scripting;
    22
     3import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
    34import static org.openstreetmap.josm.tools.I18n.tr;
    45
     6import java.awt.event.KeyEvent;
     7
    58import javax.swing.JMenu;
     9import javax.swing.JSeparator;
    610
    711import org.openstreetmap.josm.Main;
     12import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
    813import org.openstreetmap.josm.plugins.Plugin;
    914import org.openstreetmap.josm.plugins.PluginInformation;
     15import org.openstreetmap.josm.plugins.scripting.preferences.ConfigureAction;
     16import org.openstreetmap.josm.plugins.scripting.preferences.PreferenceEditor;
    1017
    1118public class ScriptingPlugin extends Plugin {
     
    1421       
    1522        public static ScriptingPlugin getInstance() {
    16                 return instance;
    17        
     23                return instance;       
    1824        }
    1925       
     
    2632        protected void installScriptsMenu(){
    2733                JMenu mnuMacro;
    28                 Main.main.menu.add(mnuMacro = new JMenu(tr("Scripts")));
     34                mnuMacro = Main.main.menu.addMenu(tr("Scripting"), KeyEvent.VK_S, Main.main.menu.defaultMenuPos, ht("/Plugin/Scripting"));
    2935                mnuMacro.setMnemonic('S');
    30                 mnuMacro.add(new RunScriptAction());           
     36                mnuMacro.add(new RunScriptAction());
     37                mnuMacro.add(new JSeparator());
     38                mnuMacro.add(new ConfigureAction());
     39        }
     40
     41        @Override
     42        public PreferenceSetting getPreferenceSetting() {
     43                return new PreferenceEditor();
    3144        }
    3245}
Note: See TracChangeset for help on using the changeset viewer.