001package jmri.jmrix.dccpp.swing.messages;
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/** A DCC-EX Messages display that can be put on a panel. */
012public class MessagesPositionable extends PositionableJComponent {
013
014    private final MessagesPanel messagesPanel;
015
016    public MessagesPositionable(Editor editor) {
017        super(editor);
018        messagesPanel = new MessagesPanel(editor, this, true);
019    }
020
021    public void initComponents() {
022        messagesPanel.initComponents();
023        add(messagesPanel);
024        var d = messagesPanel.getPreferredSize();
025        messagesPanel.setSize(d);
026        setSize(d);
027    }
028
029    @Override
030    public Positionable deepClone() {
031        MessagesPositionable pos = new MessagesPositionable(_editor);
032        if (messagesPanel.getMemo() != null) {
033            pos.messagesPanel.setMemo(messagesPanel.getMemo());
034        }
035        pos.messagesPanel.setExpirySeconds(messagesPanel.getExpirySeconds());
036        pos.messagesPanel.setMaxLines(messagesPanel.getMaxLines());
037        pos.messagesPanel.setAutoOpen(messagesPanel.isAutoOpen());
038        pos.messagesPanel.setPlaySound(messagesPanel.isPlaySound());
039        pos.messagesPanel.setSoundFile(messagesPanel.getSoundFile());
040        pos.messagesPanel.setMessageForeground(messagesPanel.getMessageForeground());
041        pos.messagesPanel.setMessageBackground(messagesPanel.getMessageBackground());
042        pos.messagesPanel.setMessagesSize(messagesPanel.getMessagesSize());
043        pos.initComponents();
044        return finishClone(pos);
045    }
046
047    public MessagesPanel getMessagesPanel() {
048        return messagesPanel;
049    }
050
051    @Override
052    public boolean showPopUp(JPopupMenu popup) {
053        if (isEditable()) {
054            popup.add(new AbstractAction(Bundle.getMessage("EditMessages")) {
055                @Override
056                public void actionPerformed(ActionEvent e) {
057                    ConfigureMessages.editConfigureMessages(getEditor(), messagesPanel);
058                }
059            });
060        }
061        return true;
062    }
063
064    @Override
065    @Nonnull
066    public String getTypeString() {
067        return Bundle.getMessage("PositionableType_Messages");
068    }
069
070    @Override
071    public String getNameString() {
072        return messagesPanel.getNameString();
073    }
074
075    @Override
076    public void remove() {
077        super.remove();
078        messagesPanel.dispose();
079    }
080
081    public void dispose() {
082        messagesPanel.dispose();
083    }
084
085}