Fix Issue 789: Implemented wraparound in log window and status label.
This commit is contained in:
parent
35d24d22a5
commit
5622d55c3e
5
pom.xml
5
pom.xml
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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.setText(text);
|
||||
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) { }
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user