19 package org.sleuthkit.autopsy.timeline;
21 import java.awt.Component;
22 import java.awt.event.ActionEvent;
23 import java.awt.event.KeyEvent;
24 import java.awt.event.WindowAdapter;
25 import java.awt.event.WindowEvent;
26 import javax.annotation.concurrent.Immutable;
27 import javax.swing.AbstractAction;
28 import javax.swing.ActionMap;
29 import javax.swing.GroupLayout;
30 import javax.swing.InputMap;
31 import javax.swing.JComponent;
32 import javax.swing.JFrame;
33 import javax.swing.JLabel;
34 import javax.swing.JOptionPane;
35 import javax.swing.JProgressBar;
36 import javax.swing.KeyStroke;
37 import javax.swing.LayoutStyle;
38 import javax.swing.SwingUtilities;
39 import javax.swing.SwingWorker;
40 import org.openide.awt.Mnemonics;
41 import org.openide.util.NbBundle;
42 import org.openide.windows.WindowManager;
49 private final SwingWorker<?, ?>
worker;
54 public ProgressWindow(Component parent,
boolean modal, SwingWorker<?, ?> worker) {
58 setLocationRelativeTo(parent);
60 setAlwaysOnTop(modal);
63 SwingUtilities.invokeLater(() -> {
64 setIconImage(WindowManager.getDefault().getMainWindow().getIconImage());
71 String cancelName =
"cancel";
72 InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
74 inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), cancelName);
75 ActionMap actionMap = getRootPane().getActionMap();
77 actionMap.put(cancelName,
new AbstractAction() {
79 public void actionPerformed(ActionEvent e) {
87 SwingUtilities.invokeLater(() -> {
93 SwingUtilities.invokeLater(() -> {
100 SwingUtilities.invokeLater(() -> {
106 SwingUtilities.invokeLater(() -> {
114 SwingUtilities.invokeLater(() -> {
120 SwingUtilities.invokeLater(() -> {
131 @SuppressWarnings(
"unchecked")
138 addWindowListener(
new WindowAdapter() {
139 public void windowClosing(WindowEvent evt) {
146 GroupLayout layout =
new GroupLayout(getContentPane());
147 getContentPane().setLayout(layout);
148 layout.setHorizontalGroup(
149 layout.createParallelGroup(GroupLayout.Alignment.LEADING)
150 .addGroup(layout.createSequentialGroup()
152 .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
153 .addComponent(
progressBar, GroupLayout.DEFAULT_SIZE, 504, Short.MAX_VALUE)
154 .addGroup(layout.createSequentialGroup()
156 .addGap(0, 0, Short.MAX_VALUE)))
159 layout.setVerticalGroup(
160 layout.createParallelGroup(GroupLayout.Alignment.LEADING)
161 .addGroup(layout.createSequentialGroup()
164 .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
165 .addComponent(
progressBar, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
166 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
180 SwingUtilities.invokeLater(() -> {
182 int showConfirmDialog = JOptionPane.showConfirmDialog(
ProgressWindow.this,
184 "Timeline.ProgressWindow.cancel.confdlg.msg"),
186 "Timeline.ProgressWindow.cancel.confdlg.detail"),
187 JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
188 if (showConfirmDialog == JOptionPane.YES_OPTION) {
198 worker.cancel(
false);
243 public ProgressUpdate(
int progress,
int total, String headerMessage, String detailMessage) {
void update(ProgressUpdate chunk)
ProgressUpdate(int progress, int total, String headerMessage, String detailMessage)
void updateProgress(final int progress)
String getDetailMessage()
void updateHeaderMessage(final String headerMessage)
void closeDialog(java.awt.event.WindowEvent evt)
String getHeaderMessage()
void setProgressTotal(final int total)
final String headerMessage
final String detailMessage
final SwingWorker<?,?> worker
ProgressWindow(Component parent, boolean modal, SwingWorker<?,?> worker)
void updateProgress(final String message)
void updateProgress(final int progress, final String message)