001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.util;
003
004import java.util.List;
005
006import javax.swing.Action;
007
008import org.openstreetmap.josm.tools.Shortcut;
009
010/**
011 * Action implementing a multikey shortcut - shortcuts like Ctrl+Alt+S,n will toggle n-th layer visibility.
012 * @since 4595
013 */
014public interface MultikeyShortcutAction extends Action {
015
016    class MultikeyInfo {
017        private final int index;
018        private final String description;
019
020        public MultikeyInfo(int index, String description) {
021            this.index = index;
022            this.description = description;
023        }
024
025        public int getIndex() {
026            return index;
027        }
028
029        public char getShortcut() {
030            if (index < 9)
031                return (char) ('1' + index);
032            else if (index == 9)
033                return '0';
034            else
035                return (char) ('A' + index - 10);
036        }
037
038        public String getDescription() {
039            return description;
040        }
041    }
042
043    Shortcut getMultikeyShortcut();
044
045    void executeMultikeyAction(int index, boolean repeatLastAction);
046
047    List<MultikeyInfo> getMultikeyCombinations();
048
049    MultikeyInfo getLastMultikeyAction();
050
051}