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}