void () { final ListSelectionListener selectionListener = e -> { List<SvnChangeList> changeLists = myRevisionsList.getSelectedObjects(); myAlreadyMerged.clear(); for (SvnChangeList changeList : changeLists) { myAlreadyMerged.addAll(getAlreadyMergedPaths(changeList)); } myRepositoryChangesBrowser.setChangesToDisplay(collectChanges(changeLists, false)); mySplitter.doLayout(); myRepositoryChangesBrowser.repaint(); }; final MyListCellRenderer listCellRenderer = new MyListCellRenderer(); myRevisionsList = new TableView<>() { @Override public TableCellRenderer getCellRenderer(int row, int column) { return listCellRenderer; } @Override public void valueChanged(ListSelectionEvent e) { super.valueChanged(e); selectionListener.valueChanged(e); } }; myRevisionsList.setExpandableItemsEnabled(false); TableViewSpeedSearch<SvnChangeList> search = new TableViewSpeedSearch<>(myRevisionsList, null) { @Override protected String getItemText(@NotNull SvnChangeList element) { return element.getComment(); } }; search.setupListeners(); myRevisionsList.setModelAndUpdateColumns(myRevisionsModel); myRevisionsList.setTableHeader(null); myRevisionsList.setShowGrid(false); final AbstractBaseTagMouseListener mouseListener = new AbstractBaseTagMouseListener() { @Override public Object getTagAt(@NotNull MouseEvent e) { JTable table = (JTable)e.getSource(); int row = table.rowAtPoint(e.getPoint()); int column = table.columnAtPoint(e.getPoint()); if (row == -1 || column == -1) return null; listCellRenderer.customizeCellRenderer(table, table.getValueAt(row, column), table.isRowSelected(row)); return listCellRenderer.myRenderer.getFragmentTagAt(e.getPoint().x - table.getCellRect(row, column, false).x); } }; mouseListener.installOn(myRevisionsList); myMore100Action = new MoreXAction(100); myMore500Action = new MoreXAction(500); BorderLayoutPanel panel = JBUI.Panels.simplePanel() .addToCenter(ScrollPaneFactory.createScrollPane(myRevisionsList)) .addToTop(createToolbar().getComponent()); mySplitter = new Splitter(false, 0.7f); mySplitter.setFirstComponent(panel); myRepositoryChangesBrowser = new CommittedChangesBrowser(myMergeContext.getProject()); myRepositoryChangesBrowser.getDiffAction().registerCustomShortcutSet(myRevisionsList, null); myRepositoryChangesBrowser.setChangeNodeDecorator(createChangesDecorator()); mySplitter.setSecondComponent(myRepositoryChangesBrowser); mySplitter.setDividerWidth(2); addRevisionListListeners(); myPanel.add(mySplitter, BorderLayout.CENTER); }