diff --git a/Core/src/org/sleuthkit/autopsy/communications/CVTTopComponent.java b/Core/src/org/sleuthkit/autopsy/communications/CVTTopComponent.java index db62579ad5..69ea42c8aa 100644 --- a/Core/src/org/sleuthkit/autopsy/communications/CVTTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/communications/CVTTopComponent.java @@ -24,6 +24,7 @@ import java.awt.Component; import java.awt.Font; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.HashSet; import java.util.List; import java.util.stream.Collectors; import javax.swing.ImageIcon; @@ -37,7 +38,9 @@ import org.openide.windows.RetainLocation; import org.openide.windows.TopComponent; import org.openide.windows.WindowManager; import org.sleuthkit.autopsy.communications.relationships.RelationshipBrowser; +import org.sleuthkit.autopsy.communications.relationships.SelectionInfo; import org.sleuthkit.autopsy.coreutils.ThreadConfined; +import org.sleuthkit.datamodel.CommunicationsFilter; /** * Top component which displays the Communications Visualization Tool. @@ -51,11 +54,11 @@ public final class CVTTopComponent extends TopComponent { private static final long serialVersionUID = 1L; private boolean filtersVisible = true; - private final RelationshipBrowser relationshipBrowser; + private final RelationshipBrowser relationshipBrowser = new RelationshipBrowser(); + private CommunicationsFilter currentFilter; @ThreadConfined(type = ThreadConfined.ThreadType.AWT) public CVTTopComponent() { - relationshipBrowser = new RelationshipBrowser(); initComponents(); splitPane.setRightComponent(relationshipBrowser); @@ -77,6 +80,8 @@ public final class CVTTopComponent extends TopComponent { Lookup lookup = ((Lookup.Provider)selectedComponent).getLookup(); proxyLookup.setNewLookups(lookup); } + + relationshipBrowser.setSelectionInfo(new SelectionInfo(new HashSet<>(), new HashSet<>(), currentFilter)); }); @@ -88,12 +93,20 @@ public final class CVTTopComponent extends TopComponent { CVTEvents.getCVTEventBus().register(vizPanel); CVTEvents.getCVTEventBus().register(accountsBrowser); CVTEvents.getCVTEventBus().register(filtersPane); + + filterTabbedPane.setIconAt(0, new ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/arrow-180.png"))); + filterTabbedPane.setTitleAt(0, ""); } @Subscribe void pinAccount(CVTEvents.PinAccountsEvent pinEvent) { browseVisualizeTabPane.setSelectedIndex(1); } + + @Subscribe + void handle(final CVTEvents.FilterChangeEvent filterChangeEvent) { + currentFilter = filterChangeEvent.getNewFilter(); + } /** * This method is called from within the constructor to initialize the form. @@ -103,7 +116,7 @@ public final class CVTTopComponent extends TopComponent { // //GEN-BEGIN:initComponents private void initComponents() { - filterTabPane = new JTabbedPane(); + filterTabbedPane = new JTabbedPane(); filterTabPanel = new JPanel(); filtersPane = new FiltersPanel(); splitPane = new JSplitPane(); @@ -113,17 +126,18 @@ public final class CVTTopComponent extends TopComponent { setLayout(new BorderLayout()); - filterTabPane.addMouseListener(new MouseAdapter() { + filterTabbedPane.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { - filterTabPaneMouseClicked(evt); + filterTabbedPaneMouseClicked(evt); } }); - filterTabPanel.add(filtersPane); + filterTabPanel.setLayout(new BorderLayout()); + filterTabPanel.add(filtersPane, BorderLayout.CENTER); - filterTabPane.addTab(NbBundle.getMessage(CVTTopComponent.class, "CVTTopComponent.filterTabPanel.TabConstraints.tabTitle"), filterTabPanel); // NOI18N + filterTabbedPane.addTab(NbBundle.getMessage(CVTTopComponent.class, "CVTTopComponent.filterTabPanel.TabConstraints.tabTitle"), filterTabPanel); // NOI18N - add(filterTabPane, BorderLayout.WEST); + add(filterTabbedPane, BorderLayout.WEST); splitPane.setDividerLocation(1); splitPane.setResizeWeight(0.25); @@ -138,15 +152,17 @@ public final class CVTTopComponent extends TopComponent { add(splitPane, BorderLayout.CENTER); }// //GEN-END:initComponents - private void filterTabPaneMouseClicked(MouseEvent evt) {//GEN-FIRST:event_filterTabPaneMouseClicked - int index = filterTabPane.indexAtLocation(evt.getX(), evt.getY()); + private void filterTabbedPaneMouseClicked(MouseEvent evt) {//GEN-FIRST:event_filterTabPaneMouseClicked + int index = filterTabbedPane.indexAtLocation(evt.getX(), evt.getY()); if(index != -1) { if(filtersVisible) { + filterTabbedPane.setIconAt(0, new ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/arrow.png"))); filterTabPanel.removeAll(); filterTabPanel.revalidate(); filtersVisible = false; } else { - filterTabPanel.add(filtersPane); + filterTabbedPane.setIconAt(0, new ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/arrow-180.png"))); + filterTabPanel.add(filtersPane, BorderLayout.CENTER); filterTabPanel.revalidate(); filtersVisible = true; } @@ -157,7 +173,7 @@ public final class CVTTopComponent extends TopComponent { // Variables declaration - do not modify//GEN-BEGIN:variables private AccountsBrowser accountsBrowser; private JTabbedPane browseVisualizeTabPane; - private JTabbedPane filterTabPane; + private JTabbedPane filterTabbedPane; private JPanel filterTabPanel; private FiltersPanel filtersPane; private JSplitPane splitPane; diff --git a/Core/src/org/sleuthkit/autopsy/communications/FiltersPanel.form b/Core/src/org/sleuthkit/autopsy/communications/FiltersPanel.form index 33fe6d5228..c1b520127e 100644 --- a/Core/src/org/sleuthkit/autopsy/communications/FiltersPanel.form +++ b/Core/src/org/sleuthkit/autopsy/communications/FiltersPanel.form @@ -18,6 +18,7 @@ + @@ -37,7 +38,7 @@ - + @@ -128,7 +129,7 @@ - + @@ -222,7 +223,7 @@ - + @@ -325,7 +326,7 @@ - + @@ -422,7 +423,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/communications/FiltersPanel.java b/Core/src/org/sleuthkit/autopsy/communications/FiltersPanel.java index a9c6f58e4e..61485832b0 100644 --- a/Core/src/org/sleuthkit/autopsy/communications/FiltersPanel.java +++ b/Core/src/org/sleuthkit/autopsy/communications/FiltersPanel.java @@ -477,6 +477,7 @@ final public class FiltersPanel extends JPanel { setLayout(new java.awt.GridBagLayout()); + scrollPane.setAutoscrolls(true); scrollPane.setBorder(null); mainPanel.setLayout(new java.awt.GridBagLayout()); @@ -541,7 +542,7 @@ final public class FiltersPanel extends JPanel { gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; - gridBagConstraints.insets = new java.awt.Insets(15, 0, 15, 0); + gridBagConstraints.insets = new java.awt.Insets(15, 0, 15, 25); mainPanel.add(limitPane, gridBagConstraints); startDatePicker.setEnabled(false); @@ -608,7 +609,7 @@ final public class FiltersPanel extends JPanel { gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(15, 0, 0, 0); + gridBagConstraints.insets = new java.awt.Insets(15, 0, 0, 25); mainPanel.add(dateRangePane, gridBagConstraints); devicesPane.setLayout(new java.awt.GridBagLayout()); @@ -686,7 +687,7 @@ final public class FiltersPanel extends JPanel { gridBagConstraints.ipady = 100; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(15, 0, 0, 0); + gridBagConstraints.insets = new java.awt.Insets(15, 0, 0, 25); mainPanel.add(devicesPane, gridBagConstraints); accountTypesPane.setLayout(new java.awt.GridBagLayout()); @@ -760,7 +761,7 @@ final public class FiltersPanel extends JPanel { gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(15, 0, 0, 0); + gridBagConstraints.insets = new java.awt.Insets(15, 0, 0, 25); mainPanel.add(accountTypesPane, gridBagConstraints); topPane.setLayout(new java.awt.GridBagLayout()); @@ -810,6 +811,7 @@ final public class FiltersPanel extends JPanel { gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_END; gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 25); mainPanel.add(topPane, gridBagConstraints); scrollPane.setViewportView(mainPanel); diff --git a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.form b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.form index 4d8b4860dc..910b2a8bd3 100644 --- a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.form +++ b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.form @@ -15,7 +15,7 @@ - + @@ -40,9 +40,9 @@ - + - + diff --git a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java index 4d689f0642..cd52af336c 100644 --- a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java +++ b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java @@ -47,8 +47,6 @@ import java.awt.FlowLayout; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -113,7 +111,7 @@ import org.sleuthkit.datamodel.AccountDeviceInstance; import org.sleuthkit.datamodel.CommunicationsFilter; import org.sleuthkit.datamodel.CommunicationsManager; import org.sleuthkit.datamodel.TskCoreException; -import org.sleuthkit.autopsy.corecomponents.WrapLayout; +import org.sleuthkit.autopsy.uicomponents.WrapLayout; /** * A panel that goes in the Visualize tab of the Communications Visualization * Tool. Hosts an JGraphX mxGraphComponent that implements the communications @@ -410,9 +408,9 @@ final public class VisualizationPanel extends JPanel { placeHolderPanel.setLayout(placeHolderPanelLayout); placeHolderPanelLayout.setHorizontalGroup(placeHolderPanelLayout.createParallelGroup(GroupLayout.LEADING) .add(placeHolderPanelLayout.createSequentialGroup() - .addContainerGap(315, Short.MAX_VALUE) + .addContainerGap(316, Short.MAX_VALUE) .add(jTextArea1, GroupLayout.PREFERRED_SIZE, 424, GroupLayout.PREFERRED_SIZE) - .addContainerGap(482, Short.MAX_VALUE)) + .addContainerGap(481, Short.MAX_VALUE)) ); placeHolderPanelLayout.setVerticalGroup(placeHolderPanelLayout.createParallelGroup(GroupLayout.LEADING) .add(placeHolderPanelLayout.createSequentialGroup() diff --git a/Core/src/org/sleuthkit/autopsy/communications/images/arrow-180.png b/Core/src/org/sleuthkit/autopsy/communications/images/arrow-180.png new file mode 100755 index 0000000000..4d2aa3ccb2 Binary files /dev/null and b/Core/src/org/sleuthkit/autopsy/communications/images/arrow-180.png differ diff --git a/Core/src/org/sleuthkit/autopsy/communications/images/arrow.png b/Core/src/org/sleuthkit/autopsy/communications/images/arrow.png new file mode 100755 index 0000000000..12077d3324 Binary files /dev/null and b/Core/src/org/sleuthkit/autopsy/communications/images/arrow.png differ diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java index 3199dbd7e8..807acc5e07 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java @@ -56,6 +56,7 @@ import static org.sleuthkit.autopsy.corecomponents.Bundle.*; import org.sleuthkit.autopsy.corecomponents.ResultViewerPersistence.SortCriterion; import org.sleuthkit.autopsy.coreutils.ImageUtils; import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.uicomponents.WrapLayout; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.TskCoreException; diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/WrapLayout.java b/Core/src/org/sleuthkit/autopsy/uicomponents/WrapLayout.java old mode 100644 new mode 100755 similarity index 99% rename from Core/src/org/sleuthkit/autopsy/corecomponents/WrapLayout.java rename to Core/src/org/sleuthkit/autopsy/uicomponents/WrapLayout.java index 152d0e8647..92d4af32db --- a/Core/src/org/sleuthkit/autopsy/corecomponents/WrapLayout.java +++ b/Core/src/org/sleuthkit/autopsy/uicomponents/WrapLayout.java @@ -16,7 +16,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.sleuthkit.autopsy.corecomponents; +package org.sleuthkit.autopsy.uicomponents; import java.awt.Component; import java.awt.Container;