DFM progress indicator: revert 1px icons
[idea/community.git] / platform / platform-impl / src / com / intellij / openapi / wm / impl / status / PresentationModeProgressPanel.java
1 /*
2  * Copyright 2000-2015 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.openapi.wm.impl.status;
17
18 import com.intellij.icons.AllIcons;
19 import com.intellij.ide.ui.UISettings;
20 import com.intellij.openapi.editor.colors.EditorColorsManager;
21 import com.intellij.openapi.ui.popup.IconButton;
22 import com.intellij.openapi.util.registry.Registry;
23 import com.intellij.openapi.util.text.StringUtil;
24 import com.intellij.ui.InplaceButton;
25 import com.intellij.ui.TransparentPanel;
26 import com.intellij.util.ui.EmptyIcon;
27 import com.intellij.util.ui.JBUI;
28 import com.intellij.util.ui.update.MergingUpdateQueue;
29 import com.intellij.util.ui.update.Update;
30 import org.jetbrains.annotations.NotNull;
31
32 import javax.swing.*;
33 import java.awt.*;
34 import java.awt.event.ActionEvent;
35 import java.awt.event.ActionListener;
36
37 /**
38  * @author Konstantin Bulenkov
39  */
40 public class PresentationModeProgressPanel {
41   private final InlineProgressIndicator myProgress;
42   private JLabel myText;
43   private JProgressBar myProgressBar;
44   private InplaceButton myCancelButton;
45   private JLabel myText2;
46   private JPanel myRootPanel;
47   private MergingUpdateQueue myUpdateQueue;
48   private Update myUpdate;
49
50   public PresentationModeProgressPanel(InlineProgressIndicator progress) {
51     myProgress = progress;
52     Font font = JBUI.Fonts.label(11);
53     myText.setFont(font);
54     myText2.setFont(font);
55     myText.setIcon(EmptyIcon.create(1, 16));
56     myText2.setIcon(EmptyIcon.create(1, 16));
57     myUpdateQueue = new MergingUpdateQueue("Presentation Mode Progress", 100, true, null);
58     myUpdate = new Update("Update UI") {
59       @Override
60       public void run() {
61         updateImpl();
62       }
63     };
64   }
65
66   public void update() {
67     myUpdateQueue.queue(myUpdate);
68   }
69
70   @NotNull
71   private static Color getTextForeground() {
72     return EditorColorsManager.getInstance().getGlobalScheme().getDefaultForeground();
73   }
74
75   private void updateImpl() {
76     Color color = getTextForeground();
77     myText.setForeground(color);
78     myText2.setForeground(color);
79     myProgressBar.setForeground(color);
80
81     if (!StringUtil.equals(myText.getText(), myProgress.getText())) {
82       myText.setText(myProgress.getText());
83     }
84     if (!StringUtil.equals(myText2.getText(), myProgress.getText2())) {
85       myText2.setText(myProgress.getText2());
86     }
87     if ((myProgress.isIndeterminate() || myProgress.getFraction() == 0.0) != myProgressBar.isIndeterminate()) {
88       myProgressBar.setIndeterminate(myProgress.isIndeterminate() || myProgress.getFraction() == 0.0);
89       myProgressBar.revalidate();
90     }
91
92     if (!myProgressBar.isIndeterminate()) {
93       myProgressBar.setValue((int)(myProgress.getFraction() * 99) + 1);
94     }
95   }
96
97   @NotNull
98   public JComponent getProgressPanel() {
99     return myRootPanel;
100   }
101
102   private void createUIComponents() {
103     myRootPanel = new TransparentPanel(0.5f) {
104       @Override
105       public boolean isVisible() {
106         UISettings ui = UISettings.getInstance();
107         return ui.PRESENTATION_MODE || !ui.SHOW_STATUS_BAR && Registry.is("ide.show.progress.without.status.bar");
108       }
109     };
110     IconButton iconButton = new IconButton(myProgress.getInfo().getCancelTooltipText(),
111                                                  AllIcons.Process.Stop,
112                                                  AllIcons.Process.StopHovered);
113     myCancelButton = new InplaceButton(iconButton, new ActionListener() {
114       public void actionPerformed(@NotNull ActionEvent e) {
115         myProgress.cancelRequest();
116       }
117     }).setFillBg(false);
118   }
119 }