001package jmri.jmrit.logixng.tools.swing;
002
003import java.awt.event.*;
004import java.util.*;
005import java.util.List;
006
007import javax.swing.JMenu;
008import javax.swing.JMenuItem;
009import javax.swing.tree.TreePath;
010
011import jmri.InstanceManager;
012import jmri.jmrit.logixng.*;
013
014/**
015 * Editor of the clipboard
016 *
017 * @author Daniel Bergqvist 2020
018 */
019public class ClipboardEditor extends TreeEditor {
020
021    /**
022     * Maintain a list of listeners -- normally only one.
023     */
024    private final List<ClipboardEventListener> listenerList = new ArrayList<>();
025
026    /**
027     * This contains a list of commands to be processed by the listener
028     * recipient.
029     */
030    final HashMap<String, String> clipboardData = new HashMap<>();
031
032    /**
033     * Construct a ConditionalEditor.
034     */
035    public ClipboardEditor() {
036        super(InstanceManager.getDefault(LogixNG_Manager.class).getClipboard().getFemaleSocket(),
037                EnableClipboard.DisableClipboard,
038                EnableRootRemoveCutCopy.EnableRootRemoveCutCopy,
039                EnableRootPopup.DisableRootPopup,
040                EnableExecuteEvaluate.DisableExecuteEvaluate,
041                EnableChangeUsernameForRoot.DisableChangeUsername
042        );
043
044        ClipboardEditor.this.setTitle(Bundle.getMessage("TitleClipboardEditor"));
045
046        ClipboardEditor.this.setRootVisible(false);
047    }
048
049    /** {@inheritDoc} */
050    @Override
051    protected void addExtraItemsToToolsMenu(JMenu toolsMenu) {
052        JMenuItem openClipboardItem = new JMenuItem(Bundle.getMessage("MenuClearClipboard"));
053        openClipboardItem.addActionListener((ActionEvent e) -> {
054            FemaleSocket clipboardFemaleSocket =
055                    InstanceManager.getDefault(LogixNG_Manager.class).getClipboard().getFemaleSocket();
056            DeleteBeanWorker worker = new DeleteBeanWorker(
057                    clipboardFemaleSocket,
058                    new TreePath(new Object[]{ _treePane._tree.getModel().getRoot() }),
059                    true,   // Delete only the children
060                    Bundle.getMessage("ClearClipboardPrompt"));
061            worker.execute();
062        });
063        toolsMenu.add(openClipboardItem);
064    }
065
066    /** {@inheritDoc} */
067    @Override
068    public void windowClosed(WindowEvent e) {
069        clipboardData.clear();
070        clipboardData.put("Finish", "Clipboard");  // NOI18N
071        fireClipboardEvent();
072    }
073
074    public void addClipboardEventListener(ClipboardEventListener listener) {
075        listenerList.add(listener);
076    }
077
078    /**
079     * Notify the listeners to check for new data.
080     */
081    void fireClipboardEvent() {
082        for (ClipboardEventListener l : listenerList) {
083            l.clipboardEventOccurred();
084        }
085    }
086
087
088    public interface ClipboardEventListener extends EventListener {
089
090        public void clipboardEventOccurred();
091    }
092
093
094//    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ClipboardEditor.class);
095
096}