From 05de29c9fbbc2e032aa7fc15f5cb659ecc02f707 Mon Sep 17 00:00:00 2001 From: Alexey Pegov Date: Fri, 16 Oct 2009 18:12:20 +0400 Subject: [PATCH] notifications statusbar icons --- .../icons/src/ide/error_notifications.png | Bin 0 -> 646 bytes platform/icons/src/ide/info_notifications.png | Bin 0 -> 533 bytes platform/icons/src/ide/read_notifications.png | Bin 381 -> 423 bytes .../icons/src/ide/unread_notifications.png | Bin 368 -> 0 bytes .../icons/src/ide/warning_notifications.png | Bin 0 -> 619 bytes .../notification/impl/NotificationModel.java | 23 ++++++++++++++++- .../impl/NotificationsManagerImpl.java | 5 ++++ .../impl/ui/NotificationComponent.java | 24 +++++++++++++----- 8 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 platform/icons/src/ide/error_notifications.png create mode 100644 platform/icons/src/ide/info_notifications.png delete mode 100644 platform/icons/src/ide/unread_notifications.png create mode 100644 platform/icons/src/ide/warning_notifications.png diff --git a/platform/icons/src/ide/error_notifications.png b/platform/icons/src/ide/error_notifications.png new file mode 100644 index 0000000000000000000000000000000000000000..ef68f6af420910f1a483cc045eee3b917f151961 GIT binary patch literal 646 zcmV;10(t$3P)| zP4rkS)QhotX+@~pV(_3s!CS$A2ZIO&!KzsCAS5Sy^4LRr%E1a&JXsGyRq7#!1~wMN zHfF5}Xx+_bcYL$EiAnKL=)ms0_h#Ok?|t(PUm zd|T-sa?PGIH||5dIRp3k(^M&cC-nw>*GB#7L>Gw>XLz-co2F^Hbdue5IUXI?X+y0V ztf|`-2p>*$V2fcA|3z>$J43Wzo>F>Goaa^;{JIVlKf&K92JRus`0T+ zU=I+4wuleT;jE3|otDHVN5-3KwsrhQ{%xwbTbgQ5vXf7iG(0W)5wv;b#V(d zZks(ve_DuB@DI%!4PagED~_T%Podi#Erf7hFXppic1Q<~&;hZ%y7u0v53sflM6%F9 z*Dd(q=2;_?XsJ;T_zgDAMqk$udt=Nu+XbARW{>OU z5lA&6yWs7gk3iesFueTz0gnODKy(W)Yyz_VfzbkY!GZTz7!I7ufLj97$_O=q3E8w= zEBot!uF&7LqF*0oQ>2(3!+)Qv3{m0^sJ>@Jasd-848jZhfs_++7`*%Q8BD+Z{Sh@f zp{{0uupyk?t0ok}6__giXZY}kVJE{;2F7Db7`|tOdI@a6KZgJJY`ilRQBosPVnGKs z-kFO382{aa8vx1}?A&Ytu3-gAV5b2C5uAzsqk8#2)B*pQ{@?rY<<|yCU{aW!0RjvF Xg3GSsRi?bQ00000NkvXXu0mjfT^Z%0;dCzNq3AA_os^0Fc?w1QK9kU{)el zGYA~rHvK*m1CtU&FW6~hgu{QNFo0=y4K3&Z@;n)s7#aTm1AiLKh)~anP`6?CstNTd zfd~V;R`pi^sR}}tGp?Ed4`dVr+`NiR zDJPID*xRUnhhSN>9XX&;0udNJg+wOEC~(6pEapK(;gf2WF;U8=$F}vg`~HU;sGgbia4KW?KvXQ?1pgVH{%814gaM2=eemr6e?}a^Lxc-}YF;wpHXLC9E=O)%(tQ}L zcxexQFW?G7@92^ssO&mi(ZGZ^4j372fljr>E{EiTzyJT;v+>SUL{E*|mi824(+g7j zpYh*4xB)-E{WjUa#>Eog8d{(Pa~CL-8DYVV7LvfI1!pF(LnzJ8009O7+yi0pIi4e^ P00000NkvXXu0mjf=~9vv diff --git a/platform/icons/src/ide/unread_notifications.png b/platform/icons/src/ide/unread_notifications.png deleted file mode 100644 index 022bb1b3e8d1a4dc6ecb95c171b2d2aa7e4e0b63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmV-$0gwKPP)bA%zh@2022eV5?0NtG~&S+4IJGz{XWRGa4#_64u@PQy%1dj<{c*d zj%CCt^B*}7afAP_@fm{T1)MIpjZ^YJvH`d)xrftjjKq225uwmw!RLc#Hv86rXel7X z>jg#}(I|DqDG$n=gv$v`1fnYtC>My&lVAh>G5)(}b?IkuQ4)W`1?Q8|9d~a{MrEZK4sY%Aiw~A%Um9jPxp5K O0000Y;KzXQ3EnWLYRT!>vx7sSQcPGHemOv356g!&y3;E^@j}b zB;w!#Ogxtv5WxkE1R(1U+ 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);