package magic.ui.screen.images.download; import java.awt.Color; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import magic.translate.MText; import magic.ui.ScreenController; import magic.ui.FontsAndBorders; import net.miginfocom.swing.MigLayout; @SuppressWarnings("serial") class ErrorPanel extends JPanel { private static final String _S4 = "Copy to clipboard"; private static final String _S5 = "Error details have been copied to the clipboard."; private final JTextArea textArea; ErrorPanel() { final JButton copyButton = new JButton(MText.get(_S4)); copyButton.setEnabled(false); textArea = new JTextArea(); textArea.setEditable(false); textArea.setForeground(Color.red); textArea.setFont(FontsAndBorders.FONT_README.deriveFont(11.0f)); textArea.getDocument().addDocumentListener(new DocumentListener() { @Override public void insertUpdate(DocumentEvent e) { copyButton.setEnabled(!isEmpty()); } @Override public void removeUpdate(DocumentEvent e) { copyButton.setEnabled(!isEmpty()); } @Override public void changedUpdate(DocumentEvent e) { copyButton.setEnabled(!isEmpty()); } private boolean isEmpty() { return textArea.getText().trim().isEmpty(); } }); final JScrollPane scrollPane = new JScrollPane(textArea); scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); scrollPane.setBorder(FontsAndBorders.BLACK_BORDER); copyButton.addActionListener(new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { final Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard(); final StringSelection textSelection = new StringSelection(textArea.getText()); clip.setContents(textSelection, null); ScreenController.showInfoMessage(MText.get(_S5)); } }); setVisible(false); setLayout(new MigLayout("flowy, gap 0, insets 10 0 10 0")); add(scrollPane, "w 100%, h 100%"); add(copyButton, "w 100%"); } void setErrorText(String text) { textArea.append(text); } }