Changeset 30766 in osm for applications/editors/josm/plugins/merge-overlap/src/mergeoverlap/hack/MyCombinePrimitiveResolverDialog.java
- Timestamp:
- 2014-10-27T23:30:49+01:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/merge-overlap/src/mergeoverlap/hack/MyCombinePrimitiveResolverDialog.java
r30714 r30766 43 43 import org.openstreetmap.josm.gui.conflict.tags.RelationMemberConflictDecision; 44 44 import org.openstreetmap.josm.gui.conflict.tags.RelationMemberConflictDecisionType; 45 import org.openstreetmap.josm.gui.conflict.tags.RelationMemberConflictResolver; 45 46 import org.openstreetmap.josm.gui.conflict.tags.TagConflictResolver; 46 47 import org.openstreetmap.josm.gui.conflict.tags.TagConflictResolverModel; 47 48 import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction; 48 49 import org.openstreetmap.josm.gui.help.HelpUtil; 50 import org.openstreetmap.josm.gui.util.GuiHelper; 49 51 import org.openstreetmap.josm.tools.ImageProvider; 50 52 import org.openstreetmap.josm.tools.WindowGeometry; … … 55 57 * 56 58 * There is a singleton instance of this dialog which can be retrieved using 57 * {@ see#getInstance()}.59 * {@link #getInstance()}. 58 60 * 59 61 * The dialog uses two models: one for resolving tag conflicts, the other 60 62 * for resolving conflicts in relation memberships. For both models there are accessors, 61 * i.e {@ see#getTagConflictResolverModel()} and {@see#getRelationMemberConflictResolverModel()}.63 * i.e {@link #getTagConflictResolverModel()} and {@link #getRelationMemberConflictResolverModel()}. 62 64 * 63 65 * Models have to be <strong>populated</strong> before the dialog is launched. Example: … … 70 72 * 71 73 * You should also set the target primitive which other primitives (ways or nodes) are 72 * merged to, see {@ see#setTargetPrimitive(OsmPrimitive)}.74 * merged to, see {@link #setTargetPrimitive(OsmPrimitive)}. 73 75 * 74 * After the dialog is closed use {@ see#isCancelled()} to check whether the user canceled75 * the dialog. If it wasn't canceled you may build a collection of {@ seeCommand} objects76 * After the dialog is closed use {@link #isCanceled()} to check whether the user canceled 77 * the dialog. If it wasn't canceled you may build a collection of {@link Command} objects 76 78 * which reflect the conflict resolution decisions the user made in the dialog: 77 * see {@see #buildResolutionCommands()} 78 * 79 * 79 * see {@link #buildResolutionCommands()} 80 80 */ 81 81 public class MyCombinePrimitiveResolverDialog extends JDialog { 82 82 83 83 /** the unique instance of the dialog */ 84 staticprivate MyCombinePrimitiveResolverDialog instance;84 private static MyCombinePrimitiveResolverDialog instance; 85 85 86 86 /** … … 91 91 public static MyCombinePrimitiveResolverDialog getInstance() { 92 92 if (instance == null) { 93 instance = new MyCombinePrimitiveResolverDialog(Main.parent); 93 GuiHelper.runInEDTAndWait(new Runnable() { 94 @Override public void run() { 95 instance = new MyCombinePrimitiveResolverDialog(Main.parent); 96 } 97 }); 94 98 } 95 99 return instance; … … 98 102 private AutoAdjustingSplitPane spTagConflictTypes; 99 103 private TagConflictResolver pnlTagConflictResolver; 100 private MyRelationMemberConflictResolver pnlRelationMemberConflictResolver;101 private boolean cancel led;104 private RelationMemberConflictResolver pnlRelationMemberConflictResolver; 105 private boolean canceled; 102 106 private JPanel pnlButtons; 103 107 private OsmPrimitive targetPrimitive; … … 119 123 120 124 /** 121 * Sets the primitive the collection of primitives is merged or combined 122 * to. 125 * Sets the primitive the collection of primitives is merged or combined to. 123 126 * 124 127 * @param primitive the target primitive 125 128 */ 126 public void setTargetPrimitive(OsmPrimitive primitive) { 129 public void setTargetPrimitive(final OsmPrimitive primitive) { 127 130 this.targetPrimitive = primitive; 128 updateTitle(); 129 if (primitive instanceof Way) { 130 pnlRelationMemberConflictResolver.initForWayCombining(); 131 } else if (primitive instanceof Node) { 132 pnlRelationMemberConflictResolver.initForNodeMerging(); 133 } 131 GuiHelper.runInEDTAndWait(new Runnable() { 132 @Override public void run() { 133 updateTitle(); 134 if (primitive instanceof Way) { 135 pnlRelationMemberConflictResolver.initForWayCombining(); 136 } else if (primitive instanceof Node) { 137 pnlRelationMemberConflictResolver.initForNodeMerging(); 138 } 139 } 140 }); 134 141 } 135 142 … … 152 159 } 153 160 154 protected void build() { 161 protected final void build() { 155 162 getContentPane().setLayout(new BorderLayout()); 156 163 updateTitle(); … … 169 176 170 177 protected JPanel buildRelationMemberConflictResolverPanel() { 171 pnlRelationMemberConflictResolver = new MyRelationMemberConflictResolver ();178 pnlRelationMemberConflictResolver = new RelationMemberConflictResolver(new MyRelationMemberConflictResolverModel()); 172 179 return pnlRelationMemberConflictResolver; 173 180 } 174 181 175 182 protected JPanel buildButtonPanel() { 176 JPanel pnl = new JPanel(); 177 pnl.setLayout(new FlowLayout(FlowLayout.CENTER)); 183 JPanel pnl = new JPanel(new FlowLayout(FlowLayout.CENTER)); 178 184 179 185 // -- apply button … … 196 202 } 197 203 198 public MyCombinePrimitiveResolverDialog(Component owner) { 199 super(JOptionPane.getFrameForComponent(owner), ModalityType.DOCUMENT_MODAL); 204 /** 205 * Constructs a new {@code MyCombinePrimitiveResolverDialog}. 206 * @param parent The parent component in which this dialog will be displayed. 207 */ 208 public MyCombinePrimitiveResolverDialog(Component parent) { 209 super(JOptionPane.getFrameForComponent(parent), ModalityType.DOCUMENT_MODAL); 200 210 build(); 201 211 } 202 212 213 /** 214 * Replies the tag conflict resolver model. 215 * @return The tag conflict resolver model. 216 */ 203 217 public TagConflictResolverModel getTagConflictResolverModel() { 204 218 return pnlTagConflictResolver.getModel(); 205 219 } 206 220 221 /** 222 * Replies the relation membership conflict resolver model. 223 * @return The relation membership conflict resolver model. 224 */ 207 225 public MyRelationMemberConflictResolverModel getRelationMemberConflictResolverModel() { 208 return pnlRelationMemberConflictResolver.getModel(); 226 return (MyRelationMemberConflictResolverModel) pnlRelationMemberConflictResolver.getModel(); 209 227 } 210 228 … … 230 248 231 249 TagCollection allResolutions = getTagConflictResolverModel().getAllResolutions(); 232 if (allResolutions. size() > 0) {250 if (!allResolutions.isEmpty()) { 233 251 cmds.addAll(buildTagChangeCommand(targetPrimitive, allResolutions)); 234 252 } … … 279 297 } 280 298 299 /** 300 * Prepares the default decisions for populated tag and relation membership conflicts. 301 */ 281 302 public void prepareDefaultDecisions() { 282 303 prepareDefaultTagDecisions(); … … 285 306 286 307 protected JPanel buildEmptyConflictsPanel() { 287 JPanel pnl = new JPanel(); 288 pnl.setLayout(new BorderLayout()); 308 JPanel pnl = new JPanel(new BorderLayout()); 289 309 pnl.add(new JLabel(tr("No conflicts to resolve"))); 290 310 return pnl; … … 297 317 298 318 if (relModel.getNumDecisions() > 0 && tagModel.getNumDecisions() > 0) { 299 // display both, the dialog for resolving relation conflicts and for resolving 300 // tag conflicts 319 // display both, the dialog for resolving relation conflicts and for resolving tag conflicts 301 320 spTagConflictTypes.setTopComponent(pnlTagConflictResolver); 302 321 spTagConflictTypes.setBottomComponent(pnlRelationMemberConflictResolver); … … 304 323 } else if (relModel.getNumDecisions() > 0) { 305 324 // relation conflicts only 306 //307 325 getContentPane().add(pnlRelationMemberConflictResolver, BorderLayout.CENTER); 308 326 } else if (tagModel.getNumDecisions() > 0) { 309 327 // tag conflicts only 310 //311 328 getContentPane().add(pnlTagConflictResolver, BorderLayout.CENTER); 312 329 } else { … … 324 341 } 325 342 326 protected void setCancelled(boolean cancelled) { 327 this.cancelled = cancelled; 328 } 329 330 public boolean isCancelled() { 331 return cancelled; 343 protected void setCanceled(boolean canceled) { 344 this.canceled = canceled; 345 } 346 347 /** 348 * Determines if this dialog has been cancelled. 349 * @return true if this dialog has been cancelled, false otherwise. 350 */ 351 public boolean isCanceled() { 352 return canceled; 332 353 } 333 354 … … 338 359 new WindowGeometry(getClass().getName() + ".geometry", WindowGeometry.centerInWindow(Main.parent, 339 360 new Dimension(600, 400))).applySafe(this); 340 setCancel led(false);361 setCanceled(false); 341 362 btnApply.requestFocusInWindow(); 342 363 } else if (isShowing()) { // Avoid IllegalComponentStateException like in #8775 … … 357 378 @Override 358 379 public void actionPerformed(ActionEvent arg0) { 359 setCancel led(true);380 setCanceled(true); 360 381 setVisible(false); 361 382 } … … 377 398 } 378 399 379 protected void updateEnabledState() { 400 protected final void updateEnabledState() { 380 401 setEnabled(pnlTagConflictResolver.getModel().getNumConflicts() == 0 381 402 && pnlRelationMemberConflictResolver.getModel().getNumConflicts() == 0);
Note:
See TracChangeset
for help on using the changeset viewer.