19 package org.sleuthkit.autopsy.filequery;
21 import com.google.common.eventbus.Subscribe;
22 import java.awt.Component;
23 import java.awt.Image;
24 import java.awt.event.ItemEvent;
25 import java.awt.event.MouseAdapter;
26 import java.awt.event.MouseEvent;
27 import java.util.ArrayList;
28 import java.util.HashSet;
29 import java.util.List;
31 import java.util.logging.Level;
32 import javax.swing.DefaultComboBoxModel;
33 import javax.swing.DefaultListCellRenderer;
34 import javax.swing.DefaultListModel;
35 import javax.swing.JList;
36 import javax.swing.JOptionPane;
37 import javax.swing.JPopupMenu;
38 import javax.swing.SwingUtilities;
39 import javax.swing.SwingWorker;
40 import javax.swing.event.ListSelectionListener;
41 import org.openide.util.NbBundle.Messages;
84 @Messages({
"ResultsPanel.viewFileInDir.name=View File in Directory",
85 "ResultsPanel.openInExternalViewer.name=Open in External Viewer"})
90 videoThumbnailViewer.addListSelectionListener((e) -> {
91 if (
resultType == FileSearchData.FileType.VIDEO) {
92 if (!e.getValueIsAdjusting()) {
93 populateInstancesList();
95 instancesList.clearSelection();
99 imageThumbnailViewer.addListSelectionListener((e) -> {
100 if (
resultType == FileSearchData.FileType.IMAGE) {
101 if (!e.getValueIsAdjusting()) {
102 populateInstancesList();
104 instancesList.clearSelection();
109 instancesList.addMouseListener(
new MouseAdapter() {
111 public void mousePressed(MouseEvent e) {
112 if (SwingUtilities.isRightMouseButton(e)) {
113 SwingUtilities.invokeLater(() -> {
114 instancesList.setSelectedIndex(instancesList.locationToIndex(e.getPoint()));
115 Set<AbstractFile> files =
new HashSet<>();
116 files.add(instancesList.getSelectedValue());
117 JPopupMenu menu =
new JPopupMenu();
118 menu.add(
new ViewContextAction(Bundle.ResultsPanel_viewFileInDir_name(), instancesList.getSelectedValue()));
119 menu.add(
new ExternalViewerAction(Bundle.ResultsPanel_openInExternalViewer_name(),
new FileNode(instancesList.getSelectedValue())));
120 menu.add(ViewFileInTimelineAction.createViewFileAction(instancesList.getSelectedValue()));
121 menu.add(
new DiscoveryExtractAction(files));
122 menu.add(AddContentTagAction.getInstance().getMenuForContent(files));
123 menu.add(DeleteFileContentTagAction.getInstance().getMenuForFiles(files));
124 menu.add(AddContentToHashDbAction.getInstance().getMenuForFiles(files));
125 menu.show(instancesList, e.getPoint().x, e.getPoint().y);
138 void addListSelectionListener(ListSelectionListener newListener) {
139 instancesList.removeListSelectionListener(listener);
140 listener = newListener;
141 instancesList.addListSelectionListener(listener);
147 synchronized void populateInstancesList() {
148 SwingUtilities.invokeLater(() -> {
149 List<AbstractFile> files = getInstancesForSelected();
150 if (files.isEmpty()) {
152 instancesListModel.removeAllElements();
155 instancesList.removeListSelectionListener(listener);
156 instancesListModel.removeAllElements();
157 for (AbstractFile file : files) {
158 instancesListModel.addElement(file);
161 instancesList.addListSelectionListener(listener);
162 if (!instancesListModel.isEmpty()) {
163 instancesList.setSelectedIndex(0);
175 synchronized AbstractFile getSelectedFile() {
176 if (instancesList.getSelectedIndex() == -1) {
179 return instancesListModel.getElementAt(instancesList.getSelectedIndex());
191 if (resultType == FileSearchData.FileType.VIDEO) {
192 return videoThumbnailViewer.getInstancesForSelected();
193 }
else if (resultType == FileSearchData.FileType.IMAGE) {
194 return imageThumbnailViewer.getInstancesForSelected();
196 return new ArrayList<>();
205 void handlePageRetrievedEvent(DiscoveryEventUtils.PageRetrievedEvent pageRetrievedEvent) {
206 SwingUtilities.invokeLater(() -> {
207 populateInstancesList();
208 currentPage = pageRetrievedEvent.getPageNumber();
211 if (pageRetrievedEvent.getType() == FileSearchData.FileType.IMAGE) {
212 populateImageViewer(pageRetrievedEvent.getSearchResults());
213 resultsViewerPanel.add(imageThumbnailViewer);
214 }
else if (pageRetrievedEvent.getType() == FileSearchData.FileType.VIDEO) {
215 populateVideoViewer(pageRetrievedEvent.getSearchResults());
216 resultsViewerPanel.add(videoThumbnailViewer);
218 resultsViewerPanel.revalidate();
219 resultsViewerPanel.repaint();
228 synchronized void resetResultViewer() {
229 resultsViewerPanel.remove(imageThumbnailViewer);
230 resultsViewerPanel.remove(videoThumbnailViewer);
232 for (SwingWorker<Void, Void> thumbWorker : thumbnailWorkers) {
233 if (!thumbWorker.isDone()) {
234 thumbWorker.cancel(
true);
238 thumbnailWorkers.clear();
239 videoThumbnailViewer.clearViewer();
240 imageThumbnailViewer.clearViewer();
249 synchronized void populateVideoViewer(List<ResultFile> files) {
250 for (ResultFile file : files) {
251 VideoThumbnailWorker thumbWorker =
new VideoThumbnailWorker(file);
252 thumbWorker.execute();
254 thumbnailWorkers.add(thumbWorker);
264 synchronized void populateImageViewer(List<ResultFile> files) {
265 for (ResultFile file : files) {
266 ImageThumbnailWorker thumbWorker =
new ImageThumbnailWorker(file);
267 thumbWorker.execute();
269 thumbnailWorkers.add(thumbWorker);
279 void handleGroupSelectedEvent(DiscoveryEventUtils.GroupSelectedEvent groupSelectedEvent) {
280 SwingUtilities.invokeLater(() -> {
281 searchFilters = groupSelectedEvent.getFilters();
282 groupingAttribute = groupSelectedEvent.getGroupingAttr();
283 groupSort = groupSelectedEvent.getGroupSort();
284 fileSortMethod = groupSelectedEvent.getFileSort();
285 selectedGroupKey = groupSelectedEvent.getGroupKey();
286 resultType = groupSelectedEvent.getResultType();
287 groupSize = groupSelectedEvent.getGroupSize();
299 void handleNoResultsEvent(DiscoveryEventUtils.NoResultsEvent noResultsEvent) {
300 SwingUtilities.invokeLater(() -> {
304 videoThumbnailViewer.clearViewer();
305 imageThumbnailViewer.clearViewer();
306 resultsViewerPanel.revalidate();
307 resultsViewerPanel.repaint();
317 private synchronized void setPage(
int startingEntry) {
318 int pageSize = pageSizeComboBox.getItemAt(pageSizeComboBox.getSelectedIndex());
319 synchronized (
this) {
320 if (pageWorker != null && !pageWorker.isDone()) {
321 pageWorker.cancel(
true);
323 EamDb centralRepo = null;
329 logger.log(Level.SEVERE,
"Error loading central repository database, no central repository options will be available for File Discovery", ex);
332 pageWorker =
new PageWorker(searchFilters, groupingAttribute, groupSort, fileSortMethod, selectedGroupKey, startingEntry, pageSize, resultType, centralRepo);
333 pageWorker.execute();
340 @Messages({
"# {0} - currentPage",
341 "# {1} - totalPages",
342 "ResultsPanel.currentPage.displayValue=Page: {0} of {1}"})
344 previousPageSize = pageSizeComboBox.getItemAt(pageSizeComboBox.getSelectedIndex());
345 int pageSize = pageSizeComboBox.getItemAt(pageSizeComboBox.getSelectedIndex());
347 double maxPageDouble = groupSize == 0 ? 1 : Math.ceil((
double) groupSize / pageSize);
348 currentPageLabel.setText(Bundle.ResultsPanel_currentPage_displayValue(currentPage + 1, maxPageDouble));
349 previousPageButton.setEnabled(currentPage != 0);
350 nextPageButton.setEnabled(groupSize > ((currentPage + 1) * pageSize));
351 gotoPageField.setEnabled(groupSize > pageSize);
352 pageSizeComboBox.setEnabled(
true);
360 @SuppressWarnings(
"unchecked")
362 private
void initComponents() {
364 javax.swing.JPanel pagingPanel =
new javax.swing.JPanel();
365 previousPageButton =
new javax.swing.JButton();
366 currentPageLabel =
new javax.swing.JLabel();
367 nextPageButton =
new javax.swing.JButton();
368 javax.swing.JLabel pageControlsLabel =
new javax.swing.JLabel();
369 javax.swing.JLabel gotoPageLabel =
new javax.swing.JLabel();
370 gotoPageField =
new javax.swing.JTextField();
371 javax.swing.JLabel pageSizeLabel =
new javax.swing.JLabel();
372 pageSizeComboBox =
new javax.swing.JComboBox<>();
373 javax.swing.JSplitPane resultsSplitPane =
new javax.swing.JSplitPane();
374 javax.swing.JPanel instancesPanel =
new javax.swing.JPanel();
375 javax.swing.JScrollPane instancesScrollPane =
new javax.swing.JScrollPane();
376 instancesList =
new javax.swing.JList<>();
377 resultsViewerPanel =
new javax.swing.JPanel();
379 setPreferredSize(
new java.awt.Dimension(777, 475));
381 pagingPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
383 previousPageButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/btn_step_back.png")));
384 previousPageButton.setBorder(null);
385 previousPageButton.setDisabledIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/btn_step_back_disabled.png")));
386 previousPageButton.setEnabled(
false);
387 previousPageButton.setFocusable(
false);
388 previousPageButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/btn_step_back_hover.png")));
389 previousPageButton.addActionListener(
new java.awt.event.ActionListener() {
390 public void actionPerformed(java.awt.event.ActionEvent evt) {
391 previousPageButtonActionPerformed(evt);
395 org.openide.awt.Mnemonics.setLocalizedText(currentPageLabel,
org.openide.util.NbBundle.getMessage(
ResultsPanel.class,
"ResultsPanel.currentPageLabel.text"));
396 currentPageLabel.setMaximumSize(
new java.awt.Dimension(90, 23));
397 currentPageLabel.setMinimumSize(
new java.awt.Dimension(90, 23));
398 currentPageLabel.setPreferredSize(
new java.awt.Dimension(90, 23));
400 nextPageButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/btn_step_forward.png")));
401 nextPageButton.setBorder(null);
402 nextPageButton.setDisabledIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/btn_step_forward_disabled.png")));
403 nextPageButton.setEnabled(
false);
404 nextPageButton.setFocusable(
false);
405 nextPageButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/btn_step_forward_hover.png")));
406 nextPageButton.addActionListener(
new java.awt.event.ActionListener() {
407 public void actionPerformed(java.awt.event.ActionEvent evt) {
408 nextPageButtonActionPerformed(evt);
412 org.openide.awt.Mnemonics.setLocalizedText(pageControlsLabel,
org.openide.util.NbBundle.getMessage(
ResultsPanel.class,
"ResultsPanel.pageControlsLabel.text"));
413 pageControlsLabel.setMaximumSize(
new java.awt.Dimension(33, 23));
414 pageControlsLabel.setMinimumSize(
new java.awt.Dimension(33, 23));
415 pageControlsLabel.setPreferredSize(
new java.awt.Dimension(33, 23));
417 org.openide.awt.Mnemonics.setLocalizedText(gotoPageLabel,
org.openide.util.NbBundle.getMessage(
ResultsPanel.class,
"ResultsPanel.gotoPageLabel.text"));
418 gotoPageLabel.setMaximumSize(
new java.awt.Dimension(70, 23));
419 gotoPageLabel.setMinimumSize(
new java.awt.Dimension(70, 23));
420 gotoPageLabel.setPreferredSize(
new java.awt.Dimension(70, 23));
422 gotoPageField.setEnabled(
false);
423 gotoPageField.addActionListener(
new java.awt.event.ActionListener() {
424 public void actionPerformed(java.awt.event.ActionEvent evt) {
425 gotoPageFieldActionPerformed(evt);
429 org.openide.awt.Mnemonics.setLocalizedText(pageSizeLabel,
org.openide.util.NbBundle.getMessage(
ResultsPanel.class,
"ResultsPanel.pageSizeLabel.text"));
430 pageSizeLabel.setMaximumSize(
new java.awt.Dimension(60, 23));
431 pageSizeLabel.setMinimumSize(
new java.awt.Dimension(60, 23));
432 pageSizeLabel.setPreferredSize(
new java.awt.Dimension(60, 23));
434 pageSizeComboBox.setModel(
new DefaultComboBoxModel<Integer>(
new Integer[] {25,50,75,100,125,150,175,200}));
435 pageSizeComboBox.setSelectedIndex(3);
436 pageSizeComboBox.addItemListener(
new java.awt.event.ItemListener() {
437 public void itemStateChanged(java.awt.event.ItemEvent evt) {
438 pageSizeChanged(evt);
442 javax.swing.GroupLayout pagingPanelLayout =
new javax.swing.GroupLayout(pagingPanel);
443 pagingPanel.setLayout(pagingPanelLayout);
444 pagingPanelLayout.setHorizontalGroup(
445 pagingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
446 .addGroup(pagingPanelLayout.createSequentialGroup()
448 .addComponent(currentPageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
450 .addComponent(pageControlsLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
451 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
452 .addComponent(previousPageButton)
454 .addComponent(nextPageButton)
456 .addComponent(gotoPageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
457 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
458 .addComponent(gotoPageField, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE)
460 .addComponent(pageSizeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE)
461 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
462 .addComponent(pageSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
463 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
465 pagingPanelLayout.setVerticalGroup(
466 pagingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
467 .addGroup(pagingPanelLayout.createSequentialGroup()
469 .addGroup(pagingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
470 .addComponent(nextPageButton, javax.swing.GroupLayout.Alignment.TRAILING)
471 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pagingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
472 .addComponent(previousPageButton, javax.swing.GroupLayout.Alignment.TRAILING)
473 .addComponent(currentPageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
474 .addComponent(pageControlsLabel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
475 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pagingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
476 .addComponent(gotoPageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
477 .addComponent(gotoPageField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
478 .addComponent(pageSizeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
479 .addComponent(pageSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
483 resultsSplitPane.setDividerLocation(380);
484 resultsSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
485 resultsSplitPane.setResizeWeight(1.0);
486 resultsSplitPane.setToolTipText(
org.openide.util.NbBundle.getMessage(
ResultsPanel.class,
"ResultsPanel.resultsSplitPane.toolTipText"));
487 resultsSplitPane.setLastDividerLocation(180);
488 resultsSplitPane.setOpaque(
false);
489 resultsSplitPane.setPreferredSize(
new java.awt.Dimension(777, 440));
491 instancesPanel.setPreferredSize(
new java.awt.Dimension(775, 68));
493 instancesScrollPane.setPreferredSize(
new java.awt.Dimension(775, 60));
495 instancesList.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(
ResultsPanel.class,
"ResultsPanel.instancesList.border.title")));
496 instancesList.setModel(instancesListModel);
497 instancesList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
499 instancesList.setPreferredSize(
new java.awt.Dimension(0, 50));
500 instancesList.setVisibleRowCount(2);
501 instancesScrollPane.setViewportView(instancesList);
503 javax.swing.GroupLayout instancesPanelLayout =
new javax.swing.GroupLayout(instancesPanel);
504 instancesPanel.setLayout(instancesPanelLayout);
505 instancesPanelLayout.setHorizontalGroup(
506 instancesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
507 .addGap(0, 775, Short.MAX_VALUE)
508 .addGroup(instancesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
509 .addComponent(instancesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
511 instancesPanelLayout.setVerticalGroup(
512 instancesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
513 .addGap(0, 221, Short.MAX_VALUE)
514 .addGroup(instancesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
515 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, instancesPanelLayout.createSequentialGroup()
517 .addComponent(instancesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 221, Short.MAX_VALUE)))
520 resultsSplitPane.setRightComponent(instancesPanel);
522 resultsViewerPanel.setPreferredSize(
new java.awt.Dimension(0, 380));
523 resultsViewerPanel.setLayout(
new java.awt.BorderLayout());
524 resultsSplitPane.setLeftComponent(resultsViewerPanel);
526 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
527 this.setLayout(layout);
528 layout.setHorizontalGroup(
529 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
530 .addComponent(pagingPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
531 .addComponent(resultsSplitPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
533 layout.setVerticalGroup(
534 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
535 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
536 .addComponent(pagingPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
538 .addComponent(resultsSplitPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
549 if (currentPage > 0) {
550 disablePagingControls();
551 int previousPage = currentPage - 1;
552 int pageSize = pageSizeComboBox.getItemAt(pageSizeComboBox.getSelectedIndex());
553 setPage(previousPage * pageSize);
563 disablePagingControls();
564 int nextPage = currentPage + 1;
565 int pageSize = pageSizeComboBox.getItemAt(pageSizeComboBox.getSelectedIndex());
566 setPage(nextPage * pageSize);
574 @Messages({
"# {0} - selectedPage",
576 "ResultsPanel.invalidPageNumber.message=The selected page number {0} does not exist. Please select a value from 1 to {1}.",
577 "ResultsPanel.invalidPageNumber.title=Invalid Page Number"})
581 newPage = Integer.parseInt(gotoPageField.getText());
582 }
catch (NumberFormatException e) {
586 int pageSize = pageSizeComboBox.getItemAt(pageSizeComboBox.getSelectedIndex());
587 if ((newPage - 1) < 0 || groupSize <= ((newPage - 1) * pageSize)) {
588 JOptionPane.showMessageDialog(
this,
589 Bundle.ResultsPanel_invalidPageNumber_message(newPage, Math.ceil((
double) groupSize / pageSize)),
590 Bundle.ResultsPanel_invalidPageNumber_title(),
591 JOptionPane.WARNING_MESSAGE);
594 disablePagingControls();
595 setPage((newPage - 1) * pageSize);
599 if (evt.getStateChange() == ItemEvent.SELECTED) {
600 disablePagingControls();
601 int previousPage = currentPage - 1;
602 int pageSize = pageSizeComboBox.getItemAt(pageSizeComboBox.getSelectedIndex());
603 if (previousPageSize != pageSize) {
606 setPage(previousPage * pageSize);
614 nextPageButton.setEnabled(
false);
615 previousPageButton.setEnabled(
false);
616 gotoPageField.setEnabled(
false);
617 pageSizeComboBox.setEnabled(
false);
645 thumbnailWrapper =
new VideoThumbnailsWrapper(file);
646 videoThumbnailViewer.addVideo(thumbnailWrapper);
651 FileSearch.getVideoThumbnails(thumbnailWrapper);
657 videoThumbnailViewer.repaint();
677 imageThumbnailViewer.addImage(thumbnailWrapper);
683 if (thumbnail != null) {
684 thumbnailWrapper.setImageThumbnail(thumbnail);
691 imageThumbnailViewer.repaint();
701 private static final long serialVersionUID = 1L;
705 super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
707 if (value instanceof AbstractFile) {
708 AbstractFile file = (AbstractFile) value;
710 name = file.getUniquePath();
711 }
catch (TskCoreException ingored) {
712 name = file.getParentPath() +
"/" + file.getName();
ListSelectionListener listener
List< FileSearchFiltering.FileFilter > searchFilters
javax.swing.JButton previousPageButton
javax.swing.JLabel currentPageLabel
FileSearchData.FileType resultType
final ImageThumbnailWrapper thumbnailWrapper
void gotoPageFieldActionPerformed(java.awt.event.ActionEvent evt)
final VideoThumbnailViewer videoThumbnailViewer
javax.swing.JComboBox< Integer > pageSizeComboBox
Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus)
GroupKey selectedGroupKey
final DefaultListModel< AbstractFile > instancesListModel
javax.swing.JTextField gotoPageField
static EamDb getInstance()
List< AbstractFile > getInstancesForSelected()
static final Logger logger
javax.swing.JPanel resultsViewerPanel
javax.swing.JList< AbstractFile > instancesList
final List< SwingWorker< Void, Void > > thumbnailWorkers
void nextPageButtonActionPerformed(java.awt.event.ActionEvent evt)
void disablePagingControls()
static final long serialVersionUID
static boolean isEnabled()
javax.swing.JButton nextPageButton
FileSorter.SortingMethod fileSortMethod
void previousPageButtonActionPerformed(java.awt.event.ActionEvent evt)
void pageSizeChanged(java.awt.event.ItemEvent evt)
final VideoThumbnailsWrapper thumbnailWrapper
FileGroup.GroupSortingAlgorithm groupSort
synchronized static Logger getLogger(String name)
final ImageThumbnailViewer imageThumbnailViewer
static BufferedImage getThumbnail(Content content, int iconSize)
static final int ICON_SIZE_LARGE
synchronized void setPage(int startingEntry)
FileSearch.AttributeType groupingAttribute