IDEA-172561 vcs: use JBLoadingPanel

Issue might have been caused by missing validate()/repaint()
This commit is contained in:
Aleksey Pivovarov
2017-05-10 15:08:20 +03:00
parent c5eb429e56
commit ba2e284b4c
@@ -34,7 +34,6 @@ import com.intellij.icons.AllIcons;
import com.intellij.ide.actions.ContextHelpAction;
import com.intellij.ide.actions.ShowFilePathAction;
import com.intellij.ide.ui.SplitterProportionsDataImpl;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.help.HelpManager;
@@ -44,7 +43,10 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.*;
import com.intellij.openapi.ui.popup.Balloon;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Couple;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vcs.changes.ChangesUtil;
@@ -53,11 +55,8 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.ex.IdeFocusTraversalPolicy;
import com.intellij.ui.*;
import com.intellij.ui.awt.RelativePoint;
import com.intellij.ui.components.JBLayeredPane;
import com.intellij.ui.components.JBLoadingPanel;
import com.intellij.util.Consumer;
import com.intellij.util.ui.AbstractLayoutManager;
import com.intellij.util.ui.AnimatedIcon;
import com.intellij.util.ui.AsyncProcessIcon;
import com.intellij.util.ui.update.MergingUpdateQueue;
import com.intellij.util.ui.update.Update;
import org.jetbrains.annotations.NotNull;
@@ -82,7 +81,7 @@ public abstract class HistoryDialog<T extends HistoryDialogModel> extends FrameW
protected final VirtualFile myFile;
private Splitter mySplitter;
private RevisionsList myRevisionsList;
private MyDiffContainer myDiffView;
private JBLoadingPanel myDiffView;
private ActionToolbar myToolBar;
private T myModel;
@@ -147,8 +146,9 @@ public abstract class HistoryDialog<T extends HistoryDialogModel> extends FrameW
root.setFocusTraversalPolicyProvider(true);
Pair<JComponent, Dimension> diffAndToolbarSize = createDiffPanel(root, traversalPolicy);
myDiffView = new MyDiffContainer(diffAndToolbarSize.first);
Disposer.register(this, myDiffView);
myDiffView = new JBLoadingPanel(new BorderLayout(), this, 200);
myDiffView.add(diffAndToolbarSize.first, BorderLayout.CENTER);
JComponent revisionsSide = createRevisionsSide(diffAndToolbarSize.second);
@@ -268,7 +268,7 @@ public abstract class HistoryDialog<T extends HistoryDialogModel> extends FrameW
isUpdating = true;
updateActions();
myDiffView.startUpdating();
myDiffView.startLoading();
});
Runnable apply = null;
@@ -293,7 +293,7 @@ public abstract class HistoryDialog<T extends HistoryDialogModel> extends FrameW
}
}
updateActions();
myDiffView.finishUpdating();
myDiffView.stopLoading();
});
}
});
@@ -567,62 +567,6 @@ public abstract class HistoryDialog<T extends HistoryDialogModel> extends FrameW
}
}
private static class MyDiffContainer extends JBLayeredPane implements Disposable {
private AnimatedIcon myIcon = new AsyncProcessIcon.Big(this.getClass().getName());
private JComponent myContent;
private JComponent myLoadingPanel;
private MyDiffContainer(JComponent content) {
setLayout(new MyOverlayLayout());
myContent = content;
myLoadingPanel = new JPanel(new MyPanelLayout());
myLoadingPanel.setOpaque(false);
myLoadingPanel.add(myIcon);
add(myContent);
add(myLoadingPanel, JLayeredPane.POPUP_LAYER);
finishUpdating();
}
public void dispose() {
myIcon.dispose();
}
public void startUpdating() {
myLoadingPanel.setVisible(true);
myIcon.resume();
}
public void finishUpdating() {
myIcon.suspend();
myLoadingPanel.setVisible(false);
}
private class MyOverlayLayout extends AbstractLayoutManager {
public void layoutContainer(Container parent) {
myContent.setBounds(0, 0, getWidth(), getHeight());
myLoadingPanel.setBounds(0, 0, getWidth(), getHeight());
}
public Dimension preferredLayoutSize(Container parent) {
return myContent.getPreferredSize();
}
}
private class MyPanelLayout extends AbstractLayoutManager {
public void layoutContainer(Container parent) {
Dimension size = myIcon.getPreferredSize();
myIcon.setBounds((getWidth() - size.width) / 2, (getHeight() - size.height) / 2, size.width, size.height);
}
public Dimension preferredLayoutSize(Container parent) {
return myContent.getPreferredSize();
}
}
}
private static class MyDialogWrapper extends DialogWrapper {
@NotNull private final CreatePatchConfigurationPanel myPanel;