■ ■ ■ ■ ■ ■
jadx-gui/src/main/java/jadx/gui/ui/dialog/LogViewerDialog.java
| skipped 1 lines |
2 | 2 | | |
3 | 3 | | import java.awt.BorderLayout; |
4 | 4 | | import java.awt.Container; |
| 5 | + | import java.awt.event.WindowAdapter; |
| 6 | + | import java.awt.event.WindowEvent; |
5 | 7 | | |
6 | 8 | | import javax.swing.BorderFactory; |
7 | 9 | | import javax.swing.JButton; |
8 | 10 | | import javax.swing.JComboBox; |
9 | | - | import javax.swing.JDialog; |
| 11 | + | import javax.swing.JFrame; |
10 | 12 | | import javax.swing.JLabel; |
11 | 13 | | import javax.swing.JPanel; |
12 | 14 | | import javax.swing.JScrollPane; |
| skipped 7 lines |
20 | 22 | | import jadx.gui.ui.MainWindow; |
21 | 23 | | import jadx.gui.ui.codearea.AbstractCodeArea; |
22 | 24 | | import jadx.gui.utils.NLS; |
| 25 | + | import jadx.gui.utils.UiUtils; |
23 | 26 | | import jadx.gui.utils.logs.ILogListener; |
24 | 27 | | import jadx.gui.utils.logs.LogCollector; |
25 | 28 | | |
26 | | - | public class LogViewerDialog extends JDialog { |
| 29 | + | public class LogViewerDialog extends JFrame { |
27 | 30 | | private static final long serialVersionUID = -2188700277429054641L; |
28 | 31 | | private static final Level[] LEVEL_ITEMS = { Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR }; |
29 | 32 | | |
| skipped 1 lines |
31 | 34 | | |
32 | 35 | | private final transient JadxSettings settings; |
33 | 36 | | private transient RSyntaxTextArea textPane; |
| 37 | + | private JComboBox<Level> levelCb; |
| 38 | + | |
| 39 | + | private static LogViewerDialog openLogDialog; |
34 | 40 | | |
35 | 41 | | public static void open(MainWindow mainWindow) { |
36 | 42 | | openWithLevel(mainWindow, level); |
| skipped 1 lines |
38 | 44 | | |
39 | 45 | | public static void openWithLevel(MainWindow mainWindow, Level newLevel) { |
40 | 46 | | level = newLevel; |
41 | | - | new LogViewerDialog(mainWindow).setVisible(true); |
| 47 | + | if (openLogDialog == null) { |
| 48 | + | LogViewerDialog newLogDialog = new LogViewerDialog(mainWindow); |
| 49 | + | newLogDialog.setVisible(true); |
| 50 | + | openLogDialog = newLogDialog; |
| 51 | + | } else { |
| 52 | + | LogViewerDialog logDialog = openLogDialog; |
| 53 | + | logDialog.levelCb.setSelectedItem(level); |
| 54 | + | logDialog.setVisible(true); |
| 55 | + | logDialog.toFront(); |
| 56 | + | } |
42 | 57 | | } |
43 | 58 | | |
44 | 59 | | private LogViewerDialog(MainWindow mainWindow) { |
| skipped 1 lines |
46 | 61 | | initUI(mainWindow); |
47 | 62 | | registerLogListener(); |
48 | 63 | | settings.loadWindowPos(this); |
| 64 | + | addWindowListener(new WindowAdapter() { |
| 65 | + | @Override |
| 66 | + | public void windowClosing(WindowEvent e) { |
| 67 | + | openLogDialog = null; |
| 68 | + | } |
| 69 | + | }); |
49 | 70 | | } |
50 | 71 | | |
51 | 72 | | public final void initUI(MainWindow mainWindow) { |
| 73 | + | UiUtils.setWindowIcons(this); |
| 74 | + | |
52 | 75 | | textPane = AbstractCodeArea.getDefaultArea(mainWindow); |
53 | 76 | | textPane.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15)); |
54 | 77 | | |
55 | 78 | | JPanel controlPane = new JPanel(); |
56 | 79 | | controlPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); |
57 | | - | final JComboBox<Level> cb = new JComboBox<>(LEVEL_ITEMS); |
58 | | - | cb.setSelectedItem(level); |
59 | | - | cb.addActionListener(e -> { |
60 | | - | int i = cb.getSelectedIndex(); |
| 80 | + | levelCb = new JComboBox<>(LEVEL_ITEMS); |
| 81 | + | levelCb.setSelectedItem(level); |
| 82 | + | levelCb.addActionListener(e -> { |
| 83 | + | int i = levelCb.getSelectedIndex(); |
61 | 84 | | level = LEVEL_ITEMS[i]; |
62 | 85 | | registerLogListener(); |
63 | 86 | | }); |
64 | 87 | | JLabel levelLabel = new JLabel(NLS.str("log_viewer.log_level")); |
65 | | - | levelLabel.setLabelFor(cb); |
| 88 | + | levelLabel.setLabelFor(levelCb); |
66 | 89 | | controlPane.add(levelLabel); |
67 | | - | controlPane.add(cb); |
| 90 | + | controlPane.add(levelCb); |
68 | 91 | | |
69 | 92 | | JScrollPane scrollPane = new JScrollPane(textPane); |
70 | 93 | | |
| skipped 10 lines |
81 | 104 | | pack(); |
82 | 105 | | setSize(800, 600); |
83 | 106 | | setDefaultCloseOperation(DISPOSE_ON_CLOSE); |
84 | | - | setModalityType(ModalityType.MODELESS); |
85 | 107 | | setLocationRelativeTo(null); |
86 | 108 | | } |
87 | 109 | | |
| skipped 29 lines |