[vcs-log] extract common progress and scrolling setup code from main log and file history

This commit is contained in:
Julia Beliaeva
2017-01-31 23:54:52 +03:00
parent 1eb36d4ba3
commit b836251045
3 changed files with 70 additions and 63 deletions
@@ -24,7 +24,6 @@ import com.intellij.vcs.log.VcsLog;
import com.intellij.vcs.log.VcsLogDataKeys;
import com.intellij.vcs.log.VcsLogFilterUi;
import com.intellij.vcs.log.data.VcsLogData;
import com.intellij.vcs.log.data.VcsLogProgress;
import com.intellij.vcs.log.impl.MainVcsLogUiProperties;
import com.intellij.vcs.log.impl.VcsLogUtil;
import com.intellij.vcs.log.ui.VcsLogActionPlaces;
@@ -32,9 +31,9 @@ import com.intellij.vcs.log.ui.VcsLogInternalDataKeys;
import com.intellij.vcs.log.ui.VcsLogUiImpl;
import com.intellij.vcs.log.ui.actions.IntelliSortChooserPopupAction;
import com.intellij.vcs.log.ui.filter.VcsLogClassicFilterUi;
import com.intellij.vcs.log.ui.table.CommitSelectionListener;
import com.intellij.vcs.log.ui.table.VcsLogGraphTable;
import com.intellij.vcs.log.util.BekUtil;
import com.intellij.vcs.log.util.VcsLogUiUtil;
import com.intellij.vcs.log.util.VcsUserUtil;
import com.intellij.vcs.log.visible.VisiblePack;
import net.miginfocom.swing.MigLayout;
@@ -115,32 +114,12 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
myTextFilter = myFilterUi.createTextFilter();
myToolbar = createActionsToolbar();
ProgressStripe progressStripe =
new ProgressStripe(setupScrolledGraph(), this, ProgressWindow.DEFAULT_PROGRESS_DIALOG_POSTPONE_TIME_MILLIS) {
@Override
public void updateUI() {
super.updateUI();
if (myDecorator != null && myLogData.getProgress().isRunning()) startLoadingImmediately();
}
};
myLogData.getProgress().addProgressIndicatorListener(new VcsLogProgress.ProgressListener() {
@Override
public void progressStarted() {
progressStripe.startLoading();
}
@Override
public void progressStopped() {
progressStripe.stopLoading();
}
}, this);
JComponent toolbars = new JPanel(new BorderLayout());
toolbars.add(myToolbar, BorderLayout.NORTH);
JComponent toolbarsAndTable = new JPanel(new BorderLayout());
toolbarsAndTable.add(toolbars, BorderLayout.NORTH);
toolbarsAndTable.add(progressStripe, BorderLayout.CENTER);
toolbarsAndTable.add(VcsLogUiUtil.installProgress(VcsLogUiUtil.setupScrolledGraph(myGraphTable, SideBorder.TOP),
myLogData, this), BorderLayout.CENTER);
myChangesBrowserSplitter = new OnePixelSplitter(false, "vcs.log.changes.splitter.proportion", 0.7f);
myChangesBrowserSplitter.setFirstComponent(toolbarsAndTable);
@@ -184,13 +163,6 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
myDetailsSplitter.setSecondComponent(state ? myDetailsPanel : null);
}
@NotNull
private JScrollPane setupScrolledGraph() {
JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myGraphTable, SideBorder.TOP);
myGraphTable.viewportSet(scrollPane.getViewport());
return scrollPane;
}
@NotNull
public VcsLogGraphTable getGraphTable() {
return myGraphTable;
@@ -18,7 +18,6 @@ package com.intellij.vcs.log.ui.history;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.util.ProgressWindow;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.vcs.FilePath;
import com.intellij.openapi.vcs.VcsDataKeys;
@@ -33,16 +32,15 @@ import com.intellij.util.ArrayUtil;
import com.intellij.util.ObjectUtils;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcs.log.VcsFullCommitDetails;
import com.intellij.vcs.log.data.*;
import com.intellij.vcs.log.data.LoadingDetails;
import com.intellij.vcs.log.data.VcsLogData;
import com.intellij.vcs.log.data.VcsLogProgress;
import com.intellij.vcs.log.impl.MainVcsLogUiProperties;
import com.intellij.vcs.log.ui.VcsLogActionPlaces;
import com.intellij.vcs.log.ui.VcsLogInternalDataKeys;
import com.intellij.vcs.log.ui.frame.CommitSelectionListenerForDiff;
import com.intellij.vcs.log.ui.frame.DetailsPanel;
import com.intellij.vcs.log.ui.frame.ProgressStripe;
import com.intellij.vcs.log.ui.table.VcsLogGraphTable;
import com.intellij.vcs.log.util.VcsLogUiUtil;
import com.intellij.vcs.log.visible.VisiblePack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -84,28 +82,9 @@ public class FileHistoryPanel extends JPanel implements DataProvider, Disposable
myDetailsPanel = new DetailsPanel(logData, myUi.getColorManager(), this);
myDetailsPanel.setBorder(IdeBorderFactory.createBorder(SideBorder.LEFT));
ProgressStripe progressStripe =
new ProgressStripe(setupScrolledGraph(), this, ProgressWindow.DEFAULT_PROGRESS_DIALOG_POSTPONE_TIME_MILLIS) {
@Override
public void updateUI() {
super.updateUI();
if (myDecorator != null && myLogData.getProgress().isRunning()) startLoadingImmediately();
}
};
myLogData.getProgress().addProgressIndicatorListener(new VcsLogProgress.ProgressListener() {
@Override
public void progressStarted() {
progressStripe.startLoading();
}
@Override
public void progressStopped() {
progressStripe.stopLoading();
}
}, this);
myDetailsSplitter = new OnePixelSplitter(true, "vcs.log.history.details.splitter.proportion", 0.7f);
myDetailsSplitter.setFirstComponent(progressStripe);
myDetailsSplitter.setFirstComponent(VcsLogUiUtil.installProgress(VcsLogUiUtil.setupScrolledGraph(myGraphTable, SideBorder.LEFT),
myLogData, this));
myDetailsSplitter.setSecondComponent(myUi.getProperties().get(MainVcsLogUiProperties.SHOW_DETAILS) ? myDetailsPanel : null);
myGraphTable.getSelectionModel().addListSelectionListener(new MyCommitSelectionListenerForDiff());
@@ -121,13 +100,6 @@ public class FileHistoryPanel extends JPanel implements DataProvider, Disposable
Disposer.register(myUi, this);
}
@NotNull
private JScrollPane setupScrolledGraph() {
JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myGraphTable, SideBorder.LEFT);
myGraphTable.viewportSet(scrollPane.getViewport());
return scrollPane;
}
@NotNull
private JComponent createActionsToolbar() {
DefaultActionGroup toolbarGroup = new DefaultActionGroup();
@@ -0,0 +1,63 @@
/*
* Copyright 2000-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.vcs.log.util;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.progress.util.ProgressWindow;
import com.intellij.ui.ScrollPaneFactory;
import com.intellij.vcs.log.data.VcsLogData;
import com.intellij.vcs.log.data.VcsLogProgress;
import com.intellij.vcs.log.ui.frame.ProgressStripe;
import com.intellij.vcs.log.ui.table.VcsLogGraphTable;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
public class VcsLogUiUtil {
@NotNull
public static JComponent installProgress(@NotNull JComponent component,
@NotNull VcsLogData logData,
@NotNull Disposable disposableParent) {
ProgressStripe progressStripe =
new ProgressStripe(component, disposableParent, ProgressWindow.DEFAULT_PROGRESS_DIALOG_POSTPONE_TIME_MILLIS) {
@Override
public void updateUI() {
super.updateUI();
if (myDecorator != null && logData.getProgress().isRunning()) startLoadingImmediately();
}
};
logData.getProgress().addProgressIndicatorListener(new VcsLogProgress.ProgressListener() {
@Override
public void progressStarted() {
progressStripe.startLoading();
}
@Override
public void progressStopped() {
progressStripe.stopLoading();
}
}, disposableParent);
return progressStripe;
}
@NotNull
public static JScrollPane setupScrolledGraph(@NotNull VcsLogGraphTable graphTable, int border) {
JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(graphTable, border);
graphTable.viewportSet(scrollPane.getViewport());
return scrollPane;
}
}