Changeset 5121 in josm for trunk/src/org/openstreetmap/josm/gui/preferences/plugin
- Timestamp:
- 2012-03-25T22:47:16+02:00 (12 years ago)
- Location:
- trunk/src/org/openstreetmap/josm/gui/preferences/plugin
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java
r5120 r5121 3 3 4 4 import static org.openstreetmap.josm.tools.I18n.tr; 5 5 import static org.openstreetmap.josm.tools.I18n.trn; 6 7 import java.awt.Component; 6 8 import java.awt.GridBagConstraints; 7 9 import java.awt.GridBagLayout; … … 10 12 import java.awt.event.ActionEvent; 11 13 import java.awt.event.ActionListener; 14 import java.util.HashSet; 12 15 import java.util.List; 16 import java.util.Set; 13 17 14 18 import javax.swing.JCheckBox; 15 19 import javax.swing.JLabel; 20 import javax.swing.JOptionPane; 16 21 import javax.swing.SwingConstants; 17 22 import javax.swing.SwingUtilities; … … 22 27 import org.openstreetmap.josm.gui.widgets.HtmlPanel; 23 28 import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel; 29 import org.openstreetmap.josm.plugins.PluginHandler; 24 30 import org.openstreetmap.josm.plugins.PluginInformation; 25 31 import org.openstreetmap.josm.tools.OpenBrowser; … … 82 88 add(hint, gbc); 83 89 } 90 91 /** 92 * A plugin checkbox. 93 * 94 */ 95 private class JPluginCheckBox extends JCheckBox { 96 public final PluginInformation pi; 97 public JPluginCheckBox(final PluginInformation pi, boolean selected) { 98 this.pi = pi; 99 setSelected(selected); 100 setToolTipText(formatCheckboxTooltipText(pi)); 101 addActionListener(new PluginCbActionListener(this)); 102 } 103 } 104 105 /** 106 * Listener called when the user selects/unselects a plugin checkbox. 107 * 108 */ 109 private class PluginCbActionListener implements ActionListener { 110 private final JPluginCheckBox cb; 111 public PluginCbActionListener(JPluginCheckBox cb) { 112 this.cb = cb; 113 } 114 public void actionPerformed(ActionEvent e) { 115 // Select/unselect corresponding plugin in the model 116 model.setPluginSelected(cb.pi.getName(), cb.isSelected()); 117 // Does the newly selected plugin require other plugins ? 118 if (cb.isSelected() && cb.pi.requires != null) { 119 // Select required plugins 120 for (String s : cb.pi.requires.split(";")) { 121 model.setPluginSelected(s.trim(), true); 122 } 123 // Alert user if plugin requirements are not met 124 PluginHandler.checkRequiredPluginsPreconditions(PluginListPanel.this, model.getAvailablePlugins(), cb.pi); 125 } 126 // If the plugin has been unselected, was it required by other plugins still selected ? 127 else if (!cb.isSelected()) { 128 Set<String> otherPlugins = new HashSet<String>(); 129 for (PluginInformation pi : model.getAvailablePlugins()) { 130 if (!pi.equals(cb.pi) && pi.requires != null && model.isSelectedPlugin(pi.getName())) { 131 for (String s : pi.requires.split(";")) { 132 if (s.trim().equals(cb.pi.getName())) { 133 otherPlugins.add(pi.getName()); 134 break; 135 } 136 } 137 } 138 } 139 if (!otherPlugins.isEmpty()) { 140 alertPluginStillRequired(PluginListPanel.this, cb.pi.getName(), otherPlugins); 141 } 142 } 143 } 144 }; 145 146 147 /** 148 * Alerts the user if an unselected plugin is still required by another plugins 149 * 150 * @param parent The parent Component used to display error popup 151 * @param plugin the plugin 152 * @param otherPlugins the other plugins 153 */ 154 private static void alertPluginStillRequired(Component parent, String plugin, Set<String> otherPlugins) { 155 StringBuilder sb = new StringBuilder(); 156 sb.append("<html>"); 157 sb.append(trn("Plugin {0} is still required by this plugin:", 158 "Plugin {0} is still required by these {1} plugins:", 159 otherPlugins.size(), 160 plugin, 161 otherPlugins.size() 162 )); 163 sb.append("<ul>"); 164 for (String p: otherPlugins) { 165 sb.append("<li>").append(p).append("</li>"); 166 } 167 sb.append("</ul>").append("</html>"); 168 JOptionPane.showMessageDialog( 169 parent, 170 sb.toString(), 171 tr("Warning"), 172 JOptionPane.WARNING_MESSAGE 173 ); 174 } 84 175 85 176 public void refreshView() { … … 105 196 String localversion = formatPluginLocalVersion(model.getPluginInformation(pi.getName())); 106 197 107 final JCheckBox cbPlugin = new JCheckBox(); 108 cbPlugin.setSelected(selected); 109 cbPlugin.setToolTipText(formatCheckboxTooltipText(pi)); 110 cbPlugin.addActionListener(new ActionListener(){ 111 public void actionPerformed(ActionEvent e) { 112 model.setPluginSelected(pi.getName(), cbPlugin.isSelected()); 113 } 114 }); 198 JPluginCheckBox cbPlugin = new JPluginCheckBox(pi, selected); 199 String pluginText = tr("{0}: Version {1} (local: {2})", pi.getName(), remoteversion, localversion); 200 if (pi.requires != null && !pi.requires.isEmpty()) { 201 pluginText += tr(" (requires: {0})", pi.requires); 202 } 115 203 JLabel lblPlugin = new JLabel( 116 tr("{0}: Version {1} (local: {2})", pi.getName(), remoteversion, localversion),204 pluginText, 117 205 pi.getScaledIcon(), 118 206 SwingConstants.LEFT); -
trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java
r4191 r5121 294 294 return ret; 295 295 } 296 297 /** 298 * Replies the set of all available plugins. 299 * 300 * @return the set of all available plugins 301 */ 302 public List<PluginInformation> getAvailablePlugins() { 303 return new LinkedList<PluginInformation>(availablePlugins); 304 } 296 305 297 306 /**
Note:
See TracChangeset
for help on using the changeset viewer.