public ConflationToggleDialog(ConflationPlugin conflationPlugin) { // TODO: create shortcut? super(TITLE_PREFIX, "conflation.png", tr("Activates the conflation plugin"), null, 150); matches = new SimpleMatchList(); settingsDialog = new SettingsDialog(); settingsDialog.setModalityType(Dialog.ModalityType.MODELESS); settingsDialog.addWindowListener( new WindowAdapter() { @Override public void windowClosed(WindowEvent e) { // "Generate matches" was clicked if (settingsDialog.getValue() == 1) { settings = settingsDialog.getSettings(); performMatching(); } } }); // create table to show matches and allow multiple selections matchTableModel = new SimpleMatchesTableModel(); matchTable = new JTable(matchTableModel); // add selection handler, to center/zoom view matchTable.getSelectionModel().addListSelectionListener(new MatchListSelectionHandler()); matchTable .getColumnModel() .getSelectionModel() .addListSelectionListener(new MatchListSelectionHandler()); // FIXME: doesn't work right now matchTable.getColumnModel().getColumn(0).setCellRenderer(new OsmPrimitivRenderer()); matchTable.getColumnModel().getColumn(1).setCellRenderer(new OsmPrimitivRenderer()); matchTable.getColumnModel().getColumn(4).setCellRenderer(new ColorTableCellRenderer("Tags")); matchTable.setRowSelectionAllowed(true); matchTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); referenceOnlyListModel = new UnmatchedObjectListModel(); referenceOnlyList = new JList<>(referenceOnlyListModel); referenceOnlyList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); referenceOnlyList.setCellRenderer(new OsmPrimitivRenderer()); referenceOnlyList.setTransferHandler(null); // no drag & drop subjectOnlyListModel = new UnmatchedObjectListModel(); subjectOnlyList = new JList<>(subjectOnlyListModel); subjectOnlyList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); subjectOnlyList.setCellRenderer(new OsmPrimitivRenderer()); subjectOnlyList.setTransferHandler(null); // no drag & drop // add popup menu for zoom on selection zoomToListSelectionAction = new ZoomToListSelectionAction(); selectionPopup = new SelectionPopup(); SelectionPopupMenuLauncher launcher = new SelectionPopupMenuLauncher(); matchTable.addMouseListener(launcher); subjectOnlyList.addMouseListener(launcher); referenceOnlyList.addMouseListener(launcher); // on enter key zoom to selection InputMapUtils.addEnterAction(matchTable, zoomToListSelectionAction); InputMapUtils.addEnterAction(subjectOnlyList, zoomToListSelectionAction); InputMapUtils.addEnterAction(referenceOnlyList, zoomToListSelectionAction); DoubleClickHandler dblClickHandler = new DoubleClickHandler(); matchTable.addMouseListener(dblClickHandler); referenceOnlyList.addMouseListener(dblClickHandler); subjectOnlyList.addMouseListener(dblClickHandler); tabbedPane = new JTabbedPane(); tabbedPane.addTab(tr("Matches"), matchTable); tabbedPane.addTab(tr("Reference only"), referenceOnlyList); tabbedPane.addTab(tr("Subject only"), subjectOnlyList); conflateAction = new ConflateAction(); final SideButton conflateButton = new SideButton(conflateAction); // TODO: don't need this arrow box now, but likely will shortly // conflateButton.createArrow(new ActionListener() { // @Override // public void actionPerformed(ActionEvent e) { // ConflatePopupMenu.launch(conflateButton); // } // }); removeAction = new RemoveAction(); // add listeners to update enable state of buttons tabbedPane.addChangeListener(conflateAction); tabbedPane.addChangeListener(removeAction); referenceOnlyList.addListSelectionListener(conflateAction); referenceOnlyList.addListSelectionListener(removeAction); subjectOnlyList.addListSelectionListener(conflateAction); subjectOnlyList.addListSelectionListener(removeAction); UnmatchedListDataListener unmatchedListener = new UnmatchedListDataListener(); subjectOnlyListModel.addListDataListener(unmatchedListener); referenceOnlyListModel.addListDataListener(unmatchedListener); createLayout( tabbedPane, true, Arrays.asList( new SideButton[] { new SideButton(new ConfigureAction()), conflateButton, new SideButton(removeAction) // new SideButton("Replace Geometry", false), // new SideButton("Merge Tags", false), // new SideButton("Remove", false) })); }