/* * Copyright 2010-2015 Institut Pasteur. * * This file is part of Icy. * * Icy is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Icy is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Icy. If not, see <http://www.gnu.org/licenses/>. */ package icy.gui.plugin; import icy.gui.frame.error.ErrorReportFrame; import icy.plugin.PluginDescriptor; import icy.system.IcyExceptionHandler; import icy.util.StringUtil; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextPane; import javax.swing.SwingConstants; import javax.swing.border.TitledBorder; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; /** * @deprecated Use {@link ErrorReportFrame} instead */ @Deprecated public class PluginErrorReportPanel extends JPanel { /** * */ private static final long serialVersionUID = -2875740914347175762L; // GUI JTextPane errorMessageTextPane; JLabel label; JTextPane commentTextPane; JButton reportButton; JButton closeButton; JPanel bottomPanel; JScrollPane messageScrollPane; JPanel commentPanel; JPanel messagePanel; final PluginDescriptor plugin; final String devId; final String title; final String message; public PluginErrorReportPanel(PluginDescriptor plugin, String devId, String title, String message) { super(); this.plugin = plugin; this.devId = devId; this.title = message; this.message = message; initialize(); String str; if (plugin != null) str = "<html><br>The plugin named <b>" + plugin.getName() + "</b> has encountered a problem"; else str = "<html><br>The plugin from the developer <b>" + devId + "</b> has encountered a problem"; if (StringUtil.isEmpty(title)) str += ".<br><br>"; else str += " :<br><i>" + title + "</i><br><br>"; str += "Reporting this problem is anonymous and will help improving this plugin.<br><br></html>"; label.setText(str); try { errorMessageTextPane.getStyledDocument().insertString(errorMessageTextPane.getStyledDocument().getLength(), message, new SimpleAttributeSet()); } catch (BadLocationException e) { System.err.println("PluginErrorReport(...) error :"); IcyExceptionHandler.showErrorMessage(e, true); } errorMessageTextPane.setCaretPosition(0); final Document doc = commentTextPane.getDocument(); try { SimpleAttributeSet attributes = new SimpleAttributeSet(); StyleConstants.setItalic(attributes, true); StyleConstants.setForeground(attributes, Color.GRAY); doc.insertString(0, "Please type here your comment", attributes); } catch (BadLocationException e1) { } commentTextPane.addMouseListener(new MouseAdapter() { // Displays a message at the beginning that // disappears when first clicked boolean firstClickDone = false; @Override public void mouseClicked(MouseEvent e) { if (!firstClickDone) { commentTextPane.setText(""); SimpleAttributeSet attributes = new SimpleAttributeSet(); StyleConstants.setItalic(attributes, false); StyleConstants.setForeground(attributes, Color.BLACK); try { doc.insertString(0, " ", attributes); } catch (BadLocationException e1) { } firstClickDone = true; } } }); } /** * @wbp.parser.constructor */ PluginErrorReportPanel() { this(new PluginDescriptor(plugins.kernel.canvas.Canvas2DPlugin.class), null, null, "Error !!"); } private void initialize() { if (plugin != null) label = new JLabel("", plugin.getIcon(), SwingConstants.CENTER); else label = new JLabel("", SwingConstants.CENTER); // center errorMessageTextPane = new JTextPane(); errorMessageTextPane.setEditable(false); errorMessageTextPane.setContentType("text/html"); messageScrollPane = new JScrollPane(errorMessageTextPane); messagePanel = new JPanel(); messagePanel.setBorder(new TitledBorder(null, "Message", TitledBorder.LEADING, TitledBorder.TOP, null, null)); messagePanel.setLayout(new BorderLayout(0, 0)); messagePanel.add(messageScrollPane, BorderLayout.CENTER); // comment pane commentTextPane = new JTextPane(); commentTextPane.setEditable(true); commentTextPane .setToolTipText("Give here some informations about the context or how to reproduce the bug to help the developer in resolving the issue"); final JScrollPane scComment = new JScrollPane(commentTextPane); scComment.setPreferredSize(new Dimension(23, 60)); scComment.setMinimumSize(new Dimension(23, 60)); commentPanel = new JPanel(); commentPanel.setBorder(new TitledBorder(null, "Comment", TitledBorder.LEADING, TitledBorder.TOP, null, null)); commentPanel.setLayout(new BorderLayout(0, 0)); commentPanel.add(scComment, BorderLayout.CENTER); // buttons panel reportButton = new JButton("Report"); closeButton = new JButton("Close"); JPanel buttonsPanel = new JPanel(); buttonsPanel.add(reportButton); buttonsPanel.add(closeButton); // bottom bottomPanel = new JPanel(); bottomPanel.setLayout(new BorderLayout(0, 0)); bottomPanel.add(commentPanel, BorderLayout.CENTER); bottomPanel.add(buttonsPanel, BorderLayout.SOUTH); setLayout(new BorderLayout(0, 0)); add(label, BorderLayout.NORTH); add(messagePanel, BorderLayout.CENTER); add(bottomPanel, BorderLayout.SOUTH); } }