diff --git a/Core/src/org/sleuthkit/autopsy/discovery/AbstractFiltersPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/AbstractFiltersPanel.java index 7bcd1c8243..2f718c3aa5 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/AbstractFiltersPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/AbstractFiltersPanel.java @@ -101,7 +101,7 @@ abstract class AbstractFiltersPanel extends JPanel implements ActionListener, Li constraints.weightx = LABEL_WEIGHT; constraints.weighty = LABEL_WEIGHT; constraints.gridwidth = LABEL_WIDTH; - addToGridBagLayout(filterPanel.getCheckbox(), null, column); + addToGridBagLayout(filterPanel.getCheckbox(), filterPanel.getAdditionalLabel(), column); if (filterPanel.hasPanel()) { constraints.gridx += constraints.gridwidth; constraints.fill = GridBagConstraints.BOTH; diff --git a/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties b/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties index 52c989c8e7..795018f1ac 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties @@ -101,3 +101,6 @@ DocumentFilterPanel.documentsFiltersSplitPane.border.title=Step 2: Filter which ImageFilterPanel.imageFiltersSplitPane.border.title=Step 2: Filter which images to show VideoFilterPanel.videoFiltersSplitPane.border.title=Step 2: Filter which videos to show DiscoveryDialog.step1Label.text=Step 1: Choose result type +ResultsSplitPaneDivider.hideButton.text= +ResultsSplitPaneDivider.showButton.text= +ResultsSplitPaneDivider.detailsLabel.text=Details Area diff --git a/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties-MERGED index 0779798a6e..df1b6b8fd2 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/discovery/Bundle.properties-MERGED @@ -11,7 +11,7 @@ DiscoveryTopComponent.name=\ Discovery DiscoveryTopComponent.newSearch.text=New Search DiscoveryTopComponent.searchCancelled.text=Search has been cancelled. # {0} - search -DiscoveryTopComponent.searchComplete.text=Results for {0} +DiscoveryTopComponent.searchComplete.text=Results with {0} # {0} - searchType DiscoveryTopComponent.searchInProgress.text=Performing search for results of type {0}. Please wait. DiscoveryUiUtility.bytes.text=bytes @@ -57,18 +57,24 @@ FileSearch.InterestingItemGroupKey.noSets=None FileSearch.KeywordListGroupKey.noKeywords=None FileSearch.NoGroupingGroupKey.allFiles=All Files FileSearch.ObjectDetectedGroupKey.noSets=None -FileSearchData.FileSize.LARGE_IMAGE.displayName=Large: 1-50MB -FileSearchData.FileSize.LARGE_VIDEO.displayName=Large: 1-5GB -FileSearchData.FileSize.MEDIUM_IMAGE.displayName=Medium: 100KB-1MB -FileSearchData.FileSize.MEDIUM_VIDEO.displayName=Medium: 100MB-1GB -FileSearchData.FileSize.SMALL_IMAGE.displayName=Small: 16-100KB -FileSearchData.FileSize.SMALL_VIDEO.displayName=Small: 500KB-100MB -FileSearchData.FileSize.XLARGE_IMAGE.displayName=XLarge: 50-200MB -FileSearchData.FileSize.XLARGE_VIDEO.displayName=XLarge: 5-10GB -FileSearchData.FileSize.XSMALL_IMAGE.displayName=XSmall: 0-16KB -FileSearchData.FileSize.XSMALL_VIDEO.displayName=XSmall: 0-500KB -FileSearchData.FileSize.XXLARGE_IMAGE.displayName=XXLarge: 200MB+ -FileSearchData.FileSize.XXLARGE_VIDEO.displayName=XXLarge: 10GB+ +FileSearchData.FileSize.100kbto1mb=: 100KB-1MB +FileSearchData.FileSize.100mbto1gb=: 100MB-1GB +FileSearchData.FileSize.10PlusGb=: 10GB+ +FileSearchData.FileSize.16kbto100kb=: 16-100KB +FileSearchData.FileSize.1gbto5gb=: 1-5GB +FileSearchData.FileSize.1mbto50mb=: 1-50MB +FileSearchData.FileSize.200PlusMb=: 200MB+ +FileSearchData.FileSize.500kbto100mb=: 500KB-100MB +FileSearchData.FileSize.50mbto200mb=: 50-200MB +FileSearchData.FileSize.5gbto10gb=: 5-10GB +FileSearchData.FileSize.LARGE.displayName=Large +FileSearchData.FileSize.MEDIUM.displayName=Medium +FileSearchData.FileSize.SMALL.displayName=Small +FileSearchData.FileSize.upTo16kb=: 0-16KB +FileSearchData.FileSize.upTo500kb=: 0-500KB +FileSearchData.FileSize.XLARGE.displayName=XLarge +FileSearchData.FileSize.XSMALL.displayName=XSmall +FileSearchData.FileSize.XXLARGE.displayName=XXLarge FileSearchData.FileType.Audio.displayName=Audio FileSearchData.FileType.Documents.displayName=Documents FileSearchData.FileType.Executables.displayName=Executables @@ -106,45 +112,44 @@ FileSearchFiltering.concatenateSetNamesForDisplay.comma=, # {1} - Data source ID FileSearchFiltering.DataSourceFilter.datasource={0}({1}) # {0} - filters -FileSearchFiltering.DataSourceFilter.desc=Files in data source(s): {0} -FileSearchFiltering.DataSourceFilter.or=\ or +FileSearchFiltering.DataSourceFilter.desc=Data source(s): {0} +FileSearchFiltering.DataSourceFilter.or=, # {0} - filters -FileSearchFiltering.FileTypeFilter.desc=Files with type: {0} -FileSearchFiltering.FileTypeFilter.or=\ or +FileSearchFiltering.FileTypeFilter.desc=Type: {0} +FileSearchFiltering.FileTypeFilter.or=, # {0} - filters -FileSearchFiltering.FrequencyFilter.desc=Files with frequency: {0} -FileSearchFiltering.FrequencyFilter.or=\ or +FileSearchFiltering.FrequencyFilter.desc=Past occurrences: {0} +FileSearchFiltering.FrequencyFilter.or=, # {0} - filters -FileSearchFiltering.HashSetFilter.desc=Files with hash set hits in set(s): {0} +FileSearchFiltering.HashSetFilter.desc=Hash set hits in set(s): {0} # {0} - filters -FileSearchFiltering.InterestingItemSetFilter.desc=Files with interesting item hits in set(s): {0} +FileSearchFiltering.InterestingItemSetFilter.desc=Interesting item hits in set(s): {0} # {0} - filters -FileSearchFiltering.KeywordListFilter.desc=Files with keywords in list(s): {0} -FileSearchFiltering.KnownFilter.desc=Files which are not known +FileSearchFiltering.KeywordListFilter.desc=Keywords in list(s): {0} +FileSearchFiltering.KnownFilter.desc=which are not known # {0} - filters -FileSearchFiltering.ObjectDetectionFilter.desc=Files with objects detected in set(s): {0} +FileSearchFiltering.ObjectDetectionFilter.desc=Objects detected in set(s): {0} # {0} - filters -FileSearchFiltering.ParentFilter.desc=Files with paths matching: {0} +FileSearchFiltering.ParentFilter.desc=Paths matching: {0} FileSearchFiltering.ParentFilter.exact=(exact match) -FileSearchFiltering.ParentFilter.or=\ or +FileSearchFiltering.ParentFilter.excluded=(excluded) +FileSearchFiltering.ParentFilter.included=(included) +FileSearchFiltering.ParentFilter.or=, FileSearchFiltering.ParentFilter.substring=(substring) FileSearchFiltering.ParentSearchTerm.excludeString=\ (exclude) FileSearchFiltering.ParentSearchTerm.fullString=\ (exact) FileSearchFiltering.ParentSearchTerm.includeString=\ (include) FileSearchFiltering.ParentSearchTerm.subString=\ (substring) -FileSearchFiltering.PreviouslyNotableFilter.desc=Files that were previously marked as notable +FileSearchFiltering.PreviouslyNotableFilter.desc=that were previously marked as notable # {0} - filters -FileSearchFiltering.ScoreFilter.desc=Files with score(s) of : {0} +FileSearchFiltering.ScoreFilter.desc=Score(s) of : {0} # {0} - filters -FileSearchFiltering.SizeFilter.desc=Files with size in range(s): {0} -FileSearchFiltering.SizeFilter.or=\ or -# {0} - Minimum bytes -# {1} - Maximum bytes -FileSearchFiltering.SizeFilter.range=({0} to {1}) +FileSearchFiltering.SizeFilter.desc=Size(s): {0} +FileSearchFiltering.SizeFilter.or=, # {0} - tag names -FileSearchFiltering.TagsFilter.desc=Files that have been tagged {0} -FileSearchFiltering.TagsFilter.or=\ or -FileSearchFiltering.UserCreatedFilter.desc=Files that contain EXIF data +FileSearchFiltering.TagsFilter.desc=Tagged {0} +FileSearchFiltering.TagsFilter.or=, +FileSearchFiltering.UserCreatedFilter.desc=that contain EXIF data FileSearchPanel.sortingPanel.border.title=Grouping FileSearchPanel.addButton.text=Add FileSearchPanel.substringRadioButton.text=Substring @@ -259,6 +264,9 @@ DocumentFilterPanel.documentsFiltersSplitPane.border.title=Step 2: Filter which ImageFilterPanel.imageFiltersSplitPane.border.title=Step 2: Filter which images to show VideoFilterPanel.videoFiltersSplitPane.border.title=Step 2: Filter which videos to show DiscoveryDialog.step1Label.text=Step 1: Choose result type +ResultsSplitPaneDivider.hideButton.text= +ResultsSplitPaneDivider.showButton.text= +ResultsSplitPaneDivider.detailsLabel.text=Details Area VideoThumbnailPanel.bytes.text=bytes VideoThumbnailPanel.deleted.text=All instances of file are deleted. VideoThumbnailPanel.gigaBytes.text=GB diff --git a/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.form b/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.form index d19a7dda96..19116a24fe 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.form @@ -43,23 +43,25 @@ - - - - - - - - + + + + + + + + + + + - diff --git a/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.java index 948dbd4bee..33f69712f0 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryDialog.java @@ -275,19 +275,21 @@ final class DiscoveryDialog extends javax.swing.JDialog { toolBarPanelLayout.setHorizontalGroup( toolBarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(toolBarPanelLayout.createSequentialGroup() - .addContainerGap(196, Short.MAX_VALUE) - .addGroup(toolBarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, toolBarPanelLayout.createSequentialGroup() - .addComponent(filler1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(step1Label, javax.swing.GroupLayout.PREFERRED_SIZE, 243, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap() + .addGroup(toolBarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(toolBarPanelLayout.createSequentialGroup() + .addGap(10, 10, 10) .addComponent(imagesButton, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(videosButton, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(documentsButton))) - .addContainerGap(196, Short.MAX_VALUE)) + .addComponent(documentsButton) + .addContainerGap(370, Short.MAX_VALUE)) + .addGroup(toolBarPanelLayout.createSequentialGroup() + .addComponent(step1Label, javax.swing.GroupLayout.PREFERRED_SIZE, 243, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(filler1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(391, Short.MAX_VALUE)))) ); toolBarPanelLayout.setVerticalGroup( toolBarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryTopComponent.form b/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryTopComponent.form index 4e62b44cb9..4a1f471190 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryTopComponent.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryTopComponent.form @@ -41,7 +41,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryTopComponent.java b/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryTopComponent.java index 30341184ad..607459325d 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/DiscoveryTopComponent.java @@ -19,11 +19,14 @@ package org.sleuthkit.autopsy.discovery; import com.google.common.eventbus.Subscribe; +import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.util.List; import java.util.stream.Collectors; import javax.swing.JSplitPane; +import javax.swing.plaf.basic.BasicSplitPaneDivider; +import javax.swing.plaf.basic.BasicSplitPaneUI; import org.openide.util.NbBundle; import org.openide.util.NbBundle.Messages; import org.openide.windows.Mode; @@ -67,6 +70,34 @@ public final class DiscoveryTopComponent extends TopComponent { mainSplitPane.setLeftComponent(groupListPanel); rightSplitPane.setTopComponent(resultsPanel); rightSplitPane.setBottomComponent(detailsPanel); + //set color of divider + rightSplitPane.setUI(new BasicSplitPaneUI() { + @Override + public BasicSplitPaneDivider createDefaultDivider() { + return new BasicSplitPaneDividerImpl(this); + + } + }); + } + + /** + * Private class for replacing the divider for the results split pane. + */ + private final class BasicSplitPaneDividerImpl extends BasicSplitPaneDivider { + + /** + * Construct a new BasicSplitPaneDividerImpl. + * + * @param ui The component which contains the split pane this divider is + * in. + */ + BasicSplitPaneDividerImpl(BasicSplitPaneUI ui) { + super(ui); + this.setLayout(new BorderLayout()); + this.add(new ResultsSplitPaneDivider()); + } + + private static final long serialVersionUID = 1L; } /** @@ -129,7 +160,7 @@ public final class DiscoveryTopComponent extends TopComponent { mainSplitPane.setDividerLocation(250); mainSplitPane.setPreferredSize(new java.awt.Dimension(1100, 700)); - rightSplitPane.setDividerSize(15); + rightSplitPane.setDividerSize(35); rightSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); rightSplitPane.setResizeWeight(1.0); rightSplitPane.setPreferredSize(new java.awt.Dimension(800, 700)); @@ -249,11 +280,11 @@ public final class DiscoveryTopComponent extends TopComponent { @Subscribe @Messages({"DiscoveryTopComponent.newSearch.text=New Search", "# {0} - search", - "DiscoveryTopComponent.searchComplete.text=Results for {0}"}) + "DiscoveryTopComponent.searchComplete.text=Results with {0}"}) void handleSearchCompleteEvent(DiscoveryEventUtils.SearchCompleteEvent searchCompleteEvent) { newSearchButton.setText(Bundle.DiscoveryTopComponent_newSearch_text()); progressMessageTextArea.setForeground(Color.black); - progressMessageTextArea.setText(Bundle.DiscoveryTopComponent_searchComplete_text(searchCompleteEvent.getFilters().stream().map(FileFilter::getDesc).collect(Collectors.joining(", ")))); + progressMessageTextArea.setText(Bundle.DiscoveryTopComponent_searchComplete_text(searchCompleteEvent.getFilters().stream().map(FileFilter::getDesc).collect(Collectors.joining("; ")))); progressMessageTextArea.setCaretPosition(0); } @@ -269,6 +300,7 @@ public final class DiscoveryTopComponent extends TopComponent { newSearchButton.setText(Bundle.DiscoveryTopComponent_newSearch_text()); progressMessageTextArea.setForeground(Color.red); progressMessageTextArea.setText(Bundle.DiscoveryTopComponent_searchCancelled_text()); + } /** diff --git a/Core/src/org/sleuthkit/autopsy/discovery/DocumentFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/DocumentFilterPanel.java index 9756045387..216a3c12b3 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/DocumentFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/DocumentFilterPanel.java @@ -45,7 +45,6 @@ final class DocumentFilterPanel extends AbstractFiltersPanel { addFilter(new PastOccurrencesFilterPanel(), true, pastOccurrencesIndices, 0); addFilter(new HashSetFilterPanel(), false, null, 1); addFilter(new InterestingItemsFilterPanel(), false, null, 1); - addFilter(new ObjectDetectedFilterPanel(), false, null, 1); addFilter(new ParentFolderFilterPanel(), false, null, 1); addPanelsToScrollPane(documentsFiltersSplitPane); } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/FileSearchData.java b/Core/src/org/sleuthkit/autopsy/discovery/FileSearchData.java index 40df3ee905..81bb2ca641 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/FileSearchData.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/FileSearchData.java @@ -126,39 +126,46 @@ final class FileSearchData { * Enum representing the file size */ @NbBundle.Messages({ - "FileSearchData.FileSize.XXLARGE_IMAGE.displayName=XXLarge: 200MB+", - "FileSearchData.FileSize.XLARGE_IMAGE.displayName=XLarge: 50-200MB", - "FileSearchData.FileSize.LARGE_IMAGE.displayName=Large: 1-50MB", - "FileSearchData.FileSize.MEDIUM_IMAGE.displayName=Medium: 100KB-1MB", - "FileSearchData.FileSize.SMALL_IMAGE.displayName=Small: 16-100KB", - "FileSearchData.FileSize.XSMALL_IMAGE.displayName=XSmall: 0-16KB", - "FileSearchData.FileSize.XXLARGE_VIDEO.displayName=XXLarge: 10GB+", - "FileSearchData.FileSize.XLARGE_VIDEO.displayName=XLarge: 5-10GB", - "FileSearchData.FileSize.LARGE_VIDEO.displayName=Large: 1-5GB", - "FileSearchData.FileSize.MEDIUM_VIDEO.displayName=Medium: 100MB-1GB", - "FileSearchData.FileSize.SMALL_VIDEO.displayName=Small: 500KB-100MB", - "FileSearchData.FileSize.XSMALL_VIDEO.displayName=XSmall: 0-500KB",}) + "FileSearchData.FileSize.XXLARGE.displayName=XXLarge", + "FileSearchData.FileSize.XLARGE.displayName=XLarge", + "FileSearchData.FileSize.LARGE.displayName=Large", + "FileSearchData.FileSize.MEDIUM.displayName=Medium", + "FileSearchData.FileSize.SMALL.displayName=Small", + "FileSearchData.FileSize.XSMALL.displayName=XSmall", + "FileSearchData.FileSize.10PlusGb=: 10GB+", + "FileSearchData.FileSize.5gbto10gb=: 5-10GB", + "FileSearchData.FileSize.1gbto5gb=: 1-5GB", + "FileSearchData.FileSize.100mbto1gb=: 100MB-1GB", + "FileSearchData.FileSize.200PlusMb=: 200MB+", + "FileSearchData.FileSize.50mbto200mb=: 50-200MB", + "FileSearchData.FileSize.500kbto100mb=: 500KB-100MB", + "FileSearchData.FileSize.1mbto50mb=: 1-50MB", + "FileSearchData.FileSize.100kbto1mb=: 100KB-1MB", + "FileSearchData.FileSize.16kbto100kb=: 16-100KB", + "FileSearchData.FileSize.upTo500kb=: 0-500KB", + "FileSearchData.FileSize.upTo16kb=: 0-16KB",}) enum FileSize { - XXLARGE_VIDEO(0, 10000 * BYTES_PER_MB, -1, Bundle.FileSearchData_FileSize_XXLARGE_VIDEO_displayName()), - XLARGE_VIDEO(1, 5000 * BYTES_PER_MB, 10000 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_XLARGE_VIDEO_displayName()), - LARGE_VIDEO(2, 1000 * BYTES_PER_MB, 5000 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_LARGE_VIDEO_displayName()), - MEDIUM_VIDEO(3, 100 * BYTES_PER_MB, 1000 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_MEDIUM_VIDEO_displayName()), - SMALL_VIDEO(4, 500000, 100 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_SMALL_VIDEO_displayName()), - XSMALL_VIDEO(5, 0, 500000, Bundle.FileSearchData_FileSize_XSMALL_VIDEO_displayName()), - XXLARGE_IMAGE(6, 200 * BYTES_PER_MB, -1, Bundle.FileSearchData_FileSize_XXLARGE_IMAGE_displayName()), - XLARGE_IMAGE(7, 50 * BYTES_PER_MB, 200 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_XLARGE_IMAGE_displayName()), - LARGE_IMAGE(8, 1 * BYTES_PER_MB, 50 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_LARGE_IMAGE_displayName()), - MEDIUM_IMAGE(9, 100000, 1 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_MEDIUM_IMAGE_displayName()), - SMALL_IMAGE(10, 16000, 100000, Bundle.FileSearchData_FileSize_SMALL_IMAGE_displayName()), - XSMALL_IMAGE(11, 0, 16000, Bundle.FileSearchData_FileSize_XSMALL_IMAGE_displayName()); + XXLARGE_VIDEO(0, 10000 * BYTES_PER_MB, -1, Bundle.FileSearchData_FileSize_XXLARGE_displayName(), Bundle.FileSearchData_FileSize_10PlusGb()), + XLARGE_VIDEO(1, 5000 * BYTES_PER_MB, 10000 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_XLARGE_displayName(), Bundle.FileSearchData_FileSize_5gbto10gb()), + LARGE_VIDEO(2, 1000 * BYTES_PER_MB, 5000 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_LARGE_displayName(), Bundle.FileSearchData_FileSize_1gbto5gb()), + MEDIUM_VIDEO(3, 100 * BYTES_PER_MB, 1000 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_MEDIUM_displayName(), Bundle.FileSearchData_FileSize_100mbto1gb()), + SMALL_VIDEO(4, 500000, 100 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_SMALL_displayName(), Bundle.FileSearchData_FileSize_500kbto100mb()), + XSMALL_VIDEO(5, 0, 500000, Bundle.FileSearchData_FileSize_XSMALL_displayName(), Bundle.FileSearchData_FileSize_upTo500kb()), + XXLARGE_IMAGE(6, 200 * BYTES_PER_MB, -1, Bundle.FileSearchData_FileSize_XXLARGE_displayName(), Bundle.FileSearchData_FileSize_200PlusMb()), + XLARGE_IMAGE(7, 50 * BYTES_PER_MB, 200 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_XLARGE_displayName(), Bundle.FileSearchData_FileSize_50mbto200mb()), + LARGE_IMAGE(8, 1 * BYTES_PER_MB, 50 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_LARGE_displayName(), Bundle.FileSearchData_FileSize_1mbto50mb()), + MEDIUM_IMAGE(9, 100000, 1 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_MEDIUM_displayName(), Bundle.FileSearchData_FileSize_100kbto1mb()), + SMALL_IMAGE(10, 16000, 100000, Bundle.FileSearchData_FileSize_SMALL_displayName(), Bundle.FileSearchData_FileSize_16kbto100kb()), + XSMALL_IMAGE(11, 0, 16000, Bundle.FileSearchData_FileSize_XSMALL_displayName(), Bundle.FileSearchData_FileSize_upTo16kb()); private final int ranking; // Must be unique for each value private final long minBytes; // Note that the size must be strictly greater than this to match private final long maxBytes; - private final String displayName; + private final String sizeGroup; + private final String displaySize; final static long NO_MAXIMUM = -1; - FileSize(int ranking, long minB, long maxB, String displayName) { + FileSize(int ranking, long minB, long maxB, String displayName, String displaySize) { this.ranking = ranking; this.minBytes = minB; if (maxB >= 0) { @@ -166,7 +173,8 @@ final class FileSearchData { } else { this.maxBytes = NO_MAXIMUM; } - this.displayName = displayName; + this.sizeGroup = displayName; + this.displaySize = displaySize; } /** @@ -246,7 +254,11 @@ final class FileSearchData { @Override public String toString() { - return displayName; + return sizeGroup + displaySize; + } + + String getSizeGroup(){ + return sizeGroup; } /** diff --git a/Core/src/org/sleuthkit/autopsy/discovery/FileSearchFiltering.java b/Core/src/org/sleuthkit/autopsy/discovery/FileSearchFiltering.java index 326bc7c15c..adf301537a 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/FileSearchFiltering.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/FileSearchFiltering.java @@ -207,11 +207,8 @@ class FileSearchFiltering { @NbBundle.Messages({ "# {0} - filters", - "FileSearchFiltering.SizeFilter.desc=Files with size in range(s): {0}", - "FileSearchFiltering.SizeFilter.or= or ", - "# {0} - Minimum bytes", - "# {1} - Maximum bytes", - "FileSearchFiltering.SizeFilter.range=({0} to {1})",}) + "FileSearchFiltering.SizeFilter.desc=Size(s): {0}", + "FileSearchFiltering.SizeFilter.or=, "}) @Override String getDesc() { String desc = ""; // NON-NLS @@ -219,7 +216,7 @@ class FileSearchFiltering { if (!desc.isEmpty()) { desc += Bundle.FileSearchFiltering_SizeFilter_or(); } - desc += Bundle.FileSearchFiltering_SizeFilter_range(size.getMinBytes(), size.getMaxBytes()); + desc += size.getSizeGroup(); } desc = Bundle.FileSearchFiltering_SizeFilter_desc(desc); return desc; @@ -364,10 +361,12 @@ class FileSearchFiltering { @NbBundle.Messages({ "# {0} - filters", - "FileSearchFiltering.ParentFilter.desc=Files with paths matching: {0}", - "FileSearchFiltering.ParentFilter.or= or ", + "FileSearchFiltering.ParentFilter.desc=Paths matching: {0}", + "FileSearchFiltering.ParentFilter.or=, ", "FileSearchFiltering.ParentFilter.exact=(exact match)", - "FileSearchFiltering.ParentFilter.substring=(substring)",}) + "FileSearchFiltering.ParentFilter.substring=(substring)", + "FileSearchFiltering.ParentFilter.included=(included)", + "FileSearchFiltering.ParentFilter.excluded=(excluded)"}) @Override String getDesc() { String desc = ""; // NON-NLS @@ -380,6 +379,11 @@ class FileSearchFiltering { } else { desc += searchTerm.getSearchStr() + Bundle.FileSearchFiltering_ParentFilter_substring(); } + if (searchTerm.isIncluded()) { + desc += Bundle.FileSearchFiltering_ParentFilter_included(); + } else { + desc += Bundle.FileSearchFiltering_ParentFilter_excluded(); + } } desc = Bundle.FileSearchFiltering_ParentFilter_desc(desc); return desc; @@ -417,8 +421,8 @@ class FileSearchFiltering { @NbBundle.Messages({ "# {0} - filters", - "FileSearchFiltering.DataSourceFilter.desc=Files in data source(s): {0}", - "FileSearchFiltering.DataSourceFilter.or= or ", + "FileSearchFiltering.DataSourceFilter.desc=Data source(s): {0}", + "FileSearchFiltering.DataSourceFilter.or=, ", "# {0} - Data source name", "# {1} - Data source ID", "FileSearchFiltering.DataSourceFilter.datasource={0}({1})",}) @@ -466,7 +470,7 @@ class FileSearchFiltering { @NbBundle.Messages({ "# {0} - filters", - "FileSearchFiltering.KeywordListFilter.desc=Files with keywords in list(s): {0}",}) + "FileSearchFiltering.KeywordListFilter.desc=Keywords in list(s): {0}",}) @Override String getDesc() { return Bundle.FileSearchFiltering_KeywordListFilter_desc(concatenateSetNamesForDisplay(listNames)); @@ -516,8 +520,8 @@ class FileSearchFiltering { @NbBundle.Messages({ "# {0} - filters", - "FileSearchFiltering.FileTypeFilter.desc=Files with type: {0}", - "FileSearchFiltering.FileTypeFilter.or= or ",}) + "FileSearchFiltering.FileTypeFilter.desc=Type: {0}", + "FileSearchFiltering.FileTypeFilter.or=, ",}) @Override String getDesc() { String desc = ""; @@ -586,8 +590,8 @@ class FileSearchFiltering { @NbBundle.Messages({ "# {0} - filters", - "FileSearchFiltering.FrequencyFilter.desc=Files with frequency: {0}", - "FileSearchFiltering.FrequencyFilter.or= or ",}) + "FileSearchFiltering.FrequencyFilter.desc=Past occurrences: {0}", + "FileSearchFiltering.FrequencyFilter.or=, ",}) @Override String getDesc() { String desc = ""; // NON-NLS @@ -595,7 +599,7 @@ class FileSearchFiltering { if (!desc.isEmpty()) { desc += Bundle.FileSearchFiltering_FrequencyFilter_or(); } - desc += freq.name(); + desc += freq.toString(); } return Bundle.FileSearchFiltering_FrequencyFilter_desc(desc); } @@ -632,7 +636,7 @@ class FileSearchFiltering { @NbBundle.Messages({ "# {0} - filters", - "FileSearchFiltering.HashSetFilter.desc=Files with hash set hits in set(s): {0}",}) + "FileSearchFiltering.HashSetFilter.desc=Hash set hits in set(s): {0}",}) @Override String getDesc() { return Bundle.FileSearchFiltering_HashSetFilter_desc(concatenateSetNamesForDisplay(setNames)); @@ -670,7 +674,7 @@ class FileSearchFiltering { @NbBundle.Messages({ "# {0} - filters", - "FileSearchFiltering.InterestingItemSetFilter.desc=Files with interesting item hits in set(s): {0}",}) + "FileSearchFiltering.InterestingItemSetFilter.desc=Interesting item hits in set(s): {0}",}) @Override String getDesc() { return Bundle.FileSearchFiltering_InterestingItemSetFilter_desc(concatenateSetNamesForDisplay(setNames)); @@ -708,7 +712,7 @@ class FileSearchFiltering { @NbBundle.Messages({ "# {0} - filters", - "FileSearchFiltering.ObjectDetectionFilter.desc=Files with objects detected in set(s): {0}",}) + "FileSearchFiltering.ObjectDetectionFilter.desc=Objects detected in set(s): {0}",}) @Override String getDesc() { return Bundle.FileSearchFiltering_ObjectDetectionFilter_desc(concatenateSetNamesForDisplay(typeNames)); @@ -784,7 +788,7 @@ class FileSearchFiltering { @NbBundle.Messages({ "# {0} - filters", - "FileSearchFiltering.ScoreFilter.desc=Files with score(s) of : {0}",}) + "FileSearchFiltering.ScoreFilter.desc=Score(s) of : {0}",}) @Override String getDesc() { return Bundle.FileSearchFiltering_ScoreFilter_desc( @@ -826,8 +830,8 @@ class FileSearchFiltering { @NbBundle.Messages({ "# {0} - tag names", - "FileSearchFiltering.TagsFilter.desc=Files that have been tagged {0}", - "FileSearchFiltering.TagsFilter.or= or ",}) + "FileSearchFiltering.TagsFilter.desc=Tagged {0}", + "FileSearchFiltering.TagsFilter.or=, ",}) @Override String getDesc() { String desc = ""; // NON-NLS @@ -862,7 +866,7 @@ class FileSearchFiltering { } @NbBundle.Messages({ - "FileSearchFiltering.UserCreatedFilter.desc=Files that contain EXIF data",}) + "FileSearchFiltering.UserCreatedFilter.desc=that contain EXIF data",}) @Override String getDesc() { return Bundle.FileSearchFiltering_UserCreatedFilter_desc(); @@ -931,7 +935,7 @@ class FileSearchFiltering { } @NbBundle.Messages({ - "FileSearchFiltering.PreviouslyNotableFilter.desc=Files that were previously marked as notable",}) + "FileSearchFiltering.PreviouslyNotableFilter.desc=that were previously marked as notable",}) @Override String getDesc() { return Bundle.FileSearchFiltering_PreviouslyNotableFilter_desc(); @@ -949,7 +953,7 @@ class FileSearchFiltering { } @NbBundle.Messages({ - "FileSearchFiltering.KnownFilter.desc=Files which are not known"}) + "FileSearchFiltering.KnownFilter.desc=which are not known"}) @Override String getDesc() { return Bundle.FileSearchFiltering_KnownFilter_desc(); diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ParentFolderFilterPanel.form b/Core/src/org/sleuthkit/autopsy/discovery/ParentFolderFilterPanel.form index c35bc16cb4..b350ab42b3 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ParentFolderFilterPanel.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/ParentFolderFilterPanel.form @@ -37,6 +37,18 @@ + + + + + + + + + + + + @@ -143,6 +155,9 @@ + + + @@ -152,6 +167,9 @@ + + + @@ -161,6 +179,9 @@ + + + @@ -169,6 +190,9 @@ + + + diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ParentFolderFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ParentFolderFilterPanel.java index 3ecb095868..7f10b38692 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ParentFolderFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ParentFolderFilterPanel.java @@ -66,6 +66,8 @@ final class ParentFolderFilterPanel extends AbstractDiscoveryFilterPanel { parentCheckbox = new javax.swing.JCheckBox(); parentLabel = new javax.swing.JLabel(); + javax.swing.ButtonGroup includeButtonGroup = new javax.swing.ButtonGroup(); + javax.swing.ButtonGroup pathTypeButtonGroup = new javax.swing.ButtonGroup(); parentScrollPane = new javax.swing.JScrollPane(); parentList = new javax.swing.JList<>(); fullRadioButton = new javax.swing.JRadioButton(); @@ -106,17 +108,21 @@ final class ParentFolderFilterPanel extends AbstractDiscoveryFilterPanel { }); parentScrollPane.setViewportView(parentList); + pathTypeButtonGroup.add(fullRadioButton); fullRadioButton.setSelected(true); org.openide.awt.Mnemonics.setLocalizedText(fullRadioButton, org.openide.util.NbBundle.getMessage(ParentFolderFilterPanel.class, "ParentFolderFilterPanel.fullRadioButton.text_1")); // NOI18N fullRadioButton.setEnabled(false); + includeButtonGroup.add(includeRadioButton); includeRadioButton.setSelected(true); org.openide.awt.Mnemonics.setLocalizedText(includeRadioButton, org.openide.util.NbBundle.getMessage(ParentFolderFilterPanel.class, "ParentFolderFilterPanel.includeRadioButton.text_1")); // NOI18N includeRadioButton.setEnabled(false); + pathTypeButtonGroup.add(substringRadioButton); org.openide.awt.Mnemonics.setLocalizedText(substringRadioButton, org.openide.util.NbBundle.getMessage(ParentFolderFilterPanel.class, "ParentFolderFilterPanel.substringRadioButton.text_1")); // NOI18N substringRadioButton.setEnabled(false); + includeButtonGroup.add(excludeRadioButton); org.openide.awt.Mnemonics.setLocalizedText(excludeRadioButton, org.openide.util.NbBundle.getMessage(ParentFolderFilterPanel.class, "ParentFolderFilterPanel.excludeRadioButton.text_1")); // NOI18N excludeRadioButton.setEnabled(false); @@ -188,7 +194,7 @@ final class ParentFolderFilterPanel extends AbstractDiscoveryFilterPanel { }// //GEN-END:initComponents private void parentCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_parentCheckboxActionPerformed -// parentFilterSettings(true, true, parentCheckbox.isSelected(), null); + configurePanel(parentCheckbox.isSelected(), null); }//GEN-LAST:event_parentCheckboxActionPerformed private void parentListValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_parentListValueChanged @@ -235,6 +241,7 @@ final class ParentFolderFilterPanel extends AbstractDiscoveryFilterPanel { parentCheckbox.setSelected(selected); if (parentCheckbox.isEnabled() && parentCheckbox.isSelected()) { parentScrollPane.setEnabled(true); + parentLabel.setEnabled(true); includeRadioButton.setEnabled(true); excludeRadioButton.setEnabled(true); fullRadioButton.setEnabled(true); @@ -248,6 +255,7 @@ final class ParentFolderFilterPanel extends AbstractDiscoveryFilterPanel { } } else { parentScrollPane.setEnabled(false); + parentLabel.setEnabled(false); parentList.setEnabled(false); includeRadioButton.setEnabled(false); excludeRadioButton.setEnabled(false); diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ResultsSplitPaneDivider.form b/Core/src/org/sleuthkit/autopsy/discovery/ResultsSplitPaneDivider.form new file mode 100644 index 0000000000..48ae94d8a9 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/discovery/ResultsSplitPaneDivider.form @@ -0,0 +1,141 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ResultsSplitPaneDivider.java b/Core/src/org/sleuthkit/autopsy/discovery/ResultsSplitPaneDivider.java new file mode 100644 index 0000000000..0a89f28711 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/discovery/ResultsSplitPaneDivider.java @@ -0,0 +1,121 @@ +/* + * Autopsy + * + * Copyright 2020 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.discovery; + +import java.awt.Cursor; + +/** + * Panel for separating the results list from the details area. + */ +final class ResultsSplitPaneDivider extends javax.swing.JPanel { + + private static final long serialVersionUID = 1L; + + /** + * Creates new form LabeledSplitPaneDivider. + */ + ResultsSplitPaneDivider() { + initComponents(); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + javax.swing.JLabel detailsLabel = new javax.swing.JLabel(); + javax.swing.JButton hideButton = new javax.swing.JButton(); + javax.swing.JButton showButton = new javax.swing.JButton(); + javax.swing.Box.Filler filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); + javax.swing.Box.Filler filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); + + setBackground(new java.awt.Color(170, 170, 170)); + + org.openide.awt.Mnemonics.setLocalizedText(detailsLabel, org.openide.util.NbBundle.getMessage(ResultsSplitPaneDivider.class, "ResultsSplitPaneDivider.detailsLabel.text")); // NOI18N + detailsLabel.setFocusable(false); + + hideButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/discovery/arrow-down.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(hideButton, org.openide.util.NbBundle.getMessage(ResultsSplitPaneDivider.class, "ResultsSplitPaneDivider.hideButton.text")); // NOI18N + hideButton.setBorder(null); + hideButton.setFocusable(false); + hideButton.setMargin(new java.awt.Insets(0, 0, 0, 0)); + hideButton.setCursor(Cursor.getDefaultCursor()); + hideButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + hideButtonActionPerformed(evt); + } + }); + + showButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/discovery/arrow-up.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(showButton, org.openide.util.NbBundle.getMessage(ResultsSplitPaneDivider.class, "ResultsSplitPaneDivider.showButton.text")); // NOI18N + showButton.setBorder(null); + showButton.setFocusable(false); + showButton.setMargin(new java.awt.Insets(0, 0, 0, 0)); + showButton.setCursor(Cursor.getDefaultCursor()); + showButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + showButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(detailsLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 251, Short.MAX_VALUE) + .addComponent(showButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(hideButton) + .addContainerGap()) + .addComponent(filler2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(filler1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(filler2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(0, 0, 0) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(hideButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(showButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(detailsLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(0, 0, 0) + .addComponent(filler1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + + private void showButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showButtonActionPerformed + DiscoveryEventUtils.getDiscoveryEventBus().post(new DiscoveryEventUtils.DetailsVisibleEvent(true)); + }//GEN-LAST:event_showButtonActionPerformed + + private void hideButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hideButtonActionPerformed + DiscoveryEventUtils.getDiscoveryEventBus().post(new DiscoveryEventUtils.DetailsVisibleEvent(false)); + }//GEN-LAST:event_hideButtonActionPerformed + + + // Variables declaration - do not modify//GEN-BEGIN:variables + // End of variables declaration//GEN-END:variables +} diff --git a/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.form b/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.form index 259a188967..1a853b425a 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.form @@ -11,12 +11,17 @@ - + + + + + + @@ -32,7 +37,7 @@ - + @@ -45,7 +50,7 @@ - + @@ -54,7 +59,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.java index 48522a9474..4f2684339b 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/VideoFilterPanel.java @@ -66,7 +66,9 @@ final class VideoFilterPanel extends AbstractFiltersPanel { setLayout(new java.awt.BorderLayout()); - videoFiltersPanel.setPreferredSize(new java.awt.Dimension(223, 66)); + videoFiltersScrollPane.setPreferredSize(new java.awt.Dimension(312, 102)); + + videoFiltersPanel.setPreferredSize(new java.awt.Dimension(310, 100)); videoFiltersSplitPane.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(VideoFilterPanel.class, "VideoFilterPanel.videoFiltersSplitPane.border.title"))); // NOI18N videoFiltersSplitPane.setResizeWeight(0.5); @@ -77,14 +79,14 @@ final class VideoFilterPanel extends AbstractFiltersPanel { videoFiltersPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(videoFiltersPanelLayout.createSequentialGroup() .addGap(8, 8, 8) - .addComponent(videoFiltersSplitPane) + .addComponent(videoFiltersSplitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 294, Short.MAX_VALUE) .addGap(8, 8, 8)) ); videoFiltersPanelLayout.setVerticalGroup( videoFiltersPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(videoFiltersPanelLayout.createSequentialGroup() .addGap(8, 8, 8) - .addComponent(videoFiltersSplitPane) + .addComponent(videoFiltersSplitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 84, Short.MAX_VALUE) .addGap(8, 8, 8)) ); diff --git a/Core/src/org/sleuthkit/autopsy/discovery/arrow-down.png b/Core/src/org/sleuthkit/autopsy/discovery/arrow-down.png new file mode 100644 index 0000000000..e934b25655 Binary files /dev/null and b/Core/src/org/sleuthkit/autopsy/discovery/arrow-down.png differ diff --git a/Core/src/org/sleuthkit/autopsy/discovery/arrow-up.png b/Core/src/org/sleuthkit/autopsy/discovery/arrow-up.png new file mode 100644 index 0000000000..de7b88bbe2 Binary files /dev/null and b/Core/src/org/sleuthkit/autopsy/discovery/arrow-up.png differ