// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.tools.bugreport;
import java.awt.Dimension;
import javax.swing.JScrollPane;
import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
import org.openstreetmap.josm.gui.widgets.JosmTextArea;
import org.openstreetmap.josm.tools.Utils;
/**
* This is a text area that displays the debug text with scroll bars.
* @author Michael Zangl
* @since 10055
*/
public class DebugTextDisplay extends JScrollPane {
private static final String CODE_PATTERN = "{{{%n%s%n}}}";
private String text;
private JosmTextArea textArea;
/**
* Creates a new text area.
* @since 10585
*/
private DebugTextDisplay() {
textArea = new JosmTextArea();
textArea.setCaretPosition(0);
textArea.setEditable(false);
setViewportView(textArea);
setPreferredSize(new Dimension(600, 270));
}
/**
* Creates a new text area with an inital text to display
* @param textToDisplay The text to display.
*/
public DebugTextDisplay(String textToDisplay) {
this();
setCodeText(textToDisplay);
}
/**
* Creates a new text area that displays the bug report data
* @param report The bug report data to display.
* @since 10585
*/
public DebugTextDisplay(BugReport report) {
this();
setCodeText(report.getReportText());
report.addChangeListener(e -> setCodeText(report.getReportText()));
}
/**
* Sets the text that should be displayed in this view.
* @param textToDisplay The text
*/
private void setCodeText(String textToDisplay) {
text = Utils.strip(textToDisplay).replaceAll("\r", "");
textArea.setText(String.format(CODE_PATTERN, text));
textArea.setCaretPosition(0);
}
/**
* Copies the debug text to the clipboard. This includes the code tags for trac.
* @return <code>true</code> if copy was successful
* @since 11102 (typo)
*/
public boolean copyToClipboard() {
return ClipboardUtils.copyString(String.format(CODE_PATTERN, text));
}
/**
* Gets the text this are displays, without the code tag.
* @return The stripped text set by {@link #setCodeText(String)}
* @since 10585
*/
public String getCodeText() {
return text;
}
}