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>
|
<artifactId>commons-io</artifactId>
|
||||||
<version>1.3.2</version>
|
<version>1.3.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-lang3</artifactId>
|
||||||
|
<version>3.7</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient</artifactId>
|
||||||
|
@ -299,7 +299,7 @@ public abstract class AbstractRipper
|
|||||||
* Prefix to prepend to the saved filename.
|
* Prefix to prepend to the saved filename.
|
||||||
* @param subdirectory
|
* @param subdirectory
|
||||||
* Sub-directory of the working directory to save the images to.
|
* 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) {
|
protected boolean addURLToDownload(URL url, String prefix, String subdirectory) {
|
||||||
return addURLToDownload(url, prefix, subdirectory, null, null, null);
|
return addURLToDownload(url, prefix, subdirectory, null, null, null);
|
||||||
@ -316,7 +316,7 @@ public abstract class AbstractRipper
|
|||||||
* URL to download
|
* URL to download
|
||||||
* @param prefix
|
* @param prefix
|
||||||
* Text to append to saved filename.
|
* 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) {
|
protected boolean addURLToDownload(URL url, String prefix) {
|
||||||
// Use empty subdirectory
|
// Use empty subdirectory
|
||||||
|
@ -25,6 +25,7 @@ import javax.swing.ImageIcon;
|
|||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JCheckBox;
|
import javax.swing.JCheckBox;
|
||||||
import javax.swing.JComboBox;
|
import javax.swing.JComboBox;
|
||||||
|
import javax.swing.JComponent;
|
||||||
import javax.swing.JFileChooser;
|
import javax.swing.JFileChooser;
|
||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
@ -50,6 +51,7 @@ import javax.swing.text.SimpleAttributeSet;
|
|||||||
import javax.swing.text.StyleConstants;
|
import javax.swing.text.StyleConstants;
|
||||||
import javax.swing.text.StyledDocument;
|
import javax.swing.text.StyledDocument;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
import org.apache.log4j.ConsoleAppender;
|
import org.apache.log4j.ConsoleAppender;
|
||||||
import org.apache.log4j.FileAppender;
|
import org.apache.log4j.FileAppender;
|
||||||
import org.apache.log4j.Level;
|
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) {
|
private static void addCheckboxListener(JCheckBox checkBox, String configString) {
|
||||||
checkBox.addActionListener(arg0 -> {
|
checkBox.addActionListener(arg0 -> {
|
||||||
@ -241,7 +263,14 @@ public final class MainWindow implements Runnable, RipStatusHandler {
|
|||||||
|
|
||||||
private void statusWithColor(String text, Color color) {
|
private void statusWithColor(String text, Color color) {
|
||||||
statusLabel.setForeground(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);
|
statusLabel.setText(text);
|
||||||
|
}
|
||||||
pack();
|
pack();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,6 +337,7 @@ public final class MainWindow implements Runnable, RipStatusHandler {
|
|||||||
gbc.weightx = 1;
|
gbc.weightx = 1;
|
||||||
|
|
||||||
statusLabel = new JLabel(rb.getString("inactive"));
|
statusLabel = new JLabel(rb.getString("inactive"));
|
||||||
|
statusLabel.setToolTipText(rb.getString("inactive"));
|
||||||
statusLabel.setHorizontalAlignment(JLabel.CENTER);
|
statusLabel.setHorizontalAlignment(JLabel.CENTER);
|
||||||
openButton = new JButton();
|
openButton = new JButton();
|
||||||
openButton.setVisible(false);
|
openButton.setVisible(false);
|
||||||
@ -353,6 +383,7 @@ public final class MainWindow implements Runnable, RipStatusHandler {
|
|||||||
logPanel.setBorder(emptyBorder);
|
logPanel.setBorder(emptyBorder);
|
||||||
logText = new JTextPane();
|
logText = new JTextPane();
|
||||||
logText.setEditable(false);
|
logText.setEditable(false);
|
||||||
|
logText.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
|
||||||
JScrollPane logTextScroll = new JScrollPane(logText);
|
JScrollPane logTextScroll = new JScrollPane(logText);
|
||||||
logTextScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
|
logTextScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
|
||||||
logPanel.setVisible(false);
|
logPanel.setVisible(false);
|
||||||
@ -1012,7 +1043,7 @@ public final class MainWindow implements Runnable, RipStatusHandler {
|
|||||||
StyledDocument sd = logText.getStyledDocument();
|
StyledDocument sd = logText.getStyledDocument();
|
||||||
try {
|
try {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
sd.insertString(sd.getLength(), text + "\n", sas);
|
insertWrappedString(logText, sd, text, sas);
|
||||||
}
|
}
|
||||||
} catch (BadLocationException e) { }
|
} catch (BadLocationException e) { }
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user