001package jmri.jmrix.openlcb.swing;
002
003import java.awt.event.*;
004
005import jmri.util.swing.*;
006import jmri.jmrix.can.CanSystemConnectionMemo;
007import jmri.jmrix.openlcb.OlcbAddress;
008
009import org.openlcb.swing.EventIdTextField;
010
011/**
012 * This is an entry field for Event IDs that also 
013 * accepts event names
014 *
015 * @author Bob Jacobsen  (C) 2024
016 */
017public class NamedEventIdTextField extends OvertypeTextArea {
018        
019    public NamedEventIdTextField(CanSystemConnectionMemo memo) {
020        this(23, memo);  // heuristically-found default size
021    }
022
023    public NamedEventIdTextField(int size, CanSystemConnectionMemo memo) {
024        super(size);
025        this.memo = memo;
026        
027        // set up semi-automatic tool tip
028        addMouseListener(JmriMouseListener.adapt(new JmriMouseListener() {
029            @Override
030            public void mouseEntered(JmriMouseEvent arg0) {
031                // Generate dynamic tooltip text here
032                setToolTipText(makeToolTipText(getText()));
033            }
034
035            @Override public void mouseClicked(JmriMouseEvent e) {}
036            @Override public void mouseExited(JmriMouseEvent arg0) {}
037            @Override public void mousePressed(JmriMouseEvent arg0) {}
038            @Override public void mouseReleased(JmriMouseEvent arg0) {}
039        }));
040
041        // Add a focus listener to update the tooltip dynamically
042        addFocusListener(new FocusListener() {
043            @Override
044            public void focusGained(FocusEvent e) {
045                setToolTipText(makeToolTipText(getText()));
046            }
047
048            @Override public void focusLost(FocusEvent e) {}
049        });
050
051        EventIdTextField.configurePopUp(this);
052        
053    }
054
055    final CanSystemConnectionMemo memo;
056    
057    protected String makeToolTipText(String fieldText) {
058        var address = new OlcbAddress(fieldText, memo);
059        if (address.isFromName()) {
060            return fieldText+" is "+address.toDottedString();
061        }
062        return "Enter an event ID or event name";
063    }    
064    
065    // private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(NamedEventIdTextField.class);
066}