Ignore:
Timestamp:
2011-01-22T12:18:25+01:00 (14 years ago)
Author:
guggis
Message:

'Now caches compiled scripts, if possible. Fixes OutOfMemory when running groovy scripts.'

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/scripting/scripts/AddHouseNumbers.groovy

    r25019 r25107  
     1
    12/*
    23 * This scripts sets a sequence of house numbers on the currently selected nodes.
     
    67
    78import java.awt.BorderLayout;
     9import javax.swing.JComponent;
     10
     11import java.awt.event.KeyEvent;
     12
     13import javax.swing.KeyStroke;
    814
    915import groovy.swing.SwingBuilder;
     
    3036import javax.swing.JLabel;
    3137
     38import javax.swing.Action;
    3239import javax.swing.BorderFactory;
    3340import javax.swing.JTextField;
     
    3845
    3946class AddHouseNumberDialog extends JDialog {
     47       
     48        static private AddHouseNumberDialog instance;
     49        static def  AddHouseNumberDialog getInstance() {
     50                if (instance == null){
     51                        instance = new AddHouseNumberDialog()
     52                }
     53                return instance
     54        }
    4055       
    4156        private JTextField tfStart;
     
    5267                <html>
    5368                Enter the <strong>first house number</strong> to be applied to the currently selected nodes
    54                 and the amount by which the house number is <strong>incremented</strong>.
     69                and the <strong>increment</strong> between consecutive house numbers.
    5570                </html>
    5671                """
     
    6176                SwingBuilder swing = new SwingBuilder()
    6277                return swing.panel(){
     78                        emptyBorder([5,5,5,5],parent:true)
    6379                        gridBagLayout()
    6480                        label(text: "Start:",
     
    6783                        )
    6884                        tfStart = textField(constraints: gbc(gridx:1,gridy:0,weightx:1.0, weighty:0.0, fill: GridBagConstraints.HORIZONTAL, insets:[2,2,2,2]))
     85                        SelectAllOnFocusGainedDecorator.decorate(tfStart)
    6986                        label(text: "Increment:", horizontalAlignment: JLabel.LEFT, constraints: gbc(gridx:0,gridy:1,weightx:0.0, weighty:0.0, anchor: GridBagConstraints.WEST, insets:[2,2,2,2]))
    7087                        tfIncrement = textField(constraints: gbc(gridx:1,gridy:1,weightx:1.0, weighty:0.0, fill: GridBagConstraints.HORIZONTAL, anchor: GridBagConstraints.WEST, insets:[2,2,2,2]))
     88                        SelectAllOnFocusGainedDecorator.decorate(tfIncrement)
    7189                        panel(constraints: gbc(gridx:0,gridy:2,weightx:1.0, weighty:1.0, gridwidth:2, fill: GridBagConstraints.BOTH, insets:[2,2,2,2]))
     90                        tfIncrement.text = "2"
    7291                }
    7392        }
     
    7695                SwingBuilder swing = new SwingBuilder()
    7796                return swing.panel(layout: new FlowLayout(FlowLayout.CENTER)) {
     97                    def actApply = action(name: "Apply", smallIcon: ImageProvider.get("ok"), closure: {apply(); setVisible(false)})
     98                        def btnApply = button(action: actApply)
     99                        btnApply.setFocusable(true)
     100                        btnApply.registerKeyboardAction(actApply, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0, false), JComponent.WHEN_FOCUSED)
     101                                                       
    78102                        button(text: "Cancel", icon: ImageProvider.get("cancel"), actionPerformed: {setVisible(false)})
    79                         button(text: "Apply", icon: ImageProvider.get("ok"), actionPerformed: {
    80                                 apply()
    81                                 setVisible(false)
    82                         })
    83103                }
    84104        }
    85        
     105               
    86106        def apply() {
    87107                def start
     108                def incr
    88109                try {
    89110                        start = tfStart.text.trim().toInteger()
     111                        incr = tfIncrement.text.trim().toInteger()
    90112                } catch(NumberFormatException e){
    91113                        e.printStackTrace()
    92114                        return
    93115                }
    94                 def incr
    95                 try  {
    96                         incr = tfIncrement.text.trim().toInteger()
    97                 } catch(NumberFormatException e){
    98                         e.printStackTrace()
    99                         return
    100                 }
    101                 def nodes = getCurrentlySelectedNodes()
    102                 def cmds = []
    103                 nodes.each {Node n ->
     116                def cmds = getCurrentlySelectedNodes().collect { Node n ->
    104117                        Node nn = new Node(n)
    105118                        nn.put("addr:housenumber", start.toString())
    106119                        start += incr
    107                         cmds << new ChangeCommand(n, nn)                       
     120                        return new ChangeCommand(n, nn)                 
    108121                }
    109122                if (cmds.isEmpty()) return
     
    112125       
    113126        def build() {
    114                 setTitle("Set house numbers")
     127                title = "Set house numbers"
    115128                def cp = getContentPane()
    116129                cp.setLayout(new BorderLayout())
     
    121134       
    122135        def getCurrentDataSet() {
    123                 def layer = Main?.map?.mapView?.getActiveLayer()
     136                def layer = Main?.map?.mapView?.activeLayer
    124137                if (layer == null) return null
    125138                if (! (layer instanceof OsmDataLayer)) return null
     
    142155}
    143156
    144 def dialog = new AddHouseNumberDialog()
    145 dialog.setVisible(true)
     157AddHouseNumberDialog.instance.setVisible(true)
     158
Note: See TracChangeset for help on using the changeset viewer.