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}