Fix Issue 789: Implemented wraparound in log window and status label.

This commit is contained in:
Samuel P. Bowman 2018-07-13 13:19:54 -04:00
parent 35d24d22a5
commit 5622d55c3e
3 changed files with 40 additions and 4 deletions

View File

@ -48,6 +48,11 @@
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>

View File

@ -299,7 +299,7 @@ public abstract class AbstractRipper
* Prefix to prepend to the saved filename.
* @param subdirectory
* Sub-directory of the working directory to save the images to.
* @return True on success, flase on failure.
* @return True on success, false on failure.
*/
protected boolean addURLToDownload(URL url, String prefix, String subdirectory) {
return addURLToDownload(url, prefix, subdirectory, null, null, null);
@ -316,7 +316,7 @@ public abstract class AbstractRipper
* URL to download
* @param prefix
* Text to append to saved filename.
* @return True on success, flase on failure.
* @return True on success, false on failure.
*/
protected boolean addURLToDownload(URL url, String prefix) {
// Use empty subdirectory

View File

@ -25,6 +25,7 @@ import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
@ -50,6 +51,7 @@ import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
@ -150,6 +152,26 @@ public final class MainWindow implements Runnable, RipStatusHandler {
}
}
private static int getAverageFontWidth(JComponent component) {
int[] widths = component.getFontMetrics(component.getFont()).getWidths();
return Collections.max(Arrays.asList(ArrayUtils.toObject(widths)));
}
private static void insertWrappedString(JComponent parent, StyledDocument document, String string, SimpleAttributeSet s)
throws BadLocationException {
StringBuilder resultString = new StringBuilder();
int maxCharsToFit = parent.getWidth() / getAverageFontWidth(parent);
int i = 0;
while(i < string.length()/maxCharsToFit) {
if(i > 0) resultString.append(string.substring(i*maxCharsToFit-2, i*maxCharsToFit));
resultString.append(string.substring(i*maxCharsToFit, (i+1)*maxCharsToFit-2));
resultString.append("\\\n");
i++;
}
resultString.append(string.substring(string.length()-(string.length()%maxCharsToFit)));
resultString.append("\n");
document.insertString(document.getLength(), resultString.toString(), s);
}
private static void addCheckboxListener(JCheckBox checkBox, String configString) {
checkBox.addActionListener(arg0 -> {
@ -241,7 +263,14 @@ public final class MainWindow implements Runnable, RipStatusHandler {
private void statusWithColor(String text, Color color) {
statusLabel.setForeground(color);
statusLabel.setToolTipText(text);
int averageWidth = getAverageFontWidth(statusLabel);
int numCharsToFit = statusLabel.getWidth() / averageWidth;
if(text.length() > (mainFrame.getWidth() / averageWidth)) {
statusLabel.setText(text.substring(0, numCharsToFit-6) + "...");
} else {
statusLabel.setText(text);
}
pack();
}
@ -308,6 +337,7 @@ public final class MainWindow implements Runnable, RipStatusHandler {
gbc.weightx = 1;
statusLabel = new JLabel(rb.getString("inactive"));
statusLabel.setToolTipText(rb.getString("inactive"));
statusLabel.setHorizontalAlignment(JLabel.CENTER);
openButton = new JButton();
openButton.setVisible(false);
@ -353,6 +383,7 @@ public final class MainWindow implements Runnable, RipStatusHandler {
logPanel.setBorder(emptyBorder);
logText = new JTextPane();
logText.setEditable(false);
logText.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
JScrollPane logTextScroll = new JScrollPane(logText);
logTextScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
logPanel.setVisible(false);
@ -1012,7 +1043,7 @@ public final class MainWindow implements Runnable, RipStatusHandler {
StyledDocument sd = logText.getStyledDocument();
try {
synchronized (this) {
sd.insertString(sd.getLength(), text + "\n", sas);
insertWrappedString(logText, sd, text, sas);
}
} catch (BadLocationException e) { }