Ignore:
Timestamp:
2009-12-12T11:58:05+01:00 (14 years ago)
Author:
Gubaer
Message:

Completed Changeset List Dialog

See also online help

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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}
Note: See TracChangeset for help on using the changeset viewer.