From b8362510457cdbffa2d7f1c2f3dbd847547f473d Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Fri, 13 Jan 2017 16:52:19 +0300 Subject: [PATCH] [vcs-log] extract common progress and scrolling setup code from main log and file history --- .../intellij/vcs/log/ui/frame/MainFrame.java | 34 +--------- .../vcs/log/ui/history/FileHistoryPanel.java | 36 ++--------- .../intellij/vcs/log/util/VcsLogUiUtil.java | 63 +++++++++++++++++++ 3 files changed, 70 insertions(+), 63 deletions(-) create mode 100644 platform/vcs-log/impl/src/com/intellij/vcs/log/util/VcsLogUiUtil.java diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java index 4e050af4da0e..2f286ea5c03a 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java @@ -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; diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/history/FileHistoryPanel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/history/FileHistoryPanel.java index 9d6c0459578b..317aa32ae992 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/history/FileHistoryPanel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/history/FileHistoryPanel.java @@ -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(); diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/util/VcsLogUiUtil.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/util/VcsLogUiUtil.java new file mode 100644 index 000000000000..fa18e821f764 --- /dev/null +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/util/VcsLogUiUtil.java @@ -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; + } +}