diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/textcontentviewer/StringsContentPanel.form b/Core/src/org/sleuthkit/autopsy/contentviewers/textcontentviewer/StringsContentPanel.form
index 55f37ad358..265c1b77de 100644
--- a/Core/src/org/sleuthkit/autopsy/contentviewers/textcontentviewer/StringsContentPanel.form
+++ b/Core/src/org/sleuthkit/autopsy/contentviewers/textcontentviewer/StringsContentPanel.form
@@ -27,10 +27,10 @@
-
+
-
+
@@ -43,6 +43,7 @@
+
@@ -76,10 +77,13 @@
-
+
-
+
+
+
+
@@ -100,10 +104,13 @@
-
+
+
+
+
-
+
@@ -123,6 +130,15 @@
+
+
+
+
+
+
+
+
+
@@ -141,6 +157,15 @@
+
+
+
+
+
+
+
+
+
@@ -174,10 +199,13 @@
-
+
-
+
+
+
+
@@ -209,13 +237,13 @@
-
+
-
+
-
+
@@ -225,20 +253,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -256,13 +270,13 @@
-
+
-
+
-
+
@@ -326,7 +340,7 @@
-
+
@@ -402,11 +416,6 @@
-
-
-
-
-
@@ -422,7 +431,7 @@
-
+
diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/textcontentviewer/StringsContentPanel.java b/Core/src/org/sleuthkit/autopsy/contentviewers/textcontentviewer/StringsContentPanel.java
index 68fe3a7a6e..d13a9aea06 100644
--- a/Core/src/org/sleuthkit/autopsy/contentviewers/textcontentviewer/StringsContentPanel.java
+++ b/Core/src/org/sleuthkit/autopsy/contentviewers/textcontentviewer/StringsContentPanel.java
@@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.contentviewers.textcontentviewer;
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import org.openide.util.NbBundle;
@@ -32,6 +33,7 @@ import org.sleuthkit.autopsy.coreutils.StringExtract;
import org.sleuthkit.autopsy.coreutils.StringExtract.StringExtractResult;
import org.sleuthkit.autopsy.coreutils.StringExtract.StringExtractUnicodeTable.SCRIPT;
import org.sleuthkit.autopsy.datamodel.StringContent;
+import org.sleuthkit.autopsy.guiutils.WrapLayout;
import org.sleuthkit.datamodel.Content;
import org.sleuthkit.datamodel.TskCoreException;
@@ -78,6 +80,11 @@ public class StringsContentPanel extends javax.swing.JPanel {
languageCombo.addItem(s);
});
+ // use wrap layout for better component wrapping
+ WrapLayout layout = new WrapLayout(0,5);
+ layout.setOppositeAligned(Arrays.asList(panelScriptSelect));
+ controlPanel.setLayout(layout);
+
}
final void resetDisplay() {
@@ -119,7 +126,6 @@ public class StringsContentPanel extends javax.swing.JPanel {
pageLabel2 = new javax.swing.JLabel();
javax.swing.JSeparator jSepMed5 = new javax.swing.JSeparator();
prevPageButton = new javax.swing.JButton();
- javax.swing.JSeparator jSepXs1 = new javax.swing.JSeparator();
nextPageButton = new javax.swing.JButton();
javax.swing.JSeparator jSepMed6 = new javax.swing.JSeparator();
javax.swing.JPanel panelGoToPage = new javax.swing.JPanel();
@@ -140,8 +146,8 @@ public class StringsContentPanel extends javax.swing.JPanel {
selectAllMenuItem.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.selectAllMenuItem.text")); // NOI18N
rightClickMenu.add(selectAllMenuItem);
- setMinimumSize(new java.awt.Dimension(5, 5));
- setPreferredSize(new java.awt.Dimension(100, 58));
+ setMinimumSize(new java.awt.Dimension(250, 5));
+ setPreferredSize(new java.awt.Dimension(250, 58));
setLayout(new java.awt.BorderLayout());
controlPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 5, 0));
@@ -149,28 +155,36 @@ public class StringsContentPanel extends javax.swing.JPanel {
panelPageOfCount.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));
pageLabel.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.pageLabel.text_1")); // NOI18N
- pageLabel.setMaximumSize(new java.awt.Dimension(33, 14));
- pageLabel.setMinimumSize(new java.awt.Dimension(33, 14));
+ pageLabel.setMaximumSize(new java.awt.Dimension(33, 25));
+ pageLabel.setMinimumSize(new java.awt.Dimension(33, 25));
+ pageLabel.setPreferredSize(new java.awt.Dimension(32, 25));
panelPageOfCount.add(pageLabel);
jSepMed1.setPreferredSize(new java.awt.Dimension(5, 0));
panelPageOfCount.add(jSepMed1);
currentPageLabel.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.currentPageLabel.text_1")); // NOI18N
- currentPageLabel.setMaximumSize(new java.awt.Dimension(18, 14));
- currentPageLabel.setPreferredSize(new java.awt.Dimension(18, 14));
+ currentPageLabel.setMaximumSize(new java.awt.Dimension(18, 25));
+ currentPageLabel.setMinimumSize(new java.awt.Dimension(7, 25));
+ currentPageLabel.setPreferredSize(new java.awt.Dimension(18, 25));
panelPageOfCount.add(currentPageLabel);
jSepMed2.setPreferredSize(new java.awt.Dimension(5, 0));
panelPageOfCount.add(jSepMed2);
ofLabel.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.ofLabel.text_1")); // NOI18N
+ ofLabel.setMaximumSize(new java.awt.Dimension(11, 25));
+ ofLabel.setMinimumSize(new java.awt.Dimension(11, 25));
+ ofLabel.setPreferredSize(new java.awt.Dimension(11, 25));
panelPageOfCount.add(ofLabel);
jSepMed3.setPreferredSize(new java.awt.Dimension(5, 0));
panelPageOfCount.add(jSepMed3);
totalPageLabel.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.totalPageLabel.text_1")); // NOI18N
+ totalPageLabel.setMaximumSize(new java.awt.Dimension(21, 25));
+ totalPageLabel.setMinimumSize(new java.awt.Dimension(21, 25));
+ totalPageLabel.setPreferredSize(new java.awt.Dimension(21, 25));
panelPageOfCount.add(totalPageLabel);
jSepMed4.setPreferredSize(new java.awt.Dimension(5, 0));
@@ -181,8 +195,9 @@ public class StringsContentPanel extends javax.swing.JPanel {
panelPageNextPrevButton.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 0, 0));
pageLabel2.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.pageLabel2.text")); // NOI18N
- pageLabel2.setMaximumSize(new java.awt.Dimension(29, 14));
- pageLabel2.setMinimumSize(new java.awt.Dimension(29, 14));
+ pageLabel2.setMaximumSize(new java.awt.Dimension(29, 25));
+ pageLabel2.setMinimumSize(new java.awt.Dimension(29, 25));
+ pageLabel2.setPreferredSize(new java.awt.Dimension(29, 25));
panelPageNextPrevButton.add(pageLabel2);
jSepMed5.setPreferredSize(new java.awt.Dimension(5, 0));
@@ -194,9 +209,9 @@ public class StringsContentPanel extends javax.swing.JPanel {
prevPageButton.setContentAreaFilled(false);
prevPageButton.setDisabledIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_back_disabled.png"))); // NOI18N
prevPageButton.setMargin(new java.awt.Insets(2, 0, 2, 0));
- prevPageButton.setMaximumSize(new java.awt.Dimension(20, 20));
- prevPageButton.setMinimumSize(new java.awt.Dimension(20, 20));
- prevPageButton.setPreferredSize(new java.awt.Dimension(20, 20));
+ prevPageButton.setMaximumSize(new java.awt.Dimension(25, 25));
+ prevPageButton.setMinimumSize(new java.awt.Dimension(20, 25));
+ prevPageButton.setPreferredSize(new java.awt.Dimension(25, 25));
prevPageButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_back_hover.png"))); // NOI18N
prevPageButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
@@ -205,19 +220,15 @@ public class StringsContentPanel extends javax.swing.JPanel {
});
panelPageNextPrevButton.add(prevPageButton);
- jSepXs1.setMinimumSize(new java.awt.Dimension(1, 0));
- jSepXs1.setPreferredSize(new java.awt.Dimension(1, 0));
- panelPageNextPrevButton.add(jSepXs1);
-
nextPageButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_forward.png"))); // NOI18N
nextPageButton.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.nextPageButton.text")); // NOI18N
nextPageButton.setBorderPainted(false);
nextPageButton.setContentAreaFilled(false);
nextPageButton.setDisabledIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_forward_disabled.png"))); // NOI18N
nextPageButton.setMargin(new java.awt.Insets(2, 0, 2, 0));
- nextPageButton.setMaximumSize(new java.awt.Dimension(20, 20));
- nextPageButton.setMinimumSize(new java.awt.Dimension(20, 20));
- nextPageButton.setPreferredSize(new java.awt.Dimension(20, 20));
+ nextPageButton.setMaximumSize(new java.awt.Dimension(25, 25));
+ nextPageButton.setMinimumSize(new java.awt.Dimension(20, 25));
+ nextPageButton.setPreferredSize(new java.awt.Dimension(25, 25));
nextPageButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/btn_step_forward_hover.png"))); // NOI18N
nextPageButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
@@ -242,7 +253,7 @@ public class StringsContentPanel extends javax.swing.JPanel {
goToPageTextField.setText(org.openide.util.NbBundle.getMessage(StringsContentPanel.class, "StringsContentPanel.goToPageTextField.text")); // NOI18N
goToPageTextField.setMaximumSize(new java.awt.Dimension(2147483647, 25));
goToPageTextField.setMinimumSize(new java.awt.Dimension(50, 25));
- goToPageTextField.setPreferredSize(new java.awt.Dimension(100, 25));
+ goToPageTextField.setPreferredSize(new java.awt.Dimension(70, 25));
goToPageTextField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
goToPageTextFieldActionPerformed(evt);
@@ -278,11 +289,9 @@ public class StringsContentPanel extends javax.swing.JPanel {
add(controlPanel, java.awt.BorderLayout.NORTH);
- outputScrollPane.setPreferredSize(new java.awt.Dimension(640, 402));
-
outputViewPane.setEditable(false);
outputViewPane.setFont(new java.awt.Font("Courier New", 0, 11)); // NOI18N
- outputViewPane.setPreferredSize(new java.awt.Dimension(100, 40));
+ outputViewPane.setPreferredSize(null);
outputScrollPane.setViewportView(outputViewPane);
add(outputScrollPane, java.awt.BorderLayout.CENTER);
diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/Bundle.properties b/Core/src/org/sleuthkit/autopsy/texttranslation/ui/Bundle.properties
index ac480ca0e1..6ae7ed7d12 100644
--- a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/Bundle.properties
+++ b/Core/src/org/sleuthkit/autopsy/texttranslation/ui/Bundle.properties
@@ -4,3 +4,4 @@ TranslationContentPanel.ocrLabel.text=OCR:
TranslationOptionsPanelController.moduleErr=Module Error
TranslationOptionsPanelController.moduleErr.msg=A module caused an error listening to TranslationSettingsPanelController updates. See log to determine which module. Some data could be incomplete.
TranslationContentPanel.showLabel.text=Show:
+TranslationContentPanel.jSepLarge1.AccessibleContext.accessibleName=
diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationContentPanel.form b/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationContentPanel.form
index 4a736ef1d2..4dabce0985 100644
--- a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationContentPanel.form
+++ b/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationContentPanel.form
@@ -6,11 +6,11 @@
-
+
-
+
@@ -24,28 +24,20 @@
-
+
-
+
-
-
-
-
-
-
+
-
+
-
-
-
@@ -58,28 +50,66 @@
-
+
-
-
-
-
+
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -97,10 +127,21 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -123,16 +164,36 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -146,10 +207,21 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -183,8 +255,11 @@
+
+
+
-
+
diff --git a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationContentPanel.java b/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationContentPanel.java
index 62f87f0617..4f6fbd7271 100644
--- a/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationContentPanel.java
+++ b/Core/src/org/sleuthkit/autopsy/texttranslation/ui/TranslationContentPanel.java
@@ -25,11 +25,13 @@ import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import javax.swing.JComboBox;
import org.openide.util.NbBundle;
import org.openide.util.NbBundle.Messages;
import org.sleuthkit.autopsy.corecomponents.AutoWrappingJTextPane;
+import org.sleuthkit.autopsy.guiutils.WrapLayout;
/**
* A JPanel used by TranslatedContentViewer to display machine translation of
@@ -49,6 +51,7 @@ public class TranslationContentPanel extends javax.swing.JPanel {
*/
public TranslationContentPanel() {
initComponents();
+ additionalInitComponents();
DISPLAY_PANE = new AutoWrappingJTextPane();
DISPLAY_PANE.setEditable(false);
@@ -255,6 +258,13 @@ public class TranslationContentPanel extends javax.swing.JPanel {
LANGUAGE_NAMES = createLanguageBiMap();
}
+ private void additionalInitComponents() {
+ // use wrap layout for better component wrapping
+ WrapLayout layout = new WrapLayout(0,5);
+ layout.setOppositeAligned(Arrays.asList(showPanel, ocrPanel));
+ controlPanel.setLayout(layout);
+ }
+
/**
* Selection choices to be displayed in the combobox dropdown.
*/
@@ -285,60 +295,88 @@ public class TranslationContentPanel extends javax.swing.JPanel {
// //GEN-BEGIN:initComponents
private void initComponents() {
- jPanel1 = new javax.swing.JPanel();
+ controlPanel = new javax.swing.JPanel();
+ javax.swing.JPanel warningLabelPanel = new javax.swing.JPanel();
warningLabel = new javax.swing.JLabel();
- javax.swing.JPanel showPanel = new javax.swing.JPanel();
+ jSeparator1 = new javax.swing.JSeparator();
+ showPanel = new javax.swing.JPanel();
showLabel = new javax.swing.JLabel();
+ javax.swing.JSeparator jSepMed1 = new javax.swing.JSeparator();
displayTextComboBox = new javax.swing.JComboBox<>();
- javax.swing.JPanel ocrPanel = new javax.swing.JPanel();
+ ocrPanel = new javax.swing.JPanel();
+ javax.swing.JSeparator jSepLarge1 = new javax.swing.JSeparator();
ocrLabel = new javax.swing.JLabel();
+ javax.swing.JSeparator jSepMed2 = new javax.swing.JSeparator();
ocrDropdown = new javax.swing.JComboBox<>();
textScrollPane = new javax.swing.JScrollPane();
setMaximumSize(new java.awt.Dimension(2000, 2000));
- setMinimumSize(new java.awt.Dimension(2, 2));
+ setMinimumSize(new java.awt.Dimension(250, 2));
setName(""); // NOI18N
- setPreferredSize(new java.awt.Dimension(100, 58));
+ setPreferredSize(new java.awt.Dimension(250, 58));
setVerifyInputWhenFocusTarget(false);
setLayout(new java.awt.BorderLayout());
- jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
- jPanel1.setMaximumSize(new java.awt.Dimension(182, 25));
- jPanel1.setMinimumSize(new java.awt.Dimension(254, 25));
- jPanel1.setName(""); // NOI18N
- jPanel1.setPreferredSize(new java.awt.Dimension(182, 25));
- jPanel1.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 5, 0));
+ controlPanel.setMaximumSize(new java.awt.Dimension(20000, 20000));
+ controlPanel.setMinimumSize(new java.awt.Dimension(2, 25));
+ controlPanel.setName(""); // NOI18N
+ controlPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 5, 0));
+
+ warningLabelPanel.setMaximumSize(new java.awt.Dimension(32767, 25));
+ warningLabelPanel.setMinimumSize(new java.awt.Dimension(2, 25));
+ warningLabelPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));
warningLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/warning16.png"))); // NOI18N
warningLabel.setMaximumSize(new java.awt.Dimension(250, 25));
warningLabel.setMinimumSize(new java.awt.Dimension(150, 25));
- warningLabel.setPreferredSize(new java.awt.Dimension(250, 25));
- jPanel1.add(warningLabel);
+ warningLabel.setPreferredSize(null);
+ warningLabelPanel.add(warningLabel);
+ jSeparator1.setMaximumSize(new java.awt.Dimension(1, 25));
+ jSeparator1.setMinimumSize(new java.awt.Dimension(1, 25));
+ jSeparator1.setPreferredSize(new java.awt.Dimension(1, 25));
+ warningLabelPanel.add(jSeparator1);
+
+ controlPanel.add(warningLabelPanel);
+
+ showPanel.setMaximumSize(new java.awt.Dimension(32767, 25));
+ showPanel.setMinimumSize(new java.awt.Dimension(0, 25));
showPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));
org.openide.awt.Mnemonics.setLocalizedText(showLabel, org.openide.util.NbBundle.getMessage(TranslationContentPanel.class, "TranslationContentPanel.showLabel.text")); // NOI18N
showLabel.setMaximumSize(new java.awt.Dimension(42, 25));
showLabel.setMinimumSize(new java.awt.Dimension(42, 25));
- showLabel.setPreferredSize(new java.awt.Dimension(42, 25));
+ showLabel.setPreferredSize(null);
showPanel.add(showLabel);
+ jSepMed1.setPreferredSize(new java.awt.Dimension(5, 0));
+ showPanel.add(jSepMed1);
+
displayTextComboBox.setMaximumSize(new java.awt.Dimension(170, 25));
displayTextComboBox.setMinimumSize(new java.awt.Dimension(170, 25));
displayTextComboBox.setPreferredSize(new java.awt.Dimension(170, 25));
showPanel.add(displayTextComboBox);
- jPanel1.add(showPanel);
+ controlPanel.add(showPanel);
+ ocrPanel.setMaximumSize(new java.awt.Dimension(32767, 25));
+ ocrPanel.setMinimumSize(new java.awt.Dimension(0, 25));
ocrPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));
+ jSepLarge1.setPreferredSize(new java.awt.Dimension(10, 0));
+ ocrPanel.add(jSepLarge1);
+ jSepLarge1.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(TranslationContentPanel.class, "TranslationContentPanel.jSepLarge1.AccessibleContext.accessibleName")); // NOI18N
+
org.openide.awt.Mnemonics.setLocalizedText(ocrLabel, org.openide.util.NbBundle.getMessage(TranslationContentPanel.class, "TranslationContentPanel.ocrLabel.text")); // NOI18N
ocrLabel.setEnabled(false);
ocrLabel.setMaximumSize(new java.awt.Dimension(40, 25));
ocrLabel.setMinimumSize(new java.awt.Dimension(25, 16));
- ocrLabel.setPreferredSize(new java.awt.Dimension(40, 25));
+ ocrLabel.setPreferredSize(null);
ocrPanel.add(ocrLabel);
+ jSepMed2.setPreferredSize(new java.awt.Dimension(5, 0));
+ ocrPanel.add(jSepMed2);
+
ocrDropdown.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "N/A" }));
ocrDropdown.setEnabled(false);
ocrDropdown.setMaximumSize(new java.awt.Dimension(170, 25));
@@ -347,22 +385,26 @@ public class TranslationContentPanel extends javax.swing.JPanel {
ocrDropdown.setPreferredSize(new java.awt.Dimension(170, 25));
ocrPanel.add(ocrDropdown);
- jPanel1.add(ocrPanel);
+ controlPanel.add(ocrPanel);
- add(jPanel1, java.awt.BorderLayout.NORTH);
+ add(controlPanel, java.awt.BorderLayout.NORTH);
textScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
textScrollPane.setMaximumSize(new java.awt.Dimension(20000, 20000));
- textScrollPane.setPreferredSize(new java.awt.Dimension(640, 250));
+ textScrollPane.setMinimumSize(new java.awt.Dimension(20, 20));
+ textScrollPane.setPreferredSize(new java.awt.Dimension(20, 20));
add(textScrollPane, java.awt.BorderLayout.CENTER);
}// //GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JPanel controlPanel;
private javax.swing.JComboBox displayTextComboBox;
- private javax.swing.JPanel jPanel1;
+ private javax.swing.JSeparator jSeparator1;
private javax.swing.JComboBox ocrDropdown;
private javax.swing.JLabel ocrLabel;
+ private javax.swing.JPanel ocrPanel;
private javax.swing.JLabel showLabel;
+ private javax.swing.JPanel showPanel;
private javax.swing.JScrollPane textScrollPane;
private javax.swing.JLabel warningLabel;
// End of variables declaration//GEN-END:variables
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentPanel.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentPanel.form
index 7add18aa42..13e535f4ed 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentPanel.form
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentPanel.form
@@ -27,10 +27,10 @@
-
+
-
+
@@ -571,10 +571,10 @@
-
+
-
+
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentPanel.java
index 11425a2a7d..8ff9c0fdcc 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentPanel.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentPanel.java
@@ -47,6 +47,7 @@ import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.coreutils.EscapeUtil;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.TextUtil;
+import org.sleuthkit.autopsy.guiutils.WrapLayout;
/**
* Panel displays HTML content sent to ExtractedContentViewer, and provides a
@@ -187,8 +188,7 @@ class ExtractedContentPanel extends javax.swing.JPanel implements ResizableTextP
private void additionalInit() {
// use wrap layout for better component wrapping
- WrapLayout layout = new WrapLayout();
- layout.setHgap(5);
+ WrapLayout layout = new WrapLayout(0,5);
layout.setOppositeAligned(Arrays.asList(textSourcePanel));
controlPanel.setLayout(layout);
}
@@ -209,13 +209,13 @@ class ExtractedContentPanel extends javax.swing.JPanel implements ResizableTextP
controlPanel = new javax.swing.JPanel();
javax.swing.JPanel pagePanel = new javax.swing.JPanel();
pagesLabel = new javax.swing.JLabel();
- fillerSmall1 = new javax.swing.Box.Filler(new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 32767));
+ javax.swing.Box.Filler fillerSmall1 = new javax.swing.Box.Filler(new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 32767));
pageCurLabel = new javax.swing.JLabel();
- fillerSmall2 = new javax.swing.Box.Filler(new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 32767));
+ javax.swing.Box.Filler fillerSmall2 = new javax.swing.Box.Filler(new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 32767));
pageOfLabel = new javax.swing.JLabel();
- fillerSmall3 = new javax.swing.Box.Filler(new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 32767));
+ javax.swing.Box.Filler fillerSmall3 = new javax.swing.Box.Filler(new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 32767));
pageTotalLabel = new javax.swing.JLabel();
- fillerSmall4 = new javax.swing.Box.Filler(new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 32767));
+ javax.swing.Box.Filler fillerSmall4 = new javax.swing.Box.Filler(new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 32767));
pageButtonsLabel = new javax.swing.JLabel();
javax.swing.Box.Filler fillerMed1 = new javax.swing.Box.Filler(new java.awt.Dimension(10, 0), new java.awt.Dimension(10, 0), new java.awt.Dimension(10, 32767));
pagePreviousButton = new javax.swing.JButton();
@@ -250,8 +250,8 @@ class ExtractedContentPanel extends javax.swing.JPanel implements ResizableTextP
selectAllMenuItem.setText(org.openide.util.NbBundle.getMessage(ExtractedContentPanel.class, "ExtractedContentPanel.selectAllMenuItem.text")); // NOI18N
rightClickMenu.add(selectAllMenuItem);
- setMinimumSize(new java.awt.Dimension(100, 0));
- setPreferredSize(new java.awt.Dimension(100, 58));
+ setMinimumSize(new java.awt.Dimension(250, 0));
+ setPreferredSize(new java.awt.Dimension(250, 58));
setLayout(new java.awt.BorderLayout());
controlPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 0, 0));
@@ -393,8 +393,8 @@ class ExtractedContentPanel extends javax.swing.JPanel implements ResizableTextP
sourceComboBox.setModel(new javax.swing.DefaultComboBoxModel());
sourceComboBox.setMaximumSize(new java.awt.Dimension(150, 32767));
- sourceComboBox.setMinimumSize(new java.awt.Dimension(150, 20));
- sourceComboBox.setPreferredSize(new java.awt.Dimension(150, 20));
+ sourceComboBox.setMinimumSize(new java.awt.Dimension(150, 25));
+ sourceComboBox.setPreferredSize(new java.awt.Dimension(150, 25));
textSourcePanel.add(sourceComboBox);
controlPanel.add(textSourcePanel);
@@ -418,10 +418,6 @@ class ExtractedContentPanel extends javax.swing.JPanel implements ResizableTextP
private javax.swing.JMenuItem copyMenuItem;
private javax.swing.JScrollPane extractedScrollPane;
private javax.swing.JTextPane extractedTextPane;
- private javax.swing.Box.Filler fillerSmall1;
- private javax.swing.Box.Filler fillerSmall2;
- private javax.swing.Box.Filler fillerSmall3;
- private javax.swing.Box.Filler fillerSmall4;
private javax.swing.JLabel hitButtonsLabel;
private javax.swing.JLabel hitCountLabel;
private javax.swing.JLabel hitLabel;
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/WrapLayout.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/WrapLayout.java
deleted file mode 100644
index ac9e7e4afb..0000000000
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/WrapLayout.java
+++ /dev/null
@@ -1,495 +0,0 @@
-/*
- * Autopsy Forensic Browser
- *
- * Copyright 2019 Basis Technology Corp.
- * Contact: carrier sleuthkit org
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.sleuthkit.autopsy.keywordsearch;
-
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.Insets;
-import java.awt.LayoutManager;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-import javax.swing.JScrollPane;
-import javax.swing.SwingUtilities;
-
-/**
- * FlowLayout subclass that fully supports wrapping of components.
- *
- * Originally written by Rob Camick
- * https://tips4java.wordpress.com/2008/11/06/wrap-layout/
- */
-class WrapLayout implements LayoutManager, java.io.Serializable {
-
- private static final long serialVersionUID = 1L;
-
-
- /**
- * The flow layout manager allows a seperation of
- * components with gaps. The horizontal gap will
- * specify the space between components and between
- * the components and the borders of the
- * Container
.
- *
- * @serial
- * @see #getHgap()
- * @see #setHgap(int)
- */
- private int hgap;
-
- /**
- * The flow layout manager allows a seperation of
- * components with gaps. The vertical gap will
- * specify the space between rows and between the
- * the rows and the borders of the Container
.
- *
- * @serial
- * @see #getHgap()
- * @see #setHgap(int)
- */
- private int vgap;
-
- /**
- * If true, components will be aligned on their baseline.
- */
- private boolean alignOnBaseline;
-
-
-
-
-
- private final Set oppositeAlignedItems = new HashSet<>();
-
- /**
- * Constructs a new WrapLayout
with a left alignment and a
- * default 5-unit horizontal and vertical gap.
- */
- WrapLayout() {
- super();
- }
-
-
- void setOppositeAligned(Collection rightAlignedComponents) {
- synchronized (this.oppositeAlignedItems) {
- this.oppositeAlignedItems.clear();
- this.oppositeAlignedItems.addAll(rightAlignedComponents);
- }
- }
-
- Set getOppositeAlignedItems() {
- return oppositeAlignedItems;
- }
-
-
- /**
- * Gets the horizontal gap between components
- * and between the components and the borders
- * of the Container
- *
- * @return the horizontal gap between components
- * and between the components and the borders
- * of the Container
- * @see java.awt.FlowLayout#setHgap
- * @since JDK1.1
- */
- int getHgap() {
- return hgap;
- }
-
- /**
- * Sets the horizontal gap between components and
- * between the components and the borders of the
- * Container
.
- *
- * @param hgap the horizontal gap between components
- * and between the components and the borders
- * of the Container
- * @see java.awt.FlowLayout#getHgap
- * @since JDK1.1
- */
- void setHgap(int hgap) {
- this.hgap = hgap;
- }
-
- /**
- * Gets the vertical gap between components and
- * between the components and the borders of the
- * Container
.
- *
- * @return the vertical gap between components
- * and between the components and the borders
- * of the Container
- * @see java.awt.FlowLayout#setVgap
- * @since JDK1.1
- */
- int getVgap() {
- return vgap;
- }
-
- /**
- * Sets the vertical gap between components and between
- * the components and the borders of the Container
.
- *
- * @param vgap the vertical gap between components
- * and between the components and the borders
- * of the Container
- * @see java.awt.FlowLayout#getVgap
- * @since JDK1.1
- */
- void setVgap(int vgap) {
- this.vgap = vgap;
- }
-
- /**
- * Sets whether or not components should be vertically aligned along their
- * baseline. Components that do not have a baseline will be centered.
- * The default is false.
- *
- * @param alignOnBaseline whether or not components should be
- * vertically aligned on their baseline
- * @since 1.6
- */
- void setAlignOnBaseline(boolean alignOnBaseline) {
- this.alignOnBaseline = alignOnBaseline;
- }
-
- /**
- * Returns true if components are to be vertically aligned along
- * their baseline. The default is false.
- *
- * @return true if components are to be vertically aligned along
- * their baseline
- * @since 1.6
- */
- boolean getAlignOnBaseline() {
- return alignOnBaseline;
- }
-
- /**
- * Adds the specified component to the layout.
- * Not used by this class.
- * @param name the name of the component
- * @param comp the component to be added
- */
- @Override
- public void addLayoutComponent(String name, Component comp) {
- }
-
- /**
- * Removes the specified component from the layout.
- * Not used by this class.
- * @param comp the component to remove
- * @see java.awt.Container#removeAll
- */
- @Override
- public void removeLayoutComponent(Component comp) {
- }
-
-
-
- private int getComponentY(int rowY, boolean alignBaseline, int rowHeight, int itemHeight) {
- return alignBaseline ?
- rowY + rowHeight - itemHeight :
- rowY;
- }
-
- private int getComponentX(int leftX, int rightX, boolean ltr, int xPos, int componentWidth) {
- return ltr ? leftX + xPos : rightX - xPos - componentWidth;
- }
-
- private int setComponentDims(Component comp, boolean alignBaseline, boolean ltr, int rowY, int rowHeight, int leftX, int rightX, int xPos) {
- Dimension d = comp.getPreferredSize();
- comp.setSize(d);
-
- int x = getComponentX(leftX, rightX, ltr, xPos, d.width);
- int y = getComponentY(rowY, alignBaseline, rowHeight, d.height);
- comp.setLocation(x, y);
-
- return d.width;
- }
-
-
- /**
- * Lays out the container. This method lets each
- * visible component take its preferred size by reshaping the
- * components in the target container in order to satisfy the alignment of
- * this FlowLayout
object. Taken from
- * https://raw.githubusercontent.com/mynawang/Java8-Source-Code/master/src/main/jdk8/java/awt/FlowLayout.java.
- *
- * @param target the specified component being laid out
- *
- * @see Container
- * @see java.awt.Container#doLayout
- */
- @Override
- public void layoutContainer(Container target) {
- synchronized (target.getTreeLock()) {
- synchronized (this.oppositeAlignedItems) {
- ParentDimensions targetDims = getTargetDimensions(target);
- List components = Arrays.asList(target.getComponents());
- List rows = getAllRows(components, true, targetDims.innerWidth);
-
- boolean ltr = target.getComponentOrientation().isLeftToRight();
- boolean useBaseline = getAlignOnBaseline();
-
- int rowY = targetDims.insets.top + getVgap();
- int leftX = targetDims.insets.left + getHgap();
- int rightX = targetDims.outerWidth - targetDims.insets.right - getHgap();
-
- for (Row row : rows) {
- int rowHeight = row.height;
-
- int curX = 0;
- if (row.components != null) {
- for (Component origComp : row.components)
- curX += setComponentDims(origComp, useBaseline, ltr, rowY, rowHeight, leftX, rightX, curX) + getHgap();
- }
-
- if (row.oppositeAligned != null) {
- curX = 0;
- // reverse opposite aligned for layout purposes since flipping ltr
- Collections.reverse(row.oppositeAligned);
- for (Component oppAlignedComp : row.oppositeAligned)
- curX += setComponentDims(oppAlignedComp, useBaseline, !ltr, rowY, rowHeight, leftX, rightX, curX) + getHgap();
- }
-
- rowY += rowHeight + getVgap();
- }
- }
- }
- }
-
- /**
- * Returns the preferred dimensions for this layout given the
- * visible components in the specified target container.
- *
- * @param target the component which needs to be laid out
- *
- * @return the preferred dimensions to lay out the subcomponents of the
- * specified container
- */
- @Override
- public Dimension preferredLayoutSize(Container target) {
- return layoutSize(target, true);
- }
-
- /**
- * Returns the minimum dimensions needed to layout the visible
- * components contained in the specified target container.
- *
- * @param target the component which needs to be laid out
- *
- * @return the minimum dimensions to lay out the subcomponents of the
- * specified container
- */
- @Override
- public Dimension minimumLayoutSize(Container target) {
- Dimension minimum = layoutSize(target, false);
- minimum.width -= (getHgap() + 1);
- return minimum;
- }
-
- private static class ParentDimensions {
-
- final int outerWidth;
- final int innerWidth;
- final Insets insets;
-
- ParentDimensions(int outerWidth, int innerWidth, Insets insets) {
- this.outerWidth = outerWidth;
- this.innerWidth = innerWidth;
- this.insets = insets;
- }
- }
-
- private ParentDimensions getTargetDimensions(Container target) {
- // Each row must fit with the width allocated to the containter.
- // When the container width = 0, the preferred width of the container
- // has not yet been calculated so lets ask for the maximum.
-
- int targetWidth = target.getSize().width;
- Container container = target;
-
- while (container.getSize().width == 0 && container.getParent() != null) {
- container = container.getParent();
- }
-
- targetWidth = container.getSize().width;
-
- if (targetWidth == 0) {
- targetWidth = Integer.MAX_VALUE;
- }
-
- int hgap = getHgap();
-
- Insets insets = target.getInsets();
- int horizontalInsetsAndGap = insets.left + insets.right + (hgap * 2);
- int maxWidth = targetWidth - horizontalInsetsAndGap;
-
- return new ParentDimensions(targetWidth, maxWidth, insets);
- }
-
- /**
- * Returns the minimum or preferred dimension needed to layout the target
- * container.
- *
- * @param target target to get layout size for
- * @param preferred should preferred size be calculated
- *
- * @return the dimension to layout the target container
- */
- private Dimension layoutSize(Container target, boolean preferred) {
- synchronized (target.getTreeLock()) {
- synchronized (this.oppositeAlignedItems) {
- ParentDimensions targetDims = getTargetDimensions(target);
- List components = Arrays.asList(target.getComponents());
- List rows = getAllRows(components, preferred, targetDims.innerWidth);
-
- Integer containerHeight = rows.stream().map((r) -> r.height).reduce(0, Integer::sum);
- // add in vertical gap between rows
- if (rows.size() > 1) {
- containerHeight += (rows.size() - 1) * getVgap();
- }
-
- containerHeight += targetDims.insets.top + targetDims.insets.bottom;
-
- Integer containerWidth = rows.stream().map((r) -> r.width).reduce(0, Math::max);
- containerWidth += targetDims.insets.left + targetDims.insets.right + (getHgap() * 2);
-
- // When using a scroll pane or the DecoratedLookAndFeel we need to
- // make sure the preferred size is less than the size of the
- // target containter so shrinking the container size works
- // correctly. Removing the horizontal gap is an easy way to do this.
- Container scrollPane = SwingUtilities.getAncestorOfClass(JScrollPane.class, target);
-
- if (scrollPane != null && target.isValid()) {
- containerWidth -= (getHgap() + 1);
- }
-
- return new Dimension(containerWidth, containerHeight);
- }
- }
- }
-
- private class Row {
-
- final List components;
- final List oppositeAligned;
- final int height;
- final int width;
-
- public Row(List components, List oppositeAligned, int height, int width) {
- this.components = components;
- this.oppositeAligned = oppositeAligned;
- this.height = height;
- this.width = width;
- }
- }
-
- private List getAllRows(List components, boolean preferred, int maxWidth) {
- List originalComp
- = components
- .stream()
- .filter((comp) -> !this.oppositeAlignedItems.contains(comp))
- .collect(Collectors.toList());
-
- List originalRowSet = getRowSet(originalComp, preferred, maxWidth);
-
- List oppositeAlignedComp
- = components
- .stream()
- .filter((comp) -> this.oppositeAlignedItems.contains(comp))
- .collect(Collectors.toList());
-
- // go in reverse order and then revert so we can use same getRowSet method
- Collections.reverse(oppositeAlignedComp);
- List oppositeRowSet = getRowSet(oppositeAlignedComp, preferred, maxWidth)
- .stream()
- .map((Row row) -> {
- Collections.reverse(row.components);
- return new Row(null, row.components, row.height, row.width);
- })
- .collect(Collectors.toList());
- Collections.reverse(oppositeRowSet);
-
- List toReturn = new ArrayList<>();
-
- if (originalRowSet.size() > 0 && oppositeRowSet.size() > 0) {
- Row lastOrig = originalRowSet.get(originalRowSet.size() - 1);
- Row firstOpp = oppositeRowSet.get(0);
-
- int proposedRowWidth = lastOrig.width + firstOpp.width + getHgap();
- if (proposedRowWidth <= maxWidth) {
- Row middleRow = new Row(lastOrig.components, firstOpp.oppositeAligned,
- Math.max(lastOrig.height, firstOpp.height), proposedRowWidth);
-
- toReturn.addAll(originalRowSet.subList(0, originalRowSet.size() - 1));
- toReturn.add(middleRow);
- toReturn.addAll(oppositeRowSet.subList(1, oppositeRowSet.size()));
- return toReturn;
- }
- }
-
- toReturn.addAll(originalRowSet);
- toReturn.addAll(oppositeRowSet);
- return toReturn;
- }
-
- private List getRowSet(List components, boolean preferred, int maxWidth) {
- List rows = new ArrayList<>();
-
- List rowComponents = new ArrayList<>();
- int rowWidth = 0;
- int rowHeight = 0;
-
- for (Component m : components) {
- if (m.isVisible()) {
- Dimension d = preferred ? m.getPreferredSize() : m.getMinimumSize();
-
- // Can't add the component to current row. Start a new row.
- if (rowWidth + d.width > maxWidth) {
- rows.add(new Row(rowComponents, null, rowHeight, rowWidth));
- rowComponents = new ArrayList<>();
- rowWidth = 0;
- rowHeight = 0;
- }
-
- // Add a horizontal gap for all components after the first
- if (rowWidth != 0) {
- rowWidth += getHgap();
- }
-
- rowComponents.add(m);
- rowWidth += d.width;
- rowHeight = Math.max(rowHeight, d.height);
- }
- }
-
- if (rowComponents.size() > 0) {
- rows.add(new Row(rowComponents, null, rowHeight, rowWidth));
- }
-
- return rows;
- }
-}