text in statusbar fix

This commit is contained in:
Alexey Pegov
2010-11-13 18:22:55 +03:00
parent d9f9a44bb6
commit 64915b026c
6 changed files with 46 additions and 16 deletions
@@ -57,6 +57,13 @@ public class StatusBarUpdater implements Disposable {
updateLater();
}
});
project.getMessageBus().connect().subscribe(DaemonCodeAnalyzer.DAEMON_EVENT_TOPIC, new DaemonCodeAnalyzer.DaemonListener() {
@Override
public void daemonFinished() {
updateLater();
}
});
}
private void updateLater() {
@@ -34,10 +34,7 @@ import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vcs.FileStatusListener;
import com.intellij.openapi.vcs.FileStatusManager;
@@ -53,6 +50,7 @@ import gnu.trove.THashMap;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
@@ -239,7 +237,7 @@ public class WolfTheProblemSolverImpl extends WolfTheProblemSolver {
}
pass.setProgressLimit(progressLimit);
final StatusBar statusBar = WindowManager.getInstance().getStatusBar(myProject);
String oldInfo = saveStatusBarInfo(statusBar);
Pair<String, String> oldInfo = saveStatusBarInfo(statusBar);
try {
for (final VirtualFile virtualFile : files) {
progress.checkCanceled();
@@ -313,19 +311,21 @@ public class WolfTheProblemSolverImpl extends WolfTheProblemSolver {
return true;
}
private static String saveStatusBarInfo(final StatusBar statusBar) {
String oldInfo = null;
@Nullable
private static Pair<String, String> saveStatusBarInfo(final StatusBar statusBar) {
Pair<String, String> oldInfo = null;
if (statusBar instanceof StatusBarEx) {
oldInfo = statusBar.getInfo();
oldInfo = Pair.create(statusBar.getInfo(), ((StatusBarEx)statusBar).getInfoRequestor());
}
return oldInfo;
}
private static void restoreStatusBarInfo(final StatusBar statusBar, final String oldInfo) {
private static void restoreStatusBarInfo(final StatusBar statusBar, final Pair<String, String> oldInfo) {
if (statusBar instanceof StatusBarEx) {
LaterInvocator.invokeLater(new Runnable() {
public void run() {
statusBar.setInfo(oldInfo);
statusBar.setInfo(oldInfo.first, oldInfo.second);
}
});
}
@@ -50,4 +50,7 @@ public interface StatusBarEx extends StatusBar, Disposable {
Dimension getSize();
boolean isVisible();
@Nullable
String getInfoRequestor();
}
@@ -103,6 +103,11 @@ public final class TestWindowManager extends WindowManagerEx implements Applicat
public void setInfo(@Nullable String s, @Nullable String requestor) {
}
@Override
public String getInfoRequestor() {
return null;
}
public boolean isVisible() {
return false;
}
@@ -23,6 +23,7 @@ import com.intellij.openapi.ui.popup.BalloonHandler;
import com.intellij.openapi.ui.popup.ListPopup;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.wm.CustomStatusBarWidget;
@@ -69,6 +70,7 @@ public class IdeStatusBarImpl extends JComponent implements StatusBarEx {
private JPanel myCenterPanel;
private String myInfo;
private String myRequestor;
private List<String> myCustomComponentIds = new ArrayList<String>();
@@ -377,7 +379,9 @@ public class IdeStatusBarImpl extends JComponent implements StatusBarEx {
UIUtil.invokeLaterIfNeeded(new Runnable() {
public void run() {
if (myInfoAndProgressPanel != null) {
myInfo = myInfoAndProgressPanel.setText(s, requestor);
Pair<String,String> pair = myInfoAndProgressPanel.setText(s, requestor);
myInfo = pair.first;
myRequestor = pair.second;
}
}
});
@@ -387,6 +391,11 @@ public class IdeStatusBarImpl extends JComponent implements StatusBarEx {
return myInfo;
}
@Override
public String getInfoRequestor() {
return myRequestor;
}
public void addProgress(ProgressIndicatorEx indicator, TaskInfo info) {
myInfoAndProgressPanel.addProgress(indicator, info);
}
@@ -16,7 +16,9 @@
package com.intellij.openapi.wm.impl.status;
import com.intellij.idea.ActionsBundle;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.ActionGroup;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.ActionPlaces;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.progress.TaskInfo;
import com.intellij.openapi.ui.MessageType;
@@ -24,6 +26,7 @@ import com.intellij.openapi.ui.popup.Balloon;
import com.intellij.openapi.ui.popup.BalloonHandler;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.util.MultiValuesMap;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.wm.CustomStatusBarWidget;
@@ -49,7 +52,10 @@ import javax.swing.event.HyperlinkListener;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class InfoAndProgressPanel extends JPanel implements CustomStatusBarWidget {
private final ProcessPopup myPopup;
@@ -330,17 +336,17 @@ public class InfoAndProgressPanel extends JPanel implements CustomStatusBarWidge
myRefreshAndInfoPanel.repaint();
}
public String setText(final String text, final String requestor) {
public Pair<String, String> setText(final String text, final String requestor) {
if (text == null || text.length() == 0) {
if ((requestor != null && !requestor.equals(myCurrentRequestor))
|| (myCurrentRequestor != null && !myCurrentRequestor.equals(requestor))) {
return myInfoPanel.getText();
return Pair.create(myInfoPanel.getText(), myCurrentRequestor);
}
}
myInfoPanel.setText(text);
myCurrentRequestor = requestor;
return text;
return Pair.create(text, requestor);
}
public void setRefreshVisible(final boolean visible) {