diff --git a/platform/icons/src/ide/error_notifications.png b/platform/icons/src/ide/error_notifications.png new file mode 100644 index 000000000000..ef68f6af4209 Binary files /dev/null and b/platform/icons/src/ide/error_notifications.png differ diff --git a/platform/icons/src/ide/info_notifications.png b/platform/icons/src/ide/info_notifications.png new file mode 100644 index 000000000000..eab75749bbec Binary files /dev/null and b/platform/icons/src/ide/info_notifications.png differ diff --git a/platform/icons/src/ide/read_notifications.png b/platform/icons/src/ide/read_notifications.png index 2d865bb119f0..77bedbcc15e2 100644 Binary files a/platform/icons/src/ide/read_notifications.png and b/platform/icons/src/ide/read_notifications.png differ diff --git a/platform/icons/src/ide/unread_notifications.png b/platform/icons/src/ide/unread_notifications.png deleted file mode 100644 index 022bb1b3e8d1..000000000000 Binary files a/platform/icons/src/ide/unread_notifications.png and /dev/null differ diff --git a/platform/icons/src/ide/warning_notifications.png b/platform/icons/src/ide/warning_notifications.png new file mode 100644 index 000000000000..ac2d621ec097 Binary files /dev/null and b/platform/icons/src/ide/warning_notifications.png differ diff --git a/platform/platform-impl/src/com/intellij/notification/impl/NotificationModel.java b/platform/platform-impl/src/com/intellij/notification/impl/NotificationModel.java index b9e1781c3803..a4c3c69429b4 100644 --- a/platform/platform-impl/src/com/intellij/notification/impl/NotificationModel.java +++ b/platform/platform-impl/src/com/intellij/notification/impl/NotificationModel.java @@ -104,7 +104,8 @@ public class NotificationModel { private LinkedList filterNotifications(@NotNull PairFunction filter) { final LinkedList result = new LinkedList(); - final HashSet>> entries = new HashSet>>(myNotifications.entrySet()); + final HashSet>> entries = + new HashSet>>(myNotifications.entrySet()); for (final Map.Entry> entry : entries) { if (filter.fun(entry.getKey(), entry.getValue().first)) { result.addFirst(entry.getKey()); @@ -183,4 +184,24 @@ public class NotificationModel { public boolean hasRead(PairFunction filter) { return getUnreadCount(filter) < myNotifications.size(); } + + @Nullable + public NotificationType getMaximumType(PairFunction filter) { + final LinkedList notifications = filterNotifications(filter); + NotificationType result = null; + for (Notification notification : notifications) { + if (NotificationType.ERROR == notification.getType()) { + return NotificationType.ERROR; + } + + if (NotificationType.WARNING == notification.getType()) { + result = NotificationType.WARNING; + } + else if (result == null && NotificationType.INFORMATION == notification.getType()) { + result = NotificationType.INFORMATION; + } + } + + return result; + } } diff --git a/platform/platform-impl/src/com/intellij/notification/impl/NotificationsManagerImpl.java b/platform/platform-impl/src/com/intellij/notification/impl/NotificationsManagerImpl.java index ac076e5ece21..5130a80723d7 100644 --- a/platform/platform-impl/src/com/intellij/notification/impl/NotificationsManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/notification/impl/NotificationsManagerImpl.java @@ -268,6 +268,11 @@ public class NotificationsManagerImpl extends NotificationsManager implements No return myModel.getByType(type, createFilter(project, false)); } + @Nullable + public NotificationType getMaximumType(@Nullable final Project project) { + return myModel.getMaximumType(createFilter(project, false)); + } + public boolean hasUnread(@Nullable final Project project) { return myModel.hasUnread(createFilter(project, false)); } diff --git a/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationComponent.java b/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationComponent.java index c876faf73e14..29aaf0aadd1e 100644 --- a/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationComponent.java +++ b/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationComponent.java @@ -17,6 +17,7 @@ package com.intellij.notification.impl.ui; import com.intellij.concurrency.JobScheduler; import com.intellij.notification.Notification; +import com.intellij.notification.NotificationType; import com.intellij.notification.impl.*; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.JBPopup; @@ -39,7 +40,9 @@ import java.util.concurrent.TimeUnit; public class NotificationComponent extends JLabel implements NotificationModelListener { private static final Icon EMPTY_ICON = IconLoader.getIcon("/ide/notifications.png"); private static final Icon READ_ICON = IconLoader.getIcon("/ide/read_notifications.png"); - private static final Icon UNREAD_ICON = IconLoader.getIcon("/ide/unread_notifications.png"); + private static final Icon ERROR_ICON = IconLoader.getIcon("/ide/error_notifications.png"); + private static final Icon WARNING_ICON = IconLoader.getIcon("/ide/warning_notifications.png"); + private static final Icon INFO_ICON = IconLoader.getIcon("/ide/info_notifications.png"); private WeakReference myPopupRef; @@ -112,11 +115,20 @@ public class NotificationComponent extends JLabel implements NotificationModelLi final NotificationsManagerImpl manager = getManager(); Icon icon = EMPTY_ICON; - if (manager.hasUnread(getProject())) { - icon = UNREAD_ICON; - } - else if (manager.hasRead(getProject())) { - icon = READ_ICON; + final NotificationType maximumType = manager.getMaximumType(getProject()); + if (maximumType != null) { + switch (maximumType) { + case WARNING: + icon = WARNING_ICON; + break; + case ERROR: + icon = ERROR_ICON; + break; + case INFORMATION: + default: + icon = INFO_ICON; + break; + } } myCurrentIcon = new BlinkIconWrapper(icon, false);