summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/gui/ProgressDialog.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/cuchaz/enigma/gui/ProgressDialog.java')
-rw-r--r--src/main/java/cuchaz/enigma/gui/ProgressDialog.java100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/main/java/cuchaz/enigma/gui/ProgressDialog.java b/src/main/java/cuchaz/enigma/gui/ProgressDialog.java
new file mode 100644
index 0000000..087d843
--- /dev/null
+++ b/src/main/java/cuchaz/enigma/gui/ProgressDialog.java
@@ -0,0 +1,100 @@
1/*******************************************************************************
2 * Copyright (c) 2015 Jeff Martin.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the GNU Lesser General Public
5 * License v3.0 which accompanies this distribution, and is available at
6 * http://www.gnu.org/licenses/lgpl.html
7 * <p>
8 * Contributors:
9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/
11package cuchaz.enigma.gui;
12
13import java.awt.BorderLayout;
14import java.awt.Container;
15import java.awt.Dimension;
16import java.awt.FlowLayout;
17
18import javax.swing.*;
19
20import cuchaz.enigma.Constants;
21import cuchaz.enigma.Deobfuscator.ProgressListener;
22
23public class ProgressDialog implements ProgressListener, AutoCloseable {
24
25 private JFrame m_frame;
26 private JLabel m_title;
27 private JLabel m_text;
28 private JProgressBar m_progress;
29
30 public ProgressDialog(JFrame parent) {
31
32 // init frame
33 m_frame = new JFrame(Constants.Name + " - Operation in progress");
34 final Container pane = m_frame.getContentPane();
35 FlowLayout layout = new FlowLayout();
36 layout.setAlignment(FlowLayout.LEFT);
37 pane.setLayout(layout);
38
39 m_title = new JLabel();
40 pane.add(m_title);
41
42 // set up the progress bar
43 JPanel panel = new JPanel();
44 pane.add(panel);
45 panel.setLayout(new BorderLayout());
46 m_text = GuiTricks.unboldLabel(new JLabel());
47 m_progress = new JProgressBar();
48 m_text.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0));
49 panel.add(m_text, BorderLayout.NORTH);
50 panel.add(m_progress, BorderLayout.CENTER);
51 panel.setPreferredSize(new Dimension(360, 50));
52
53 // show the frame
54 pane.doLayout();
55 m_frame.setSize(400, 120);
56 m_frame.setResizable(false);
57 m_frame.setLocationRelativeTo(parent);
58 m_frame.setVisible(true);
59 m_frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
60 }
61
62 public void close() {
63 m_frame.dispose();
64 }
65
66 @Override
67 public void init(int totalWork, String title) {
68 m_title.setText(title);
69 m_progress.setMinimum(0);
70 m_progress.setMaximum(totalWork);
71 m_progress.setValue(0);
72 }
73
74 @Override
75 public void onProgress(int numDone, String message) {
76 m_text.setText(message);
77 m_progress.setValue(numDone);
78
79 // update the frame
80 m_frame.validate();
81 m_frame.repaint();
82 }
83
84 public interface ProgressRunnable {
85 void run(ProgressListener listener) throws Exception;
86 }
87
88 public static void runInThread(final JFrame parent, final ProgressRunnable runnable) {
89 new Thread() {
90 @Override
91 public void run() {
92 try (ProgressDialog progress = new ProgressDialog(parent)) {
93 runnable.run(progress);
94 } catch (Exception ex) {
95 throw new Error(ex);
96 }
97 }
98 }.start();
99 }
100}