diff options
Diffstat (limited to 'third_party/java/proguard/proguard5.3.3/src/proguard/gui/OptimizationsDialog.java')
-rw-r--r-- | third_party/java/proguard/proguard5.3.3/src/proguard/gui/OptimizationsDialog.java | 251 |
1 files changed, 251 insertions, 0 deletions
diff --git a/third_party/java/proguard/proguard5.3.3/src/proguard/gui/OptimizationsDialog.java b/third_party/java/proguard/proguard5.3.3/src/proguard/gui/OptimizationsDialog.java new file mode 100644 index 0000000000..d844b5b768 --- /dev/null +++ b/third_party/java/proguard/proguard5.3.3/src/proguard/gui/OptimizationsDialog.java @@ -0,0 +1,251 @@ +/* + * ProGuard -- shrinking, optimization, obfuscation, and preverification + * of Java bytecode. + * + * Copyright (c) 2002-2017 Eric Lafortune @ GuardSquare + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package proguard.gui; + +import proguard.optimize.Optimizer; +import proguard.util.*; + +import javax.swing.*; +import javax.swing.border.*; +import java.awt.*; +import java.awt.event.*; + +/** + * This <code>JDialog</code> allows the user to enter a String. + * + * @author Eric Lafortune + */ +final class OptimizationsDialog extends JDialog +{ + /** + * Return value if the dialog is canceled (with the Cancel button or by + * closing the dialog window). + */ + public static final int CANCEL_OPTION = 1; + + /** + * Return value if the dialog is approved (with the Ok button). + */ + public static final int APPROVE_OPTION = 0; + + + private final JCheckBox[] optimizationCheckBoxes = new JCheckBox[Optimizer.OPTIMIZATION_NAMES.length]; + + private int returnValue; + + + public OptimizationsDialog(JFrame owner) + { + super(owner, msg("selectOptimizations"), true); + setResizable(true); + + // Create some constraints that can be reused. + GridBagConstraints constraintsLast = new GridBagConstraints(); + constraintsLast.gridwidth = GridBagConstraints.REMAINDER; + constraintsLast.anchor = GridBagConstraints.WEST; + constraintsLast.insets = new Insets(1, 2, 1, 2); + + GridBagConstraints constraintsLastStretch = new GridBagConstraints(); + constraintsLastStretch.gridwidth = GridBagConstraints.REMAINDER; + constraintsLastStretch.fill = GridBagConstraints.HORIZONTAL; + constraintsLastStretch.weightx = 1.0; + constraintsLastStretch.anchor = GridBagConstraints.WEST; + constraintsLastStretch.insets = constraintsLast.insets; + + GridBagConstraints panelConstraints = new GridBagConstraints(); + panelConstraints.gridwidth = GridBagConstraints.REMAINDER; + panelConstraints.fill = GridBagConstraints.HORIZONTAL; + panelConstraints.weightx = 1.0; + panelConstraints.weighty = 0.0; + panelConstraints.anchor = GridBagConstraints.NORTHWEST; + panelConstraints.insets = constraintsLast.insets; + + GridBagConstraints selectButtonConstraints = new GridBagConstraints(); + selectButtonConstraints.weighty = 1.0; + selectButtonConstraints.anchor = GridBagConstraints.SOUTHWEST; + selectButtonConstraints.insets = new Insets(4, 4, 8, 4); + + GridBagConstraints okButtonConstraints = new GridBagConstraints(); + okButtonConstraints.weightx = 1.0; + okButtonConstraints.weighty = 1.0; + okButtonConstraints.anchor = GridBagConstraints.SOUTHEAST; + okButtonConstraints.insets = selectButtonConstraints.insets; + + GridBagConstraints cancelButtonConstraints = new GridBagConstraints(); + cancelButtonConstraints.gridwidth = GridBagConstraints.REMAINDER; + cancelButtonConstraints.weighty = 1.0; + cancelButtonConstraints.anchor = GridBagConstraints.SOUTHEAST; + cancelButtonConstraints.insets = selectButtonConstraints.insets; + + GridBagLayout layout = new GridBagLayout(); + + Border etchedBorder = BorderFactory.createEtchedBorder(EtchedBorder.RAISED); + + // Create the optimizations panel. + JPanel optimizationsPanel = new JPanel(layout); + JPanel optimizationSubpanel = null; + String lastOptimizationPrefix = null; + + for (int index = 0; index < Optimizer.OPTIMIZATION_NAMES.length; index++) + { + String optimizationName = Optimizer.OPTIMIZATION_NAMES[index]; + + String optimizationPrefix = optimizationName.substring(0, optimizationName.indexOf('/')); + + if (optimizationSubpanel == null || !optimizationPrefix.equals(lastOptimizationPrefix)) + { + // Create a new keep subpanel and add it. + optimizationSubpanel = new JPanel(layout); + optimizationSubpanel.setBorder(BorderFactory.createTitledBorder(etchedBorder, msg(optimizationPrefix))); + optimizationsPanel.add(optimizationSubpanel, panelConstraints); + + lastOptimizationPrefix = optimizationPrefix; + } + + JCheckBox optimizationCheckBox = new JCheckBox(optimizationName); + optimizationCheckBoxes[index] = optimizationCheckBox; + + optimizationSubpanel.add(tip(optimizationCheckBox, optimizationName.replace('/', '_')+"Tip"), constraintsLastStretch); + } + + // Create the Select All button. + JButton selectAllButton = new JButton(msg("selectAll")); + selectAllButton.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + for (int index = 0; index < optimizationCheckBoxes.length; index++) + { + optimizationCheckBoxes[index].setSelected(true); + } + } + }); + + // Create the Select All button. + JButton selectNoneButton = new JButton(msg("selectNone")); + selectNoneButton.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + for (int index = 0; index < optimizationCheckBoxes.length; index++) + { + optimizationCheckBoxes[index].setSelected(false); + } + } + }); + + // Create the Ok button. + JButton okButton = new JButton(msg("ok")); + okButton.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + returnValue = APPROVE_OPTION; + hide(); + } + }); + + // Create the Cancel button. + JButton cancelButton = new JButton(msg("cancel")); + cancelButton.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + hide(); + } + }); + + // Add all panels to the main panel. + optimizationsPanel.add(selectAllButton, selectButtonConstraints); + optimizationsPanel.add(selectNoneButton, selectButtonConstraints); + optimizationsPanel.add(okButton, okButtonConstraints); + optimizationsPanel.add(cancelButton, cancelButtonConstraints); + + getContentPane().add(new JScrollPane(optimizationsPanel)); + } + + + /** + * Sets the initial optimization filter to be used by the dialog. + */ + public void setFilter(String optimizations) + { + StringMatcher filter = optimizations != null && optimizations.length() > 0 ? + new ListParser(new NameParser()).parse(optimizations) : + new FixedStringMatcher(""); + + for (int index = 0; index < Optimizer.OPTIMIZATION_NAMES.length; index++) + { + optimizationCheckBoxes[index].setSelected(filter.matches(Optimizer.OPTIMIZATION_NAMES[index])); + } + } + + + /** + * Returns the optimization filter composed from the settings in the dialog. + */ + public String getFilter() + { + return new FilterBuilder(optimizationCheckBoxes, '/').buildFilter(); + } + + + /** + * Shows this dialog. This method only returns when the dialog is closed. + * + * @return <code>CANCEL_OPTION</code> or <code>APPROVE_OPTION</code>, + * depending on the choice of the user. + */ + public int showDialog() + { + returnValue = CANCEL_OPTION; + + // Open the dialog in the right place, then wait for it to be closed, + // one way or another. + pack(); + setLocationRelativeTo(getOwner()); + show(); + + return returnValue; + } + + + /** + * Attaches the tool tip from the GUI resources that corresponds to the + * given key, to the given component. + */ + private static JComponent tip(JComponent component, String messageKey) + { + component.setToolTipText(msg(messageKey)); + + return component; + } + + + /** + * Returns the message from the GUI resources that corresponds to the given + * key. + */ + private static String msg(String messageKey) + { + return GUIResources.getMessage(messageKey); + } +}
\ No newline at end of file |