Changeset 11772 in josm
- Timestamp:
- 2017-03-23T00:01:04+01:00 (8 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 3 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
r11627 r11772 12 12 import java.awt.GraphicsEnvironment; 13 13 import java.awt.event.ActionEvent; 14 import java.awt.event.HierarchyBoundsListener;15 import java.awt.event.HierarchyEvent;16 14 import java.awt.event.WindowAdapter; 17 15 import java.awt.event.WindowEvent; … … 35 33 import org.openstreetmap.josm.Main; 36 34 import org.openstreetmap.josm.actions.ExpertToggleAction; 37 import org.openstreetmap.josm.command.ChangePropertyCommand;38 35 import org.openstreetmap.josm.command.Command; 39 36 import org.openstreetmap.josm.data.osm.Node; … … 47 44 import org.openstreetmap.josm.gui.help.HelpUtil; 48 45 import org.openstreetmap.josm.gui.util.GuiHelper; 46 import org.openstreetmap.josm.gui.widgets.AutoAdjustingSplitPane; 49 47 import org.openstreetmap.josm.tools.CheckParameterUtil; 50 48 import org.openstreetmap.josm.tools.ImageProvider; … … 62 60 * Prior to {@link #launchIfNecessary}, the following usage sequence was needed: 63 61 * 64 * There is a singleton instance of this dialog which can be retrieved using65 * {@link #getInstance()}.66 *67 62 * The dialog uses two models: one for resolving tag conflicts, the other 68 63 * for resolving conflicts in relation memberships. For both models there are accessors, … … 71 66 * Models have to be <strong>populated</strong> before the dialog is launched. Example: 72 67 * <pre> 73 * CombinePrimitiveResolverDialog dialog = CombinePrimitiveResolverDialog.getInstance();68 * CombinePrimitiveResolverDialog dialog = new CombinePrimitiveResolverDialog(Main.parent); 74 69 * dialog.getTagConflictResolverModel().populate(aTagCollection); 75 70 * dialog.getRelationMemberConflictResolverModel().populate(aRelationLinkCollection); … … 87 82 public class CombinePrimitiveResolverDialog extends JDialog { 88 83 89 /** the unique instance of the dialog */90 private static CombinePrimitiveResolverDialog instance;91 92 /**93 * Replies the unique instance of the dialog94 *95 * @return the unique instance of the dialog96 * @deprecated use {@link #launchIfNecessary} instead.97 */98 @Deprecated99 public static synchronized CombinePrimitiveResolverDialog getInstance() {100 if (instance == null) {101 GuiHelper.runInEDTAndWait(() -> instance = new CombinePrimitiveResolverDialog(Main.parent));102 }103 return instance;104 }105 106 84 private AutoAdjustingSplitPane spTagConflictTypes; 107 private TagConflictResolver pnlTagConflictResolver; 85 private final TagConflictResolverModel modelTagConflictResolver; 86 protected TagConflictResolver pnlTagConflictResolver; 87 private final RelationMemberConflictResolverModel modelRelConflictResolver; 108 88 protected RelationMemberConflictResolver pnlRelationMemberConflictResolver; 89 private final CombinePrimitiveResolver primitiveResolver; 109 90 private boolean applied; 110 91 private JPanel pnlButtons; … … 117 98 118 99 /** 119 * Replies the target primitive the collection of primitives is merged 120 * or combined to. 100 * Constructs a new {@code CombinePrimitiveResolverDialog}. 101 * @param parent The parent component in which this dialog will be displayed. 102 */ 103 public CombinePrimitiveResolverDialog(Component parent) { 104 this(parent, new TagConflictResolverModel(), new RelationMemberConflictResolverModel()); 105 } 106 107 /** 108 * Constructs a new {@code CombinePrimitiveResolverDialog}. 109 * @param parent The parent component in which this dialog will be displayed. 110 * @param tagModel tag conflict resolver model 111 * @param relModel relation member conflict resolver model 112 * @since 11772 113 */ 114 public CombinePrimitiveResolverDialog(Component parent, 115 TagConflictResolverModel tagModel, RelationMemberConflictResolverModel relModel) { 116 super(GuiHelper.getFrameForComponent(parent), ModalityType.DOCUMENT_MODAL); 117 this.modelTagConflictResolver = tagModel; 118 this.modelRelConflictResolver = relModel; 119 this.primitiveResolver = new CombinePrimitiveResolver(tagModel, relModel); 120 build(); 121 } 122 123 /** 124 * Replies the target primitive the collection of primitives is merged or combined to. 121 125 * 122 126 * @return the target primitive 123 */ 124 public OsmPrimitive getTargetPrimitmive() { 127 * @since 11772 (naming) 128 */ 129 public OsmPrimitive getTargetPrimitive() { 125 130 return targetPrimitive; 126 131 } … … 149 154 } 150 155 156 /** 157 * Updates the dialog title. 158 */ 151 159 protected void updateTitle() { 152 160 if (targetPrimitive == null) { … … 169 177 } 170 178 179 /** 180 * Builds the components. 181 */ 171 182 protected final void build() { 172 183 getContentPane().setLayout(new BorderLayout()); … … 182 193 } 183 194 195 /** 196 * Builds the tag conflict resolver panel. 197 * @return the tag conflict resolver panel 198 */ 184 199 protected JPanel buildTagConflictResolverPanel() { 185 pnlTagConflictResolver = new TagConflictResolver( );200 pnlTagConflictResolver = new TagConflictResolver(modelTagConflictResolver); 186 201 return pnlTagConflictResolver; 187 202 } 188 203 204 /** 205 * Builds the relation member conflict resolver panel. 206 * @return the relation member conflict resolver panel 207 */ 189 208 protected JPanel buildRelationMemberConflictResolverPanel() { 190 pnlRelationMemberConflictResolver = new RelationMemberConflictResolver( new RelationMemberConflictResolverModel());209 pnlRelationMemberConflictResolver = new RelationMemberConflictResolver(modelRelConflictResolver); 191 210 return pnlRelationMemberConflictResolver; 192 211 } 193 212 213 /** 214 * Builds the "Apply" action. 215 * @return the "Apply" action 216 */ 194 217 protected ApplyAction buildApplyAction() { 195 218 return new ApplyAction(); 196 219 } 197 220 221 /** 222 * Builds the button panel. 223 * @return the button panel 224 */ 198 225 protected JPanel buildButtonPanel() { 199 226 JPanel pnl = new JPanel(new FlowLayout(FlowLayout.CENTER)); … … 201 228 // -- apply button 202 229 ApplyAction applyAction = buildApplyAction(); 203 pnlTagConflictResolver.getModel().addPropertyChangeListener(applyAction);204 pnlRelationMemberConflictResolver.getModel().addPropertyChangeListener(applyAction);230 modelTagConflictResolver.addPropertyChangeListener(applyAction); 231 modelRelConflictResolver.addPropertyChangeListener(applyAction); 205 232 btnApply = new JButton(applyAction); 206 233 btnApply.setFocusable(true); … … 219 246 220 247 /** 221 * Constructs a new {@code CombinePrimitiveResolverDialog}.222 * @param parent The parent component in which this dialog will be displayed.223 */224 public CombinePrimitiveResolverDialog(Component parent) {225 super(GuiHelper.getFrameForComponent(parent), ModalityType.DOCUMENT_MODAL);226 build();227 }228 229 /**230 248 * Replies the tag conflict resolver model. 231 249 * @return The tag conflict resolver model. 232 250 */ 233 251 public TagConflictResolverModel getTagConflictResolverModel() { 234 return pnlTagConflictResolver.getModel();252 return modelTagConflictResolver; 235 253 } 236 254 … … 240 258 */ 241 259 public RelationMemberConflictResolverModel getRelationMemberConflictResolverModel() { 242 return pnlRelationMemberConflictResolver.getModel();260 return modelRelConflictResolver; 243 261 } 244 262 … … 249 267 */ 250 268 public boolean isResolvedCompletely() { 251 return getTagConflictResolverModel().isResolvedCompletely() 252 && getRelationMemberConflictResolverModel().isResolvedCompletely(); 253 } 254 269 return modelTagConflictResolver.isResolvedCompletely() 270 && modelRelConflictResolver.isResolvedCompletely(); 271 } 272 273 /** 274 * Builds the list of tag change commands. 275 * @param primitive target primitive 276 * @param tc all resolutions 277 * @return the list of tag change commands 278 */ 255 279 protected List<Command> buildTagChangeCommand(OsmPrimitive primitive, TagCollection tc) { 256 List<Command> cmds = new LinkedList<>(); 257 for (String key : tc.getKeys()) { 258 if (tc.hasUniqueEmptyValue(key)) { 259 if (primitive.get(key) != null) { 260 cmds.add(new ChangePropertyCommand(primitive, key, null)); 261 } 262 } else { 263 String value = tc.getJoinedValues(key); 264 if (!value.equals(primitive.get(key))) { 265 cmds.add(new ChangePropertyCommand(primitive, key, value)); 266 } 267 } 268 } 269 return cmds; 280 return primitiveResolver.buildTagChangeCommand(primitive, tc); 270 281 } 271 282 … … 275 286 */ 276 287 public List<Command> buildResolutionCommands() { 277 List<Command> cmds = new LinkedList<>(); 278 279 TagCollection allResolutions = getTagConflictResolverModel().getAllResolutions(); 280 if (!allResolutions.isEmpty()) { 281 cmds.addAll(buildTagChangeCommand(targetPrimitive, allResolutions)); 282 } 283 for (String p : OsmPrimitive.getDiscardableKeys()) { 284 if (targetPrimitive.get(p) != null) { 285 cmds.add(new ChangePropertyCommand(targetPrimitive, p, null)); 286 } 287 } 288 289 if (getRelationMemberConflictResolverModel().getNumDecisions() > 0) { 290 cmds.addAll(getRelationMemberConflictResolverModel().buildResolutionCommands(targetPrimitive)); 291 } 292 293 Command cmd = pnlRelationMemberConflictResolver.buildTagApplyCommands(getRelationMemberConflictResolverModel() 288 List<Command> cmds = primitiveResolver.buildResolutionCommands(targetPrimitive); 289 Command cmd = pnlRelationMemberConflictResolver.buildTagApplyCommands(modelRelConflictResolver 294 290 .getModifiedRelations(targetPrimitive)); 295 291 if (cmd != null) { … … 312 308 */ 313 309 private void prepareDefaultDecisions(boolean fireEvent) { 314 getTagConflictResolverModel().prepareDefaultTagDecisions(fireEvent); 315 getRelationMemberConflictResolverModel().prepareDefaultRelationDecisions(fireEvent); 316 } 317 310 modelTagConflictResolver.prepareDefaultTagDecisions(fireEvent); 311 modelRelConflictResolver.prepareDefaultRelationDecisions(fireEvent); 312 } 313 314 /** 315 * Builds empty conflicts panel. 316 * @return empty conflicts panel 317 */ 318 318 protected JPanel buildEmptyConflictsPanel() { 319 319 JPanel pnl = new JPanel(new BorderLayout()); … … 322 322 } 323 323 324 /** 325 * Prepares GUI before conflict resolution starts. 326 */ 324 327 protected void prepareGUIBeforeConflictResolutionStarts() { 325 RelationMemberConflictResolverModel relModel = getRelationMemberConflictResolverModel();326 TagConflictResolverModel tagModel = getTagConflictResolverModel();327 328 getContentPane().removeAll(); 328 329 329 if ( relModel.getNumDecisions() > 0 && tagModel.getNumDecisions() > 0) {330 if (modelRelConflictResolver.getNumDecisions() > 0 && modelTagConflictResolver.getNumDecisions() > 0) { 330 331 // display both, the dialog for resolving relation conflicts and for resolving tag conflicts 331 332 spTagConflictTypes.setTopComponent(pnlTagConflictResolver); 332 333 spTagConflictTypes.setBottomComponent(pnlRelationMemberConflictResolver); 333 334 getContentPane().add(spTagConflictTypes, BorderLayout.CENTER); 334 } else if ( relModel.getNumDecisions() > 0) {335 } else if (modelRelConflictResolver.getNumDecisions() > 0) { 335 336 // relation conflicts only 336 337 getContentPane().add(pnlRelationMemberConflictResolver, BorderLayout.CENTER); 337 } else if ( tagModel.getNumDecisions() > 0) {338 } else if (modelTagConflictResolver.getNumDecisions() > 0) { 338 339 // tag conflicts only 339 340 getContentPane().add(pnlTagConflictResolver, BorderLayout.CENTER); … … 348 349 } 349 350 351 /** 352 * Sets whether this dialog has been closed with "Apply". 353 * @param applied {@code true} if this dialog has been closed with "Apply" 354 */ 350 355 protected void setApplied(boolean applied) { 351 356 this.applied = applied; … … 375 380 } 376 381 377 class CancelAction extends AbstractAction { 378 379 CancelAction() { 382 /** 383 * Cancel action. 384 */ 385 protected class CancelAction extends AbstractAction { 386 387 /** 388 * Constructs a new {@code CancelAction}. 389 */ 390 public CancelAction() { 380 391 putValue(Action.SHORT_DESCRIPTION, tr("Cancel conflict resolution")); 381 392 putValue(Action.NAME, tr("Cancel")); … … 390 401 } 391 402 403 /** 404 * Apply action. 405 */ 392 406 protected class ApplyAction extends AbstractAction implements PropertyChangeListener { 393 407 408 /** 409 * Constructs a new {@code ApplyAction}. 410 */ 394 411 public ApplyAction() { 395 412 putValue(Action.SHORT_DESCRIPTION, tr("Apply resolved conflicts")); … … 406 423 } 407 424 425 /** 426 * Updates enabled state. 427 */ 408 428 protected final void updateEnabledState() { 409 setEnabled( pnlTagConflictResolver.getModel().getNumConflicts() == 0410 && pnlRelationMemberConflictResolver.getModel().getNumConflicts() == 0);429 setEnabled(modelTagConflictResolver.isResolvedCompletely() 430 && modelRelConflictResolver.isResolvedCompletely()); 411 431 } 412 432 … … 423 443 424 444 private void adjustDividerLocation() { 425 int numTagDecisions = getTagConflictResolverModel().getNumDecisions();426 int numRelationDecisions = getRelationMemberConflictResolverModel().getNumDecisions();445 int numTagDecisions = modelTagConflictResolver.getNumDecisions(); 446 int numRelationDecisions = modelRelConflictResolver.getNumDecisions(); 427 447 if (numTagDecisions > 0 && numRelationDecisions > 0) { 428 448 double nTop = 1.0 + numTagDecisions; … … 436 456 public void windowOpened(WindowEvent e) { 437 457 adjustDividerLocation(); 438 }439 }440 441 static class AutoAdjustingSplitPane extends JSplitPane implements PropertyChangeListener, HierarchyBoundsListener {442 private double dividerLocation;443 444 AutoAdjustingSplitPane(int newOrientation) {445 super(newOrientation);446 addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, this);447 addHierarchyBoundsListener(this);448 }449 450 @Override451 public void ancestorResized(HierarchyEvent e) {452 setDividerLocation((int) (dividerLocation * getHeight()));453 }454 455 @Override456 public void ancestorMoved(HierarchyEvent e) {457 // do nothing458 }459 460 @Override461 public void propertyChange(PropertyChangeEvent evt) {462 if (JSplitPane.DIVIDER_LOCATION_PROPERTY.equals(evt.getPropertyName())) {463 int newVal = (Integer) evt.getNewValue();464 if (getHeight() != 0) {465 dividerLocation = (double) newVal / (double) getHeight();466 }467 }468 458 } 469 459 } … … 512 502 } 513 503 514 List<Command> cmds = new LinkedList<>(); 515 516 if (!GraphicsEnvironment.isHeadless()) { 504 final List<Command> cmds = new LinkedList<>(); 505 506 final TagConflictResolverModel tagModel = new TagConflictResolverModel(); 507 final RelationMemberConflictResolverModel relModel = new RelationMemberConflictResolverModel(); 508 509 tagModel.populate(tagsToEdit, completeWayTags.getKeysWithMultipleValues(), false); 510 relModel.populate(parentRelations, primitives, false); 511 tagModel.prepareDefaultTagDecisions(false); 512 relModel.prepareDefaultRelationDecisions(false); 513 514 if (tagModel.isResolvedCompletely() && relModel.isResolvedCompletely()) { 515 // Build commands without need of dialog 516 CombinePrimitiveResolver resolver = new CombinePrimitiveResolver(tagModel, relModel); 517 for (OsmPrimitive i : targetPrimitives) { 518 cmds.addAll(resolver.buildResolutionCommands(i)); 519 } 520 } else if (!GraphicsEnvironment.isHeadless()) { 517 521 // Build conflict resolution dialog 518 final CombinePrimitiveResolverDialog dialog = CombinePrimitiveResolverDialog.getInstance(); 519 520 dialog.getTagConflictResolverModel().populate(tagsToEdit, completeWayTags.getKeysWithMultipleValues(), false); 521 dialog.getRelationMemberConflictResolverModel().populate(parentRelations, primitives, false); 522 dialog.prepareDefaultDecisions(false); 522 final CombinePrimitiveResolverDialog dialog = new CombinePrimitiveResolverDialog(Main.parent, tagModel, relModel); 523 523 524 524 // Ensure a proper title is displayed instead of a previous target (fix #7925) … … 529 529 } 530 530 531 // Resolve tag conflicts if necessary532 if (!dialog.isResolvedCompletely()){533 GuiHelper.runInEDTAndWait(() -> {534 dialog.getTagConflictResolverModel().fireTableDataChanged();535 dialog.getRelationMemberConflictResolverModel().fireTableDataChanged();536 dialog.updateTitle();537 });538 dialog.setVisible(true);539 if (!dialog.isApplied()) {540 throw new UserCancelException();541 } 542 }531 // Resolve tag conflicts 532 GuiHelper.runInEDTAndWait(() -> { 533 tagModel.fireTableDataChanged(); 534 relModel.fireTableDataChanged(); 535 dialog.updateTitle(); 536 }); 537 dialog.setVisible(true); 538 if (!dialog.isApplied()) { 539 throw new UserCancelException(); 540 } 541 542 // Build commands 543 543 for (OsmPrimitive i : targetPrimitives) { 544 544 dialog.setTargetPrimitive(i, false); -
trunk/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java
r10791 r11772 58 58 } 59 59 60 private final TagConflictResolver allPrimitivesResolver = new TagConflictResolver();60 private final TagConflictResolverModel model = new TagConflictResolverModel(); 61 61 private final transient Map<OsmPrimitiveType, TagConflictResolver> resolvers = new EnumMap<>(OsmPrimitiveType.class); 62 62 private final JTabbedPane tpResolvers = new JTabbedPane(); … … 81 81 setTitle(tr("Conflicts in pasted tags")); 82 82 for (OsmPrimitiveType type: OsmPrimitiveType.dataValues()) { 83 resolvers.put(type, new TagConflictResolver()); 84 resolvers.get(type).getModel().addPropertyChangeListener(this); 83 TagConflictResolverModel tagModel = new TagConflictResolverModel(); 84 resolvers.put(type, new TagConflictResolver(tagModel)); 85 tagModel.addPropertyChangeListener(this); 85 86 } 86 87 getContentPane().setLayout(new GridBagLayout()); … … 106 107 getContentPane().add(buildButtonPanel(), gc); 107 108 InputMapUtils.addEscapeAction(getRootPane(), new CancelAction()); 108 109 109 } 110 110 … … 114 114 // -- apply button 115 115 ApplyAction applyAction = new ApplyAction(); 116 allPrimitivesResolver.getModel().addPropertyChangeListener(applyAction);116 model.addPropertyChangeListener(applyAction); 117 117 for (TagConflictResolver r : resolvers.values()) { 118 118 r.getModel().addPropertyChangeListener(applyAction); … … 141 141 */ 142 142 protected void initResolver(OsmPrimitiveType type, TagCollection tc, Map<OsmPrimitiveType, Integer> targetStatistics) { 143 resolvers.get(type).getModel().populate(tc, tc.getKeysWithMultipleValues()); 144 resolvers.get(type).getModel().prepareDefaultTagDecisions(); 143 TagConflictResolver resolver = resolvers.get(type); 144 resolver.getModel().populate(tc, tc.getKeysWithMultipleValues()); 145 resolver.getModel().prepareDefaultTagDecisions(); 145 146 if (!tc.isEmpty() && targetStatistics.get(type) != null && targetStatistics.get(type) > 0) { 146 tpResolvers.add(PANE_TITLES.get(type), resolver s.get(type));147 tpResolvers.add(PANE_TITLES.get(type), resolver); 147 148 } 148 149 } … … 164 165 // init the resolver 165 166 // 166 allPrimitivesResolver.getModel().populate(tagsForAllPrimitives, tagsForAllPrimitives.getKeysWithMultipleValues());167 allPrimitivesResolver.getModel().prepareDefaultTagDecisions();167 model.populate(tagsForAllPrimitives, tagsForAllPrimitives.getKeysWithMultipleValues()); 168 model.prepareDefaultTagDecisions(); 168 169 169 170 // prepare the dialog with one tag resolver 170 171 pnlTagResolver.removeAll(); 171 pnlTagResolver.add( allPrimitivesResolver, BorderLayout.CENTER);172 pnlTagResolver.add(new TagConflictResolver(model), BorderLayout.CENTER); 172 173 173 174 statisticsModel.reset(); … … 297 298 setEnabled(false); 298 299 } else if (mode.equals(Mode.RESOLVING_ONE_TAGCOLLECTION_ONLY)) { 299 setEnabled( allPrimitivesResolver.getModel().isResolvedCompletely());300 setEnabled(model.isResolvedCompletely()); 300 301 } else { 301 302 setEnabled(resolvers.values().stream().allMatch(val -> val.getModel().isResolvedCompletely())); … … 329 330 */ 330 331 public TagCollection getResolution() { 331 return allPrimitivesResolver.getModel().getResolution();332 return model.getResolution(); 332 333 } 333 334 … … 340 341 public void propertyChange(PropertyChangeEvent evt) { 341 342 if (evt.getPropertyName().equals(TagConflictResolverModel.NUM_CONFLICTS_PROP)) { 342 TagConflictResolverModel model = (TagConflictResolverModel) evt.getSource();343 TagConflictResolverModel tagModel = (TagConflictResolverModel) evt.getSource(); 343 344 for (int i = 0; i < tpResolvers.getTabCount(); i++) { 344 345 TagConflictResolver resolver = (TagConflictResolver) tpResolvers.getComponentAt(i); 345 if ( model == resolver.getModel()) {346 if (tagModel == resolver.getModel()) { 346 347 tpResolvers.setIconAt(i, 347 348 (Integer) evt.getNewValue() == 0 ? iconResolved : iconUnresolved -
trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolver.java
r10611 r11772 31 31 /** 32 32 * Constructs a new {@code TagConflictResolver}. 33 * @param model tag conflict resolver model 34 * @since 11772 33 35 */ 34 public TagConflictResolver( ) {35 this.model = new TagConflictResolverModel();36 public TagConflictResolver(TagConflictResolverModel model) { 37 this.model = model; 36 38 build(); 37 39 } -
trunk/test/unit/org/openstreetmap/josm/gui/widgets/AutoAdjustingSplitPaneTest.java
r11770 r11772 1 1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.gui. conflict.tags;2 package org.openstreetmap.josm.gui.widgets; 3 3 4 4 import static org.junit.Assert.assertEquals; … … 10 10 import org.junit.Rule; 11 11 import org.junit.Test; 12 import org.openstreetmap.josm.gui.conflict.tags.CombinePrimitiveResolverDialog.AutoAdjustingSplitPane;13 12 import org.openstreetmap.josm.testutils.JOSMTestRules; 14 13 … … 16 15 17 16 /** 18 * Unit tests of {@link CombinePrimitiveResolverDialog} class.17 * Unit tests of {@link AutoAdjustingSplitPane} class. 19 18 */ 20 public class CombinePrimitiveResolverDialogTest {19 public class AutoAdjustingSplitPaneTest { 21 20 22 21 /** … … 28 27 29 28 /** 30 * Unit test of {@link CombinePrimitiveResolverDialog.AutoAdjustingSplitPane} class.29 * Unit test of {@link AutoAdjustingSplitPane} class. 31 30 */ 32 31 @Test 33 32 public void testAutoAdjustingSplitPane() { 34 AutoAdjustingSplitPane pane = new CombinePrimitiveResolverDialog.AutoAdjustingSplitPane(JSplitPane.VERTICAL_SPLIT);33 AutoAdjustingSplitPane pane = new AutoAdjustingSplitPane(JSplitPane.VERTICAL_SPLIT); 35 34 assertEquals(-1, pane.getDividerLocation()); 36 35 assertEquals(0, pane.getHeight());
Note:
See TracChangeset
for help on using the changeset viewer.