public Selection(@NotNull VcsLogGraphTable table) { myTable = table; List<Integer> selectedRows = ContainerUtil.sorted(toList(myTable.getSelectedRows())); Couple<Integer> visibleRows = ScrollingUtil.getVisibleRows(myTable); myScrollToTop = visibleRows.first - 1 == 0; VisibleGraph<Integer> graph = myTable.getVisibleGraph(); mySelectedCommits = new TIntHashSet(); Integer visibleSelectedCommit = null; Integer delta = null; for (int row : selectedRows) { if (row < graph.getVisibleCommitCount()) { Integer commit = graph.getRowInfo(row).getCommit(); mySelectedCommits.add(commit); if (visibleRows.first - 1 <= row && row <= visibleRows.second && visibleSelectedCommit == null) { visibleSelectedCommit = commit; delta = myTable.getCellRect(row, 0, false).y - myTable.getVisibleRect().y; } } } if (visibleSelectedCommit == null && visibleRows.first - 1 >= 0) { visibleSelectedCommit = graph.getRowInfo(visibleRows.first - 1).getCommit(); delta = myTable.getCellRect(visibleRows.first - 1, 0, false).y - myTable.getVisibleRect().y; } myVisibleSelectedCommit = visibleSelectedCommit; myDelta = delta; }
@Override public void valueChanged(@Nullable ListSelectionEvent notUsed) { if (notUsed != null && notUsed.getValueIsAdjusting()) return; VcsFullCommitDetails newCommitDetails = null; int[] rows = myGraphTable.getSelectedRows(); if (rows.length < 1) { showMessage("No commits selected"); } else if (rows.length > 1) { showMessage("Several commits selected"); } else { ((CardLayout) getLayout()).show(this, STANDARD_LAYER); int row = rows[0]; GraphTableModel tableModel = (GraphTableModel) myGraphTable.getModel(); VcsFullCommitDetails commitData = myLogDataHolder.getCommitDetailsGetter().getCommitData(row, tableModel); if (commitData == null) { showMessage("No commits selected"); return; } if (commitData instanceof LoadingDetails) { myLoadingPanel.startLoading(); myCommitDetailsPanel.setData(null); myReferencesPanel.setReferences(Collections.<VcsRef>emptyList()); updateDetailsBorder(null); } else { myLoadingPanel.stopLoading(); myCommitDetailsPanel.setData(commitData); myReferencesPanel.setReferences(sortRefs(commitData.getId(), commitData.getRoot())); updateDetailsBorder(commitData); newCommitDetails = commitData; } List<String> branches = null; if (!(commitData instanceof LoadingDetails)) { branches = myLogDataHolder .getContainingBranchesGetter() .requestContainingBranches(commitData.getRoot(), commitData.getId()); } myCommitDetailsPanel.setBranches(branches); if (!Comparing.equal(myCurrentCommitDetails, newCommitDetails)) { myCurrentCommitDetails = newCommitDetails; myScrollPane.getVerticalScrollBar().setValue(0); } } }