1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/* 2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ProGuard -- shrinking, optimization, obfuscation, and preverification 3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * of Java bytecode. 4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 5b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * Copyright (c) 2002-2013 Eric Lafortune (eric@graphics.cornell.edu) 6b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 7b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This program is free software; you can redistribute it and/or modify it 8b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * under the terms of the GNU General Public License as published by the Free 9b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Software Foundation; either version 2 of the License, or (at your option) 10b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * any later version. 11b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 12b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This program is distributed in the hope that it will be useful, but WITHOUT 13b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 14b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 15b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * more details. 16b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 17b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * You should have received a copy of the GNU General Public License along 18b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * with this program; if not, write to the Free Software Foundation, Inc., 19b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 21b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopackage proguard.gui; 22b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 23b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.optimize.Optimizer; 24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.util.*; 25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport javax.swing.*; 27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport javax.swing.border.*; 28b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport java.awt.*; 29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport java.awt.event.*; 30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/** 32b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This <code>JDialog</code> allows the user to enter a String. 33b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 34b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @author Eric Lafortune 35b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 36b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratofinal class OptimizationsDialog extends JDialog 37b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{ 38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 39b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Return value if the dialog is canceled (with the Cancel button or by 40b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * closing the dialog window). 41b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 42b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public static final int CANCEL_OPTION = 1; 43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Return value if the dialog is approved (with the Ok button). 46b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 47b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public static final int APPROVE_OPTION = 0; 48b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 49b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 50b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private final JCheckBox[] optimizationCheckBoxes = new JCheckBox[Optimizer.OPTIMIZATION_NAMES.length]; 51b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 52b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private int returnValue; 53b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 54b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 55b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public OptimizationsDialog(JFrame owner) 56b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 57b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato super(owner, msg("selectOptimizations"), true); 58b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato setResizable(true); 59b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 60b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Create some constraints that can be reused. 61b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato GridBagConstraints constraintsLast = new GridBagConstraints(); 62b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato constraintsLast.gridwidth = GridBagConstraints.REMAINDER; 63b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato constraintsLast.anchor = GridBagConstraints.WEST; 64b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato constraintsLast.insets = new Insets(1, 2, 1, 2); 65b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 66b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato GridBagConstraints constraintsLastStretch = new GridBagConstraints(); 67b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato constraintsLastStretch.gridwidth = GridBagConstraints.REMAINDER; 68b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato constraintsLastStretch.fill = GridBagConstraints.HORIZONTAL; 69b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato constraintsLastStretch.weightx = 1.0; 70b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato constraintsLastStretch.anchor = GridBagConstraints.WEST; 71b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato constraintsLastStretch.insets = constraintsLast.insets; 72b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 73b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato GridBagConstraints panelConstraints = new GridBagConstraints(); 74b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato panelConstraints.gridwidth = GridBagConstraints.REMAINDER; 75b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato panelConstraints.fill = GridBagConstraints.HORIZONTAL; 76b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato panelConstraints.weightx = 1.0; 77b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato panelConstraints.weighty = 0.0; 78b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato panelConstraints.anchor = GridBagConstraints.NORTHWEST; 79b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato panelConstraints.insets = constraintsLast.insets; 80b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 81b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato GridBagConstraints selectButtonConstraints = new GridBagConstraints(); 82b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato selectButtonConstraints.weighty = 1.0; 83b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato selectButtonConstraints.anchor = GridBagConstraints.SOUTHWEST; 84b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato selectButtonConstraints.insets = new Insets(4, 4, 8, 4); 85b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 86b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato GridBagConstraints okButtonConstraints = new GridBagConstraints(); 87b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato okButtonConstraints.weightx = 1.0; 88b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato okButtonConstraints.weighty = 1.0; 89b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato okButtonConstraints.anchor = GridBagConstraints.SOUTHEAST; 90b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato okButtonConstraints.insets = selectButtonConstraints.insets; 91b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 92b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato GridBagConstraints cancelButtonConstraints = new GridBagConstraints(); 93b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato cancelButtonConstraints.gridwidth = GridBagConstraints.REMAINDER; 94b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato cancelButtonConstraints.weighty = 1.0; 95b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato cancelButtonConstraints.anchor = GridBagConstraints.SOUTHEAST; 96b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato cancelButtonConstraints.insets = selectButtonConstraints.insets; 97b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 98b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato GridBagLayout layout = new GridBagLayout(); 99b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 100b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato Border etchedBorder = BorderFactory.createEtchedBorder(EtchedBorder.RAISED); 101b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 102b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Create the optimizations panel. 103b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato JPanel optimizationsPanel = new JPanel(layout); 104b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato JPanel optimizationSubpanel = null; 105b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato String lastOptimizationPrefix = null; 106b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 107b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato for (int index = 0; index < Optimizer.OPTIMIZATION_NAMES.length; index++) 108b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 109b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato String optimizationName = Optimizer.OPTIMIZATION_NAMES[index]; 110b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 111b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato String optimizationPrefix = optimizationName.substring(0, optimizationName.indexOf('/')); 112b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 113b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (optimizationSubpanel == null || !optimizationPrefix.equals(lastOptimizationPrefix)) 114b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 115b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Create a new keep subpanel and add it. 116b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato optimizationSubpanel = new JPanel(layout); 117b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato optimizationSubpanel.setBorder(BorderFactory.createTitledBorder(etchedBorder, msg(optimizationPrefix))); 118b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato optimizationsPanel.add(optimizationSubpanel, panelConstraints); 119b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 120b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato lastOptimizationPrefix = optimizationPrefix; 121b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 122b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 123b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato JCheckBox optimizationCheckBox = new JCheckBox(optimizationName); 124b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato optimizationCheckBoxes[index] = optimizationCheckBox; 125b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 126b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato optimizationSubpanel.add(tip(optimizationCheckBox, optimizationName.replace('/', '_')+"Tip"), constraintsLastStretch); 127b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 128b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 129b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Create the Select All button. 130b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato JButton selectAllButton = new JButton(msg("selectAll")); 131b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato selectAllButton.addActionListener(new ActionListener() 132b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 133b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void actionPerformed(ActionEvent e) 134b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 135b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato for (int index = 0; index < optimizationCheckBoxes.length; index++) 136b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 137b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato optimizationCheckBoxes[index].setSelected(true); 138b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 139b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 140b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato }); 141b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 142b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Create the Select All button. 143b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato JButton selectNoneButton = new JButton(msg("selectNone")); 144b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato selectNoneButton.addActionListener(new ActionListener() 145b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 146b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void actionPerformed(ActionEvent e) 147b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 148b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato for (int index = 0; index < optimizationCheckBoxes.length; index++) 149b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 150b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato optimizationCheckBoxes[index].setSelected(false); 151b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 152b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 153b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato }); 154b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 155b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Create the Ok button. 156b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato JButton okButton = new JButton(msg("ok")); 157b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato okButton.addActionListener(new ActionListener() 158b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 159b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void actionPerformed(ActionEvent e) 160b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 161b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato returnValue = APPROVE_OPTION; 162b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato hide(); 163b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 164b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato }); 165b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 166b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Create the Cancel button. 167b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato JButton cancelButton = new JButton(msg("cancel")); 168b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato cancelButton.addActionListener(new ActionListener() 169b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 170b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void actionPerformed(ActionEvent e) 171b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 172b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato hide(); 173b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 174b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato }); 175b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 176b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Add all panels to the main panel. 177b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato optimizationsPanel.add(selectAllButton, selectButtonConstraints); 178b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato optimizationsPanel.add(selectNoneButton, selectButtonConstraints); 179b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato optimizationsPanel.add(okButton, okButtonConstraints); 180b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato optimizationsPanel.add(cancelButton, cancelButtonConstraints); 181b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 182b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato getContentPane().add(new JScrollPane(optimizationsPanel)); 183b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 184b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 185b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 186b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 187b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Sets the initial optimization filter to be used by the dialog. 188b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 189b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void setFilter(String optimizations) 190b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 191b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato StringMatcher filter = optimizations != null && optimizations.length() > 0 ? 192b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato new ListParser(new NameParser()).parse(optimizations) : 193b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato new FixedStringMatcher(""); 194b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 195b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato for (int index = 0; index < Optimizer.OPTIMIZATION_NAMES.length; index++) 196b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 197b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato optimizationCheckBoxes[index].setSelected(filter.matches(Optimizer.OPTIMIZATION_NAMES[index])); 198b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 199b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 200b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 201b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 202b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 203b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the optimization filter composed from the settings in the dialog. 204b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 205b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public String getFilter() 206b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 207b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new FilterBuilder(optimizationCheckBoxes, '/').buildFilter(); 208b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 209b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 210b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 211b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 212b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Shows this dialog. This method only returns when the dialog is closed. 213b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 214b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @return <code>CANCEL_OPTION</code> or <code>APPROVE_OPTION</code>, 215b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * depending on the choice of the user. 216b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 217b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public int showDialog() 218b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 219b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato returnValue = CANCEL_OPTION; 220b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 221b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Open the dialog in the right place, then wait for it to be closed, 222b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // one way or another. 223b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato pack(); 224b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato setLocationRelativeTo(getOwner()); 225b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato show(); 226b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 227b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return returnValue; 228b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 229b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 230b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 231b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 232b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Attaches the tool tip from the GUI resources that corresponds to the 233b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * given key, to the given component. 234b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 235b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private static JComponent tip(JComponent component, String messageKey) 236b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 237b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato component.setToolTipText(msg(messageKey)); 238b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 239b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return component; 240b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 241b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 242b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 243b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 244b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the message from the GUI resources that corresponds to the given 245b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * key. 246b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 247b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private static String msg(String messageKey) 248b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 249b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return GUIResources.getMessage(messageKey); 250b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 251b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}