package org.rr.jeborker.gui; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.ClipboardOwner; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextArea; import org.rr.commons.swing.SwingUtils; import org.rr.commons.swing.components.JRScrollPane; import org.rr.commons.swing.layout.EqualsLayout; import org.rr.jeborker.Jeboorker; import org.rr.jeborker.app.JeboorkerLogger; class LoggerView extends JDialog implements ClipboardOwner { private static final long serialVersionUID = -8486417277805201337L; private final ActionListener closeAction = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { logMonitorController.close(); } }; private final ActionListener copyClipboardAction = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { StringSelection stringSelection = new StringSelection( contentTextArea.getText() ); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(stringSelection, LoggerView.this ); } }; private LoggerController logMonitorController; private JButton copyButton; private JTextArea contentTextArea; private JButton closeButton; private JPanel bottomPanel; LoggerView(JFrame mainWindow, LoggerController logMonitorController) { super(mainWindow); this.logMonitorController = logMonitorController; initialize(); setModal(true); setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); } private void initialize() { setTitle(Jeboorker.APP + " " + " Logfile"); setSize(800, 600); SwingUtils.centerOnScreen(this); SwingUtils.setEscapeWindowAction(this, closeAction); GridBagLayout gridBagLayout = new GridBagLayout(); gridBagLayout.columnWidths = new int[]{0, 0}; gridBagLayout.rowHeights = new int[]{0, 0, 0}; gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE}; gridBagLayout.rowWeights = new double[]{1.0, 0.0, Double.MIN_VALUE}; getContentPane().setLayout(gridBagLayout); JRScrollPane scrollPane = new JRScrollPane(); GridBagConstraints gbc_scrollPane = new GridBagConstraints(); gbc_scrollPane.insets = new Insets(5, 0, 0, 0); gbc_scrollPane.fill = GridBagConstraints.BOTH; gbc_scrollPane.gridx = 0; gbc_scrollPane.gridy = 0; getContentPane().add(scrollPane, gbc_scrollPane); contentTextArea = new JTextArea(); contentTextArea.setMargin(new Insets(3, 3, 3, 3)); scrollPane.setViewportView(contentTextArea); contentTextArea.setEditable(false); contentTextArea.setOpaque(false); bottomPanel = new JPanel(); GridBagConstraints gbc_panel = new GridBagConstraints(); gbc_panel.insets = new Insets(5, 0, 5, 5); gbc_panel.fill = GridBagConstraints.BOTH; gbc_panel.gridx = 0; gbc_panel.gridy = 1; getContentPane().add(bottomPanel, gbc_panel); bottomPanel.setLayout(new EqualsLayout(3)); copyButton = new JButton(Bundle.getString("LogMonitorView.copy")); bottomPanel.add(copyButton); closeButton = new JButton(Bundle.getString("LogMonitorView.close")); bottomPanel.add(closeButton); closeButton.addActionListener(closeAction); copyButton.addActionListener(copyClipboardAction); this.addWindowListener(new WindowAdapter() { @Override public void windowOpened(WindowEvent e) { setLogText(); } @Override public void windowActivated(WindowEvent e) { setLogText(); } private void setLogText() { contentTextArea.setText(JeboorkerLogger.getLogFilePrint()); } @Override public void windowClosing(WindowEvent e) { MainController.getController().getLoggerController().close(); } }); } /** * Empty implementation of the ClipboardOwner interface. */ @Override public void lostOwnership(Clipboard aClipboard, Transferable aContents) { } }