001package jmri.jmrix.dccpp.swing.virtuallcd;
002
003import java.awt.event.ActionEvent;
004
005import javax.annotation.Nonnull;
006import javax.swing.AbstractAction;
007import javax.swing.JPopupMenu;
008
009import jmri.jmrit.display.*;
010
011/**
012 * A VirtualLCD that can be put on a panel.
013 *
014 * @author Daniel Bergqvist (C) 2026
015 */
016public class VirtualLcdPositionable extends PositionableJComponent {
017
018    private final VirtualLCDPanel virtualLCDPanel;
019
020    public VirtualLcdPositionable(Editor editor) {
021        super(editor);
022        virtualLCDPanel = new VirtualLCDPanel(editor, this, true);
023    }
024
025    public void initComponents() {
026        virtualLCDPanel.initComponents();
027        this.setSize(100,20);
028        virtualLCDPanel.setSize(100,20);
029        add(virtualLCDPanel);
030    }
031
032    @Override
033    public Positionable deepClone() {
034        VirtualLcdPositionable pos = new VirtualLcdPositionable(_editor);
035        pos.virtualLCDPanel.setMemo(virtualLCDPanel.getMemo());
036        pos.virtualLCDPanel.setDisplayConfig(virtualLCDPanel.getDisplayConfig());
037        pos.virtualLCDPanel.setDisplayNo(virtualLCDPanel.getDisplayNo());
038        pos.virtualLCDPanel.setMinDisplayNo(virtualLCDPanel.getMinDisplayNo());
039        pos.virtualLCDPanel.setMaxDisplayNo(virtualLCDPanel.getMaxDisplayNo());
040        pos.virtualLCDPanel.setSelectedDisplays(virtualLCDPanel.getSelectedDisplays());
041        pos.initComponents();
042        return finishClone(pos);
043    }
044/*
045    protected Positionable finishClone(AnalogClock2Display pos) {
046        return super.finishClone(pos);
047    }
048*/
049    public VirtualLCDPanel getVirtualLCDPanel() {
050        return virtualLCDPanel;
051    }
052
053    /**
054     * Pop-up just displays the sensor name.
055     *
056     * @param popup the menu to display
057     * @return always true
058     */
059    @Override
060    public boolean showPopUp(JPopupMenu popup) {
061        if (isEditable()) {
062            popup.add(new AbstractAction(Bundle.getMessage("EditVirtualLCD")) {
063                @Override
064                public void actionPerformed(ActionEvent e) {
065                    ConfigureVirtualLCD.editConfigureVirtualLCD(
066                            getEditor(), virtualLCDPanel);
067                }
068            });
069        }
070        return true;
071    }
072
073    @Override
074    @Nonnull
075    public String getTypeString() {
076        return Bundle.getMessage("PositionableType_VirtualLcd");
077    }
078
079    @Override
080    public String getNameString() {
081        return virtualLCDPanel.getNameString();
082    }
083
084    public void dispose() {
085        virtualLCDPanel.dispose();
086    }
087
088}