VcsBalloonProblemNotifier: balloon can be displayed over the Version Control View...
authorKirill Likhodedov <kirill.likhodedov@jetbrains.com>
Tue, 14 Sep 2010 15:56:56 +0000 (19:56 +0400)
committerKirill Likhodedov <kirill.likhodedov@jetbrains.com>
Wed, 15 Sep 2010 11:53:00 +0000 (15:53 +0400)
13 files changed:
platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateToggleAction.java
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/DiffShelvedChangesAction.java
platform/vcs-impl/src/com/intellij/openapi/vcs/impl/AbstractVcsHelperImpl.java
platform/vcs-impl/src/com/intellij/openapi/vcs/impl/projectlevelman/NewMappings.java
platform/vcs-impl/src/com/intellij/openapi/vcs/ui/VcsBalloonProblemNotifier.java
plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/actions/ToggleOfflineAction.java
plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/connections/login/CvsLoginWorkerImpl.java
plugins/git4idea/src/git4idea/history/browser/CherryPicker.java
plugins/git4idea/src/git4idea/history/browser/GitTreeController.java
plugins/svn4idea/src/org/jetbrains/idea/svn/SvnAuthenticationManager.java
plugins/svn4idea/src/org/jetbrains/idea/svn/SvnAuthenticationNotifier.java
plugins/svn4idea/src/org/jetbrains/idea/svn/branchConfig/NewRootBunch.java
plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/QuickMerge.java

index 9c82f6e9988d4623de401fe09fdd56cffad54871..6721493bbabbd4857a17a9c0ecb44944f161f79c 100644 (file)
@@ -537,7 +537,7 @@ public class AnnotateToggleAction extends ToggleAction implements DumbAware {
               targetPath[0] = pair.getSecond() == null ? new FilePathImpl(myFile) : pair.getSecond();
               final CommittedChangeList cl = pair.getFirst();
               if (cl == null) {
-                VcsBalloonProblemNotifier.showMe(myVcs.getProject(), "Can not load data for show diff", MessageType.ERROR);
+                VcsBalloonProblemNotifier.showOverChangesView(myVcs.getProject(), "Can not load data for show diff", MessageType.ERROR);
                 return;
               }
               changes.addAll(cl.getChanges());
@@ -551,7 +551,7 @@ public class AnnotateToggleAction extends ToggleAction implements DumbAware {
           @Override
           public void onSuccess() {
             if (exc[0] != null) {
-              VcsBalloonProblemNotifier.showMe(myVcs.getProject(), "Can not show diff: " + exc[0].getMessage(), MessageType.ERROR);
+              VcsBalloonProblemNotifier.showOverChangesView(myVcs.getProject(), "Can not show diff: " + exc[0].getMessage(), MessageType.ERROR);
             } else if (! changes.isEmpty()) {
               int idx = findSelfInList(changes, targetPath[0]);
               final ShowDiffUIContext context = new ShowDiffUIContext(true);
index 95c8807420a7719bd567dee8ab68f2c3cccab38e..0dd4c7767d6b1e784df4526c134a1e0ce9113d24 100644 (file)
@@ -116,7 +116,7 @@ public class DiffShelvedChangesAction extends AnAction implements DumbAware {
     }
     if (! missing.isEmpty()) {
       // 7-8
-      VcsBalloonProblemNotifier.showMe(project, "Show Diff: Cannot find base for: " + StringUtil.join(missing, ",\n"), MessageType.WARNING);
+      VcsBalloonProblemNotifier.showOverChangesView(project, "Show Diff: Cannot find base for: " + StringUtil.join(missing, ",\n"), MessageType.WARNING);
     }
 
     ShowDiffAction.showDiffImpl(project, diffRequestPresentables, toSelectIdx, new ShowDiffUIContext(false));
index 68149a55dfd49b08b60e6fc0efbb390bdde33280..7054691c0cf4b0082ca1dc7f00b5d65dab4b7490 100644 (file)
@@ -188,7 +188,7 @@ public class AbstractVcsHelperImpl extends AbstractVcsHelper {
     }
 
     public void reportException(VcsException exception) {
-      VcsBalloonProblemNotifier.showMe(myVcs.getProject(), VcsBundle.message("message.title.could.not.load.file.history") + ": " +
+      VcsBalloonProblemNotifier.showOverVersionControlView(myVcs.getProject(), VcsBundle.message("message.title.could.not.load.file.history") + ": " +
                                                                    exception.getMessage(), MessageType.ERROR);
     }
 
index 82f3dcda0e014d1ae2d44ffa656909dee0cb4f54..ad7c13d705e67d0904d9f71d10fd613f4067ec9c 100644 (file)
@@ -385,7 +385,7 @@ public class NewMappings {
       } else {
         final AbstractVcs vcs = allVcses.getByName(vcsName);
         if (vcs == null) {
-          VcsBalloonProblemNotifier.showMe(myProject, "VCS plugin not found for mapping to : '" + vcsName + "'", MessageType.ERROR);
+          VcsBalloonProblemNotifier.showOverChangesView(myProject, "VCS plugin not found for mapping to : '" + vcsName + "'", MessageType.ERROR);
           continue;
         }
         filteredFiles = vcs.filterUniqueRoots(objects, fileConvertor);
index e6af9fc093200a7f0d81668c55c67ff4d5b441a5..08caf348cd85ddd42b3123c0f79cf676086cf1a9 100644 (file)
@@ -23,6 +23,7 @@ import com.intellij.openapi.ui.MessageType;
 import com.intellij.openapi.ui.popup.Balloon;
 import com.intellij.openapi.ui.popup.JBPopupFactory;
 import com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager;
+import com.intellij.openapi.wm.ToolWindowId;
 import com.intellij.openapi.wm.ToolWindowManager;
 import com.intellij.openapi.wm.WindowManager;
 import com.intellij.ui.awt.RelativePoint;
@@ -34,23 +35,42 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 
+/**
+ * Shows a notification balloon over one of version control related tool windows: Changes View or Version Control View.
+ * By default the notification is shown over the Changes View.
+ * Use the special method or supply additional parameter to the constructor to show the balloon over the Version Control View.
+ */
 public class VcsBalloonProblemNotifier implements Runnable {
   private final Project myProject;
   private final String myMessage;
   private final MessageType myMessageType;
+  private final boolean myShowOverChangesView;
 
   public VcsBalloonProblemNotifier(final Project project, final String message, final MessageType messageType) {
+    this(project, message, messageType, true);
+  }
+
+  public VcsBalloonProblemNotifier(final Project project, final String message, final MessageType messageType, boolean showOverChangesView) {
     myProject = project;
     myMessage = message;
     myMessageType = messageType;
+    myShowOverChangesView = showOverChangesView;
+  }
+
+  public static void showOverChangesView(final Project project, final String message, final MessageType type) {
+    show(project, message, type, true);
+  }
+
+  public static void showOverVersionControlView(final Project project, final String message, final MessageType type) {
+    show(project, message, type, false);
   }
 
-  public static void showMe(final Project project, final String message, final MessageType type) {
+  private static void show(final Project project, final String message, final MessageType type, final boolean showOverChangesView) {
     final Application application = ApplicationManager.getApplication();
     if (application.isHeadlessEnvironment()) return;
     final Runnable showErrorAction = new Runnable() {
       public void run() {
-        new VcsBalloonProblemNotifier(project, message, type).run();
+        new VcsBalloonProblemNotifier(project, message, type, showOverChangesView).run();
       }
     };
     if (application.isDispatchThread()) {
@@ -77,9 +97,10 @@ public class VcsBalloonProblemNotifier implements Runnable {
 
   private void doForProject(@NotNull final Project project) {
     final ToolWindowManager manager = ToolWindowManager.getInstance(project);
-    final boolean haveWindow = (! project.isDefault()) && (manager.getToolWindow(ChangesViewContentManager.TOOLWINDOW_ID) != null);
+    final String toolWindowId = (myShowOverChangesView ? ChangesViewContentManager.TOOLWINDOW_ID : ToolWindowId.VCS);
+    final boolean haveWindow = (! project.isDefault()) && (manager.getToolWindow(toolWindowId) != null);
     if (haveWindow) {
-      manager.notifyByBalloon(ChangesViewContentManager.TOOLWINDOW_ID, myMessageType, myMessage, null, null);
+      manager.notifyByBalloon(toolWindowId, myMessageType, myMessage, null, null);
     } else {
       final JFrame frame = WindowManager.getInstance().getFrame(project.isDefault() ? null : project);
       if (frame == null) return;
index defaab5fddadd6593a1f845a856df0cf79406eff..79f0021bd62b7938a007b3b27e3749baf11be437 100644 (file)
@@ -60,7 +60,7 @@ public class ToggleOfflineAction extends ToggleAction {
       settings = entriesManager.getCvsConnectionSettingsFor(firstDirInChain);
     }
     if ((settings != null) && settings.isValid() && (state != settings.isOffline())) {
-      VcsBalloonProblemNotifier.showMe(cvsContext.getProject(),
+      VcsBalloonProblemNotifier.showOverChangesView(cvsContext.getProject(),
                                                state ? CvsBundle.message("set.offline.notification.text") :
                                                        CvsBundle.message("set.online.notification.text"),
                                                state ? MessageType.WARNING : MessageType.INFO);
index fb5a09a312d354351b474a6b6af4f2b121dec8ce..9fd3843b4472705ae17aa2265eba454616b0717a 100644 (file)
@@ -66,7 +66,7 @@ public abstract class CvsLoginWorkerImpl<T extends CvsConnectionSettings> implem
 
   public void goOffline() {
     mySettings.setOffline(true);
-    VcsBalloonProblemNotifier.showMe(myProject, CvsBundle.message("set.offline.notification.text"), MessageType.WARNING);
+    VcsBalloonProblemNotifier.showOverChangesView(myProject, CvsBundle.message("set.offline.notification.text"), MessageType.WARNING);
   }
 
   private ThreeState reportException(final AuthenticationException e) {
@@ -95,6 +95,6 @@ public abstract class CvsLoginWorkerImpl<T extends CvsConnectionSettings> implem
   }
 
   public static void showConnectionErrorMessage(final Project project, final String message) {
-    VcsBalloonProblemNotifier.showMe(project, message, MessageType.ERROR);
+    VcsBalloonProblemNotifier.showOverChangesView(project, message, MessageType.ERROR);
   }
 }
index d84f1838f2fd49c91b8c9d163245ae08c93b0b99..0cac186a1b694ddcdd6a476de7aa07633960483d 100644 (file)
@@ -96,9 +96,9 @@ public class CherryPicker {
   private void showResults() {
     if (myExceptions.isEmpty()) {
       VcsBalloonProblemNotifier
-        .showMe(myVcs.getProject(), "Successful cherry-pick into working tree, please commit changes", MessageType.INFO);
+        .showOverChangesView(myVcs.getProject(), "Successful cherry-pick into working tree, please commit changes", MessageType.INFO);
     } else {
-      VcsBalloonProblemNotifier.showMe(myVcs.getProject(), "Errors in cherry-pick", MessageType.ERROR);
+      VcsBalloonProblemNotifier.showOverChangesView(myVcs.getProject(), "Errors in cherry-pick", MessageType.ERROR);
     }
     if ((! myExceptions.isEmpty()) || (! myWarnings.isEmpty())) {
       myExceptions.addAll(myWarnings);
index 38b6d06915708139c5ad116ca7ed68e7e1d0ede5..738d7b67b550eb3ce3d93b1f5ac68b849c84a584 100644 (file)
@@ -373,7 +373,7 @@ class GitTreeController implements ManageGitTreeView {
       hash = GitChangeUtils.commitExistsByComment(myProject, myRoot, reference);
     }
     if (hash == null) {
-      VcsBalloonProblemNotifier.showMe(myProject, "Nothing found for: \"" + reference + "\"", MessageType.WARNING);
+      VcsBalloonProblemNotifier.showOverChangesView(myProject, "Nothing found for: \"" + reference + "\"", MessageType.WARNING);
     } else {
       final SHAHash finalHash = hash;
       myAlarm.addRequest(new Runnable() {
index 40dee32bd1747698ad37f64d746270f7f7a5a2a6..d59c482b00fe43d381234e27c3b664e50a4a9cb9 100644 (file)
@@ -583,17 +583,17 @@ public class SvnAuthenticationManager extends DefaultSVNAuthenticationManager im
 
     @Override
     public void warnOnAuthStorageDisabled(SVNURL url) {
-      VcsBalloonProblemNotifier.showMe(myProject, "Cannot store credentials: forbidden by \"store-auth-creds=no\"", MessageType.ERROR);
+      VcsBalloonProblemNotifier.showOverChangesView(myProject, "Cannot store credentials: forbidden by \"store-auth-creds=no\"", MessageType.ERROR);
     }
 
     @Override
     public void warnOnPasswordStorageDisabled(SVNURL url) {
-      VcsBalloonProblemNotifier.showMe(myProject, "Cannot store password: forbidden by \"store-passwords=no\"", MessageType.ERROR);
+      VcsBalloonProblemNotifier.showOverChangesView(myProject, "Cannot store password: forbidden by \"store-passwords=no\"", MessageType.ERROR);
     }
 
     @Override
     public void warnOnSSLPassphraseStorageDisabled(SVNURL url) {
-      VcsBalloonProblemNotifier.showMe(myProject, "Cannot store passphrase: forbidden by \"store-ssl-client-cert-pp=no\"", MessageType.ERROR);
+      VcsBalloonProblemNotifier.showOverChangesView(myProject, "Cannot store passphrase: forbidden by \"store-ssl-client-cert-pp=no\"", MessageType.ERROR);
     }
 
     @Override
index c2bf256f4bffcb8fa1cfd83050377cdd82f2db0c..a26a8f45b39948bb9258b77404f847ca0456ba92 100644 (file)
@@ -126,7 +126,7 @@ public class SvnAuthenticationNotifier extends GenericNotifierImpl<SvnAuthentica
   public void ensureNotify(AuthenticationRequest obj) {
     final SVNURL key = getKey(obj);
     myCopiesPassiveResults.remove(key);
-    /*VcsBalloonProblemNotifier.showMe(myVcs.getProject(), "You are not authenticated to '" + obj.getRealm() + "'." +
+    /*VcsBalloonProblemNotifier.showOverChangesView(myVcs.getProject(), "You are not authenticated to '" + obj.getRealm() + "'." +
       "To login, see pending notifications.", MessageType.ERROR);*/
     super.ensureNotify(obj);
   }
index 43eeea4548631bb25cf9aa87b47a651a3ebd3900..6c25d9bf96316980f24c495641f4a25953e05cf8 100644 (file)
@@ -166,7 +166,7 @@ public class NewRootBunch implements SvnBranchConfigManager {
       catch (SVNException e) {
         // already logged inside
         if (InfoReliability.setByUser.equals(myInfoReliability)) {
-          VcsBalloonProblemNotifier.showMe(myProject, "Branches load error: " + e.getMessage(), MessageType.ERROR);
+          VcsBalloonProblemNotifier.showOverChangesView(myProject, "Branches load error: " + e.getMessage(), MessageType.ERROR);
         }
       } finally {
         // callback must be called by contract
index 190ba8b8b4606534cf93eccea0ce568ef9cf284b..0f193f9df716659aa3d20d096d5e3f65352e5458 100644 (file)
@@ -238,7 +238,7 @@ public class QuickMerge {
     context.next(new TaskDescriptor(message, Where.AWT) {
       @Override
       public void run(ContinuationContext context) {
-        VcsBalloonProblemNotifier.showMe(myProject, message, isError ? MessageType.ERROR : MessageType.WARNING);
+        VcsBalloonProblemNotifier.showOverChangesView(myProject, message, isError ? MessageType.ERROR : MessageType.WARNING);
       }
     });
   }