[vcs-log] separate details panel notifications

* selection changed -- rebuild the whole component;
* some details were loaded -- set new details and request for branches;
* containing branches calculated -- just take branches from cache.

However, this does not solve problem with branches hanging completely. For that, need to rewrite ContainingBranchesGetter.
Also, it would not hurt to request full details for the whole selection, not one by one.
This commit is contained in:
Julia Beliaeva
2016-05-13 18:03:04 +03:00
parent 3e72d568c1
commit fd739eed76
2 changed files with 23 additions and 7 deletions
@@ -199,13 +199,26 @@ class DetailsPanel extends JPanel implements ListSelectionListener {
}
rebuildCommitPanels();
updateCommitDetails(true);
}
public void detailsChanged() {
myLoadingPanel.stopLoading();
updateCommitDetails(true);
}
public void branchesChanged() {
updateCommitDetails(false);
}
private void updateCommitDetails(boolean requestBranches) {
int[] rows = myGraphTable.getSelectedRows();
Set<VcsFullCommitDetails> newCommitDetails = ContainerUtil.newHashSet();
for (int i = 0; i < rows.length; i++) {
for (int i = 0; i < Math.min(rows.length, MAX_ROWS); i++) {
int row = rows[i];
VcsFullCommitDetails commitData = myGraphTable.getModel().getFullDetails(row);
CommitPanel commitPanel = getCommitPanel(i);
commitPanel.setCommit(commitData);
commitPanel.setCommit(commitData, requestBranches);
if (commitData instanceof LoadingDetails) {
myLoadingPanel.startLoading();
}
@@ -283,7 +296,7 @@ class DetailsPanel extends JPanel implements ListSelectionListener {
add(myDataPanel);
}
public void setCommit(@NotNull VcsFullCommitDetails commitData) {
public void setCommit(@NotNull VcsFullCommitDetails commitData, boolean requestBranches) {
if (!Comparing.equal(myCommit, commitData)) {
if (commitData instanceof LoadingDetails) {
myDataPanel.setData(null);
@@ -298,10 +311,13 @@ class DetailsPanel extends JPanel implements ListSelectionListener {
myCommit = commitData;
}
List<String> branches = null;
if (!(commitData instanceof LoadingDetails)) {
List<String> branches;
if (!(commitData instanceof LoadingDetails) && requestBranches) {
branches = myLogData.getContainingBranchesGetter().requestContainingBranches(commitData.getRoot(), commitData.getId());
}
else {
branches = myLogData.getContainingBranchesGetter().getContainingBranchesFromCache(commitData.getRoot(), commitData.getId());
}
if (!Comparing.equal(myCommit, commitData) || myBranches != branches) {
myDataPanel.setBranches(branches);
@@ -151,9 +151,9 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
myGraphTable.initColumnSize();
myGraphTable.repaint();
};
myFullDetailsLoadedListener = () -> myDetailsPanel.valueChanged(null);
myFullDetailsLoadedListener = myDetailsPanel::detailsChanged;
myContainingBranchesListener = () -> {
myDetailsPanel.valueChanged(null);
myDetailsPanel.branchesChanged();
myGraphTable.repaint(); // we may need to repaint highlighters
};
myLogData.getMiniDetailsGetter().addDetailsLoadedListener(myMiniDetailsLoadedListener);