Changeset 2616 in josm


Ignore:
Timestamp:
2009-12-12T11:58:05+01:00 (10 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.