Changeset 2616 in josm


Ignore:
Timestamp:
Dec 12, 2009 11:58:05 AM (4 years ago)
Author:
Gubaer
Message:

Completed Changeset List Dialog

See also online help

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java

    r2512 r2616  
    1515import org.openstreetmap.josm.Main; 
    1616import org.openstreetmap.josm.data.osm.OsmPrimitive; 
     17import org.openstreetmap.josm.gui.HelpAwareOptionPane; 
     18import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec; 
     19import org.openstreetmap.josm.gui.help.HelpUtil; 
     20import org.openstreetmap.josm.tools.ImageProvider; 
    1721import org.openstreetmap.josm.tools.OpenBrowser; 
    1822import org.openstreetmap.josm.tools.Shortcut; 
     
    7882    } 
    7983 
    80     protected boolean confirmLaunchMultiple(int numPrimitives) { 
     84    public static boolean confirmLaunchMultiple(int numBrowsers) { 
    8185        String msg  = tr( 
    8286                "You''re about to launch {0} browser windows.<br>" 
    8387                + "This may both clutter your screen with browser windows<br>" 
    84                 + "and take some time to finish.", numPrimitives); 
     88                + "and take some time to finish.", numBrowsers); 
    8589        msg = "<html>" + msg + "</html>"; 
    86         String [] options = new String [] { 
    87                 tr("Continue"), 
    88                 tr("Cancel") 
     90        ButtonSpec[] spec = new ButtonSpec[] { 
     91                new ButtonSpec( 
     92                        tr("Continue"), 
     93                        ImageProvider.get("ok"), 
     94                        tr("Click to continue and to open {0} browsers", numBrowsers), 
     95                        null // no specific help topic 
     96                ), 
     97                new ButtonSpec( 
     98                        tr("Cancel"), 
     99                        ImageProvider.get("cancel"), 
     100                        tr("Click to abort launching external browsers"), 
     101                        null // no specific help topic 
     102                ) 
    89103        }; 
    90         int ret = JOptionPane.showOptionDialog( 
     104        int ret = HelpAwareOptionPane.showOptionDialog( 
    91105                Main.parent, 
    92106                msg, 
    93107                tr("Warning"), 
    94                 JOptionPane.YES_NO_OPTION, 
    95108                JOptionPane.WARNING_MESSAGE, 
    96109                null, 
    97                 options, 
    98                 options[0] 
     110                spec, 
     111                spec[0], 
     112                HelpUtil.ht("/WarningMessages#ToManyBrowsersToOpen") 
    99113        ); 
    100         return ret == JOptionPane.YES_OPTION; 
     114        return ret == 0; 
    101115    } 
    102116 
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java

    r2613 r2616  
    1212import java.awt.event.MouseEvent; 
    1313import java.util.HashSet; 
     14import java.util.List; 
    1415import java.util.Set; 
    1516import java.util.logging.Logger; 
     
    2021import javax.swing.JList; 
    2122import javax.swing.JPanel; 
     23import javax.swing.JPopupMenu; 
    2224import javax.swing.JScrollPane; 
    2325import javax.swing.JToolBar; 
     
    2830 
    2931import org.openstreetmap.josm.Main; 
     32import org.openstreetmap.josm.actions.AbstractInfoAction; 
     33import org.openstreetmap.josm.data.osm.Changeset; 
    3034import org.openstreetmap.josm.data.osm.ChangesetCache; 
    3135import org.openstreetmap.josm.data.osm.DataSet; 
     
    3842import org.openstreetmap.josm.gui.dialogs.changeset.DownloadChangesetsTask; 
    3943import org.openstreetmap.josm.gui.help.HelpUtil; 
     44import org.openstreetmap.josm.gui.io.CloseChangesetTask; 
    4045import org.openstreetmap.josm.gui.layer.Layer; 
    4146import org.openstreetmap.josm.tools.ImageProvider; 
    42  
     47import org.openstreetmap.josm.tools.OpenBrowser; 
     48 
     49/** 
     50 * ChangesetDialog is a toggle dialog which displays the current list of changesets. 
     51 * It either displays 
     52 * <ul> 
     53 *   <li>the list of changesets the currently selected objects are assigned to</li> 
     54 *   <li>the list of changesets objects in the current data layer are assigend to</li> 
     55 * </ul> 
     56 *  
     57 * The dialog offers actions to download and to close changesets. It can also launch an external 
     58 * browser with information about a changeset. Furthermore, it can select all objects in 
     59 * the current data layer being assigned to a specific changeset. 
     60 *  
     61 */ 
    4362public class ChangesetDialog extends ToggleDialog{ 
    4463    static private final Logger logger = Logger.getLogger(ChangesetDialog.class.getName()); 
     
    5170    private JPanel pnlList; 
    5271 
     72    // the actions 
     73    private SelectObjectsAction selectObjectsAction; 
     74    private  ReadChangesetsAction readChangesetAction; 
     75    private ShowChangesetInfoAction showChangsetInfoAction; 
     76    private CloseOpenChangesetsAction closeChangesetAction; 
     77 
     78 
    5379    protected void buildChangesetsLists() { 
    5480        DefaultListSelectionModel selectionModel = new DefaultListSelectionModel(); 
     
    77103        lstInSelection.addMouseListener(dblClickHandler); 
    78104        lstInActiveDataLayer.addMouseListener(dblClickHandler); 
     105 
     106        PopupMenuLauncher popupMenuLauncher = new PopupMenuLauncher(); 
     107        lstInSelection.addMouseListener(popupMenuLauncher); 
     108        lstInActiveDataLayer.addMouseListener(popupMenuLauncher); 
    79109    } 
    80110 
     
    114144        tp.setFloatable(false); 
    115145 
    116         SelectObjectsAction selectObjectsAction = new SelectObjectsAction(); 
     146        // -- select objects action 
     147        selectObjectsAction = new SelectObjectsAction(); 
    117148        tp.add(selectObjectsAction); 
    118149        cbInSelectionOnly.addItemListener(selectObjectsAction); 
     
    120151        lstInSelection.getSelectionModel().addListSelectionListener(selectObjectsAction); 
    121152 
    122         ReadChangesetsAction readChangesetAction = new ReadChangesetsAction(); 
     153        // -- read changesets action 
     154        readChangesetAction = new ReadChangesetsAction(); 
    123155        tp.add(readChangesetAction); 
    124156        cbInSelectionOnly.addItemListener(readChangesetAction); 
    125157        lstInActiveDataLayer.getSelectionModel().addListSelectionListener(readChangesetAction); 
    126158        lstInSelection.getSelectionModel().addListSelectionListener(readChangesetAction); 
     159 
     160        // -- close changesets action 
     161        closeChangesetAction = new CloseOpenChangesetsAction(); 
     162        tp.add(closeChangesetAction); 
     163        cbInSelectionOnly.addItemListener(closeChangesetAction); 
     164        lstInActiveDataLayer.getSelectionModel().addListSelectionListener(closeChangesetAction); 
     165        lstInSelection.getSelectionModel().addListSelectionListener(closeChangesetAction); 
     166 
     167        // -- show info action 
     168        showChangsetInfoAction = new ShowChangesetInfoAction(); 
     169        tp.add(showChangsetInfoAction); 
     170        cbInSelectionOnly.addItemListener(showChangsetInfoAction); 
     171        lstInActiveDataLayer.getSelectionModel().addListSelectionListener(showChangsetInfoAction); 
     172        lstInSelection.getSelectionModel().addListSelectionListener(showChangsetInfoAction); 
    127173 
    128174        pnl.add(tp); 
     
    203249    } 
    204250 
     251    /** 
     252     * Selects objects for the currently selected changesets. 
     253     */ 
    205254    class SelectObjectsAction extends AbstractAction implements ListSelectionListener, ItemListener{ 
    206255 
     
    260309    } 
    261310 
     311    /** 
     312     * Downloads selected changesets 
     313     *  
     314     */ 
    262315    class ReadChangesetsAction extends AbstractAction implements ListSelectionListener, ItemListener{ 
    263316        public ReadChangesetsAction() { 
     
    291344    } 
    292345 
     346    /** 
     347     * Closes the currently selected changesets 
     348     *  
     349     */ 
     350    class CloseOpenChangesetsAction extends AbstractAction implements ListSelectionListener, ItemListener { 
     351        public CloseOpenChangesetsAction() { 
     352            putValue(NAME, tr("Close open changesets")); 
     353            putValue(SHORT_DESCRIPTION, tr("Closes the selected open changesets")); 
     354            putValue(SMALL_ICON, ImageProvider.get("closechangeset")); 
     355            updateEnabledState(); 
     356        } 
     357 
     358        public void actionPerformed(ActionEvent arg0) { 
     359            List<Changeset> sel = getCurrentChangesetListModel().getSelectedOpenChangesets(); 
     360            if (sel.isEmpty()) 
     361                return; 
     362            Main.worker.submit(new CloseChangesetTask(sel)); 
     363        } 
     364 
     365        protected void updateEnabledState() { 
     366            setEnabled(getCurrentChangesetListModel().hasSelectedOpenChangesets()); 
     367        } 
     368 
     369        public void itemStateChanged(ItemEvent arg0) { 
     370            updateEnabledState(); 
     371        } 
     372 
     373        public void valueChanged(ListSelectionEvent e) { 
     374            updateEnabledState(); 
     375        } 
     376    } 
     377 
     378    /** 
     379     * Show information about the currently selected changesets 
     380     *  
     381     */ 
     382    class ShowChangesetInfoAction extends AbstractAction implements ListSelectionListener, ItemListener { 
     383        public ShowChangesetInfoAction() { 
     384            putValue(NAME, tr("Show info")); 
     385            putValue(SHORT_DESCRIPTION, tr("Open a web page for each selected changeset")); 
     386            putValue(SMALL_ICON, ImageProvider.get("about")); 
     387            updateEnabledState(); 
     388        } 
     389 
     390        public void actionPerformed(ActionEvent arg0) { 
     391            Set<Changeset> sel = getCurrentChangesetListModel().getSelectedChangesets(); 
     392            if (sel.isEmpty()) 
     393                return; 
     394            if (sel.size() > 10 && ! AbstractInfoAction.confirmLaunchMultiple(sel.size())) 
     395                return; 
     396            String baseUrl = AbstractInfoAction.getBaseBrowseUrl(); 
     397            for (Changeset cs: sel) { 
     398                String url = baseUrl + "/changeset/" + cs.getId(); 
     399                OpenBrowser.displayUrl( 
     400                        url 
     401                ); 
     402            } 
     403        } 
     404 
     405        protected void updateEnabledState() { 
     406            setEnabled(getCurrentChangesetList().getSelectedIndices().length > 0); 
     407        } 
     408 
     409        public void itemStateChanged(ItemEvent arg0) { 
     410            updateEnabledState(); 
     411        } 
     412 
     413        public void valueChanged(ListSelectionEvent e) { 
     414            updateEnabledState(); 
     415        } 
     416    } 
     417 
     418    class PopupMenuLauncher extends MouseAdapter { 
     419        protected void showPopup(MouseEvent evt) { 
     420            if (!evt.isPopupTrigger()) 
     421                return; 
     422            JList lst = getCurrentChangesetList(); 
     423            if (lst.getSelectedIndices().length == 0) { 
     424                int idx = lst.locationToIndex(evt.getPoint()); 
     425                if (idx >=0) { 
     426                    lst.getSelectionModel().addSelectionInterval(idx, idx); 
     427                } 
     428            } 
     429            ChangesetDialogPopup popup = new ChangesetDialogPopup(); 
     430            popup.show(lst, evt.getX(), evt.getY()); 
     431 
     432        } 
     433        @Override 
     434        public void mouseClicked(MouseEvent evt) { 
     435            showPopup(evt); 
     436        } 
     437        @Override 
     438        public void mousePressed(MouseEvent evt) { 
     439            showPopup(evt); 
     440        } 
     441        @Override 
     442        public void mouseReleased(MouseEvent evt) { 
     443            showPopup(evt); 
     444        } 
     445    } 
     446 
     447    class ChangesetDialogPopup extends JPopupMenu { 
     448        public ChangesetDialogPopup() { 
     449            add(selectObjectsAction); 
     450            addSeparator(); 
     451            add(readChangesetAction); 
     452            add(closeChangesetAction); 
     453            addSeparator(); 
     454            add(showChangsetInfoAction); 
     455        } 
     456    } 
    293457} 
  • trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java

    r2613 r2616  
    162162    } 
    163163 
     164    /** 
     165     * Replies true if  there is at least one selected open changeset 
     166     *  
     167     * @return true if  there is at least one selected open changeset 
     168     */ 
     169    public boolean hasSelectedOpenChangesets() { 
     170        return !getSelectedOpenChangesets().isEmpty(); 
     171    } 
     172 
     173    /** 
     174     * Replies the selected open changesets 
     175     *  
     176     * @return the selected open changesets 
     177     */ 
     178    public List<Changeset> getSelectedOpenChangesets() { 
     179        List<Changeset> ret = new ArrayList<Changeset>(); 
     180        for (int i=0; i< getSize(); i++) { 
     181            if (selectionModel.isSelectedIndex(i)) { 
     182                Changeset cs = data.get(i); 
     183                if (cs.isOpen()) { 
     184                    ret.add(cs); 
     185                } 
     186            } 
     187        } 
     188        return ret; 
     189    } 
     190 
    164191    /* ---------------------------------------------------------------------------- */ 
    165192    /* Interface ChangesetCacheListener                                             */ 
Note: See TracChangeset for help on using the changeset viewer.