001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.dialogs.relation.actions;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.awt.Dialog;
007import java.awt.event.ActionEvent;
008import java.awt.event.KeyEvent;
009
010import org.openstreetmap.josm.Main;
011import org.openstreetmap.josm.gui.MainApplication;
012import org.openstreetmap.josm.gui.dialogs.relation.DownloadRelationMemberTask;
013import org.openstreetmap.josm.tools.ImageProvider;
014import org.openstreetmap.josm.tools.Shortcut;
015
016/**
017 * Download all incomplete members.
018 * @since 9496
019 */
020public class DownloadIncompleteMembersAction extends AbstractRelationEditorAction {
021    private static final long serialVersionUID = 1L;
022
023    /**
024     * Constructs a new {@code DownloadIncompleteMembersAction}.
025     * @param editorAccess An interface to access the relation editor contents.
026     * @param actionMapKey action map key
027     */
028    public DownloadIncompleteMembersAction(IRelationEditorActionAccess editorAccess, String actionMapKey) {
029        super(editorAccess, actionMapKey, IRelationEditorUpdateOn.MEMBER_TABLE_CHANGE);
030        Shortcut sc = Shortcut.registerShortcut("relationeditor:downloadincomplete", tr("Relation Editor: Download Members"),
031            KeyEvent.VK_HOME, Shortcut.ALT);
032        sc.setAccelerator(this);
033        putValue(SHORT_DESCRIPTION, Main.platform.makeTooltip(tr("Download all incomplete members"), sc));
034        new ImageProvider("dialogs/relation", "downloadincomplete").getResource().attachImageIcon(this, true);
035        putValue(NAME, tr("Download members"));
036        updateEnabledState();
037    }
038
039    @Override
040    public void actionPerformed(ActionEvent e) {
041        if (!isEnabled())
042            return;
043        MainApplication.worker.submit(new DownloadRelationMemberTask(
044                getEditor().getRelation(),
045                getMemberTableModel().getIncompleteMemberPrimitives(),
046                getLayer(),
047                (Dialog) getEditor())
048        );
049    }
050
051    @Override
052    protected void updateEnabledState() {
053        setEnabled(getMemberTableModel().hasIncompleteMembers() && canDownload());
054    }
055}