From 1cf65954c5be09b7806f1a67f146fa65372b56a2 Mon Sep 17 00:00:00 2001 From: Konloch Date: Thu, 1 Jul 2021 16:08:56 -0700 Subject: [PATCH] Dialogue Cleanup --- .../club/bytecodeviewer/BytecodeViewer.java | 25 +-- .../bytecodeviewer/gui/MainViewerGUI.java | 171 +++++++----------- .../gui/resourceviewer/WorkPaneRefresh.java | 47 ++--- .../gui/util/PaneUpdaterThread.java | 2 +- .../bytecodeviewer/util/DialogueUtils.java | 39 ++++ 5 files changed, 134 insertions(+), 150 deletions(-) diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java b/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java index 462c6167..83e5159b 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java @@ -644,25 +644,20 @@ public class BytecodeViewer if (System.currentTimeMillis() - Configuration.lastHotKeyExecuted <= (4000)) return; - if ((e.getKeyCode() == KeyEvent.VK_O) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) { + if ((e.getKeyCode() == KeyEvent.VK_O) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) + { Configuration.lastHotKeyExecuted = System.currentTimeMillis(); - JFileChooser fc = new FileChooser(Configuration.getLastDirectory(), - "Select File or Folder to open in BCV", + + final File file = DialogueUtils.fileChooser("Select File or Folder to open in BCV", "APKs, DEX, Class Files or Zip/Jar/War Archives", Constants.SUPPORTED_FILE_EXTENSIONS); - int returnVal = fc.showOpenDialog(BytecodeViewer.viewer); - if (returnVal == JFileChooser.APPROVE_OPTION) - { - try { - Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath(); - BytecodeViewer.viewer.updateBusyStatus(true); - BytecodeViewer.openFiles(new File[]{fc.getSelectedFile()}, true); - BytecodeViewer.viewer.updateBusyStatus(false); - } catch (Exception e1) { - new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1); - } - } + if(file == null) + return; + + BytecodeViewer.viewer.updateBusyStatus(true); + BytecodeViewer.openFiles(new File[]{file}, true); + BytecodeViewer.viewer.updateBusyStatus(false); } else if ((e.getKeyCode() == KeyEvent.VK_N) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) { Configuration.lastHotKeyExecuted = System.currentTimeMillis(); BytecodeViewer.resetWorkSpace(true); diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java index d97cb2ab..e54bbce7 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java @@ -847,150 +847,109 @@ public class MainViewerGUI extends JFrame public void selectFile() { - final JFileChooser fc = new FileChooser(Configuration.getLastDirectory(), - "Select File or Folder to open in BCV", + final File file = DialogueUtils.fileChooser("Select File or Folder to open in BCV", "APKs, DEX, Class Files or Zip/Jar/War Archives", Constants.SUPPORTED_FILE_EXTENSIONS); + + if(file == null) + return; - int returnVal = fc.showOpenDialog(BytecodeViewer.viewer); - if (returnVal == JFileChooser.APPROVE_OPTION) - { - try { - Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath(); - BytecodeViewer.viewer.updateBusyStatus(true); - BytecodeViewer.openFiles(new File[]{fc.getSelectedFile()}, true); - BytecodeViewer.viewer.updateBusyStatus(false); - } catch (Exception e1) { - new ExceptionUI(e1); - } - } + BytecodeViewer.viewer.updateBusyStatus(true); + BytecodeViewer.openFiles(new File[]{file}, true); + BytecodeViewer.viewer.updateBusyStatus(false); } - public void selectPythonC() { - final JFileChooser fc = new FileChooser(Configuration.getLastDirectory(), - "Select Python 2.7 Executable", + public void selectPythonC() + { + final File file = DialogueUtils.fileChooser("Select Python 2.7 Executable", "Python (Or PyPy for speed) 2.7 Executable", "everything"); - - int returnVal = fc.showOpenDialog(BytecodeViewer.viewer); - if (returnVal == JFileChooser.APPROVE_OPTION) - try { - Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath(); - Configuration.python = fc.getSelectedFile().getAbsolutePath(); - SettingsSerializer.saveSettingsAsync(); - } catch (Exception e1) { - new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1); - } + + if(file == null) + return; + + Configuration.python = file.getAbsolutePath(); + SettingsSerializer.saveSettingsAsync(); } - public void selectJavac() { - final JFileChooser fc = new FileChooser(Configuration.getLastDirectory(), - "Select Javac Executable", + public void selectJavac() + { + final File file = DialogueUtils.fileChooser("Select Javac Executable", "Javac Executable (Requires JDK 'C:/programfiles/Java/JDK_xx/bin/javac.exe)", "everything"); + + if(file == null) + return; - int returnVal = fc.showOpenDialog(BytecodeViewer.viewer); - if (returnVal == JFileChooser.APPROVE_OPTION) - try { - Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath(); - Configuration.javac = fc.getSelectedFile().getAbsolutePath(); - SettingsSerializer.saveSettingsAsync(); - } catch (Exception e1) { - new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1); - } + Configuration.javac = file.getAbsolutePath(); + SettingsSerializer.saveSettingsAsync(); } - public void selectJava() { - final JFileChooser fc = new FileChooser(Configuration.getLastDirectory(), - "Select Java Executable", + public void selectJava() + { + final File file = DialogueUtils.fileChooser("Select Java Executable", "Java Executable (Inside Of JRE/JDK 'C:/programfiles/Java/JDK_xx/bin/java.exe')", "everything"); + + if(file == null) + return; - int returnVal = fc.showOpenDialog(BytecodeViewer.viewer); - if (returnVal == JFileChooser.APPROVE_OPTION) - try { - Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath(); - Configuration.java = fc.getSelectedFile().getAbsolutePath(); - SettingsSerializer.saveSettingsAsync(); - } catch (Exception e1) { - new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1); - } + Configuration.java = file.getAbsolutePath(); + SettingsSerializer.saveSettingsAsync(); } - public void selectPythonC3() { - final JFileChooser fc = new FileChooser(Configuration.getLastDirectory(), - "Select Python 3.x Executable", + public void selectPythonC3() + { + final File file = DialogueUtils.fileChooser("Select Python 3.x Executable", "Python (Or PyPy for speed) 3.x Executable", "everything"); - int returnVal = fc.showOpenDialog(BytecodeViewer.viewer); - if (returnVal == JFileChooser.APPROVE_OPTION) - try { - Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath(); - Configuration.python3 = fc.getSelectedFile().getAbsolutePath(); - SettingsSerializer.saveSettingsAsync(); - } catch (Exception e1) { - new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1); - } + if(file == null) + return; + + Configuration.python3 = file.getAbsolutePath(); + SettingsSerializer.saveSettingsAsync(); } - public void selectOpenalLibraryFolder() { - final JFileChooser fc = new FileChooser(Configuration.getLastDirectory(), - "Select Library Folder", + public void selectOpenalLibraryFolder() + { + final File file = DialogueUtils.fileChooser("Select Library Folder", "Optional Library Folder", "everything"); - - fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - fc.setFileHidingEnabled(false); - fc.setAcceptAllFileFilterUsed(false); - - int returnVal = fc.showOpenDialog(BytecodeViewer.viewer); - if (returnVal == JFileChooser.APPROVE_OPTION) - try { - Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath(); - Configuration.library = fc.getSelectedFile().getAbsolutePath(); - SettingsSerializer.saveSettingsAsync(); - } catch (Exception e1) { - new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1); - } + + if(file == null) + return; + + Configuration.library = file.getAbsolutePath(); + SettingsSerializer.saveSettingsAsync(); } public void selectJRERTLibrary() { - final JFileChooser fc = new FileChooser(Configuration.getLastDirectory(), - "Select JRE RT Jar", + final File file = DialogueUtils.fileChooser("Select JRE RT Jar", "JRE RT Library", "everything"); - int returnVal = fc.showOpenDialog(BytecodeViewer.viewer); - if (returnVal == JFileChooser.APPROVE_OPTION) - try { - Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath(); - Configuration.rt = fc.getSelectedFile().getAbsolutePath(); - SettingsSerializer.saveSettingsAsync(); - } catch (Exception e1) { - new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1); - } + if(file == null) + return; + + Configuration.rt = file.getAbsolutePath(); + SettingsSerializer.saveSettingsAsync(); } public void openExternalPlugin() { - JFileChooser fc = new FileChooser(Configuration.getLastDirectory(), - "Select External Plugin", + final File file = DialogueUtils.fileChooser("Select External Plugin", "External Plugin", + PluginManager.fileFilter(), "everything"); - fc.setFileFilter(PluginManager.fileFilter()); - - int returnVal = fc.showOpenDialog(BytecodeViewer.viewer); - if (returnVal == JFileChooser.APPROVE_OPTION) - try { - Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath(); - BytecodeViewer.viewer.updateBusyStatus(true); - BytecodeViewer.startPlugin(fc.getSelectedFile()); - BytecodeViewer.viewer.updateBusyStatus(false); - SettingsSerializer.saveSettingsAsync(); - } catch (Exception e1) { - new ExceptionUI(e1); - } + + if(file == null) + return; + + BytecodeViewer.viewer.updateBusyStatus(true); + BytecodeViewer.startPlugin(file); + BytecodeViewer.viewer.updateBusyStatus(false); + SettingsSerializer.saveSettingsAsync(); } public void askBeforeExiting() diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/WorkPaneRefresh.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/WorkPaneRefresh.java index dcf518f2..947a8fbf 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/WorkPaneRefresh.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/WorkPaneRefresh.java @@ -27,39 +27,30 @@ public class WorkPaneRefresh implements Runnable try { if (!BytecodeViewer.compile(false)) return; - } catch (NullPointerException ignored) { - - } + } catch (NullPointerException ignored) { } JButton src = null; if(event != null && event.getSource() instanceof JButton) src = (JButton) event.getSource(); - - //if (src == BytecodeViewer.viewer.workPane.refreshClass) + + final Component tabComp = BytecodeViewer.viewer.workPane.tabs.getSelectedComponent(); + + if(tabComp == null) + return; + + if(src != null) { - final Component tabComp = BytecodeViewer.viewer.workPane.tabs.getSelectedComponent(); - - if(tabComp == null) - return; - - if (tabComp instanceof ClassViewer) - { - if(src != null) - src.setEnabled(false); - - BytecodeViewer.viewer.updateBusyStatus(true); - ((ClassViewer) tabComp).startPaneUpdater(src); - BytecodeViewer.viewer.updateBusyStatus(false); - } - else if (tabComp instanceof FileViewer) - { - if(src != null) - src.setEnabled(false); - - BytecodeViewer.viewer.updateBusyStatus(true); - ((FileViewer) tabComp).refresh(src); - BytecodeViewer.viewer.updateBusyStatus(false); - } + JButton finalSrc = src; + SwingUtilities.invokeLater(()-> finalSrc.setEnabled(false)); } + + BytecodeViewer.viewer.updateBusyStatus(true); + + if (tabComp instanceof ClassViewer) + ((ClassViewer) tabComp).startPaneUpdater(src); + else if (tabComp instanceof FileViewer) + ((FileViewer) tabComp).refresh(src); + + BytecodeViewer.viewer.updateBusyStatus(false); } } diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/util/PaneUpdaterThread.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/util/PaneUpdaterThread.java index b55a7d9a..6d536af4 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/util/PaneUpdaterThread.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/util/PaneUpdaterThread.java @@ -215,9 +215,9 @@ public abstract class PaneUpdaterThread implements Runnable if(decompilerViewIndex == 5 || decompilerViewIndex < 0) return; - JViewport viewport = updateUpdaterTextArea.getScrollPane().getViewport(); SwingUtilities.invokeLater(()-> { + JViewport viewport = updateUpdaterTextArea.getScrollPane().getViewport(); viewport.addChangeListener(viewportListener); updateUpdaterTextArea.addCaretListener(caretListener); }); diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/util/DialogueUtils.java b/src/main/java/the/bytecode/club/bytecodeviewer/util/DialogueUtils.java index d693b0c3..ae9e88f3 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/util/DialogueUtils.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/util/DialogueUtils.java @@ -1,7 +1,12 @@ package the.bytecode.club.bytecodeviewer.util; +import the.bytecode.club.bytecodeviewer.BytecodeViewer; +import the.bytecode.club.bytecodeviewer.Configuration; +import the.bytecode.club.bytecodeviewer.gui.components.FileChooser; import the.bytecode.club.bytecodeviewer.gui.components.MultipleChoiceDialogue; +import javax.swing.*; +import javax.swing.filechooser.FileFilter; import java.io.File; /** @@ -39,4 +44,38 @@ public class DialogueUtils return true; } + + /** + * Prompts a File Chooser dilogue + */ + public static File fileChooser(String title, String description, String... extensions) + { + return fileChooser(title, description, null, extensions); + } + + /** + * Prompts a File Chooser dilogue + */ + public static File fileChooser(String title, String description, FileFilter filter, String... extensions) + { + final JFileChooser fc = new FileChooser(Configuration.getLastDirectory(), + title, + description, + extensions); + + if(filter != null) + fc.setFileFilter(filter); + + int returnVal = fc.showOpenDialog(BytecodeViewer.viewer); + if (returnVal == JFileChooser.APPROVE_OPTION) + try { + File file = fc.getSelectedFile(); + Configuration.lastDirectory = file.getAbsolutePath(); + return file; + } catch (Exception e1) { + new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1); + } + + return null; + } }